From 27886e53d2228c62911bedd1f99b6c6b2681b254 Mon Sep 17 00:00:00 2001 From: cooooo966 Date: Tue, 11 Jun 2024 16:23:09 +0800 Subject: [PATCH] update --- .circleci/config.yml | 169 + .clang-format | 94 + .clang-tidy | 240 + .github/ISSUE_TEMPLATE/bug_report.md | 31 + .github/ISSUE_TEMPLATE/feature_request.md | 20 + .github/stale.yml | 17 + .github/workflows/check-commit.yml | 33 + .github/workflows/docker.yml | 68 + .github/workflows/release.yml | 320 ++ .../workflow-self-hosted-arm-static-bulid.yml | 59 + .../workflows/workflow-self-hosted-arm.yml | 73 + ...rkflow-self-hosted-centos-static-build.yml | 60 + .../workflows/workflow-self-hosted-centos.yml | 79 + ...rkflow-self-hosted-ubuntu-static-build.yml | 65 + .../workflows/workflow-self-hosted-ubuntu.yml | 83 + .github/workflows/workflow.yml | 160 + .gitignore | 73 + .gitmodules | 3 + CMakeLists.txt | 115 + ChangeLog.md | 363 ++ LICENSE | 875 +--- README.md | 46 +- bcos-boostssl/CMakeLists.txt | 20 + bcos-boostssl/bcos-boostssl/context/Common.h | 54 + .../bcos-boostssl/context/ContextBuilder.cpp | 298 ++ .../bcos-boostssl/context/ContextBuilder.h | 65 + .../bcos-boostssl/context/ContextConfig.cpp | 128 + .../bcos-boostssl/context/ContextConfig.h | 90 + .../bcos-boostssl/context/NodeInfoTools.cpp | 179 + .../bcos-boostssl/context/NodeInfoTools.h | 52 + .../bcos-boostssl/httpserver/Common.h | 54 + .../bcos-boostssl/httpserver/HttpQueue.h | 79 + .../bcos-boostssl/httpserver/HttpServer.cpp | 242 + .../bcos-boostssl/httpserver/HttpServer.h | 139 + .../bcos-boostssl/httpserver/HttpSession.h | 301 ++ .../bcos-boostssl/httpserver/HttpStream.h | 270 + .../bcos-boostssl/interfaces/MessageFace.h | 71 + .../bcos-boostssl/interfaces/NodeInfoDef.h | 88 + .../bcos-boostssl/websocket/Common.h | 67 + .../bcos-boostssl/websocket/WsConfig.h | 155 + .../bcos-boostssl/websocket/WsConnector.cpp | 162 + .../bcos-boostssl/websocket/WsConnector.h | 108 + .../bcos-boostssl/websocket/WsError.h | 53 + .../bcos-boostssl/websocket/WsInitializer.cpp | 189 + .../bcos-boostssl/websocket/WsInitializer.h | 64 + .../bcos-boostssl/websocket/WsMessage.cpp | 108 + .../bcos-boostssl/websocket/WsMessage.h | 150 + .../bcos-boostssl/websocket/WsService.cpp | 731 +++ .../bcos-boostssl/websocket/WsService.h | 252 + .../bcos-boostssl/websocket/WsSession.cpp | 476 ++ .../bcos-boostssl/websocket/WsSession.h | 249 + .../bcos-boostssl/websocket/WsStream.h | 344 ++ .../bcos-boostssl/websocket/WsTools.cpp | 87 + .../bcos-boostssl/websocket/WsTools.h | 63 + bcos-boostssl/test/CMakeLists.txt | 26 + bcos-boostssl/test/exec/CMakeLists.txt | 25 + .../test/exec/boostssl_delay_perf.cpp | 248 + .../test/exec/boostssl_throughput_perf.cpp | 294 ++ .../test/exec/echo_client_sample.cpp | 150 + .../test/exec/echo_server_sample.cpp | 132 + .../test/exec/http_server_sample.cpp | 106 + bcos-boostssl/test/exec/msg_codec_perf.cpp | 96 + .../test/unittests/websocket/WsConfigTest.cpp | 91 + .../unittests/websocket/WsConnectorTest.cpp | 54 + .../unittests/websocket/WsMessageTest.cpp | 127 + bcos-codec/CMakeLists.txt | 53 + .../bcos-codec/abi/ContractABICodec.cpp | 194 + bcos-codec/bcos-codec/abi/ContractABICodec.h | 744 +++ bcos-codec/bcos-codec/abi/ContractABIType.cpp | 280 + bcos-codec/bcos-codec/abi/ContractABIType.h | 96 + bcos-codec/bcos-codec/scale/Common.h | 74 + bcos-codec/bcos-codec/scale/Exceptions.h | 31 + .../bcos-codec/scale/FixedWidthIntegerCodec.h | 132 + bcos-codec/bcos-codec/scale/Scale.h | 78 + .../bcos-codec/scale/ScaleDecoderStream.cpp | 162 + .../bcos-codec/scale/ScaleDecoderStream.h | 431 ++ .../bcos-codec/scale/ScaleEncoderStream.cpp | 156 + .../bcos-codec/scale/ScaleEncoderStream.h | 358 ++ bcos-codec/bcos-codec/wrapper/CodecWrapper.h | 125 + bcos-codec/test/CMakeLists.txt | 28 + .../test/unittests/ContractABICodecTest.cpp | 1111 ++++ bcos-codec/test/unittests/ScaleCodecTest.cpp | 1149 ++++ bcos-codec/test/unittests/main/main.cpp | 24 + bcos-crypto/CMakeLists.txt | 22 + bcos-crypto/bcos-crypto/ChecksumAddress.h | 115 + bcos-crypto/bcos-crypto/TrivialObject.h | 99 + .../bcos-crypto/digestsign/DigestSign.h | 19 + .../digestsign/OpenSSLDigestSign.h | 101 + bcos-crypto/bcos-crypto/encrypt/AESCrypto.cpp | 76 + bcos-crypto/bcos-crypto/encrypt/AESCrypto.h | 67 + bcos-crypto/bcos-crypto/encrypt/Exceptions.h | 31 + .../bcos-crypto/encrypt/HsmSM4Crypto.cpp | 76 + .../bcos-crypto/encrypt/HsmSM4Crypto.h | 69 + bcos-crypto/bcos-crypto/encrypt/SM4Crypto.cpp | 73 + bcos-crypto/bcos-crypto/encrypt/SM4Crypto.h | 66 + bcos-crypto/bcos-crypto/hash/Keccak256.h | 52 + bcos-crypto/bcos-crypto/hash/SM3.h | 52 + bcos-crypto/bcos-crypto/hash/Sha256.h | 51 + bcos-crypto/bcos-crypto/hash/Sha3.h | 52 + bcos-crypto/bcos-crypto/hasher/AnyHasher.h | 12 + bcos-crypto/bcos-crypto/hasher/Hasher.h | 26 + .../bcos-crypto/hasher/IPPCryptoHasher.h | 98 + .../bcos-crypto/hasher/OpenSSLHasher.h | 150 + .../interfaces/crypto/CommonType.h | 32 + .../interfaces/crypto/CryptoSuite.h | 71 + .../bcos-crypto/interfaces/crypto/Hash.h | 78 + .../interfaces/crypto/KeyFactory.h | 38 + .../interfaces/crypto/KeyInterface.h | 66 + .../interfaces/crypto/KeyPairFactory.h | 37 + .../interfaces/crypto/KeyPairInterface.h | 51 + .../bcos-crypto/interfaces/crypto/Signature.h | 61 + .../interfaces/crypto/SymmetricEncryption.h | 56 + bcos-crypto/bcos-crypto/merkle/Merkle.h | 264 + .../bcos-crypto/signature/Exceptions.h | 36 + .../signature/codec/SignatureData.h | 70 + .../signature/codec/SignatureDataWithPub.h | 70 + .../signature/codec/SignatureDataWithV.h | 67 + .../signature/ed25519/Ed25519Crypto.cpp | 139 + .../signature/ed25519/Ed25519Crypto.h | 76 + .../signature/ed25519/Ed25519KeyPair.cpp | 41 + .../signature/ed25519/Ed25519KeyPair.h | 47 + .../signature/fastsm2/FastSM2Crypto.h | 48 + .../signature/fastsm2/FastSM2KeyPair.h | 41 + .../signature/fastsm2/FastSM2KeyPairFactory.h | 53 + .../signature/fastsm2/fast_sm2.cpp | 307 ++ .../bcos-crypto/signature/fastsm2/fast_sm2.h | 43 + .../signature/hsmSM2/HsmSM2Crypto.cpp | 205 + .../signature/hsmSM2/HsmSM2Crypto.h | 61 + .../signature/hsmSM2/HsmSM2KeyPair.cpp | 76 + .../signature/hsmSM2/HsmSM2KeyPair.h | 74 + .../signature/hsmSM2/HsmSM2KeyPairFactory.h | 62 + .../signature/key/KeyFactoryImpl.h | 47 + .../bcos-crypto/signature/key/KeyImpl.h | 79 + .../bcos-crypto/signature/key/KeyPair.h | 67 + .../signature/secp256k1/Secp256k1Crypto.cpp | 136 + .../signature/secp256k1/Secp256k1Crypto.h | 74 + .../signature/secp256k1/Secp256k1KeyPair.cpp | 38 + .../signature/secp256k1/Secp256k1KeyPair.h | 49 + bcos-crypto/bcos-crypto/signature/sm2.cpp | 68 + bcos-crypto/bcos-crypto/signature/sm2.h | 39 + .../bcos-crypto/signature/sm2/SM2Crypto.cpp | 127 + .../bcos-crypto/signature/sm2/SM2Crypto.h | 70 + .../bcos-crypto/signature/sm2/SM2KeyPair.cpp | 51 + .../bcos-crypto/signature/sm2/SM2KeyPair.h | 49 + .../signature/sm2/SM2KeyPairFactory.h | 62 + bcos-crypto/bcos-crypto/zkp/Common.h | 41 + bcos-crypto/bcos-crypto/zkp/Exceptions.h | 31 + .../zkp/discretezkp/DiscreteLogarithmZkp.cpp | 161 + .../zkp/discretezkp/DiscreteLogarithmZkp.h | 69 + bcos-crypto/demo/CMakeLists.txt | 15 + bcos-crypto/demo/hasher_test.cpp | 107 + bcos-crypto/demo/perf_demo.cpp | 369 ++ bcos-crypto/test/CMakeLists.txt | 29 + bcos-crypto/test/unittests/EncryptionTest.cpp | 106 + bcos-crypto/test/unittests/HashTest.cpp | 126 + bcos-crypto/test/unittests/HasherTest.cpp | 129 + bcos-crypto/test/unittests/SignatureTest.cpp | 392 ++ bcos-crypto/test/unittests/ZkpTest.cpp | 221 + bcos-crypto/test/unittests/main.cpp | 23 + bcos-crypto/test/unittests/testMerkle.cpp | 168 + bcos-executor/CMakeLists.txt | 36 + bcos-executor/src/CallParameters.h | 125 + bcos-executor/src/Common.cpp | 91 + bcos-executor/src/Common.h | 283 + bcos-executor/src/dag/Abi.cpp | 202 + bcos-executor/src/dag/Abi.h | 83 + bcos-executor/src/dag/ClockCache.cpp | 247 + bcos-executor/src/dag/ClockCache.h | 307 ++ bcos-executor/src/dag/CriticalFields.h | 132 + bcos-executor/src/dag/DAG.cpp | 148 + bcos-executor/src/dag/DAG.h | 88 + bcos-executor/src/dag/ScaleUtils.cpp | 268 + bcos-executor/src/dag/ScaleUtils.h | 38 + bcos-executor/src/dag/TxDAG2.cpp | 94 + bcos-executor/src/dag/TxDAG2.h | 57 + bcos-executor/src/dag/TxDAGInterface.h | 69 + bcos-executor/src/executive/BlockContext.cpp | 137 + bcos-executor/src/executive/BlockContext.h | 157 + .../CoroutineTransactionExecutive.cpp | 138 + .../executive/CoroutineTransactionExecutive.h | 119 + .../src/executive/ExecutiveFactory.cpp | 66 + .../src/executive/ExecutiveFactory.h | 71 + .../src/executive/ExecutiveFlowInterface.h | 102 + .../src/executive/ExecutiveSerialFlow.cpp | 125 + .../src/executive/ExecutiveSerialFlow.h | 95 + .../src/executive/ExecutiveStackFlow.cpp | 223 + .../src/executive/ExecutiveStackFlow.h | 118 + .../src/executive/ExecutiveState.cpp | 102 + bcos-executor/src/executive/ExecutiveState.h | 71 + bcos-executor/src/executive/LedgerCache.h | 109 + .../src/executive/SyncStorageWrapper.h | 117 + .../src/executive/TransactionExecutive.cpp | 1501 ++++++ .../src/executive/TransactionExecutive.h | 232 + bcos-executor/src/executor/ExecuteOutputs.h | 74 + .../src/executor/SwitchExecutorManager.h | 667 +++ .../src/executor/TransactionExecutor.cpp | 2776 ++++++++++ .../src/executor/TransactionExecutor.h | 344 ++ .../src/executor/TransactionExecutorFactory.h | 128 + .../src/precompiled/BFSPrecompiled.cpp | 1047 ++++ .../src/precompiled/BFSPrecompiled.h | 65 + .../src/precompiled/CastPrecompiled.cpp | 152 + .../src/precompiled/CastPrecompiled.h | 21 + .../src/precompiled/ConsensusPrecompiled.cpp | 399 ++ .../src/precompiled/ConsensusPrecompiled.h | 57 + .../src/precompiled/CryptoPrecompiled.cpp | 196 + .../src/precompiled/CryptoPrecompiled.h | 57 + .../src/precompiled/KVTablePrecompiled.cpp | 145 + .../src/precompiled/KVTablePrecompiled.h | 58 + .../precompiled/SystemConfigPrecompiled.cpp | 291 ++ .../src/precompiled/SystemConfigPrecompiled.h | 61 + .../precompiled/TableManagerPrecompiled.cpp | 442 ++ .../src/precompiled/TableManagerPrecompiled.h | 72 + .../src/precompiled/TablePrecompiled.cpp | 1193 +++++ .../src/precompiled/TablePrecompiled.h | 103 + bcos-executor/src/precompiled/common/Common.h | 195 + .../src/precompiled/common/Condition.h | 96 + .../src/precompiled/common/PrecompiledAbi.h | 33 + .../src/precompiled/common/PrecompiledGas.cpp | 80 + .../src/precompiled/common/PrecompiledGas.h | 163 + .../precompiled/common/PrecompiledResult.h | 88 + .../src/precompiled/common/Utilities.cpp | 407 ++ .../src/precompiled/common/Utilities.h | 147 + .../extension/AccountManagerPrecompiled.cpp | 248 + .../extension/AccountManagerPrecompiled.h | 55 + .../extension/AccountPrecompiled.cpp | 181 + .../extension/AccountPrecompiled.h | 52 + .../extension/AuthManagerPrecompiled.cpp | 794 +++ .../extension/AuthManagerPrecompiled.h | 97 + .../extension/ContractAuthMgrPrecompiled.cpp | 821 +++ .../extension/ContractAuthMgrPrecompiled.h | 113 + .../extension/CpuHeavyPrecompiled.cpp | 104 + .../extension/CpuHeavyPrecompiled.h | 78 + .../extension/DagTransferPrecompiled.cpp | 519 ++ .../extension/DagTransferPrecompiled.h | 76 + .../extension/GroupSigPrecompiled.cpp | 99 + .../extension/GroupSigPrecompiled.h | 41 + .../extension/HelloWorldPrecompiled.cpp | 128 + .../extension/HelloWorldPrecompiled.h | 42 + .../PermissionPrecompiledInterface.h | 71 + .../extension/RingSigPrecompiled.cpp | 99 + .../extension/RingSigPrecompiled.h | 41 + .../extension/SmallBankPrecompiled.cpp | 300 ++ .../extension/SmallBankPrecompiled.h | 109 + .../precompiled/extension/UserPrecompiled.h | 31 + .../precompiled/extension/ZkpPrecompiled.cpp | 303 ++ .../precompiled/extension/ZkpPrecompiled.h | 82 + .../src/precompiled/solidity/Account.sol | 23 + .../precompiled/solidity/BfsPrecompiled.sol | 28 + .../src/precompiled/solidity/Cast.sol | 17 + .../solidity/ConsensusPrecompiled.sol | 9 + .../solidity/ContractAuthPrecompiled.sol | 27 + .../src/precompiled/solidity/Crypto.sol | 11 + .../src/precompiled/solidity/EntryWrapper.sol | 101 + .../solidity/GroupSigPrecompiled.sol | 6 + .../solidity/RingSigPrecompiled.sol | 6 + .../solidity/SystemConfigPrecompiled.sol | 8 + .../src/precompiled/solidity/Table.sol | 85 + .../precompiled/solidity/ZkpPrecompiled.sol | 15 + bcos-executor/src/vm/DelegateHostContext.cpp | 41 + bcos-executor/src/vm/DelegateHostContext.h | 49 + bcos-executor/src/vm/EVMHostInterface.cpp | 373 ++ bcos-executor/src/vm/EVMHostInterface.h | 40 + bcos-executor/src/vm/HostContext.cpp | 580 +++ bcos-executor/src/vm/HostContext.h | 183 + bcos-executor/src/vm/Precompiled.cpp | 487 ++ bcos-executor/src/vm/Precompiled.h | 211 + bcos-executor/src/vm/VMFactory.cpp | 106 + bcos-executor/src/vm/VMFactory.h | 69 + bcos-executor/src/vm/VMInstance.cpp | 84 + bcos-executor/src/vm/VMInstance.h | 94 + .../src/vm/gas_meter/GasInjector.cpp | 566 ++ bcos-executor/src/vm/gas_meter/GasInjector.h | 88 + bcos-executor/src/vm/gas_meter/Metric.cpp | 250 + bcos-executor/src/vm/gas_meter/Metric.h | 50 + bcos-executor/test/CMakeLists.txt | 1 + bcos-executor/test/flow-graph/CMakeLists.txt | 4 + bcos-executor/test/flow-graph/main.cpp | 81 + bcos-executor/test/liquid/hello_world.h | 894 ++++ bcos-executor/test/liquid/hello_world.rs | 29 + bcos-executor/test/liquid/hello_world.wasm | Bin 0 -> 10661 bytes .../test/liquid/hello_world_caller.h | 820 +++ .../test/liquid/hello_world_caller.rs | 38 + .../test/liquid/hello_world_caller.wasm | Bin 0 -> 9769 bytes bcos-executor/test/liquid/transfer.h | 1071 ++++ bcos-executor/test/liquid/transfer.rs | 39 + bcos-executor/test/liquid/transfer.wasm | Bin 0 -> 17073 bytes bcos-executor/test/old/EVMPrecompiledTest.cpp | 1743 +++++++ bcos-executor/test/old/MemoryStorage.h | 183 + bcos-executor/test/old/StateTest.cpp | 225 + .../test/old/libexecutor/DAGTest.cpp | 180 + .../test/old/libexecutor/ExecutorTest.cpp | 325 ++ bcos-executor/test/old/mock/MemoryStorage.h | 307 ++ bcos-executor/test/old/mock/MockDispatcher.h | 94 + bcos-executor/test/old/mock/MockLedger.h | 74 + bcos-executor/test/solidity/ParallelOk.sol | 31 + .../test/solidity/TestEvmPrecompiled.sol | 282 + .../precompiled/ConsensusPrecompiled.sol | 9 + .../test/solidity/precompiled/Crypto.sol | 11 + .../precompiled/SystemConfigPrecompiled.sol | 8 + bcos-executor/test/solidity/test_config.sol | 56 + bcos-executor/test/solidity/test_crypto.sol | 31 + .../test/solidity/test_external_call.sol | 33 + bcos-executor/test/trie-test/CMakeLists.txt | 4 + bcos-executor/test/trie-test/main.cpp | 80 + bcos-executor/test/unittest/CMakeLists.txt | 26 + .../test/unittest/container/TestHashMap.cpp | 93 + .../unittest/libexecutor/TestAbiReader.cpp | 246 + .../unittest/libexecutor/TestBlockContext.cpp | 75 + .../unittest/libexecutor/TestClockCache.cpp | 155 + .../unittest/libexecutor/TestDagExecutor.cpp | 1148 ++++ .../unittest/libexecutor/TestEVMExecutor.cpp | 1809 +++++++ .../libexecutor/TestExecutiveStackFlow.cpp | 231 + .../libexecutor/TestExecutiveState.cpp | 153 + .../unittest/libexecutor/TestLedgerCache.cpp | 85 + .../unittest/libexecutor/TestScaleUtils.cpp | 129 + .../test/unittest/libexecutor/TestTxDAG.cpp | 245 + .../unittest/libexecutor/TestWasmExecutor.cpp | 1325 +++++ .../test/unittest/libexecutor/TxDAG.cpp | 115 + .../test/unittest/libexecutor/TxDAG.h | 85 + .../libprecompiled/AccountPrecompiledTest.cpp | 875 ++++ .../libprecompiled/AuthPrecompiledTest.cpp | 2055 ++++++++ .../libprecompiled/ConfigPrecompiledTest.cpp | 552 ++ .../libprecompiled/CryptoPrecompiledTest.cpp | 402 ++ .../libprecompiled/EVMStateContextTest.cpp | 467 ++ .../FileSystemPrecompiledTest.cpp | 1814 +++++++ .../GroupSigPrecompiledTest.cpp | 255 + .../libprecompiled/KVTablePrecompiledTest.cpp | 496 ++ .../libprecompiled/PreCompiledFixture.h | 720 +++ .../libprecompiled/PrecompiledCallTest.cpp | 101 + .../libprecompiled/PrecompiledGas.cpp | 109 + .../libprecompiled/RingSigPrecompiledTest.cpp | 208 + .../libprecompiled/TablePrecompiledTest.cpp | 1474 ++++++ .../TablePrecompiledV320Test.cpp | 4597 +++++++++++++++++ .../unittest/libprecompiled/UtilitiesTest.cpp | 80 + .../libprecompiled/VRFPrecompiledTest.cpp | 171 + bcos-executor/test/unittest/libvm/.gitignore | 1 + .../libvm/TestTransactionExecutive.cpp | 21 + .../test/unittest/libvm/WasmPath.h.in | 7 + bcos-executor/test/unittest/main.cpp | 25 + bcos-executor/test/unittest/mock/MockBlock.h | 60 + .../test/unittest/mock/MockBlockHeader.h | 56 + .../test/unittest/mock/MockExecutiveFactory.h | 49 + .../test/unittest/mock/MockExecutiveFlow.h | 35 + .../test/unittest/mock/MockKeyPageStorage.h | 133 + bcos-executor/test/unittest/mock/MockLedger.h | 148 + .../unittest/mock/MockTransactionExecutive.h | 52 + .../unittest/mock/MockTransactionalStorage.h | 107 + bcos-executor/test/unittest/mock/MockTxPool.h | 70 + bcos-executor/test/wasm/infinit_loop.wasm | Bin 0 -> 267 bytes .../wasm/metric_infinit_loop_global_gas.wasm | Bin 0 -> 194 bytes .../test/wasm/metric_infinit_loop_useGas.wasm | Bin 0 -> 145 bytes bcos-executor/tools/CMakeLists.txt | 5 + bcos-executor/tools/inject_meter.cpp | 90 + bcos-framework/CMakeLists.txt | 49 + bcos-framework/bcos-framework/Common.h | 31 + .../consensus/ConsensusInterface.h | 86 + .../bcos-framework/consensus/ConsensusNode.h | 47 + .../consensus/ConsensusNodeInterface.h | 66 + .../consensus/ConsensusTypeDef.h | 28 + .../dispatcher/SchedulerInterface.h | 81 + .../dispatcher/SchedulerTypeDef.h | 50 + .../bcos-framework/election/FailOverTypeDef.h | 28 + .../election/LeaderElectionInterface.h | 65 + .../election/LeaderEntryPointInterface.h | 58 + .../bcos-framework/executor/ExecuteError.h | 25 + .../executor/ExecutionMessage.h | 210 + .../bcos-framework/executor/ExecutorStatus.h | 52 + .../executor/NativeExecutionMessage.h | 177 + .../ParallelTransactionExecutorInterface.h | 137 + .../executor/PrecompiledTypeDef.h | 124 + .../front/FrontServiceInterface.h | 137 + .../bcos-framework/gateway/GatewayInterface.h | 142 + .../bcos-framework/gateway/GatewayTypeDef.h | 161 + .../bcos-framework/gateway/GroupNodeInfo.h | 58 + .../bcos-framework/ledger/GenesisConfig.h | 103 + .../bcos-framework/ledger/LedgerConfig.h | 118 + .../bcos-framework/ledger/LedgerInterface.h | 172 + .../bcos-framework/ledger/LedgerTypeDef.h | 82 + .../bcos-framework/multigroup/ChainNodeInfo.h | 160 + .../multigroup/ChainNodeInfoFactory.h | 40 + .../bcos-framework/multigroup/GroupInfo.h | 151 + .../multigroup/GroupInfoCodec.h | 42 + .../multigroup/GroupInfoFactory.h | 41 + .../bcos-framework/multigroup/GroupTypeDef.h | 35 + .../bcos-framework/protocol/AMOPRequest.h | 141 + .../bcos-framework/protocol/Block.h | 125 + .../bcos-framework/protocol/BlockFactory.h | 62 + .../bcos-framework/protocol/BlockHeader.h | 145 + .../protocol/BlockHeaderFactory.h | 56 + .../bcos-framework/protocol/CommonError.h | 46 + .../bcos-framework/protocol/Exceptions.h | 51 + .../bcos-framework/protocol/GlobalConfig.h | 92 + .../bcos-framework/protocol/LogEntry.h | 69 + .../bcos-framework/protocol/MemberInterface.h | 68 + .../bcos-framework/protocol/Protocol.h | 257 + .../bcos-framework/protocol/ProtocolInfo.h | 65 + .../protocol/ProtocolInfoCodec.h | 41 + .../bcos-framework/protocol/ProtocolTypeDef.h | 108 + .../bcos-framework/protocol/ServiceDesc.h | 138 + .../bcos-framework/protocol/Transaction.h | 184 + .../protocol/TransactionFactory.h | 48 + .../protocol/TransactionMetaData.h | 55 + .../protocol/TransactionReceipt.h | 57 + .../protocol/TransactionReceiptFactory.h | 45 + .../protocol/TransactionSubmitResult.h | 61 + .../protocol/TransactionSubmitResultFactory.h | 40 + .../bcos-framework/rpc/HandshakeRequest.h | 98 + .../bcos-framework/rpc/RPCInterface.h | 81 + .../bcos-framework/sealer/SealerInterface.h | 52 + .../security/DataEncryptInterface.h | 52 + .../bcos-framework/storage/Common.h | 274 + bcos-framework/bcos-framework/storage/Entry.h | 353 ++ .../bcos-framework/storage/KVStorageHelper.h | 90 + .../bcos-framework/storage/StorageInterface.h | 145 + bcos-framework/bcos-framework/storage/Table.h | 81 + .../bcos-framework/sync/BlockSyncInterface.h | 58 + .../bcos-framework/sync/SyncConfig.h | 175 + .../testutils/TestPromptFixture.h | 93 + .../testutils/faker/FakeFrontService.h | 234 + .../testutils/faker/FakeKVStorage.h | 111 + .../testutils/faker/FakeLedger.h | 379 ++ .../testutils/faker/FakeScheduler.h | 94 + .../testutils/faker/FakeSealer.h | 76 + .../testutils/faker/FakeTxPool.h | 114 + .../bcos-framework/txpool/TxPoolInterface.h | 151 + .../bcos-framework/txpool/TxPoolTypeDef.h | 33 + bcos-framework/test/CMakeLists.txt | 29 + .../interfaces/ConsensusNodeTest.cpp | 146 + .../unittests/interfaces/ExecutorTest.cpp | 60 + bcos-framework/test/unittests/main/main.cpp | 24 + bcos-front/CMakeLists.txt | 40 + bcos-front/bcos-front/Common.h | 22 + bcos-front/bcos-front/FrontImpl.h | 191 + bcos-front/bcos-front/FrontMessage.cpp | 89 + bcos-front/bcos-front/FrontMessage.h | 107 + bcos-front/bcos-front/FrontService.cpp | 675 +++ bcos-front/bcos-front/FrontService.h | 306 ++ bcos-front/bcos-front/FrontServiceFactory.cpp | 61 + bcos-front/bcos-front/FrontServiceFactory.h | 60 + bcos-front/test/CMakeLists.txt | 27 + bcos-front/test/unittests/FakeGateway.cpp | 81 + bcos-front/test/unittests/FakeGateway.h | 128 + .../test/unittests/FrontMessageTest.cpp | 230 + .../test/unittests/FrontServiceTest.cpp | 323 ++ bcos-gateway/CMakeLists.txt | 53 + bcos-gateway/bcos-gateway/Common.h | 46 + bcos-gateway/bcos-gateway/Gateway.cpp | 551 ++ bcos-gateway/bcos-gateway/Gateway.h | 213 + bcos-gateway/bcos-gateway/GatewayConfig.cpp | 764 +++ bcos-gateway/bcos-gateway/GatewayConfig.h | 235 + bcos-gateway/bcos-gateway/GatewayFactory.cpp | 911 ++++ bcos-gateway/bcos-gateway/GatewayFactory.h | 144 + .../bcos-gateway/gateway/FrontServiceInfo.h | 77 + .../gateway/GatewayMessageExtAttributes.h | 34 + .../gateway/GatewayNodeManager.cpp | 333 ++ .../bcos-gateway/gateway/GatewayNodeManager.h | 117 + .../bcos-gateway/gateway/GatewayStatus.cpp | 144 + .../bcos-gateway/gateway/GatewayStatus.h | 72 + .../bcos-gateway/gateway/LocalRouterTable.cpp | 297 ++ .../bcos-gateway/gateway/LocalRouterTable.h | 76 + .../bcos-gateway/gateway/PeersRouterTable.cpp | 293 ++ .../bcos-gateway/gateway/PeersRouterTable.h | 98 + .../gateway/ProGatewayNodeManager.cpp | 46 + .../gateway/ProGatewayNodeManager.h | 62 + .../bcos-gateway/libamop/AMOPImpl.cpp | 574 ++ bcos-gateway/bcos-gateway/libamop/AMOPImpl.h | 158 + .../bcos-gateway/libamop/AMOPMessage.cpp | 73 + .../bcos-gateway/libamop/AMOPMessage.h | 85 + .../bcos-gateway/libamop/AirTopicManager.h | 48 + bcos-gateway/bcos-gateway/libamop/Common.h | 73 + .../bcos-gateway/libamop/TopicManager.cpp | 488 ++ .../bcos-gateway/libamop/TopicManager.h | 175 + .../bcos-gateway/libnetwork/ASIOInterface.cpp | 36 + .../bcos-gateway/libnetwork/ASIOInterface.h | 187 + bcos-gateway/bcos-gateway/libnetwork/Common.h | 140 + bcos-gateway/bcos-gateway/libnetwork/Host.cpp | 554 ++ bcos-gateway/bcos-gateway/libnetwork/Host.h | 219 + .../bcos-gateway/libnetwork/Message.h | 90 + .../PeerBlackWhitelistInterface.cpp | 67 + .../libnetwork/PeerBlackWhitelistInterface.h | 48 + .../bcos-gateway/libnetwork/PeerBlacklist.h | 27 + .../bcos-gateway/libnetwork/PeerWhitelist.h | 27 + .../bcos-gateway/libnetwork/Session.cpp | 632 +++ .../bcos-gateway/libnetwork/Session.h | 184 + .../bcos-gateway/libnetwork/SessionCallback.h | 139 + .../bcos-gateway/libnetwork/SessionFace.h | 54 + bcos-gateway/bcos-gateway/libnetwork/Socket.h | 86 + .../bcos-gateway/libnetwork/SocketFace.h | 38 + bcos-gateway/bcos-gateway/libp2p/Common.h | 28 + .../bcos-gateway/libp2p/P2PInterface.h | 104 + .../bcos-gateway/libp2p/P2PMessage.cpp | 352 ++ bcos-gateway/bcos-gateway/libp2p/P2PMessage.h | 259 + .../bcos-gateway/libp2p/P2PMessageV2.cpp | 100 + .../bcos-gateway/libp2p/P2PMessageV2.h | 56 + .../bcos-gateway/libp2p/P2PSession.cpp | 89 + bcos-gateway/bcos-gateway/libp2p/P2PSession.h | 78 + bcos-gateway/bcos-gateway/libp2p/Service.cpp | 684 +++ bcos-gateway/bcos-gateway/libp2p/Service.h | 268 + .../bcos-gateway/libp2p/ServiceV2.cpp | 383 ++ bcos-gateway/bcos-gateway/libp2p/ServiceV2.h | 112 + .../libp2p/router/RouterTableImpl.cpp | 249 + .../libp2p/router/RouterTableImpl.h | 128 + .../libp2p/router/RouterTableInterface.h | 81 + .../libratelimit/DistributedRateLimiter.cpp | 263 + .../libratelimit/DistributedRateLimiter.h | 246 + .../libratelimit/GatewayRateLimiter.cpp | 161 + .../libratelimit/GatewayRateLimiter.h | 114 + .../libratelimit/ModuleWhiteList.h | 111 + .../libratelimit/RateLimiterFactory.h | 79 + .../libratelimit/RateLimiterInterface.h | 76 + .../libratelimit/RateLimiterManager.cpp | 162 + .../libratelimit/RateLimiterManager.h | 101 + .../libratelimit/RateLimiterStat.cpp | 301 ++ .../libratelimit/RateLimiterStat.h | 134 + .../libratelimit/TokenBucketRateLimiter.cpp | 168 + .../libratelimit/TokenBucketRateLimiter.h | 116 + .../protocol/GatewayNodeStatus.cpp | 61 + .../bcos-gateway/protocol/GatewayNodeStatus.h | 82 + bcos-gateway/test/CMakeLists.txt | 40 + .../test/common/FrontServiceBuilder.h | 61 + bcos-gateway/test/integtests/GatewayTest.cpp | 155 + bcos-gateway/test/main/CMakeLists.txt | 7 + bcos-gateway/test/main/main.cpp | 134 + .../test/unittests/GatewayConfigTest.cpp | 321 ++ .../test/unittests/GatewayFactoryTest.cpp | 96 + .../test/unittests/GatewayMessageTest.cpp | 488 ++ .../test/unittests/GatewayNodeManagerTest.cpp | 449 ++ .../test/unittests/ModuleWhiteListTest.cpp | 52 + .../test/unittests/RateLimiterManagerTest.cpp | 330 ++ .../test/unittests/amop/AMOPMessageTest.cpp | 104 + .../test/unittests/amop/TopicManagerTest.cpp | 139 + bcos-gateway/test/unittests/data/ca/ca.crt | 31 + bcos-gateway/test/unittests/data/ca/node.crt | 30 + bcos-gateway/test/unittests/data/ca/node.key | 52 + .../unittests/data/config/config_ipv4.ini | 57 + .../unittests/data/config/config_ipv6.ini | 49 + .../data/config/json/nodes_ipv4.json | 1 + .../data/config/json/nodes_ipv6.json | 1 + .../test/unittests/data/sm_ca/sm_ca.crt | 12 + .../test/unittests/data/sm_ca/sm_ennode.crt | 11 + .../test/unittests/data/sm_ca/sm_ennode.key | 5 + .../test/unittests/data/sm_ca/sm_node.crt | 35 + .../test/unittests/data/sm_ca/sm_node.key | 5 + .../test/unittests/data/sm_ca/sm_node.nodeid | 1 + bcos-leader-election/CMakeLists.txt | 31 + bcos-leader-election/src/CampaignConfig.cpp | 145 + bcos-leader-election/src/CampaignConfig.h | 118 + bcos-leader-election/src/Common.h | 21 + bcos-leader-election/src/ElectionConfig.cpp | 92 + bcos-leader-election/src/ElectionConfig.h | 110 + bcos-leader-election/src/LeaderElection.cpp | 249 + bcos-leader-election/src/LeaderElection.h | 95 + .../src/LeaderElectionFactory.h | 63 + bcos-leader-election/src/LeaderEntryPoint.h | 91 + bcos-leader-election/src/WatcherConfig.cpp | 150 + bcos-leader-election/src/WatcherConfig.h | 107 + bcos-ledger/CMakeLists.txt | 40 + bcos-ledger/src/libledger/Ledger.cpp | 1963 +++++++ bcos-ledger/src/libledger/Ledger.h | 157 + bcos-ledger/src/libledger/LedgerImpl.h | 653 +++ bcos-ledger/src/libledger/utilities/Common.h | 54 + bcos-ledger/test/CMakeLists.txt | 34 + bcos-ledger/test/main/main.cpp | 31 + bcos-ledger/test/mock/MockKeyFactor.h | 102 + bcos-ledger/test/mock/MockStorage.h | 460 ++ bcos-ledger/test/mock/MockTable.h | 101 + .../test/unittests/ledger/LedgerImplTest.cpp | 382 ++ .../test/unittests/ledger/LedgerTest.cpp | 1212 +++++ .../test/unittests/ledger/common/FakeBlock.h | 159 + .../unittests/ledger/common/FakeBlockHeader.h | 133 + .../unittests/ledger/common/FakeReceipt.h | 90 + .../unittests/ledger/common/FakeTransaction.h | 112 + bcos-pbft/CMakeLists.txt | 62 + bcos-pbft/bcos-pbft/core/Common.h | 30 + bcos-pbft/bcos-pbft/core/ConsensusConfig.cpp | 158 + bcos-pbft/bcos-pbft/core/ConsensusConfig.h | 170 + bcos-pbft/bcos-pbft/core/ConsensusEngine.h | 87 + bcos-pbft/bcos-pbft/core/Proposal.h | 156 + bcos-pbft/bcos-pbft/core/StateMachine.cpp | 182 + bcos-pbft/bcos-pbft/core/StateMachine.h | 71 + .../bcos-pbft/core/proto/Consensus.proto | 16 + .../framework/ConsensusConfigInterface.h | 56 + .../framework/ConsensusEngineInterface.h | 40 + .../bcos-pbft/framework/ProposalInterface.h | 72 + .../framework/StateMachineInterface.h | 41 + bcos-pbft/bcos-pbft/pbft/PBFTFactory.cpp | 82 + bcos-pbft/bcos-pbft/pbft/PBFTFactory.h | 58 + bcos-pbft/bcos-pbft/pbft/PBFTImpl.cpp | 190 + bcos-pbft/bcos-pbft/pbft/PBFTImpl.h | 162 + bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.cpp | 393 ++ bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.h | 222 + .../bcos-pbft/pbft/cache/PBFTCacheFactory.h | 41 + .../pbft/cache/PBFTCacheProcessor.cpp | 1320 +++++ .../bcos-pbft/pbft/cache/PBFTCacheProcessor.h | 284 + .../bcos-pbft/pbft/config/PBFTConfig.cpp | 476 ++ bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.h | 470 ++ .../bcos-pbft/pbft/engine/BlockValidator.cpp | 182 + .../bcos-pbft/pbft/engine/BlockValidator.h | 58 + .../bcos-pbft/pbft/engine/PBFTEngine.cpp | 1660 ++++++ bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.h | 245 + .../bcos-pbft/pbft/engine/PBFTLogSync.cpp | 189 + bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.h | 76 + bcos-pbft/bcos-pbft/pbft/engine/PBFTTimer.h | 80 + bcos-pbft/bcos-pbft/pbft/engine/Validator.cpp | 132 + bcos-pbft/bcos-pbft/pbft/engine/Validator.h | 246 + .../pbft/interfaces/NewViewMsgInterface.h | 42 + .../interfaces/PBFTBaseMessageInterface.h | 80 + .../pbft/interfaces/PBFTCodecInterface.h | 43 + .../pbft/interfaces/PBFTMessageFactory.h | 144 + .../pbft/interfaces/PBFTMessageInterface.h | 46 + .../pbft/interfaces/PBFTProposalInterface.h | 53 + .../pbft/interfaces/PBFTRequestInterface.h | 38 + .../bcos-pbft/pbft/interfaces/PBFTStorage.h | 55 + .../pbft/interfaces/ViewChangeMsgInterface.h | 44 + .../pbft/protocol/PB/PBFTBaseMessage.h | 153 + .../bcos-pbft/pbft/protocol/PB/PBFTCodec.cpp | 106 + .../bcos-pbft/pbft/protocol/PB/PBFTCodec.h | 59 + .../pbft/protocol/PB/PBFTMessage.cpp | 140 + .../bcos-pbft/pbft/protocol/PB/PBFTMessage.h | 124 + .../pbft/protocol/PB/PBFTMessageFactoryImpl.h | 89 + .../pbft/protocol/PB/PBFTNewViewMsg.cpp | 81 + .../pbft/protocol/PB/PBFTNewViewMsg.h | 88 + .../bcos-pbft/pbft/protocol/PB/PBFTProposal.h | 115 + .../bcos-pbft/pbft/protocol/PB/PBFTRequest.h | 76 + .../pbft/protocol/PB/PBFTViewChangeMsg.cpp | 89 + .../pbft/protocol/PB/PBFTViewChangeMsg.h | 91 + .../bcos-pbft/pbft/protocol/proto/PBFT.proto | 69 + .../bcos-pbft/pbft/storage/LedgerStorage.cpp | 457 ++ .../bcos-pbft/pbft/storage/LedgerStorage.h | 122 + bcos-pbft/bcos-pbft/pbft/utilities/Common.h | 48 + bcos-pbft/test/CMakeLists.txt | 30 + bcos-pbft/test/unittests/core/TimerTest.cpp | 117 + bcos-pbft/test/unittests/main/main.cpp | 24 + .../test/unittests/pbft/PBFTConfigTest.cpp | 173 + .../test/unittests/pbft/PBFTEngineTest.cpp | 279 + bcos-pbft/test/unittests/pbft/PBFTFixture.h | 418 ++ .../unittests/pbft/PBFTViewChangeTest.cpp | 159 + .../test/unittests/protocol/FakePBFTMessage.h | 589 +++ .../unittests/protocol/PBFTMessageTest.cpp | 111 + bcos-protocol/CMakeLists.txt | 41 + bcos-protocol/bcos-protocol/CMakeLists.txt | 15 + bcos-protocol/bcos-protocol/Common.h | 89 + .../bcos-protocol/ParallelMerkleProof.cpp | 119 + .../bcos-protocol/ParallelMerkleProof.h | 38 + .../bcos-protocol/TransactionStatus.h | 187 + .../TransactionSubmitResultFactoryImpl.h | 41 + .../TransactionSubmitResultImpl.h | 77 + bcos-protocol/bcos-protocol/amop/TopicItem.h | 89 + bcos-protocol/test/CMakeLists.txt | 29 + bcos-protocol/test/unittests/main/main.cpp | 24 + bcos-rpc/CMakeLists.txt | 46 + bcos-rpc/bcos-rpc/Common.h | 39 + bcos-rpc/bcos-rpc/Rpc.cpp | 251 + bcos-rpc/bcos-rpc/Rpc.h | 110 + bcos-rpc/bcos-rpc/RpcFactory.cpp | 455 ++ bcos-rpc/bcos-rpc/RpcFactory.h | 101 + bcos-rpc/bcos-rpc/amop/AMOPClient.cpp | 570 ++ bcos-rpc/bcos-rpc/amop/AMOPClient.h | 193 + bcos-rpc/bcos-rpc/amop/AirAMOPClient.h | 78 + bcos-rpc/bcos-rpc/event/Common.h | 39 + bcos-rpc/bcos-rpc/event/EventSub.cpp | 551 ++ bcos-rpc/bcos-rpc/event/EventSub.h | 184 + bcos-rpc/bcos-rpc/event/EventSubMatcher.cpp | 103 + bcos-rpc/bcos-rpc/event/EventSubMatcher.h | 53 + bcos-rpc/bcos-rpc/event/EventSubParams.h | 68 + bcos-rpc/bcos-rpc/event/EventSubRequest.cpp | 296 ++ bcos-rpc/bcos-rpc/event/EventSubRequest.h | 71 + bcos-rpc/bcos-rpc/event/EventSubResponse.cpp | 107 + bcos-rpc/bcos-rpc/event/EventSubResponse.h | 55 + bcos-rpc/bcos-rpc/event/EventSubTask.h | 120 + bcos-rpc/bcos-rpc/groupmgr/AirGroupManager.h | 104 + bcos-rpc/bcos-rpc/groupmgr/Common.h | 66 + bcos-rpc/bcos-rpc/groupmgr/GroupManager.cpp | 363 ++ bcos-rpc/bcos-rpc/groupmgr/GroupManager.h | 212 + bcos-rpc/bcos-rpc/groupmgr/NodeService.cpp | 101 + bcos-rpc/bcos-rpc/groupmgr/NodeService.h | 115 + .../bcos-rpc/groupmgr/TarsGroupManager.cpp | 80 + bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.h | 63 + bcos-rpc/bcos-rpc/jsonrpc/Common.h | 165 + bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.cpp | 1352 +++++ bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h | 189 + .../bcos-rpc/jsonrpc/JsonRpcInterface.cpp | 265 + bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h | 277 + bcos-rpc/test/CMakeLists.txt | 30 + bcos-rpc/test/unittests/main/main.cpp | 3 + bcos-scheduler/CMakeLists.txt | 19 + bcos-scheduler/src/BlockExecutive.cpp | 1703 ++++++ bcos-scheduler/src/BlockExecutive.h | 203 + bcos-scheduler/src/BlockExecutiveFactory.cpp | 72 + bcos-scheduler/src/BlockExecutiveFactory.h | 56 + bcos-scheduler/src/Common.h | 16 + bcos-scheduler/src/DmcExecutor.cpp | 467 ++ bcos-scheduler/src/DmcExecutor.h | 145 + bcos-scheduler/src/DmcStepRecorder.cpp | 96 + bcos-scheduler/src/DmcStepRecorder.h | 83 + bcos-scheduler/src/Executive.h | 46 + bcos-scheduler/src/ExecutivePool.cpp | 190 + bcos-scheduler/src/ExecutivePool.h | 101 + bcos-scheduler/src/ExecutorManager.cpp | 242 + bcos-scheduler/src/ExecutorManager.h | 218 + bcos-scheduler/src/GraphKeyLocks.cpp | 277 + bcos-scheduler/src/GraphKeyLocks.h | 127 + bcos-scheduler/src/SchedulerFactory.h | 80 + bcos-scheduler/src/SchedulerImpl.cpp | 1030 ++++ bcos-scheduler/src/SchedulerImpl.h | 268 + bcos-scheduler/src/SchedulerManager.cpp | 451 ++ bcos-scheduler/src/SchedulerManager.h | 160 + bcos-scheduler/src/SerialBlockExecutive.cpp | 276 + bcos-scheduler/src/SerialBlockExecutive.h | 77 + bcos-scheduler/src/TarsExecutorManager.cpp | 155 + bcos-scheduler/src/TarsExecutorManager.h | 81 + bcos-scheduler/test/CMakeLists.txt | 17 + bcos-scheduler/test/main.cpp | 3 + bcos-scheduler/test/mock/MockBlockExecutive.h | 168 + .../test/mock/MockBlockExecutiveFactory.h | 78 + .../test/mock/MockDeadLockExecutor.h | 117 + bcos-scheduler/test/mock/MockDmcExecutor.h | 239 + bcos-scheduler/test/mock/MockExecutor.h | 185 + bcos-scheduler/test/mock/MockExecutor3.h | 119 + .../test/mock/MockExecutorForCall.h | 87 + .../test/mock/MockExecutorForCreate.h | 90 + .../test/mock/MockExecutorForMessageDAG.h | 163 + bcos-scheduler/test/mock/MockLedger.h | 123 + bcos-scheduler/test/mock/MockLedger2.h | 94 + bcos-scheduler/test/mock/MockLedger3.h | 166 + .../test/mock/MockMultiParallelExecutor.h | 102 + bcos-scheduler/test/mock/MockRPC.h | 33 + .../test/mock/MockTransactionalStorage.h | 91 + bcos-scheduler/test/mock/MockTxPool1.h | 110 + bcos-scheduler/test/testBlockExecutive.cpp | 530 ++ bcos-scheduler/test/testChecksumAddress.cpp | 73 + bcos-scheduler/test/testCommitBlock.cpp | 168 + bcos-scheduler/test/testDmcExecutor.cpp | 373 ++ bcos-scheduler/test/testDmcStepRecorder.cpp | 91 + bcos-scheduler/test/testExecutivePool.cpp | 249 + bcos-scheduler/test/testExecutorManager.cpp | 178 + bcos-scheduler/test/testKeyLocks.cpp | 114 + bcos-scheduler/test/testScheduler.cpp | 592 +++ bcos-scheduler/test/testSchedulerImpl.cpp | 616 +++ bcos-sdk/CMakeLists.txt | 33 + bcos-sdk/bcos-cpp-sdk/Sdk.h | 110 + bcos-sdk/bcos-cpp-sdk/SdkFactory.cpp | 225 + bcos-sdk/bcos-cpp-sdk/SdkFactory.h | 62 + bcos-sdk/bcos-cpp-sdk/amop/AMOP.cpp | 287 + bcos-sdk/bcos-cpp-sdk/amop/AMOP.h | 141 + bcos-sdk/bcos-cpp-sdk/amop/AMOPInterface.h | 78 + bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.cpp | 100 + bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.h | 72 + bcos-sdk/bcos-cpp-sdk/amop/Common.h | 48 + bcos-sdk/bcos-cpp-sdk/amop/TopicManager.cpp | 76 + bcos-sdk/bcos-cpp-sdk/amop/TopicManager.h | 54 + bcos-sdk/bcos-cpp-sdk/config/Config.cpp | 237 + bcos-sdk/bcos-cpp-sdk/config/Config.h | 55 + bcos-sdk/bcos-cpp-sdk/event/Common.h | 55 + bcos-sdk/bcos-cpp-sdk/event/EventSub.cpp | 515 ++ bcos-sdk/bcos-cpp-sdk/event/EventSub.h | 137 + .../bcos-cpp-sdk/event/EventSubInterface.h | 55 + .../bcos-cpp-sdk/event/EventSubParams.cpp | 191 + bcos-sdk/bcos-cpp-sdk/event/EventSubParams.h | 105 + .../bcos-cpp-sdk/event/EventSubRequest.cpp | 287 + bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.h | 77 + .../bcos-cpp-sdk/event/EventSubResponse.cpp | 108 + .../bcos-cpp-sdk/event/EventSubResponse.h | 58 + bcos-sdk/bcos-cpp-sdk/event/EventSubStatus.h | 35 + bcos-sdk/bcos-cpp-sdk/event/EventSubTask.h | 95 + .../multigroup/JsonChainNodeInfoCodec.h | 196 + .../multigroup/JsonGroupInfoCodec.h | 147 + bcos-sdk/bcos-cpp-sdk/rpc/Common.h | 87 + bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.cpp | 509 ++ bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.h | 155 + bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcInterface.h | 124 + bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.cpp | 120 + bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.h | 122 + .../utilities/abi/ContractABICodec.cpp | 200 + .../utilities/abi/ContractABICodec.h | 651 +++ .../utilities/abi/ContractABIType.cpp | 280 + .../utilities/abi/ContractABIType.h | 96 + .../utilities/abi/ContractEventTopic.h | 121 + bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.cpp | 104 + bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.h | 62 + bcos-sdk/bcos-cpp-sdk/ws/Common.h | 25 + .../bcos-cpp-sdk/ws/HandshakeResponse.cpp | 128 + bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.h | 78 + bcos-sdk/bcos-cpp-sdk/ws/Service.cpp | 783 +++ bcos-sdk/bcos-cpp-sdk/ws/Service.h | 170 + bcos-sdk/sample/CMakeLists.txt | 4 + bcos-sdk/sample/amop/CMakeLists.txt | 22 + bcos-sdk/sample/amop/broadcast.cpp | 83 + bcos-sdk/sample/amop/publish.cpp | 109 + bcos-sdk/sample/amop/subscribe.cpp | 103 + bcos-sdk/sample/config/config_sample.ini | 26 + bcos-sdk/sample/config/sm_config_sample.ini | 28 + bcos-sdk/sample/eventsub/CMakeLists.txt | 10 + bcos-sdk/sample/eventsub/eventsub.cpp | 127 + bcos-sdk/sample/rpc/CMakeLists.txt | 10 + bcos-sdk/sample/rpc/blocknotifier.cpp | 90 + bcos-sdk/sample/tx/CMakeLists.txt | 13 + bcos-sdk/sample/tx/deploy_hello.cpp | 268 + bcos-sdk/sample/tx/random_perf.cpp | 76 + bcos-sdk/sample/tx/tx_sign_perf.cpp | 199 + bcos-sdk/tests/CMakeLists.txt | 29 + .../unittests/abi/ContractEventTopicTest.cpp | 248 + .../tests/unittests/amop/TopicManagerTest.cpp | 155 + .../unittests/event/EventSubParamsTest.cpp | 77 + .../unittests/event/EventSubRequestTest.cpp | 140 + .../unittests/event/EventSubResponseTest.cpp | 74 + .../unittests/event/EventSubTaskStateTest.cpp | 40 + .../unittests/event/EventSubTaskTest.cpp | 60 + .../tests/unittests/event/EventSubTest.cpp | 214 + bcos-sdk/tests/unittests/fake/WsServiceFake.h | 65 + bcos-sdk/tests/unittests/fake/WsSessionFake.h | 68 + bcos-sdk/tests/unittests/main.cpp | 4 + .../tests/unittests/tx/TransactionTest.cpp | 66 + .../unittests/ws/BlockNumberInfoTest.cpp | 56 + .../unittests/ws/HandshakeResponseTest.cpp | 91 + bcos-sealer/CMakeLists.txt | 29 + bcos-sealer/bcos-sealer/Common.h | 22 + bcos-sealer/bcos-sealer/Sealer.cpp | 177 + bcos-sealer/bcos-sealer/Sealer.h | 73 + bcos-sealer/bcos-sealer/SealerConfig.h | 63 + bcos-sealer/bcos-sealer/SealerFactory.cpp | 44 + bcos-sealer/bcos-sealer/SealerFactory.h | 45 + bcos-sealer/bcos-sealer/SealingManager.cpp | 305 ++ bcos-sealer/bcos-sealer/SealingManager.h | 153 + bcos-security/CMakeLists.txt | 37 + bcos-security/bcos-security/Common.h | 26 + .../bcos-security/DataEncryption.cpp | 169 + bcos-security/bcos-security/DataEncryption.h | 66 + bcos-security/bcos-security/KeyCenter.cpp | 248 + bcos-security/bcos-security/KeyCenter.h | 107 + bcos-security/test/CMakeLists.txt | 28 + .../libsecurity/DataEncryptionTest.cpp | 34 + bcos-security/test/unittests/main/main.cpp | 24 + bcos-storage/CMakeLists.txt | 29 + bcos-storage/bcos-storage/Common.cpp | 36 + bcos-storage/bcos-storage/Common.h | 48 + bcos-storage/bcos-storage/RocksDBStorage.cpp | 619 +++ bcos-storage/bcos-storage/RocksDBStorage.h | 91 + bcos-storage/bcos-storage/StorageImpl.h | 105 + bcos-storage/bcos-storage/TiKVStorage.cpp | 648 +++ bcos-storage/bcos-storage/TiKVStorage.h | 107 + bcos-storage/test/CMakeLists.txt | 4 + bcos-storage/test/unittest/CMakeLists.txt | 44 + bcos-storage/test/unittest/StorageTest.cpp | 28 + .../test/unittest/TestRocksDBStorage.cpp | 696 +++ .../test/unittest/TestTiKVStorage.cpp | 1380 +++++ bcos-storage/test/unittest/main.cpp | 24 + bcos-sync/CMakeLists.txt | 70 + bcos-sync/bcos-sync/BlockSync.cpp | 825 +++ bcos-sync/bcos-sync/BlockSync.h | 143 + bcos-sync/bcos-sync/BlockSyncConfig.cpp | 198 + bcos-sync/bcos-sync/BlockSyncConfig.h | 192 + bcos-sync/bcos-sync/BlockSyncFactory.cpp | 52 + bcos-sync/bcos-sync/BlockSyncFactory.h | 58 + .../interfaces/BlockRequestInterface.h | 39 + .../interfaces/BlockSyncMsgFactory.h | 65 + .../interfaces/BlockSyncMsgInterface.h | 49 + .../interfaces/BlockSyncStatusInterface.h | 46 + .../bcos-sync/interfaces/BlocksMsgInterface.h | 43 + .../bcos-sync/protocol/PB/BlockRequestImpl.h | 54 + .../protocol/PB/BlockSyncMsgFactoryImpl.h | 85 + .../bcos-sync/protocol/PB/BlockSyncMsgImpl.h | 72 + .../protocol/PB/BlockSyncStatusImpl.cpp | 64 + .../protocol/PB/BlockSyncStatusImpl.h | 66 + .../bcos-sync/protocol/PB/BlocksMsgImpl.h | 75 + .../bcos-sync/protocol/proto/BlockSync.proto | 22 + .../bcos-sync/state/DownloadRequestQueue.cpp | 88 + .../bcos-sync/state/DownloadRequestQueue.h | 79 + .../bcos-sync/state/DownloadingQueue.cpp | 724 +++ bcos-sync/bcos-sync/state/DownloadingQueue.h | 133 + bcos-sync/bcos-sync/state/SyncPeerStatus.cpp | 222 + bcos-sync/bcos-sync/state/SyncPeerStatus.h | 113 + bcos-sync/bcos-sync/utilities/Common.h | 49 + bcos-sync/test/CMakeLists.txt | 30 + .../test/unittests/faker/FakeConsensus.h | 94 + bcos-sync/test/unittests/main/main.cpp | 24 + .../unittests/protocol/BlockSyncMsgTest.cpp | 160 + .../test/unittests/sync/BlockSyncTest.cpp | 214 + .../test/unittests/sync/SyncConfigTest.cpp | 83 + bcos-sync/test/unittests/sync/SyncFixture.h | 178 + bcos-table/CMakeLists.txt | 44 + bcos-table/src/CacheStorageFactory.cpp | 13 + bcos-table/src/CacheStorageFactory.h | 44 + bcos-table/src/KeyPageStorage.cpp | 1048 ++++ bcos-table/src/KeyPageStorage.h | 1259 +++++ bcos-table/src/StateStorage.h | 619 +++ bcos-table/src/StateStorageFactory.h | 102 + bcos-table/src/StateStorageInterface.h | 127 + bcos-table/src/StorageImpl.h | 158 + bcos-table/src/StorageInterface.cpp | 161 + bcos-table/src/StorageWrapper.h | 169 + bcos-table/src/Table.cpp | 133 + bcos-table/test/CMakeLists.txt | 31 + bcos-table/test/unittests/libtable/Entry.cpp | 223 + bcos-table/test/unittests/libtable/Hash.h | 49 + bcos-table/test/unittests/libtable/Table.cpp | 244 + .../test/unittests/libtable/TablePerf.cpp | 133 + .../unittests/libtable/TestKeyPageStorage.cpp | 2871 ++++++++++ .../unittests/libtable/TestStateStorage.cpp | 1230 +++++ bcos-table/test/unittests/main/main.cpp | 24 + .../unittests/mock/MockTransactionalStorage.h | 83 + bcos-tars-protocol/CMakeLists.txt | 53 + .../bcos-tars-protocol/Common.h | 415 ++ .../bcos-tars-protocol/ErrorConverter.h | 95 + .../client/ExecutorServiceClient.cpp | 591 +++ .../client/ExecutorServiceClient.h | 107 + .../client/FrontServiceClient.h | 257 + .../client/GatewayServiceClient.cpp | 23 + .../client/GatewayServiceClient.h | 443 ++ .../client/LedgerServiceClient.cpp | 337 ++ .../client/LedgerServiceClient.h | 123 + .../client/PBFTServiceClient.cpp | 207 + .../client/PBFTServiceClient.h | 219 + .../client/RpcServiceClient.cpp | 23 + .../client/RpcServiceClient.h | 251 + .../client/SchedulerServiceClient.cpp | 246 + .../client/SchedulerServiceClient.h | 84 + .../client/TxPoolServiceClient.h | 550 ++ .../bcos-tars-protocol/impl/TarsHashable.h | 140 + .../bcos-tars-protocol/impl/TarsOutput.h | 13 + .../impl/TarsSerializable.h | 37 + .../impl/TarsServantProxyCallback.h | 265 + .../bcos-tars-protocol/impl/TarsStruct.h | 19 + .../protocol/BlockFactoryImpl.h | 102 + .../protocol/BlockHeaderFactoryImpl.h | 66 + .../protocol/BlockHeaderImpl.cpp | 171 + .../protocol/BlockHeaderImpl.h | 191 + .../bcos-tars-protocol/protocol/BlockImpl.cpp | 133 + .../bcos-tars-protocol/protocol/BlockImpl.h | 189 + .../protocol/ExecutionMessageImpl.cpp | 86 + .../protocol/ExecutionMessageImpl.h | 236 + .../protocol/ExecutionResultImpl.h | 62 + .../protocol/GroupInfoCodecImpl.h | 64 + .../protocol/GroupNodeInfoImpl.h | 132 + .../bcos-tars-protocol/protocol/MemberImpl.h | 86 + .../protocol/ProtocolInfoCodecImpl.cpp | 51 + .../protocol/ProtocolInfoCodecImpl.h | 43 + .../protocol/TransactionFactoryImpl.h | 140 + .../protocol/TransactionImpl.cpp | 75 + .../protocol/TransactionImpl.h | 104 + .../protocol/TransactionMetaDataImpl.h | 86 + .../protocol/TransactionReceiptFactoryImpl.h | 84 + .../protocol/TransactionReceiptImpl.cpp | 65 + .../protocol/TransactionReceiptImpl.h | 105 + .../TransactionSubmitResultFactoryImpl.h | 50 + .../protocol/TransactionSubmitResultImpl.h | 117 + .../bcos-tars-protocol/tars/Block.tars | 50 + .../tars/CommonProtocol.tars | 6 + .../tars/ExecutionMessage.tars | 33 + .../tars/ExecutionResult.tars | 9 + .../tars/ExecutorService.tars | 32 + .../tars/ExecutorStatus.tars | 7 + .../bcos-tars-protocol/tars/FrontService.tars | 22 + .../bcos-tars-protocol/tars/GatewayInfo.tars | 33 + .../tars/GatewayService.tars | 32 + .../bcos-tars-protocol/tars/GroupInfo.tars | 25 + .../bcos-tars-protocol/tars/LedgerConfig.tars | 19 + .../tars/LedgerService.tars | 18 + .../bcos-tars-protocol/tars/LightNode.tars | 79 + .../bcos-tars-protocol/tars/Member.tars | 6 + .../bcos-tars-protocol/tars/PBFTService.tars | 19 + .../bcos-tars-protocol/tars/ProtocolInfo.tars | 9 + .../bcos-tars-protocol/tars/RouterTable.tars | 13 + .../bcos-tars-protocol/tars/RpcService.tars | 12 + .../tars/SchedulerService.tars | 21 + .../tars/StorageService.tars | 52 + .../bcos-tars-protocol/tars/Transaction.tars | 23 + .../tars/TransactionMetaData.tars | 9 + .../tars/TransactionReceipt.tars | 23 + .../tars/TransactionSubmitResult.tars | 15 + .../bcos-tars-protocol/tars/TwoPCParams.tars | 8 + .../tars/TxPoolService.tars | 26 + .../bcos-tars-protocol/testutil/FakeBlock.h | 235 + .../testutil/FakeBlockHeader.h | 240 + .../testutil/FakeTransaction.h | 128 + .../testutil/FakeTransactionReceipt.h | 134 + bcos-tars-protocol/test/CMakeLists.txt | 31 + bcos-tars-protocol/test/ProtocolTest.cpp | 696 +++ bcos-tars-protocol/test/ProxyCallbackTest.cpp | 149 + bcos-tars-protocol/test/ServiceClientTest.cpp | 137 + bcos-tars-protocol/test/main.cpp | 3 + bcos-tool/CMakeLists.txt | 50 + bcos-tool/bcos-tool/BfsFileFactory.cpp | 166 + bcos-tool/bcos-tool/BfsFileFactory.h | 107 + bcos-tool/bcos-tool/ConsensusNode.h | 70 + bcos-tool/bcos-tool/Exceptions.h | 58 + bcos-tool/bcos-tool/LedgerConfigFetcher.cpp | 204 + bcos-tool/bcos-tool/LedgerConfigFetcher.h | 72 + bcos-tool/bcos-tool/NodeConfig.cpp | 956 ++++ bcos-tool/bcos-tool/NodeConfig.h | 384 ++ bcos-tool/bcos-tool/NodeTimeMaintenance.cpp | 105 + bcos-tool/bcos-tool/NodeTimeMaintenance.h | 44 + bcos-tool/bcos-tool/VersionConverter.h | 77 + bcos-tool/test/CMakeLists.txt | 28 + .../libtool/NodeTimeMaintenanceTest.cpp | 89 + .../test/unittests/libtool/VersionConvert.cpp | 24 + bcos-tool/test/unittests/main/main.cpp | 24 + bcos-txpool/CMakeLists.txt | 44 + bcos-txpool/bcos-txpool/CMakeLists.txt | 32 + bcos-txpool/bcos-txpool/TxPool.cpp | 531 ++ bcos-txpool/bcos-txpool/TxPool.h | 194 + bcos-txpool/bcos-txpool/TxPoolConfig.h | 86 + bcos-txpool/bcos-txpool/TxPoolFactory.cpp | 78 + bcos-txpool/bcos-txpool/TxPoolFactory.h | 57 + .../bcos-txpool/sync/TransactionSync.cpp | 773 +++ .../bcos-txpool/sync/TransactionSync.h | 164 + .../bcos-txpool/sync/TransactionSyncConfig.h | 85 + .../interfaces/TransactionSyncInterface.h | 55 + .../sync/interfaces/TxsSyncMsgFactory.h | 56 + .../sync/interfaces/TxsSyncMsgInterface.h | 58 + .../sync/protocol/PB/TxsSyncMsg.cpp | 100 + .../bcos-txpool/sync/protocol/PB/TxsSyncMsg.h | 62 + .../sync/protocol/PB/TxsSyncMsgFactoryImpl.h | 43 + .../sync/protocol/proto/TxsSync.proto | 9 + .../bcos-txpool/sync/utilities/Common.h | 39 + .../txpool/interfaces/NonceCheckerInterface.h | 54 + .../interfaces/TxPoolStorageInterface.h | 123 + .../txpool/interfaces/TxValidatorInterface.h | 49 + .../txpool/storage/MemoryStorage.cpp | 1091 ++++ .../txpool/storage/MemoryStorage.h | 166 + .../txpool/validator/LedgerNonceChecker.cpp | 99 + .../txpool/validator/LedgerNonceChecker.h | 65 + .../txpool/validator/TxPoolNonceChecker.cpp | 84 + .../txpool/validator/TxPoolNonceChecker.h | 48 + .../txpool/validator/TxValidator.cpp | 84 + .../txpool/validator/TxValidator.h | 63 + bcos-txpool/test/CMakeLists.txt | 33 + bcos-txpool/test/demo/txpool_demo.cpp | 99 + bcos-txpool/test/unittests/main/main.cpp | 24 + .../test/unittests/sync/FakeTxsSyncMsg.h | 65 + .../test/unittests/sync/TxsSyncMsgTest.cpp | 49 + .../test/unittests/txpool/TxPoolFixture.h | 294 ++ .../test/unittests/txpool/TxPoolTest.cpp | 653 +++ .../test/unittests/txpool/TxsSyncTest.cpp | 296 ++ bcos-utilities/CMakeLists.txt | 21 + bcos-utilities/bcos-utilities/Base64.cpp | 71 + bcos-utilities/bcos-utilities/Base64.h | 31 + bcos-utilities/bcos-utilities/BoostLog.cpp | 47 + bcos-utilities/bcos-utilities/BoostLog.h | 86 + .../bcos-utilities/BoostLogInitializer.cpp | 315 ++ .../bcos-utilities/BoostLogInitializer.h | 161 + .../CallbackCollectionHandler.h | 102 + bcos-utilities/bcos-utilities/Common.cpp | 98 + bcos-utilities/bcos-utilities/Common.h | 171 + .../bcos-utilities/ConcurrentQueue.h | 81 + .../bcos-utilities/DataConvertUtility.cpp | 95 + .../bcos-utilities/DataConvertUtility.h | 390 ++ bcos-utilities/bcos-utilities/Error.h | 136 + bcos-utilities/bcos-utilities/Exceptions.h | 66 + bcos-utilities/bcos-utilities/FileUtility.cpp | 62 + bcos-utilities/bcos-utilities/FileUtility.h | 44 + bcos-utilities/bcos-utilities/FixedBytes.cpp | 27 + bcos-utilities/bcos-utilities/FixedBytes.h | 728 +++ bcos-utilities/bcos-utilities/IOServicePool.h | 112 + .../bcos-utilities/JsonDataConvertUtility.h | 121 + bcos-utilities/bcos-utilities/Log.h | 3 + bcos-utilities/bcos-utilities/Ranges.h | 9 + .../bcos-utilities/RefDataContainer.h | 213 + bcos-utilities/bcos-utilities/ThreadPool.h | 77 + bcos-utilities/bcos-utilities/Timer.cpp | 117 + bcos-utilities/bcos-utilities/Timer.h | 113 + bcos-utilities/bcos-utilities/Worker.cpp | 143 + bcos-utilities/bcos-utilities/Worker.h | 102 + .../bcos-utilities/ZstdCompress.cpp | 94 + bcos-utilities/bcos-utilities/ZstdCompress.h | 37 + bcos-utilities/test/CMakeLists.txt | 28 + .../unittests/libutilities/Base64Test.cpp | 98 + .../unittests/libutilities/CommonTest.cpp | 217 + .../libutilities/DataConvertUtilityTest.cpp | 131 + .../JsonDataConvertUtilityTest.cpp | 110 + .../libutilities/RefDataContainerTest.cpp | 178 + .../unittests/libutilities/TestFixedBytes.cpp | 56 + .../unittests/libutilities/WorkerTest.cpp | 71 + .../libutilities/ZstdCompressTest.cpp | 53 + bcos-utilities/test/unittests/main/main.cpp | 23 + bcos-utilities/testutils/TestPromptFixture.h | 93 + benchmark/CMakeLists.txt | 4 + benchmark/merkleBench.cpp | 128 + cmake/CompilerSettings.cmake | 186 + cmake/Coverage.cmake | 31 + cmake/GenerateSources.cmake | 21 + cmake/IncludeDirectories.cmake | 16 + cmake/Options.cmake | 150 + cmake/ProjectBCOSWASM.cmake | 69 + cmake/ProjectGroupSig.cmake | 56 + cmake/ProjectSDF.cmake | 29 + cmake/ProjectTCMalloc.cmake | 43 + cmake/ProjectTiKVClient.cmake | 36 + cmake/ProjectWABT.cmake | 40 + cmake/SearchTestCases.cmake | 65 + cmake/TargetSettings.cmake | 72 + cmake/fiscobcos-config.cmake.in | 5 + cmake/shell/check-commit.sh | 110 + cmake/test/CMakeLists.txt | 36 + concepts/CMakeLists.txt | 12 + concepts/bcos-concepts/Basic.h | 62 + concepts/bcos-concepts/ByteBuffer.h | 45 + concepts/bcos-concepts/Exception.h | 15 + concepts/bcos-concepts/Hash.h | 26 + concepts/bcos-concepts/Serialize.h | 30 + concepts/bcos-concepts/front/Front.h | 45 + concepts/bcos-concepts/ledger/Ledger.h | 128 + concepts/bcos-concepts/protocol/Block.h | 73 + concepts/bcos-concepts/protocol/Receipt.h | 36 + concepts/bcos-concepts/protocol/Transaction.h | 40 + concepts/bcos-concepts/scheduler/Scheduler.h | 27 + concepts/bcos-concepts/storage/Storage.h | 42 + concepts/bcos-concepts/storage/Storage2.h | 83 + .../TransactionExecutor.h | 45 + .../transaction-pool/TransactionPool.h | 34 + concepts/tests/testTask.cpp | 0 conf/ca.crt | 19 - conf/cert.cnf | 31 - conf/node.nodeid | 1 - conf/node.pem | 5 - conf/ssl.crt | 19 - conf/ssl.key | 28 - conf/ssl.nodeid | 1 - configs/config.yaml | 14 - docs/FISCO_BCOS_Logo.svg | 15 + docs/README_EN.md | 57 + fisco-bcos-air/AirNodeInitializer.cpp | 132 + fisco-bcos-air/AirNodeInitializer.h | 57 + fisco-bcos-air/CMakeLists.txt | 5 + fisco-bcos-air/Common.h | 59 + fisco-bcos-air/main.cpp | 86 + fisco-bcos-demo/CMakeLists.txt | 14 + .../distributed_ratelimiter_checker.cpp | 219 + fisco-bcos-demo/echo_client_sample.cpp | 111 + fisco-bcos-demo/echo_server_sample.cpp | 78 + fisco-bcos-tars-service/CMakeLists.txt | 40 + fisco-bcos-tars-service/Common/TarsUtils.h | 185 + .../ExecutorService/ExecutorServiceServer.cpp | 259 + .../ExecutorService/ExecutorServiceServer.h | 81 + .../ExecutorService/main/CMakeLists.txt | 7 + .../main/ExecutorServiceApp.cpp | 213 + .../ExecutorService/main/ExecutorServiceApp.h | 69 + .../ExecutorService/main/main.cpp | 54 + .../FrontService/FrontServiceServer.cpp | 150 + .../FrontService/FrontServiceServer.h | 59 + .../GatewayService/GatewayInitializer.cpp | 124 + .../GatewayService/GatewayInitializer.h | 71 + .../GatewayService/GatewayServiceServer.cpp | 65 + .../GatewayService/GatewayServiceServer.h | 150 + .../GatewayService/main/Application.cpp | 125 + .../GatewayService/main/CMakeLists.txt | 18 + .../LedgerService/CMakeLists.txt | 7 + .../LedgerService/LedgerServiceServer.cpp | 224 + .../LedgerService/LedgerServiceServer.h | 67 + .../NodeService/NodeServiceApp.cpp | 194 + .../NodeService/NodeServiceApp.h | 68 + .../NodeService/max/CMakeLists.txt | 16 + .../NodeService/max/main.cpp | 55 + .../NodeService/pro/CMakeLists.txt | 16 + .../NodeService/pro/main.cpp | 59 + .../PBFTService/PBFTServiceClient.h | 198 + .../PBFTService/PBFTServiceServer.cpp | 146 + .../PBFTService/PBFTServiceServer.h | 108 + .../RpcService/RpcInitializer.cpp | 164 + .../RpcService/RpcInitializer.h | 73 + .../RpcService/RpcServiceServer.cpp | 67 + .../RpcService/RpcServiceServer.h | 37 + .../RpcService/main/Application.cpp | 127 + .../RpcService/main/CMakeLists.txt | 14 + .../SchedulerServiceServer.cpp | 130 + .../SchedulerService/SchedulerServiceServer.h | 76 + .../SchedulerService/main/CMakeLists.txt | 9 + .../main/SchedulerServiceApp.cpp | 180 + .../main/SchedulerServiceApp.h | 68 + .../SchedulerService/main/main.cpp | 54 + .../TxPoolService/TxPoolServiceServer.cpp | 288 ++ .../TxPoolService/TxPoolServiceServer.h | 80 + fisco-sgx-go | Bin 11787140 -> 0 bytes global/setting.go | 10 - go.mod | 44 - go.sum | 536 -- internal/routers/api/v1/fiscoStart.go | 60 - internal/routers/api/v1/quote.go | 50 - internal/routers/api/v1/report.go | 54 - internal/routers/router.go | 32 - libinitializer/AuthInitializer.h | 76 + libinitializer/BfsInitializer.h | 50 + libinitializer/CMakeLists.txt | 36 + libinitializer/CommandHelper.cpp | 152 + libinitializer/CommandHelper.h | 39 + libinitializer/Common.h | 91 + libinitializer/ExecutorInitializer.h | 24 + libinitializer/FrontServiceInitializer.cpp | 198 + libinitializer/FrontServiceInitializer.h | 85 + libinitializer/Initializer.cpp | 544 ++ libinitializer/Initializer.h | 107 + libinitializer/LedgerInitializer.h | 60 + libinitializer/LightNodeInitializer.cpp | 1 + libinitializer/LightNodeInitializer.h | 339 ++ libinitializer/PBFTInitializer.cpp | 552 ++ libinitializer/PBFTInitializer.h | 130 + libinitializer/ProPBFTInitializer.cpp | 167 + libinitializer/ProPBFTInitializer.h | 68 + libinitializer/ProtocolInitializer.cpp | 158 + libinitializer/ProtocolInitializer.h | 77 + libinitializer/SchedulerInitializer.h | 72 + libinitializer/StorageInitializer.h | 98 + libinitializer/TxPoolInitializer.cpp | 99 + libinitializer/TxPoolInitializer.h | 68 + libtask/CMakeLists.txt | 16 + libtask/bcos-task/Coroutine.h | 9 + libtask/bcos-task/Task.h | 162 + libtask/bcos-task/Wait.h | 86 + libtask/tests/CMakeLists.txt | 9 + libtask/tests/TaskTest.cpp | 142 + libtask/tests/main.cpp | 4 + lightnode/CMakeLists.txt | 13 + lightnode/bcos-lightnode/Log.h | 5 + lightnode/bcos-lightnode/rpc/Converter.h | 161 + lightnode/bcos-lightnode/rpc/LightNodeRPC.h | 565 ++ .../scheduler/SchedulerWrapperImpl.h | 84 + .../transaction-pool/TransactionPoolImpl.h | 61 + lightnode/fisco-bcos-lightnode/CMakeLists.txt | 8 + .../fisco-bcos-lightnode/RPCInitializer.h | 178 + .../client/LedgerClientImpl.h | 155 + .../client/P2PClientImpl.h | 202 + .../client/SchedulerClientImpl.h | 43 + .../client/TransactionPoolClientImpl.h | 46 + lightnode/fisco-bcos-lightnode/main.cpp | 241 + lightnode/tests/CMakeLists.txt | 10 + lightnode/tests/P2PClientTest.cpp | 15 + lightnode/tests/RPCTest.cpp | 0 lightnode/tests/SchedulerTest.cpp | 0 lightnode/tests/TransactionPoolTest.cpp | 118 + lightnode/tests/main.cpp | 4 + log/log_2023050219.13.log | 82 - log/log_2023050219.17.log | 82 - log/log_2023050219.21.log | 82 - log/log_2023050219.22.log | 95 - main.go | 50 - pkg/setting/section.go | 27 - pkg/setting/setting.go | 22 - tests/CMakeLists.txt | 15 + tests/perf/CMakeLists.txt | 3 + tests/perf/benchmark.cpp | 344 ++ tests/unittest/main.cpp | 4 + tools/.ci/Dockerfile | 45 + tools/.ci/Dockerfile_env | 13 + tools/.ci/check-commit.sh | 123 + tools/.ci/ci_check_air.sh | 197 + tools/.ci/ci_check_pro.sh | 222 + tools/.ci/clear_build_cache.sh | 88 + tools/.ci/requirements.txt | 2 + .../bridge/linux/framework/docker-compose.yml | 45 + .../bridge/linux/node/docker-compose.yml | 23 + .../bridge/linux/node/gen_compose_files.sh | 38 + .../bridge/mac/framework/docker-compose.yml | 57 + .../docker/bridge/mac/node/docker-compose.yml | 29 + .../host/linux/framework/docker-compose.yml | 29 + .../docker/host/linux/monitor/compose.yaml | 32 + .../host/linux/monitor/grafana/grafana.ini | 13 + .../linux/monitor/prometheus/prometheus.yml | 19 + .../host/linux/monitor/start_monitor.sh | 17 + .../docker/host/linux/monitor/stop_monitor.sh | 17 + .../docker/host/linux/node/docker-compose.yml | 12 + .../max/conf/config-build-example.toml | 234 + .../max/conf/config-deploy-example.toml | 75 + .../max/conf/config-node-expand-example.toml | 41 + .../conf/config-service-expand-example.toml | 36 + .../pro/conf/config-build-example.toml | 249 + .../pro/conf/config-deploy-example.toml | 108 + .../pro/conf/config-node-expand-example.toml | 43 + .../conf/config-service-expand-example.toml | 35 + tools/BcosBuilder/requirements.txt | 5 + .../src/command/monitor_command_impl.py | 35 + .../src/command/node_command_impl.py | 75 + .../src/command/service_command_impl.py | 129 + .../BcosBuilder/src/common/parser_handler.py | 477 ++ tools/BcosBuilder/src/common/utilities.py | 360 ++ tools/BcosBuilder/src/config/chain_config.py | 398 ++ .../src/config/max_node_config_generator.py | 221 + .../src/config/monitor_config_generator.py | 230 + .../src/config/node_config_generator.py | 467 ++ .../src/config/service_config_generator.py | 318 ++ .../src/config/tars_config_generator.py | 30 + .../config/tars_install_package_generator.py | 138 + .../src/controller/binary_controller.py | 95 + .../src/controller/monitor_controller.py | 37 + .../src/controller/node_controller.py | 222 + .../src/controller/service_controller.py | 215 + .../src/networkmgr/network_manager.py | 64 + .../BcosBuilder/src/scripts/generate_cert.sh | 1038 ++++ .../BcosBuilder/src/scripts/mtail/node.mtail | 51 + .../src/scripts/mtail/start_mtail_monitor.sh | 44 + .../src/scripts/mtail/stop_mtail_monitor.sh | 36 + .../src/service/key_center_service.py | 69 + tools/BcosBuilder/src/service/tars_service.py | 551 ++ tools/BcosBuilder/src/tpl/config.genesis | 33 + tools/BcosBuilder/src/tpl/config.ini.executor | 27 + tools/BcosBuilder/src/tpl/config.ini.gateway | 85 + tools/BcosBuilder/src/tpl/config.ini.node | 57 + tools/BcosBuilder/src/tpl/config.ini.rpc | 46 + tools/BcosBuilder/src/tpl/tars_executor.conf | 40 + tools/BcosBuilder/src/tpl/tars_gateway.conf | 40 + tools/BcosBuilder/src/tpl/tars_node.conf | 80 + tools/BcosBuilder/src/tpl/tars_rpc.conf | 40 + tools/BcosBuilder/src/tpl/tars_start.sh | 33 + tools/BcosBuilder/src/tpl/tars_start_all.sh | 14 + tools/BcosBuilder/src/tpl/tars_stop.sh | 30 + tools/BcosBuilder/src/tpl/tars_stop_all.sh | 14 + tools/CMakeLists.txt | 5 + tools/archive-tool/ArchiveService.h | 315 ++ tools/archive-tool/CMakeLists.txt | 12 + tools/archive-tool/archive-reader/.gitignore | 6 + tools/archive-tool/archive-reader/Cargo.lock | 3451 +++++++++++++ tools/archive-tool/archive-reader/Cargo.toml | 17 + .../archive-reader/rust-toolchain.toml | 2 + tools/archive-tool/archive-reader/src/main.rs | 250 + tools/archive-tool/archiveTool.cpp | 703 +++ tools/log_extract.sh | 32 + tools/log_extract_executor.sh | 30 + tools/storage-tool/CMakeLists.txt | 12 + tools/storage-tool/reader.cpp | 220 + tools/storage-tool/storageTool.cpp | 874 ++++ tools/template/Dashboard.json | 1084 ++++ vcpkg-configuration.json | 21 + vcpkg.json | 119 + 1322 files changed, 215905 insertions(+), 2031 deletions(-) create mode 100644 .circleci/config.yml create mode 100644 .clang-format create mode 100644 .clang-tidy create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/stale.yml create mode 100644 .github/workflows/check-commit.yml create mode 100644 .github/workflows/docker.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/workflow-self-hosted-arm-static-bulid.yml create mode 100644 .github/workflows/workflow-self-hosted-arm.yml create mode 100644 .github/workflows/workflow-self-hosted-centos-static-build.yml create mode 100644 .github/workflows/workflow-self-hosted-centos.yml create mode 100644 .github/workflows/workflow-self-hosted-ubuntu-static-build.yml create mode 100644 .github/workflows/workflow-self-hosted-ubuntu.yml create mode 100644 .github/workflows/workflow.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 ChangeLog.md create mode 100644 bcos-boostssl/CMakeLists.txt create mode 100644 bcos-boostssl/bcos-boostssl/context/Common.h create mode 100644 bcos-boostssl/bcos-boostssl/context/ContextBuilder.cpp create mode 100644 bcos-boostssl/bcos-boostssl/context/ContextBuilder.h create mode 100644 bcos-boostssl/bcos-boostssl/context/ContextConfig.cpp create mode 100644 bcos-boostssl/bcos-boostssl/context/ContextConfig.h create mode 100644 bcos-boostssl/bcos-boostssl/context/NodeInfoTools.cpp create mode 100644 bcos-boostssl/bcos-boostssl/context/NodeInfoTools.h create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/Common.h create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/HttpQueue.h create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/HttpServer.cpp create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/HttpServer.h create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/HttpSession.h create mode 100644 bcos-boostssl/bcos-boostssl/httpserver/HttpStream.h create mode 100644 bcos-boostssl/bcos-boostssl/interfaces/MessageFace.h create mode 100644 bcos-boostssl/bcos-boostssl/interfaces/NodeInfoDef.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/Common.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsConfig.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsConnector.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsConnector.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsError.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsInitializer.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsInitializer.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsMessage.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsMessage.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsService.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsService.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsSession.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsSession.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsStream.h create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsTools.cpp create mode 100644 bcos-boostssl/bcos-boostssl/websocket/WsTools.h create mode 100644 bcos-boostssl/test/CMakeLists.txt create mode 100644 bcos-boostssl/test/exec/CMakeLists.txt create mode 100644 bcos-boostssl/test/exec/boostssl_delay_perf.cpp create mode 100644 bcos-boostssl/test/exec/boostssl_throughput_perf.cpp create mode 100644 bcos-boostssl/test/exec/echo_client_sample.cpp create mode 100644 bcos-boostssl/test/exec/echo_server_sample.cpp create mode 100644 bcos-boostssl/test/exec/http_server_sample.cpp create mode 100644 bcos-boostssl/test/exec/msg_codec_perf.cpp create mode 100644 bcos-boostssl/test/unittests/websocket/WsConfigTest.cpp create mode 100644 bcos-boostssl/test/unittests/websocket/WsConnectorTest.cpp create mode 100644 bcos-boostssl/test/unittests/websocket/WsMessageTest.cpp create mode 100644 bcos-codec/CMakeLists.txt create mode 100644 bcos-codec/bcos-codec/abi/ContractABICodec.cpp create mode 100644 bcos-codec/bcos-codec/abi/ContractABICodec.h create mode 100644 bcos-codec/bcos-codec/abi/ContractABIType.cpp create mode 100644 bcos-codec/bcos-codec/abi/ContractABIType.h create mode 100644 bcos-codec/bcos-codec/scale/Common.h create mode 100644 bcos-codec/bcos-codec/scale/Exceptions.h create mode 100644 bcos-codec/bcos-codec/scale/FixedWidthIntegerCodec.h create mode 100644 bcos-codec/bcos-codec/scale/Scale.h create mode 100644 bcos-codec/bcos-codec/scale/ScaleDecoderStream.cpp create mode 100644 bcos-codec/bcos-codec/scale/ScaleDecoderStream.h create mode 100644 bcos-codec/bcos-codec/scale/ScaleEncoderStream.cpp create mode 100644 bcos-codec/bcos-codec/scale/ScaleEncoderStream.h create mode 100644 bcos-codec/bcos-codec/wrapper/CodecWrapper.h create mode 100644 bcos-codec/test/CMakeLists.txt create mode 100644 bcos-codec/test/unittests/ContractABICodecTest.cpp create mode 100644 bcos-codec/test/unittests/ScaleCodecTest.cpp create mode 100644 bcos-codec/test/unittests/main/main.cpp create mode 100644 bcos-crypto/CMakeLists.txt create mode 100644 bcos-crypto/bcos-crypto/ChecksumAddress.h create mode 100644 bcos-crypto/bcos-crypto/TrivialObject.h create mode 100644 bcos-crypto/bcos-crypto/digestsign/DigestSign.h create mode 100644 bcos-crypto/bcos-crypto/digestsign/OpenSSLDigestSign.h create mode 100644 bcos-crypto/bcos-crypto/encrypt/AESCrypto.cpp create mode 100644 bcos-crypto/bcos-crypto/encrypt/AESCrypto.h create mode 100644 bcos-crypto/bcos-crypto/encrypt/Exceptions.h create mode 100644 bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.h create mode 100644 bcos-crypto/bcos-crypto/encrypt/SM4Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/encrypt/SM4Crypto.h create mode 100644 bcos-crypto/bcos-crypto/hash/Keccak256.h create mode 100644 bcos-crypto/bcos-crypto/hash/SM3.h create mode 100644 bcos-crypto/bcos-crypto/hash/Sha256.h create mode 100644 bcos-crypto/bcos-crypto/hash/Sha3.h create mode 100644 bcos-crypto/bcos-crypto/hasher/AnyHasher.h create mode 100644 bcos-crypto/bcos-crypto/hasher/Hasher.h create mode 100644 bcos-crypto/bcos-crypto/hasher/IPPCryptoHasher.h create mode 100644 bcos-crypto/bcos-crypto/hasher/OpenSSLHasher.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/CommonType.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/CryptoSuite.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/Hash.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/KeyFactory.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/KeyInterface.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairFactory.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairInterface.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/Signature.h create mode 100644 bcos-crypto/bcos-crypto/interfaces/crypto/SymmetricEncryption.h create mode 100644 bcos-crypto/bcos-crypto/merkle/Merkle.h create mode 100644 bcos-crypto/bcos-crypto/signature/Exceptions.h create mode 100644 bcos-crypto/bcos-crypto/signature/codec/SignatureData.h create mode 100644 bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithPub.h create mode 100644 bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithV.h create mode 100644 bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.h create mode 100644 bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2Crypto.h create mode 100644 bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPairFactory.h create mode 100644 bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.h create mode 100644 bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.h create mode 100644 bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPairFactory.h create mode 100644 bcos-crypto/bcos-crypto/signature/key/KeyFactoryImpl.h create mode 100644 bcos-crypto/bcos-crypto/signature/key/KeyImpl.h create mode 100644 bcos-crypto/bcos-crypto/signature/key/KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.h create mode 100644 bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/sm2.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/sm2.h create mode 100644 bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.h create mode 100644 bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.cpp create mode 100644 bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.h create mode 100644 bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPairFactory.h create mode 100644 bcos-crypto/bcos-crypto/zkp/Common.h create mode 100644 bcos-crypto/bcos-crypto/zkp/Exceptions.h create mode 100644 bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.cpp create mode 100644 bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.h create mode 100644 bcos-crypto/demo/CMakeLists.txt create mode 100644 bcos-crypto/demo/hasher_test.cpp create mode 100644 bcos-crypto/demo/perf_demo.cpp create mode 100644 bcos-crypto/test/CMakeLists.txt create mode 100644 bcos-crypto/test/unittests/EncryptionTest.cpp create mode 100644 bcos-crypto/test/unittests/HashTest.cpp create mode 100644 bcos-crypto/test/unittests/HasherTest.cpp create mode 100644 bcos-crypto/test/unittests/SignatureTest.cpp create mode 100644 bcos-crypto/test/unittests/ZkpTest.cpp create mode 100644 bcos-crypto/test/unittests/main.cpp create mode 100644 bcos-crypto/test/unittests/testMerkle.cpp create mode 100644 bcos-executor/CMakeLists.txt create mode 100644 bcos-executor/src/CallParameters.h create mode 100644 bcos-executor/src/Common.cpp create mode 100644 bcos-executor/src/Common.h create mode 100644 bcos-executor/src/dag/Abi.cpp create mode 100644 bcos-executor/src/dag/Abi.h create mode 100644 bcos-executor/src/dag/ClockCache.cpp create mode 100644 bcos-executor/src/dag/ClockCache.h create mode 100644 bcos-executor/src/dag/CriticalFields.h create mode 100644 bcos-executor/src/dag/DAG.cpp create mode 100644 bcos-executor/src/dag/DAG.h create mode 100644 bcos-executor/src/dag/ScaleUtils.cpp create mode 100644 bcos-executor/src/dag/ScaleUtils.h create mode 100644 bcos-executor/src/dag/TxDAG2.cpp create mode 100644 bcos-executor/src/dag/TxDAG2.h create mode 100644 bcos-executor/src/dag/TxDAGInterface.h create mode 100644 bcos-executor/src/executive/BlockContext.cpp create mode 100644 bcos-executor/src/executive/BlockContext.h create mode 100644 bcos-executor/src/executive/CoroutineTransactionExecutive.cpp create mode 100644 bcos-executor/src/executive/CoroutineTransactionExecutive.h create mode 100644 bcos-executor/src/executive/ExecutiveFactory.cpp create mode 100644 bcos-executor/src/executive/ExecutiveFactory.h create mode 100644 bcos-executor/src/executive/ExecutiveFlowInterface.h create mode 100644 bcos-executor/src/executive/ExecutiveSerialFlow.cpp create mode 100644 bcos-executor/src/executive/ExecutiveSerialFlow.h create mode 100644 bcos-executor/src/executive/ExecutiveStackFlow.cpp create mode 100644 bcos-executor/src/executive/ExecutiveStackFlow.h create mode 100644 bcos-executor/src/executive/ExecutiveState.cpp create mode 100644 bcos-executor/src/executive/ExecutiveState.h create mode 100644 bcos-executor/src/executive/LedgerCache.h create mode 100644 bcos-executor/src/executive/SyncStorageWrapper.h create mode 100644 bcos-executor/src/executive/TransactionExecutive.cpp create mode 100644 bcos-executor/src/executive/TransactionExecutive.h create mode 100644 bcos-executor/src/executor/ExecuteOutputs.h create mode 100644 bcos-executor/src/executor/SwitchExecutorManager.h create mode 100644 bcos-executor/src/executor/TransactionExecutor.cpp create mode 100644 bcos-executor/src/executor/TransactionExecutor.h create mode 100644 bcos-executor/src/executor/TransactionExecutorFactory.h create mode 100644 bcos-executor/src/precompiled/BFSPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/BFSPrecompiled.h create mode 100644 bcos-executor/src/precompiled/CastPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/CastPrecompiled.h create mode 100644 bcos-executor/src/precompiled/ConsensusPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/ConsensusPrecompiled.h create mode 100644 bcos-executor/src/precompiled/CryptoPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/CryptoPrecompiled.h create mode 100644 bcos-executor/src/precompiled/KVTablePrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/KVTablePrecompiled.h create mode 100644 bcos-executor/src/precompiled/SystemConfigPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/SystemConfigPrecompiled.h create mode 100644 bcos-executor/src/precompiled/TableManagerPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/TableManagerPrecompiled.h create mode 100644 bcos-executor/src/precompiled/TablePrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/TablePrecompiled.h create mode 100644 bcos-executor/src/precompiled/common/Common.h create mode 100644 bcos-executor/src/precompiled/common/Condition.h create mode 100644 bcos-executor/src/precompiled/common/PrecompiledAbi.h create mode 100644 bcos-executor/src/precompiled/common/PrecompiledGas.cpp create mode 100644 bcos-executor/src/precompiled/common/PrecompiledGas.h create mode 100644 bcos-executor/src/precompiled/common/PrecompiledResult.h create mode 100644 bcos-executor/src/precompiled/common/Utilities.cpp create mode 100644 bcos-executor/src/precompiled/common/Utilities.h create mode 100644 bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/AccountPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/AccountPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/DagTransferPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/DagTransferPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/GroupSigPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/GroupSigPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/PermissionPrecompiledInterface.h create mode 100644 bcos-executor/src/precompiled/extension/RingSigPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/RingSigPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/SmallBankPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/SmallBankPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/UserPrecompiled.h create mode 100644 bcos-executor/src/precompiled/extension/ZkpPrecompiled.cpp create mode 100644 bcos-executor/src/precompiled/extension/ZkpPrecompiled.h create mode 100644 bcos-executor/src/precompiled/solidity/Account.sol create mode 100644 bcos-executor/src/precompiled/solidity/BfsPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/Cast.sol create mode 100644 bcos-executor/src/precompiled/solidity/ConsensusPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/ContractAuthPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/Crypto.sol create mode 100644 bcos-executor/src/precompiled/solidity/EntryWrapper.sol create mode 100644 bcos-executor/src/precompiled/solidity/GroupSigPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/RingSigPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/SystemConfigPrecompiled.sol create mode 100644 bcos-executor/src/precompiled/solidity/Table.sol create mode 100644 bcos-executor/src/precompiled/solidity/ZkpPrecompiled.sol create mode 100644 bcos-executor/src/vm/DelegateHostContext.cpp create mode 100644 bcos-executor/src/vm/DelegateHostContext.h create mode 100644 bcos-executor/src/vm/EVMHostInterface.cpp create mode 100644 bcos-executor/src/vm/EVMHostInterface.h create mode 100644 bcos-executor/src/vm/HostContext.cpp create mode 100644 bcos-executor/src/vm/HostContext.h create mode 100644 bcos-executor/src/vm/Precompiled.cpp create mode 100644 bcos-executor/src/vm/Precompiled.h create mode 100644 bcos-executor/src/vm/VMFactory.cpp create mode 100644 bcos-executor/src/vm/VMFactory.h create mode 100644 bcos-executor/src/vm/VMInstance.cpp create mode 100644 bcos-executor/src/vm/VMInstance.h create mode 100644 bcos-executor/src/vm/gas_meter/GasInjector.cpp create mode 100644 bcos-executor/src/vm/gas_meter/GasInjector.h create mode 100644 bcos-executor/src/vm/gas_meter/Metric.cpp create mode 100644 bcos-executor/src/vm/gas_meter/Metric.h create mode 100644 bcos-executor/test/CMakeLists.txt create mode 100644 bcos-executor/test/flow-graph/CMakeLists.txt create mode 100644 bcos-executor/test/flow-graph/main.cpp create mode 100644 bcos-executor/test/liquid/hello_world.h create mode 100644 bcos-executor/test/liquid/hello_world.rs create mode 100644 bcos-executor/test/liquid/hello_world.wasm create mode 100644 bcos-executor/test/liquid/hello_world_caller.h create mode 100644 bcos-executor/test/liquid/hello_world_caller.rs create mode 100644 bcos-executor/test/liquid/hello_world_caller.wasm create mode 100644 bcos-executor/test/liquid/transfer.h create mode 100644 bcos-executor/test/liquid/transfer.rs create mode 100644 bcos-executor/test/liquid/transfer.wasm create mode 100644 bcos-executor/test/old/EVMPrecompiledTest.cpp create mode 100644 bcos-executor/test/old/MemoryStorage.h create mode 100644 bcos-executor/test/old/StateTest.cpp create mode 100644 bcos-executor/test/old/libexecutor/DAGTest.cpp create mode 100644 bcos-executor/test/old/libexecutor/ExecutorTest.cpp create mode 100644 bcos-executor/test/old/mock/MemoryStorage.h create mode 100644 bcos-executor/test/old/mock/MockDispatcher.h create mode 100644 bcos-executor/test/old/mock/MockLedger.h create mode 100644 bcos-executor/test/solidity/ParallelOk.sol create mode 100644 bcos-executor/test/solidity/TestEvmPrecompiled.sol create mode 100644 bcos-executor/test/solidity/precompiled/ConsensusPrecompiled.sol create mode 100644 bcos-executor/test/solidity/precompiled/Crypto.sol create mode 100644 bcos-executor/test/solidity/precompiled/SystemConfigPrecompiled.sol create mode 100644 bcos-executor/test/solidity/test_config.sol create mode 100644 bcos-executor/test/solidity/test_crypto.sol create mode 100644 bcos-executor/test/solidity/test_external_call.sol create mode 100644 bcos-executor/test/trie-test/CMakeLists.txt create mode 100644 bcos-executor/test/trie-test/main.cpp create mode 100644 bcos-executor/test/unittest/CMakeLists.txt create mode 100644 bcos-executor/test/unittest/container/TestHashMap.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestAbiReader.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestBlockContext.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestClockCache.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestDagExecutor.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestEVMExecutor.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestExecutiveStackFlow.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestExecutiveState.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestLedgerCache.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestScaleUtils.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestTxDAG.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TestWasmExecutor.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TxDAG.cpp create mode 100644 bcos-executor/test/unittest/libexecutor/TxDAG.h create mode 100644 bcos-executor/test/unittest/libprecompiled/AccountPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/AuthPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/ConfigPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/CryptoPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/EVMStateContextTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/FileSystemPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/GroupSigPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/KVTablePrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/PreCompiledFixture.h create mode 100644 bcos-executor/test/unittest/libprecompiled/PrecompiledCallTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/PrecompiledGas.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/RingSigPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/TablePrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/TablePrecompiledV320Test.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/UtilitiesTest.cpp create mode 100644 bcos-executor/test/unittest/libprecompiled/VRFPrecompiledTest.cpp create mode 100644 bcos-executor/test/unittest/libvm/.gitignore create mode 100644 bcos-executor/test/unittest/libvm/TestTransactionExecutive.cpp create mode 100644 bcos-executor/test/unittest/libvm/WasmPath.h.in create mode 100644 bcos-executor/test/unittest/main.cpp create mode 100644 bcos-executor/test/unittest/mock/MockBlock.h create mode 100644 bcos-executor/test/unittest/mock/MockBlockHeader.h create mode 100644 bcos-executor/test/unittest/mock/MockExecutiveFactory.h create mode 100644 bcos-executor/test/unittest/mock/MockExecutiveFlow.h create mode 100644 bcos-executor/test/unittest/mock/MockKeyPageStorage.h create mode 100644 bcos-executor/test/unittest/mock/MockLedger.h create mode 100644 bcos-executor/test/unittest/mock/MockTransactionExecutive.h create mode 100644 bcos-executor/test/unittest/mock/MockTransactionalStorage.h create mode 100644 bcos-executor/test/unittest/mock/MockTxPool.h create mode 100644 bcos-executor/test/wasm/infinit_loop.wasm create mode 100644 bcos-executor/test/wasm/metric_infinit_loop_global_gas.wasm create mode 100644 bcos-executor/test/wasm/metric_infinit_loop_useGas.wasm create mode 100644 bcos-executor/tools/CMakeLists.txt create mode 100644 bcos-executor/tools/inject_meter.cpp create mode 100644 bcos-framework/CMakeLists.txt create mode 100644 bcos-framework/bcos-framework/Common.h create mode 100644 bcos-framework/bcos-framework/consensus/ConsensusInterface.h create mode 100644 bcos-framework/bcos-framework/consensus/ConsensusNode.h create mode 100644 bcos-framework/bcos-framework/consensus/ConsensusNodeInterface.h create mode 100644 bcos-framework/bcos-framework/consensus/ConsensusTypeDef.h create mode 100644 bcos-framework/bcos-framework/dispatcher/SchedulerInterface.h create mode 100644 bcos-framework/bcos-framework/dispatcher/SchedulerTypeDef.h create mode 100644 bcos-framework/bcos-framework/election/FailOverTypeDef.h create mode 100644 bcos-framework/bcos-framework/election/LeaderElectionInterface.h create mode 100644 bcos-framework/bcos-framework/election/LeaderEntryPointInterface.h create mode 100644 bcos-framework/bcos-framework/executor/ExecuteError.h create mode 100644 bcos-framework/bcos-framework/executor/ExecutionMessage.h create mode 100644 bcos-framework/bcos-framework/executor/ExecutorStatus.h create mode 100644 bcos-framework/bcos-framework/executor/NativeExecutionMessage.h create mode 100644 bcos-framework/bcos-framework/executor/ParallelTransactionExecutorInterface.h create mode 100644 bcos-framework/bcos-framework/executor/PrecompiledTypeDef.h create mode 100644 bcos-framework/bcos-framework/front/FrontServiceInterface.h create mode 100644 bcos-framework/bcos-framework/gateway/GatewayInterface.h create mode 100644 bcos-framework/bcos-framework/gateway/GatewayTypeDef.h create mode 100644 bcos-framework/bcos-framework/gateway/GroupNodeInfo.h create mode 100644 bcos-framework/bcos-framework/ledger/GenesisConfig.h create mode 100644 bcos-framework/bcos-framework/ledger/LedgerConfig.h create mode 100644 bcos-framework/bcos-framework/ledger/LedgerInterface.h create mode 100644 bcos-framework/bcos-framework/ledger/LedgerTypeDef.h create mode 100644 bcos-framework/bcos-framework/multigroup/ChainNodeInfo.h create mode 100644 bcos-framework/bcos-framework/multigroup/ChainNodeInfoFactory.h create mode 100644 bcos-framework/bcos-framework/multigroup/GroupInfo.h create mode 100644 bcos-framework/bcos-framework/multigroup/GroupInfoCodec.h create mode 100644 bcos-framework/bcos-framework/multigroup/GroupInfoFactory.h create mode 100644 bcos-framework/bcos-framework/multigroup/GroupTypeDef.h create mode 100644 bcos-framework/bcos-framework/protocol/AMOPRequest.h create mode 100644 bcos-framework/bcos-framework/protocol/Block.h create mode 100644 bcos-framework/bcos-framework/protocol/BlockFactory.h create mode 100644 bcos-framework/bcos-framework/protocol/BlockHeader.h create mode 100644 bcos-framework/bcos-framework/protocol/BlockHeaderFactory.h create mode 100644 bcos-framework/bcos-framework/protocol/CommonError.h create mode 100644 bcos-framework/bcos-framework/protocol/Exceptions.h create mode 100644 bcos-framework/bcos-framework/protocol/GlobalConfig.h create mode 100644 bcos-framework/bcos-framework/protocol/LogEntry.h create mode 100644 bcos-framework/bcos-framework/protocol/MemberInterface.h create mode 100644 bcos-framework/bcos-framework/protocol/Protocol.h create mode 100644 bcos-framework/bcos-framework/protocol/ProtocolInfo.h create mode 100644 bcos-framework/bcos-framework/protocol/ProtocolInfoCodec.h create mode 100644 bcos-framework/bcos-framework/protocol/ProtocolTypeDef.h create mode 100644 bcos-framework/bcos-framework/protocol/ServiceDesc.h create mode 100644 bcos-framework/bcos-framework/protocol/Transaction.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionFactory.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionMetaData.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionReceipt.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionReceiptFactory.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionSubmitResult.h create mode 100644 bcos-framework/bcos-framework/protocol/TransactionSubmitResultFactory.h create mode 100644 bcos-framework/bcos-framework/rpc/HandshakeRequest.h create mode 100644 bcos-framework/bcos-framework/rpc/RPCInterface.h create mode 100644 bcos-framework/bcos-framework/sealer/SealerInterface.h create mode 100644 bcos-framework/bcos-framework/security/DataEncryptInterface.h create mode 100644 bcos-framework/bcos-framework/storage/Common.h create mode 100644 bcos-framework/bcos-framework/storage/Entry.h create mode 100644 bcos-framework/bcos-framework/storage/KVStorageHelper.h create mode 100644 bcos-framework/bcos-framework/storage/StorageInterface.h create mode 100644 bcos-framework/bcos-framework/storage/Table.h create mode 100644 bcos-framework/bcos-framework/sync/BlockSyncInterface.h create mode 100644 bcos-framework/bcos-framework/sync/SyncConfig.h create mode 100644 bcos-framework/bcos-framework/testutils/TestPromptFixture.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeFrontService.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeKVStorage.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeLedger.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeScheduler.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeSealer.h create mode 100644 bcos-framework/bcos-framework/testutils/faker/FakeTxPool.h create mode 100644 bcos-framework/bcos-framework/txpool/TxPoolInterface.h create mode 100644 bcos-framework/bcos-framework/txpool/TxPoolTypeDef.h create mode 100644 bcos-framework/test/CMakeLists.txt create mode 100644 bcos-framework/test/unittests/interfaces/ConsensusNodeTest.cpp create mode 100644 bcos-framework/test/unittests/interfaces/ExecutorTest.cpp create mode 100644 bcos-framework/test/unittests/main/main.cpp create mode 100644 bcos-front/CMakeLists.txt create mode 100644 bcos-front/bcos-front/Common.h create mode 100644 bcos-front/bcos-front/FrontImpl.h create mode 100644 bcos-front/bcos-front/FrontMessage.cpp create mode 100644 bcos-front/bcos-front/FrontMessage.h create mode 100644 bcos-front/bcos-front/FrontService.cpp create mode 100644 bcos-front/bcos-front/FrontService.h create mode 100644 bcos-front/bcos-front/FrontServiceFactory.cpp create mode 100644 bcos-front/bcos-front/FrontServiceFactory.h create mode 100644 bcos-front/test/CMakeLists.txt create mode 100644 bcos-front/test/unittests/FakeGateway.cpp create mode 100644 bcos-front/test/unittests/FakeGateway.h create mode 100644 bcos-front/test/unittests/FrontMessageTest.cpp create mode 100644 bcos-front/test/unittests/FrontServiceTest.cpp create mode 100644 bcos-gateway/CMakeLists.txt create mode 100644 bcos-gateway/bcos-gateway/Common.h create mode 100644 bcos-gateway/bcos-gateway/Gateway.cpp create mode 100644 bcos-gateway/bcos-gateway/Gateway.h create mode 100644 bcos-gateway/bcos-gateway/GatewayConfig.cpp create mode 100644 bcos-gateway/bcos-gateway/GatewayConfig.h create mode 100644 bcos-gateway/bcos-gateway/GatewayFactory.cpp create mode 100644 bcos-gateway/bcos-gateway/GatewayFactory.h create mode 100644 bcos-gateway/bcos-gateway/gateway/FrontServiceInfo.h create mode 100644 bcos-gateway/bcos-gateway/gateway/GatewayMessageExtAttributes.h create mode 100644 bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.cpp create mode 100644 bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.h create mode 100644 bcos-gateway/bcos-gateway/gateway/GatewayStatus.cpp create mode 100644 bcos-gateway/bcos-gateway/gateway/GatewayStatus.h create mode 100644 bcos-gateway/bcos-gateway/gateway/LocalRouterTable.cpp create mode 100644 bcos-gateway/bcos-gateway/gateway/LocalRouterTable.h create mode 100644 bcos-gateway/bcos-gateway/gateway/PeersRouterTable.cpp create mode 100644 bcos-gateway/bcos-gateway/gateway/PeersRouterTable.h create mode 100644 bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.cpp create mode 100644 bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.h create mode 100644 bcos-gateway/bcos-gateway/libamop/AMOPImpl.cpp create mode 100644 bcos-gateway/bcos-gateway/libamop/AMOPImpl.h create mode 100644 bcos-gateway/bcos-gateway/libamop/AMOPMessage.cpp create mode 100644 bcos-gateway/bcos-gateway/libamop/AMOPMessage.h create mode 100644 bcos-gateway/bcos-gateway/libamop/AirTopicManager.h create mode 100644 bcos-gateway/bcos-gateway/libamop/Common.h create mode 100644 bcos-gateway/bcos-gateway/libamop/TopicManager.cpp create mode 100644 bcos-gateway/bcos-gateway/libamop/TopicManager.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.cpp create mode 100644 bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Common.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Host.cpp create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Host.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Message.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.cpp create mode 100644 bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/PeerBlacklist.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/PeerWhitelist.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Session.cpp create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Session.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/SessionCallback.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/SessionFace.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/Socket.h create mode 100644 bcos-gateway/bcos-gateway/libnetwork/SocketFace.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/Common.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PInterface.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PMessage.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PMessage.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PSession.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/P2PSession.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/Service.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/Service.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/ServiceV2.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/ServiceV2.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.cpp create mode 100644 bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.h create mode 100644 bcos-gateway/bcos-gateway/libp2p/router/RouterTableInterface.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.cpp create mode 100644 bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.cpp create mode 100644 bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/ModuleWhiteList.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterFactory.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterInterface.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.cpp create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.cpp create mode 100644 bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.h create mode 100644 bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.cpp create mode 100644 bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.h create mode 100644 bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.cpp create mode 100644 bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.h create mode 100644 bcos-gateway/test/CMakeLists.txt create mode 100644 bcos-gateway/test/common/FrontServiceBuilder.h create mode 100644 bcos-gateway/test/integtests/GatewayTest.cpp create mode 100644 bcos-gateway/test/main/CMakeLists.txt create mode 100644 bcos-gateway/test/main/main.cpp create mode 100644 bcos-gateway/test/unittests/GatewayConfigTest.cpp create mode 100644 bcos-gateway/test/unittests/GatewayFactoryTest.cpp create mode 100644 bcos-gateway/test/unittests/GatewayMessageTest.cpp create mode 100644 bcos-gateway/test/unittests/GatewayNodeManagerTest.cpp create mode 100644 bcos-gateway/test/unittests/ModuleWhiteListTest.cpp create mode 100644 bcos-gateway/test/unittests/RateLimiterManagerTest.cpp create mode 100644 bcos-gateway/test/unittests/amop/AMOPMessageTest.cpp create mode 100644 bcos-gateway/test/unittests/amop/TopicManagerTest.cpp create mode 100644 bcos-gateway/test/unittests/data/ca/ca.crt create mode 100644 bcos-gateway/test/unittests/data/ca/node.crt create mode 100644 bcos-gateway/test/unittests/data/ca/node.key create mode 100644 bcos-gateway/test/unittests/data/config/config_ipv4.ini create mode 100644 bcos-gateway/test/unittests/data/config/config_ipv6.ini create mode 100644 bcos-gateway/test/unittests/data/config/json/nodes_ipv4.json create mode 100644 bcos-gateway/test/unittests/data/config/json/nodes_ipv6.json create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_ca.crt create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_ennode.crt create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_ennode.key create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_node.crt create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_node.key create mode 100644 bcos-gateway/test/unittests/data/sm_ca/sm_node.nodeid create mode 100644 bcos-leader-election/CMakeLists.txt create mode 100644 bcos-leader-election/src/CampaignConfig.cpp create mode 100644 bcos-leader-election/src/CampaignConfig.h create mode 100644 bcos-leader-election/src/Common.h create mode 100644 bcos-leader-election/src/ElectionConfig.cpp create mode 100644 bcos-leader-election/src/ElectionConfig.h create mode 100644 bcos-leader-election/src/LeaderElection.cpp create mode 100644 bcos-leader-election/src/LeaderElection.h create mode 100644 bcos-leader-election/src/LeaderElectionFactory.h create mode 100644 bcos-leader-election/src/LeaderEntryPoint.h create mode 100644 bcos-leader-election/src/WatcherConfig.cpp create mode 100644 bcos-leader-election/src/WatcherConfig.h create mode 100644 bcos-ledger/CMakeLists.txt create mode 100644 bcos-ledger/src/libledger/Ledger.cpp create mode 100644 bcos-ledger/src/libledger/Ledger.h create mode 100644 bcos-ledger/src/libledger/LedgerImpl.h create mode 100644 bcos-ledger/src/libledger/utilities/Common.h create mode 100644 bcos-ledger/test/CMakeLists.txt create mode 100644 bcos-ledger/test/main/main.cpp create mode 100644 bcos-ledger/test/mock/MockKeyFactor.h create mode 100644 bcos-ledger/test/mock/MockStorage.h create mode 100644 bcos-ledger/test/mock/MockTable.h create mode 100644 bcos-ledger/test/unittests/ledger/LedgerImplTest.cpp create mode 100644 bcos-ledger/test/unittests/ledger/LedgerTest.cpp create mode 100644 bcos-ledger/test/unittests/ledger/common/FakeBlock.h create mode 100644 bcos-ledger/test/unittests/ledger/common/FakeBlockHeader.h create mode 100644 bcos-ledger/test/unittests/ledger/common/FakeReceipt.h create mode 100644 bcos-ledger/test/unittests/ledger/common/FakeTransaction.h create mode 100644 bcos-pbft/CMakeLists.txt create mode 100644 bcos-pbft/bcos-pbft/core/Common.h create mode 100644 bcos-pbft/bcos-pbft/core/ConsensusConfig.cpp create mode 100644 bcos-pbft/bcos-pbft/core/ConsensusConfig.h create mode 100644 bcos-pbft/bcos-pbft/core/ConsensusEngine.h create mode 100644 bcos-pbft/bcos-pbft/core/Proposal.h create mode 100644 bcos-pbft/bcos-pbft/core/StateMachine.cpp create mode 100644 bcos-pbft/bcos-pbft/core/StateMachine.h create mode 100644 bcos-pbft/bcos-pbft/core/proto/Consensus.proto create mode 100644 bcos-pbft/bcos-pbft/framework/ConsensusConfigInterface.h create mode 100644 bcos-pbft/bcos-pbft/framework/ConsensusEngineInterface.h create mode 100644 bcos-pbft/bcos-pbft/framework/ProposalInterface.h create mode 100644 bcos-pbft/bcos-pbft/framework/StateMachineInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/PBFTFactory.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/PBFTFactory.h create mode 100644 bcos-pbft/bcos-pbft/pbft/PBFTImpl.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/PBFTImpl.h create mode 100644 bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.h create mode 100644 bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheFactory.h create mode 100644 bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.h create mode 100644 bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.h create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.h create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.h create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.h create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/PBFTTimer.h create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/Validator.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/engine/Validator.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/NewViewMsgInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTBaseMessageInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTCodecInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageFactory.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTProposalInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTRequestInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/PBFTStorage.h create mode 100644 bcos-pbft/bcos-pbft/pbft/interfaces/ViewChangeMsgInterface.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTBaseMessage.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessageFactoryImpl.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTProposal.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTRequest.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.h create mode 100644 bcos-pbft/bcos-pbft/pbft/protocol/proto/PBFT.proto create mode 100644 bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.cpp create mode 100644 bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.h create mode 100644 bcos-pbft/bcos-pbft/pbft/utilities/Common.h create mode 100644 bcos-pbft/test/CMakeLists.txt create mode 100644 bcos-pbft/test/unittests/core/TimerTest.cpp create mode 100644 bcos-pbft/test/unittests/main/main.cpp create mode 100644 bcos-pbft/test/unittests/pbft/PBFTConfigTest.cpp create mode 100644 bcos-pbft/test/unittests/pbft/PBFTEngineTest.cpp create mode 100644 bcos-pbft/test/unittests/pbft/PBFTFixture.h create mode 100644 bcos-pbft/test/unittests/pbft/PBFTViewChangeTest.cpp create mode 100644 bcos-pbft/test/unittests/protocol/FakePBFTMessage.h create mode 100644 bcos-pbft/test/unittests/protocol/PBFTMessageTest.cpp create mode 100644 bcos-protocol/CMakeLists.txt create mode 100644 bcos-protocol/bcos-protocol/CMakeLists.txt create mode 100644 bcos-protocol/bcos-protocol/Common.h create mode 100644 bcos-protocol/bcos-protocol/ParallelMerkleProof.cpp create mode 100644 bcos-protocol/bcos-protocol/ParallelMerkleProof.h create mode 100644 bcos-protocol/bcos-protocol/TransactionStatus.h create mode 100644 bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h create mode 100644 bcos-protocol/bcos-protocol/TransactionSubmitResultImpl.h create mode 100644 bcos-protocol/bcos-protocol/amop/TopicItem.h create mode 100644 bcos-protocol/test/CMakeLists.txt create mode 100644 bcos-protocol/test/unittests/main/main.cpp create mode 100644 bcos-rpc/CMakeLists.txt create mode 100644 bcos-rpc/bcos-rpc/Common.h create mode 100644 bcos-rpc/bcos-rpc/Rpc.cpp create mode 100644 bcos-rpc/bcos-rpc/Rpc.h create mode 100644 bcos-rpc/bcos-rpc/RpcFactory.cpp create mode 100644 bcos-rpc/bcos-rpc/RpcFactory.h create mode 100644 bcos-rpc/bcos-rpc/amop/AMOPClient.cpp create mode 100644 bcos-rpc/bcos-rpc/amop/AMOPClient.h create mode 100644 bcos-rpc/bcos-rpc/amop/AirAMOPClient.h create mode 100644 bcos-rpc/bcos-rpc/event/Common.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSub.cpp create mode 100644 bcos-rpc/bcos-rpc/event/EventSub.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSubMatcher.cpp create mode 100644 bcos-rpc/bcos-rpc/event/EventSubMatcher.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSubParams.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSubRequest.cpp create mode 100644 bcos-rpc/bcos-rpc/event/EventSubRequest.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSubResponse.cpp create mode 100644 bcos-rpc/bcos-rpc/event/EventSubResponse.h create mode 100644 bcos-rpc/bcos-rpc/event/EventSubTask.h create mode 100644 bcos-rpc/bcos-rpc/groupmgr/AirGroupManager.h create mode 100644 bcos-rpc/bcos-rpc/groupmgr/Common.h create mode 100644 bcos-rpc/bcos-rpc/groupmgr/GroupManager.cpp create mode 100644 bcos-rpc/bcos-rpc/groupmgr/GroupManager.h create mode 100644 bcos-rpc/bcos-rpc/groupmgr/NodeService.cpp create mode 100644 bcos-rpc/bcos-rpc/groupmgr/NodeService.h create mode 100644 bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.cpp create mode 100644 bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.h create mode 100644 bcos-rpc/bcos-rpc/jsonrpc/Common.h create mode 100644 bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.cpp create mode 100644 bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h create mode 100644 bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.cpp create mode 100644 bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h create mode 100644 bcos-rpc/test/CMakeLists.txt create mode 100644 bcos-rpc/test/unittests/main/main.cpp create mode 100644 bcos-scheduler/CMakeLists.txt create mode 100644 bcos-scheduler/src/BlockExecutive.cpp create mode 100644 bcos-scheduler/src/BlockExecutive.h create mode 100644 bcos-scheduler/src/BlockExecutiveFactory.cpp create mode 100644 bcos-scheduler/src/BlockExecutiveFactory.h create mode 100644 bcos-scheduler/src/Common.h create mode 100644 bcos-scheduler/src/DmcExecutor.cpp create mode 100644 bcos-scheduler/src/DmcExecutor.h create mode 100644 bcos-scheduler/src/DmcStepRecorder.cpp create mode 100644 bcos-scheduler/src/DmcStepRecorder.h create mode 100644 bcos-scheduler/src/Executive.h create mode 100644 bcos-scheduler/src/ExecutivePool.cpp create mode 100644 bcos-scheduler/src/ExecutivePool.h create mode 100644 bcos-scheduler/src/ExecutorManager.cpp create mode 100644 bcos-scheduler/src/ExecutorManager.h create mode 100644 bcos-scheduler/src/GraphKeyLocks.cpp create mode 100644 bcos-scheduler/src/GraphKeyLocks.h create mode 100644 bcos-scheduler/src/SchedulerFactory.h create mode 100644 bcos-scheduler/src/SchedulerImpl.cpp create mode 100644 bcos-scheduler/src/SchedulerImpl.h create mode 100644 bcos-scheduler/src/SchedulerManager.cpp create mode 100644 bcos-scheduler/src/SchedulerManager.h create mode 100644 bcos-scheduler/src/SerialBlockExecutive.cpp create mode 100644 bcos-scheduler/src/SerialBlockExecutive.h create mode 100644 bcos-scheduler/src/TarsExecutorManager.cpp create mode 100644 bcos-scheduler/src/TarsExecutorManager.h create mode 100644 bcos-scheduler/test/CMakeLists.txt create mode 100644 bcos-scheduler/test/main.cpp create mode 100644 bcos-scheduler/test/mock/MockBlockExecutive.h create mode 100644 bcos-scheduler/test/mock/MockBlockExecutiveFactory.h create mode 100644 bcos-scheduler/test/mock/MockDeadLockExecutor.h create mode 100644 bcos-scheduler/test/mock/MockDmcExecutor.h create mode 100644 bcos-scheduler/test/mock/MockExecutor.h create mode 100644 bcos-scheduler/test/mock/MockExecutor3.h create mode 100644 bcos-scheduler/test/mock/MockExecutorForCall.h create mode 100644 bcos-scheduler/test/mock/MockExecutorForCreate.h create mode 100644 bcos-scheduler/test/mock/MockExecutorForMessageDAG.h create mode 100644 bcos-scheduler/test/mock/MockLedger.h create mode 100644 bcos-scheduler/test/mock/MockLedger2.h create mode 100644 bcos-scheduler/test/mock/MockLedger3.h create mode 100644 bcos-scheduler/test/mock/MockMultiParallelExecutor.h create mode 100644 bcos-scheduler/test/mock/MockRPC.h create mode 100644 bcos-scheduler/test/mock/MockTransactionalStorage.h create mode 100644 bcos-scheduler/test/mock/MockTxPool1.h create mode 100644 bcos-scheduler/test/testBlockExecutive.cpp create mode 100644 bcos-scheduler/test/testChecksumAddress.cpp create mode 100644 bcos-scheduler/test/testCommitBlock.cpp create mode 100644 bcos-scheduler/test/testDmcExecutor.cpp create mode 100644 bcos-scheduler/test/testDmcStepRecorder.cpp create mode 100644 bcos-scheduler/test/testExecutivePool.cpp create mode 100644 bcos-scheduler/test/testExecutorManager.cpp create mode 100644 bcos-scheduler/test/testKeyLocks.cpp create mode 100644 bcos-scheduler/test/testScheduler.cpp create mode 100644 bcos-scheduler/test/testSchedulerImpl.cpp create mode 100644 bcos-sdk/CMakeLists.txt create mode 100644 bcos-sdk/bcos-cpp-sdk/Sdk.h create mode 100644 bcos-sdk/bcos-cpp-sdk/SdkFactory.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/SdkFactory.h create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/AMOP.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/AMOP.h create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/AMOPInterface.h create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.h create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/Common.h create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/TopicManager.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/amop/TopicManager.h create mode 100644 bcos-sdk/bcos-cpp-sdk/config/Config.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/config/Config.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/Common.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSub.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSub.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubInterface.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubParams.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubParams.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubStatus.h create mode 100644 bcos-sdk/bcos-cpp-sdk/event/EventSubTask.h create mode 100644 bcos-sdk/bcos-cpp-sdk/multigroup/JsonChainNodeInfoCodec.h create mode 100644 bcos-sdk/bcos-cpp-sdk/multigroup/JsonGroupInfoCodec.h create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/Common.h create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.h create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcInterface.h create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.h create mode 100644 bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.h create mode 100644 bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.h create mode 100644 bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractEventTopic.h create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.h create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/Common.h create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.h create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/Service.cpp create mode 100644 bcos-sdk/bcos-cpp-sdk/ws/Service.h create mode 100644 bcos-sdk/sample/CMakeLists.txt create mode 100644 bcos-sdk/sample/amop/CMakeLists.txt create mode 100644 bcos-sdk/sample/amop/broadcast.cpp create mode 100644 bcos-sdk/sample/amop/publish.cpp create mode 100644 bcos-sdk/sample/amop/subscribe.cpp create mode 100644 bcos-sdk/sample/config/config_sample.ini create mode 100644 bcos-sdk/sample/config/sm_config_sample.ini create mode 100644 bcos-sdk/sample/eventsub/CMakeLists.txt create mode 100644 bcos-sdk/sample/eventsub/eventsub.cpp create mode 100644 bcos-sdk/sample/rpc/CMakeLists.txt create mode 100644 bcos-sdk/sample/rpc/blocknotifier.cpp create mode 100644 bcos-sdk/sample/tx/CMakeLists.txt create mode 100644 bcos-sdk/sample/tx/deploy_hello.cpp create mode 100644 bcos-sdk/sample/tx/random_perf.cpp create mode 100644 bcos-sdk/sample/tx/tx_sign_perf.cpp create mode 100644 bcos-sdk/tests/CMakeLists.txt create mode 100644 bcos-sdk/tests/unittests/abi/ContractEventTopicTest.cpp create mode 100644 bcos-sdk/tests/unittests/amop/TopicManagerTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubParamsTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubRequestTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubResponseTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubTaskStateTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubTaskTest.cpp create mode 100644 bcos-sdk/tests/unittests/event/EventSubTest.cpp create mode 100644 bcos-sdk/tests/unittests/fake/WsServiceFake.h create mode 100644 bcos-sdk/tests/unittests/fake/WsSessionFake.h create mode 100644 bcos-sdk/tests/unittests/main.cpp create mode 100644 bcos-sdk/tests/unittests/tx/TransactionTest.cpp create mode 100644 bcos-sdk/tests/unittests/ws/BlockNumberInfoTest.cpp create mode 100644 bcos-sdk/tests/unittests/ws/HandshakeResponseTest.cpp create mode 100644 bcos-sealer/CMakeLists.txt create mode 100644 bcos-sealer/bcos-sealer/Common.h create mode 100644 bcos-sealer/bcos-sealer/Sealer.cpp create mode 100644 bcos-sealer/bcos-sealer/Sealer.h create mode 100644 bcos-sealer/bcos-sealer/SealerConfig.h create mode 100644 bcos-sealer/bcos-sealer/SealerFactory.cpp create mode 100644 bcos-sealer/bcos-sealer/SealerFactory.h create mode 100644 bcos-sealer/bcos-sealer/SealingManager.cpp create mode 100644 bcos-sealer/bcos-sealer/SealingManager.h create mode 100644 bcos-security/CMakeLists.txt create mode 100644 bcos-security/bcos-security/Common.h create mode 100644 bcos-security/bcos-security/DataEncryption.cpp create mode 100644 bcos-security/bcos-security/DataEncryption.h create mode 100644 bcos-security/bcos-security/KeyCenter.cpp create mode 100644 bcos-security/bcos-security/KeyCenter.h create mode 100644 bcos-security/test/CMakeLists.txt create mode 100644 bcos-security/test/unittests/libsecurity/DataEncryptionTest.cpp create mode 100644 bcos-security/test/unittests/main/main.cpp create mode 100644 bcos-storage/CMakeLists.txt create mode 100644 bcos-storage/bcos-storage/Common.cpp create mode 100644 bcos-storage/bcos-storage/Common.h create mode 100644 bcos-storage/bcos-storage/RocksDBStorage.cpp create mode 100644 bcos-storage/bcos-storage/RocksDBStorage.h create mode 100644 bcos-storage/bcos-storage/StorageImpl.h create mode 100644 bcos-storage/bcos-storage/TiKVStorage.cpp create mode 100644 bcos-storage/bcos-storage/TiKVStorage.h create mode 100644 bcos-storage/test/CMakeLists.txt create mode 100644 bcos-storage/test/unittest/CMakeLists.txt create mode 100644 bcos-storage/test/unittest/StorageTest.cpp create mode 100644 bcos-storage/test/unittest/TestRocksDBStorage.cpp create mode 100644 bcos-storage/test/unittest/TestTiKVStorage.cpp create mode 100644 bcos-storage/test/unittest/main.cpp create mode 100644 bcos-sync/CMakeLists.txt create mode 100644 bcos-sync/bcos-sync/BlockSync.cpp create mode 100644 bcos-sync/bcos-sync/BlockSync.h create mode 100644 bcos-sync/bcos-sync/BlockSyncConfig.cpp create mode 100644 bcos-sync/bcos-sync/BlockSyncConfig.h create mode 100644 bcos-sync/bcos-sync/BlockSyncFactory.cpp create mode 100644 bcos-sync/bcos-sync/BlockSyncFactory.h create mode 100644 bcos-sync/bcos-sync/interfaces/BlockRequestInterface.h create mode 100644 bcos-sync/bcos-sync/interfaces/BlockSyncMsgFactory.h create mode 100644 bcos-sync/bcos-sync/interfaces/BlockSyncMsgInterface.h create mode 100644 bcos-sync/bcos-sync/interfaces/BlockSyncStatusInterface.h create mode 100644 bcos-sync/bcos-sync/interfaces/BlocksMsgInterface.h create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlockRequestImpl.h create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgFactoryImpl.h create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgImpl.h create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.cpp create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.h create mode 100644 bcos-sync/bcos-sync/protocol/PB/BlocksMsgImpl.h create mode 100644 bcos-sync/bcos-sync/protocol/proto/BlockSync.proto create mode 100644 bcos-sync/bcos-sync/state/DownloadRequestQueue.cpp create mode 100644 bcos-sync/bcos-sync/state/DownloadRequestQueue.h create mode 100644 bcos-sync/bcos-sync/state/DownloadingQueue.cpp create mode 100644 bcos-sync/bcos-sync/state/DownloadingQueue.h create mode 100644 bcos-sync/bcos-sync/state/SyncPeerStatus.cpp create mode 100644 bcos-sync/bcos-sync/state/SyncPeerStatus.h create mode 100644 bcos-sync/bcos-sync/utilities/Common.h create mode 100644 bcos-sync/test/CMakeLists.txt create mode 100644 bcos-sync/test/unittests/faker/FakeConsensus.h create mode 100644 bcos-sync/test/unittests/main/main.cpp create mode 100644 bcos-sync/test/unittests/protocol/BlockSyncMsgTest.cpp create mode 100644 bcos-sync/test/unittests/sync/BlockSyncTest.cpp create mode 100644 bcos-sync/test/unittests/sync/SyncConfigTest.cpp create mode 100644 bcos-sync/test/unittests/sync/SyncFixture.h create mode 100644 bcos-table/CMakeLists.txt create mode 100644 bcos-table/src/CacheStorageFactory.cpp create mode 100644 bcos-table/src/CacheStorageFactory.h create mode 100644 bcos-table/src/KeyPageStorage.cpp create mode 100644 bcos-table/src/KeyPageStorage.h create mode 100644 bcos-table/src/StateStorage.h create mode 100644 bcos-table/src/StateStorageFactory.h create mode 100644 bcos-table/src/StateStorageInterface.h create mode 100644 bcos-table/src/StorageImpl.h create mode 100644 bcos-table/src/StorageInterface.cpp create mode 100644 bcos-table/src/StorageWrapper.h create mode 100644 bcos-table/src/Table.cpp create mode 100644 bcos-table/test/CMakeLists.txt create mode 100644 bcos-table/test/unittests/libtable/Entry.cpp create mode 100644 bcos-table/test/unittests/libtable/Hash.h create mode 100644 bcos-table/test/unittests/libtable/Table.cpp create mode 100644 bcos-table/test/unittests/libtable/TablePerf.cpp create mode 100644 bcos-table/test/unittests/libtable/TestKeyPageStorage.cpp create mode 100644 bcos-table/test/unittests/libtable/TestStateStorage.cpp create mode 100644 bcos-table/test/unittests/main/main.cpp create mode 100644 bcos-table/test/unittests/mock/MockTransactionalStorage.h create mode 100644 bcos-tars-protocol/CMakeLists.txt create mode 100644 bcos-tars-protocol/bcos-tars-protocol/Common.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/ErrorConverter.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/FrontServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/client/TxPoolServiceClient.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/impl/TarsHashable.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/impl/TarsOutput.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/impl/TarsSerializable.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/impl/TarsServantProxyCallback.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/impl/TarsStruct.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockFactoryImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionResultImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/GroupInfoCodecImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/GroupNodeInfoImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/MemberImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionFactoryImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionMetaDataImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.cpp create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultFactoryImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultImpl.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/Block.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/CommonProtocol.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionMessage.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionResult.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorStatus.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/FrontService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/GatewayInfo.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/GatewayService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/GroupInfo.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/LedgerConfig.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/LedgerService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/LightNode.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/Member.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/PBFTService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/ProtocolInfo.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/RouterTable.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/RpcService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/SchedulerService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/StorageService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/Transaction.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/TransactionMetaData.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/TransactionReceipt.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/TransactionSubmitResult.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/TwoPCParams.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/tars/TxPoolService.tars create mode 100644 bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlock.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlockHeader.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransaction.h create mode 100644 bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransactionReceipt.h create mode 100644 bcos-tars-protocol/test/CMakeLists.txt create mode 100644 bcos-tars-protocol/test/ProtocolTest.cpp create mode 100644 bcos-tars-protocol/test/ProxyCallbackTest.cpp create mode 100644 bcos-tars-protocol/test/ServiceClientTest.cpp create mode 100644 bcos-tars-protocol/test/main.cpp create mode 100644 bcos-tool/CMakeLists.txt create mode 100644 bcos-tool/bcos-tool/BfsFileFactory.cpp create mode 100644 bcos-tool/bcos-tool/BfsFileFactory.h create mode 100644 bcos-tool/bcos-tool/ConsensusNode.h create mode 100644 bcos-tool/bcos-tool/Exceptions.h create mode 100644 bcos-tool/bcos-tool/LedgerConfigFetcher.cpp create mode 100644 bcos-tool/bcos-tool/LedgerConfigFetcher.h create mode 100644 bcos-tool/bcos-tool/NodeConfig.cpp create mode 100644 bcos-tool/bcos-tool/NodeConfig.h create mode 100644 bcos-tool/bcos-tool/NodeTimeMaintenance.cpp create mode 100644 bcos-tool/bcos-tool/NodeTimeMaintenance.h create mode 100644 bcos-tool/bcos-tool/VersionConverter.h create mode 100644 bcos-tool/test/CMakeLists.txt create mode 100644 bcos-tool/test/unittests/libtool/NodeTimeMaintenanceTest.cpp create mode 100644 bcos-tool/test/unittests/libtool/VersionConvert.cpp create mode 100644 bcos-tool/test/unittests/main/main.cpp create mode 100644 bcos-txpool/CMakeLists.txt create mode 100644 bcos-txpool/bcos-txpool/CMakeLists.txt create mode 100644 bcos-txpool/bcos-txpool/TxPool.cpp create mode 100644 bcos-txpool/bcos-txpool/TxPool.h create mode 100644 bcos-txpool/bcos-txpool/TxPoolConfig.h create mode 100644 bcos-txpool/bcos-txpool/TxPoolFactory.cpp create mode 100644 bcos-txpool/bcos-txpool/TxPoolFactory.h create mode 100644 bcos-txpool/bcos-txpool/sync/TransactionSync.cpp create mode 100644 bcos-txpool/bcos-txpool/sync/TransactionSync.h create mode 100644 bcos-txpool/bcos-txpool/sync/TransactionSyncConfig.h create mode 100644 bcos-txpool/bcos-txpool/sync/interfaces/TransactionSyncInterface.h create mode 100644 bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgFactory.h create mode 100644 bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgInterface.h create mode 100644 bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.cpp create mode 100644 bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.h create mode 100644 bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h create mode 100644 bcos-txpool/bcos-txpool/sync/protocol/proto/TxsSync.proto create mode 100644 bcos-txpool/bcos-txpool/sync/utilities/Common.h create mode 100644 bcos-txpool/bcos-txpool/txpool/interfaces/NonceCheckerInterface.h create mode 100644 bcos-txpool/bcos-txpool/txpool/interfaces/TxPoolStorageInterface.h create mode 100644 bcos-txpool/bcos-txpool/txpool/interfaces/TxValidatorInterface.h create mode 100644 bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.cpp create mode 100644 bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.h create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.cpp create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.h create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.cpp create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.h create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/TxValidator.cpp create mode 100644 bcos-txpool/bcos-txpool/txpool/validator/TxValidator.h create mode 100644 bcos-txpool/test/CMakeLists.txt create mode 100644 bcos-txpool/test/demo/txpool_demo.cpp create mode 100644 bcos-txpool/test/unittests/main/main.cpp create mode 100644 bcos-txpool/test/unittests/sync/FakeTxsSyncMsg.h create mode 100644 bcos-txpool/test/unittests/sync/TxsSyncMsgTest.cpp create mode 100644 bcos-txpool/test/unittests/txpool/TxPoolFixture.h create mode 100644 bcos-txpool/test/unittests/txpool/TxPoolTest.cpp create mode 100644 bcos-txpool/test/unittests/txpool/TxsSyncTest.cpp create mode 100644 bcos-utilities/CMakeLists.txt create mode 100644 bcos-utilities/bcos-utilities/Base64.cpp create mode 100644 bcos-utilities/bcos-utilities/Base64.h create mode 100644 bcos-utilities/bcos-utilities/BoostLog.cpp create mode 100644 bcos-utilities/bcos-utilities/BoostLog.h create mode 100644 bcos-utilities/bcos-utilities/BoostLogInitializer.cpp create mode 100644 bcos-utilities/bcos-utilities/BoostLogInitializer.h create mode 100644 bcos-utilities/bcos-utilities/CallbackCollectionHandler.h create mode 100644 bcos-utilities/bcos-utilities/Common.cpp create mode 100644 bcos-utilities/bcos-utilities/Common.h create mode 100644 bcos-utilities/bcos-utilities/ConcurrentQueue.h create mode 100644 bcos-utilities/bcos-utilities/DataConvertUtility.cpp create mode 100644 bcos-utilities/bcos-utilities/DataConvertUtility.h create mode 100644 bcos-utilities/bcos-utilities/Error.h create mode 100644 bcos-utilities/bcos-utilities/Exceptions.h create mode 100644 bcos-utilities/bcos-utilities/FileUtility.cpp create mode 100644 bcos-utilities/bcos-utilities/FileUtility.h create mode 100644 bcos-utilities/bcos-utilities/FixedBytes.cpp create mode 100644 bcos-utilities/bcos-utilities/FixedBytes.h create mode 100644 bcos-utilities/bcos-utilities/IOServicePool.h create mode 100644 bcos-utilities/bcos-utilities/JsonDataConvertUtility.h create mode 100644 bcos-utilities/bcos-utilities/Log.h create mode 100644 bcos-utilities/bcos-utilities/Ranges.h create mode 100644 bcos-utilities/bcos-utilities/RefDataContainer.h create mode 100644 bcos-utilities/bcos-utilities/ThreadPool.h create mode 100644 bcos-utilities/bcos-utilities/Timer.cpp create mode 100644 bcos-utilities/bcos-utilities/Timer.h create mode 100644 bcos-utilities/bcos-utilities/Worker.cpp create mode 100644 bcos-utilities/bcos-utilities/Worker.h create mode 100644 bcos-utilities/bcos-utilities/ZstdCompress.cpp create mode 100644 bcos-utilities/bcos-utilities/ZstdCompress.h create mode 100644 bcos-utilities/test/CMakeLists.txt create mode 100644 bcos-utilities/test/unittests/libutilities/Base64Test.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/CommonTest.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/DataConvertUtilityTest.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/JsonDataConvertUtilityTest.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/RefDataContainerTest.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/TestFixedBytes.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/WorkerTest.cpp create mode 100644 bcos-utilities/test/unittests/libutilities/ZstdCompressTest.cpp create mode 100644 bcos-utilities/test/unittests/main/main.cpp create mode 100644 bcos-utilities/testutils/TestPromptFixture.h create mode 100644 benchmark/CMakeLists.txt create mode 100644 benchmark/merkleBench.cpp create mode 100644 cmake/CompilerSettings.cmake create mode 100644 cmake/Coverage.cmake create mode 100644 cmake/GenerateSources.cmake create mode 100644 cmake/IncludeDirectories.cmake create mode 100644 cmake/Options.cmake create mode 100644 cmake/ProjectBCOSWASM.cmake create mode 100644 cmake/ProjectGroupSig.cmake create mode 100644 cmake/ProjectSDF.cmake create mode 100644 cmake/ProjectTCMalloc.cmake create mode 100644 cmake/ProjectTiKVClient.cmake create mode 100644 cmake/ProjectWABT.cmake create mode 100644 cmake/SearchTestCases.cmake create mode 100644 cmake/TargetSettings.cmake create mode 100644 cmake/fiscobcos-config.cmake.in create mode 100644 cmake/shell/check-commit.sh create mode 100644 cmake/test/CMakeLists.txt create mode 100644 concepts/CMakeLists.txt create mode 100644 concepts/bcos-concepts/Basic.h create mode 100644 concepts/bcos-concepts/ByteBuffer.h create mode 100644 concepts/bcos-concepts/Exception.h create mode 100644 concepts/bcos-concepts/Hash.h create mode 100644 concepts/bcos-concepts/Serialize.h create mode 100644 concepts/bcos-concepts/front/Front.h create mode 100644 concepts/bcos-concepts/ledger/Ledger.h create mode 100644 concepts/bcos-concepts/protocol/Block.h create mode 100644 concepts/bcos-concepts/protocol/Receipt.h create mode 100644 concepts/bcos-concepts/protocol/Transaction.h create mode 100644 concepts/bcos-concepts/scheduler/Scheduler.h create mode 100644 concepts/bcos-concepts/storage/Storage.h create mode 100644 concepts/bcos-concepts/storage/Storage2.h create mode 100644 concepts/bcos-concepts/transaction-executor/TransactionExecutor.h create mode 100644 concepts/bcos-concepts/transaction-pool/TransactionPool.h create mode 100644 concepts/tests/testTask.cpp delete mode 100644 conf/ca.crt delete mode 100644 conf/cert.cnf delete mode 100644 conf/node.nodeid delete mode 100644 conf/node.pem delete mode 100644 conf/ssl.crt delete mode 100644 conf/ssl.key delete mode 100644 conf/ssl.nodeid delete mode 100644 configs/config.yaml create mode 100644 docs/FISCO_BCOS_Logo.svg create mode 100644 docs/README_EN.md create mode 100644 fisco-bcos-air/AirNodeInitializer.cpp create mode 100644 fisco-bcos-air/AirNodeInitializer.h create mode 100644 fisco-bcos-air/CMakeLists.txt create mode 100644 fisco-bcos-air/Common.h create mode 100644 fisco-bcos-air/main.cpp create mode 100644 fisco-bcos-demo/CMakeLists.txt create mode 100644 fisco-bcos-demo/distributed_ratelimiter_checker.cpp create mode 100644 fisco-bcos-demo/echo_client_sample.cpp create mode 100644 fisco-bcos-demo/echo_server_sample.cpp create mode 100644 fisco-bcos-tars-service/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/Common/TarsUtils.h create mode 100644 fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.cpp create mode 100644 fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.h create mode 100644 fisco-bcos-tars-service/ExecutorService/main/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.cpp create mode 100644 fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.h create mode 100644 fisco-bcos-tars-service/ExecutorService/main/main.cpp create mode 100644 fisco-bcos-tars-service/FrontService/FrontServiceServer.cpp create mode 100644 fisco-bcos-tars-service/FrontService/FrontServiceServer.h create mode 100644 fisco-bcos-tars-service/GatewayService/GatewayInitializer.cpp create mode 100644 fisco-bcos-tars-service/GatewayService/GatewayInitializer.h create mode 100644 fisco-bcos-tars-service/GatewayService/GatewayServiceServer.cpp create mode 100644 fisco-bcos-tars-service/GatewayService/GatewayServiceServer.h create mode 100644 fisco-bcos-tars-service/GatewayService/main/Application.cpp create mode 100644 fisco-bcos-tars-service/GatewayService/main/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/LedgerService/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/LedgerService/LedgerServiceServer.cpp create mode 100644 fisco-bcos-tars-service/LedgerService/LedgerServiceServer.h create mode 100644 fisco-bcos-tars-service/NodeService/NodeServiceApp.cpp create mode 100644 fisco-bcos-tars-service/NodeService/NodeServiceApp.h create mode 100644 fisco-bcos-tars-service/NodeService/max/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/NodeService/max/main.cpp create mode 100644 fisco-bcos-tars-service/NodeService/pro/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/NodeService/pro/main.cpp create mode 100644 fisco-bcos-tars-service/PBFTService/PBFTServiceClient.h create mode 100644 fisco-bcos-tars-service/PBFTService/PBFTServiceServer.cpp create mode 100644 fisco-bcos-tars-service/PBFTService/PBFTServiceServer.h create mode 100644 fisco-bcos-tars-service/RpcService/RpcInitializer.cpp create mode 100644 fisco-bcos-tars-service/RpcService/RpcInitializer.h create mode 100644 fisco-bcos-tars-service/RpcService/RpcServiceServer.cpp create mode 100644 fisco-bcos-tars-service/RpcService/RpcServiceServer.h create mode 100644 fisco-bcos-tars-service/RpcService/main/Application.cpp create mode 100644 fisco-bcos-tars-service/RpcService/main/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.cpp create mode 100644 fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.h create mode 100644 fisco-bcos-tars-service/SchedulerService/main/CMakeLists.txt create mode 100644 fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.cpp create mode 100644 fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.h create mode 100644 fisco-bcos-tars-service/SchedulerService/main/main.cpp create mode 100644 fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.cpp create mode 100644 fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.h delete mode 100755 fisco-sgx-go delete mode 100644 global/setting.go delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 internal/routers/api/v1/fiscoStart.go delete mode 100644 internal/routers/api/v1/quote.go delete mode 100644 internal/routers/api/v1/report.go delete mode 100644 internal/routers/router.go create mode 100644 libinitializer/AuthInitializer.h create mode 100644 libinitializer/BfsInitializer.h create mode 100644 libinitializer/CMakeLists.txt create mode 100644 libinitializer/CommandHelper.cpp create mode 100644 libinitializer/CommandHelper.h create mode 100644 libinitializer/Common.h create mode 100644 libinitializer/ExecutorInitializer.h create mode 100644 libinitializer/FrontServiceInitializer.cpp create mode 100644 libinitializer/FrontServiceInitializer.h create mode 100644 libinitializer/Initializer.cpp create mode 100644 libinitializer/Initializer.h create mode 100644 libinitializer/LedgerInitializer.h create mode 100644 libinitializer/LightNodeInitializer.cpp create mode 100644 libinitializer/LightNodeInitializer.h create mode 100644 libinitializer/PBFTInitializer.cpp create mode 100644 libinitializer/PBFTInitializer.h create mode 100644 libinitializer/ProPBFTInitializer.cpp create mode 100644 libinitializer/ProPBFTInitializer.h create mode 100644 libinitializer/ProtocolInitializer.cpp create mode 100644 libinitializer/ProtocolInitializer.h create mode 100644 libinitializer/SchedulerInitializer.h create mode 100644 libinitializer/StorageInitializer.h create mode 100644 libinitializer/TxPoolInitializer.cpp create mode 100644 libinitializer/TxPoolInitializer.h create mode 100644 libtask/CMakeLists.txt create mode 100644 libtask/bcos-task/Coroutine.h create mode 100644 libtask/bcos-task/Task.h create mode 100644 libtask/bcos-task/Wait.h create mode 100644 libtask/tests/CMakeLists.txt create mode 100644 libtask/tests/TaskTest.cpp create mode 100644 libtask/tests/main.cpp create mode 100644 lightnode/CMakeLists.txt create mode 100644 lightnode/bcos-lightnode/Log.h create mode 100644 lightnode/bcos-lightnode/rpc/Converter.h create mode 100644 lightnode/bcos-lightnode/rpc/LightNodeRPC.h create mode 100644 lightnode/bcos-lightnode/scheduler/SchedulerWrapperImpl.h create mode 100644 lightnode/bcos-lightnode/transaction-pool/TransactionPoolImpl.h create mode 100644 lightnode/fisco-bcos-lightnode/CMakeLists.txt create mode 100644 lightnode/fisco-bcos-lightnode/RPCInitializer.h create mode 100644 lightnode/fisco-bcos-lightnode/client/LedgerClientImpl.h create mode 100644 lightnode/fisco-bcos-lightnode/client/P2PClientImpl.h create mode 100644 lightnode/fisco-bcos-lightnode/client/SchedulerClientImpl.h create mode 100644 lightnode/fisco-bcos-lightnode/client/TransactionPoolClientImpl.h create mode 100644 lightnode/fisco-bcos-lightnode/main.cpp create mode 100644 lightnode/tests/CMakeLists.txt create mode 100644 lightnode/tests/P2PClientTest.cpp create mode 100644 lightnode/tests/RPCTest.cpp create mode 100644 lightnode/tests/SchedulerTest.cpp create mode 100644 lightnode/tests/TransactionPoolTest.cpp create mode 100644 lightnode/tests/main.cpp delete mode 100644 log/log_2023050219.13.log delete mode 100644 log/log_2023050219.17.log delete mode 100644 log/log_2023050219.21.log delete mode 100644 log/log_2023050219.22.log delete mode 100644 main.go delete mode 100644 pkg/setting/section.go delete mode 100644 pkg/setting/setting.go create mode 100644 tests/CMakeLists.txt create mode 100644 tests/perf/CMakeLists.txt create mode 100644 tests/perf/benchmark.cpp create mode 100644 tests/unittest/main.cpp create mode 100644 tools/.ci/Dockerfile create mode 100644 tools/.ci/Dockerfile_env create mode 100644 tools/.ci/check-commit.sh create mode 100644 tools/.ci/ci_check_air.sh create mode 100644 tools/.ci/ci_check_pro.sh create mode 100644 tools/.ci/clear_build_cache.sh create mode 100644 tools/.ci/requirements.txt create mode 100644 tools/BcosBuilder/docker/bridge/linux/framework/docker-compose.yml create mode 100644 tools/BcosBuilder/docker/bridge/linux/node/docker-compose.yml create mode 100644 tools/BcosBuilder/docker/bridge/linux/node/gen_compose_files.sh create mode 100644 tools/BcosBuilder/docker/bridge/mac/framework/docker-compose.yml create mode 100644 tools/BcosBuilder/docker/bridge/mac/node/docker-compose.yml create mode 100644 tools/BcosBuilder/docker/host/linux/framework/docker-compose.yml create mode 100644 tools/BcosBuilder/docker/host/linux/monitor/compose.yaml create mode 100644 tools/BcosBuilder/docker/host/linux/monitor/grafana/grafana.ini create mode 100644 tools/BcosBuilder/docker/host/linux/monitor/prometheus/prometheus.yml create mode 100644 tools/BcosBuilder/docker/host/linux/monitor/start_monitor.sh create mode 100644 tools/BcosBuilder/docker/host/linux/monitor/stop_monitor.sh create mode 100644 tools/BcosBuilder/docker/host/linux/node/docker-compose.yml create mode 100644 tools/BcosBuilder/max/conf/config-build-example.toml create mode 100644 tools/BcosBuilder/max/conf/config-deploy-example.toml create mode 100644 tools/BcosBuilder/max/conf/config-node-expand-example.toml create mode 100644 tools/BcosBuilder/max/conf/config-service-expand-example.toml create mode 100644 tools/BcosBuilder/pro/conf/config-build-example.toml create mode 100644 tools/BcosBuilder/pro/conf/config-deploy-example.toml create mode 100644 tools/BcosBuilder/pro/conf/config-node-expand-example.toml create mode 100644 tools/BcosBuilder/pro/conf/config-service-expand-example.toml create mode 100644 tools/BcosBuilder/requirements.txt create mode 100644 tools/BcosBuilder/src/command/monitor_command_impl.py create mode 100644 tools/BcosBuilder/src/command/node_command_impl.py create mode 100644 tools/BcosBuilder/src/command/service_command_impl.py create mode 100644 tools/BcosBuilder/src/common/parser_handler.py create mode 100644 tools/BcosBuilder/src/common/utilities.py create mode 100644 tools/BcosBuilder/src/config/chain_config.py create mode 100644 tools/BcosBuilder/src/config/max_node_config_generator.py create mode 100644 tools/BcosBuilder/src/config/monitor_config_generator.py create mode 100644 tools/BcosBuilder/src/config/node_config_generator.py create mode 100644 tools/BcosBuilder/src/config/service_config_generator.py create mode 100644 tools/BcosBuilder/src/config/tars_config_generator.py create mode 100644 tools/BcosBuilder/src/config/tars_install_package_generator.py create mode 100644 tools/BcosBuilder/src/controller/binary_controller.py create mode 100644 tools/BcosBuilder/src/controller/monitor_controller.py create mode 100644 tools/BcosBuilder/src/controller/node_controller.py create mode 100644 tools/BcosBuilder/src/controller/service_controller.py create mode 100644 tools/BcosBuilder/src/networkmgr/network_manager.py create mode 100644 tools/BcosBuilder/src/scripts/generate_cert.sh create mode 100644 tools/BcosBuilder/src/scripts/mtail/node.mtail create mode 100644 tools/BcosBuilder/src/scripts/mtail/start_mtail_monitor.sh create mode 100644 tools/BcosBuilder/src/scripts/mtail/stop_mtail_monitor.sh create mode 100644 tools/BcosBuilder/src/service/key_center_service.py create mode 100644 tools/BcosBuilder/src/service/tars_service.py create mode 100644 tools/BcosBuilder/src/tpl/config.genesis create mode 100644 tools/BcosBuilder/src/tpl/config.ini.executor create mode 100644 tools/BcosBuilder/src/tpl/config.ini.gateway create mode 100644 tools/BcosBuilder/src/tpl/config.ini.node create mode 100644 tools/BcosBuilder/src/tpl/config.ini.rpc create mode 100644 tools/BcosBuilder/src/tpl/tars_executor.conf create mode 100644 tools/BcosBuilder/src/tpl/tars_gateway.conf create mode 100644 tools/BcosBuilder/src/tpl/tars_node.conf create mode 100644 tools/BcosBuilder/src/tpl/tars_rpc.conf create mode 100644 tools/BcosBuilder/src/tpl/tars_start.sh create mode 100644 tools/BcosBuilder/src/tpl/tars_start_all.sh create mode 100644 tools/BcosBuilder/src/tpl/tars_stop.sh create mode 100644 tools/BcosBuilder/src/tpl/tars_stop_all.sh create mode 100644 tools/CMakeLists.txt create mode 100644 tools/archive-tool/ArchiveService.h create mode 100644 tools/archive-tool/CMakeLists.txt create mode 100644 tools/archive-tool/archive-reader/.gitignore create mode 100644 tools/archive-tool/archive-reader/Cargo.lock create mode 100644 tools/archive-tool/archive-reader/Cargo.toml create mode 100644 tools/archive-tool/archive-reader/rust-toolchain.toml create mode 100644 tools/archive-tool/archive-reader/src/main.rs create mode 100644 tools/archive-tool/archiveTool.cpp create mode 100644 tools/log_extract.sh create mode 100644 tools/log_extract_executor.sh create mode 100644 tools/storage-tool/CMakeLists.txt create mode 100644 tools/storage-tool/reader.cpp create mode 100644 tools/storage-tool/storageTool.cpp create mode 100644 tools/template/Dashboard.json create mode 100644 vcpkg-configuration.json create mode 100644 vcpkg.json diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..81b0357 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,169 @@ +version: 2.1 + +commands: + install_depencies: + description: Setup Ubuntu dependencies + parameters: + packages: + type: string + default: "" + steps: + - run: + name: Setup dependencies + command: | + apt-get update + ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + apt-get install -y cmake g++ git curl build-essential autoconf texinfo cmake flex bison libzstd-dev zlib1g-dev libpython3-dev python-dev << parameters.packages >> + echo 'export CCACHE_DIR=/ccache' >> $BASH_ENV + curl https://sh.rustup.rs -sSf | bash -s -- -y + source $HOME/.cargo/env + compile: + description: Compile + parameters: + options: + type: string + default: "" + compiler: + type: string + default: "" + steps: + - run: + name: Compile + no_output_timeout: 40m + command: | + source $HOME/.cargo/env + mkdir -p build && cd build + << parameters.compiler >> cmake -DURL_BASE=github.com -DCMAKE_BUILD_TYPE=debug -DHUNTER_JOBS_NUMBER=1 << parameters.options >> .. + make -j2 +executors: + ubuntu-bionic: + docker: + - image: ubuntu:18.04 + ubuntu-focal: + docker: + - image: ubuntu:20.04 + +jobs: + build_test: + working_directory: /FISCO-BCOS + executor: ubuntu-focal + steps: + - install_depencies: + packages: "git curl build-essential cmake ccache lcov libzstd-dev libgmp-dev" + - checkout + - restore_cache: + keys: + - deps-cache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}-{{ checksum ".circleci/config.yml" }} + - deps-cache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}- + - deps-cache-v1-{{ .Environment.CIRCLE_JOB }}- + - compile: + options: "-DTESTS=ON -DCOVERAGE=ON -DCMAKE_BUILD_TYPE=Debug" + - save_cache: + key: deps-cache-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}-{{ checksum ".circleci/config.yml" }} + paths: + - deps + - /ccache + - /root/.hunter + - run: + name: Unit test + command: | + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE make test + rm -rf /FISCO-BCOS/deps + - persist_to_workspace: + root: / + paths: + - FISCO-BCOS/build/* + - FISCO-BCOS/test/* + - FISCO-BCOS/tools/* + + generate_coverage: + working_directory: /FISCO-BCOS + executor: ubuntu-focal + steps: + - install_depencies: + packages: "lcov" + - attach_workspace: + at: / + - run: + name: Upload Coverage + command: | + bash <(curl -s https://codecov.io/bash) -C $CIRCLE_SHA1 -f "!*/deps/*" > /dev/null + + + build_test_guomi: + working_directory: /FISCO-BCOS-GM + docker: + - image: centos:7 + steps: + - run: + name: Setup dependencies + command: | + yum install -y epel-release centos-release-scl + yum install -y git make gcc gcc-c++ gmp-static glibc-static glibc-devel cmake3 ccache devtoolset-7 libzstd-devel zlib-devel flex bison python-devel python3-devel && source /opt/rh/devtoolset-7/enable + yum install -y https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + echo 'export CCACHE_DIR=/ccache' >> $BASH_ENV + curl https://sh.rustup.rs -sSf | bash -s -- -y + source $HOME/.cargo/env + - checkout + - restore_cache: + keys: + - deps-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}-{{ checksum ".circleci/config.yml" }} + - deps-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}- + - deps-v1-{{ .Environment.CIRCLE_JOB }}- + - run: + name: Compile + no_output_timeout: 40m + command: | + source /opt/rh/devtoolset-7/enable + source $HOME/.cargo/env + yum list devtoolset-7\* + mkdir -p build && cd build + cmake3 -DURL_BASE=github.com -DCMAKE_BUILD_TYPE=debug -DTESTS=ON -DHUNTER_JOBS_NUMBER=1 .. + make -j2 + - save_cache: + key: deps-v1-{{ .Environment.CIRCLE_JOB }}-{{ .Environment.CIRCLE_BRANCH }}-{{ checksum ".circleci/config.yml" }} + paths: + - deps + - /ccache + - /root/.hunter + - run: + name: Unit test + command: | + cd build + make test + - run: + name: Run GM nodes + command: | + cd build + ../tools/BcosAirBuilder/build_chain.sh -l "127.0.0.1:4" -e fisco-bcos-air/fisco-bcos -s && cd nodes/127.0.0.1 && bash start_all.sh && sleep 10 && [[ $(ps -ef| grep fisco-bcos |grep -v grep | wc -l) == 4 ]] + + +workflows: + version: 2 + build_and_test: + jobs: + - build_test: + filters: + branches: + only: + - /^pull.*/ + tags: + ignore: /.*/ + - generate_coverage: + requires: + - build_test + filters: + branches: + only: + - /^pull.*/ + tags: + ignore: /.*/ + - build_test_guomi: + filters: + branches: + only: + - /^pull.*/ + - /^release.*/ + tags: + ignore: /.*/ \ No newline at end of file diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..de0f373 --- /dev/null +++ b/.clang-format @@ -0,0 +1,94 @@ +--- +Language: Cpp +# BasedOnStyle: Chromium +AccessModifierOffset: -4 +AlignAfterOpenBracket: DontAlign +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: true +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: true + AfterCaseLabel: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false +BreakBeforeTernaryOperators: false +BreakConstructorInitializers: BeforeColon +ColumnLimit: 100 +CommentPragmas: "^ IWYU pragma:" +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [foreach, Q_FOREACH, BOOST_FOREACH] +IncludeCategories: + - Regex: '^".*' + Priority: 1 + - Regex: "^' + Priority: 2 + - Regex: "^<.*" + Priority: 99 + - Regex: ".*" + Priority: 4 +IndentCaseLabels: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: "" +MacroBlockEnd: "" +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 1 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 50 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Auto +TabWidth: 4 +UseTab: Never \ No newline at end of file diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..56bafee --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,240 @@ +--- +Checks: 'readability-*,clang-diagnostic-*,clang-analyzer-*,bugprone-*,cppcoreguidelines-*,modernize-*,performance-*,-modernize-use-trailing-return-type,-modernize-use-nodiscard' +WarningsAsErrors: '' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +FormatStyle: none +User: more +CheckOptions: + - key: modernize-replace-auto-ptr.IncludeStyle + value: llvm + - key: cppcoreguidelines-no-malloc.Reallocations + value: '::realloc' + - key: cppcoreguidelines-owning-memory.LegacyResourceConsumers + value: '::free;::realloc;::freopen;::fclose' + - key: bugprone-reserved-identifier.Invert + value: 'false' + - key: bugprone-narrowing-conversions.PedanticMode + value: 'false' + - key: bugprone-unused-return-value.CheckedFunctions + value: '::std::async;::std::launder;::std::remove;::std::remove_if;::std::unique;::std::unique_ptr::release;::std::basic_string::empty;::std::vector::empty;::std::back_inserter;::std::distance;::std::find;::std::find_if;::std::inserter;::std::lower_bound;::std::make_pair;::std::map::count;::std::map::find;::std::map::lower_bound;::std::multimap::equal_range;::std::multimap::upper_bound;::std::set::count;::std::set::find;::std::setfill;::std::setprecision;::std::setw;::std::upper_bound;::std::vector::at;::bsearch;::ferror;::feof;::isalnum;::isalpha;::isblank;::iscntrl;::isdigit;::isgraph;::islower;::isprint;::ispunct;::isspace;::isupper;::iswalnum;::iswprint;::iswspace;::isxdigit;::memchr;::memcmp;::strcmp;::strcoll;::strncmp;::strpbrk;::strrchr;::strspn;::strstr;::wcscmp;::access;::bind;::connect;::difftime;::dlsym;::fnmatch;::getaddrinfo;::getopt;::htonl;::htons;::iconv_open;::inet_addr;::isascii;::isatty;::mmap;::newlocale;::openat;::pathconf;::pthread_equal;::pthread_getspecific;::pthread_mutex_trylock;::readdir;::readlink;::recvmsg;::regexec;::scandir;::semget;::setjmp;::shm_open;::shmget;::sigismember;::strcasecmp;::strsignal;::ttyname' + - key: cert-dcl16-c.NewSuffixes + value: 'L;LL;LU;LLU' + - key: cppcoreguidelines-macro-usage.CheckCapsOnly + value: 'false' + - key: bugprone-narrowing-conversions.WarnOnFloatingPointNarrowingConversion + value: 'true' + - key: bugprone-assert-side-effect.IgnoredFunctions + value: __builtin_expect + - key: cppcoreguidelines-narrowing-conversions.IgnoreConversionFromTypes + value: '' + - key: cert-str34-c.DiagnoseSignedUnsignedCharComparisons + value: 'false' + - key: bugprone-narrowing-conversions.WarnWithinTemplateInstantiation + value: 'false' + - key: cert-err33-c.CheckedFunctions + value: '::aligned_alloc;::asctime_s;::at_quick_exit;::atexit;::bsearch;::bsearch_s;::btowc;::c16rtomb;::c32rtomb;::calloc;::clock;::cnd_broadcast;::cnd_init;::cnd_signal;::cnd_timedwait;::cnd_wait;::ctime_s;::fclose;::fflush;::fgetc;::fgetpos;::fgets;::fgetwc;::fopen;::fopen_s;::fprintf;::fprintf_s;::fputc;::fputs;::fputwc;::fputws;::fread;::freopen;::freopen_s;::fscanf;::fscanf_s;::fseek;::fsetpos;::ftell;::fwprintf;::fwprintf_s;::fwrite;::fwscanf;::fwscanf_s;::getc;::getchar;::getenv;::getenv_s;::gets_s;::getwc;::getwchar;::gmtime;::gmtime_s;::localtime;::localtime_s;::malloc;::mbrtoc16;::mbrtoc32;::mbsrtowcs;::mbsrtowcs_s;::mbstowcs;::mbstowcs_s;::memchr;::mktime;::mtx_init;::mtx_lock;::mtx_timedlock;::mtx_trylock;::mtx_unlock;::printf_s;::putc;::putwc;::raise;::realloc;::remove;::rename;::scanf;::scanf_s;::setlocale;::setvbuf;::signal;::snprintf;::snprintf_s;::sprintf;::sprintf_s;::sscanf;::sscanf_s;::strchr;::strerror_s;::strftime;::strpbrk;::strrchr;::strstr;::strtod;::strtof;::strtoimax;::strtok;::strtok_s;::strtol;::strtold;::strtoll;::strtoul;::strtoull;::strtoumax;::strxfrm;::swprintf;::swprintf_s;::swscanf;::swscanf_s;::thrd_create;::thrd_detach;::thrd_join;::thrd_sleep;::time;::timespec_get;::tmpfile;::tmpfile_s;::tmpnam;::tmpnam_s;::tss_create;::tss_get;::tss_set;::ungetc;::ungetwc;::vfprintf;::vfprintf_s;::vfscanf;::vfscanf_s;::vfwprintf;::vfwprintf_s;::vfwscanf;::vfwscanf_s;::vprintf_s;::vscanf;::vscanf_s;::vsnprintf;::vsnprintf_s;::vsprintf;::vsprintf_s;::vsscanf;::vsscanf_s;::vswprintf;::vswprintf_s;::vswscanf;::vswscanf_s;::vwprintf_s;::vwscanf;::vwscanf_s;::wcrtomb;::wcschr;::wcsftime;::wcspbrk;::wcsrchr;::wcsrtombs;::wcsrtombs_s;::wcsstr;::wcstod;::wcstof;::wcstoimax;::wcstok;::wcstok_s;::wcstol;::wcstold;::wcstoll;::wcstombs;::wcstombs_s;::wcstoul;::wcstoull;::wcstoumax;::wcsxfrm;::wctob;::wctrans;::wctype;::wmemchr;::wprintf_s;::wscanf;::wscanf_s;' + - key: bugprone-suspicious-string-compare.WarnOnLogicalNotComparison + value: 'false' + - key: cppcoreguidelines-explicit-virtual-functions.AllowOverrideAndFinal + value: 'false' + - key: bugprone-easily-swappable-parameters.QualifiersMix + value: 'false' + - key: bugprone-suspicious-string-compare.WarnOnImplicitComparison + value: 'true' + - key: bugprone-argument-comment.CommentNullPtrs + value: '0' + - key: bugprone-narrowing-conversions.WarnOnIntegerToFloatingPointNarrowingConversion + value: 'true' + - key: cppcoreguidelines-owning-memory.LegacyResourceProducers + value: '::malloc;::aligned_alloc;::realloc;::calloc;::fopen;::freopen;::tmpfile' + - key: cppcoreguidelines-narrowing-conversions.WarnOnFloatingPointNarrowingConversion + value: 'true' + - key: bugprone-easily-swappable-parameters.SuppressParametersUsedTogether + value: 'true' + - key: cppcoreguidelines-init-variables.IncludeStyle + value: llvm + - key: bugprone-argument-comment.StrictMode + value: '0' + - key: bugprone-easily-swappable-parameters.NamePrefixSuffixSilenceDissimilarityTreshold + value: '1' + - key: bugprone-unhandled-self-assignment.WarnOnlyIfThisHasSuspiciousField + value: 'true' + - key: google-readability-namespace-comments.ShortNamespaceLines + value: '10' + - key: bugprone-suspicious-string-compare.StringCompareLikeFunctions + value: '' + - key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerNarrowingConversion + value: 'true' + - key: bugprone-easily-swappable-parameters.IgnoredParameterNames + value: '"";iterator;Iterator;begin;Begin;end;End;first;First;last;Last;lhs;LHS;rhs;RHS' + - key: cppcoreguidelines-prefer-member-initializer.UseAssignment + value: 'false' + - key: cppcoreguidelines-explicit-virtual-functions.FinalSpelling + value: final + - key: bugprone-narrowing-conversions.WarnOnIntegerNarrowingConversion + value: 'true' + - key: modernize-loop-convert.NamingStyle + value: CamelCase + - key: bugprone-suspicious-include.ImplementationFileExtensions + value: 'c;cc;cpp;cxx' + - key: cppcoreguidelines-pro-type-member-init.UseAssignment + value: 'false' + - key: bugprone-suspicious-missing-comma.SizeThreshold + value: '5' + - key: bugprone-suspicious-include.HeaderFileExtensions + value: ';h;hh;hpp;hxx' + - key: bugprone-argument-comment.CommentCharacterLiterals + value: '0' + - key: bugprone-argument-comment.CommentIntegerLiterals + value: '0' + - key: bugprone-stringview-nullptr.IncludeStyle + value: llvm + - key: modernize-pass-by-value.IncludeStyle + value: llvm + - key: bugprone-sizeof-expression.WarnOnSizeOfThis + value: 'true' + - key: bugprone-string-constructor.WarnOnLargeLength + value: 'true' + - key: bugprone-too-small-loop-variable.MagnitudeBitsUpperLimit + value: '16' + - key: cppcoreguidelines-explicit-virtual-functions.OverrideSpelling + value: override + - key: bugprone-argument-comment.CommentFloatLiterals + value: '0' + - key: modernize-use-nullptr.NullMacros + value: 'NULL' + - key: bugprone-dynamic-static-initializers.HeaderFileExtensions + value: ';h;hh;hpp;hxx' + - key: bugprone-suspicious-enum-usage.StrictMode + value: 'false' + - key: cppcoreguidelines-macro-usage.AllowedRegexp + value: '^DEBUG_*' + - key: bugprone-suspicious-missing-comma.MaxConcatenatedTokens + value: '5' + - key: cppcoreguidelines-narrowing-conversions.PedanticMode + value: 'false' + - key: bugprone-implicit-widening-of-multiplication-result.UseCXXHeadersInCppSources + value: 'true' + - key: bugprone-not-null-terminated-result.WantToUseSafeFunctions + value: 'true' + - key: bugprone-string-constructor.LargeLengthThreshold + value: '8388608' + - key: cppcoreguidelines-avoid-magic-numbers.IgnoreAllFloatingPointValues + value: 'false' + - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctions + value: 'false' + - key: bugprone-implicit-widening-of-multiplication-result.UseCXXStaticCastsInCppSources + value: 'true' + - key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField + value: 'false' + - key: bugprone-exception-escape.FunctionsThatShouldNotThrow + value: '' + - key: bugprone-argument-comment.CommentStringLiterals + value: '0' + - key: modernize-loop-convert.MaxCopySize + value: '16' + - key: bugprone-easily-swappable-parameters.MinimumLength + value: '2' + - key: cppcoreguidelines-pro-bounds-constant-array-index.GslHeader + value: '' + - key: cppcoreguidelines-explicit-virtual-functions.IgnoreDestructors + value: 'false' + - key: bugprone-signed-char-misuse.CharTypdefsToIgnore + value: '' + - key: bugprone-sizeof-expression.WarnOnSizeOfConstant + value: 'true' + - key: bugprone-argument-comment.CommentBoolLiterals + value: '0' + - key: bugprone-argument-comment.CommentUserDefinedLiterals + value: '0' + - key: bugprone-easily-swappable-parameters.IgnoredParameterTypeSuffixes + value: 'bool;Bool;_Bool;it;It;iterator;Iterator;inputit;InputIt;forwardit;ForwardIt;bidirit;BidirIt;constiterator;const_iterator;Const_Iterator;Constiterator;ConstIterator;RandomIt;randomit;random_iterator;ReverseIt;reverse_iterator;reverse_const_iterator;ConstReverseIterator;Const_Reverse_Iterator;const_reverse_iterator;Constreverseiterator;constreverseiterator' + - key: google-readability-braces-around-statements.ShortStatementLines + value: '1' + - key: bugprone-reserved-identifier.AllowedIdentifiers + value: '' + - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays + value: 'false' + - key: cppcoreguidelines-avoid-magic-numbers.IgnoredFloatingPointValues + value: '1.0;100.0;' + - key: cppcoreguidelines-macro-usage.IgnoreCommandLineMacros + value: 'true' + - key: bugprone-signal-handler.AsyncSafeFunctionSet + value: POSIX + - key: cppcoreguidelines-pro-bounds-constant-array-index.IncludeStyle + value: llvm + - key: bugprone-easily-swappable-parameters.ModelImplicitConversions + value: 'true' + - key: cppcoreguidelines-narrowing-conversions.WarnWithinTemplateInstantiation + value: 'false' + - key: cppcoreguidelines-narrowing-conversions.WarnOnEquivalentBitWidth + value: 'true' + - key: bugprone-misplaced-widening-cast.CheckImplicitCasts + value: 'false' + - key: cppcoreguidelines-avoid-magic-numbers.IgnoredIntegerValues + value: '1;2;3;4;' + - key: modernize-loop-convert.MinConfidence + value: reasonable + - key: cppcoreguidelines-avoid-magic-numbers.IgnorePowersOf2IntegerValues + value: 'false' + - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnorePublicMemberVariables + value: 'false' + - key: cppcoreguidelines-special-member-functions.AllowMissingMoveFunctionsWhenCopyIsDeleted + value: 'false' + - key: google-readability-namespace-comments.SpacesBeforeComments + value: '2' + - key: cppcoreguidelines-avoid-magic-numbers.IgnoreBitFieldsWidths + value: 'true' + - key: cppcoreguidelines-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic + value: 'true' + - key: bugprone-argument-comment.IgnoreSingleArgument + value: '0' + - key: bugprone-suspicious-missing-comma.RatioThreshold + value: '0.200000' + - key: cppcoreguidelines-no-malloc.Allocations + value: '::malloc;::calloc' + - key: bugprone-narrowing-conversions.WarnOnEquivalentBitWidth + value: 'true' + - key: bugprone-sizeof-expression.WarnOnSizeOfIntegerExpression + value: 'false' + - key: bugprone-assert-side-effect.CheckFunctionCalls + value: 'false' + - key: bugprone-narrowing-conversions.IgnoreConversionFromTypes + value: '' + - key: cppcoreguidelines-narrowing-conversions.WarnOnIntegerToFloatingPointNarrowingConversion + value: 'true' + - key: bugprone-string-constructor.StringNames + value: '::std::basic_string;::std::basic_string_view' + - key: bugprone-assert-side-effect.AssertMacros + value: assert,NSAssert,NSCAssert + - key: bugprone-exception-escape.IgnoredExceptions + value: '' + - key: bugprone-signed-char-misuse.DiagnoseSignedUnsignedCharComparisons + value: 'true' + - key: llvm-qualified-auto.AddConstToQualified + value: 'false' + - key: cppcoreguidelines-init-variables.MathHeader + value: '' + - key: google-readability-function-size.StatementThreshold + value: '800' + - key: llvm-else-after-return.WarnOnConditionVariables + value: 'false' + - key: bugprone-sizeof-expression.WarnOnSizeOfCompareToConstant + value: 'true' + - key: bugprone-reserved-identifier.AggressiveDependentMemberLookup + value: 'false' + - key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor + value: 'false' + - key: cppcoreguidelines-no-malloc.Deallocations + value: '::free' + - key: bugprone-dangling-handle.HandleClasses + value: 'std::basic_string_view;std::experimental::basic_string_view' + - key: bugprone-implicit-widening-of-multiplication-result.IncludeStyle + value: llvm + - key: llvm-else-after-return.WarnOnUnfixable + value: 'false' + - key: readability-identifier-length.IgnoredVariableNames + value: 'it|ar|i|j|k|e|id|ss|os|tx|db' +... + diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..09b15c0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,31 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Deploy Contract '....' +3. Call interface '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment (please complete the following information):** + - OS: [e.g. CentOS 7.2] + - FISCO BCOS Version [e.g. 2.4.0] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..e6e3287 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,17 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 120 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.github/workflows/check-commit.yml b/.github/workflows/check-commit.yml new file mode 100644 index 0000000..cafb949 --- /dev/null +++ b/.github/workflows/check-commit.yml @@ -0,0 +1,33 @@ +name: Commit Check +on: + push: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + pull_request: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + release: + types: [published, created, edited] + +jobs: + build: + name: check commit + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + env: + PR_TITLE: ${{ github.event.pull_request.title }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 60 + + - name: Check + run: | + sudo apt-get update + sudo apt-get -y install clang-format + bash tools/.ci/check-commit.sh diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..ac3679a --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,68 @@ +name: Build and Publish Docker Image + +on: + push: + tags: + - 'v3.*.*' + release: + types: [prereleased] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + DOCKER_REPOSITORY: fiscobcos + + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Get branch name + uses: nelonoel/branch-name@v1.0.1 + - name: Fetch tag + run: | + git fetch --tags --force + + - name: Get git tag + uses: little-core-labs/get-git-tag@v3.0.1 + id: tag_data + with: + tagRegex: (.*) # Optional. Returns specified group text as tag name. Full tag string is returned if regex is not defined. + tagRegexGroup: 1 # Optional. Default is 1. + - name: Set docker tag from tag + id: set_docker_tag + run: | + [[ ${{github.ref}} == */tags/* ]] && DOCKER_TAG="${GIT_TAG_NAME}" || DOCKER_TAG="${BRANCH_NAME}" + DOCKER_TAG="fiscoorg/${DOCKER_REPOSITORY}:${DOCKER_TAG}" + + echo "New docker tag is ${DOCKER_TAG}" + echo "::set-output name=docker_tag::$(echo ${DOCKER_TAG})" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Build + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_FISCOPR_USER }} + password: ${{ secrets.DOCKER_FISCOPR_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + push: true + file: ./tools/.ci/Dockerfile + platforms: linux/amd64 + tags: ${{ steps.set_docker_tag.outputs.docker_tag }} + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..428a0cb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,320 @@ +name: Build and Publish Binary +on: + push: + tags-ignore: + - v1.* + branches-ignore: + - "**" + release: + types: [published, created] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + compile_macOS_release: + name: upload standard binary of macOS + runs-on: macos-12 + # if: startsWith(github.ref,'v2') + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 5 + - name: install rust language + uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2021-06-17 + override: true + - name: install macOS dependencies + run: brew install ccache libomp gmp + - name: configure + run: export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) && CC=/usr/bin/clang CXX=/usr/bin/clang++ cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC=ON + - name: compile + run: make -j2 && make tar + - name: tar BcosBuilder + run: mv tools/BcosBuilder . && tar -cvzf BcosBuilder.tgz BcosBuilder + - name: tar fisco-bcos for macOS + run: mv fisco-bcos-air/ bin/ && mv lightnode/fisco-bcos-lightnode/fisco-bcos-lightnode bin/ && cp tools/BcosAirBuilder/build_chain.sh bin/ && cd bin && strip fisco-bcos && strip fisco-bcos-lightnode && tar -cvzf lightnode.tar.gz fisco-bcos-lightnode && tar -cvzf fisco-bcos.tar.gz fisco-bcos build_chain.sh + - name: Upload fisco-bcos binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/fisco-bcos.tar.gz + asset_name: fisco-bcos-macOS-x86_64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload fisco-bcos-lightnode binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/lightnode.tar.gz + asset_name: fisco-bcos-lightnode-macOS-x86_64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fisco-bcos-tars-service/BcosNodeService.tgz + asset_name: BcosNodeService-macOS-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosRpcService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fisco-bcos-tars-service/BcosRpcService.tgz + asset_name: BcosRpcService-macOS-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosGatewayService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fisco-bcos-tars-service/BcosGatewayService.tgz + asset_name: BcosGatewayService-macOS-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosMaxNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fisco-bcos-tars-service/BcosMaxNodeService.tgz + asset_name: BcosMaxNodeService-macOS-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosExecutorService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fisco-bcos-tars-service/BcosExecutorService.tgz + asset_name: BcosExecutorService-macOS-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload build_chain.sh + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: tools/BcosAirBuilder/build_chain.sh + asset_name: build_chain.sh + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosBuilder + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: BcosBuilder.tgz + asset_name: BcosBuilder.tgz + tag: ${{ github.ref }} + overwrite: true + + compile_centos_release: + name: upload standard binary of linux + runs-on: self-hosted-centos + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + + - name: yum install + run: | + sudo yum install -y -q epel-release centos-release-scl flex bison patch gmp-static glibc-static glibc-devel libzstd-devel + sudo yum install -y -q devtoolset-11 llvm-toolset-7.0 rh-perl530-perl cmake3 zlib-devel ccache lcov python-devel python3-devel python3-pip + sudo yum reinstall -y -q https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm + sudo yum install -y -q git + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-11/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + cd build && cmake3 -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=OFF -DCOVERAGE=OFF -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=ON -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j8 && make tar + - name: tar fisco-bcos for CentOS + run: mkdir -p bin && mv build/fisco-bcos-air/fisco-bcos bin && mv build/lightnode/fisco-bcos-lightnode/fisco-bcos-lightnode bin && cd bin && strip fisco-bcos && strip fisco-bcos-lightnode && tar -cvzf fisco-bcos.tar.gz fisco-bcos && tar -cvzf lightnode.tar.gz fisco-bcos-lightnode + - name: Upload fisco-bcos binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/fisco-bcos.tar.gz + asset_name: fisco-bcos-linux-x86_64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload fisco-bcos-lightnode binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/lightnode.tar.gz + asset_name: fisco-bcos-lightnode-linux-x86_64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosNodeService.tgz + asset_name: BcosNodeService-linux-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosRpcService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosRpcService.tgz + asset_name: BcosRpcService-linux-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosGatewayService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosGatewayService.tgz + asset_name: BcosGatewayService-linux-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosMaxNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosMaxNodeService.tgz + asset_name: BcosMaxNodeService-linux-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosExecutorService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosExecutorService.tgz + asset_name: BcosExecutorService-linux-x86_64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload build_chain.sh + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: tools/BcosAirBuilder/build_chain.sh + asset_name: build_chain.sh + tag: ${{ github.ref }} + overwrite: true + + compile_arm_release: + name: upload standard binary of arm + runs-on: self-hosted-arm + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + - name: yum install + run: | + yum install -y epel-release centos-release-scl flex bison patch gmp-static java glibc-static glibc-devel libzstd-devel + yum install -y devtoolset-10 llvm-toolset-7.0 rh-perl530-perl zlib-devel ccache lcov python-devel python3-devel python3-pip + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Build for Arm + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-10/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + cd build && cmake3 -DCMAKE_BUILD_TYPE=Release -DTESTS=OFF -DCOVERAGE=OFF -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=ON -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j4 && make tar + - name: tar fisco-bcos for Arm + run: mkdir -p bin && mv build/fisco-bcos-air/fisco-bcos bin && mv build/lightnode/fisco-bcos-lightnode/fisco-bcos-lightnode bin && cd bin && strip fisco-bcos && strip fisco-bcos-lightnode && tar -cvzf fisco-bcos.tar.gz fisco-bcos && tar -cvzf lightnode.tar.gz fisco-bcos-lightnode + - name: Upload fisco-bcos binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/fisco-bcos.tar.gz + asset_name: fisco-bcos-linux-aarch64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload fisco-bcos-lightnode binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bin/lightnode.tar.gz + asset_name: fisco-bcos-lightnode-linux-aarch64.tar.gz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosNodeService.tgz + asset_name: BcosNodeService-linux-aarch64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosRpcService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosRpcService.tgz + asset_name: BcosRpcService-linux-aarch64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosGatewayService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosGatewayService.tgz + asset_name: BcosGatewayService-linux-aarch64.tgz + tag: ${{ github.ref }} + verwrite: true + - name: Upload BcosMaxNodeService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosMaxNodeService.tgz + asset_name: BcosMaxNodeService-linux-aarch64.tgz + tag: ${{ github.ref }} + overwrite: true + - name: Upload BcosExecutorService binaries to release + uses: svenstaro/upload-release-action@v1-release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: build/fisco-bcos-tars-service/BcosExecutorService.tgz + asset_name: BcosExecutorService-linux-aarch64.tgz + tag: ${{ github.ref }} + overwrite: true \ No newline at end of file diff --git a/.github/workflows/workflow-self-hosted-arm-static-bulid.yml b/.github/workflows/workflow-self-hosted-arm-static-bulid.yml new file mode 100644 index 0000000..51ff659 --- /dev/null +++ b/.github/workflows/workflow-self-hosted-arm-static-bulid.yml @@ -0,0 +1,59 @@ +name: Arm Static Buld +on: + pull_request: + branches: + - release-3.* + - feature-3.* + - master + types: [closed] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + +jobs: + if_merged: + name: arm static build + if: github.event.pull_request.merged == true + runs-on: self-hosted-static-arm + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + - name: Prepare centos tools + run: | + yum install -y epel-release centos-release-scl flex bison patch gmp-static java glibc-static glibc-devel libzstd-devel + yum install -y devtoolset-10 llvm-toolset-7.0 rh-perl530-perl zlib-devel ccache lcov python-devel python3-devel + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-10/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + mkdir -p build && cd build + cmake3 -DBUILD_STATIC=ON -DCMAKE_BUILD_TYPE=Debug -DWITH_LIGHTNODE=ON -DWITH_TIKV=Off .. || cat *.log + make -j3 \ No newline at end of file diff --git a/.github/workflows/workflow-self-hosted-arm.yml b/.github/workflows/workflow-self-hosted-arm.yml new file mode 100644 index 0000000..55a1aaa --- /dev/null +++ b/.github/workflows/workflow-self-hosted-arm.yml @@ -0,0 +1,73 @@ +name: Arm CI Check +on: + push: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + pull_request: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + release: + types: [published, created, edited] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build_arm: + name: arm ci check + runs-on: self-hosted-arm + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + - name: Prepare centos tools + run: | + yum install -y epel-release centos-release-scl flex bison patch gmp-static java glibc-static glibc-devel libzstd-devel + yum install -y devtoolset-10 llvm-toolset-7.0 rh-perl530-perl zlib-devel ccache lcov python-devel python3-devel python3-pip + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-10/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + mkdir -p build && cd build + cmake3 -DCMAKE_BUILD_TYPE=Release -DTESTS=ON -DWITH_CPPSDK=ON -DWITH_TARS_SERVICES=ON -DWITH_TIKV=OFF -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j3 + - name: Test + run: + cd build && CTEST_OUTPUT_ON_FAILURE=TRUE make test + + - name: Integration test - Air + run: cd tools && bash .ci/ci_check_air.sh + - name: Integration test - Pro + run: cd tools && bash .ci/ci_check_pro.sh diff --git a/.github/workflows/workflow-self-hosted-centos-static-build.yml b/.github/workflows/workflow-self-hosted-centos-static-build.yml new file mode 100644 index 0000000..f1b57dd --- /dev/null +++ b/.github/workflows/workflow-self-hosted-centos-static-build.yml @@ -0,0 +1,60 @@ +name: Centos Static build +on: + pull_request: + branches: + - release-3.* + - feature-3.* + - master + types: [closed] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build_centos: + name: centos ci check + runs-on: self-hosted-static-centos + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + - name: Set up JDK 1.8 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + java-package: jdk + + - name: yum install + run: | + sudo yum install -y -q epel-release centos-release-scl flex bison patch gmp-static glibc-static glibc-devel libzstd-devel + sudo yum install -y -q devtoolset-11 llvm-toolset-7.0 rh-perl530-perl zlib-devel ccache lcov python-devel python3-devel python3-pip + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-11/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + cd build && cmake3 -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC=ON -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=On -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j4 \ No newline at end of file diff --git a/.github/workflows/workflow-self-hosted-centos.yml b/.github/workflows/workflow-self-hosted-centos.yml new file mode 100644 index 0000000..ce76bf5 --- /dev/null +++ b/.github/workflows/workflow-self-hosted-centos.yml @@ -0,0 +1,79 @@ +name: Centos CI Check +on: + push: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + pull_request: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + release: + types: [push] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build_centos: + name: centos ci check + runs-on: self-hosted-centos + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + + - name: Set up JDK 1.8 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + java-package: jdk + + - name: yum install + run: | + sudo yum install -y -q epel-release centos-release-scl flex bison patch gmp-static glibc-static glibc-devel libzstd-devel + sudo yum install -y -q devtoolset-11 llvm-toolset-7.0 rh-perl530-perl cmake3 zlib-devel ccache lcov python-devel python3-devel python3-pip + sudo yum reinstall -y -q https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm + sudo yum install -y -q git + + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + . /opt/rh/devtoolset-11/enable + . /opt/rh/rh-perl530/enable + export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ + . /opt/rh/llvm-toolset-7.0/enable + alias cmake='cmake3' + cd build && cmake3 -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=ON -DCOVERAGE=ON -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=OFF -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j8 + - name: Test + run: + cd build && CTEST_OUTPUT_ON_FAILURE=TRUE make test + + - name: Integration test - Air + run: cd tools && bash .ci/ci_check_air.sh diff --git a/.github/workflows/workflow-self-hosted-ubuntu-static-build.yml b/.github/workflows/workflow-self-hosted-ubuntu-static-build.yml new file mode 100644 index 0000000..74adaba --- /dev/null +++ b/.github/workflows/workflow-self-hosted-ubuntu-static-build.yml @@ -0,0 +1,65 @@ +name: Ubuntu Static Build +on: + pull_request: + branches: + - release-3.* + - feature-3.* + - master + types: [closed] + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build_ubuntu: + name: ubuntu static build + if: github.event.pull_request.merged == true + runs-on: self-hosted-static-ubuntu + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + - name: Set up JDK 1.8 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + java-package: jdk + + - name: apt install + run: | + sudo apt update + sudo apt install -y lcov ccache wget python3-dev git curl zip unzip tar + sudo apt install -y --no-install-recommends \ + clang make build-essential cmake libssl-dev zlib1g-dev ca-certificates \ + libgmp-dev flex bison patch libzstd-dev ninja-build pkg-config ccache uuid-runtime + + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cd build && cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_STATIC=On -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=ON -DWITH_TARS_SERVICES=ON .. || cat *.log + make -j4 + diff --git a/.github/workflows/workflow-self-hosted-ubuntu.yml b/.github/workflows/workflow-self-hosted-ubuntu.yml new file mode 100644 index 0000000..a67dad4 --- /dev/null +++ b/.github/workflows/workflow-self-hosted-ubuntu.yml @@ -0,0 +1,83 @@ +name: Ubuntu CI Check +on: + push: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + pull_request: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + release: + types: [push] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build_ubuntu: + name: ubuntu ci check + runs-on: self-hosted-ubuntu + strategy: + fail-fast: false + env: + VCPKG_ROOT: ~/cache/vcpkg + DEPS_ROOT: ~/cache/deps + steps: + - uses: actions/checkout@v3 + with: + clean: false + - name: Set up JDK 1.8 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 8 + java-package: jdk + + - name: apt install + run: | + sudo apt update + sudo apt install -y lcov ccache wget python3-dev python3-pip git curl zip unzip tar + sudo apt install -y --no-install-recommends \ + clang make build-essential cmake libssl-dev zlib1g-dev ca-certificates \ + libgmp-dev flex bison patch libzstd-dev ninja-build pkg-config ccache uuid-runtime + + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + + - name: Reuse build cache + run: | + mkdir -p ./build + rm -rf deps + ln -s ${{ env.DEPS_ROOT }} deps + + - name: Remove cache if correspond dir change + run: ./tools/.ci/clear_build_cache.sh + + - name: Config vcpkg registry proxy + run: sed -i "s/https:\/\/github.com/http:\/\/ghproxy.com\/https:\/\/github.com/g" vcpkg-configuration.json + + - name: Build for linux + run: | + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cd build && cmake -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Debug -DTESTS=ON -DCOVERAGE=ON -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=ON -DWITH_TARS_SERVICES=ON -DTOOLS=ON .. || cat *.log + make -j8 + - name: Test + run: | + export PATH=/home/ci/.tiup/bin/:$PATH + cat /home/ci/.bashrc + curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh + source /home/ci/.bashrc + tiup update --self && tiup update playground + tiup install playground tikv:v5.4.2 pd:v5.4.2 + nohup tiup playground v5.4.2 --mode tikv-slim --without-monitor & + sleep 30 && cd build && CTEST_OUTPUT_ON_FAILURE=TRUE ctest + - name: Integration test - Air + run: cd tools && bash .ci/ci_check_air.sh + - name: Integration test - Pro + run: cd tools && bash .ci/ci_check_pro.sh + diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..72f80fb --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,160 @@ +name: Others CI check +on: + push: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + pull_request: + paths-ignore: + - "docs/**" + - "Changelog.md" + - "README.md" + release: + types: [published, push] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + name: build + runs-on: ${{ matrix.os }} + continue-on-error: true + strategy: + fail-fast: false + matrix: + os: [macos-12] + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 5 + - uses: actions-rs/toolchain@v1 + with: + toolchain: nightly-2022-07-28 + override: true + - name: Prepare vcpkg + if: runner.os != 'Windows' + uses: friendlyanon/setup-vcpkg@v1 + with: { committish: 7e3dcf74e37034eea358934a90a11d618520e139 } + - uses: actions/cache@v2 + id: deps_cache + with: + path: | + deps/ + c:/vcpkg + !c:/vcpkg/.git + !c:/vcpkg/buildtrees + !c:/vcpkg/packages + !c:/vcpkg/downloads + key: build-${{ matrix.os }}-${{ github.base_ref }}-${{ hashFiles('.github/workflows/workflow.yml') }} + restore-keys: | + build-${{ matrix.os }}-${{ github.base_ref }}-${{ hashFiles('.github/workflows/workflow.yml') }} + build-${{ matrix.os }}-${{ github.base_ref }}- + build-${{ matrix.os }}- + - name: Build for windows + if: runner.os == 'Windows' + run: | + mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=OFF -DFULLNODE=OFF -DWITH_LIGHTNODE=OFF -DWITH_CPPSDK=ON -DWITH_TIKV=OFF -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake ../ + cmake --build . --parallel 3 + - name: Build for linux + if: runner.os == 'Linux' + run: | + sudo apt install -y lcov ccache wget libgmp-dev python3-dev + export GCC='gcc-10' + export CXX='g++-10' + mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=ON -DCOVERAGE=ON -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=OFF -DWITH_TARS_SERVICES=ON -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake ../ + cmake --build . --parallel 3 + - name: Build for macos + if: runner.os == 'macOS' + run: | + brew install ccache gmp lcov libomp + mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DTESTS=ON -DCOVERAGE=ON -DWITH_LIGHTNODE=ON -DWITH_CPPSDK=ON -DWITH_TIKV=OFF -DWITH_TARS_SERVICES=ON -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake ../ + cmake --build . --parallel 3 + - name: Test + if: runner.os != 'Windows' + run: | + cd build && CTEST_OUTPUT_ON_FAILURE=TRUE ctest + make cov + - name: Generate covreage report + if: runner.os == 'Linux' + uses: codecov/codecov-action@v2 + with: + version: "v0.1.15" + file: ./build/coverage.info + name: FISCO BCOS 3.0.0 coverage + fail_ci_if_error: true +# build_centos: +# name: build_centos +# runs-on: ${{ matrix.os }} +# continue-on-error: true +# strategy: +# fail-fast: false +# matrix: +# os: [ubuntu-20.04] +# tikv: ['WITH_TIKV=ON', 'WITH_TIKV=OFF'] +# container: docker.io/centos:7 +# steps: +# - uses: actions/checkout@v2 +# with: +# fetch-depth: 5 +# - uses: actions/cache@v2 +# id: deps_cache +# with: +# path: | +# /home/runner/.ccache +# /Users/runner/.ccache/ +# deps/ +# key: centos-notest-${{ matrix.os }}-${{ github.base_ref }}-${{ hashFiles('.github/workflows/workflow.yml') }} +# restore-keys: | +# centos-notest-${{ matrix.os }}-${{ github.base_ref }}-${{ hashFiles('.github/workflows/workflow.yml') }} +# centos-notest-${{ matrix.os }}-${{ github.base_ref }}- +# centos-notest-${{ matrix.os }}- +# - name: Prepare centos tools +# run: | +# yum install -y epel-release centos-release-scl flex bison patch gmp-static +# yum install -y devtoolset-10 devtoolset-11 llvm-toolset-7.0 rh-perl530-perl cmake3 zlib-devel ccache lcov python-devel python3-devel +# yum install -y https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm +# yum install -y git +# yum remove -y cmake +# alias cmake='cmake3' +# - name: Prepare vcpkg +# if: runner.os != 'Windows' +# uses: friendlyanon/setup-vcpkg@v1 +# with: { committish: 7e3dcf74e37034eea358934a90a11d618520e139 } +# - uses: actions-rs/toolchain@v1 +# with: +# toolchain: nightly-2022-07-28 +# override: true +# - name: Build +# run: | +# . /opt/rh/devtoolset-10/enable +# . /opt/rh/rh-perl530/enable +# export LIBCLANG_PATH=/opt/rh/llvm-toolset-7.0/root/lib64/ +# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" +# . /opt/rh/llvm-toolset-7.0/enable +# mkdir -p build +# cd build +# alias cmake='cmake3' +# ln -s /usr/bin/cmake3 /usr/bin/cmake +# echo "alias cmake=cmake3" >> ~/.bashrc +# cmake3 -DCMAKE_BUILD_TYPE=Release -DTESTS=ON -DWITH_LIGHTNODE=OFF -DWITH_CPPSDK=OFF -DWITH_TARS_SERVICES=ON -D${{ matrix.tikv }} -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake ../ +# cmake3 --build . --parallel 3 +# - name: Test with tikv +# if: matrix.tikv == 'WITH_TIKV=ON' +# run: | +# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" +# mkdir -p /root/.tiup/bin/ +# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh +# source /github/home/.profile +# tiup update --self && tiup update playground +# tiup clean --all +# tiup playground v5.4.2 --mode tikv-slim --without-monitor & +# sleep 15 +# export OMP_NUM_THREADS=1 +# cd build && CTEST_OUTPUT_ON_FAILURE=TRUE make test +# - name: Test +# if: matrix.tikv == 'WITH_TIKV=OFF' +# run: | +# export OMP_NUM_THREADS=1 +# cd build && CTEST_OUTPUT_ON_FAILURE=TRUE make test \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a51a763 --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# java +*.class + + +# ignore some directory +build** +deps +deps/** + +# vs +*.sln +*.vcxproj* +.vs/ +.vscode/ +.idea/ + +# macOS +.DS_Store + +# log +*.log + +# python +*.pyc + +# vcpkg +vcpkg + +# clangd file +compile_commands.json +.cache + +# generated test +tools/BcosAirBuilder/nodes** +tools/BcosProBuilder/generated** +tools/BcosAirBuilder/* +*.log + +test/* +/CMakeSettings.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..fe07c99 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vcpkg"] + path = vcpkg + url = https://github.com/microsoft/vcpkg diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..12d6e06 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,115 @@ +cmake_minimum_required(VERSION 3.14) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum OS X deployment version") + +if(NOT DEFINED URL_BASE) + set(URL_BASE "github.com") +endif() + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +set(VERSION "3.2.0") +set(VERSION_SUFFIX "") +include(Options) +configure_project() + +# vcpkg init +if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) + find_package(Git REQUIRED) + execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- vcpkg WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) + set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake" + CACHE STRING "Vcpkg toolchain file") +endif() + +project(FISCO-BCOS VERSION ${VERSION}) + +include(CompilerSettings) +include(BuildInfoGenerator) + +include(IncludeDirectories) +include(TargetSettings) + +add_subdirectory(bcos-boostssl) +add_subdirectory(bcos-framework) +add_subdirectory(bcos-crypto) +add_subdirectory(bcos-utilities) + +if(WITH_LIGHTNODE) + add_subdirectory(lightnode) +endif() + +if(FULLNODE) + if(WITH_WASM) + include(ProjectWABT) + include(ProjectBCOSWASM) + endif() + include(ProjectGroupSig) + include(ProjectSDF) + + + add_subdirectory(bcos-codec) + add_subdirectory(bcos-sealer) + add_subdirectory(bcos-security) + add_subdirectory(bcos-table) + add_subdirectory(bcos-tool) + add_subdirectory(bcos-scheduler) + add_subdirectory(bcos-executor) + add_subdirectory(bcos-storage) + add_subdirectory(bcos-ledger) + add_subdirectory(bcos-protocol) + add_subdirectory(bcos-tars-protocol) + add_subdirectory(bcos-rpc) + add_subdirectory(bcos-gateway) + add_subdirectory(bcos-pbft) + add_subdirectory(bcos-txpool) + add_subdirectory(bcos-sync) + add_subdirectory(bcos-front) + add_subdirectory(bcos-leader-election) + add_subdirectory(libinitializer) + add_subdirectory(fisco-bcos-air) + add_subdirectory(concepts) + add_subdirectory(libtask) + + if(WITH_TARS_SERVICES) + add_subdirectory(fisco-bcos-tars-service) + endif() + + if(TESTS) + enable_testing() + add_subdirectory(tests) + add_subdirectory(benchmark) + endif() +endif() + +if(WITH_CPPSDK) + add_subdirectory(bcos-sdk) +endif() + +if(TOOLS) + add_subdirectory(tools) +endif() + +# for code coverage +if(COVERAGE) + include(Coverage) + config_coverage("coverage" "'/usr*' 'boost/*'") +endif() + +print_config("FISCO BCOS") + +include(CMakePackageConfigHelpers) +configure_package_config_file( + "${CMAKE_SOURCE_DIR}/cmake/fiscobcos-config.cmake.in" + "${CMAKE_BINARY_DIR}/fiscobcos-config.cmake" + INSTALL_DESTINATION "share/fiscobcos" +) + +install( + FILES "${CMAKE_BINARY_DIR}/fiscobcos-config.cmake" + DESTINATION "share/fiscobcos" +) + +install( + EXPORT fiscobcosTargets + DESTINATION share/fiscobcos + NAMESPACE fiscobcos:: +) \ No newline at end of file diff --git a/ChangeLog.md b/ChangeLog.md new file mode 100644 index 0000000..0b90ca7 --- /dev/null +++ b/ChangeLog.md @@ -0,0 +1,363 @@ +### 3.1.1 + +(2022-12-07) + +**新增** + +* 支持在MacOS上通过搭链脚本([`build_chain.sh`](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/tutorial/air/build_chain.html))直接下载二进制搭链,无需手动编译节点二进制([#3179](https://github.com/FISCO-BCOS/FISCO-BCOS/pull/3179)) + +**修复** + +* 共识模块快速视图切换的问题([#3168](https://github.com/FISCO-BCOS/FISCO-BCOS/pull/3168)) +* 测试合约初始化逻辑修复([#3182](https://github.com/FISCO-BCOS/FISCO-BCOS/pull/3182)) +* gateway回包问题修复([#3197](https://github.com/FISCO-BCOS/FISCO-BCOS/pull/3197)) +* DMC执行时消息包类型错误修复([#3198](https://github.com/FISCO-BCOS/FISCO-BCOS/pull/3198)) + +**兼容性** + +* 历史版本升级 + + 需要升级的链的“数据兼容版本号([compatibility_version](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/change_log/3_1_1.html#id5))”为如下版本时: + + * 3.1.0:数据完全兼容当前版本,直接替换二进制即可完成升级 + * 3.0.x:支持通过替换二进制进行灰度升级,若需使用当前版本的新特性,需升级数据兼容版本号,操作见[文档](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/change_log/3_1_1.html#id5) + * 3.0-rc x:数据不兼容,无法升级,可考虑逐步将业务迁移至3.x正式版 + * 2.x:数据不兼容,2.x版本仍持续维护,可考虑升级为2.x的最新版本 + +* 组件兼容性 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | --------- | ------------------------ | ---------------------------------- | +| Console | 3.1.0 | 3.0.0 | | +| Java SDK | 3.1.0 | 3.0.0 | | +| CPP SDK | 3.0.0 | 3.0.0 | | +| Solidity | 0.8.11 | 最低 0.4.25,最高 0.8.11 | 需根据合约版本下载编译器(控制台) | +| WBC-Liquid | 1.0.0-rc3 | 1.0.0-rc3 | | + +### 3.1.0 + +(2022-11-22) + +**新增** + +* 账户冻结、解冻、废止功能 +* 网关分布式限流功能 +* 网络压缩功能 +* 共识对时功能 +* 合约二进制与ABI存储优化 +* 适配EVM的delegatecall,extcodeHash,blockHash等接口 +* BFS新增查询分页功能 + +**更改** + +* DBHash 计算逻辑更新,提升校验稳定性 +* chain配置项从config.ini中挪出,修改为在config.genesis创世块中配置 +* BFS 目录表结构性能优化 + +**修复** + +* 虚拟机接口功能问题: [#2598](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2598), [#3118](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/3118) +* tikv client 问题:[#2600](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2598) +* 依赖库使用:[#2625](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2625) +* CRUD接口问题:[#2910](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2910) +* docker 镜像:[#3051](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/3051) + +**兼容性** + +* 历史链数据 + + 当前链已有数据为如下版本时,是否可替换节点二进制完成升级 + + * 3.0.x:支持通过替换二进制进行灰度升级,若需使用当前版本的新特性,需在所有节点二进制替换完成后用[控制台将链版本升级为当前版本](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/docs/develop/console/console_commands.html#setsystemconfigbykey) + * 3.0-rc x:数据不兼容,无法升级,可考虑逐步将业务迁移至3.x正式版 + * 2.x:数据不兼容,2.x版本仍持续维护,可考虑升级为2.x的最新版本 + +* 组件兼容性 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | --------- | ------------------------ | ---------------------------------- | +| Console | 3.1.0 | 3.0.0 | | +| Java SDK | 3.1.0 | 3.0.0 | | +| CPP SDK | 3.0.0 | 3.0.0 | | +| Solidity | 0.8.11 | 最低 0.4.25,最高 0.8.11 | 需根据合约版本下载编译器(控制台) | +| WBC-Liquid | 1.0.0-rc3 | 1.0.0-rc3 | | + +### 3.0.1 + +(2022-09-23) + +**修复** + +* 修复RPC 模块的内存增长问题 +* 修复优雅退出问题 +* 修复max版本稳定性文档 + +#### 兼容性 + +3.0.1 版本与3.0.0 版本数据完全兼容,Solidity合约源码兼容,但与2.0及3.0 rc版本不兼容。如果要从2.0版本升级到3.0版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | --------- | ------------------------ | ---------------------------------- | +| Console | 3.0.1 | 3.0.0 | | +| Java SDK | 3.0.1 | 3.0.0 | | +| CPP SDK | 3.0.0 | 3.0.0 | | +| Solidity | 0.8.11 | 最低 0.4.25,最高 0.8.11 | 需根据合约版本下载编译器(控制台) | +| WBC-Liquid | 1.0.0-rc3 | 1.0.0-rc3 | | + +### 3.0.0 + +(2022-08-24) + +#### 新架构 + +**Air / Pro / Max** :满足不同的部署场景 + +- **Air**:传统的区块链架构,所有功能在一个区块链节点中(all-in-one),满足开发者和简单场景的部署需求 +- **Pro**:网关 + RPC + 区块链节点,满足机构内外部环境隔离部署需求 +- **Max**:网关 + RPC + 区块链节点(主备) + 多个交易执行器,满足追求高可用和极致的性能的需求 + +#### 新机制 + +**流程:流水线共识** + +以流水线的方式生成区块,提升性能 + +- 将区块生成过程拆分为四个阶段:打包,共识,执行,落盘 +- 连续的区块在执行时以流水线的方式走过四个阶段(103在打包,102在共识,101在执行,100在落盘) +- 连续出块时,性能趋近于流水线中执行时间最长阶段的性能 + +**执行:确定性多合约并行** + +实现合约间交易的并行执行与调度的机制 + +- 高效:不同合约的交易可并行执行,提高交易处理效率 +- 易用:对开发者透明,自动进行交易并行执行与冲突处理 +- 通用:支持EVM、WASM、Precompiled 或其它合约 + +**存储:KeyPage** + +参考内存页的缓存机制实现高效的区块链存储 + +* 将key-value组织成页的方式存储 +* 提升访存局部性,降低存储空间占用 + +**继承与升级** + +* DAG并行执行:不再依赖基于并行编程框架,可根据solidity代码自动生成冲突参数,实现合约内交易的并行执行 +* PBFT共识算法:立即一致的共识算法,实现交易秒级确认 +* 更多请参考在线文档 + +#### 新功能 + +**区块链文件系统** + +用命令行管理区块链资源,如合约,表等 + +- 命令:pwd, cd, ls, tree, mkdir, ln +- 功能:将合约地址与路径绑定,即可用路径调用合约 + +**权限治理** + +开启后,对区块链的设置需进行多方投票允许 + +* 角色:治理者、管理员、用户 +* 被控制的操作:部署合约、合约接口调用、系统参数设置等 + +**WBC-Liquid:WeBankBlockchain-Liquid(简称WBC-Liquid)** + +不仅支持Soldity写合约,也支持用Rust写合约 + +- Liquid是基于Rust语言的智能合约编程语言 +- 集成WASM运行环境,支持WBC-Liquid智能合约。 +- WBC-Liquid智能合约支持智能分析冲突字段,自动开启DAG。 + +**继承与升级** + +* Solidity:目前已支持至0.8.11版本 +* CRUD:采用表结构存储数据,对业务开发更友好,3.0中封装了更易用的接口 +* AMOP:链上信使协议,借助区块链的P2P网络实现信息传输,实现接入区块链的应用间的数据通信 +* 落盘加密:区块链节点的私钥和数据加密存储于物理硬盘中,物理硬件丢失也无法解密 +* 密码算法:内置群环签名等密码算法,可实现各种安全多方计算场景 +* 更多请参考在线文档 + +#### 兼容性 + +3.0版本与以往各版本数据和协议不兼容,Solidity合约源码兼容。如果要从2.0版本升级到3.0版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | --------- | ------------------------ | ---------------------------------- | +| 控制台 | 3.0.0 | 3.0.0 | | +| Java SDK | 3.0.0 | 3.0.0 | | +| CPP SDK | 3.0.0 | 3.0.0 | | +| Console | 3.0.0 | 3.0.0 | | +| Solidity | 0.8.11 | 最低 0.4.25,最高 0.8.11 | 需根据合约版本下载编译器(控制台) | +| WBC-Liquid | 1.0.0-rc3 | 1.0.0-rc3 | | + + + +### 3.0.0-rc4 + +(2022-06-30) + +**新增** + +- 实现`Max`版本FISCO-BCOS, 存储采用分布式存储TiKV,执行模块独立成服务,存储和执行均可横向扩展,且支持自动化主备恢复,可支撑海量交易上链场景 +- 从数据到协议层全面设计并实现兼容性框架,可保证协议和数据的安全升级 +- 支持CRUD合约接口,简化区块链应用开发门槛 +- 支持群环签名合约接口,丰富链上隐私计算能力 +- 支持合约生命周期管理功能,包括合约冻结、解冻 +- 支持数据落盘加密 +- 基于`mtail` + `prometheus` + `grafana` + `ansiable`实现区块链系统监控 + + +**更改** + +- 引入KeyPage,优化读存储性能 +- 基于Rip协议原理,实现网络转发功能,提升网络鲁棒性 +- 支持linux aarch64平台 +- 更新权限治理合约,将节点角色管理、系统配置修改、合约生命周期管理等功能纳入到治理框架 +- 重构权限治理合约,计算逻辑可升级 +- 优化DMC执行框架的性能 +- 优化RPC和P2P的网络性能 +- 优化`Pro`版FISCO-BCOS建链脚本,支持以机构维度配置RPC、Gateway、BcosNodeService等服务 + +**修复** + +- 修复[#issue 2448](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2448) + + +**兼容性** + +3.0.0-rc4版本与3.0.0-rc3版本数据和协议不兼容,Solidity/WBC-Liquid合约源码兼容。如果要从3.0.0-rc3版本升级到3.0.0-rc4版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | ----------------------- | --------- | ---------------------- | +| 控制台 | 3.0.0-rc4 | 3.0.0-rc4 | | +| Java SDK | 3.0.0-rc4 | 3.0.0-rc4 | | +| CPP SDK | 3.0.0-rc4 | 3.0.0-rc4 | | +| WeBASE | 暂时不支持(预计lab-rc4版本支持) | 暂时不支持(预计lab-rc4版本支持) | | +| Solidity | 最高支持 solidity 0.8.11.0 | 0.6.10 | | +| Liquid | 1.0.0-rc3 | 1.0.0-rc2 | | + + +### 3.0.0-rc3 +(2022-03-31) + +**新增** + +- 支持Solidity合约并行冲突字段分析 +- 将密码学、交易编解码等相关逻辑整合到bcos-cpp-sdk中,并封装成通用的C接口 +- WASM虚拟机支持合约调用合约 +- 新增bcos-wasm替代Hera +- `BFS`支持软链接功能 +- 支持通过`setSystemConfig`系统合约的`tx_gas_limit`关键字动态修改交易执行的gas限制 +- 部署合约存储合约ABI + + +**更改** + +- 升级EVM虚拟机到最新,支持Solidity 0.8 +- 机构层面优化网络广播,减少机构间外网带宽占用 +- 支持国密加速库,国密签名和验签性能提升5-10倍 +- EVM节点支持`BFS`,使用`BFS`替代`CNS` +- DAG框架统一支持Solidity和WBC-Liquid + +**修复** + +- 修复[#issue 2312](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2312) +- 修复[#issue 2307](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2307) +- 修复[#issue 2254](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2254) +- 修复[#issue 2211](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2211) +- 修复[#issue 2195](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2195) + +**兼容性** + +3.0.0-rc3版本与3.0.0-rc2版本数据和协议不兼容,Solidity/WBC-Liquid合约源码兼容。如果要从3.0.0-rc2版本升级到3.0.0-rc3版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | ----------------------- | --------- | ---------------------- | +| 控制台 | 3.0.0-rc3 | 3.0.0-rc3 | | +| Java SDK | 3.0.0-rc3 | 3.0.0-rc3 | | +| CPP SDK | 3.0.0-rc3 | 3.0.0-rc3 | | +| WeBASE | 暂时不支持(预计lab-rc3版本支持) | 暂时不支持(预计lab-rc2版本支持) | | +| Solidity | 最高支持 solidity 0.8.11.0 | 0.6.10 | | +| Liquid | 1.0.0-rc3 | 1.0.0-rc2 | | + + +### 3.0.0-rc2 +(2022-02-23) + +**更改** + +- 优化代码仓库管理复杂度,将多个子仓库集中到FISCO BCOS统一管理 +- 交易由`Base64`编码修改为十六进制编码 +- 升级`bcos-boostssl`和`bcos-utilities`依赖到最新版本 +- 修改`bytesN`类型数据的Scale编解码 +- 优化交易处理流程,避免交易多次重复验签导致的性能损耗 +- 优化事件推送模块的块高获取方法 + + +**修复** + +- 修复scheduler调度交易过程中导致的内存泄露 +- 修复DMC+DAG调度过程中执行不一致的问题 +- 修复[Issue 2132](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2132) +- 修复[Issue 2124](https://github.com/FISCO-BCOS/FISCO-BCOS/issues/2124) +- 修复部分场景新节点入网没有触发快速视图切换,导致节点数满足`(2*f+1)`却共识异常的问题 +- 修复部分变量访问线程不安全导致节点崩溃的问题 +- 修复AMOP订阅多个topics失败的问题 + +**兼容性** + +3.0.0-rc2版本与3.0.0-rc1版本数据和协议不兼容,Solidity/WBC-Liquid合约源码兼容。如果要从3.0.0-rc1版本升级到3.0.0-rc2版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | ----------------------- | --------- | ---------------------- | +| 控制台 | 3.0.0-rc2 | 3.0.0-rc2 | | +| Java SDK | 3.0.0-rc2 | 3.0.0-rc2 | | +| CPP SDK | 3.0.0-rc2 | 3.0.0-rc2 | | +| WeBASE | 暂时不支持(预计lab-rc2版本支持) | 暂时不支持(预计lab-rc2版本支持) | | +| Solidity | 最高支持 solidity 0.6.10 | 0.6.10 | | +| Liquid | 1.0.0-rc2 | 1.0.0-rc2 | | + +### 3.0.0-rc1 +(2021-12-09) + +**新增** + +## 微服务架构 +- 提供通用的区块链接入规范。 +- 提供管理平台,用户可以一键部署、扩容、获得接口粒度的监控信息。 + +## 确定性多合约并行 +- 易用:区块链底层自动并行,无需使用者预先提供冲突字段。 +- 高效:区块内的交易不重复执行,没有预执行或预分析的流程。 +- 通用:无论 EVM、WASM、Precompiled 或其它合约,都能使用此方案。 + +## 区块链文件系统 +- 引入文件系统概念来组织链上资源,用户可以像浏览文件一样浏览链上资源。 +- 基于区块链文件系统实现管理功能,如分区、权限等,更直观。 + +## 流水线PBFT共识 +- 交易排序与交易执行相互独立,实现流水线架构,提升资源利用率。 +- 支持批量共识,对区间内区块并行共识处理,提升性能。 +- 支持单个共识Leader连续出块,提升性能。 + +## WBC-Liquid +- 集成WASM运行环境,支持Liquid智能合约。 +- Liquid智能合约支持智能分析冲突字段,自动开启DAG。 + +**修复** + +**兼容性** + +3.0版本与2.0版本数据和协议不兼容,Solidity合约源码兼容。如果要从2.0版本升级到3.0版本,需要做数据迁移。 + +| | 推荐版本 | 最低版本 | 说明 | +| ---------- | ----------------------- | --------- | ---------------------- | +| 控制台 | 3.0.0-rc1 | 3.0.0-rc1 | | +| Java SDK | 3.0.0-rc1 | 3.0.0-rc1 | | +| CPP SDK | 3.0.0-rc1 | 3.0.0-rc1 | | +| WeBASE | lab-rc1 | lab-rc1 | | +| Solidity | 最高支持 solidity 0.6.10 | 0.6.10 | | +| Liquid | 1.0.0-rc2 | 1.0.0-rc2 | | diff --git a/LICENSE b/LICENSE index f288702..261eeb9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,201 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 46eff43..d8b35ec 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,40 @@ -# TEP-BFT -This is the official code for the paper entitled "Parallel Byzantine Fault Tolerance Consensus Based on Trusted Execution Environments". +1.修改pbft共识 v1版本,性能提升不大 +使用说明: +1. 按照官方使用ubuntu22.04为环境下载依赖 +sudo apt update +sudo apt install -y wget python3-dev git curl zip unzip tar +sudo apt install -y --no-install-recommends clang make build-essential cmake libssl-dev zlib1g-dev ca-certificates libgmp-dev flex bison patch libzstd-dev ninja-build pkg-config -# Project Requirements +# 安装rust +curl https://sh.rustup.rs -sSf | bash -s -- -y +source $HOME/.cargo/env -1. Using the Gin framework to build a web server and initially implement API calls to start FISCO binary files. +2.克隆代码 +# 创建源码编译目录 +mkdir -p ~/fisco && cd ~/fisco -2. Retrieve the trusted remote attestation report from /dev in the gramine container and print it. +# 克隆代码 +git clone 后续添加 -3. Interact with the authoritative blockchain to save the trusted attestation to the authoritative blockchain. +# 若因为网络问题导致长时间无法执行上面的命令,请尝试下面的命令: +git clone 后续添加仓库 -4. Connect to the FISCO node under this web server and develop business blockchains using gosdk. +# 切换到源码目录 +cd FISCO-BCOS - ``` - go fisco question --> - authoritative blockchain query local block or question target go fisco --> - authoritative blockchain resp yes or no --> - go fisco get success resp - ``` +3. 编译 +# 进入源码目录 +cd ~/fisco/FISCO-BCOS + +# 创建编译目录 +mkdir -p build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_STATIC=ON(使用这一项) + +# 要挂个vpn + +# 编译源码(高性能机器可添加-j4使用4核加速编译) +make -j4 + +4. 使用 +在./build/fisco-bcos-air/fisco-bcos,使用它。拷贝到运行区块链的127.0.0.1目录里面,进行替换。 diff --git a/bcos-boostssl/CMakeLists.txt b/bcos-boostssl/CMakeLists.txt new file mode 100644 index 0000000..ebce90d --- /dev/null +++ b/bcos-boostssl/CMakeLists.txt @@ -0,0 +1,20 @@ +project(bcos-boostssl VERSION ${VERSION}) + +file(GLOB_RECURSE SRCS bcos-boostssl/*.cpp) + +find_package(OpenSSL REQUIRED) + +add_library(bcos-boostssl ${SRCS}) +target_include_directories(bcos-boostssl PUBLIC + $ + $) +target_link_libraries(bcos-boostssl PUBLIC bcos-framework bcos-utilities OpenSSL::SSL) + +# if(TESTS) +# enable_testing() +# add_subdirectory(test) +# endif() + +include(GNUInstallDirs) +install(TARGETS bcos-boostssl EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-boostssl" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/context/Common.h b/bcos-boostssl/bcos-boostssl/context/Common.h new file mode 100644 index 0000000..91de6c3 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/Common.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-06-14 + */ + +#pragma once +#include +#include +#include + + +#define CONTEXT_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[BOOSTSSL][CTX]" +#define NODEINFO_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[BOOSTSSL][NODEINFO]" + +namespace bcos +{ // namespace bcos +namespace boostssl +{ +inline X509* toX509(const char* _pemBuffer) +{ + BIO* bio_mem = BIO_new(BIO_s_mem()); + BIO_puts(bio_mem, _pemBuffer); + X509* x509 = PEM_read_bio_X509(bio_mem, NULL, NULL, NULL); + BIO_free(bio_mem); + // X509_free(x509); + return x509; +} + +inline EVP_PKEY* toEvpPkey(const char* _pemBuffer) +{ + BIO* bio_mem = BIO_new_mem_buf(_pemBuffer, -1); + EVP_PKEY* pkey = PEM_read_bio_PrivateKey(bio_mem, NULL, NULL, NULL); + BIO_free(bio_mem); + // EVP_PKEY_free(pkey); + return pkey; +} + +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/context/ContextBuilder.cpp b/bcos-boostssl/bcos-boostssl/context/ContextBuilder.cpp new file mode 100644 index 0000000..0d4acd5 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/ContextBuilder.cpp @@ -0,0 +1,298 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContextBuilder.cpp + * @author: octopus + * @date 2021-06-14 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::context; + +// static const std::string DEFAULT_CONFIG = "./boostssl.ini"; + +std::shared_ptr ContextBuilder::readFileContent(boost::filesystem::path const& _file) +{ + std::shared_ptr content = std::make_shared(); + boost::filesystem::ifstream fileStream(_file, std::ifstream::binary); + if (!fileStream) + { + return content; + } + fileStream.seekg(0, fileStream.end); + auto length = fileStream.tellg(); + if (length == 0) + { + return content; + } + fileStream.seekg(0, fileStream.beg); + content->resize(length); + fileStream.read((char*)content->data(), length); + return content; +} + +std::shared_ptr ContextBuilder::buildSslContext( + bool _server, const std::string& _configPath) +{ + auto config = std::make_shared(); + config->initConfig(_configPath); + return buildSslContext(_server, *config); +} + +std::shared_ptr ContextBuilder::buildSslContext( + bool _server, const ContextConfig& _contextConfig) +{ + if (_contextConfig.isCertPath()) + { + if (_contextConfig.sslType() != "sm_ssl") + { + return buildSslContext(_contextConfig.certConfig()); + } + return buildSslContext(_server, _contextConfig.smCertConfig()); + } + else + { + if (_contextConfig.sslType() != "sm_ssl") + { + return buildSslContextByCertContent(_contextConfig.certConfig()); + } + return buildSslContextByCertContent(_server, _contextConfig.smCertConfig()); + } +} + +std::shared_ptr ContextBuilder::buildSslContext( + const ContextConfig::CertConfig& _certConfig) +{ + std::shared_ptr sslContext = + std::make_shared(boost::asio::ssl::context::tlsv12); + + auto keyContent = + readFileContent(boost::filesystem::path(_certConfig.nodeKey)); // node.key content + boost::asio::const_buffer keyBuffer(keyContent->data(), keyContent->size()); + sslContext->use_private_key(keyBuffer, boost::asio::ssl::context::file_format::pem); + + // node.crt + sslContext->use_certificate_chain_file(_certConfig.nodeCert); + + auto caCertContent = readFileContent(boost::filesystem::path(_certConfig.caCert)); // ca.crt + sslContext->add_certificate_authority( + boost::asio::const_buffer(caCertContent->data(), caCertContent->size())); + + std::string caPath; + if (!caPath.empty()) + { + sslContext->add_verify_path(caPath); + } + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + + return sslContext; +} + +std::shared_ptr ContextBuilder::buildSslContext( + bool _server, const ContextConfig::SMCertConfig& _smCertConfig) +{ + SSL_CTX* ctx = NULL; + if (_server) + { + const SSL_METHOD* meth = SSLv23_server_method(); + ctx = SSL_CTX_new(meth); + } + else + { + const SSL_METHOD* meth = CNTLS_client_method(); + ctx = SSL_CTX_new(meth); + } + + std::shared_ptr sslContext = + std::make_shared(ctx); + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_none); + + /* Load the server certificate into the SSL_CTX structure */ + if (SSL_CTX_use_certificate_file( + sslContext->native_handle(), _smCertConfig.nodeCert.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_certificate_file error")); + } + + /* Load the private-key corresponding to the server certificate */ + if (SSL_CTX_use_PrivateKey_file( + sslContext->native_handle(), _smCertConfig.nodeKey.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_PrivateKey_file error")); + } + + /* Check if the server certificate and private-key matches */ + if (!SSL_CTX_check_private_key(sslContext->native_handle())) + { + fprintf(stderr, "Private key does not match the certificate public key\n"); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_check_private_key error")); + } + + /* Load the server encrypt certificate into the SSL_CTX structure */ + if (SSL_CTX_use_enc_certificate_file( + sslContext->native_handle(), _smCertConfig.enNodeCert.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_enc_certificate_file error")); + } + + /* Load the private-key corresponding to the server encrypt certificate */ + if (SSL_CTX_use_enc_PrivateKey_file( + sslContext->native_handle(), _smCertConfig.enNodeKey.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_enc_PrivateKey_file error")); + } + + /* Check if the server encrypt certificate and private-key matches */ + if (!SSL_CTX_check_enc_private_key(sslContext->native_handle())) + { + fprintf(stderr, "Private key does not match the certificate public key\n"); + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_check_enc_private_key error")); + } + + /* Load the RSA CA certificate into the SSL_CTX structure + if (!SSL_CTX_load_verify_locations( + sslContext->native_handle(), _smCertConfig.caCert.c_str(), NULL)) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_load_verify_locations error")); + } + */ + auto caCertContent = readFileContent(boost::filesystem::path(_smCertConfig.caCert)); // ca.crt + sslContext->add_certificate_authority( + boost::asio::const_buffer(caCertContent->data(), caCertContent->size())); + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + return sslContext; +} + +std::shared_ptr ContextBuilder::buildSslContextByCertContent( + const ContextConfig::CertConfig& _certConfig) +{ + std::shared_ptr sslContext = + std::make_shared(boost::asio::ssl::context::tlsv12); + + sslContext->use_private_key( + boost::asio::const_buffer(_certConfig.nodeKey.data(), _certConfig.nodeKey.size()), + boost::asio::ssl::context::file_format::pem); + sslContext->use_certificate_chain( + boost::asio::const_buffer(_certConfig.nodeCert.data(), _certConfig.nodeCert.size())); + + sslContext->add_certificate_authority( + boost::asio::const_buffer(_certConfig.caCert.data(), _certConfig.caCert.size())); + + std::string caPath; + if (!caPath.empty()) + { + sslContext->add_verify_path(caPath); + } + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + + return sslContext; +} + +std::shared_ptr ContextBuilder::buildSslContextByCertContent( + bool _server, const ContextConfig::SMCertConfig& _smCertConfig) +{ + SSL_CTX* ctx = NULL; + if (_server) + { + const SSL_METHOD* meth = SSLv23_server_method(); + ctx = SSL_CTX_new(meth); + } + else + { + const SSL_METHOD* meth = CNTLS_client_method(); + ctx = SSL_CTX_new(meth); + } + + std::shared_ptr sslContext = + std::make_shared(ctx); + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_none); + + sslContext->use_certificate_chain(boost::asio::const_buffer( + _smCertConfig.nodeCert.data(), _smCertConfig.nodeCert.size())); // node.crt + + sslContext->use_private_key( + boost::asio::const_buffer(_smCertConfig.nodeKey.data(), _smCertConfig.nodeKey.size()), + boost::asio::ssl::context::file_format::pem); // node.key + + /* Check if the server certificate and private-key matches */ + if (!SSL_CTX_check_private_key(sslContext->native_handle())) + { + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_check_private_key error")); + } + + /* Load the server encrypt certificate into the SSL_CTX structure */ + if (!SSL_CTX_use_enc_certificate( + sslContext->native_handle(), toX509(_smCertConfig.enNodeCert.c_str()))) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_enc_certificate_file error")); + } + + /* Load the private-key corresponding to the server encrypt certificate */ + if (!SSL_CTX_use_enc_PrivateKey( + sslContext->native_handle(), toEvpPkey(_smCertConfig.enNodeKey.c_str()))) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_enc_PrivateKey_file error")); + } + + /* Check if the server encrypt certificate and private-key matches */ + if (!SSL_CTX_check_enc_private_key(sslContext->native_handle())) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_check_enc_private_key error")); + } + + sslContext->add_certificate_authority(boost::asio::const_buffer( + _smCertConfig.caCert.data(), _smCertConfig.caCert.size())); // ca.crt + + /* Load the RSA CA certificate into the SSL_CTX structure + if (!SSL_CTX_load_verify_locations( + sslContext->native_handle(), _smCertConfig.caCert.c_str(), NULL)) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_load_verify_locations error")); + } + */ + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + return sslContext; +} \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/context/ContextBuilder.h b/bcos-boostssl/bcos-boostssl/context/ContextBuilder.h new file mode 100644 index 0000000..41f09fa --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/ContextBuilder.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContextBuilder.h + * @author: octopus + * @date 2021-06-14 + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace context +{ +class ContextBuilder +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + std::shared_ptr readFileContent(boost::filesystem::path const& _file); + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + +public: + std::shared_ptr buildSslContext( + bool _server, const std::string& _configPath); + std::shared_ptr buildSslContext( + bool _server, const ContextConfig& _contextConfig); + +private: + std::shared_ptr buildSslContext( + const ContextConfig::CertConfig& _certConfig); + std::shared_ptr buildSslContext( + bool _server, const ContextConfig::SMCertConfig& _smCertConfig); + std::shared_ptr buildSslContextByCertContent( + const ContextConfig::CertConfig& _certConfig); + std::shared_ptr buildSslContextByCertContent( + bool _server, const ContextConfig::SMCertConfig& _smCertConfig); + +private: + std::string m_moduleName = "DEFAULT"; +}; + +} // namespace context +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/context/ContextConfig.cpp b/bcos-boostssl/bcos-boostssl/context/ContextConfig.cpp new file mode 100644 index 0000000..462ed7b --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/ContextConfig.cpp @@ -0,0 +1,128 @@ +/** @file ContextConfig.cpp + * @author octopus + * @date 2021-06-14 + */ + +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::context; +/** + * @brief: loads configuration items from the config.ini + * @param _configPath: config.ini path + * @return void + */ +void ContextConfig::initConfig(std::string const& _configPath) +{ + try + { + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(_configPath, pt); + std::string sslType = pt.get("common.ssl_type", "ssl"); + if ("sm_ssl" != sslType) + { // SSL + initCertConfig(pt); + } + else + { // SM SSL + initSMCertConfig(pt); + } + + m_sslType = sslType; + } + catch (const std::exception& e) + { + boost::filesystem::path currentPath(boost::filesystem::current_path()); + + CONTEXT_LOG(WARNING) << LOG_DESC("initConfig failed") << LOG_KV("configPath", _configPath) + << LOG_KV("currentPath", currentPath.string()) + << LOG_KV("error", boost::diagnostic_information(e)); + + + BOOST_THROW_EXCEPTION(std::runtime_error("initConfig: currentPath:" + currentPath.string() + + " ,error:" + boost::diagnostic_information(e))); + } + + CONTEXT_LOG(INFO) << LOG_DESC("initConfig") << LOG_KV("sslType", m_sslType) + << LOG_KV("configPath", _configPath); +} + +/// loads ca configuration items from the configuration file +void ContextConfig::initCertConfig(const boost::property_tree::ptree& _pt) +{ + std::string caPath = _pt.get("cert.ca_path", "./"); + std::string caCertFile = caPath + "/" + _pt.get("cert.ca_cert", "ca.crt"); + std::string nodeCertFile = caPath + "/" + _pt.get("cert.node_cert", "node.crt"); + std::string nodeKeyFile = caPath + "/" + _pt.get("cert.node_key", "node.key"); + + CONTEXT_LOG(INFO) << LOG_DESC("initCertConfig") << LOG_KV("ca_path", caPath) + << LOG_KV("ca_cert", caCertFile) << LOG_KV("node_cert", nodeCertFile) + << LOG_KV("node_key", nodeKeyFile); + + checkFileExist(caCertFile); + checkFileExist(nodeCertFile); + checkFileExist(nodeKeyFile); + + CertConfig certConfig; + certConfig.caCert = caCertFile; + certConfig.nodeCert = nodeCertFile; + certConfig.nodeKey = nodeKeyFile; + + m_certConfig = certConfig; + + CONTEXT_LOG(INFO) << LOG_DESC("initCertConfig") << LOG_KV("ca", certConfig.caCert) + << LOG_KV("node_cert", certConfig.nodeCert) + << LOG_KV("node_key", certConfig.nodeKey); +} + +// loads sm ca configuration items from the configuration file +void ContextConfig::initSMCertConfig(const boost::property_tree::ptree& _pt) +{ + std::string caPath = _pt.get("cert.ca_path", "./"); + std::string smCaCertFile = caPath + "/" + _pt.get("cert.sm_ca_cert", "sm_ca.crt"); + std::string smNodeCertFile = + caPath + "/" + _pt.get("cert.sm_node_cert", "sm_node.crt"); + std::string smNodeKeyFile = + caPath + "/" + _pt.get("cert.sm_node_key", "sm_node.key"); + std::string smEnNodeCertFile = + caPath + "/" + _pt.get("cert.sm_ennode_cert", "sm_ennode.crt"); + std::string smEnNodeKeyFile = + caPath + "/" + _pt.get("cert.sm_ennode_key", "sm_ennode.key"); + + checkFileExist(smCaCertFile); + checkFileExist(smNodeCertFile); + checkFileExist(smNodeKeyFile); + checkFileExist(smEnNodeCertFile); + checkFileExist(smEnNodeKeyFile); + + SMCertConfig smCertConfig; + smCertConfig.caCert = smCaCertFile; + smCertConfig.nodeCert = smNodeCertFile; + smCertConfig.nodeKey = smNodeKeyFile; + smCertConfig.enNodeCert = smEnNodeCertFile; + smCertConfig.enNodeKey = smEnNodeKeyFile; + + m_smCertConfig = smCertConfig; + + CONTEXT_LOG(INFO) << LOG_DESC("initSMCertConfig") << LOG_KV("ca_path", caPath) + << LOG_KV("sm_ca_cert", smCertConfig.caCert) + << LOG_KV("sm_node_cert", smCertConfig.nodeCert) + << LOG_KV("sm_node_key", smCertConfig.nodeKey) + << LOG_KV("sm_ennode_cert", smCertConfig.enNodeCert) + << LOG_KV("sm_ennode_key", smCertConfig.enNodeKey); +} + +void ContextConfig::checkFileExist(const std::string& _path) +{ + auto isExist = boost::filesystem::exists(boost::filesystem::path(_path)); + if (!isExist) + { + BOOST_THROW_EXCEPTION(std::runtime_error("file not exist: " + _path)); + } +} diff --git a/bcos-boostssl/bcos-boostssl/context/ContextConfig.h b/bcos-boostssl/bcos-boostssl/context/ContextConfig.h new file mode 100644 index 0000000..2632e8e --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/ContextConfig.h @@ -0,0 +1,90 @@ + +/** @file ContextConfig.h + * @author octopus + * @date 2021-06-14 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace context +{ +class ContextConfig +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + ContextConfig() = default; + ~ContextConfig() = default; + +public: + // cert for ssl connection + struct CertConfig + { + std::string caCert; + std::string nodeKey; + std::string nodeCert; + }; + + // cert for sm ssl connection + struct SMCertConfig + { + std::string caCert; + std::string nodeCert; + std::string nodeKey; + std::string enNodeCert; + std::string enNodeKey; + }; + +public: + /** + * @brief: loads configuration items from the boostssl.ini + * @param _configPath: + * @return void + */ + void initConfig(std::string const& _configPath); + // loads ca configuration items from the configuration file + void initCertConfig(const boost::property_tree::ptree& _pt); + // loads sm ca configuration items from the configuration file + void initSMCertConfig(const boost::property_tree::ptree& _pt); + // check if file exist, exception will be throw if the file not exist + void checkFileExist(const std::string& _path); + +public: + bool isCertPath() const { return m_isCertPath; } + void setIsCertPath(bool _isCertPath) { m_isCertPath = _isCertPath; } + + std::string sslType() const { return m_sslType; } + void setSslType(const std::string _sslType) { m_sslType = _sslType; } + + const CertConfig& certConfig() const { return m_certConfig; } + void setCertConfig(const CertConfig& _certConfig) { m_certConfig = _certConfig; } + + const SMCertConfig& smCertConfig() const { return m_smCertConfig; } + void setSmCertConfig(const SMCertConfig& _smCertConfig) { m_smCertConfig = _smCertConfig; } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + + +private: + // is the cert path or cert file content + bool m_isCertPath = true; + // ssl type, support ssl && sm_ssl + std::string m_sslType; + // cert config for ssl + CertConfig m_certConfig; + SMCertConfig m_smCertConfig; + std::string m_moduleName = "DEFAULT"; +}; + +} // namespace context +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.cpp b/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.cpp new file mode 100644 index 0000000..de270cd --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.cpp @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file NodeInfoTools.cpp + * @author: lucasli + * @date 2022-03-07 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::boostssl::context; + +/* + * @brief : functions called after openssl handshake, + * maily to get node id and verify whether the certificate has been + * expired + * @param nodeIDOut : also return value, pointer points to the node id string + * @return std::function: + * return true: verify success + * return false: verify failed + * modifications 2019.03.20: append subject name and issuer name after nodeIDOut + * for demand of fisco-bcos-browser + */ +std::function NodeInfoTools::newVerifyCallback( + std::shared_ptr nodeIDOut) +{ + return [nodeIDOut](bool preverified, boost::asio::ssl::verify_context& ctx) { + try + { + /// return early when the certificate is invalid + if (!preverified) + { + return false; + } + /// get the object points to certificate + X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle()); + if (!cert) + { + NODEINFO_LOG(INFO) << LOG_DESC("Get cert failed"); + return preverified; + } + + auto sslContextPubHexHandler = initSSLContextPubHexHandler(); + if (!sslContextPubHexHandler(cert, *nodeIDOut.get())) + { + return preverified; + } + + int crit = 0; + BASIC_CONSTRAINTS* basic = + (BASIC_CONSTRAINTS*)X509_get_ext_d2i(cert, NID_basic_constraints, &crit, NULL); + if (!basic) + { + NODEINFO_LOG(INFO) << LOG_DESC("Get ca basic failed"); + return preverified; + } + + if (basic->ca) + { + // ca or agency certificate + NODEINFO_LOG(TRACE) << LOG_DESC("Ignore CA certificate"); + BASIC_CONSTRAINTS_free(basic); + return preverified; + } + + BASIC_CONSTRAINTS_free(basic); + return preverified; + } + catch (std::exception& e) + { + NODEINFO_LOG(WARNING) << LOG_DESC("Cert verify failed") + << boost::diagnostic_information(e); + return preverified; + } + }; +} + +std::function +NodeInfoTools::initCert2PubHexHandler() +{ + return [](const std::string& _cert, std::string& _pubHex) -> bool { + std::string errorMessage; + do + { + auto certContent = readContentsToString(boost::filesystem::path(_cert)); + if (!certContent || certContent->empty()) + { + errorMessage = "unable to load cert content, cert: " + _cert; + break; + } + + NODEINFO_LOG(INFO) << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("certContent: ", certContent); + + std::shared_ptr bioMem(BIO_new(BIO_s_mem()), [](BIO* p) { + if (p != NULL) + { + BIO_free(p); + } + }); + + if (!bioMem) + { + errorMessage = "BIO_new error"; + break; + } + + BIO_write(bioMem.get(), certContent->data(), certContent->size()); + std::shared_ptr x509Ptr( + PEM_read_bio_X509(bioMem.get(), NULL, NULL, NULL), [](X509* p) { + if (p != NULL) + { + X509_free(p); + } + }); + + if (!x509Ptr) + { + errorMessage = "PEM_read_bio_X509 error"; + break; + } + + ASN1_BIT_STRING* pubKey = X509_get0_pubkey_bitstr(x509Ptr.get()); + if (pubKey == NULL) + { + errorMessage = "X509_get0_pubkey_bitstr error"; + break; + } + + auto hex = bcos::toHexString(pubKey->data, pubKey->data + pubKey->length, ""); + _pubHex = *hex.get(); + + NODEINFO_LOG(INFO) << LOG_DESC("initCert2PubHexHandler ") << LOG_KV("cert", _cert) + << LOG_KV("pubHex: ", _pubHex); + return true; + } while (0); + + NODEINFO_LOG(WARNING) << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("errorMessage", errorMessage); + return false; + }; +} + +std::function NodeInfoTools::initSSLContextPubHexHandler() +{ + return [](X509* x509, std::string& _pubHex) -> bool { + ASN1_BIT_STRING* pubKey = + X509_get0_pubkey_bitstr(x509); // csc->current_cert is an X509 struct + if (pubKey == NULL) + { + return false; + } + + auto hex = bcos::toHexString(pubKey->data, pubKey->data + pubKey->length, ""); + _pubHex = *hex.get(); + + NODEINFO_LOG(INFO) << LOG_DESC("[NEW]SSLContext pubHex: " + _pubHex); + return true; + }; +} \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.h b/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.h new file mode 100644 index 0000000..c045d50 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/context/NodeInfoTools.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file NodeInfoTools.h + * @author: lucasli + * @date 2022-03-07 + */ +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace context +{ +static std::string m_moduleName = "DEFAULT"; + +class NodeInfoTools +{ +public: + // register the function fetch pub hex from the cert + static std::function + initCert2PubHexHandler(); + // register the function fetch public key from the ssl context + static std::function initSSLContextPubHexHandler(); + + static std::function newVerifyCallback( + std::shared_ptr nodeIDOut); + + static std::string moduleName() { return m_moduleName; } + static void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } +}; + +} // namespace context +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/httpserver/Common.h b/bcos-boostssl/bcos-boostssl/httpserver/Common.h new file mode 100644 index 0000000..4b714f4 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/Common.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-07-08 + */ +#pragma once + +#include +#include +#include +#include +#include + + +#define HTTP_LISTEN(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[HTTP][LISTEN]" +#define HTTP_SESSION(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[HTTP][SESSION]" +#define HTTP_SERVER(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[HTTP][SERVER]" +#define HTTP_STREAM(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[HTTP][STREAM]" + + +namespace bcos +{ +namespace boostssl +{ +namespace http +{ +class HttpStream; +using HttpRequest = boost::beast::http::request; +using HttpResponse = boost::beast::http::response>; +using HttpRequestPtr = std::shared_ptr; +using HttpResponsePtr = std::shared_ptr; +using HttpReqHandler = + std::function)>; +using WsUpgradeHandler = + std::function, HttpRequest&&, std::shared_ptr)>; + +static const int PARSER_BODY_LIMITATION = 100 * 1024 * 1024; +} // namespace http +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/httpserver/HttpQueue.h b/bcos-boostssl/bcos-boostssl/httpserver/HttpQueue.h new file mode 100644 index 0000000..663bf31 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/HttpQueue.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file HttpQueue.h + * @author: octopus + * @date 2021-07-08 + */ +#pragma once +#include + +namespace bcos +{ +namespace boostssl +{ +namespace http +{ +// The queue for http request pipeline +class Queue +{ +private: + // the maximum number size of queue + std::size_t m_limit; + // messages to be send + std::vector m_allResp; + // send handler + std::function m_sender; + +public: + explicit Queue(std::size_t _limit = 16) : m_limit(_limit) { m_allResp.reserve(m_limit); } + + void setSender(std::function _sender) { m_sender = _sender; } + std::function sender() const { return m_sender; } + + std::size_t limit() const { return m_limit; } + void setLimit(std::size_t _limit) { m_limit = _limit; } + + // if the queue reached the m_limit + bool isFull() const { return m_allResp.size() >= m_limit; } + + // called when a message finishes sending + // returns `true` if the caller should initiate a read + bool onWrite() + { + BOOST_ASSERT(!m_allResp.empty()); + auto const was_full = isFull(); + m_allResp.erase(m_allResp.begin()); + if (!m_allResp.empty()) + { + m_sender(m_allResp.front()); + } + return was_full; + } + + // enqueue and waiting called by the HTTP handler to send a response. + void enqueue(HttpResponsePtr _msg) + { + m_allResp.push_back(_msg); + // there was no previous work, start this one + if (m_allResp.size() == 1) + { + m_sender(m_allResp.front()); + } + } +}; +} // namespace http +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.cpp b/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.cpp new file mode 100644 index 0000000..9794ba1 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.cpp @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file HttpHttpServer.h + * @author: octopus + * @date 2021-07-08 + */ + +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; + +// start http server +void HttpServer::start() +{ + if (m_acceptor && m_acceptor->is_open()) + { + HTTP_SERVER(INFO) << LOG_BADGE("startListen") << LOG_DESC("http server is running"); + return; + } + + HTTP_SERVER(INFO) << LOG_BADGE("startListen") << LOG_KV("listenIP", m_listenIP) + << LOG_KV("listenPort", m_listenPort); + + auto address = boost::asio::ip::make_address(m_listenIP); + auto endpoint = boost::asio::ip::tcp::endpoint{address, m_listenPort}; + + boost::beast::error_code ec; + m_acceptor->open(endpoint.protocol(), ec); + if (ec) + { + HTTP_SERVER(WARNING) << LOG_BADGE("open") << LOG_KV("error", ec) + << LOG_KV("message", ec.message()); + BOOST_THROW_EXCEPTION(std::runtime_error("acceptor open failed")); + } + + // allow address reuse + m_acceptor->set_option(boost::asio::socket_base::reuse_address(true), ec); + if (ec) + { + HTTP_SERVER(WARNING) << LOG_BADGE("set_option") << LOG_KV("error", ec) + << LOG_KV("message", ec.message()); + + BOOST_THROW_EXCEPTION(std::runtime_error("acceptor set_option failed")); + } + + m_acceptor->bind(endpoint, ec); + if (ec) + { + HTTP_SERVER(WARNING) << LOG_BADGE("bind") << LOG_KV("error", ec) + << LOG_KV("message", ec.message()); + BOOST_THROW_EXCEPTION(std::runtime_error("acceptor bind failed")); + } + + m_acceptor->listen(boost::asio::socket_base::max_listen_connections, ec); + if (ec) + { + HTTP_SERVER(WARNING) << LOG_BADGE("listen") << LOG_KV("error", ec) + << LOG_KV("message", ec.message()); + BOOST_THROW_EXCEPTION(std::runtime_error("acceptor listen failed")); + } + + // start accept + doAccept(); + + HTTP_SERVER(INFO) << LOG_BADGE("startListen") << LOG_KV("ip", endpoint.address().to_string()) + << LOG_KV("port", endpoint.port()); +} + +void HttpServer::stop() +{ + if (m_acceptor && m_acceptor->is_open()) + { + m_acceptor->close(); + } + + + HTTP_SERVER(INFO) << LOG_BADGE("stop") << LOG_DESC("http server"); +} + +void HttpServer::doAccept() +{ + // The new connection gets its own strand + m_acceptor->async_accept(*(m_ioservicePool->getIOService()), + boost::beast::bind_front_handler(&HttpServer::onAccept, shared_from_this())); +} + +void HttpServer::onAccept(boost::beast::error_code ec, boost::asio::ip::tcp::socket socket) +{ + if (ec) + { + HTTP_SERVER(WARNING) << LOG_BADGE("accept") << LOG_KV("error", ec) + << LOG_KV("message", ec.message()); + return doAccept(); + } + + boost::system::error_code sec; + auto localEndpoint = socket.local_endpoint(sec); + if(sec) { + HTTP_SERVER(WARNING) << LOG_BADGE("accept") << LOG_KV("local_endpoint error", sec) + << LOG_KV("message", sec.message()); + ws::WsTools::close(socket); + return doAccept(); + } + auto remoteEndpoint = socket.remote_endpoint(sec); + if(sec) { + HTTP_SERVER(WARNING) << LOG_BADGE("accept") << LOG_KV("remote_endpoint error", sec) + << LOG_KV("message", sec.message()); + ws::WsTools::close(socket); + return doAccept(); + } + socket.set_option(boost::asio::ip::tcp::no_delay(true)); + + HTTP_SERVER(INFO) << LOG_BADGE("accept") << LOG_KV("local_endpoint", localEndpoint) + << LOG_KV("remote_endpoint", remoteEndpoint); + + bool useSsl = !disableSsl(); + if (!useSsl) + { // non ssl , start http session + auto httpStream = m_httpStreamFactory->buildHttpStream( + std::make_shared(std::move(socket)), m_moduleName); + buildHttpSession(httpStream, nullptr)->run(); + + return doAccept(); + } + + // ssl should be used, start ssl handshake + auto self = std::weak_ptr(shared_from_this()); + auto ss = std::make_shared>( + boost::beast::tcp_stream(std::move(socket)), *m_ctx); + + std::shared_ptr nodeId = std::make_shared(); + ss->set_verify_callback(NodeInfoTools::newVerifyCallback(nodeId)); + + ss->async_handshake(boost::asio::ssl::stream_base::server, + [this, ss, localEndpoint, remoteEndpoint, nodeId, self](boost::beast::error_code _ec) { + if (_ec) + { + HTTP_SERVER(INFO) << LOG_BADGE("async_handshake") + << LOG_DESC("ssl handshake failed") + << LOG_KV("local", localEndpoint) + << LOG_KV("remote", remoteEndpoint) + << LOG_KV("error", _ec.message()); + ws::WsTools::close(ss->next_layer().socket()); + return; + } + + auto server = self.lock(); + if (server) + { + auto httpStream = server->httpStreamFactory()->buildHttpStream(ss, m_moduleName); + server->buildHttpSession(httpStream, nodeId)->run(); + } + }); + + return doAccept(); +} + + +HttpSession::Ptr HttpServer::buildHttpSession( + HttpStream::Ptr _httpStream, std::shared_ptr _nodeId) +{ + auto session = std::make_shared(_httpStream->moduleName()); + + auto queue = std::make_shared(); + auto self = std::weak_ptr(session); + queue->setSender([self](HttpResponsePtr _httpResp) { + auto session = self.lock(); + if (!session) + { + return; + } + + // HTTP_SESSION(TRACE) << LOG_BADGE("Queue::Write") << LOG_KV("resp", + // _httpResp->body()) + // << LOG_KV("keep_alive", _httpResp->keep_alive()); + + session->httpStream()->asyncWrite(*_httpResp, + [self, _httpResp](boost::beast::error_code ec, std::size_t bytes_transferred) { + auto session = self.lock(); + if (!session) + { + return; + } + session->onWrite(_httpResp->need_eof(), ec, bytes_transferred); + }); + }); + + session->setQueue(queue); + session->setHttpStream(_httpStream); + session->setRequestHandler(m_httpReqHandler); + session->setWsUpgradeHandler(m_wsUpgradeHandler); + session->setThreadPool(threadPool()); + session->setNodeId(_nodeId); + + return session; +} + +/** + * @brief: create http server + * @param _listenIP: listen ip + * @param _listenPort: listen port + * @param _threadCount: thread count + * @param _ioc: io_context + * @param _ctx: ssl context + * @return HttpServer::Ptr: + */ +HttpServer::Ptr HttpServerFactory::buildHttpServer(const std::string& _listenIP, + uint16_t _listenPort, std::shared_ptr _ioc, + std::shared_ptr _ctx, std::string _moduleName) +{ + std::string m_moduleName = _moduleName; + // create httpserver and launch a listening port + auto server = std::make_shared(_listenIP, _listenPort, _moduleName); + auto acceptor = std::make_shared((*_ioc)); + auto httpStreamFactory = std::make_shared(); + server->setCtx(_ctx); + server->setAcceptor(acceptor); + server->setHttpStreamFactory(httpStreamFactory); + + HTTP_SERVER(INFO) << LOG_BADGE("buildHttpServer") << LOG_KV("listenIP", _listenIP) + << LOG_KV("listenPort", _listenPort); + return server; +} diff --git a/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.h b/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.h new file mode 100644 index 0000000..09eb89e --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/HttpServer.h @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file HttpHttpServer.h + * @author: octopus + * @date 2021-07-08 + */ +#pragma once + +#include +#include +#include +#include +namespace bcos +{ +namespace boostssl +{ +namespace http +{ +// The http server impl +class HttpServer : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + HttpServer(const std::string& _listenIP, uint16_t _listenPort, std::string _moduleName) + : m_listenIP(_listenIP), m_listenPort(_listenPort), m_moduleName(_moduleName) + {} + + ~HttpServer() { stop(); } + +public: + // start http server + void start(); + void stop(); + + // accept connection + void doAccept(); + // handle connection + void onAccept(boost::beast::error_code ec, boost::asio::ip::tcp::socket socket); + +public: + HttpSession::Ptr buildHttpSession( + HttpStream::Ptr _stream, std::shared_ptr _nodeId); + +public: + HttpReqHandler httpReqHandler() const { return m_httpReqHandler; } + void setHttpReqHandler(HttpReqHandler _httpReqHandler) { m_httpReqHandler = _httpReqHandler; } + + std::shared_ptr acceptor() const { return m_acceptor; } + void setAcceptor(std::shared_ptr _acceptor) + { + m_acceptor = _acceptor; + } + + std::shared_ptr ctx() const { return m_ctx; } + void setCtx(std::shared_ptr _ctx) { m_ctx = _ctx; } + + std::shared_ptr threadPool() const { return m_threadPool; } + void setThreadPool(std::shared_ptr _threadPool) + { + m_threadPool = _threadPool; + } + + WsUpgradeHandler wsUpgradeHandler() const { return m_wsUpgradeHandler; } + void setWsUpgradeHandler(WsUpgradeHandler _wsUpgradeHandler) + { + m_wsUpgradeHandler = _wsUpgradeHandler; + } + + HttpStreamFactory::Ptr httpStreamFactory() const { return m_httpStreamFactory; } + void setHttpStreamFactory(HttpStreamFactory::Ptr _httpStreamFactory) + { + m_httpStreamFactory = _httpStreamFactory; + } + + bool disableSsl() const { return m_disableSsl; } + void setDisableSsl(bool _disableSsl) { m_disableSsl = _disableSsl; } + + std::string moduleName() { return m_moduleName; } + + void setIOServicePool(bcos::IOServicePool::Ptr _ioservicePool) + { + m_ioservicePool = _ioservicePool; + } + +private: + std::string m_listenIP; + uint16_t m_listenPort; + bool m_disableSsl; + std::string m_moduleName; + + HttpReqHandler m_httpReqHandler; + WsUpgradeHandler m_wsUpgradeHandler; + + std::shared_ptr m_acceptor; + std::shared_ptr m_ctx; + + std::shared_ptr m_threadPool; + std::shared_ptr m_httpStreamFactory; + bcos::IOServicePool::Ptr m_ioservicePool; +}; + +// The http server factory +class HttpServerFactory : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + /** + * @brief: create http server + * @param _listenIP: listen ip + * @param _listenPort: listen port + * @param _ioc: io_context + * @param _ctx: ssl context + * @return HttpServer::Ptr: + */ + HttpServer::Ptr buildHttpServer(const std::string& _listenIP, uint16_t _listenPort, + std::shared_ptr _ioc, + std::shared_ptr _ctx, std::string _moduleName); +}; + +} // namespace http +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/httpserver/HttpSession.h b/bcos-boostssl/bcos-boostssl/httpserver/HttpSession.h new file mode 100644 index 0000000..9e3b107 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/HttpSession.h @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file HttpSession.h + * @author: octopus + * @date 2021-07-08 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace http +{ +// The http session for connection +class HttpSession : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + HttpSession(std::string _moduleName) : m_moduleName(_moduleName) + { + HTTP_SESSION(DEBUG) << LOG_KV("[NEWOBJ][HTTPSESSION]", this); + } + + virtual ~HttpSession() + { + doClose(); + HTTP_SESSION(DEBUG) << LOG_KV("[DELOBJ][HTTPSESSION]", this); + } + + // start the HttpSession + void run() + { + boost::asio::dispatch(m_httpStream->stream().get_executor(), + boost::beast::bind_front_handler(&HttpSession::doRead, shared_from_this())); + } + + void doRead() + { + m_parser.emplace(); + // set limit to http request size, 100m + m_parser->body_limit(PARSER_BODY_LIMITATION); + + auto session = shared_from_this(); + m_httpStream->asyncRead(m_buffer, m_parser, + [session](boost::system::error_code _ec, std::size_t bytes_transferred) { + session->onRead(_ec, bytes_transferred); + }); + } + + void onRead(boost::beast::error_code ec, std::size_t bytes_transferred) + { + try + { + // the peer client closed the connection + if (ec == boost::beast::http::error::end_of_stream) + { + HTTP_SESSION(TRACE) << LOG_BADGE("onRead") << LOG_DESC("end of stream"); + // return doClose(); + return; + } + + if (ec) + { + HTTP_SESSION(WARNING) << LOG_BADGE("onRead") << LOG_DESC("close the connection") + << LOG_KV("error", ec); + // return doClose(); + return; + } + + auto self = std::weak_ptr(shared_from_this()); + if (boost::beast::websocket::is_upgrade(m_parser->get())) + { + HTTP_SESSION(INFO) << LOG_BADGE("onRead") << LOG_DESC("websocket upgrade"); + if (m_wsUpgradeHandler) + { + auto httpSession = self.lock(); + if (!httpSession) + { + return; + } + m_wsUpgradeHandler(m_httpStream, m_parser->release(), httpSession->nodeId()); + } + else + { + HTTP_SESSION(WARNING) << LOG_BADGE("onRead") + << LOG_DESC( + "the session will be closed for " + "unsupported websocket upgrade"); + // doClose(); + return; + } + return; + } + + HTTP_SESSION(INFO) << LOG_BADGE("onRead") << LOG_DESC("receive http request"); + + handleRequest(m_parser->release()); + } + catch (std::exception const& e) + { + HTTP_SESSION(WARNING) << LOG_DESC("onRead exception") + << LOG_KV("bytesSize", bytes_transferred) + << LOG_KV("error", boost::diagnostic_information(e)); + } + + if (!m_queue->isFull()) + { + doRead(); + } + } + + void onWrite(bool close, boost::beast::error_code ec, std::size_t bytes_transferred) + { + boost::ignore_unused(bytes_transferred); + + if (ec) + { + HTTP_SESSION(WARNING) << LOG_BADGE("onWrite") << LOG_DESC("close the connection") + << LOG_KV("error", ec); + // return doClose(); + return; + } + + if (close) + { + // we should close the connection, usually because + // the response indicated the "Connection: close" semantic. + // return doClose(); + return; + } + + if (m_queue->onWrite()) + { + // read the next request + doRead(); + } + } + + void doClose() + { + if (m_httpStream) + { + m_httpStream->close(); + } + } + + /** + * @brief: handle http request and send the response + * @param req: http request object + * @return void: + */ + void handleRequest(HttpRequest&& _httpRequest) + { + HTTP_SESSION(DEBUG) << LOG_BADGE("handleRequest") << LOG_DESC("request") + << LOG_KV("method", _httpRequest.method_string()) + << LOG_KV("target", _httpRequest.target()) + << LOG_KV("body", _httpRequest.body()) + << LOG_KV("keep_alive", _httpRequest.keep_alive()) + << LOG_KV("need_eof", _httpRequest.need_eof()); + + auto startT = utcTime(); + unsigned version = _httpRequest.version(); + auto self = std::weak_ptr(shared_from_this()); + if (m_httpReqHandler) + { + std::string request = _httpRequest.body(); + m_httpReqHandler(request, [self, version, startT](bcos::bytes _content) { + auto session = self.lock(); + if (!session) + { + return; + } + auto resp = session->buildHttpResp( + boost::beast::http::status::ok, version, std::move(_content)); + // put the response into the queue and waiting to be send + session->queue()->enqueue(resp); + BCOS_LOG(TRACE) << LOG_BADGE(session->m_moduleName) << LOG_BADGE("handleRequest") + << LOG_DESC("response") + << LOG_KV("body", std::string_view((const char*)resp->body().data(), + resp->body().size())) + << LOG_KV("keep_alive", resp->keep_alive()) + << LOG_KV("timecost", (utcTime() - startT)); + }); + } + else + { + // unsupported http service + auto resp = + buildHttpResp(boost::beast::http::status::http_version_not_supported, version, {}); + auto session = self.lock(); + if (!session) + { + return; + } + // put the response into the queue and waiting to be send + session->queue()->enqueue(resp); + + HTTP_SESSION(WARNING) << LOG_BADGE("handleRequest") + << LOG_DESC("unsupported http service") + << LOG_KV( + "body", std::string_view((const char*)resp->body().data(), + resp->body().size())); + } + } + + /** + * @brief: build http response object + * @param status: http response status + * @param content: http response content + * @return HttpResponsePtr: + */ + HttpResponsePtr buildHttpResp( + boost::beast::http::status status, unsigned version, bcos::bytes content) + { + auto msg = std::make_shared(status, version); + msg->set(boost::beast::http::field::server, BOOST_BEAST_VERSION_STRING); + msg->set(boost::beast::http::field::content_type, "application/json"); + msg->keep_alive(true); // default , keep alive + msg->body() = std::move(content); + msg->prepare_payload(); + return msg; + } + + HttpReqHandler httpReqHandler() const { return m_httpReqHandler; } + void setRequestHandler(HttpReqHandler _httpReqHandler) { m_httpReqHandler = _httpReqHandler; } + + WsUpgradeHandler wsUpgradeHandler() const { return m_wsUpgradeHandler; } + void setWsUpgradeHandler(WsUpgradeHandler _wsUpgradeHandler) + { + m_wsUpgradeHandler = _wsUpgradeHandler; + } + std::shared_ptr queue() { return m_queue; } + void setQueue(std::shared_ptr _queue) { m_queue = _queue; } + + HttpStream::Ptr httpStream() { return m_httpStream; } + void setHttpStream(HttpStream::Ptr _httpStream) { m_httpStream = _httpStream; } + + void setThreadPool(std::shared_ptr _threadPool) + { + m_threadPool = _threadPool; + } + + std::shared_ptr nodeId() { return m_nodeId; } + void setNodeId(std::shared_ptr _nodeId) { m_nodeId = _nodeId; } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + + +private: + HttpStream::Ptr m_httpStream; + + boost::beast::flat_buffer m_buffer; + + std::shared_ptr m_queue; + + std::shared_ptr m_threadPool; + + HttpReqHandler m_httpReqHandler; + WsUpgradeHandler m_wsUpgradeHandler; + // the parser is stored in an optional container so we can + // construct it from scratch it at the beginning of each new message. + boost::optional> m_parser; + + std::shared_ptr m_nodeId; + + std::string m_moduleName = "DEFAULT"; +}; + +} // namespace http +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/httpserver/HttpStream.h b/bcos-boostssl/bcos-boostssl/httpserver/HttpStream.h new file mode 100644 index 0000000..5f40010 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/httpserver/HttpStream.h @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file HttpStream.h + * @author: octopus + * @date 2021-10-31 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace http +{ +using HttpStreamRWHandler = std::function; + +// The http stream +class HttpStream +{ +public: + using Ptr = std::shared_ptr; + + virtual ~HttpStream() {} + +public: + virtual boost::beast::tcp_stream& stream() = 0; + + virtual ws::WsStreamDelegate::Ptr wsStream() = 0; + + virtual bool open() = 0; + virtual void close() = 0; + + virtual void asyncRead(boost::beast::flat_buffer& _buffer, + boost::optional>& + _parser, + HttpStreamRWHandler _handler) = 0; + + virtual void asyncWrite(const HttpResponse& _httpResp, HttpStreamRWHandler _handler) = 0; + + virtual std::string localEndpoint() + { + try + { + auto& s = stream(); + auto localEndPoint = s.socket().local_endpoint(); + auto endPoint = + localEndPoint.address().to_string() + ":" + std::to_string(localEndPoint.port()); + return endPoint; + } + catch (...) + { + } + + return std::string(""); + } + + virtual std::string remoteEndpoint() + { + try + { + auto& s = stream(); + auto remoteEndpoint = s.socket().remote_endpoint(); + auto endPoint = + remoteEndpoint.address().to_string() + ":" + std::to_string(remoteEndpoint.port()); + return endPoint; + } + catch (...) + { + } + + return std::string(""); + } + + virtual std::string moduleName() { return m_moduleName; } + virtual void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + + +protected: + std::atomic m_closed{false}; + std::string m_moduleName = "DEFAULT"; +}; + +// The http stream +class HttpStreamImpl : public HttpStream, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + HttpStreamImpl(std::shared_ptr _stream, std::string _moduleName) + : m_stream(_stream) + { + setModuleName(_moduleName); + HTTP_STREAM(DEBUG) << LOG_KV("[NEWOBJ][HttpStreamImpl]", this); + } + virtual ~HttpStreamImpl() + { + HTTP_STREAM(DEBUG) << LOG_KV("[DELOBJ][HttpStreamImpl]", this); + close(); + } + +public: + virtual boost::beast::tcp_stream& stream() override { return *m_stream; } + + virtual ws::WsStreamDelegate::Ptr wsStream() override + { + m_closed.store(true); + auto builder = std::make_shared(); + return builder->build(m_stream, m_moduleName); + } + + virtual bool open() override + { + if (!m_closed.load() && m_stream) + { + return m_stream->socket().is_open(); + } + return false; + } + virtual void close() override + { + if (m_closed.load()) + { + return; + } + + bool trueValue = true; + bool falseValue = false; + if (m_closed.compare_exchange_strong(falseValue, trueValue)) + { + HTTP_STREAM(INFO) << LOG_DESC("close the stream") << LOG_KV("this", this); + ws::WsTools::close(m_stream->socket()); + } + } + + virtual void asyncRead(boost::beast::flat_buffer& _buffer, + boost::optional>& + _parser, + HttpStreamRWHandler _handler) override + { + boost::beast::http::async_read(*m_stream, _buffer, *_parser, _handler); + } + + virtual void asyncWrite(const HttpResponse& _httpResp, HttpStreamRWHandler _handler) override + { + boost::beast::http::async_write(*m_stream, _httpResp, _handler); + } + + +private: + std::shared_ptr m_stream; +}; + +// The http stream +class HttpStreamSslImpl : public HttpStream, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + HttpStreamSslImpl(std::shared_ptr> _stream, + std::string _moduleName) + : m_stream(_stream) + { + setModuleName(_moduleName); + HTTP_STREAM(DEBUG) << LOG_KV("[NEWOBJ][HttpStreamSslImpl]", this); + } + + virtual ~HttpStreamSslImpl() + { + HTTP_STREAM(DEBUG) << LOG_KV("[DELOBJ][HttpStreamSslImpl]", this); + close(); + } + +public: + virtual boost::beast::tcp_stream& stream() override { return m_stream->next_layer(); } + + virtual ws::WsStreamDelegate::Ptr wsStream() override + { + m_closed.store(true); + auto builder = std::make_shared(); + return builder->build(m_stream, m_moduleName); + } + + virtual bool open() override + { + if (!m_closed.load() && m_stream) + { + return m_stream->next_layer().socket().is_open(); + } + + return false; + } + + virtual void close() override + { + if (m_closed.load()) + { + return; + } + + bool trueValue = true; + bool falseValue = false; + if (m_closed.compare_exchange_strong(falseValue, trueValue)) + { + HTTP_STREAM(INFO) << LOG_DESC("close the ssl stream") << LOG_KV("this", this); + ws::WsTools::close(m_stream->next_layer().socket()); + } + } + + virtual void asyncRead(boost::beast::flat_buffer& _buffer, + boost::optional>& + _parser, + HttpStreamRWHandler _handler) override + { + boost::beast::http::async_read(*m_stream, _buffer, *_parser, _handler); + } + + virtual void asyncWrite(const HttpResponse& _httpResp, HttpStreamRWHandler _handler) override + { + boost::beast::http::async_write(*m_stream, _httpResp, _handler); + } + +private: + std::shared_ptr> m_stream; +}; + +class HttpStreamFactory +{ +public: + using Ptr = std::shared_ptr; + +public: + HttpStream::Ptr buildHttpStream( + std::shared_ptr _stream, std::string _moduleName) + { + return std::make_shared(_stream, _moduleName); + } + + HttpStream::Ptr buildHttpStream( + std::shared_ptr> _stream, + std::string _moduleName) + { + return std::make_shared(_stream, _moduleName); + } +}; +} // namespace http +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/interfaces/MessageFace.h b/bcos-boostssl/bcos-boostssl/interfaces/MessageFace.h new file mode 100644 index 0000000..045503b --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/interfaces/MessageFace.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file MessageFace.h + * @author: lucasli + * @date 2022-02-16 + */ +#pragma once + +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +class MessageFace +{ +public: + using Ptr = std::shared_ptr; + +public: + virtual ~MessageFace() {} + + virtual uint16_t version() const = 0; + virtual void setVersion(uint16_t) = 0; + virtual uint16_t packetType() const = 0; + virtual void setPacketType(uint16_t) = 0; + virtual std::string const& seq() const = 0; + virtual void setSeq(std::string) = 0; + virtual uint16_t ext() const = 0; + virtual void setExt(uint16_t) = 0; + virtual std::shared_ptr payload() const = 0; + virtual void setPayload(std::shared_ptr) = 0; + + virtual bool encode(bcos::bytes& _buffer) = 0; + virtual int64_t decode(bytesConstRef _buffer) = 0; + + virtual bool isRespPacket() const = 0; + virtual void setRespPacket() = 0; + virtual uint32_t length() const = 0; +}; + +class MessageFaceFactory +{ +public: + using Ptr = std::shared_ptr; + +public: + virtual ~MessageFaceFactory() {} + virtual MessageFace::Ptr buildMessage() = 0; + virtual std::string newSeq() = 0; +}; + +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/interfaces/NodeInfoDef.h b/bcos-boostssl/bcos-boostssl/interfaces/NodeInfoDef.h new file mode 100644 index 0000000..cf9f007 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/interfaces/NodeInfoDef.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file NodeInfoDef.h + * @author: lucasli + * @date 2022-04-02 + */ +#pragma once + +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ + +/** + * @brief client end endpoint. Node will connect to NodeIPEndpoint. + */ +struct NodeIPEndpoint +{ + using Ptr = std::shared_ptr; + NodeIPEndpoint() = default; + NodeIPEndpoint(std::string const& _host, uint16_t _port) : m_host(_host), m_port(_port) {} + NodeIPEndpoint(const NodeIPEndpoint& _nodeIPEndpoint) = default; + NodeIPEndpoint(boost::asio::ip::address _addr, uint16_t _port) + : m_host(_addr.to_string()), m_port(_port), m_ipv6(_addr.is_v6()) + {} + + virtual ~NodeIPEndpoint() = default; + NodeIPEndpoint(const boost::asio::ip::tcp::endpoint& _endpoint) + { + m_host = _endpoint.address().to_string(); + m_port = _endpoint.port(); + m_ipv6 = _endpoint.address().is_v6(); + } + bool operator<(const NodeIPEndpoint& rhs) const + { + if (m_host + std::to_string(m_port) < rhs.m_host + std::to_string(rhs.m_port)) + { + return true; + } + return false; + } + bool operator==(const NodeIPEndpoint& rhs) const + { + return (m_host + std::to_string(m_port) == rhs.m_host + std::to_string(rhs.m_port)); + } + operator boost::asio::ip::tcp::endpoint() const + { + return boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(m_host), m_port); + } + + // Get the port associated with the endpoint. + uint16_t port() const { return m_port; }; + + // Get the IP address associated with the endpoint. + std::string address() const { return m_host; }; + bool isIPv6() const { return m_ipv6; } + + std::string m_host; + uint16_t m_port; + bool m_ipv6 = false; +}; + +inline std::ostream& operator<<(std::ostream& _out, NodeIPEndpoint const& _endpoint) +{ + _out << _endpoint.address() << ":" << _endpoint.port(); + return _out; +} + +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/websocket/Common.h b/bcos-boostssl/bcos-boostssl/websocket/Common.h new file mode 100644 index 0000000..42a2414 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/Common.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-07-08 + */ +#pragma once + +#include +#include +#include +#include +#include + +#define BOOST_SSL_LOG(LEVEL) BCOS_LOG(LEVEL) << "[BOOSTSSL]" +#define WEBSOCKET_TOOL(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][TOOL]" +#define WEBSOCKET_CONNECTOR(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][CONNECTOR]" +#define WEBSOCKET_VERSION(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][VERSION]" +#define WEBSOCKET_SESSION(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][SESSION]" +#define WEBSOCKET_MESSAGE(LEVEL) BCOS_LOG(LEVEL) << "[WS][MESSAGE]" +#define WEBSOCKET_SERVICE(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][SERVICE]" +#define WEBSOCKET_STREAM(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][STREAM]" +#define WEBSOCKET_SSL_STREAM(LEVEL) \ + BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][SSL][STREAM]" +#define WEBSOCKET_INITIALIZER(LEVEL) \ + BCOS_LOG(LEVEL) << LOG_BADGE(m_moduleName) << "[WS][INITIALIZER]" + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsSession; + +using RespCallBack = std::function, std::shared_ptr)>; + +using WsConnectHandler = std::function)>; +using WsDisconnectHandler = std::function)>; +using WsRecvMessageHandler = + std::function, std::shared_ptr)>; +using VerifyCallback = boost::function; + +struct Options +{ + Options(uint32_t _timeout) : timeout(_timeout) {} + Options() : timeout(0) {} + uint32_t timeout = 0; ///< The timeout value of async function, in milliseconds. +}; + +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsConfig.h b/bcos-boostssl/bcos-boostssl/websocket/WsConfig.h new file mode 100644 index 0000000..004bf48 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsConfig.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsConfig.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#define MIN_HEART_BEAT_PERIOD_MS (10000) +#define MIN_RECONNECT_PERIOD_MS (10000) +#define DEFAULT_MESSAGE_TIMEOUT_MS (-1) +#define DEFAULT_MAX_MESSAGE_SIZE (32 * 1024 * 1024) +#define MIN_THREAD_POOL_SIZE (1) + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +using EndPoints = std::set; +using EndPointsPtr = std::shared_ptr>; +using EndPointsConstPtr = std::shared_ptr>; + +enum WsModel : uint16_t +{ + None = 0, + Client = 0x01, + Server = 0x10, + Mixed = Client | Server +}; + +class WsConfig +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +private: + // ws work model, as server or as client or server & client + WsModel m_model = WsModel::None; + + // the listen ip when ws work as server + std::string m_listenIP; + // the listen port when ws work as server + uint16_t m_listenPort; + + // whether smSSL or not, default not + bool m_smSSL = false; + + // list of connected server nodes when ws work as client + EndPointsPtr m_connectPeers; + + // thread pool size + uint32_t m_threadPoolSize{4}; + + // time out for send message + int32_t m_sendMsgTimeout{DEFAULT_MESSAGE_TIMEOUT_MS}; + + // time interval for reconnection + uint32_t m_reconnectPeriod{MIN_RECONNECT_PERIOD_MS}; + + // time interval for heartbeat + uint32_t m_heartbeatPeriod{MIN_HEART_BEAT_PERIOD_MS}; + + bool m_disableSsl{false}; + + // cert config for boostssl + std::shared_ptr m_contextConfig; + + // the max message to be send or read + uint32_t m_maxMsgSize{DEFAULT_MAX_MESSAGE_SIZE}; + + std::string m_moduleName = "DEFAULT"; + +public: + void setModel(WsModel _model) { m_model = _model; } + WsModel model() const { return m_model; } + + bool asClient() const { return m_model & WsModel::Client; } + bool asServer() const { return m_model & WsModel::Server; } + + void setListenIP(const std::string _listenIP) { m_listenIP = _listenIP; } + std::string listenIP() const { return m_listenIP; } + + void setListenPort(uint16_t _listenPort) { m_listenPort = _listenPort; } + uint16_t listenPort() const { return m_listenPort; } + + void setSmSSL(bool _isSmSSL) { m_smSSL = _isSmSSL; } + bool smSSL() { return m_smSSL; } + + void setMaxMsgSize(uint32_t _maxMsgSize) { m_maxMsgSize = _maxMsgSize; } + uint32_t maxMsgSize() const { return m_maxMsgSize; } + + uint32_t reconnectPeriod() const + { + return m_reconnectPeriod > MIN_RECONNECT_PERIOD_MS ? m_reconnectPeriod : + MIN_RECONNECT_PERIOD_MS; + } + void setReconnectPeriod(uint32_t _reconnectPeriod) { m_reconnectPeriod = _reconnectPeriod; } + + uint32_t heartbeatPeriod() const + { + return m_heartbeatPeriod > MIN_HEART_BEAT_PERIOD_MS ? m_heartbeatPeriod : + MIN_HEART_BEAT_PERIOD_MS; + } + void setHeartbeatPeriod(uint32_t _heartbeatPeriod) { m_heartbeatPeriod = _heartbeatPeriod; } + + int32_t sendMsgTimeout() const { return m_sendMsgTimeout; } + void setSendMsgTimeout(int32_t _sendMsgTimeout) { m_sendMsgTimeout = _sendMsgTimeout; } + + uint32_t threadPoolSize() const + { + return m_threadPoolSize ? m_threadPoolSize : MIN_THREAD_POOL_SIZE; + } + void setThreadPoolSize(uint32_t _threadPoolSize) { m_threadPoolSize = _threadPoolSize; } + + EndPointsPtr connectPeers() const { return m_connectPeers; } + void setConnectPeers(EndPointsPtr _connectPeers) { m_connectPeers = _connectPeers; } + bool disableSsl() const { return m_disableSsl; } + void setDisableSsl(bool _disableSsl) { m_disableSsl = _disableSsl; } + + std::shared_ptr contextConfig() const { return m_contextConfig; } + void setContextConfig(std::shared_ptr _contextConfig) + { + m_contextConfig = _contextConfig; + } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } +}; +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsConnector.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsConnector.cpp new file mode 100644 index 0000000..0857bd8 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsConnector.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsConnector.cpp + * @author: octopus + * @date 2021-08-23 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::context; + +// TODO: how to set timeout for connect to wsServer ??? +void WsConnector::connectToWsServer(const std::string& _host, uint16_t _port, bool _disableSsl, + std::function, std::shared_ptr)> + _callback) +{ + auto ioc = m_ioservicePool->getIOService(); + auto ctx = m_ctx; + + std::string endpoint = _host + ":" + std::to_string(_port); + // check if last connect opr done + if (!insertPendingConns(endpoint)) + { + WEBSOCKET_CONNECTOR(WARNING) + << LOG_BADGE("connectToWsServer") << LOG_DESC("insertPendingConns") + << LOG_KV("endpoint", endpoint); + _callback(boost::beast::error_code(boost::asio::error::would_block), "", nullptr, nullptr); + return; + } + + auto resolver = m_resolver; + auto builder = m_builder; + auto connector = shared_from_this(); + + // resolve host + resolver->async_resolve(_host.c_str(), std::to_string(_port).c_str(), + [this, _host, _port, _disableSsl, endpoint, ioc, ctx, connector, builder, _callback]( + boost::beast::error_code _ec, boost::asio::ip::tcp::resolver::results_type _results) { + if (_ec) + { + WEBSOCKET_CONNECTOR(WARNING) + << LOG_BADGE("connectToWsServer") << LOG_DESC("async_resolve failed") + << LOG_KV("error", _ec) << LOG_KV("errorMessage", _ec.message()) + << LOG_KV("endpoint", endpoint); + _callback(_ec, "", nullptr, nullptr); + connector->erasePendingConns(endpoint); + return; + } + + WEBSOCKET_CONNECTOR(TRACE) + << LOG_BADGE("connectToWsServer") << LOG_DESC("async_resolve success") + << LOG_KV("endPoint", endpoint); + + // create raw tcp stream + auto rawStream = std::make_shared(*ioc); + // rawStream->expires_after(std::chrono::seconds(30)); + + // async connect + rawStream->async_connect(_results, + [this, _host, _port, _disableSsl, endpoint, ctx, connector, builder, rawStream, + _callback](boost::beast::error_code _ec, + boost::asio::ip::tcp::resolver::results_type::endpoint_type _ep) mutable { + if (_ec) + { + WEBSOCKET_CONNECTOR(WARNING) + << LOG_BADGE("connectToWsServer") << LOG_DESC("async_connect failed") + << LOG_KV("error", _ec.message()) << LOG_KV("endpoint", endpoint); + _callback(_ec, "", nullptr, nullptr); + connector->erasePendingConns(endpoint); + return; + } + + WEBSOCKET_CONNECTOR(INFO) + << LOG_BADGE("connectToWsServer") << LOG_DESC("async_connect success") + << LOG_KV("endpoint", endpoint); + + auto wsStreamDelegate = + builder->build(_disableSsl, ctx, rawStream, m_moduleName); + + std::shared_ptr nodeId = std::make_shared(); + wsStreamDelegate->setVerifyCallback( + _disableSsl, NodeInfoTools::newVerifyCallback(nodeId)); + + // start ssl handshake + wsStreamDelegate->asyncHandshake([this, wsStreamDelegate, connector, _host, + _port, endpoint, _ep, _callback, + nodeId](boost::beast::error_code _ec) { + if (_ec) + { + WEBSOCKET_CONNECTOR(WARNING) + << LOG_BADGE("connectToWsServer") + << LOG_DESC("ssl async_handshake failed") << LOG_KV("host", _host) + << LOG_KV("port", _port) << LOG_KV("error", _ec.message()); + _callback(_ec, " ssl handshake failed", nullptr, nullptr); + connector->erasePendingConns(endpoint); + return; + } + + WEBSOCKET_CONNECTOR(INFO) << LOG_BADGE("connectToWsServer") + << LOG_DESC("ssl async_handshake success") + << LOG_KV("host", _host) << LOG_KV("port", _port); + + // turn off the timeout on the tcp_stream, because + // the websocket stream has its own timeout system. + wsStreamDelegate->tcpStream().expires_never(); + + std::string tmpHost = _host + ':' + std::to_string(_ep.port()); + + // websocket async handshake + wsStreamDelegate->asyncWsHandshake(tmpHost, "/", + [this, connector, _host, _port, endpoint, _callback, wsStreamDelegate, + nodeId](boost::beast::error_code _ec) mutable { + if (_ec) + { + WEBSOCKET_CONNECTOR(WARNING) + << LOG_BADGE("connectToWsServer") + << LOG_DESC("websocket async_handshake failed") + << LOG_KV("error", _ec.message()) << LOG_KV("host", _host) + << LOG_KV("port", _port); + _callback(_ec, "", nullptr, nullptr); + connector->erasePendingConns(endpoint); + return; + } + + WEBSOCKET_CONNECTOR(INFO) + << LOG_BADGE("connectToWsServer") + << LOG_DESC("websocket handshake successfully") + << LOG_KV("host", _host) << LOG_KV("port", _port); + _callback(_ec, "", wsStreamDelegate, nodeId); + connector->erasePendingConns(endpoint); + }); + }); + }); + }); +} diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsConnector.h b/bcos-boostssl/bcos-boostssl/websocket/WsConnector.h new file mode 100644 index 0000000..befa265 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsConnector.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsConnector.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsConnector : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + WsConnector(std::shared_ptr _resolver) : m_resolver(_resolver) + {} + +public: + /** + * @brief: connect to the server + * @param _host: the remote server host, support ipv4, ipv6, domain name + * @param _port: the remote server port + * @param _disableSsl: disable ssl + * @param _callback: + * @return void: + */ + void connectToWsServer(const std::string& _host, uint16_t _port, bool _disableSsl, + std::function, std::shared_ptr)> + _callback); + +public: + bool erasePendingConns(const std::string& _nodeIPEndpoint) + { + std::lock_guard l(x_pendingConns); + return m_pendingConns.erase(_nodeIPEndpoint); + } + + bool insertPendingConns(const std::string& _nodeIPEndpoint) + { + std::lock_guard l(x_pendingConns); + auto p = m_pendingConns.insert(_nodeIPEndpoint); + return p.second; + } + +public: + void setResolver(std::shared_ptr _resolver) + { + m_resolver = _resolver; + } + std::shared_ptr resolver() const { return m_resolver; } + + void setIOServicePool(IOServicePool::Ptr _ioservicePool) { m_ioservicePool = _ioservicePool; } + + void setCtx(std::shared_ptr _ctx) { m_ctx = _ctx; } + std::shared_ptr ctx() const { return m_ctx; } + + void setBuilder(std::shared_ptr _builder) { m_builder = _builder; } + std::shared_ptr builder() const { return m_builder; } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + +private: + std::shared_ptr m_builder; + std::shared_ptr m_resolver; + std::shared_ptr m_ctx; + + mutable std::mutex x_pendingConns; + std::set m_pendingConns; + + std::string m_moduleName = "DEFAULT"; + IOServicePool::Ptr m_ioservicePool; +}; +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsError.h b/bcos-boostssl/bcos-boostssl/websocket/WsError.h new file mode 100644 index 0000000..649183e --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsError.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsError.h + * @author: octopus + * @date 2021-10-02 + */ +#pragma once + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +enum WsError +{ + AcceptError = -4000, + ReadError = -4001, + WriteError = -4002, + PingError = -4003, + PongError = -4004, + PacketError = -4005, + SessionDisconnect = -4006, + UserDisconnect = -4007, + TimeOut = -4008, + NoActiveCons = -4009, + EndPointNotExist = -4010, + MessageOverflow = -4011, + UndefinedException = -4012, + MessageEncodeError = -4013 +}; + +inline bool notRetryAgain(int _wsError) +{ + return (_wsError == boostssl::ws::WsError::MessageOverflow); +} + +} // namespace ws +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.cpp new file mode 100644 index 0000000..09fa7c7 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.cpp @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsFactory.cpp + * @author: octopus + * @date 2021-09-29 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::context; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; + +void WsInitializer::initWsService(WsService::Ptr _wsService) +{ + std::shared_ptr _config = m_config; + std::string m_moduleName = _config->moduleName(); + auto messageFactory = m_messageFactory; + if (!messageFactory) + { + messageFactory = std::make_shared(); + } + + auto sessionFactory = m_sessionFactory; + if (!sessionFactory) + { + sessionFactory = std::make_shared(); + } + + auto threadPoolSize = _config->threadPoolSize() > 0 ? _config->threadPoolSize() : + std::thread::hardware_concurrency(); + if (!threadPoolSize) + { + threadPoolSize = 16; + } + auto wsServiceWeakPtr = std::weak_ptr(_wsService); + auto ioServicePool = std::make_shared(); + _wsService->setIOServicePool(ioServicePool); + + auto resolver = + std::make_shared((*(ioServicePool->getIOService()))); + auto connector = std::make_shared(resolver); + connector->setIOServicePool(ioServicePool); + + auto builder = std::make_shared(); + auto threadPool = std::make_shared("t_ws_pool", threadPoolSize); + + // init module_name for log + WsTools::setModuleName(m_moduleName); + NodeInfoTools::setModuleName(m_moduleName); + connector->setModuleName(m_moduleName); + + std::shared_ptr srvCtx = nullptr; + std::shared_ptr clientCtx = nullptr; + if (!_config->disableSsl()) + { + auto contextBuilder = std::make_shared(); + + // init module_name for log + contextBuilder->setModuleName(m_moduleName); + _config->contextConfig()->setModuleName(m_moduleName); + + srvCtx = contextBuilder->buildSslContext(true, *_config->contextConfig()); + clientCtx = contextBuilder->buildSslContext(false, *_config->contextConfig()); + } + + if (_config->asServer()) + { + WEBSOCKET_INITIALIZER(INFO) + << LOG_BADGE("initWsService") << LOG_DESC("start websocket service as server"); + + if (!WsTools::validIP(_config->listenIP())) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "invalid listen ip, value: " + _config->listenIP())); + } + + if (!WsTools::validPort(_config->listenPort())) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "invalid listen port, value: " + std::to_string(_config->listenPort()))); + } + + auto httpServerFactory = std::make_shared(); + auto httpServer = httpServerFactory->buildHttpServer(_config->listenIP(), + _config->listenPort(), ioServicePool->getIOService(), srvCtx, m_moduleName); + httpServer->setIOServicePool(ioServicePool); + httpServer->setDisableSsl(_config->disableSsl()); + httpServer->setThreadPool(threadPool); + httpServer->setWsUpgradeHandler( + [wsServiceWeakPtr](std::shared_ptr _httpStream, HttpRequest&& _httpRequest, + std::shared_ptr _nodeId) { + auto service = wsServiceWeakPtr.lock(); + if (service) + { + std::string nodeIdString = _nodeId == nullptr ? "" : *_nodeId.get(); + auto session = service->newSession(_httpStream->wsStream(), nodeIdString); + session->startAsServer(_httpRequest); + } + }); + + _wsService->setHttpServer(httpServer); + _wsService->setHostPort(_config->listenIP(), _config->listenPort()); + } + + if (_config->asClient()) + { + auto connectPeers = _config->connectPeers(); + WEBSOCKET_INITIALIZER(INFO) + << LOG_BADGE("initWsService") << LOG_DESC("start websocket service as client") + << LOG_KV("connected size", connectPeers ? connectPeers->size() : 0); + + if (connectPeers) + { + for (auto& peer : *connectPeers) + { + if (!WsTools::validIP(peer.address())) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "invalid connected peer, value: " + peer.address())); + } + + if (!WsTools::validPort(peer.port())) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "invalid connect port, value: " + std::to_string(peer.port()))); + } + } + + // connectPeers info is valid then set connectPeers info into wsService + _wsService->setReconnectedPeers(connectPeers); + } + else + { + WEBSOCKET_INITIALIZER(WARNING) + << LOG_BADGE("initWsService") << LOG_DESC("there has no connected server config"); + } + } + + connector->setCtx(clientCtx); + connector->setBuilder(builder); + + _wsService->setConfig(_config); + _wsService->setConnector(connector); + _wsService->setThreadPool(threadPool); + _wsService->setMessageFactory(messageFactory); + _wsService->setSessionFactory(sessionFactory); + + WEBSOCKET_INITIALIZER(INFO) + << LOG_BADGE("initWsService") << LOG_DESC("initializer for websocket service") + << LOG_KV("listenIP", _config->listenIP()) << LOG_KV("listenPort", _config->listenPort()) + << LOG_KV("disableSsl", _config->disableSsl()) << LOG_KV("server", _config->asServer()) + << LOG_KV("client", _config->asClient()) + << LOG_KV("threadPoolSize", _config->threadPoolSize()) + << LOG_KV("maxMsgSize", _config->maxMsgSize()) + << LOG_KV("msgTimeOut", _config->sendMsgTimeout()) + << LOG_KV("connected peers", _config->connectPeers() ? _config->connectPeers()->size() : 0); +} diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.h b/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.h new file mode 100644 index 0000000..66020d9 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsInitializer.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsInitializer.h + * @author: octopus + * @date 2021-09-29 + */ +#pragma once + +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsInitializer +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + std::shared_ptr messageFactory() const { return m_messageFactory; } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + + std::shared_ptr config() const { return m_config; } + void setConfig(std::shared_ptr _config) { m_config = _config; } + + std::shared_ptr sessionFactory() { return m_sessionFactory; } + void setSessionFactory(std::shared_ptr _sessionFactory) + { + m_sessionFactory = _sessionFactory; + } + +public: + void initWsService(WsService::Ptr _wsService); + +private: + std::shared_ptr m_messageFactory; + std::shared_ptr m_config; + WsSessionFactory::Ptr m_sessionFactory; +}; +} // namespace ws +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsMessage.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsMessage.cpp new file mode 100644 index 0000000..08ac7b5 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsMessage.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsMessage.h + * @author: octopus + * @date 2021-07-28 + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +// version(2) + type(2) + status(2) + seqLength(2) + ext(2) + payload(N) +constexpr size_t WsMessage::MESSAGE_MIN_LENGTH = 10; + +bool WsMessage::encode(bytes& _buffer) +{ + _buffer.clear(); + + uint16_t version = boost::asio::detail::socket_ops::host_to_network_short(m_version); + uint16_t type = boost::asio::detail::socket_ops::host_to_network_short(m_packetType); + int16_t status = boost::asio::detail::socket_ops::host_to_network_short(m_status); + uint16_t seqLength = boost::asio::detail::socket_ops::host_to_network_short(m_seq.size()); + uint16_t ext = boost::asio::detail::socket_ops::host_to_network_short(m_ext); + + _buffer.insert(_buffer.end(), (byte*)&version, (byte*)&version + 2); + _buffer.insert(_buffer.end(), (byte*)&type, (byte*)&type + 2); + _buffer.insert(_buffer.end(), (byte*)&status, (byte*)&status + 2); + _buffer.insert(_buffer.end(), (byte*)&seqLength, (byte*)&seqLength + 2); + _buffer.insert(_buffer.end(), m_seq.begin(), m_seq.end()); + _buffer.insert(_buffer.end(), (byte*)&ext, (byte*)&ext + 2); + _buffer.insert(_buffer.end(), m_payload->begin(), m_payload->end()); + + m_length = _buffer.size(); + return true; +} + +int64_t WsMessage::decode(bytesConstRef _buffer) +{ + auto length = _buffer.size(); + if (length < MESSAGE_MIN_LENGTH) + { + return -1; + } + + m_seq.clear(); + m_payload->clear(); + + auto dataBuffer = _buffer.data(); + auto p = _buffer.data(); + size_t offset = 0; + + // version field + m_version = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)p)); + p += 2; + offset += 2; + + // type field + m_packetType = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)p)); + p += 2; + offset += 2; + + // status field + m_status = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)p)); + p += 2; + offset += 2; + + // seqLength + uint16_t seqLength = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)p)); + p += 2; + offset += 2; + + CHECK_OFFSET(offset + seqLength, length); + // seq field + m_seq.insert(m_seq.begin(), p, p + seqLength); + p += seqLength; + offset += seqLength; + + // ext field + CHECK_OFFSET(offset + 2, length); + m_ext = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)p)); + p += 2; + offset += 2; + + // data field + if (p) + { + m_payload->insert(m_payload->begin(), p, dataBuffer + length); + } + m_length = length; + return length; +} diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsMessage.h b/bcos-boostssl/bcos-boostssl/websocket/WsMessage.h new file mode 100644 index 0000000..319253e --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsMessage.h @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsMessage.h + * @author: octopus + * @date 2021-07-28 + */ +#pragma once + +#include "bcos-boostssl/websocket/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#define CHECK_OFFSET(offset, length) \ + do \ + { \ + if ((offset) > (length)) \ + { \ + throw std::out_of_range("Out of range error, offset:" + std::to_string(offset) + \ + " ,length: " + std::to_string(length)); \ + } \ + } while (0); + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +// the message format for ws protocol +class WsMessage : public boostssl::MessageFace +{ +public: + // version(2) + type(2) + status(2) + seqLength(2) + ext(2) + payload(N) + const static size_t MESSAGE_MIN_LENGTH; + + using Ptr = std::shared_ptr; + WsMessage() + { + m_payload = std::make_shared(); + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + WEBSOCKET_MESSAGE(TRACE) << LOG_KV("[NEWOBJ][WsMessage]", this); + } + } + virtual ~WsMessage() + { + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + WEBSOCKET_MESSAGE(TRACE) << LOG_KV("[DELOBJ][WsMessage]", this); + } + } + + + virtual uint16_t version() const override { return m_version; } + virtual void setVersion(uint16_t) override {} + virtual uint16_t packetType() const override { return m_packetType; } + virtual void setPacketType(uint16_t _packetType) override { m_packetType = _packetType; } + virtual int16_t status() { return m_status; } + virtual void setStatus(int16_t _status) { m_status = _status; } + virtual std::string const& seq() const override { return m_seq; } + virtual void setSeq(std::string _seq) override { m_seq = _seq; } + virtual std::shared_ptr payload() const override { return m_payload; } + virtual void setPayload(std::shared_ptr _payload) override + { + m_payload = _payload; + } + virtual uint16_t ext() const override { return m_ext; } + virtual void setExt(uint16_t _ext) override { m_ext = _ext; } + + + virtual bool encode(bcos::bytes& _buffer) override; + virtual int64_t decode(bytesConstRef _buffer) override; + + bool isRespPacket() const override + { + return (m_ext & bcos::protocol::MessageExtFieldFlag::Response) != 0; + } + void setRespPacket() override { m_ext |= bcos::protocol::MessageExtFieldFlag::Response; } + + virtual uint32_t length() const override { return m_length; } + +private: + uint16_t m_version = 0; + uint16_t m_packetType = 0; + std::string m_seq; + uint16_t m_ext = 0; + std::shared_ptr m_payload; + + int16_t m_status{0}; + uint32_t m_length; +}; + +class WsMessageFactory : public boostssl::MessageFaceFactory +{ +public: + using Ptr = std::shared_ptr; + WsMessageFactory() = default; + virtual ~WsMessageFactory() {} + +public: + virtual std::string newSeq() override + { + std::string seq = boost::uuids::to_string(boost::uuids::random_generator()()); + seq.erase(std::remove(seq.begin(), seq.end(), '-'), seq.end()); + return seq; + } + + virtual boostssl::MessageFace::Ptr buildMessage() override + { + auto msg = std::make_shared(); + return msg; + } + + virtual std::shared_ptr buildMessage( + uint16_t _type, std::shared_ptr _data) + { + auto msg = std::make_shared(); + + msg->setPacketType(_type); + msg->setPayload(_data); + + return msg; + } +}; + +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsService.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsService.cpp new file mode 100644 index 0000000..2a92938 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsService.cpp @@ -0,0 +1,731 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsService.cpp + * @author: octopus + * @date 2021-07-28 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace std::chrono_literals; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +WsService::WsService(std::string _moduleName) : m_moduleName(_moduleName) +{ + WEBSOCKET_SERVICE(INFO) << LOG_KV("[NEWOBJ][WsService]", this); +} + +WsService::~WsService() +{ + stop(); + WEBSOCKET_SERVICE(INFO) << LOG_KV("[DELOBJ][WsService]", this); +} + +void WsService::start() +{ + if (m_running) + { + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("start") << LOG_DESC("websocket service is running"); + return; + } + m_running = true; + + // start ioc thread + if (m_ioservicePool) + { + m_ioservicePool->start(); + } + + // start as server + if (m_config->asServer()) + { + m_httpServer->start(); + } + + // start as client + if (m_config->asClient()) + { + if (m_config->connectPeers() && !m_config->connectPeers()->empty()) + { + // Connect to peers and wait for at least one connection to be successfully + // established + syncConnectToEndpoints(m_config->connectPeers()); + } + + reconnect(); + } + + reportConnectedNodes(); + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("start") + << LOG_DESC("start websocket service successfully") + << LOG_KV("model", m_config->model()) + << LOG_KV("max msg size", m_config->maxMsgSize()); +} + +void WsService::stop() +{ + if (!m_running) + { + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("stop") + << LOG_DESC("websocket service has been stopped"); + return; + } + m_running = false; + + // stop ioc thread + if (m_ioservicePool) + { + m_ioservicePool->stop(); + } + + // cancel reconnect task + if (m_reconnect) + { + m_reconnect->cancel(); + } + + // cancel heartbeat task + if (m_heartbeat) + { + m_heartbeat->cancel(); + } + + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("stop") << LOG_DESC("stop websocket service successfully"); +} + + +void WsService::reportConnectedNodes() +{ + auto ss = sessions(); + WEBSOCKET_SERVICE(INFO) << LOG_DESC("connected nodes") << LOG_KV("count", ss.size()); + + m_heartbeat = std::make_shared( + *(m_timerIoc), boost::posix_time::milliseconds(m_config->heartbeatPeriod())); + auto self = std::weak_ptr(shared_from_this()); + m_heartbeat->async_wait([self](const boost::system::error_code& _error) { + if (_error == boost::asio::error::operation_aborted) + { + return; + } + try + { + auto service = self.lock(); + if (!service) + { + return; + } + service->reportConnectedNodes(); + } + catch (std::exception const& e) + { + BOOST_SSL_LOG(WARNING) << LOG_DESC("connected nodes exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +std::string WsService::genConnectError( + const std::string& _error, const std::string& endpoint, bool end) +{ + std::string msg = _error; + msg += ":/"; + msg += endpoint; + if (!end) + { + msg += ", "; + } + return msg; +} + +void WsService::syncConnectToEndpoints(EndPointsPtr _peers) +{ + std::string errorMsg; + std::size_t sucCount = 0; + + auto vPromise = asyncConnectToEndpoints(_peers); + + for (std::size_t i = 0; i < vPromise->size(); ++i) + { + auto fut = (*vPromise)[i]->get_future(); + + auto status = fut.wait_for(std::chrono::milliseconds(m_waitConnectFinishTimeout)); + auto [errCode, errMsg, endpoint] = fut.get(); + switch (status) + { + case std::future_status::deferred: + break; + case std::future_status::timeout: + errorMsg += genConnectError("connection timeout", endpoint, i == vPromise->size() - 1); + break; + case std::future_status::ready: + + try + { + if (errCode) + { + errorMsg += genConnectError( + errMsg.empty() ? errCode.message() : errMsg + " " + errCode.message(), + endpoint, i == vPromise->size() - 1); + } + else + { + sucCount++; + } + } + catch (std::exception& _e) + { + WEBSOCKET_SERVICE(WARNING) + << LOG_BADGE("syncConnectToEndpoints") << LOG_DESC("future get throw exception") + << LOG_KV("e", _e.what()); + } + break; + } + } + + if (sucCount == 0) + { + stop(); + BOOST_THROW_EXCEPTION(std::runtime_error("[" + boost::to_lower_copy(errorMsg) + "]")); + return; + } +} + +std::shared_ptr>>>> +WsService::asyncConnectToEndpoints(EndPointsPtr _peers) +{ + auto vPromise = std::make_shared>>>>(); + + for (auto& peer : *_peers) + { + std::string connectedEndPoint = peer.address() + ":" + std::to_string(peer.port()); + + /* + WEBSOCKET_SERVICE(DEBUG) << LOG_BADGE("asyncConnect") + << LOG_DESC("try to connect to endpoint") + << LOG_KV("host", (peer.address())) << LOG_KV("port", peer.port()); + */ + + auto p = std::make_shared< + std::promise>>(); + vPromise->push_back(p); + + std::string host = peer.address(); + uint16_t port = peer.port(); + + auto self = std::weak_ptr(shared_from_this()); + m_connector->connectToWsServer(host, port, m_config->disableSsl(), + [p, self, connectedEndPoint](boost::beast::error_code _ec, + const std::string& _extErrorMsg, + std::shared_ptr _wsStreamDelegate, + std::shared_ptr _nodeId) { + auto service = self.lock(); + if (!service) + { + return; + } + + auto futResult = std::make_tuple(_ec, _extErrorMsg, connectedEndPoint); + p->set_value(futResult); + + if (_ec) + { + return; + } + + auto session = service->newSession(_wsStreamDelegate, *_nodeId.get()); + session->setConnectedEndPoint(connectedEndPoint); + session->startAsClient(); + }); + } + + return vPromise; +} + +void WsService::reconnect() +{ + auto self = std::weak_ptr(shared_from_this()); + m_reconnect = std::make_shared( + *(m_timerIoc), boost::posix_time::milliseconds(m_config->reconnectPeriod())); + + m_reconnect->async_wait([self, this](const boost::system::error_code& _error) { + if (_error == boost::asio::error::operation_aborted) + { + return; + } + try + { + auto service = self.lock(); + if (!service) + { + return; + } + + auto connectPeers = std::make_shared>(); + + // select all disconnected nodes + ReadGuard l(x_peers); + for (auto& peer : *m_reconnectedPeers) + { + std::string connectedEndPoint = peer.address() + ":" + std::to_string(peer.port()); + auto session = getSession(connectedEndPoint); + if (session) + { + continue; + } + connectPeers->insert(peer); + } + + + if (!connectPeers->empty()) + { + for (auto reconnectPeer : *connectPeers) + { + WEBSOCKET_SERVICE(INFO) + << ("reconnect") + << LOG_KV("peer", reconnectPeer.address() + ":" + + std::to_string(reconnectPeer.port())); + } + asyncConnectToEndpoints(connectPeers); + } + + + service->reconnect(); + } + catch (std::exception const& e) + { + BOOST_SSL_LOG(WARNING) << LOG_DESC("reconnect exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +bool WsService::registerMsgHandler(uint16_t _msgType, MsgHandler _msgHandler) +{ + UpgradableGuard l(x_msgTypeHandlers); + if (m_msgType2Method.count(_msgType) || !_msgHandler) + { + return false; + } + UpgradeGuard ul(l); + m_msgType2Method[_msgType] = _msgHandler; + return true; +} + +MsgHandler WsService::getMsgHandler(uint16_t _type) +{ + ReadGuard l(x_msgTypeHandlers); + if (m_msgType2Method.count(_type)) + { + return m_msgType2Method[_type]; + } + return nullptr; +} + +bool WsService::eraseMsgHandler(uint16_t _type) +{ + UpgradableGuard l(x_msgTypeHandlers); + if (!m_msgType2Method.count(_type)) + { + return false; + } + UpgradeGuard ul(l); + m_msgType2Method.erase(_type); + return true; +} + +std::shared_ptr WsService::newSession( + std::shared_ptr _wsStreamDelegate, std::string const& _nodeId) +{ + _wsStreamDelegate->setMaxReadMsgSize(m_config->maxMsgSize()); + + std::string endPoint = _wsStreamDelegate->remoteEndpoint(); + auto session = m_sessionFactory->createSession(m_moduleName); + + session->setWsStreamDelegate(_wsStreamDelegate); + session->setIoc(m_ioservicePool->getIOService()); + session->setThreadPool(threadPool()); + session->setMessageFactory(messageFactory()); + session->setEndPoint(endPoint); + session->setConnectedEndPoint(endPoint); + session->setMaxWriteMsgSize(m_config->maxMsgSize()); + session->setSendMsgTimeout(m_config->sendMsgTimeout()); + session->setNodeId(_nodeId); + + auto self = std::weak_ptr(shared_from_this()); + session->setConnectHandler([self](Error::Ptr _error, std::shared_ptr _session) { + auto wsService = self.lock(); + if (wsService) + { + wsService->onConnect(_error, _session); + } + }); + session->setDisconnectHandler( + [self](Error::Ptr _error, std::shared_ptr _session) { + auto wsService = self.lock(); + if (wsService) + { + wsService->onDisconnect(_error, _session); + } + }); + session->setRecvMessageHandler( + [self](std::shared_ptr message, std::shared_ptr session) { + auto wsService = self.lock(); + if (wsService) + { + wsService->onRecvMessage(std::move(message), std::move(session)); + } + }); + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("newSession") << LOG_DESC("start the session") + << LOG_KV("endPoint", endPoint); + return session; +} + +void WsService::addSession(std::shared_ptr _session) +{ + auto connectedEndPoint = _session->connectedEndPoint(); + auto endpoint = _session->endPoint(); + bool ok = false; + { + boost::unique_lock lock(x_mutex); + auto it = m_sessions.find(connectedEndPoint); + if (it == m_sessions.end()) + { + m_sessions[connectedEndPoint] = _session; + ok = true; + } + } + + // thread pool + for (auto& conHandler : m_connectHandlers) + { + conHandler(_session); + } + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("addSession") << LOG_DESC("add session to mapping") + << LOG_KV("connectedEndPoint", connectedEndPoint) + << LOG_KV("endPoint", endpoint) << LOG_KV("result", ok); +} + +void WsService::removeSession(const std::string& _endPoint) +{ + { + boost::unique_lock lock(x_mutex); + m_sessions.erase(_endPoint); + } + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("removeSession") << LOG_KV("endpoint", _endPoint); +} + +std::shared_ptr WsService::getSession(const std::string& _endPoint) +{ + boost::shared_lock lock(x_mutex); + auto it = m_sessions.find(_endPoint); + if (it != m_sessions.end()) + { + return it->second; + } + return nullptr; +} + +WsSessions WsService::sessions() +{ + WsSessions sessions; + { + boost::shared_lock lock(x_mutex); + for (const auto& session : m_sessions) + { + if (session.second && session.second->isConnected()) + { + sessions.push_back(session.second); + } + } + } + + return sessions; +} + +/** + * @brief: session connect + * @param _error: + * @param _session: session + * @return void: + */ +void WsService::onConnect(Error::Ptr _error, std::shared_ptr _session) +{ + std::ignore = _error; + std::string endpoint = ""; + std::string connectedEndPoint = ""; + if (_session) + { + endpoint = _session->endPoint(); + connectedEndPoint = _session->connectedEndPoint(); + } + + addSession(_session); + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("onConnect") << LOG_KV("endpoint", endpoint) + << LOG_KV("connectedEndPoint", connectedEndPoint) + << LOG_KV("refCount", _session.use_count()); +} + +/** + * @brief: session disconnect + * @param _error: the reason of disconnection + * @param _session: session + * @return void: + */ +void WsService::onDisconnect(Error::Ptr _error, std::shared_ptr _session) +{ + std::ignore = _error; + std::string endpoint = ""; + std::string connectedEndPoint = ""; + if (_session) + { + endpoint = _session->endPoint(); + connectedEndPoint = _session->connectedEndPoint(); + } + + // clear the session + removeSession(connectedEndPoint); + + for (auto& disHandler : m_disconnectHandlers) + { + disHandler(_session); + } + + WEBSOCKET_SERVICE(INFO) << LOG_BADGE("onDisconnect") << LOG_KV("endpoint", endpoint) + << LOG_KV("connectedEndPoint", connectedEndPoint) + << LOG_KV("refCount", _session ? _session.use_count() : -1); +} + +void WsService::onRecvMessage( + std::shared_ptr message, std::shared_ptr session) +{ + auto& seq = message->seq(); + + WEBSOCKET_SERVICE(TRACE) << LOG_BADGE("onRecvMessage") + << LOG_DESC("receive message from server") + << LOG_KV("type", message->packetType()) << LOG_KV("seq", seq) + << LOG_KV("endpoint", session->endPoint()) + << LOG_KV("data size", message->payload()->size()) + << LOG_KV("use_count", session.use_count()); + + auto typeHandler = getMsgHandler(message->packetType()); + if (typeHandler) + { + typeHandler(std::move(message), std::move(session)); + } + else + { + WEBSOCKET_SERVICE(WARNING) + << LOG_BADGE("onRecvMessage") << LOG_DESC("unrecognized message type") + << LOG_KV("type", message->packetType()) << LOG_KV("endpoint", session->endPoint()) + << LOG_KV("seq", seq) << LOG_KV("data size", message->payload()->size()) + << LOG_KV("use_count", session.use_count()); + } +} + +void WsService::asyncSendMessageByEndPoint(const std::string& _endPoint, + std::shared_ptr _msg, Options _options, RespCallBack _respFunc) +{ + std::shared_ptr session = getSession(_endPoint); + if (!session) + { + if (_respFunc) + { + auto error = std::make_shared( + WsError::EndPointNotExist, "there has no connection of the endpoint exist"); + _respFunc(error, nullptr, nullptr); + } + + return; + } + + session->asyncSendMessage(_msg, _options, _respFunc); +} + +void WsService::asyncSendMessage( + std::shared_ptr _msg, Options _options, RespCallBack _respCallBack) +{ + auto seq = _msg->seq(); + return asyncSendMessage(sessions(), _msg, _options, _respCallBack); +} + +void WsService::asyncSendMessage(const WsSessions& _ss, std::shared_ptr _msg, + Options _options, RespCallBack _respFunc) +{ + class Retry : public std::enable_shared_from_this + { + public: + WsSessions ss; + std::shared_ptr msg; + Options options; + RespCallBack respFunc; + + public: + void trySendMessageWithOutCB() + { + if (ss.empty()) + { + return; + } + + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::default_random_engine e(seed); + std::shuffle(ss.begin(), ss.end(), e); + + auto session = *ss.begin(); + ss.erase(ss.begin()); + + + session->asyncSendMessage(msg, options); + } + + void trySendMessageWithCB() + { + if (ss.empty()) + { + auto error = std::make_shared( + WsError::NoActiveCons, "there has no active connection available"); + respFunc(error, nullptr, nullptr); + return; + } + + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::default_random_engine e(seed); + std::shuffle(ss.begin(), ss.end(), e); + + auto session = *ss.begin(); + ss.erase(ss.begin()); + + auto self = shared_from_this(); + std::string endPoint = session->endPoint(); + auto moduleName = session->moduleName(); + // Note: should not pass session to the lamda operator[], this will lead to memory leak + session->asyncSendMessage(msg, options, + [self, endPoint, moduleName, callback = respFunc](Error::Ptr _error, + std::shared_ptr _msg, + std::shared_ptr _session) { + if (_error && _error->errorCode() != 0) + { + BOOST_SSL_LOG(WARNING) + << LOG_BADGE(moduleName) << LOG_BADGE("asyncSendMessage") + << LOG_DESC("callback error") << LOG_KV("endpoint", endPoint) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + + if (self->respFunc) + { + return self->respFunc(_error, _msg, _session); + } + } + + callback(_error, _msg, _session); + }); + } + }; + + auto retry = std::make_shared(); + retry->ss = _ss; + retry->msg = _msg; + + retry->options = _options; + retry->respFunc = _respFunc; + + if (_respFunc) + { + retry->trySendMessageWithCB(); + } + else + { + retry->trySendMessageWithOutCB(); + } + + // auto size = _ss.size(); + // auto seq = _msg->seq(); + // int32_t timeout = _options.timeout > 0 ? _options.timeout : m_config->sendMsgTimeout(); + + // WEBSOCKET_SERVICE(DEBUG) << LOG_BADGE("asyncSendMessage") << + // LOG_KV("seq", seq) + // << LOG_KV("size", size) << LOG_KV("timeout", timeout); +} + +void WsService::asyncSendMessage(const std::set& _endPoints, + std::shared_ptr _msg, Options _options, RespCallBack _respFunc) +{ + ws::WsSessions ss; + for (const std::string& endPoint : _endPoints) + { + auto s = getSession(endPoint); + if (s) + { + ss.push_back(s); + } + else + { + WEBSOCKET_SERVICE(DEBUG) + << LOG_BADGE("asyncSendMessage") + << LOG_DESC("there has no connection of the endpoint exist, skip") + << LOG_KV("endPoint", endPoint); + } + } + + return asyncSendMessage(ss, _msg, _options, _respFunc); +} + +void WsService::broadcastMessage(std::shared_ptr _msg) +{ + broadcastMessage(sessions(), _msg); +} + +void WsService::broadcastMessage( + const WsSession::Ptrs& _ss, std::shared_ptr _msg) +{ + for (auto& session : _ss) + { + if (session->isConnected()) + { + session->asyncSendMessage(_msg); + } + } + + WEBSOCKET_SERVICE(DEBUG) << LOG_BADGE("broadcastMessage"); +} diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsService.h b/bcos-boostssl/bcos-boostssl/websocket/WsService.h new file mode 100644 index 0000000..f47a29d --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsService.h @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsService.h + * @author: octopus + * @date 2021-07-28 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +using WsSessions = std::vector>; +using MsgHandler = + std::function, std::shared_ptr)>; +using ConnectHandler = std::function)>; +using DisconnectHandler = std::function)>; +using HandshakeHandler = std::function, std::shared_ptr)>; + +class WsService : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + WsService(std::string _moduleName = "DEFAULT"); + virtual ~WsService(); + +public: + virtual void start(); + virtual void stop(); + virtual void reconnect(); + virtual void reportConnectedNodes(); + + std::shared_ptr>>>> + asyncConnectToEndpoints(EndPointsPtr _peers); + + std::string genConnectError(const std::string& _error, const std::string& endpoint, bool end); + void syncConnectToEndpoints(EndPointsPtr _peers); + +public: + std::shared_ptr newSession( + std::shared_ptr _wsStreamDelegate, std::string const& _nodeId); + std::shared_ptr getSession(const std::string& _endPoint); + void addSession(std::shared_ptr _session); + void removeSession(const std::string& _endPoint); + WsSessions sessions(); + +public: + virtual void onConnect(bcos::Error::Ptr _error, std::shared_ptr _session); + virtual void onDisconnect(bcos::Error::Ptr _error, std::shared_ptr _session); + + virtual void onRecvMessage( + std::shared_ptr _msg, std::shared_ptr _session); + + virtual void asyncSendMessage(std::shared_ptr _msg, + Options _options = Options(), RespCallBack _respFunc = RespCallBack()); + virtual void asyncSendMessage(const WsSessions& _ss, + std::shared_ptr _msg, Options _options = Options(), + RespCallBack _respFunc = RespCallBack()); + virtual void asyncSendMessage(const std::set& _endPoints, + std::shared_ptr _msg, Options _options = Options(), + RespCallBack _respFunc = RespCallBack()); + + virtual void asyncSendMessageByEndPoint(const std::string& _endPoint, + std::shared_ptr _msg, Options _options = Options(), + RespCallBack _respFunc = RespCallBack()); + + virtual void broadcastMessage(std::shared_ptr _msg); + virtual void broadcastMessage( + const WsSession::Ptrs& _ss, std::shared_ptr _msg); + +public: + std::shared_ptr messageFactory() { return m_messageFactory; } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + + std::shared_ptr sessionFactory() { return m_sessionFactory; } + void setSessionFactory(std::shared_ptr _sessionFactory) + { + m_sessionFactory = _sessionFactory; + } + int32_t waitConnectFinishTimeout() const { return m_waitConnectFinishTimeout; } + void setWaitConnectFinishTimeout(int32_t _timeout) { m_waitConnectFinishTimeout = _timeout; } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + + std::shared_ptr threadPool() const { return m_threadPool; } + void setThreadPool(std::shared_ptr _threadPool) + { + m_threadPool = _threadPool; + } + + void setIOServicePool(IOServicePool::Ptr _ioservicePool) + { + m_ioservicePool = _ioservicePool; + m_timerIoc = m_ioservicePool->getIOService(); + } + + std::shared_ptr connector() const { return m_connector; } + void setConnector(std::shared_ptr _connector) { m_connector = _connector; } + + void setHostPort(std::string host, uint16_t port) + { + m_listenHost = host; + m_listenPort = port; + } + std::string listenHost() { return m_listenHost; } + uint16_t listenPort() { return m_listenPort; } + + WsConfig::Ptr config() const { return m_config; } + void setConfig(WsConfig::Ptr _config) { m_config = _config; } + + std::shared_ptr httpServer() const { return m_httpServer; } + void setHttpServer(std::shared_ptr _httpServer) + { + m_httpServer = _httpServer; + } + + bool registerMsgHandler(uint16_t _msgType, MsgHandler _msgHandler); + + MsgHandler getMsgHandler(uint16_t _type); + + bool eraseMsgHandler(uint16_t _msgType); + + void registerConnectHandler(ConnectHandler _connectHandler) + { + m_connectHandlers.push_back(_connectHandler); + } + + void registerDisconnectHandler(DisconnectHandler _disconnectHandler) + { + m_disconnectHandlers.push_back(_disconnectHandler); + } + + void registerHandshakeHandler(HandshakeHandler _handshakeHandler) + { + m_handshakeHandlers.push_back(_handshakeHandler); + } + + void setReconnectedPeers(EndPointsPtr _reconnectedPeers) + { + WriteGuard l(x_peers); + m_reconnectedPeers = _reconnectedPeers; + } + EndPointsPtr reconnectedPeers() const + { + ReadGuard l(x_peers); + return m_reconnectedPeers; + } + +private: + bool m_running{false}; + + int32_t m_waitConnectFinishTimeout = 30000; + std::string m_moduleName; + + // MessageFaceFactory + std::shared_ptr m_messageFactory; + // ThreadPool + std::shared_ptr m_threadPool; + // listen host port + std::string m_listenHost = ""; + uint16_t m_listenPort = 0; + // nodeID + std::string m_nodeID; + // Config + std::shared_ptr m_config; + + // list of reconnected server nodes updated by upper module, such as p2pservice + EndPointsPtr m_reconnectedPeers; + mutable bcos::SharedMutex x_peers; + + // ws connector + std::shared_ptr m_connector; + // reconnect timer + std::shared_ptr m_reconnect; + // heartbeat timer + std::shared_ptr m_heartbeat; + // http server + std::shared_ptr m_httpServer; + +private: + // mutex for m_sessions + mutable boost::shared_mutex x_mutex; + // all active sessions + std::unordered_map> m_sessions; + // type => handler + std::unordered_map m_msgType2Method; + mutable SharedMutex x_msgTypeHandlers; + // connected handlers, the handers will be called after ws protocol handshake + // is complete + std::vector m_connectHandlers; + // disconnected handlers, the handers will be called when ws session + // disconnected + std::vector m_disconnectHandlers; + // handshake handlers, the handers will be called when ws session + // disconnected + std::vector m_handshakeHandlers; + // sessionFactory + WsSessionFactory::Ptr m_sessionFactory; + + IOServicePool::Ptr m_ioservicePool; + + std::shared_ptr m_timerIoc; +}; + +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsSession.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsSession.cpp new file mode 100644 index 0000000..3d6c6c3 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsSession.cpp @@ -0,0 +1,476 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsSession.cpp + * @author: octopus + * @date 2021-07-08 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MESSAGE_SEND_DELAY_REPORT_MS (5000) +#define MAX_MESSAGE_SEND_DELAY_MS (5000) + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; + +WsSession::WsSession(std::string _moduleName) : m_moduleName(_moduleName) +{ + WEBSOCKET_SESSION(INFO) << LOG_KV("[NEWOBJ][WSSESSION]", this); +} +void WsSession::drop(uint32_t _reason) +{ + if (m_isDrop) + { + WEBSOCKET_SESSION(INFO) << LOG_BADGE("drop") + << LOG_DESC("the session has already been dropped") + << LOG_KV("endpoint", m_endPoint) << LOG_KV("session", this); + return; + } + + m_isDrop = true; + + WEBSOCKET_SESSION(INFO) << LOG_BADGE("drop") << LOG_KV("reason", _reason) + << LOG_KV("endpoint", m_endPoint) << LOG_KV("session", this); + + auto self = std::weak_ptr(shared_from_this()); + // call callbacks + { + auto error = std::make_shared( + WsError::SessionDisconnect, "the session has been disconnected"); + + ReadGuard l(x_callback); + WEBSOCKET_SESSION(INFO) << LOG_BADGE("drop") << LOG_KV("reason", _reason) + << LOG_KV("endpoint", m_endPoint) + << LOG_KV("cb size", m_callbacks.size()) << LOG_KV("session", this); + + for (auto& cbEntry : m_callbacks) + { + auto callback = cbEntry.second; + if (callback->timer) + { + callback->timer->cancel(); + } + + WEBSOCKET_SESSION(TRACE) + << LOG_DESC("the session has been disconnected") << LOG_KV("seq", cbEntry.first); + + m_threadPool->enqueue( + [callback, error]() { callback->respCallBack(error, nullptr, nullptr); }); + } + } + + // clear callbacks + { + WriteGuard lock(x_callback); + m_callbacks.clear(); + } + + if (m_wsStreamDelegate) + { + m_wsStreamDelegate->close(); + } + + m_threadPool->enqueue([self]() { + auto session = self.lock(); + if (session) + { + session->disconnectHandler()(nullptr, session); + } + }); +} + +// start WsSession as client +void WsSession::startAsClient() +{ + if (m_connectHandler) + { + auto session = shared_from_this(); + m_connectHandler(nullptr, session); + } + // read message + asyncRead(); + + WEBSOCKET_SESSION(INFO) << LOG_BADGE("startAsClient") + << LOG_DESC("websocket handshake successfully") + << LOG_KV("endPoint", m_endPoint) << LOG_KV("session", this); +} + +// start WsSession as server +void WsSession::startAsServer(HttpRequest _httpRequest) +{ + WEBSOCKET_SESSION(INFO) << LOG_BADGE("startAsServer") << LOG_DESC("start websocket handshake") + << LOG_KV("endPoint", m_endPoint) << LOG_KV("session", this); + m_wsStreamDelegate->asyncAccept( + _httpRequest, std::bind(&WsSession::onWsAccept, shared_from_this(), std::placeholders::_1)); +} + +void WsSession::onWsAccept(boost::beast::error_code _ec) +{ + if (_ec) + { + WEBSOCKET_SESSION(WARNING) << LOG_BADGE("onWsAccept") << LOG_KV("error", _ec.message()); + return drop(WsError::AcceptError); + } + + if (connectHandler()) + { + connectHandler()(nullptr, shared_from_this()); + } + + asyncRead(); + + WEBSOCKET_SESSION(INFO) << LOG_BADGE("onWsAccept") + << LOG_DESC("websocket handshake successfully") + << LOG_KV("endPoint", endPoint()) << LOG_KV("session", this); +} + +void WsSession::onReadPacket(boost::beast::flat_buffer& _buffer) +{ + try + { + auto data = boost::asio::buffer_cast(boost::beast::buffers_front(_buffer.data())); + auto size = boost::asio::buffer_size(m_buffer.data()); + + auto message = m_messageFactory->buildMessage(); + if (message->decode(bytesConstRef(data, size)) < 0) + { // invalid packet, stop this session ? + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("onReadPacket") << LOG_DESC("decode packet error") + << LOG_KV("endpoint", endPoint()) << LOG_KV("session", this); + return drop(WsError::PacketError); + } + + m_buffer.consume(_buffer.size()); + onMessage(message); + } + catch (std::exception const& e) + { + WEBSOCKET_SESSION(WARNING) << LOG_DESC("onReadPacket: decode message exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +void WsSession::onMessage(bcos::boostssl::MessageFace::Ptr _message) +{ + auto self = std::weak_ptr(shared_from_this()); + // task enqueue + m_threadPool->enqueue([_message, self]() { + auto session = self.lock(); + if (!session) + { + return; + } + auto callback = session->getAndRemoveRespCallback(_message->seq(), true, _message); + if (callback) + { + if (callback->timer) + { + callback->timer->cancel(); + } + + callback->respCallBack(nullptr, _message, session); + } + else + { + session->recvMessageHandler()(_message, session); + } + }); +} + +void WsSession::asyncRead() +{ + if (!isConnected()) + { + WEBSOCKET_SESSION(TRACE) << LOG_BADGE("asyncRead") + << LOG_DESC("session has been disconnected") + << LOG_KV("endpoint", endPoint()) << LOG_KV("session", this); + return; + } + try + { + auto self = std::weak_ptr(shared_from_this()); + m_wsStreamDelegate->asyncRead(m_buffer, [self](boost::beast::error_code _ec, std::size_t) { + auto session = self.lock(); + if (!session) + { + return; + } + + if (_ec) + { + BCOS_LOG(INFO) << "[WS][SESSION]" << LOG_BADGE("asyncRead") + << LOG_KV("error", _ec.message()) + << LOG_KV("endpoint", session->endPoint()) + << LOG_KV("refCount", session.use_count()); + + return session->drop(WsError::ReadError); + } + + session->onReadPacket(session->buffer()); + session->asyncRead(); + }); + } + catch (const std::exception& _e) + { + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("asyncRead") << LOG_DESC("exception") << LOG_KV("endpoint", endPoint()) + << LOG_KV("session", this) << LOG_KV("what", std::string(_e.what())); + drop(WsError::ReadError); + } +} + +void WsSession::onWritePacket() +{ + if (m_writing) + { + return; + } + WriteGuard l(x_writeQueue); + if (m_writing) + { + return; + } + if (m_writeQueue.empty()) + { + m_writing = false; + return; + } + m_writing = true; + auto msg = m_writeQueue.top(); + m_writeQueue.pop(); + asyncWrite(msg->buffer); +} + +void WsSession::asyncWrite(std::shared_ptr _buffer) +{ + if (!isConnected()) + { + WEBSOCKET_SESSION(TRACE) << LOG_BADGE("asyncWrite") + << LOG_DESC("session has been disconnected") + << LOG_KV("endpoint", endPoint()) << LOG_KV("session", this); + return; + } + + try + { + auto self = std::weak_ptr(shared_from_this()); + // Note: add one simple way to monitor message sending latency + // Note: the lambda[] should not include session directly, this will cause memory leak + m_wsStreamDelegate->asyncWrite( + *_buffer, [self, _buffer](boost::beast::error_code _ec, std::size_t) { + auto session = self.lock(); + if (!session) + { + return; + } + if (_ec) + { + BCOS_LOG(WARNING) << LOG_BADGE(session->moduleName()) << LOG_BADGE("Session") + << LOG_BADGE("asyncWrite") << LOG_KV("message", _ec.message()) + << LOG_KV("endpoint", session->endPoint()); + return session->drop(WsError::WriteError); + } + if (session->m_writing) + { + session->m_writing = false; + } + session->onWritePacket(); + }); + } + catch (const std::exception& _e) + { + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("asyncWrite") << LOG_DESC("async_write throw exception") + << LOG_KV("session", this) << LOG_KV("endpoint", endPoint()) + << LOG_KV("what", std::string(_e.what())); + drop(WsError::WriteError); + } +} + +void WsSession::send(std::shared_ptr buffer) +{ + auto msg = std::make_shared(); + msg->buffer = std::move(buffer); + { + WriteGuard lock(x_writeQueue); + // data to be sent is always enqueue first + m_writeQueue.push(msg); + } + onWritePacket(); +} + +/** + * @brief: send message with callback + * @param _msg: message to be send + * @param _options: options + * @param _respCallback: callback + * @return void: + */ +void WsSession::asyncSendMessage( + std::shared_ptr _msg, Options _options, RespCallBack _respFunc) +{ + auto seq = _msg->seq(); + + if (!isConnected()) + { + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("asyncSendMessage") << LOG_DESC("the session has been disconnected") + << LOG_KV("seq", seq) << LOG_KV("endpoint", endPoint()); + + if (_respFunc) + { + auto error = std::make_shared( + WsError::SessionDisconnect, "the session has been disconnected"); + _respFunc(error, nullptr, nullptr); + } + + return; + } + + // check if message size overflow + if ((int64_t)_msg->payload()->size() > (int64_t)maxWriteMsgSize()) + { + if (_respFunc) + { + auto error = std::make_shared(WsError::MessageOverflow, "Message size overflow"); + _respFunc(error, nullptr, nullptr); + } + + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("asyncSendMessage") << LOG_DESC("send message size overflow") + << LOG_KV("endpoint", endPoint()) << LOG_KV("seq", seq) + << LOG_KV("msgSize", _msg->payload()->size()) + << LOG_KV("maxWriteMsgSize", maxWriteMsgSize()); + return; + } + + auto buffer = std::make_shared(); + auto r = _msg->encode(*buffer); + if (!r) + { + if (_respFunc) + { + auto error = + std::make_shared(WsError::MessageEncodeError, "Message encode failed"); + _respFunc(error, nullptr, nullptr); + } + + WEBSOCKET_SESSION(WARNING) + << LOG_BADGE("asyncSendMessage") << LOG_DESC("message encode failed") + << LOG_KV("endpoint", endPoint()) << LOG_KV("seq", seq) + << LOG_KV("msgSize", _msg->payload()->size()) + << LOG_KV("maxWriteMsgSize", maxWriteMsgSize()); + return; + } + + if (_respFunc) + { // callback + auto callback = std::make_shared(); + callback->respCallBack = _respFunc; + auto timeout = _options.timeout > 0 ? _options.timeout : m_sendMsgTimeout; + if (timeout > 0) + { + // create new timer to handle timeout + auto timer = std::make_shared( + *m_ioc, boost::posix_time::milliseconds(timeout)); + + callback->timer = timer; + auto self = std::weak_ptr(shared_from_this()); + timer->async_wait([self, seq](const boost::system::error_code& e) { + auto session = self.lock(); + if (session) + { + session->onRespTimeout(e, seq); + } + }); + } + + addRespCallback(seq, callback); + } + + { + boost::asio::post(m_wsStreamDelegate->tcpStream().get_executor(), + boost::beast::bind_front_handler(&WsSession::send, shared_from_this(), buffer)); + } +} + +void WsSession::addRespCallback(const std::string& _seq, CallBack::Ptr _callback) +{ + WriteGuard lock(x_callback); + m_callbacks[_seq] = _callback; +} + +WsSession::CallBack::Ptr WsSession::getAndRemoveRespCallback( + const std::string& _seq, bool _remove, std::shared_ptr _message) +{ + // Session need check response packet and message isn't a respond packet, so message don't have + // a callback. Otherwise message has a callback. + if (needCheckRspPacket() && _message && !_message->isRespPacket()) + { + return nullptr; + } + + CallBack::Ptr callback = nullptr; + { + UpgradableGuard l(x_callback); + auto it = m_callbacks.find(_seq); + if (it != m_callbacks.end()) + { + callback = it->second; + if (_remove) + { + UpgradeGuard ul(l); + m_callbacks.erase(it); + } + } + } + + return callback; +} + +void WsSession::onRespTimeout(const boost::system::error_code& _error, const std::string& _seq) +{ + if (_error) + { + return; + } + + auto callback = getAndRemoveRespCallback(_seq); + if (!callback) + { + return; + } + + WEBSOCKET_SESSION(WARNING) << LOG_BADGE("onRespTimeout") << LOG_KV("seq", _seq); + + auto error = + std::make_shared(WsError::TimeOut, "waiting for message response timed out"); + m_threadPool->enqueue([callback, error]() { callback->respCallBack(error, nullptr, nullptr); }); +} diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsSession.h b/bcos-boostssl/bcos-boostssl/websocket/WsSession.h new file mode 100644 index 0000000..e10e23c --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsSession.h @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsSession.h + * @author: octopus + * @date 2021-07-28 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsService; +// The websocket session for connection +class WsSession : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using Ptrs = std::vector>; + +public: + WsSession(std::string _moduleName = "DEFAULT"); + + virtual ~WsSession() { WEBSOCKET_SESSION(INFO) << LOG_KV("[DELOBJ][WSSESSION]", this); } + + void drop(uint32_t _reason); + +public: + // start WsSession as client + void startAsClient(); + // start WsSession as server + void startAsServer(bcos::boostssl::http::HttpRequest _httpRequest); + + virtual void onMessage(bcos::boostssl::MessageFace::Ptr _message); + + + virtual bool isConnected() + { + return !m_isDrop && m_wsStreamDelegate && m_wsStreamDelegate->open(); + } + /** + * @brief: async send message + * @param _msg: message + * @param _options: options + * @param _respCallback: callback + * @return void: + */ + virtual void asyncSendMessage(std::shared_ptr _msg, + Options _options = Options(), RespCallBack _respCallback = RespCallBack()); + + + std::string endPoint() const { return m_endPoint; } + void setEndPoint(const std::string& _endPoint) { m_endPoint = _endPoint; } + + std::string connectedEndPoint() const { return m_connectedEndPoint; } + void setConnectedEndPoint(const std::string& _connectedEndPoint) + { + m_connectedEndPoint = _connectedEndPoint; + } + + void setConnectHandler(WsConnectHandler _connectHandler) { m_connectHandler = _connectHandler; } + WsConnectHandler connectHandler() { return m_connectHandler; } + + void setDisconnectHandler(WsDisconnectHandler _disconnectHandler) + { + m_disconnectHandler = _disconnectHandler; + } + WsDisconnectHandler disconnectHandler() { return m_disconnectHandler; } + + void setRecvMessageHandler(WsRecvMessageHandler _recvMessageHandler) + { + m_recvMessageHandler = _recvMessageHandler; + } + WsRecvMessageHandler recvMessageHandler() { return m_recvMessageHandler; } + + std::shared_ptr messageFactory() { return m_messageFactory; } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + + std::shared_ptr ioc() const { return m_ioc; } + void setIoc(std::shared_ptr _ioc) { m_ioc = _ioc; } + + std::shared_ptr threadPool() const { return m_threadPool; } + void setThreadPool(std::shared_ptr _threadPool) + { + m_threadPool = _threadPool; + } + + void setVersion(uint16_t _version) { m_version.store(_version); } + uint16_t version() const { return m_version.load(); } + + WsStreamDelegate::Ptr wsStreamDelegate() { return m_wsStreamDelegate; } + void setWsStreamDelegate(WsStreamDelegate::Ptr _wsStreamDelegate) + { + m_wsStreamDelegate = _wsStreamDelegate; + } + + boost::beast::flat_buffer& buffer() { return m_buffer; } + void setBuffer(boost::beast::flat_buffer _buffer) { m_buffer = std::move(_buffer); } + + int32_t sendMsgTimeout() const { return m_sendMsgTimeout; } + void setSendMsgTimeout(int32_t _sendMsgTimeout) { m_sendMsgTimeout = _sendMsgTimeout; } + + int32_t maxWriteMsgSize() const { return m_maxWriteMsgSize; } + void setMaxWriteMsgSize(int32_t _maxWriteMsgSize) { m_maxWriteMsgSize = _maxWriteMsgSize; } + + std::size_t msgQueueSize() + { + bcos::ReadGuard l(x_writeQueue); + return m_writeQueue.size(); + } + + std::string nodeId() { return m_nodeId; } + void setNodeId(std::string _nodeId) { m_nodeId = _nodeId; } + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + + bool needCheckRspPacket() { return m_needCheckRspPacket; } + void setNeedCheckRspPacket(bool _needCheckRespPacket) + { + m_needCheckRspPacket = _needCheckRespPacket; + } + +protected: + struct CallBack + { + using Ptr = std::shared_ptr; + RespCallBack respCallBack; + std::shared_ptr timer; + }; + virtual void addRespCallback(const std::string& _seq, CallBack::Ptr _callback); + CallBack::Ptr getAndRemoveRespCallback(const std::string& _seq, bool _remove = true, + std::shared_ptr _message = nullptr); + virtual void onRespTimeout(const boost::system::error_code& _error, const std::string& _seq); + + virtual void onWsAccept(boost::beast::error_code _ec); + + virtual void asyncRead(); + virtual void asyncWrite(std::shared_ptr _buffer); + + virtual void send(std::shared_ptr _buffer); + + // async read + virtual void onReadPacket(boost::beast::flat_buffer& _buffer); + void onWritePacket(); + +protected: + // flag for message that need to check respond packet like p2pmessage + bool m_needCheckRspPacket = false; + // + std::atomic_bool m_isDrop = false; + // websocket protocol version + std::atomic m_version = 0; + std::string m_moduleName; + + // buffer used to read message + boost::beast::flat_buffer m_buffer; + + std::string m_endPoint; + std::string m_connectedEndPoint; + std::string m_nodeId; + + // + int32_t m_sendMsgTimeout = -1; + // + int32_t m_maxWriteMsgSize = -1; + + // + WsStreamDelegate::Ptr m_wsStreamDelegate; + // callbacks + mutable bcos::SharedMutex x_callback; + std::unordered_map m_callbacks; + + // callback handler + WsConnectHandler m_connectHandler; + WsDisconnectHandler m_disconnectHandler; + WsRecvMessageHandler m_recvMessageHandler; + + // message factory + std::shared_ptr m_messageFactory; + // thread pool + std::shared_ptr m_threadPool; + // ioc + std::shared_ptr m_ioc; + + struct Message + { + std::shared_ptr buffer; + }; + + // send message queue + mutable bcos::SharedMutex x_writeQueue; + std::priority_queue> m_writeQueue; + std::atomic_bool m_writing = {false}; +}; + +class WsSessionFactory +{ +public: + using Ptr = std::shared_ptr; + WsSessionFactory() = default; + virtual ~WsSessionFactory() {} + +public: + virtual WsSession::Ptr createSession(std::string _moduleName) + { + auto session = std::make_shared(_moduleName); + return session; + } +}; + +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsStream.h b/bcos-boostssl/bcos-boostssl/websocket/WsStream.h new file mode 100644 index 0000000..a3d81c6 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsStream.h @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsStream.h + * @author: octopus + * @date 2021-10-29 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +using WsStreamRWHandler = std::function; +using WsStreamHandshakeHandler = std::function; + +template +class WsStream +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + WsStream( + std::shared_ptr> _stream, std::string _moduleName) + : m_stream(_stream), m_moduleName(_moduleName) + { + initDefaultOpt(); + WEBSOCKET_STREAM(INFO) << LOG_KV("[NEWOBJ][WsStream]", this); + } + + virtual ~WsStream() + { + WEBSOCKET_STREAM(INFO) << LOG_KV("[DELOBJ][WsStream]", this); + close(); + } + + void initDefaultOpt() + { + /* //TODO: close compress temp + // default open compress option + { + boost::beast::websocket::permessage_deflate opt; + opt.client_enable = true; // for clients + opt.server_enable = true; // for servers + + m_stream->set_option(opt); + } + */ + + // default timeout option + { + boost::beast::websocket::stream_base::timeout opt; + // Note: make it config + opt.handshake_timeout = std::chrono::milliseconds(30000); + // idle time + opt.idle_timeout = std::chrono::milliseconds(10000); + // open ping/pong option + opt.keep_alive_pings = true; + + m_stream->set_option(opt); + m_stream->auto_fragment(false); + m_stream->secure_prng(false); + m_stream->write_buffer_bytes(2 * 1024 * 1024); + } + } + +public: + //--------------- set opt params for websocket stream + // begin----------------------------- + void setMaxReadMsgSize(uint32_t _maxValue) { m_stream->read_message_max(_maxValue); } + + template + void setOpt(OPT _opt) + { + m_stream->set_option(_opt); + } + //--------------- set opt params for websocket stream end + //------------------------------- + + std::string moduleName() { return m_moduleName; } + void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } + +public: + bool open() { return !m_closed.load() && m_stream->is_open(); } + + void close() + { + bool trueValue = true; + bool falseValue = false; + if (m_closed.compare_exchange_strong(falseValue, trueValue)) + { + auto& ss = boost::beast::get_lowest_layer(*m_stream); + ws::WsTools::close(ss.socket()); + WEBSOCKET_STREAM(INFO) + << LOG_DESC("the real action to close the stream") << LOG_KV("this", this); + } + return; + } + + boost::beast::tcp_stream& tcpStream() { return boost::beast::get_lowest_layer(*m_stream); } + + std::shared_ptr> stream() const { return m_stream; } + +public: + void asyncWrite(const bcos::bytes& _buffer, WsStreamRWHandler _handler) + { + m_stream->binary(true); + m_stream->async_write(boost::asio::buffer(_buffer), _handler); + } + + void asyncRead(boost::beast::flat_buffer& _buffer, WsStreamRWHandler _handler) + { + m_stream->async_read(_buffer, _handler); + } + + void asyncHandshake(const std::string& _host, const std::string& _target, + std::function _handler) + { + m_stream->async_handshake(_host, _target, _handler); + } + + void asyncAccept( + bcos::boostssl::http::HttpRequest _httpRequest, WsStreamHandshakeHandler _handler) + { + m_stream->async_accept(_httpRequest, boost::beast::bind_front_handler(_handler)); + } + + virtual std::string localEndpoint() + { + try + { + auto& s = tcpStream(); + auto localEndPoint = s.socket().local_endpoint(); + auto endPoint = + localEndPoint.address().to_string() + ":" + std::to_string(localEndPoint.port()); + return endPoint; + } + catch (const std::exception& e) + { + WEBSOCKET_STREAM(WARNING) << LOG_BADGE("localEndpoint") << LOG_KV("e", e.what()); + } + + return std::string(""); + } + + virtual std::string remoteEndpoint() + { + try + { + auto& s = tcpStream(); + auto remoteEndpoint = s.socket().remote_endpoint(); + auto endPoint = + remoteEndpoint.address().to_string() + ":" + std::to_string(remoteEndpoint.port()); + return endPoint; + } + catch (const std::exception& e) + { + WEBSOCKET_STREAM(WARNING) << LOG_BADGE("remoteEndpoint") << LOG_KV("e", e.what()); + } + + return std::string(""); + } + +private: + std::atomic m_closed{false}; + std::shared_ptr> m_stream; + std::string m_moduleName = "DEFAULT"; +}; + +using RawWsStream = WsStream; +using SslWsStream = WsStream>; + +class WsStreamDelegate +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + WsStreamDelegate(RawWsStream::Ptr _rawStream) : m_isSsl(false), m_rawStream(_rawStream) {} + WsStreamDelegate(SslWsStream::Ptr _sslStream) : m_isSsl(true), m_sslStream(_sslStream) {} + +public: + void setMaxReadMsgSize(uint32_t _maxValue) + { + m_isSsl ? m_sslStream->setMaxReadMsgSize(_maxValue) : + m_rawStream->setMaxReadMsgSize(_maxValue); + } + bool open() { return m_isSsl ? m_sslStream->open() : m_rawStream->open(); } + void close() { return m_isSsl ? m_sslStream->close() : m_rawStream->close(); } + std::string localEndpoint() + { + return m_isSsl ? m_sslStream->localEndpoint() : m_rawStream->localEndpoint(); + } + std::string remoteEndpoint() + { + return m_isSsl ? m_sslStream->remoteEndpoint() : m_rawStream->remoteEndpoint(); + } + + void asyncWrite(const bcos::bytes& _buffer, WsStreamRWHandler _handler) + { + return m_isSsl ? m_sslStream->asyncWrite(_buffer, _handler) : + m_rawStream->asyncWrite(_buffer, _handler); + } + + void asyncRead(boost::beast::flat_buffer& _buffer, WsStreamRWHandler _handler) + { + return m_isSsl ? m_sslStream->asyncRead(_buffer, _handler) : + m_rawStream->asyncRead(_buffer, _handler); + } + + void asyncWsHandshake(const std::string& _host, const std::string& _target, + std::function _handler) + { + return m_isSsl ? m_sslStream->asyncHandshake(_host, _target, _handler) : + m_rawStream->asyncHandshake(_host, _target, _handler); + } + + void asyncAccept( + bcos::boostssl::http::HttpRequest _httpRequest, WsStreamHandshakeHandler _handler) + { + return m_isSsl ? m_sslStream->asyncAccept(_httpRequest, _handler) : + m_rawStream->asyncAccept(_httpRequest, _handler); + } + + void asyncHandshake(std::function _handler) + { + if (m_isSsl) + { + m_sslStream->stream()->next_layer().async_handshake( + boost::asio::ssl::stream_base::client, _handler); + } + else + { // callback directly + _handler(make_error_code(boost::system::errc::success)); + } + } + + boost::beast::tcp_stream& tcpStream() + { + return m_isSsl ? m_sslStream->tcpStream() : m_rawStream->tcpStream(); + } + + void setVerifyCallback(bool _disableSsl, VerifyCallback callback, bool = true) + { + if (!_disableSsl) + { + m_sslStream->stream()->next_layer().set_verify_callback(callback); + } + } + +private: + bool m_isSsl{false}; + + RawWsStream::Ptr m_rawStream; + SslWsStream::Ptr m_sslStream; +}; + +class WsStreamDelegateBuilder +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + WsStreamDelegate::Ptr build( + std::shared_ptr _tcpStream, std::string _moduleName) + { + _tcpStream->socket().set_option(boost::asio::ip::tcp::no_delay(true)); + auto wsStream = std::make_shared>( + std::move(*_tcpStream)); + auto rawWsStream = std::make_shared>( + wsStream, _moduleName); + return std::make_shared(rawWsStream); + } + + WsStreamDelegate::Ptr build( + std::shared_ptr> _sslStream, + std::string _moduleName) + { + _sslStream->next_layer().socket().set_option(boost::asio::ip::tcp::no_delay(true)); + auto wsStream = std::make_shared< + boost::beast::websocket::stream>>( + std::move(*_sslStream)); + auto sslWsStream = std::make_shared< + bcos::boostssl::ws::WsStream>>( + wsStream, _moduleName); + return std::make_shared(sslWsStream); + } + + WsStreamDelegate::Ptr build(bool _disableSsl, std::shared_ptr _ctx, + std::shared_ptr _tcpStream, std::string _moduleName) + { + if (_disableSsl) + { + return build(_tcpStream, _moduleName); + } + + auto sslStream = std::make_shared>( + std::move(*_tcpStream), *_ctx); + return build(sslStream, _moduleName); + } +}; + +} // namespace ws +} // namespace boostssl +} // namespace bcos diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsTools.cpp b/bcos-boostssl/bcos-boostssl/websocket/WsTools.cpp new file mode 100644 index 0000000..f63fa88 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsTools.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsTools.cpp + * @author: octopus + * @date 2021-10-19 + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +bool WsTools::stringToEndPoint(const std::string& _peer, NodeIPEndpoint& _endpoint) +{ + // ipv4: 127.0.0.1:12345 => NodeIPEndpoint + // ipv6: [0:1]:12345 => NodeIPEndpoint + + std::string ip; + uint16_t port = 0; + bool valid = false; + + std::vector s; + boost::split(s, _peer, boost::is_any_of("]"), boost::token_compress_on); + if (s.size() == 2) + { // ipv6 + ip = s[0].data() + 1; + port = boost::lexical_cast(s[1].data() + 1); + valid = true; + } + else if (s.size() == 1) + { // ipv4 + std::vector v; + boost::split(v, _peer, boost::is_any_of(":"), boost::token_compress_on); + ip = v[0]; + port = boost::lexical_cast(v[1]); + valid = true; + } + + valid = validIP(ip) && validPort(port); + + if (!valid) + { + WEBSOCKET_TOOL(WARNING) << LOG_DESC("peer is not valid ip:port format") + << LOG_KV("peer", _peer); + } + + if (valid) + { + _endpoint = NodeIPEndpoint(ip, port); + } + + return valid; +} + +void WsTools::close(boost::asio::ip::tcp::socket& _socket) +{ + try + { + boost::beast::error_code ec; + _socket.shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); + if (_socket.is_open()) + { + _socket.close(); + } + } + catch (std::exception const& e) + { + WEBSOCKET_TOOL(WARNING) << LOG_DESC("WsTools close exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} \ No newline at end of file diff --git a/bcos-boostssl/bcos-boostssl/websocket/WsTools.h b/bcos-boostssl/bcos-boostssl/websocket/WsTools.h new file mode 100644 index 0000000..a813996 --- /dev/null +++ b/bcos-boostssl/bcos-boostssl/websocket/WsTools.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file WsTools.h + * @author: octopus + * @date 2021-10-10 + */ +#pragma once +#include "bcos-boostssl/websocket/WsConfig.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +static std::string m_moduleName = "DEFAULT"; +class WsTools +{ +public: + static bool validIP(const std::string& _ip) + { + boost::system::error_code ec; + boost::asio::ip::address::from_string(_ip, ec); + if (ec) + { + return false; + } + return true; + } + + static bool validPort(uint16_t _port) { return _port > 1024; } + + static bool stringToEndPoint(const std::string& peer, NodeIPEndpoint& _endpoint); + + static void close(boost::asio::ip::tcp::socket& skt); + + static std::string moduleName() { return m_moduleName; } + static void setModuleName(std::string _moduleName) { m_moduleName = _moduleName; } +}; +} // namespace ws +} // namespace boostssl +} // namespace bcos \ No newline at end of file diff --git a/bcos-boostssl/test/CMakeLists.txt b/bcos-boostssl/test/CMakeLists.txt new file mode 100644 index 0000000..1eaebd0 --- /dev/null +++ b/bcos-boostssl/test/CMakeLists.txt @@ -0,0 +1,26 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-rpc +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "unittests/*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-boostssl) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE .) +find_package(Boost REQUIRED unit_test_framework) +target_link_libraries(${TEST_BINARY_NAME} boostssl-websocket boostssl-httpserver bcos-utilities bcos-framework Boost::unit_test_framework) \ No newline at end of file diff --git a/bcos-boostssl/test/exec/CMakeLists.txt b/bcos-boostssl/test/exec/CMakeLists.txt new file mode 100644 index 0000000..ee27eae --- /dev/null +++ b/bcos-boostssl/test/exec/CMakeLists.txt @@ -0,0 +1,25 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +# OpenSSL +find_package(TASSL REQUIRED MODULE) + +add_executable(http-server-sample http_server_sample.cpp) +target_link_libraries(http-server-sample PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) + +add_executable(echo-server-sample echo_server_sample.cpp) +target_link_libraries(echo-server-sample PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) + +add_executable(echo-client-sample echo_client_sample.cpp) +target_link_libraries(echo-client-sample PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) + +add_executable(msg-codec-perf msg_codec_perf.cpp) +target_link_libraries(msg-codec-perf PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) + +add_executable(boostssl-delay-perf boostssl_delay_perf.cpp) +target_link_libraries(boostssl-delay-perf PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) + +add_executable(boostssl-throughput-perf boostssl_throughput_perf.cpp) +target_link_libraries(boostssl-throughput-perf PUBLIC ${BOOSTSSL_TARGET} bcos-utilities::bcos-utilities OpenSSL::SSL OpenSSL::Crypto) diff --git a/bcos-boostssl/test/exec/boostssl_delay_perf.cpp b/bcos-boostssl/test/exec/boostssl_delay_perf.cpp new file mode 100644 index 0000000..13dc8a4 --- /dev/null +++ b/bcos-boostssl/test/exec/boostssl_delay_perf.cpp @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file boostssl_delay_perf.cpp + * @author: octopus + * @date 2021-10-31 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Usage: \n" + << " \t boostssl-delay-perf server \n " + << " \t boostssl-delay-perf client " + " \n" + << "Example:\n" + << " \t ./boostssl-delay-perf server 127.0.0.1 20200 true \n" + << " \t ./boostssl-delay-perf client 127.0.0.1 20200 true 100000 1024 \n"; + std::exit(0); +} + +void initLog(const std::string& _configPath = "./clog.ini") +{ + boost::property_tree::ptree pt; + try + { + boost::property_tree::read_ini(_configPath, pt); + } + catch (const std::exception& e) + { + try + { + std::string defaultPath = "conf/clog.ini"; + boost::property_tree::read_ini(defaultPath, pt); + } + catch (const std::exception& e) + { + std::cerr << "Not found available log config(./clog.ini or ./conf/clog.ini), use " + "the default configuration items" + << std::endl; + } + } + + auto logInitializer = new bcos::BoostLogInitializer(); + logInitializer->initLog(pt, bcos::FileLogger, "cpp_sdk_log"); +} + +const static int DELAY_PERF_MSGTYPE = 9999; + +void workAsClient( + std::string serverIp, uint16_t serverPort, bool disableSsl, uint64_t echoC, uint64_t msgSize) +{ + std::cerr << " ==> boostssl_delay_perf work as client. \n" + << " \t serverIp: " << serverIp << "\n" + << " \t serverPort: " << serverPort << "\n" + << " \t disableSsl: " << disableSsl << "\n" + << " \t echoC: " << echoC << "\n" + << " \t msgSize: " << msgSize << "\n\n\n"; + + auto config = std::make_shared(); + config->setModel(WsModel::Client); + + auto peers = std::make_shared(); + peers->insert(NodeIPEndpoint(serverIp, serverPort)); + config->setConnectPeers(peers); + + config->setThreadPoolSize(4); + config->setDisableSsl(disableSsl); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + + auto wsService = std::make_shared("boostssl-delay-perf-client"); + auto wsInitializer = std::make_shared(); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + wsService->start(); + + + std::string strMsg(msgSize, 'a'); + auto msg = wsService->messageFactory()->buildMessage(); + msg->setPacketType(DELAY_PERF_MSGTYPE); + msg->setPayload(std::make_shared(strMsg.begin(), strMsg.end())); + // msg->setSeq(wsService->messageFactory()->newSeq()); + + uint64_t nSucC = 0; + uint64_t nFailedC = 0; + + uint64_t i = 0; + uint64_t _10Per = echoC / 10; + auto startPoint = std::chrono::high_resolution_clock::now(); + while (i++ < echoC) + { + std::promise p; + auto f = p.get_future(); + + if (i % _10Per == 0) + { + std::cerr << "\t...process: " << ((double)i / echoC) * 100 << "%" << std::endl; + } + + msg->setSeq(wsService->messageFactory()->newSeq()); + wsService->asyncSendMessage(msg, Options(-1), + [&p, &nFailedC, &nSucC](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + (void)_error; + (void)_session; + (void)_msg; + if (_error && _error->errorCode() != 0) + { + nFailedC++; + return; + } + p.set_value(true); + + nSucC++; + }); + f.get(); + } + auto endPoint = std::chrono::high_resolution_clock::now(); + + auto totalTime = + std::chrono::duration_cast(endPoint - startPoint).count(); + + std::cerr << std::endl << std::endl; + std::cerr << " ==> boostssl_delay_perf result: " << std::endl; + std::cerr << " \t total time(us): " << totalTime << std::endl; + std::cerr << " \t average time(us): " << ((double)totalTime / echoC) << std::endl; + std::cerr << " \t nSucC: " << nSucC << std::endl; + std::cerr << " \t nFailedC: " << nFailedC << std::endl; +} + +void workAsServer(std::string listenIp, uint16_t listenPort, bool disableSsl) +{ + std::cerr << " ==> boostssl_delay_perf work as server." << std::endl + << " \t listenIp: " << listenIp << std::endl + << " \t listenPort: " << listenPort << std::endl + << " \t disableSsl: " << disableSsl << "\n"; + + auto config = std::make_shared(); + config->setModel(WsModel::Server); + + config->setListenIP(listenIp); + config->setListenPort(listenPort); + config->setThreadPoolSize(4); + config->setDisableSsl(disableSsl); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + + auto wsService = std::make_shared("boostssl-delay-perf-server"); + auto wsInitializer = std::make_shared(); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + + wsService->registerMsgHandler(DELAY_PERF_MSGTYPE, + [](std::shared_ptr _msg, std::shared_ptr _session) { + _session->asyncSendMessage(_msg); + }); + + wsService->start(); + + int i = 0; + while (true) + { + // std::cerr << " boostssl deplay perf server working ..." << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + i++; + } +} + +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string workModel = argv[1]; + std::string host = argv[2]; + uint16_t port = atoi(argv[3]); + bool disableSsl = ("true" == std::string(argv[4])) ? true : false; + + initLog(); + + if (workModel == "server") + { + workAsServer(host, port, disableSsl); + } + else if (workModel == "client") + { + uint64_t echoCount = 100; + uint64_t msgSize = 1024; + if (argc > 5) + { + echoCount = std::stoull(std::string(argv[5])); + } + + if (argc > 6) + { + msgSize = std::stoull(std::string(argv[6])); + } + workAsClient(host, port, disableSsl, echoCount, msgSize); + } + else + { + usage(); + } +} \ No newline at end of file diff --git a/bcos-boostssl/test/exec/boostssl_throughput_perf.cpp b/bcos-boostssl/test/exec/boostssl_throughput_perf.cpp new file mode 100644 index 0000000..d4e4ccb --- /dev/null +++ b/bcos-boostssl/test/exec/boostssl_throughput_perf.cpp @@ -0,0 +1,294 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file boostssl_throughput_perf.cpp + * @author: octopus + * @date 2022-04-08 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Usage: \n" + << " \t boostssl-throughput-perf server \n " + << " \t boostssl-throughput-perf client " + " \n" + << "Example:\n" + << " \t ./boostssl-throughput-perf server 127.0.0.1 20200 true 16\n" + << " \t ./boostssl-throughput-perf client 127.0.0.1 20200 true 16 1024 1000\n"; + std::exit(0); +} + +void initLog(const std::string& _configPath = "./clog.ini") +{ + boost::property_tree::ptree pt; + try + { + boost::property_tree::read_ini(_configPath, pt); + } + catch (const std::exception& e) + { + try + { + std::string defaultPath = "conf/clog.ini"; + boost::property_tree::read_ini(defaultPath, pt); + } + catch (const std::exception& e) + { + std::cerr << "Not found available log config(./clog.ini or ./conf/clog.ini), use " + "the default configuration items" + << std::endl; + } + } + + auto logInitializer = new bcos::BoostLogInitializer(); + logInitializer->initLog(pt, bcos::FileLogger, "cpp_sdk_log"); +} + +const static int DELAY_PERF_MSGTYPE = 9999; + +void workAsClient(std::string serverIp, uint16_t serverPort, bool disableSsl, uint64_t sendRate, + uint64_t msgSize, uint32_t threadCount) +{ + std::cerr << " boostssl_throughput_perf work as client." << std::endl + << " \t serverIp: " << serverIp << std::endl + << " \t serverPort: " << serverPort << std::endl + << " \t disableSsl: " << disableSsl << std::endl + << " \t sendRate: " << sendRate << std::endl + << " \t msgSize: " << msgSize << std::endl + << " \t threadCount: " << threadCount << "\n\n\n"; + + auto config = std::make_shared(); + config->setModel(WsModel::Client); + + auto peers = std::make_shared(); + peers->insert(NodeIPEndpoint(serverIp, serverPort)); + + config->setConnectPeers(peers); + + config->setThreadPoolSize(threadCount); + config->setDisableSsl(disableSsl); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + + auto wsService = std::make_shared("boostssl-th-perf-client"); + auto wsInitializer = std::make_shared(); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + wsService->start(); + + std::string strMsg(msgSize, 'a'); + auto msg = wsService->messageFactory()->buildMessage(); + msg->setPacketType(DELAY_PERF_MSGTYPE); + msg->setPayload(std::make_shared(strMsg.begin(), strMsg.end())); + + std::atomic nSucC = 0; + std::atomic nFailedC = 0; + std::atomic nLastSucC = 0; + std::atomic nLastFailedC = 0; + + std::atomic nThisSendCount = 0; + std::atomic nLastSendCount = 0; + + uint64_t sendMsgCountPerMS = sendRate / 1000; + sendMsgCountPerMS = sendMsgCountPerMS > 0 ? sendMsgCountPerMS : 1; + // auto startPoint = std::chrono::high_resolution_clock::now(); + + // report thread; + auto reportThread = std::make_shared( + [&wsService, &nLastSendCount, &nSucC, &nFailedC, &nLastSucC, &nLastFailedC]() { + uint32_t nSleepMS = 1000; + while (true) + { + int64_t nQueueSize = -1; + auto ss = wsService->sessions(); + if (!ss.empty()) + { + nQueueSize = ss[0]->msgQueueSize(); + } + + std::cerr << " boostssl throughput perf working as client: " << std::endl; + std::cerr << " \tnQueueSize: " << nQueueSize << ", nSucC: " << nSucC + << ", nFailedC: " << nFailedC << ", nLastSucC: " << nLastSucC + << ", nLastFailedC: " << nLastFailedC + << ", nLastSendCount: " << nLastSendCount << std::endl; + + nLastFailedC = 0; + nLastSucC = 0; + nLastSendCount = 0; + std::this_thread::sleep_for(std::chrono::milliseconds(nSleepMS)); + } + }); + reportThread->detach(); + + + while (true) + { + nThisSendCount++; + nLastSendCount++; + msg->setSeq(wsService->messageFactory()->newSeq()); + wsService->asyncSendMessage(msg, Options(-1), + [&nFailedC, &nSucC, &nLastFailedC, &nLastSucC](Error::Ptr _error, + std::shared_ptr _msg, std::shared_ptr _session) { + (void)_error; + (void)_session; + (void)_msg; + if (_error && _error->errorCode() != 0) + { + nFailedC++; + nLastFailedC++; + return; + } + + nLastSucC++; + nSucC++; + }); + + if (nThisSendCount > sendMsgCountPerMS) + { + nThisSendCount = 0; + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + } +} + +void workAsServer(std::string listenIp, uint16_t listenPort, bool disableSsl, uint32_t threadCount) +{ + std::cerr << " boostssl_throughput_perf work as server." << std::endl + << " \t listenIp: " << listenIp << std::endl + << " \t listenPort: " << listenPort << std::endl + << " \t disableSsl: " << disableSsl << std::endl + << " \t threadCount: " << threadCount << std::endl; + + auto config = std::make_shared(); + config->setModel(WsModel::Server); + + config->setListenIP(listenIp); + config->setListenPort(listenPort); + config->setThreadPoolSize(threadCount); + config->setDisableSsl(disableSsl); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + + auto wsService = std::make_shared("boostssl-th-perf-server"); + auto wsInitializer = std::make_shared(); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + + std::atomic totalRecvDataSize = {0}; + std::atomic lastRecvDataCount = {0}; + std::atomic lastSecTotalRecvDataSize = {0}; + wsService->registerMsgHandler(DELAY_PERF_MSGTYPE, + [&totalRecvDataSize, &lastSecTotalRecvDataSize, &lastRecvDataCount]( + std::shared_ptr _msg, std::shared_ptr _session) { + totalRecvDataSize += _msg->payload()->size(); + lastSecTotalRecvDataSize += _msg->payload()->size(); + lastRecvDataCount++; + _session->asyncSendMessage(_msg); + }); + + wsService->start(); + + uint32_t nSleepMS = 1000; + while (true) + { + std::cerr << " boostssl throughput perf working as server: " << std::endl; + std::cerr << " \t ClientCount: " << wsService->sessions().size() + << ", TotalRecvDataSize(Bytes): " << totalRecvDataSize + << ", lastRecvDataCount: " << lastRecvDataCount + << ", LastRecvDataSize(Bytes): " << lastSecTotalRecvDataSize + << ", LastRecvDataRate(MBit/s): " + << (((double)lastSecTotalRecvDataSize * 8 * 1000) / nSleepMS / (1024 * 1024)) + << std::endl; + lastSecTotalRecvDataSize = 0; + lastRecvDataCount = 0; + std::this_thread::sleep_for(std::chrono::milliseconds(nSleepMS)); + } +} + +int main(int argc, char** argv) +{ + if (argc < 5) + { + usage(); + } + + std::string workModel = argv[1]; + std::string host = argv[2]; + uint16_t port = atoi(argv[3]); + bool disableSsl = ("true" == std::string(argv[4])) ? true : false; + uint32_t threadCount = atoi(argv[5]); + + initLog(); + + if (workModel == "server") + { + workAsServer(host, port, disableSsl, threadCount); + } + else if (workModel == "client") + { + uint64_t sendRate = 1000; + uint64_t msgSize = 1024; + + if (argc > 6) + { + msgSize = std::stoull(std::string(argv[6])); + } + + if (argc > 7) + { + sendRate = std::stoull(std::string(argv[7])); + } + + workAsClient(host, port, disableSsl, sendRate, msgSize, threadCount); + } + else + { + usage(); + } +} \ No newline at end of file diff --git a/bcos-boostssl/test/exec/echo_client_sample.cpp b/bcos-boostssl/test/exec/echo_client_sample.cpp new file mode 100644 index 0000000..f1245b3 --- /dev/null +++ b/bcos-boostssl/test/exec/echo_client_sample.cpp @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file echo_client_sample.cpp + * @author: octopus + * @date 2021-10-31 + */ + +#include "bcos-boostssl/websocket/WsInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; + + +#define TEST_LOG(LEVEL, module_name) BCOS_LOG(LEVEL) << LOG_BADGE(module_name) << "[WS][SERVICE]" + +void usage() +{ + std::cerr << "Usage: echo-client-sample qps(MBit/s) payloadSize(KBytes, " + "default is 1MBytes)\n" + << "Example:\n" + << " ./echo-client-sample 127.0.0.1 20200 true 1024 1024\n"; + std::exit(0); +} + +void sendMessage(std::shared_ptr _msg, std::shared_ptr _wsService, + std::shared_ptr _rateLimiter) +{ + while (true) + { + _rateLimiter->acquire(1, true); + auto seq = _wsService->messageFactory()->newSeq(); + _msg->setSeq(seq); + auto startT = utcTime(); + auto msgSize = _msg->payload()->size(); + _wsService->asyncSendMessage(_msg, Options(-1), + [msgSize, startT](Error ::Ptr _error, std::shared_ptr, + std::shared_ptr _session) { + (void)_session; + if (_error && _error->errorCode() != 0) + { + TEST_LOG(WARNING, "TEST_CLIENT_MODULE") + << LOG_BADGE(" [Main] ===>>>> ") << LOG_DESC("callback response error") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + BCOS_LOG(INFO) << LOG_DESC("receiveResponse, timecost:") << (utcTime() - startT) + << LOG_KV("msgSize", msgSize); + }); + } +} + +int main(int argc, char** argv) +{ + if (argc < 5) + { + usage(); + } + + std::string host = argv[1]; + uint16_t port = atoi(argv[2]); + + std::string disableSsl = argv[3]; + + uint64_t qps = (atol(argv[4])) * 1024 * 1024; + // default payLoadSize is 1MB + uint64_t payLoadSize = 1024 * 1024; + if (argc > 5) + { + payLoadSize = (atol(argv[5]) * 1024); + } + std::cout << "### payLoad:" << payLoadSize << std::endl; + std::cout << "### qps: " << qps << std::endl; + int64_t packetQPS = (qps) / (payLoadSize * 8); + std::cout << "### packetQPS: " << packetQPS << std::endl; + + auto logInitializer = std::make_shared(); + std::string configFilePath = "config.ini"; + boost::property_tree::ptree pt; + boost::property_tree::read_ini(configFilePath, pt); + logInitializer->initLog(pt); + + std::string test_module_name = "testClient"; + TEST_LOG(INFO, test_module_name) << LOG_DESC("echo-client-sample") << LOG_KV("ip", host) + << LOG_KV("port", port) << LOG_KV("disableSsl", disableSsl); + + auto config = std::make_shared(); + config->setModel(WsModel::Client); + + NodeIPEndpoint endpoint = NodeIPEndpoint(host, port); + + auto peers = std::make_shared(); + peers->insert(endpoint); + config->setConnectPeers(peers); + + config->setThreadPoolSize(8); + config->setMaxMsgSize(100 * 1024 * 1024); + config->setDisableSsl(0 == disableSsl.compare("true")); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + config->setModuleName("TEST_CLIENT"); + + auto wsService = std::make_shared(config->moduleName()); + auto wsInitializer = std::make_shared(); + + auto sessionFactory = std::make_shared(); + wsInitializer->setSessionFactory(sessionFactory); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + + wsService->start(); + + // construct message + auto msg = std::dynamic_pointer_cast(wsService->messageFactory()->buildMessage()); + msg->setPacketType(999); + std::string randStr(payLoadSize, 'a'); + msg->setPayload(std::make_shared(randStr.begin(), randStr.end())); + auto rateLimiter = std::make_shared(packetQPS); + sendMessage(msg, wsService, rateLimiter); + return EXIT_SUCCESS; +} diff --git a/bcos-boostssl/test/exec/echo_server_sample.cpp b/bcos-boostssl/test/exec/echo_server_sample.cpp new file mode 100644 index 0000000..fa52e69 --- /dev/null +++ b/bcos-boostssl/test/exec/echo_server_sample.cpp @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file echo_server_client.cpp + * @author: octopus + * @date 2021-10-31 + */ + +#include "bcos-boostssl/websocket/WsInitializer.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +std::string MODULE_NAME = "DEFAULT"; + +#define TEST_SERVER_LOG(LEVEL, MODULE_NAME) \ + BCOS_LOG(LEVEL) << LOG_BADGE(MODULE_NAME) << "[WS][SERVICE]" + +void usage() +{ + std::cerr << "Usage: echo-server-sample \n" + << "Example:\n" + << " ./echo-server-sample 127.0.0.1 20200 true\n" + << " ./echo-server-sample 127.0.0.1 20200 false\n"; + std::exit(0); +} + + +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string host = argv[1]; + uint16_t port = atoi(argv[2]); + + std::string disableSsl = "true"; + + if (argc > 3) + { + disableSsl = argv[3]; + } + auto logInitializer = std::make_shared(); + std::string configFilePath = "config.ini"; + boost::property_tree::ptree pt; + boost::property_tree::read_ini(configFilePath, pt); + logInitializer->initLog(pt); + MODULE_NAME = "TEST_SERVER_MODULE"; + TEST_SERVER_LOG(INFO, MODULE_NAME) << LOG_DESC("echo-server-sample") << LOG_KV("ip", host) + << LOG_KV("port", port) << LOG_KV("disableSsl", disableSsl); + + auto config = std::make_shared(); + config->setModel(WsModel::Server); + + config->setListenIP(host); + config->setListenPort(port); + config->setThreadPoolSize(8); + config->setMaxMsgSize(100 * 1024 * 1024); + config->setDisableSsl(0 == disableSsl.compare("true")); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + config->setModuleName("TEST_SERVER"); + + auto wsService = std::make_shared(config->moduleName()); + auto wsInitializer = std::make_shared(); + + auto sessionFactory = std::make_shared(); + wsInitializer->setSessionFactory(sessionFactory); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + + if (!wsService->registerMsgHandler(999, + [](std::shared_ptr _msg, std::shared_ptr _session) { + _msg->setRespPacket(); + + _session->asyncSendMessage(_msg); + })) + { + BCOS_LOG(WARNING) << "registerMsgHandler failed"; + return EXIT_SUCCESS; + } + + auto handler = wsService->getMsgHandler(999); + if (!handler) + { + BCOS_LOG(WARNING) << "msg handler not found"; + return EXIT_SUCCESS; + } + + wsService->start(); + + int i = 0; + while (true) + { + // TEST_SERVER_LOG(INFO, MODULE_NAME) << LOG_BADGE(" [Main] ===>>>> "); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + i++; + } + + return EXIT_SUCCESS; +} diff --git a/bcos-boostssl/test/exec/http_server_sample.cpp b/bcos-boostssl/test/exec/http_server_sample.cpp new file mode 100644 index 0000000..8248ce0 --- /dev/null +++ b/bcos-boostssl/test/exec/http_server_sample.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file http_server.cpp + * @author: octopus + * @date 2021-10-31 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Usage: http-server-sample \n" + << "Example:\n" + << " ./http-server-sample 127.0.0.1 20200 true\n" + << " ./http-server-sample 127.0.0.1 20200 false\n"; + std::exit(0); +} + + +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string host = argv[1]; + uint16_t port = atoi(argv[2]); + + std::string disableSsl = "true"; + + if (argc > 3) + { + disableSsl = argv[3]; + } + + BCOS_LOG(INFO) << LOG_DESC("http-server-sample") << LOG_KV("ip", host) << LOG_KV("port", port) + << LOG_KV("disableSsl", disableSsl); + + + auto config = std::make_shared(); + config->setModel(WsModel::Server); + + config->setListenIP(host); + config->setListenPort(port); + config->setThreadPoolSize(4); + config->setDisableSsl(0 == disableSsl.compare("true")); + if (!config->disableSsl()) + { + auto contextConfig = std::make_shared(); + contextConfig->initConfig("./boostssl.ini"); + config->setContextConfig(contextConfig); + } + + auto wsService = std::make_shared("TEST"); + auto wsInitializer = std::make_shared(); + + wsInitializer->setConfig(config); + wsInitializer->initWsService(wsService); + + auto server = wsService->httpServer(); + server->setHttpReqHandler( + [](const std::string& _req, std::function _callback) { + BCOS_LOG(INFO) << LOG_BADGE(" [Main] ===>>>> ") << LOG_KV("request", _req); + _callback(_req); + }); + wsService->start(); + + int i = 0; + while (true) + { + BCOS_LOG(INFO) << LOG_BADGE(" [Main] ===>>>> "); + std::this_thread::sleep_for(std::chrono::milliseconds(5000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-boostssl/test/exec/msg_codec_perf.cpp b/bcos-boostssl/test/exec/msg_codec_perf.cpp new file mode 100644 index 0000000..8def658 --- /dev/null +++ b/bcos-boostssl/test/exec/msg_codec_perf.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file msg_codec_perf.cpp + * @author: octopus + * @date 2022-03-24 + */ + +#include "bcos-boostssl/websocket/WsInitializer.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::http; +using namespace bcos::boostssl::context; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Usage: msg_codec_test payload_length\n" + << "Example:\n" + << " ./msg_codec_test 1024\n"; + std::exit(0); +} + + +int main(int argc, char** argv) +{ + if (argc < 2) + { + usage(); + } + + uint16_t payloadLength = atoi(argv[1]); + + BCOS_LOG(INFO) << LOG_DESC("Msg Codec Test") << LOG_KV("payload length", payloadLength); + + std::string str(payloadLength, 'a'); + auto messageFactory = std::make_shared(); + // construct message + auto msg = std::dynamic_pointer_cast(messageFactory->buildMessage()); + + msg->setPayload(std::make_shared(str.begin(), str.end())); + + auto startPoint = std::chrono::high_resolution_clock::now(); + auto lastReport = std::chrono::high_resolution_clock::now(); + int64_t lastEncodeC = 0; + auto buffer = std::make_shared(); + while (true) + { + msg->encode(*buffer); + lastEncodeC++; + + auto now = std::chrono::high_resolution_clock::now(); + auto lastReportMS = + std::chrono::duration_cast(now - lastReport).count(); + auto totalReportMS = + std::chrono::duration_cast(now - startPoint).count(); + + if (lastReportMS >= 1000) + { + BCOS_LOG(INFO) << LOG_BADGE(" [Main] ===>>>> ") << LOG_KV("interval(ms)", lastReportMS) + << LOG_KV("payload", payloadLength) + << LOG_KV("encodeCount", lastEncodeC); + lastEncodeC = 0; + lastReport = std::chrono::high_resolution_clock::now(); + } + + if (totalReportMS >= 10000) + { + break; + } + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-boostssl/test/unittests/websocket/WsConfigTest.cpp b/bcos-boostssl/test/unittests/websocket/WsConfigTest.cpp new file mode 100644 index 0000000..8476ff5 --- /dev/null +++ b/bcos-boostssl/test/unittests/websocket/WsConfigTest.cpp @@ -0,0 +1,91 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for WsConfig + * @file WsConfigTest.cpp + * @author: octopus + * @date 2021-10-04 + */ + +#define BOOST_TEST_MAIN + +#include +#include + +#include +#include +#include + +using namespace bcos; + +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +BOOST_AUTO_TEST_SUITE(WsToolsTest) + +BOOST_AUTO_TEST_CASE(test_WsConfigTest) +{ + { + auto config = std::make_shared(); + config->setModel(WsModel::Mixed); + BOOST_CHECK_EQUAL(config->listenIP(), std::string()); + BOOST_CHECK_EQUAL(config->listenPort(), 0); + BOOST_CHECK_EQUAL(config->asClient(), true); + BOOST_CHECK_EQUAL(config->asServer(), true); + + auto peers = std::make_shared(); + config->setConnectPeers(peers); + BOOST_CHECK_EQUAL(config->connectPeers()->size(), 0); + } + + { + auto config = std::make_shared(); + auto model = WsModel::Server; + auto boostsslConfig = std::string("boostssl.ini"); + auto listenIP = std::string("127.0.0.1"); + auto listenPort = 12345; + auto threadPoolSize = 123; + + config->setModel(model); + config->setListenIP(listenIP); + config->setListenPort(listenPort); + config->setThreadPoolSize(threadPoolSize); + + BOOST_CHECK_EQUAL(config->listenIP(), listenIP); + BOOST_CHECK_EQUAL(config->listenPort(), listenPort); + BOOST_CHECK_EQUAL(config->asClient(), false); + BOOST_CHECK_EQUAL(config->asServer(), true); + + auto peers = std::make_shared(); + config->setConnectPeers(peers); + BOOST_CHECK_EQUAL(config->connectPeers()->size(), 0); + } +} + +BOOST_AUTO_TEST_CASE(test_WsToolsTest) +{ + BOOST_CHECK_EQUAL(WsTools::validIP("0.0.0.0"), true); + BOOST_CHECK_EQUAL(WsTools::validIP("123"), false); + BOOST_CHECK_EQUAL(WsTools::validIP("127.0.0.1"), true); + BOOST_CHECK_EQUAL(WsTools::validIP("2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b"), true); + BOOST_CHECK_EQUAL(WsTools::validIP("0:0:0:0:0:0:0:1"), true); + BOOST_CHECK_EQUAL(WsTools::validIP("::1"), true); + + BOOST_CHECK_EQUAL(WsTools::validPort(1111), true); + BOOST_CHECK_EQUAL(WsTools::validPort(10), false); + BOOST_CHECK_EQUAL(WsTools::validPort(65535), true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-boostssl/test/unittests/websocket/WsConnectorTest.cpp b/bcos-boostssl/test/unittests/websocket/WsConnectorTest.cpp new file mode 100644 index 0000000..8ad746b --- /dev/null +++ b/bcos-boostssl/test/unittests/websocket/WsConnectorTest.cpp @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for WsConnector + * @file WsConnectorTest.cpp + * @author: octopus + * @date 2021-10-04 + */ + +#include + +#include +#include +#include + +using namespace bcos; + +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +BOOST_AUTO_TEST_SUITE(WsConnectorTest) + +BOOST_AUTO_TEST_CASE(test_WsConnectorTest) +{ + auto connector = std::make_shared(nullptr); + { + std::string host = "0.0.0.0"; + uint16_t port = 1111; + + std::string endpoint = host + ":" + std::to_string(port); + auto r = connector->insertPendingConns(endpoint); + BOOST_CHECK(r); + r = connector->insertPendingConns(endpoint); + BOOST_CHECK(!r); + r = connector->erasePendingConns(endpoint); + BOOST_CHECK(r); + r = connector->insertPendingConns(endpoint); + BOOST_CHECK(r); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-boostssl/test/unittests/websocket/WsMessageTest.cpp b/bcos-boostssl/test/unittests/websocket/WsMessageTest.cpp new file mode 100644 index 0000000..bfe434d --- /dev/null +++ b/bcos-boostssl/test/unittests/websocket/WsMessageTest.cpp @@ -0,0 +1,127 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for WsMessage + * @file WsMessageTest.cpp + * @author: octopus + * @date 2021-07-12 + */ + +#include + +#include + +using namespace bcos; + +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; + +BOOST_AUTO_TEST_SUITE(WsMessageTest) + +BOOST_AUTO_TEST_CASE(test_WsMessage) +{ + auto factory = std::make_shared(); + auto msg = factory->buildMessage(); + auto buffer = std::make_shared(); + auto r = msg->encode(*buffer); + auto seq = msg->seq(); + + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(buffer->size(), WsMessage::MESSAGE_MIN_LENGTH); + + { + auto decodeMsg = factory->buildMessage(); + auto size = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(size > 0); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), 0); + auto decodeSeq = msg->seq(); + BOOST_CHECK_EQUAL(seq, decodeSeq); + } +} + + +BOOST_AUTO_TEST_CASE(test_buildMessage) +{ + { + int16_t status = 111; + uint16_t type = 222; + std::string data = "HelloWorld."; + auto factory = std::make_shared(); + auto msg = factory->buildMessage(); + auto wsMessage = std::dynamic_pointer_cast(msg); + wsMessage->setStatus(status); + wsMessage->setPacketType(type); + wsMessage->setPayload(std::make_shared(data.begin(), data.end())); + + auto buffer = std::make_shared(); + auto r = msg->encode(*buffer); + auto seq = msg->seq(); + + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(buffer->size(), WsMessage::MESSAGE_MIN_LENGTH + data.length()); + + auto decodeMsg = factory->buildMessage(); + auto size = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(size > 0); + auto decodedWsMessge = std::dynamic_pointer_cast(decodeMsg); + BOOST_CHECK_EQUAL(decodedWsMessge->status(), status); + BOOST_CHECK_EQUAL(decodeMsg->packetType(), type); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), data.size()); + auto decodeSeq = msg->seq(); + BOOST_CHECK_EQUAL(seq, decodeSeq); + BOOST_CHECK_EQUAL( + data, std::string(decodeMsg->payload()->begin(), decodeMsg->payload()->end())); + } + + { + int16_t status = 222; + uint16_t type = 111; + std::string data = "HelloWorld."; + auto factory = std::make_shared(); + auto msg = factory->buildMessage(type, std::make_shared(data.begin(), data.end())); + auto wsMessage = std::dynamic_pointer_cast(msg); + wsMessage->setStatus(status); + wsMessage->setPacketType(type); + + auto buffer = std::make_shared(); + auto r = msg->encode(*buffer); + auto seq = msg->seq(); + + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(buffer->size(), WsMessage::MESSAGE_MIN_LENGTH + data.length()); + + auto decodeMsg = factory->buildMessage(); + auto size = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(size > 0); + auto decodedWsMessge = std::dynamic_pointer_cast(decodeMsg); + BOOST_CHECK_EQUAL(decodedWsMessge->status(), status); + BOOST_CHECK_EQUAL(decodeMsg->packetType(), type); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), data.size()); + auto decodeSeq = msg->seq(); + BOOST_CHECK_EQUAL(seq, decodeSeq); + BOOST_CHECK_EQUAL( + data, std::string(decodeMsg->payload()->begin(), decodeMsg->payload()->end())); + } + auto factory = std::make_shared(); + auto msg = factory->buildMessage(); + auto wsMessage = std::dynamic_pointer_cast(msg); + std::string invalidMessage = + "GET / HTTP/1.1\r\nHost: 127.0.0.1:20200\r\nUpgrade: websocket\r\nConnection: " + "upgrade\r\nSec-WebSocket-Key: lkBb9dFFu4tuMNJyXAWIfQ==\r\nSec-WebSocket-Version: " + "13\r\n\r\n"; + auto invalidMsgBytes = bcos::bytes(invalidMessage.begin(), invalidMessage.end()); + BOOST_CHECK_THROW(wsMessage->decode(ref(invalidMsgBytes)), std::out_of_range); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-codec/CMakeLists.txt b/bcos-codec/CMakeLists.txt new file mode 100644 index 0000000..776acf4 --- /dev/null +++ b/bcos-codec/CMakeLists.txt @@ -0,0 +1,53 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-codec +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.12) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") +project(bcos-codec VERSION ${VERSION}) + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +aux_source_directory(bcos-codec/abi SRC_LIST) +aux_source_directory(bcos-codec/scale SRC_LIST) + +find_package(Microsoft.GSL CONFIG REQUIRED) + +add_library(${CODEC_TARGET} ${SRC_LIST} ${HEADERS}) +target_include_directories(${CODEC_TARGET} PUBLIC + $ + $ + $ +) +target_link_libraries(${CODEC_TARGET} PUBLIC bcos-crypto Microsoft.GSL::GSL) + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE True) + add_subdirectory(test) +endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("cov" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () + +include(GNUInstallDirs) +install(TARGETS ${CODEC_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-codec" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-codec/bcos-codec/abi/ContractABICodec.cpp b/bcos-codec/bcos-codec/abi/ContractABICodec.cpp new file mode 100644 index 0000000..fe5b7df --- /dev/null +++ b/bcos-codec/bcos-codec/abi/ContractABICodec.cpp @@ -0,0 +1,194 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI serialize and deserialize tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#include "ContractABICodec.h" + +using namespace std; +using namespace bcos; +using namespace bcos::codec::abi; + +const int ContractABICodec::MAX_BYTE_LENGTH; + +bool ContractABICodec::abiOutByFuncSelector( + bytesConstRef _data, const std::vector& _allTypes, std::vector& _out) +{ + data = _data; + offset = 0; + + for (const std::string& type : _allTypes) + { + if ("int" == type || "int256" == type) + { + s256 s; + deserialize(s, offset); + _out.push_back(toString(s)); + } + else if ("uint" == type || "uint256" == type) + { + u256 u; + deserialize(u, offset); + _out.push_back(toString(u)); + } + else if ("address" == type) + { + Address addr; + deserialize(addr, offset); + _out.push_back(addr.hex()); + } + else if ("string" == type) + { + u256 stringOffset; + deserialize(stringOffset, offset); + + std::string str; + deserialize(str, static_cast(stringOffset)); + _out.push_back(str); + } + else + { // unsupport type + return false; + } + + offset += MAX_BYTE_LENGTH; + } + + return true; +} + +// unsigned integer type uint256. +bytes ContractABICodec::serialise(const u256& _in) +{ + return h256(_in).asBytes(); +} + +// two’s complement signed integer type int256. +bytes ContractABICodec::serialise(const s256& _in) +{ + return h256(_in.convert_to()).asBytes(); +} + +// equivalent to uint8 restricted to the values 0 and 1. For computing the function selector, +// bool is used +bytes ContractABICodec::serialise(const bool& _in) +{ + return h256(u256(_in ? 1 : 0)).asBytes(); +} + +// equivalent to uint160, except for the assumed interpretation and language typing. For +// computing the function selector, address is used. +// bool is used. +bytes ContractABICodec::serialise(const Address& _in) +{ + return bytes(12, 0) + _in.asBytes(); +} + +// binary type of 32 bytes +bytes ContractABICodec::serialise(const string32& _in) +{ + bytes ret(32, 0); + bytesConstRef((byte const*)_in.data(), 32).populate(bytesRef(&ret)); + return ret; +} + +bytes ContractABICodec::serialise(const bytes& _in) +{ + bytes ret; + ret = h256(u256(_in.size())).asBytes(); + ret.resize(ret.size() + (_in.size() + 31) / MAX_BYTE_LENGTH * MAX_BYTE_LENGTH); + bytesConstRef(&_in).populate(bytesRef(&ret).getCroppedData(32)); + return ret; +} + +// dynamic sized unicode string assumed to be UTF-8 encoded. +bytes ContractABICodec::serialise(const std::string& _in) +{ + bytes ret; + ret = h256(u256(_in.size())).asBytes(); + ret.resize(ret.size() + (_in.size() + 31) / MAX_BYTE_LENGTH * MAX_BYTE_LENGTH); + bytesConstRef(&_in).populate(bytesRef(&ret).getCroppedData(32)); + return ret; +} + +void ContractABICodec::deserialize(s256& out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 u = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + if (u > u256("0x8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) + { + auto r = + (bcos::u256("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") - u) + + 1; + out = s256("-" + r.str()); + } + else + { + out = u.convert_to(); + } +} + +void ContractABICodec::deserialize(u256& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + _out = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); +} + +void ContractABICodec::deserialize(bool& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 ret = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + _out = ret > 0 ? true : false; +} + +void ContractABICodec::deserialize(Address& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + data.getCroppedData(_offset + MAX_BYTE_LENGTH - 20, 20).populate(_out.ref()); +} + +void ContractABICodec::deserialize(string32& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + data.getCroppedData(_offset, MAX_BYTE_LENGTH) + .populate(bytesRef((byte*)_out.data(), MAX_BYTE_LENGTH)); +} + +void ContractABICodec::deserialize(std::string& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 len = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + validOffset(_offset + MAX_BYTE_LENGTH + (std::size_t)len - 1); + auto result = data.getCroppedData(_offset + MAX_BYTE_LENGTH, static_cast(len)); + _out.assign((const char*)result.data(), result.size()); +} + +void ContractABICodec::deserialize(bytes& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 len = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + validOffset(_offset + MAX_BYTE_LENGTH + (std::size_t)len - 1); + _out = data.getCroppedData(_offset + MAX_BYTE_LENGTH, static_cast(len)).toBytes(); +} \ No newline at end of file diff --git a/bcos-codec/bcos-codec/abi/ContractABICodec.h b/bcos-codec/bcos-codec/abi/ContractABICodec.h new file mode 100644 index 0000000..ace9099 --- /dev/null +++ b/bcos-codec/bcos-codec/abi/ContractABICodec.h @@ -0,0 +1,744 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI serialize and deserialize tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace abi +{ +// check if T type of uint256, int256, bool, string, bytes32 +template +struct ABIElementType : std::false_type +{ +}; + +// string +template <> +struct ABIElementType : std::true_type +{ +}; + +template <> +struct ABIElementType : std::false_type +{ +}; + +template <> +struct ABIElementType : std::false_type +{ +}; + +// uint256 +template <> +struct ABIElementType : std::false_type +{ +}; + +// int256 +template <> +struct ABIElementType : std::false_type +{ +}; + +// bool +template <> +struct ABIElementType : std::false_type +{ +}; + +// byte32 +template <> +struct ABIElementType : std::false_type +{ +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value || ABIElementType::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = + ABIElementType::value || ABIElementType>::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value; +}; + +// check if T type of string +template +struct ABIStringType : std::false_type +{ +}; + +template <> +struct ABIStringType : std::true_type +{ +}; + +// check if type of static array +template +struct ABIStaticArray : std::false_type +{ +}; + +// stringN type => bytesN +template +struct ABIStaticArray> : std::false_type +{ +}; + +// a fixed-length array of N elements of type T. +template +struct ABIStaticArray> : std::true_type +{ +}; + +// check if type of dynamic array +template +struct ABIDynamicArray : std::false_type +{ +}; + +// a fixed-length array of N elements of type T. +template +struct ABIDynamicArray> : std::true_type +{ +}; + +template +struct is_tuple : std::false_type +{ +}; + +template +struct is_tuple> : std::true_type +{ +}; + +template +struct ABITuple : std::false_type +{ +}; + +template +struct ABITuple> +{ + static bool constexpr value = ABIElementType::value || ABITuple>::value; +}; + +template +struct ABITuple> +{ + static bool constexpr value = ABIElementType::value; +}; + +// Definition: The following types are called “dynamic”: +// bytes +// string +// T[] for any T +// T[k] for any dynamic T and any k >= 0 +// (T1,...,Tk) if Ti is dynamic for some 1 <= i <= k +template +struct ABIDynamicType : std::false_type +{ +}; + +template +struct remove_dimension +{ + typedef T type; +}; + +template +struct remove_dimension> +{ + typedef typename remove_dimension::type type; +}; + +template +struct ABIDynamicType::type>::value || + ABIDynamicArray::type>::value || + ABITuple::type>::value>::type> + : std::true_type +{ +}; + +// fixed length of type, default 1 except static array type +template +struct Length +{ + enum + { + value = 1 + }; +}; + +// length of static array type +template +struct Length::value && !ABIDynamicType::value>::type> +{ + enum + { + value = std::tuple_size::value * Length::type>::value + }; +}; + +// length of static tuple type +template +struct Length::value && !ABIDynamicType::value>::type> +{ + enum + { + value = std::tuple_size::value + }; +}; + +// static offset for types +template +struct Offset; + +template +struct Offset +{ + enum + { + value = (size_t)Offset::value + (size_t)Offset::value + }; +}; + +template <> +struct Offset<> +{ + enum + { + value = 0 + }; +}; + +template +struct Offset +{ + enum + { + value = Length::value + }; +}; + +/** + * @brief Class for Solidity ABI + * @by octopuswang + * + * Class for serialise and deserialize c++ object in Solidity ABI format. + * @ref https://solidity.readthedocs.io/en/develop/abi-spec.html + */ +class ContractABICodec +{ +public: + explicit ContractABICodec(bcos::crypto::Hash::Ptr _hashImpl) : m_hashImpl(_hashImpl) {} + + template ::value>> + bytes serialise(const T& _t) + { // unsupport type + (void)_t; + static_assert(ABIElementType::value, "ABI not support type."); + return bytes{}; + } + + // template , + // std::enable_if_t::value> = true> + // bytes serialise(const T& _in) + // { + // return serialise(s256(_in)); + // } + + /// FIXME: use template + bytes serialise(const uint8_t& _in) { return serialise(u256(_in)); } + bytes serialise(const uint16_t& _in) { return serialise(u256(_in)); } + bytes serialise(const uint32_t& _in) { return serialise(u256(_in)); } + bytes serialise(const uint64_t& _in) { return serialise(u256(_in)); } + + /// FIXME: use template + bytes serialise(const int8_t& _in) { return serialise(s256(_in)); } + bytes serialise(const int16_t& _in) { return serialise(s256(_in)); } + bytes serialise(const int32_t& _in) { return serialise(s256(_in)); } + bytes serialise(const int64_t& _in) { return serialise(s256(_in)); } + + + // unsigned integer type uint256. + bytes serialise(const u256& _in); + + // two’s complement signed integer type int256. + bytes serialise(const s256& _in); + + // equivalent to uint8 restricted to the values 0 and 1. For computing the function selector, + // bool is used + bytes serialise(const bool& _in); + + // equivalent to uint160, except for the assumed interpretation and language typing. For + // computing the function selector, address is used. + // bool is used. + bytes serialise(const Address& _in); + + // binary type of 32 bytes + bytes serialise(const string32& _in); + + bytes serialise(const bytes& _in); + + // dynamic sized unicode string assumed to be UTF-8 encoded. + bytes serialise(const std::string& _in); + + // static array + template + bytes serialise(const std::array& _in); + // dynamic array + template + bytes serialise(const std::vector& _in); + + // dynamic tuple + template + bytes serialise(const std::tuple& _in); + + template >> + void deserialize(const T& _t, std::size_t _offset) + { // unsupport type + (void)_t; + (void)_offset; + static_assert(ABIElementType::value, "ABI not support type."); + } + + void deserialize(s256& out, std::size_t _offset); + + void deserialize(u256& _out, std::size_t _offset); + + void deserialize(bool& _out, std::size_t _offset); + + /// FIXME: use template + void deserialize(int8_t& _out, std::size_t _offset) + { + s256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(int16_t& _out, std::size_t _offset) + { + s256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(int32_t& _out, std::size_t _offset) + { + s256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(int64_t& _out, std::size_t _offset) + { + s256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + + /// FIXME: use template + void deserialize(uint8_t& _out, std::size_t _offset) + { + u256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(uint16_t& _out, std::size_t _offset) + { + u256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(uint32_t& _out, std::size_t _offset) + { + u256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + void deserialize(uint64_t& _out, std::size_t _offset) + { + u256 out; + deserialize(out, _offset); + _out = out.convert_to(); + } + + void deserialize(Address& _out, std::size_t _offset); + + void deserialize(string32& _out, std::size_t _offset); + + void deserialize(std::string& _out, std::size_t _offset); + void deserialize(bytes& _out, std::size_t _offset); + + // static array + template + void deserialize(std::array& _out, std::size_t _offset); + // dynamic array + template + void deserialize(std::vector& _out, std::size_t _offset); + + template + void deserialize(std::tuple& out, std::size_t _offset); + +private: + bcos::crypto::Hash::Ptr m_hashImpl; + static const int MAX_BYTE_LENGTH = 32; + // encode or decode offset + std::size_t offset{0}; + // encode temp bytes + bytes fixed; + bytes dynamic; + + // decode data + bytesConstRef data; + +private: + size_t getOffset() { return offset; } + // check if offset valid and std::length_error will be throw + void validOffset(std::size_t _offset) + { + if (_offset >= data.size()) + { + std::stringstream ss; + ss << " deserialize failed, invalid offset , offset is " << _offset << " , length is " + << data.size() << " , data is " << *toHexString(data); + + throw std::length_error(ss.str().c_str()); + } + } + + template + std::string toString(const T& _t) + { + std::stringstream ss; + ss << _t; + return ss.str(); + } + + inline void abiInAux() { return; } + + template + void abiInAux(T const& _t, U const&... _u) + { + bytes out = serialise(_t); + + if (ABIDynamicType::value) + { // dynamic type + dynamic += out; + fixed += serialise((u256)offset); + offset += out.size(); + } + else + { // static type + fixed += out; + } + + abiInAux(_u...); + } + + void abiOutAux() { return; } + + template + void abiOutAux(T& _t, U&... _u) + { + std::size_t _offset = offset; + // dynamic type, offset position + if (ABIDynamicType::value) + { + u256 dynamicOffset; + deserialize(dynamicOffset, offset); + _offset = static_cast(dynamicOffset); + } + + deserialize(_t, _offset); + // update offset + offset = offset + Offset::value * MAX_BYTE_LENGTH; + // decode next element + abiOutAux(_u...); + } + + template + void traverseTuple(std::tuple& tuple, F func, std::index_sequence) + { + return (void(func(std::get(tuple))), ...); + } + + template + void traverseTuple(std::tuple& tuple, F func) + { + traverseTuple(tuple, func, std::make_index_sequence()); + } + +public: + template + bool abiOut(bytesConstRef _data, T&... _t) + { + data = _data; + offset = 0; + try + { + abiOutAux(_t...); + return true; + } + catch (...) + { // error occur + return false; + } + } + + template + bool abiOutHex(const std::string& _data, T&... _t) + { + auto dataFromHex = *fromHexString(_data); + return abiOut(bytesConstRef(&dataFromHex), _t...); + } + + bool abiOutByFuncSelector(bytesConstRef _data, const std::vector& _allTypes, + std::vector& _out); + + template + bytes abiIn(const std::string& _sig, T const&... _t) + { + offset = Offset::value * MAX_BYTE_LENGTH; + fixed.clear(); + dynamic.clear(); + + abiInAux(_t...); + + return _sig.empty() ? + fixed + dynamic : + m_hashImpl->hash(_sig).ref().getCroppedData(0, 4).toBytes() + fixed + dynamic; + } + + template + std::string abiInHex(const std::string& _sig, T const&... _t) + { + return *toHexString(abiIn(_sig, _t...)); + } +}; + +// a fixed-length array of elements of the given type. +template +bytes ContractABICodec::serialise(const std::array& _in) +{ + bytes offset_bytes; + bytes content; + + auto length = N * MAX_BYTE_LENGTH; + + for (const auto& e : _in) + { + bytes out = serialise(e); + content += out; + if (ABIDynamicType::value) + { // dynamic + offset_bytes += serialise(static_cast(length)); + length += out.size(); + } + } + + return offset_bytes + content; +} + +// a variable-length array of elements of the given type. +template +bytes ContractABICodec::serialise(const std::vector& _in) +{ + bytes offset_bytes; + bytes content; + + auto length = _in.size() * MAX_BYTE_LENGTH; + + offset_bytes += serialise(static_cast(_in.size())); + for (const auto& t : _in) + { + bytes out = serialise(t); + content += out; + if (ABIDynamicType::value) + { // dynamic + offset_bytes += serialise(static_cast(length)); + length += out.size(); + } + } + + return offset_bytes + content; +} + +template +bytes ContractABICodec::serialise(const std::tuple& _in) +{ + bytes offsetBytes; + bytes dynamicContent; + auto tupleSize = std::tuple_size::type>::value; + auto length = tupleSize * MAX_BYTE_LENGTH; + + traverseTuple(const_cast&>(_in), [&](auto& _tupleItem) { + bytes out = serialise(_tupleItem); + + if (ABIDynamicType::type>::type>::value) + { + // dynamic + dynamicContent += out; + offsetBytes += serialise(static_cast(length)); + length += out.size(); + } + else + { + // static + offsetBytes += out; + } + }); + return offsetBytes + dynamicContent; +} + +template +void ContractABICodec::deserialize(std::array& _out, std::size_t _offset) +{ + for (std::size_t u = 0; u < N; ++u) + { + auto thisOffset = _offset; + + if (ABIDynamicType< + typename std::remove_const::type>::type>::value) + { // dynamic type + // N element offset + u256 length; + deserialize(length, _offset + u * Offset::value * MAX_BYTE_LENGTH); + thisOffset = thisOffset + static_cast(length); + } + else + { + thisOffset = _offset + u * Offset::value * MAX_BYTE_LENGTH; + } + deserialize(_out[u], thisOffset); + } +} + +template +void ContractABICodec::deserialize(std::vector& _out, std::size_t _offset) +{ + u256 length; + // vector length + deserialize(length, _offset); + _offset += MAX_BYTE_LENGTH; + _out.resize(static_cast(length)); + + for (std::size_t u = 0; u < static_cast(length); ++u) + { + std::size_t thisOffset = _offset; + + if (ABIDynamicType::value) + { // dynamic type + // N element offset + u256 thisEleOffset; + deserialize(thisEleOffset, _offset + u * Offset::value * MAX_BYTE_LENGTH); + thisOffset += static_cast(thisEleOffset); + } + else + { + thisOffset = _offset + u * Offset::value * MAX_BYTE_LENGTH; + } + deserialize(_out[u], thisOffset); + } +} + +template +void ContractABICodec::deserialize(std::tuple& _out, std::size_t _offset) +{ + std::size_t localOffset = _offset; + std::size_t tupleOffset = 0; + traverseTuple(_out, [&](auto& _tupleItem) { + if (ABIDynamicType::type>::type>::value) + { + // dynamic + u256 dynamicOffset; + deserialize(dynamicOffset, _offset + tupleOffset); + localOffset = _offset + static_cast(dynamicOffset); + deserialize(_tupleItem, localOffset); + } + else + { + // static + deserialize(_tupleItem, _offset + tupleOffset); + } + tupleOffset += + Offset::type>::type>::value * + MAX_BYTE_LENGTH; + }); +} +} // namespace abi + +inline string32 toString32(std::string const& _s) +{ + string32 ret; + for (unsigned i = 0; i < 32; ++i) + ret[i] = i < _s.size() ? _s[i] : 0; + return ret; +} + +inline string32 toString32(bcos::h256 const& _hashData) +{ + string32 ret; + for (unsigned i = 0; i < 32; i++) + { + ret[i] = _hashData[i]; + } + return ret; +} + +inline bcos::h256 fromString32(string32 const& _str) +{ + bcos::h256 hashData; + for (unsigned i = 0; i < 32; i++) + { + hashData[i] = _str[i]; + } + return hashData; +} +} // namespace codec +} // namespace bcos diff --git a/bcos-codec/bcos-codec/abi/ContractABIType.cpp b/bcos-codec/bcos-codec/abi/ContractABIType.cpp new file mode 100644 index 0000000..a5ea890 --- /dev/null +++ b/bcos-codec/bcos-codec/abi/ContractABIType.cpp @@ -0,0 +1,280 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI function signature parser tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#include "ContractABIType.h" +#include + +using namespace std; +using namespace bcos; +using namespace bcos::codec; +using namespace bcos::codec::abi; + +// uint: unsigned integer type of M bits, 0 < M <= 256, M % 8 == 0. e.g. uint32, uint8, +// uint256. +static const std::set setUint{"uint", "uint8", "uint16", "uint24", "uint32", "uint40", + "uint48", "uint56", "uint64", "uint72", "uint80", "uint88", "uint96", "uint104", "uint112", + "uint120", "uint128", "uint136", "uint144", "uint152", "uint160", "uint168", "uint176", + "uint184", "uint192", "uint200", "uint208", "uint216", "uint224", "uint232", "uint240", + "uint248", "uint256"}; + +// int: two’s complement signed integer type of M bits, 0 < M <= 256, M % 8 == 0. +static const std::set setInt{"int", "int8", "int16", "int24", "int32", "int40", + "int48", "int56", "int64", "int72", "int80", "int88", "int96", "int104", "int112", "int120", + "int128", "int136", "int144", "int152", "int160", "int168", "int176", "int184", "int192", + "int200", "int208", "int216", "int224", "int232", "int240", "int248", "int256"}; + +// bytes: binary type of M bytes, 0 < M <= 32. +static const std::set setByteN{"bytes1", "bytes2", "bytes3", "bytes4", "bytes5", + "bytes6", "bytes7", "bytes8", "bytes9", "bytes10", "bytes11", "bytes12", "bytes13", "bytes14", + "bytes15", "bytes16", "bytes17", "bytes18", "bytes19", "bytes20", "bytes21", "bytes22", + "bytes23", "bytes24", "bytes25", "bytes26", "bytes27", "bytes28", "bytes29", "bytes30", + "bytes31", "bytes32"}; + +// bool: equivalent to uint8 restricted to the values 0 and 1. For computing the function +// selector, bool is used. +const std::string strBool = "bool"; +// bytes: dynamic sized byte sequence. +const std::string strBytes = "bytes"; +// bytes: dynamic sized byte sequence. +const std::string strString = "string"; +// address: equivalent to uint160, except for the assumed interpretation and language typing. +// For computing the function selector, address is used. +const std::string strAddr = "address"; + +// Remove the white space characters on both sides +static void trim(std::string& _str) +{ + _str.erase(0, _str.find_first_not_of(" ")); + _str.erase(_str.find_last_not_of(" ") + 1); +} + +ABI_ELEMENTARY_TYPE ABIInType::getEnumType(const std::string& _strType) +{ + auto type = ABI_ELEMENTARY_TYPE::INVALID; + if (_strType == strBool) + { + type = ABI_ELEMENTARY_TYPE::BOOL; + } + else if (_strType == strAddr) + { + type = ABI_ELEMENTARY_TYPE::ADDR; + } + else if (_strType == strString) + { + type = ABI_ELEMENTARY_TYPE::STRING; + } + else if (_strType == strBytes) + { + type = ABI_ELEMENTARY_TYPE::BYTES; + } + else if (setUint.find(_strType) != setUint.end()) + { + type = ABI_ELEMENTARY_TYPE::UINT; + } + else if (setInt.find(_strType) != setInt.end()) + { + type = ABI_ELEMENTARY_TYPE::INT; + } + else if (setByteN.find(_strType) != setByteN.end()) + { + type = ABI_ELEMENTARY_TYPE::BYTESN; + } + + return type; +} + +void ABIInType::clear() +{ + aet = ABI_ELEMENTARY_TYPE::INVALID; + strEleType.clear(); + strType.clear(); + extents.clear(); +} + +bool ABIInType::reset(const std::string& _s) +{ + clear(); + + std::string strType = _s; + // eg: int[1][2][][3] + // trim blank character + trim(strType); + auto firstLeftBracket = strType.find('['); + // int + std::string strEleType = strType.substr(0, firstLeftBracket); + trim(strEleType); + auto t = getEnumType(strEleType); + // invalid solidity abi string + if (t == ABI_ELEMENTARY_TYPE::INVALID) + { + return false; + } + + // eg : [10][2][3][] + std::vector r; + std::string::size_type leftBracket = firstLeftBracket; + std::string::size_type rigthBracket = 0; + std::string::size_type length = strType.size(); + + while (leftBracket < length) + { + auto leftBracketBak = leftBracket; + leftBracket = strType.find('[', leftBracketBak); + rigthBracket = strType.find(']', leftBracketBak); + + if (leftBracket == std::string::npos || rigthBracket == std::string::npos || + leftBracket >= rigthBracket) + { + // invalid format + return false; + } + + std::string digit = strType.substr(leftBracket + 1, rigthBracket - leftBracket - 1); + trim(digit); + bool ok = + std::all_of(digit.begin(), digit.end(), [](char c) { return c >= '0' && c <= '9'; }); + if (!ok) + { + // invalid format + return false; + } + + if (digit.empty()) + { + r.push_back(0); + } + else + { + std::size_t size = strtoul(digit.c_str(), NULL, 10); + r.push_back(size); + } + + leftBracket = rigthBracket + 1; + } + + this->aet = t; + this->extents = r; + this->strType = strType; + this->strEleType = strEleType; + + return true; +} + +bool ABIInType::dynamic() +{ + // string or bytes + if (aet == ABI_ELEMENTARY_TYPE::STRING || aet == ABI_ELEMENTARY_TYPE::BYTES) + { + return true; + } + + // dynamic array + auto length = rank(); + for (std::size_t i = 0; i < length; ++i) + { + if (extent(i + 1) == 0) + { + return true; + } + } + + return false; +} + +// +bool ABIInType::removeExtent() +{ + auto length = rank(); + if (length > 0) + { + extents.resize(length - 1); + return true; + } + + return false; +} + +std::vector ABIFunc::getParamsType() const +{ + std::vector r; + for (auto it = allParamsType.begin(); it != allParamsType.end(); ++it) + { + r.push_back(it->getType()); + } + + return r; +} + +// parser contract abi function signature, eg: transfer(string,string,uint256) +bool ABIFunc::parser(const std::string& _sig) +{ + auto i0 = _sig.find("("); + auto i1 = _sig.find(")"); + // transfer(string,string,uint256) + if ((i0 == std::string::npos) || (i1 == std::string::npos) || (i1 <= i0)) + { + return false; + } + + // function name , eg: transfer + std::string strFuncName = _sig.substr(0, i0); + trim(strFuncName); + // parameters "string,string,uint256" + std::string strTypes = _sig.substr(i0 + 1, i1 - i0 - 1); + + std::string sig = strFuncName + "("; + + std::vector types; + boost::split(types, strTypes, boost::is_any_of(",")); + ABIInType at; + for (std::string& type : types) + { + trim(type); + if (!type.empty()) + { + sig += type; + sig += ","; + auto ok = at.reset(type); + if (!ok) + { + // invalid format + return false; + } + allParamsType.push_back(at); + continue; + } + } + + if (',' == sig.back()) + { + sig.back() = ')'; + } + else + { + sig += ")"; + } + + // set function name + this->strFuncName = strFuncName; + // set function sigature + this->strFuncSignature = sig; + + return true; +} diff --git a/bcos-codec/bcos-codec/abi/ContractABIType.h b/bcos-codec/bcos-codec/abi/ContractABIType.h new file mode 100644 index 0000000..e642368 --- /dev/null +++ b/bcos-codec/bcos-codec/abi/ContractABIType.h @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI function signature parser tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace abi +{ +enum class ABI_ELEMENTARY_TYPE +{ // solidity ABI elementary types + INVALID, // invalid + BOOL, // bool + INT, // int8 ~ int256 + UINT, // uint8 ~ uint256 + BYTESN, // bytesN + ADDR, // address + BYTES, // bytes + STRING, // string + FIXED, // fixed, unsupport + UNFIXED // unfixed, unsupport +}; + +class ABIInType +{ +public: + ABIInType() = default; + + bool reset(const std::string& _str); + void clear(); + +public: + // the number of dimensions of T or zero + std::size_t rank() { return extents.size(); } + // obtains the size of an array type along a specified dimension + std::size_t extent(std::size_t index) { return index > rank() ? 0 : extents[index - 1]; } + bool removeExtent(); + bool dynamic(); + bool valid() { return aet != ABI_ELEMENTARY_TYPE::INVALID; } + std::string getType() const { return strType; } + std::string getEleType() const { return strEleType; } + + // get abi elementary type by string + ABI_ELEMENTARY_TYPE getEnumType(const std::string& _strType); + +private: + ABI_ELEMENTARY_TYPE aet{ABI_ELEMENTARY_TYPE::INVALID}; + std::string strEleType; + std::string strType; + std::vector extents; +}; + +using ABIOutType = ABIInType; + +class ABIFunc +{ +private: + std::string strFuncName; + std::string strFuncSignature; + std::vector allParamsType; + +public: + // parser contract abi function signature, eg: transfer(string,string,uint256) + bool parser(const std::string& _sig); + +public: + std::vector getParamsType() const; + inline std::string getSignature() const { return strFuncSignature; } + inline std::string getFuncName() const { return strFuncName; } +}; + +} // namespace abi +} // namespace codec +} // namespace bcos diff --git a/bcos-codec/bcos-codec/scale/Common.h b/bcos-codec/bcos-codec/scale/Common.h new file mode 100644 index 0000000..e71a0d0 --- /dev/null +++ b/bcos-codec/bcos-codec/scale/Common.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief common functions for scale codec + * @file Common.h + */ +#pragma once +#include "Exceptions.h" +#include +namespace bcos +{ +namespace codec +{ +namespace scale +{ +// represents compact integer value +using CompactInteger = boost::multiprecision::cpp_int; + +// OptionalBool is internal extended bool type +enum class OptionalBool : uint8_t +{ + NoneValue = 0u, + TrueValue = 1u, + FalseValue = 2u +}; + +/// categories of compact encoding +struct EncodingCategoryLimits +{ + // min integer encoded by 2 bytes + constexpr static size_t kMinUint16 = (1ul << 6u); + // min integer encoded by 4 bytes + constexpr static size_t kMinUint32 = (1ul << 14u); + // min integer encoded as multibyte + constexpr static size_t kMinBigInteger = (1ul << 30u); +}; +// calculate number of bytes required +inline size_t countBytes(CompactInteger v) +{ + size_t counter = 0; + do + { + ++counter; + } while ((v >>= 8) != 0); + return counter; +} +// Returns the compact encoded length for the given value. +template , + typename = std::enable_if_t::value>> +uint32_t compactLen(T val) +{ + if (val < EncodingCategoryLimits::kMinUint16) + return 1; + if (val < EncodingCategoryLimits::kMinUint32) + return 2; + if (val < EncodingCategoryLimits::kMinBigInteger) + return 4; + return countBytes(val); +} +} // namespace scale +} // namespace codec +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/bcos-codec/scale/Exceptions.h b/bcos-codec/bcos-codec/scale/Exceptions.h new file mode 100644 index 0000000..abe6c4c --- /dev/null +++ b/bcos-codec/bcos-codec/scale/Exceptions.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Exceptions for scale-codec + * @file Exceptions.h + */ +#pragma once +#include +namespace bcos +{ +namespace codec +{ +namespace scale +{ +DERIVE_BCOS_EXCEPTION(ScaleEncodeException); +DERIVE_BCOS_EXCEPTION(ScaleDecodeException); +} // namespace scale +} // namespace codec +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/bcos-codec/scale/FixedWidthIntegerCodec.h b/bcos-codec/bcos-codec/scale/FixedWidthIntegerCodec.h new file mode 100644 index 0000000..82789a5 --- /dev/null +++ b/bcos-codec/bcos-codec/scale/FixedWidthIntegerCodec.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief codec for the integer with fixed length + * @file FixedWidthIntegerCodec.h + */ +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include +namespace bcos +{ +namespace codec +{ +namespace scale +{ +/** + * encodeInteger encodes any integer type to little-endian representation + * @tparam T integer type + * @tparam S output stream type + * @param value integer value + * @return byte array representation of value + */ +// Note: rust scale use u128 encoded as FixedWidthInteger(We don't support u128 now) +template , + typename = std::enable_if_t::value>> +void encodeInteger(T value, S& out) +{ // no need to take integers by && + constexpr size_t size = sizeof(I); + constexpr size_t bits = size * 8; + boost::endian::endian_buffer buf{}; + buf = value; // cannot initialize, only assign + for (size_t i = 0; i < size; ++i) + { + out << buf.data()[i]; + } +} + +/** + * @brief decodeInteger function decodes integer from stream + * @tparam T integer type + * @param stream source stream + * @return decoded value or error + */ +template , + typename = std::enable_if_t>> +I decodeInteger(S& stream) +{ + constexpr size_t size = sizeof(I); + static_assert(size <= 8); + // sign bit = 2^(num_bits - 1) + static constexpr std::array sign_bit = { + 0x80, // 1 byte + 0x8000, // 2 bytes + 0x800000, // 3 bytes + 0x80000000, // 4 bytes + 0x8000000000, // 5 bytes + 0x800000000000, // 6 bytes + 0x80000000000000, // 7 bytes + 0x8000000000000000 // 8 bytes + }; + + static constexpr std::array multiplier = { + 0x1, // 2^0 + 0x100, // 2^8 + 0x10000, // 2^16 + 0x1000000, // 2^24 + 0x100000000, // 2^32 + 0x10000000000, // 2^40 + 0x1000000000000, // 2^48 + 0x100000000000000 // 2^56 + }; + if (!stream.hasMore(size)) + { + BOOST_THROW_EXCEPTION(ScaleDecodeException() + << errinfo_comment("decodeInteger exception for NOT_ENOUGH_DATA")); + } + + // get integer as 4 bytes from little-endian stream + // and represent it as native-endian unsigned int eger + uint64_t v = 0u; + + for (size_t i = 0; i < size; ++i) + { + v += multiplier[i] * static_cast(stream.nextByte()); + } + // now we have uint64 native-endian value + // which can be signed or unsigned under the cover + + // if it is unsigned, we know that is not greater than max value for type T + // so static_cast(v) is safe + + // if it is signed, but positive it is also ok + // we can be sure that it is less than max_value/2 + // to check whether is is negative we check if the sign bit present + // in unsigned form it means that value is more than + // a value 2^(bits_number-1) + bool is_positive_signed = v < sign_bit[size - 1]; + if (std::is_unsigned() || is_positive_signed) + { + return static_cast(v); + } + + // T is signed integer type and the value v is negative + // value is negative signed means ( - x ) + // where x is positive unsigned < sign_bits[size-1] + // find this x, safely cast to signed and negate result + // the bitwise negation operation affects higher bits as well + // but it doesn't spoil the result + // static_cast to smaller size cuts them off + T sv = -static_cast((~v) + 1); + + return sv; +} +} // namespace scale +} // namespace codec +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/bcos-codec/scale/Scale.h b/bcos-codec/bcos-codec/scale/Scale.h new file mode 100644 index 0000000..7b320e3 --- /dev/null +++ b/bcos-codec/bcos-codec/scale/Scale.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief scale codec + * @file Scale.h + */ +#pragma once +#include "Common.h" +#include "ScaleDecoderStream.h" +#include "ScaleEncoderStream.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace scale +{ +/** + * @brief convenience function for encoding primitives data to stream + * @tparam Args primitive types to be encoded + * @param args data to encode + * @return encoded data + */ +template +void encode(std::shared_ptr _encodeData, Args&&... _args) +{ + ScaleEncoderStream s; + (s << ... << std::forward(_args)); + *_encodeData = s.data(); +} + +template +bytes encode(Args&&... _args) +{ + ScaleEncoderStream s; + (s << ... << std::forward(_args)); + return s.data(); +} + +/** + * @brief convenience function for decoding primitives data from stream + * @tparam T primitive type that is decoded from provided span + * @param span of bytes with encoded data + * @return decoded T + */ +template +void decode(T& _decodedObject, gsl::span _span) +{ + ScaleDecoderStream s(_span); + s >> _decodedObject; +} + +template +T decode(gsl::span _span) +{ + T t; + decode(t, _span); + return t; +} +} // namespace scale +} // namespace codec +} // namespace bcos diff --git a/bcos-codec/bcos-codec/scale/ScaleDecoderStream.cpp b/bcos-codec/bcos-codec/scale/ScaleDecoderStream.cpp new file mode 100644 index 0000000..28bcb13 --- /dev/null +++ b/bcos-codec/bcos-codec/scale/ScaleDecoderStream.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief scale decoder + * @file ScaleDecoderStream.cpp + */ +#include "ScaleDecoderStream.h" +using namespace bcos; +using namespace bcos::codec::scale; + +ScaleDecoderStream::ScaleDecoderStream(gsl::span _span) + : m_span(_span), m_currentIterator(m_span.begin()), m_currentIndex(0) +{} + +boost::optional ScaleDecoderStream::decodeOptionalBool() +{ + auto byte = nextByte(); + switch (byte) + { + case static_cast(OptionalBool::NoneValue): + return boost::none; + break; + case static_cast(OptionalBool::FalseValue): + return false; + case static_cast(OptionalBool::TrueValue): + return true; + default: + BOOST_THROW_EXCEPTION(ScaleDecodeException() << errinfo_comment( + "decodeOptionalBool exception for unexpected value")); + } +} + +CompactInteger decodeCompactInteger(ScaleDecoderStream& stream) +{ + auto first_byte = stream.nextByte(); + const uint8_t flag = (first_byte)&0b00000011u; + size_t number = 0u; + switch (flag) + { + case 0b00u: + { + number = static_cast(first_byte >> 2u); + break; + } + case 0b01u: + { + auto second_byte = stream.nextByte(); + number = (static_cast((first_byte)&0b11111100u) + + static_cast(second_byte) * 256u) >> + 2u; + break; + } + case 0b10u: + { + number = first_byte; + size_t multiplier = 256u; + if (!stream.hasMore(3u)) + { + // not enough data to decode integer + BOOST_THROW_EXCEPTION(ScaleDecodeException() << errinfo_comment( + "decodeOptionalBool exception for not enough data")); + } + for (auto i = 0u; i < 3u; ++i) + { + // we assured that there are 3 more bytes, + // no need to make checks in a loop + number += (stream.nextByte()) * multiplier; + multiplier = multiplier << 8u; + } + number = number >> 2u; + break; + } + case 0b11: + { + auto bytes_count = ((first_byte) >> 2u) + 4u; + if (!stream.hasMore(bytes_count)) + { + // not enough data to decode integer + BOOST_THROW_EXCEPTION(ScaleDecodeException() << errinfo_comment( + "decodeCompactInteger exception for not enough data")); + } + + CompactInteger multiplier{1u}; + CompactInteger value = 0; + // we assured that there are m more bytes, + // no need to make checks in a loop + for (auto i = 0u; i < bytes_count; ++i) + { + value += (stream.nextByte()) * multiplier; + multiplier *= 256u; + } + + return value; // special case + } + default: + BOOST_THROW_EXCEPTION( + ScaleDecodeException() << errinfo_comment( + "decodeCompactInteger exception for not supported flag " + std::to_string(flag))); + } + + return CompactInteger{number}; +} + + +bool ScaleDecoderStream::decodeBool() +{ + auto byte = nextByte(); + switch (byte) + { + case 0u: + return false; + case 1u: + return true; + default: + BOOST_THROW_EXCEPTION( + ScaleDecodeException() << errinfo_comment("decodeBool exception for UNEXPECTED_VALUE")); + } +} + +ScaleDecoderStream& ScaleDecoderStream::operator>>(CompactInteger& v) +{ + v = decodeCompactInteger(*this); + return *this; +} + +ScaleDecoderStream& ScaleDecoderStream::operator>>(std::string& v) +{ + std::vector collection; + *this >> collection; + v.clear(); + v.append(collection.begin(), collection.end()); + return *this; +} + +bool ScaleDecoderStream::hasMore(uint64_t n) const +{ + return static_cast(m_currentIndex + n) <= m_span.size(); +} + +ScaleDecoderStream& ScaleDecoderStream::operator>>(u256& v) +{ + bytes decodedBigEndianData; + byte size = 32; + decodedBigEndianData.resize(size); + decodedBigEndianData.assign(m_currentIterator, m_currentIterator + size); + m_currentIterator += size; + m_currentIndex += size; + v = fromBigEndian(decodedBigEndianData); + return *this; +} \ No newline at end of file diff --git a/bcos-codec/bcos-codec/scale/ScaleDecoderStream.h b/bcos-codec/bcos-codec/scale/ScaleDecoderStream.h new file mode 100644 index 0000000..03c30cd --- /dev/null +++ b/bcos-codec/bcos-codec/scale/ScaleDecoderStream.h @@ -0,0 +1,431 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief scale decoder + * @file ScaleDecoderStream.cpp + */ +#pragma once +#include "Common.h" +#include "FixedWidthIntegerCodec.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace scale +{ +class ScaleDecoderStream +{ +public: + // special tag to differentiate decoding streams from others + static constexpr auto is_decoder_stream = true; + explicit ScaleDecoderStream(gsl::span span); + + /** + * @brief scale-decodes pair of values + * @tparam F first value type + * @tparam S second value type + * @param p pair of values to decode + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::pair& p) + { + static_assert(!std::is_reference_v && !std::is_reference_v); + return *this >> const_cast&>(p.first) // NOLINT + >> const_cast&>(p.second); // NOLINT + } + + /** + * @brief scale-decoding of tuple + * @tparam T enumeration of tuples types + * @param v reference to tuple + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::tuple& v) + { + if constexpr (sizeof...(T) > 0) + { + decodeElementOfTuple<0>(v); + } + return *this; + } + + /** + * @brief scale-decoding of variant + * @tparam T enumeration of various types + * @param v reference to variant + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(boost::variant& v) + { + // first byte means type index + uint8_t type_index = 0u; + *this >> type_index; // decode type index + + // ensure that index is in [0, types_count) + if (type_index >= sizeof...(Ts)) + { + BOOST_THROW_EXCEPTION( + ScaleDecodeException() << errinfo_comment("exception for WRONG_TYPE_INDEX")); + } + + tryDecodeAsOneOfVariant<0>(v, type_index); + return *this; + } + + /** + * @brief scale-decodes shared_ptr value + * @tparam T value type + * @param v value to decode + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::shared_ptr& v) + { + using mutableT = std::remove_const_t; + + static_assert(std::is_default_constructible_v); + + v = std::make_shared(); + return *this >> const_cast(*v); // NOLINT + } + + /** + * @brief scale-decodes unique_ptr value + * @tparam T value type + * @param v value to decode + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::unique_ptr& v) + { + using mutableT = std::remove_const_t; + + static_assert(std::is_default_constructible_v); + + v = std::make_unique(); + return *this >> const_cast(*v); // NOLINT + } + + /** + * @brief scale-encodes any integral type including bool + * @tparam T integral type + * @param v value of integral type + * @return reference to stream + */ + template , + typename = std::enable_if_t::value>> + ScaleDecoderStream& operator>>(T& v) + { + // check bool + if constexpr (std::is_same::value) + { + v = decodeBool(); + return *this; + } + // check byte + if constexpr (sizeof(T) == 1u) + { + v = nextByte(); + return *this; + } + // decode any other integer + v = decodeInteger(*this); + return *this; + } + + /** + * @brief scale-decodes any optional value + * @tparam T type of optional value + * @param v optional value reference + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(boost::optional& v) + { + using mutableT = std::remove_const_t; + + static_assert(std::is_default_constructible_v); + + // optional bool is special case of optional values + // it is encoded as one byte instead of two + // as described in specification + if constexpr (std::is_same::value) + { + v = decodeOptionalBool(); + return *this; + } + // detect if optional has value + bool has_value = false; + *this >> has_value; + if (!has_value) + { + v.reset(); + return *this; + } + // decode value + v.emplace(); + return *this >> const_cast(*v); // NOLINT + } + + ScaleDecoderStream& operator>>(u256& v); + /** + * @brief scale-decodes compact integer value + * @param v compact integer reference + * @return + */ + ScaleDecoderStream& operator>>(CompactInteger& v); + ScaleDecoderStream& operator>>(s256& v) + { + u256 unsignedValue; + *this >> unsignedValue; + v = u2s(unsignedValue); + return *this; + } + + template + ScaleDecoderStream& operator>>(FixedBytes& fixedData) + { + for (unsigned i = 0; i < N; ++i) + { + *this >> fixedData[i]; + } + return *this; + } + /** + * @brief decodes vector of items + * @tparam T item type + * @param v reference to vector + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::vector& v) + { + using mutableT = std::remove_const_t; + using size_type = typename std::list::size_type; + + static_assert(std::is_default_constructible_v); + + CompactInteger size{0u}; + *this >> size; + + auto item_count = size.convert_to(); + std::vector vec; + try + { + vec.resize(item_count); + } + catch (const std::bad_alloc&) + { + BOOST_THROW_EXCEPTION( + ScaleDecodeException() + << errinfo_comment("exception for TOO_MANY_ITEMS: " + std::to_string(item_count))); + } + if constexpr (sizeof(T) == 1u) + { + vec.assign(m_currentIterator, m_currentIterator + item_count); + m_currentIterator += item_count; + m_currentIndex += item_count; + } + else + { + for (size_type i = 0u; i < item_count; ++i) + { + *this >> vec[i]; + } + } + v = std::move(vec); + return *this; + } + + /** + * @brief decodes map of pairs + * @tparam T item type + * @tparam F item type + * @param m reference to map + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::map& m) + { + using mutableT = std::remove_const_t; + static_assert(std::is_default_constructible_v); + using mutableF = std::remove_const_t; + static_assert(std::is_default_constructible_v); + + using size_type = typename std::map::size_type; + + CompactInteger size{0u}; + *this >> size; + + auto item_count = size.convert_to(); + std::map map; + for (size_type i = 0u; i < item_count; ++i) + { + std::pair p; + *this >> p; + map.emplace(std::move(p)); + } + m = std::move(map); + return *this; + } + + /** + * @brief decodes collection of items + * @tparam T item type + * @param v reference to collection + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::list& v) + { + using mutableT = std::remove_const_t; + using size_type = typename std::list::size_type; + + static_assert(std::is_default_constructible_v); + + CompactInteger size{0u}; + *this >> size; + + auto item_count = size.convert_to(); + + std::list lst; + try + { + lst.reserve(item_count); + } + catch (const std::bad_alloc&) + { + BOOST_THROW_EXCEPTION(ScaleDecodeException() << errinfo_comment( + "exception for TOO_MANY_ITEMS" + std::to_string(item_count))); + } + + for (size_type i = 0u; i < item_count; ++i) + { + lst.emplace_back(); + *this >> lst.back(); + } + v = std::move(lst); + return *this; + } + + /** + * @brief decodes array of items + * @tparam T item type + * @tparam size of the array + * @param a reference to the array + * @return reference to stream + */ + template + ScaleDecoderStream& operator>>(std::array& a) + { + using mutableT = std::remove_const_t; + for(auto it = a.begin(); it != a.end(); ++it) + { + *this >> const_cast(*it); // NOLINT + } + return *this; + } + + /** + * @brief decodes string from stream + * @param v value to decode + * @return reference to stream + */ + ScaleDecoderStream& operator>>(std::string& v); + + /** + * @brief hasMore Checks whether n more bytes are available + * @param n Number of bytes to check + * @return True if n more bytes are available and false otherwise + */ + bool hasMore(uint64_t n) const; + + /** + * @brief takes one byte from stream and + * advances current byte iterator by one + * @return current byte + */ + uint8_t nextByte() + { + if (!hasMore(1)) + { + BOOST_THROW_EXCEPTION(ScaleDecodeException() + << errinfo_comment("nextByte exception for NOT_ENOUGH_DATA")); + } + ++m_currentIndex; + return *m_currentIterator++; + } + using SizeType = gsl::span::size_type; + + gsl::span span() const { return m_span; } + SizeType currentIndex() const { return m_currentIndex; } + +private: + bool decodeBool(); + /** + * @brief special case of optional values as described in specification + * @return boost::optional value + */ + boost::optional decodeOptionalBool(); + + template + void decodeElementOfTuple(std::tuple& v) + { + using T = std::remove_const_t>>; + *this >> const_cast(std::get(v)); // NOLINT + if constexpr (sizeof...(Ts) > I + 1) + { + decodeElementOfTuple(v); + } + } + + template + void tryDecodeAsOneOfVariant(boost::variant& v, size_t i) + { + using T = std::remove_const_t>>; + static_assert(std::is_default_constructible_v); + if (I == i) + { + T val; + *this >> val; + v = std::forward(val); + return; + } + if constexpr (sizeof...(Ts) > I + 1) + { + tryDecodeAsOneOfVariant(v, i); + } + } + +private: + gsl::span m_span; + gsl::span::iterator m_currentIterator; + SizeType m_currentIndex; +}; +} // namespace scale +} // namespace codec +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/bcos-codec/scale/ScaleEncoderStream.cpp b/bcos-codec/bcos-codec/scale/ScaleEncoderStream.cpp new file mode 100644 index 0000000..064da74 --- /dev/null +++ b/bcos-codec/bcos-codec/scale/ScaleEncoderStream.cpp @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief scale encoder + * @file ScaleEncoderStream.h + */ +#include "ScaleEncoderStream.h" +#include "Common.h" + +using namespace bcos; +using namespace bcos::codec::scale; + +// must not use these functions outside encodeInteger +inline void encodeFirstCategory(uint8_t value, ScaleEncoderStream& out) +{ + // only values from [0, kMinUint16) can be put here + out << static_cast(value << 2u); +} + +inline void encodeSecondCategory(uint16_t value, ScaleEncoderStream& out) +{ + // only values from [kMinUint16, kMinUint32) can be put here + auto v = value; + v <<= 2u; // v *= 4 + v += 1u; // set 0b01 flag + auto minor_byte = static_cast(v & 0xFFu); + v >>= 8u; + auto major_byte = static_cast(v & 0xFFu); + + out << minor_byte << major_byte; +} + +inline void encodeThirdCategory(uint32_t value, ScaleEncoderStream& out) +{ + // only values from [kMinUint32, kMinBigInteger) can be put here + uint32_t v = (value << 2u) + 2; + encodeInteger(v, out); +} + +/** + * @brief compact-encodes CompactInteger + * @param value source CompactInteger value + */ +void encodeCompactInteger(const CompactInteger& value, ScaleEncoderStream& out) +{ + // cannot encode negative numbers + // there is no description how to encode compact negative numbers + if (value < 0) + { + BOOST_THROW_EXCEPTION(ScaleEncodeException() << errinfo_comment( + "encodeCompactInteger exception for NEGATIVE_COMPACT_INTEGER")); + } + + if (value < EncodingCategoryLimits::kMinUint16) + { + encodeFirstCategory(value.convert_to(), out); + return; + } + + if (value < EncodingCategoryLimits::kMinUint32) + { + encodeSecondCategory(value.convert_to(), out); + return; + } + + if (value < EncodingCategoryLimits::kMinBigInteger) + { + encodeThirdCategory(value.convert_to(), out); + return; + } + + // number of bytes required to represent value + size_t bigIntLength = countBytes(value); + // number of bytes to scale-encode value + // 1 byte is reserved for header + size_t requiredLength = 1 + bigIntLength; + if (bigIntLength > 67) + { + BOOST_THROW_EXCEPTION(ScaleEncodeException() << errinfo_comment( + "encodeCompactInteger exception for COMPACT_INTEGER_TOO_BIG")); + } + + bytes result; + result.reserve(requiredLength); + /* The value stored in 6 major bits of header is used + * to encode number of bytes for storing big integer. + * Value formed by 6 bits varies from 0 to 63 == 2^6 - 1, + * However big integer byte count starts from 4, + * so to store this number we should decrease this value by 4. + * And the range of bytes number for storing big integer + * becomes 4 .. 67. To form resulting header we need to move + * those bits representing bytes count to the left by 2 positions + * by means of multiplying by 4. + * Minor 2 bits store encoding option, in our case it is 0b11 == 3 + * We just add 3 to the result of operations above + */ + uint8_t header = (bigIntLength - 4) * 4 + 3; + result.push_back(header); + CompactInteger v{value}; + for (size_t i = 0; i < bigIntLength; ++i) + { + result.push_back(static_cast(v & 0xFF)); // push back least significant byte + v >>= 8; + } + for (const uint8_t c : result) + { + out << c; + } +} + +ScaleEncoderStream& ScaleEncoderStream::operator<<(const u256& _value) +{ + // convert u256 to big-edian bytes(Note: must be 32bytes) + bytes bigEndianData = toBigEndian(_value); + m_stream.insert(m_stream.end(), bigEndianData.begin(), bigEndianData.end()); + return *this; +} + +bytes ScaleEncoderStream::data() const +{ + bytes buffer(m_stream.size(), 0u); + buffer.assign(m_stream.begin(), m_stream.end()); + return buffer; +} + +ScaleEncoderStream& ScaleEncoderStream::operator<<(const CompactInteger& v) +{ + encodeCompactInteger(v, *this); + return *this; +} + +ScaleEncoderStream& ScaleEncoderStream::encodeOptionalBool(const boost::optional& v) +{ + auto result = OptionalBool::TrueValue; + if (!v.has_value()) + { + result = OptionalBool::NoneValue; + } + else if (!*v) + { + result = OptionalBool::FalseValue; + } + return putByte(static_cast(result)); +} diff --git a/bcos-codec/bcos-codec/scale/ScaleEncoderStream.h b/bcos-codec/bcos-codec/scale/ScaleEncoderStream.h new file mode 100644 index 0000000..1c5615d --- /dev/null +++ b/bcos-codec/bcos-codec/scale/ScaleEncoderStream.h @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief scale encoder + * @file ScaleEncoderStream.cpp + */ +#pragma once +#include "FixedWidthIntegerCodec.h" +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace scale +{ +class ScaleEncoderStream +{ +public: + // special tag to differentiate encoding streams from others + static constexpr auto is_encoder_stream = true; + + // get the encoded data + bytes data() const; + + /** + * @brief scale-encodes pair of values + * @tparam F first value type + * @tparam S second value type + * @param p pair of values to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::pair& p) + { + return *this << p.first << p.second; + } + + /** + * @brief scale-encodes tuple + * @tparam T enumeration of types + * @param v tuple + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::tuple& v) + { + if constexpr (sizeof...(Ts) > 0) + { + encodeElementOfTuple<0>(v); + } + return *this; + } + + /** + * @brief scale-encodes variant value + * @tparam T type list + * @param v value to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const boost::variant& v) + { + tryEncodeAsOneOfVariant<0>(v); + return *this; + } + + /** + * @brief scale-encodes sharead_ptr value + * @tparam T type list + * @param v value to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::shared_ptr& v) + { + if (v == nullptr) + { + BOOST_THROW_EXCEPTION(ScaleEncodeException() + << errinfo_comment("encode exception for DEREF_NULLPOINTER")); + } + return *this << *v; + } + + /** + * @brief scale-encodes unique_ptr value + * @tparam T type list + * @param v value to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::unique_ptr& v) + { + if (v == nullptr) + { + BOOST_THROW_EXCEPTION(ScaleEncodeException() + << errinfo_comment("encode exception for DEREF_NULLPOINTER")); + } + return *this << *v; + } + + template + ScaleEncoderStream& operator<<(const FixedBytes& fixedData) + { + for (auto it = fixedData.begin(); it != fixedData.end(); ++it) + { + *this << *it; + } + return *this; + } + + /** + * @brief scale-encodes collection of same time items + * @tparam T type of item + * @param c collection to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::vector& c) + { + return encodeCollection(c.size(), c.begin(), c.end()); + } + + /** + * @brief scale-encodes collection of same time items + * @tparam T type of item + * @param c collection to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::list& c) + { + return encodeCollection(c.size(), c.begin(), c.end()); + } + + /** + * @brief scale-encodes collection of map + * @tparam T type of item + * @tparam F type of item + * @param c collection to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::map& c) + { + return encodeCollection(c.size(), c.begin(), c.end()); + } + + /** + * @brief scale-encodes optional value + * @tparam T value type + * @param v value to encode + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const boost::optional& v) + { + // optional bool is a special case of optional values + // it should be encoded using one byte instead of two + // as described in specification + if constexpr (std::is_same::value) + { + return encodeOptionalBool(v); + } + if (!v.has_value()) + { + return putByte(0u); + } + return putByte(1u) << *v; + } + + /** + * @brief appends sequence of bytes + * @param v bytes sequence + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const gsl::span& v) + { + return encodeCollection(v.size(), v.begin(), v.end()); + } + + /** + * @brief scale-encodes array of items + * @tparam T item type + * @tparam size of the array + * @param a reference to the array + * @return reference to stream + */ + template + ScaleEncoderStream& operator<<(const std::array& a) + { + for (const auto& e : a) + { + *this << e; + } + return *this; + } + + /** + * @brief scale-encodes std::reference_wrapper of a type + * @tparam T underlying type + * @param v value to encode + * @return reference to stream; + */ + template + ScaleEncoderStream& operator<<(const std::reference_wrapper& v) + { + return *this << static_cast(v); + } + + /** + * @brief scale-encodes a string view + * @param sv string_view item + * @return reference to stream + */ + ScaleEncoderStream& operator<<(std::string_view sv) + { + return encodeCollection(sv.size(), sv.begin(), sv.end()); + } + + /** + * @brief scale-encodes any integral type including bool + * @tparam T integral type + * @param v value of integral type + * @return reference to stream + */ + template , + typename = std::enable_if_t::value>> + ScaleEncoderStream& operator<<(T&& v) + { + // encode bool + if constexpr (std::is_same::value) + { + uint8_t byte = (v ? 1u : 0u); + return putByte(byte); + } + // put byte + if constexpr (sizeof(T) == 1u) + { +// to avoid infinite recursion +#if __GNUC__ >= 10 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + return putByte(static_cast(v)); +#if __GNUC__ >= 10 +#pragma GCC diagnostic pop +#endif + } +// encode any other integer +#if __GNUC__ >= 10 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + encodeInteger(v, *this); +#if __GNUC__ >= 10 +#pragma GCC diagnostic pop +#endif + return *this; + } + + /** + * @brief scale-encodes CompactInteger value as compact integer + * @param v value to encode + * @return reference to stream + */ + ScaleEncoderStream& operator<<(const CompactInteger& v); + + ScaleEncoderStream& operator<<(s256 const& v) + { + u256 unsignedValue = s2u(v); + return *this << unsignedValue; + } + + ScaleEncoderStream& operator<<(const u256& v); + +protected: + template + void encodeElementOfTuple(const std::tuple& v) + { + *this << std::get(v); + if constexpr (sizeof...(Ts) > I + 1) + { + encodeElementOfTuple(v); + } + } + + template + void tryEncodeAsOneOfVariant(const boost::variant& v) + { + using T = std::tuple_element_t>; + if (v.type() == typeid(T)) + { + *this << I << boost::get(v); + return; + } + if constexpr (sizeof...(Ts) > I + 1) + { + tryEncodeAsOneOfVariant(v); + } + } + + /** + * @brief scale-encodes any collection + * @tparam It iterator over collection of bytes + * @param size size of the collection + * @param begin iterator pointing to the begin of collection + * @param end iterator pointing to the end of collection + * @return reference to stream + */ + template + ScaleEncoderStream& encodeCollection(const CompactInteger& size, It&& begin, It&& end) + { + *this << size; + for (auto&& it = begin; it != end; ++it) + { + *this << *it; + } + return *this; + } + + /** + * @brief puts a byte to buffer + * @param v byte value + * @return reference to stream + */ + ScaleEncoderStream& putByte(uint8_t v) + { + m_stream.emplace_back(v); + return *this; + } + +private: + ScaleEncoderStream& encodeOptionalBool(const boost::optional& v); + // std::deque m_stream; + std::deque m_stream; +}; +} // namespace scale +} // namespace codec +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/bcos-codec/wrapper/CodecWrapper.h b/bcos-codec/bcos-codec/wrapper/CodecWrapper.h new file mode 100644 index 0000000..9a46c9c --- /dev/null +++ b/bcos-codec/bcos-codec/wrapper/CodecWrapper.h @@ -0,0 +1,125 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CodecWrapper.h + * @author: kyonRay + * @date 2021-06-02 + */ + +#pragma once + +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-codec/scale/Scale.h" + +namespace bcos +{ +enum VMType +{ + EVM, + WASM, + UNDEFINED +}; +class CodecWrapper +{ +public: + using Ptr = std::shared_ptr; + CodecWrapper(crypto::Hash::Ptr _hash, bool _isWasm) : m_type(_isWasm ? VMType::WASM : VMType::EVM), m_hash(std::move(_hash)) + {} + template + bytes encode(Args&&... _args) const + { + assert(m_type != VMType::UNDEFINED); + if (m_type == VMType::EVM) + { + // Note: the codec is not thread-safe, so we can't share this object + codec::abi::ContractABICodec abi(m_hash); + return abi.abiIn("", _args...); + } + else + { + codec::scale::ScaleEncoderStream s; + (s << ... << std::forward(_args)); + return s.data(); + } + } + template + bytes encodeWithSig(const std::string& _sig, Args&&... _args) const + { + assert(m_type != VMType::UNDEFINED); + if (m_type == VMType::EVM) + { + // Note: the codec is not thread-safe, so we can't share this object + codec::abi::ContractABICodec abi(m_hash); + return abi.abiIn(_sig, _args...); + } + else + { + codec::scale::ScaleEncoderStream s; + (s << ... << std::forward(_args)); + return m_hash->hash(_sig).ref().getCroppedData(0, 4).toBytes() + s.data(); + } + } + + bytes encodeWithSig(const std::string& _sig) const + { + assert(m_type != VMType::UNDEFINED); + if (m_type == VMType::EVM) + { + // Note: the codec is not thread-safe, so we can't share this object + codec::abi::ContractABICodec abi(m_hash); + return abi.abiIn(_sig); + } + else + { + codec::scale::ScaleEncoderStream s; + return m_hash->hash(_sig).ref().getCroppedData(0, 4).toBytes() + s.data(); + } + } + + template + void decode(bytesConstRef _data, T&... _t) const + { + assert(m_type != VMType::UNDEFINED); + if (m_type == VMType::EVM) + { + codec::abi::ContractABICodec abi(m_hash); + abi.abiOut(_data, _t...); + } + else if (m_type == VMType::WASM) + { + auto&& t = _data.toBytes(); + codec::scale::ScaleDecoderStream stream(gsl::make_span(t)); + decodeScale(stream, _t...); + } + } + template + void decodeScale(codec::scale::ScaleDecoderStream& _s, T& _t, U&... _u) const + { + _s >> _t; + decodeScale(_s, _u...); + } + template + void decodeScale(codec::scale::ScaleDecoderStream& _s, T& _t) const + { + _s >> _t; + } + + void decodeScale(codec::scale::ScaleDecoderStream&) const { return; } + +private: + VMType m_type = VMType::UNDEFINED; + crypto::Hash::Ptr m_hash; +}; +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/test/CMakeLists.txt b/bcos-codec/test/CMakeLists.txt new file mode 100644 index 0000000..4f888e0 --- /dev/null +++ b/bcos-codec/test/CMakeLists.txt @@ -0,0 +1,28 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-codec +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") +# cmake settings +set(TEST_BINARY_NAME test-bcos-codec) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${CODEC_TARGET} Boost::unit_test_framework) +add_test(NAME test-codec WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-codec/test/unittests/ContractABICodecTest.cpp b/bcos-codec/test/unittests/ContractABICodecTest.cpp new file mode 100644 index 0000000..ab0a3b6 --- /dev/null +++ b/bcos-codec/test/unittests/ContractABICodecTest.cpp @@ -0,0 +1,1111 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unittest for ContractABICodec + * @author: octopuswang + * @date: 2019-04-01 + */ +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-codec/abi/ContractABIType.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::codec::abi; +using namespace bcos::codec; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(ABITest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(ContractABIType_func0) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + u256 a("0x123"); + std::vector b; + u256 u0("0x456"); + u256 u1("0x789"); + b.push_back(u0); + b.push_back(u1); + string32 c = toString32("1234567890"); + std::string d = "Hello, world!"; + + auto r = ct.abiInHex("", a, b, c, d); + auto rb = ct.abiIn("", a, b, c, d); + BOOST_CHECK(r == *toHexString(rb)); + + BOOST_CHECK_EQUAL( + r, std::string("0000000000000000000000000000000000000000000000000000000000000123" + "0000000000000000000000000000000000000000000000000000000000000080" + "3132333435363738393000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000e0" + "0000000000000000000000000000000000000000000000000000000000000002" + "0000000000000000000000000000000000000000000000000000000000000456" + "0000000000000000000000000000000000000000000000000000000000000789" + "000000000000000000000000000000000000000000000000000000000000000d" + "48656c6c6f2c20776f726c642100000000000000000000000000000000000000")); + + u256 outA; + std::vector outB; + string32 outC; + std::string outD; + auto Ok = ct.abiOutHex(r, outA, outB, outC, outD); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_func1) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + std::string a("dave"); + bool b(true); + std::vector c{1, 2, 3}; + + auto rb = ct.abiIn("", a, b, c); + auto r = *toHexString(rb); + BOOST_CHECK_EQUAL( + r, std::string("0000000000000000000000000000000000000000000000000000000000000060" + "0000000000000000000000000000000000000000000000000000000000000001" + "00000000000000000000000000000000000000000000000000000000000000a0" + "0000000000000000000000000000000000000000000000000000000000000004" + "6461766500000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000003" + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000002" + "0000000000000000000000000000000000000000000000000000000000000003")); + + std::string outA; + bool outB; + std::vector outC; + auto Ok = ct.abiOutHex(r, outA, outB, outC); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_func2) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + std::string a("daslfjaklfdaskl"); + u256 b = 1111; + std::array c{1, 2, 3, 4, 5, 6}; + std::vector d{1, 2, 3, 4, 5, 6}; + bool e = false; + Address f("0x692a70d2e424a56d2c6c27aa97d1a86395877b3a"); + + auto rb = ct.abiIn("", a, b, c, d, e, f); + auto r = *toHexString(rb); + + std::string outA; + u256 outB; + std::array outC; + std::vector outD; + bool outE = true; + Address outF; + + auto Ok = ct.abiOutHex(r, outA, outB, outC, outD, outE, outF); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); + BOOST_CHECK(e == outE); + BOOST_CHECK(f == outF); +} + + +BOOST_AUTO_TEST_CASE(ContractABIType_func3) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + std::string a("aaafadsfsfadsfdasf"); + Address b("0x35ef07393b57464e93deb59175ff72e6499450cf"); + u256 c = 11111; + int d = -11111; + + auto rb = ct.abiIn("", a, b, c, d); + auto r = *toHexString(rb); + + BOOST_CHECK_EQUAL( + r, std::string( + "00000000000000000000000000000000000000000000000000000000000000800000000" + "0000000000000000035ef07393b57464e93deb59175ff72e6499450cf000000000000000000000000" + "0000000000000000000000000000000000002b67fffffffffffffffffffffffffffffffffffffffff" + "fffffffffffffffffffd4990000000000000000000000000000000000000000000000000000000000" + "0000126161616661647366736661647366646173660000000000000000000000000000")); + + std::string outA; + Address outB; + u256 outC; + s256 outD; + + auto Ok = ct.abiOutHex(r, outA, outB, outC, outD); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); +} + + +BOOST_AUTO_TEST_CASE(ContractABIType_func4) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + std::string a; + u256 b; + s256 c; + string32 d; + std::array e; + std::vector> f(3); + + auto rb = ct.abiIn("", a, b, c, d, e, f); + auto r = *toHexString(rb); + + std::string outA = "HelloWorld"; + u256 outB = 11111; + s256 outC = -1111; + string32 outD = toString32("aa"); + std::array outE; + std::vector> outF; + + auto Ok = ct.abiOutHex(r, outA, outB, outC, outD, outE, outF); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); + BOOST_CHECK(e == outE); + BOOST_CHECK(f == outF); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_u256) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + u256 x = 0; + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK(r == "0000000000000000000000000000000000000000000000000000000000000000"); + + u256 y("0x7fffffffffffffff"); + r = *toHexString(ct.serialise(y)); + BOOST_CHECK(r == "0000000000000000000000000000000000000000000000007fffffffffffffff"); + + u256 z("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + r = *toHexString(ct.serialise(z)); + BOOST_CHECK(r == "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + + u256 u("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"); + r = *toHexString(ct.serialise(u)); + BOOST_CHECK(r == "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_s256) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + s256 x = 0; + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + + s256 y("0x7fffffffffffffff"); + r = *toHexString(ct.serialise(y)); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000007fffffffffffffff"); + + s256 z = -1; + r = *toHexString(ct.serialise(z)); + BOOST_CHECK_EQUAL(r, "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + + s256 s = 1000; + r = *toHexString(ct.serialise(s)); + BOOST_CHECK_EQUAL(r, "00000000000000000000000000000000000000000000000000000000000003e8"); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_integer) +{ + auto hashImpl = std::make_shared(); + auto codec = CodecWrapper(hashImpl, false); + + // int8 + { + int8_t i8 = INT8_MAX; + auto b = codec.encode(i8); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "000000000000000000000000000000000000000000000000000000000000007f"); + int8_t ri8; + codec.decode(ref(b), ri8); + BOOST_CHECK(i8 == ri8); + + i8 = INT8_MIN; + b = codec.encode(i8); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80"); + codec.decode(ref(b), ri8); + BOOST_CHECK(i8 == ri8); + } + + // int16 + { + int16_t i16 = INT16_MAX; + auto b = codec.encode(i16); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000007fff"); + int16_t ri16; + codec.decode(ref(b), ri16); + BOOST_CHECK(i16 == ri16); + + i16 = INT16_MIN; + b = codec.encode(i16); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000"); + codec.decode(ref(b), ri16); + BOOST_CHECK(i16 == ri16); + } + + // int32 + { + int32_t i32 = INT32_MAX; + auto b = codec.encode(i32); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "000000000000000000000000000000000000000000000000000000007fffffff"); + int32_t ri32; + codec.decode(ref(b), ri32); + BOOST_CHECK(i32 == ri32); + + i32 = INT32_MIN; + b = codec.encode(i32); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000"); + codec.decode(ref(b), ri32); + BOOST_CHECK(i32 == ri32); + } + + // int64 + { + int64_t i64 = INT64_MAX; + auto b = codec.encode(i64); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000007fffffffffffffff"); + int64_t ri64; + codec.decode(ref(b), ri64); + BOOST_CHECK(i64 == ri64); + + i64 = INT64_MIN; + b = codec.encode(i64); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "ffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000"); + codec.decode(ref(b), ri64); + BOOST_CHECK(i64 == ri64); + } + + // uint8 + { + uint8_t u8 = UINT8_MAX; + auto b = codec.encode(u8); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "00000000000000000000000000000000000000000000000000000000000000ff"); + uint8_t ru8; + codec.decode(ref(b), ru8); + BOOST_CHECK(u8 == ru8); + + u8 = 0; + b = codec.encode(u8); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + codec.decode(ref(b), ru8); + BOOST_CHECK(u8 == ru8); + } + + // uint16 + { + uint16_t u16 = UINT16_MAX; + auto b = codec.encode(u16); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "000000000000000000000000000000000000000000000000000000000000ffff"); + uint16_t ru16; + codec.decode(ref(b), ru16); + BOOST_CHECK(u16 == ru16); + + u16 = 0; + b = codec.encode(u16); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + codec.decode(ref(b), ru16); + BOOST_CHECK(u16 == ru16); + } + + // uint32 + { + uint32_t u32 = UINT32_MAX; + auto b = codec.encode(u32); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "00000000000000000000000000000000000000000000000000000000ffffffff"); + uint32_t ru32; + codec.decode(ref(b), ru32); + BOOST_CHECK(u32 == ru32); + + u32 = 0; + b = codec.encode(u32); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + codec.decode(ref(b), ru32); + BOOST_CHECK(u32 == ru32); + } + + // uint64 + { + uint64_t u64 = UINT64_MAX; + auto b = codec.encode(u64); + std::string r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "000000000000000000000000000000000000000000000000ffffffffffffffff"); + uint64_t ru64; + codec.decode(ref(b), ru64); + BOOST_CHECK(u64 == ru64); + + u64 = 0; + b = codec.encode(u64); + r = *toHexString(b); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + codec.decode(ref(b), ru64); + BOOST_CHECK(u64 == ru64); + } +} + +BOOST_AUTO_TEST_CASE(ContractABIType_bool) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + bool x = true; + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000001"); + + + bool y = false; + r = *toHexString(ct.serialise(y)); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_addr) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + Address x; + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK_EQUAL(r, "0000000000000000000000000000000000000000000000000000000000000000"); + + + Address y("0xbe5422d15f39373eb0a97ff8c10fbd0e40e29338"); + r = *toHexString(ct.serialise(y)); + BOOST_CHECK_EQUAL(r, "000000000000000000000000be5422d15f39373eb0a97ff8c10fbd0e40e29338"); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_string) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + std::string x("Hello, world!"); + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK_EQUAL( + r, std::string("000000000000000000000000000000000000000000000000000000000000000d48656c6c6" + "f2c20776f726c642100000000000000000000000000000000000000")); + + std::string y(""); + r = *toHexString(ct.serialise(y)); + BOOST_CHECK_EQUAL( + r, std::string("0000000000000000000000000000000000000000000000000000000000000000")); +} + +BOOST_AUTO_TEST_CASE(ContractABIType_array_uint256) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + std::array x{1, 2, 3}; + std::string r = *toHexString(ct.serialise(x)); + BOOST_CHECK_EQUAL( + r, std::string("00000000000000000000000000000000000000000000000000000000000000010" + "0000000000000000000000000" + "00000000000000000000000000000000000002000000000000000000000000000" + "0000000000000000000000000" + "000000000003")); + + std::vector y{1, 2, 3}; + r = *toHexString(ct.serialise(y)); + BOOST_CHECK_EQUAL( + r, std::string("000000000000000000000000000000000000000000000000000000000000000300000000000" + "000000000000000" + "0000000000000000000000000000000000000100000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000" + "000000000000000" + "000000000003")); +} + +BOOST_AUTO_TEST_CASE(ContractABITest0) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + + u256 a = 12345; + s256 b = -67890; + string c("xxxsxxxsxxs"); + string32 d = toString32(std::string("adsggsakjffl;kajsdf")); + + auto rb = ct.abiIn("", a, b, c, d); + auto r = *toHexString(rb); + + u256 outA; + s256 outB; + string outC; + string32 outD; + + bool Ok = ct.abiOutHex(r, outA, outB, outC, outD); + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); +} + +BOOST_AUTO_TEST_CASE(ContractABITest1) +{ + u256 a = 100; + s256 b = -100; + std::string c = "abc"; + std::vector d = {"abc", "abc", "abc"}; + std::array e{"abc", "abc", "abc"}; + + std::string expect = + "0000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffff9c0000000000000000000000000000000000000000000000000000" + "0000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000" + "000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000" + "000000000000000000000003616263000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000" + "000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000" + "00000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000" + "000000000000000000000000000000000000000000000003616263000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000036162" + "630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000361626300000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000" + "00000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000" + "000000000000000000e00000000000000000000000000000000000000000000000000000000000000003616263" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000036162630000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000361626300000000000000" + "00000000000000000000000000000000000000000000"; + + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + auto rb = ct.abiIn("", a, b, c, d, e); + auto r = *toHexString(rb); + BOOST_CHECK_EQUAL(r, expect); + + u256 outA; + s256 outB; + std::string outC; + std::vector outD; + std::array outE; + + bool Ok = ct.abiOutHex(r, outA, outB, outC, outD, outE); + + BOOST_CHECK_EQUAL(Ok, true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); + BOOST_CHECK(e == outE); +} + +BOOST_AUTO_TEST_CASE(ContractABITest2) +{ + std::array, 3> a{ + std::vector{1}, std::vector{2, 3}, std::vector{4, 5, 6}}; + + std::string expect = + "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000" + "000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000" + "0000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000" + "000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000" + "000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200" + "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000" + "000000000300000000000000000000000000000000000000000000000000000000000000040000000000000000" + "000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000" + "0000000000000000000006"; + + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + auto rb = ct.abiIn("", a); + auto r = *toHexString(rb); + + BOOST_CHECK(r == expect); + + std::array, 3> outA; + bool Ok = ct.abiOutHex(r, outA); + + BOOST_CHECK_EQUAL(Ok, true); + BOOST_CHECK(a == outA); +} + +BOOST_AUTO_TEST_CASE(ContractABITest3) +{ + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + u256 a = 123; + Address b("0x692a70d2e424a56d2c6c27aa97d1a86395877b3a"); + std::string c = "string c"; + std::vector d{1, 2, 3}; + std::array e = {4, 5, 6}; + + std::vector f{"abc", "def", "ghi"}; + std::array g{"abc", "def", "ghi"}; + + std::vector> h{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}; + std::vector> i{{4, 4, 4}, {5, 5, 5}}; + + auto rb = ct.abiIn("", a, b, c, d, e, f, g, h, i); + auto r = *toHexString(rb); + + std::string expect = + "000000000000000000000000000000000000000000000000000000000000007b00000000000000000000000069" + "2a70d2e424a56d2c6c27aa97d1a86395877b3a0000000000000000000000000000000000000000000000000000" + "00000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000" + "000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000" + "000000000000000000000005000000000000000000000000000000000000000000000000000000000000000600" + "000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000" + "000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000" + "000000048000000000000000000000000000000000000000000000000000000000000006800000000000000000" + "000000000000000000000000000000000000000000000008737472696e67206300000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000" + "000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000" + "000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000" + "000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000" + "000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000" + "000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000" + "000000000000000000000000000000000000000000000000000000000361626300000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000003646566000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000036768690000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000" + "000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000" + "0000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000" + "000361626300000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000003646566000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000036768690000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000" + "6000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000" + "000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000" + "000000000000030000000000000000000000000000000000000000000000000000000000000001000000000000" + "000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000" + "000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003" + "000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000" + "000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000" + "000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000" + "000000000000000000000003000000000000000000000000000000000000000000000000000000000000000300" + "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000" + "000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000" + "000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000" + "00000000000000000000050000000000000000000000000000000000000000000000000000000000000005"; + + + BOOST_CHECK_EQUAL(r, expect); + + u256 outA; + Address outB; + std::string outC; + std::vector outD; + std::array outE; + + std::vector outF; + std::array outG; + + std::vector> outH; + std::vector> outI; + bool Ok = ct.abiOutHex(r, outA, outB, outC, outD, outE, outF, outG, outH, outI); + + BOOST_CHECK(Ok == true); + BOOST_CHECK(a == outA); + BOOST_CHECK(b == outB); + BOOST_CHECK(c == outC); + BOOST_CHECK(d == outD); + BOOST_CHECK(e == outE); + BOOST_CHECK(f == outF); + BOOST_CHECK(g == outG); + BOOST_CHECK(h == outH); + BOOST_CHECK(i == outI); +} + +BOOST_AUTO_TEST_CASE(ContractABI_ABIType) +{ + std::string s = "string"; + ABIInType at; + auto ok = at.reset(s); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "string"); + BOOST_CHECK(at.dynamic() == true); + BOOST_CHECK(at.getEleType() == "string"); + BOOST_CHECK(at.rank() == 0); + + ok = at.reset("adf"); + BOOST_CHECK(ok == false); + + ok = at.reset("uint256"); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "uint256"); + BOOST_CHECK(at.dynamic() == false); + BOOST_CHECK(at.getEleType() == "uint256"); + BOOST_CHECK(at.rank() == 0); + + + ok = at.reset("bool"); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "bool"); + BOOST_CHECK(at.dynamic() == false); + BOOST_CHECK(at.getEleType() == "bool"); + BOOST_CHECK(at.rank() == 0); + + ok = at.reset("bool[]"); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "bool[]"); + BOOST_CHECK(at.dynamic() == true); + BOOST_CHECK(at.getEleType() == "bool"); + BOOST_CHECK(at.rank() == 1); + + ok = at.reset("bool[10]"); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "bool[10]"); + BOOST_CHECK(at.dynamic() == false); + BOOST_CHECK(at.getEleType() == "bool"); + BOOST_CHECK(at.extent(1) == 10); + BOOST_CHECK(at.rank() == 1); + + ok = at.reset("string[10][][20]"); + BOOST_CHECK(ok == true); + BOOST_CHECK(at.getType() == "string[10][][20]"); + BOOST_CHECK(at.dynamic() == true); + BOOST_CHECK(at.getEleType() == "string"); + BOOST_CHECK(at.extent(1) == 10); + BOOST_CHECK(at.extent(2) == 0); + BOOST_CHECK(at.extent(3) == 20); + BOOST_CHECK(at.rank() == 3); + + at.removeExtent(); + BOOST_CHECK(at.extent(1) == 10); + BOOST_CHECK(at.extent(2) == 0); + BOOST_CHECK(at.rank() == 2); + + at.removeExtent(); + BOOST_CHECK(at.extent(1) == 10); + BOOST_CHECK(at.rank() == 1); + + at.removeExtent(); + BOOST_CHECK(at.rank() == 0); +} + +BOOST_AUTO_TEST_CASE(ContractABI_ABIFunc0) +{ + std::string s = "transfer (string, uint256, int256, string[])"; + ABIFunc afunc; + auto ok = afunc.parser(s); + BOOST_CHECK(ok == true); + BOOST_CHECK(afunc.getFuncName() == "transfer"); + BOOST_CHECK(afunc.getSignature() == "transfer(string,uint256,int256,string[])"); + std::vector exp{"string", "uint256", "int256", "string[]"}; + BOOST_CHECK(afunc.getParamsType() == exp); +} + +BOOST_AUTO_TEST_CASE(ContractABI_ABIFunc1) +{ + std::string s0 = "register(string,uint25)"; + ABIFunc afunc0; + auto ok = afunc0.parser(s0); + BOOST_CHECK(ok == false); + + + std::string s1 = "f()"; + ABIFunc afunc1; + ok = afunc1.parser(s1); + BOOST_CHECK(ok == true); + BOOST_CHECK(afunc1.getFuncName() == "f"); + BOOST_CHECK(afunc1.getSignature() == "f()"); +} + +BOOST_AUTO_TEST_CASE(ContractABI_ABIFunc2) +{ + std::string s = "trans(string,uint256)"; + + ABIFunc afunc; + auto ok = afunc.parser(s); + BOOST_CHECK(ok == true); + + BOOST_CHECK(afunc.getFuncName() == "trans"); + BOOST_CHECK(afunc.getSignature() == "trans(string,uint256)"); + std::vector exp{"string", "uint256"}; + BOOST_CHECK(afunc.getParamsType() == exp); +} + +BOOST_AUTO_TEST_CASE(ContractABI_AbiOutString0) +{ + u256 u = 111111111; + std::string s = "test string"; + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + auto in = ct.abiIn("", u, s); + + ABIFunc afunc; + auto ok = afunc.parser("test(uint256,string)"); + BOOST_CHECK(ok == true); + + auto allTypes = afunc.getParamsType(); + + BOOST_CHECK(allTypes.size() == 2); + BOOST_CHECK(allTypes[0] == "uint256"); + BOOST_CHECK(allTypes[1] == "string"); + + std::vector allOut; + ct.abiOutByFuncSelector(bytesConstRef(&in), allTypes, allOut); + BOOST_CHECK(allOut.size() == 2); + BOOST_CHECK(allOut[0] == "111111111"); + BOOST_CHECK(allOut[1] == "test string"); +} + +BOOST_AUTO_TEST_CASE(ContractABI_AbiOutString1) +{ + u256 u = 111111111; + s256 i = -11111111; + std::string s = "aaaaaaa"; + auto hashImpl = std::make_shared(); + ContractABICodec ct(hashImpl); + auto in = ct.abiIn("", s, u, i); + + ABIFunc afunc; + auto ok = afunc.parser("f(string,uint256,int256)"); + BOOST_CHECK(ok == true); + + auto allTypes = afunc.getParamsType(); + + BOOST_CHECK(allTypes.size() == 3); + BOOST_CHECK(allTypes[0] == "string"); + BOOST_CHECK(allTypes[1] == "uint256"); + BOOST_CHECK(allTypes[2] == "int256"); + + std::vector allOut; + ct.abiOutByFuncSelector(bytesConstRef(&in), allTypes, allOut); + BOOST_CHECK(allOut.size() == 3); + BOOST_CHECK(allOut[1] == "111111111"); + BOOST_CHECK(allOut[2] == "-11111111"); + BOOST_CHECK(allOut[0] == "aaaaaaa"); +} + +BOOST_AUTO_TEST_CASE(testABIOutBytes) +{ + // test byte32 + std::string hashStr = "1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b"; + h256 hashData = h256(hashStr); + std::string plainText = "test"; + bytes plainBytes = *fromHexString(*toHexString(plainText)); + ABIFunc afunc; + auto ok = afunc.parser("f(bytes32,bytes,bytes32)"); + BOOST_CHECK(ok == true); + auto allTypes = afunc.getParamsType(); + + BOOST_CHECK(allTypes.size() == 3); + BOOST_CHECK(allTypes[0] == "bytes32"); + BOOST_CHECK(allTypes[1] == "bytes"); + BOOST_CHECK(allTypes[2] == "bytes32"); + + auto hashImpl = std::make_shared(); + ContractABICodec abi(hashImpl); + auto paramData = abi.abiIn("", toString32(hashData), plainBytes, toString32(hashData)); + string32 decodedParam1; + bytes decodedParam2; + string32 decodedParam3; + abi.abiOut(ref(paramData), decodedParam1, decodedParam2, decodedParam3); + + BOOST_CHECK(*toHexString(fromString32(decodedParam1)) == hashStr); + BOOST_CHECK(*toHexString(fromString32(decodedParam3)) == hashStr); + std::cout << "decodedParam1: " << *toHexString(decodedParam1) << std::endl; + std::cout << "decodedParam2: " << *toHexString(decodedParam2) << std::endl; + std::cout << "decodedParam3: " << *toHexString(decodedParam3) << std::endl; + BOOST_CHECK(*toHexString(decodedParam2) == *toHexString(plainText)); + + // test bytes + plainText = "testabcxxd"; + bytesConstRef refPlainBytes(plainText); + paramData = abi.abiIn("", refPlainBytes.toBytes()); + bytes decodedParam; + abi.abiOut(ref(paramData), decodedParam); + BOOST_CHECK(*toHexString(decodedParam) == *toHexString(plainText)); +} + +BOOST_AUTO_TEST_CASE(testABITuple) +{ + auto hashImpl = std::make_shared(); + ContractABICodec abi(hashImpl); + + // static tuple(uint32,uint32) + { + auto staticTuple = std::make_tuple(uint32_t(0), uint32_t(10)); + auto dynamicTuple = std::make_tuple(uint8_t(0), std::string("990")); + auto tupleV = std::vector({dynamicTuple}); + + auto encodedBytes = abi.abiIn("", tupleV, staticTuple); + auto s = toHexStringWithPrefix(encodedBytes); + BOOST_CHECK( + s == + "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001" + "00000000000000000000000000000000000000000000000000000000000000200000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000040000000000000000000000000000000000000000000000000000000000000000339" + "39300000000000000000000000000000000000000000000000000000000000"); + + decltype(tupleV) resultV; + decltype(staticTuple) resultStatic; + abi.abiOut(ref(encodedBytes), resultV, resultStatic); + BOOST_CHECK(resultV.size() == 1); + BOOST_CHECK(std::get<0>(resultV.at(0)) == uint8_t(0)); + BOOST_CHECK(std::get<1>(resultV.at(0)) == std::string("990")); + BOOST_CHECK(std::get<0>(resultStatic) == uint32_t(0)); + BOOST_CHECK(std::get<1>(resultStatic) == uint32_t(10)); + } + + // static tuple(uint32,uint32,int8) + { + auto staticTuple = std::make_tuple(uint32_t(0), uint32_t(10), int8_t(-1)); + auto dynamicTuple1 = std::make_tuple(uint8_t(0), std::string("990")); + auto dynamicTuple2 = std::make_tuple(uint8_t(1), std::string("991")); + auto tupleV = std::vector({dynamicTuple1, dynamicTuple2}); + + auto encodedBytes = abi.abiIn("", tupleV, staticTuple, tupleV); + auto s = toHexStringWithPrefix(encodedBytes); + BOOST_CHECK( + s == + "0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "00000000000000000000000000000000000000000000000000000000000002000000000000000000000000" + "00000000000000000000000000000000000000000200000000000000000000000000000000000000000000" + "0000000000000000004000000000000000000000000000000000000000000000000000000000000000c000" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000400000000000000000000000000000000000000000000000" + "00000000000000000339393000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000040000000000000000000000000000000000000000000000000" + "00000000000000033939310000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "00000000000000000000000000000000004000000000000000000000000000000000000000000000000000" + "000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000040000000000000000000000000000000" + "00000000000000000000000000000000033939300000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000000000000000000010000000000" + "00000000000000000000000000000000000000000000000000004000000000000000000000000000000000" + "00000000000000000000000000000003393931000000000000000000000000000000000000000000000000" + "0000000000"); + + decltype(tupleV) resultV1, resultV2; + decltype(staticTuple) resultStatic; + abi.abiOut(ref(encodedBytes), resultV1, resultStatic, resultV2); + BOOST_CHECK(resultV1.size() == 2); + BOOST_CHECK(std::get<0>(resultV1.at(0)) == uint8_t(0)); + BOOST_CHECK(std::get<1>(resultV1.at(0)) == std::string("990")); + BOOST_CHECK(std::get<0>(resultV1.at(1)) == uint8_t(1)); + BOOST_CHECK(std::get<1>(resultV1.at(1)) == std::string("991")); + + BOOST_CHECK(std::get<0>(resultStatic) == uint32_t(0)); + BOOST_CHECK(std::get<1>(resultStatic) == uint32_t(10)); + BOOST_CHECK(std::get<2>(resultStatic) == int8_t(-1)); + + BOOST_CHECK(resultV2.size() == 2); + BOOST_CHECK(std::get<0>(resultV2.at(0)) == uint8_t(0)); + BOOST_CHECK(std::get<1>(resultV2.at(0)) == std::string("990")); + BOOST_CHECK(std::get<0>(resultV2.at(1)) == uint8_t(1)); + BOOST_CHECK(std::get<1>(resultV2.at(1)) == std::string("991")); + } + + // tuple(vector(tuple(u256,string,string,u256))) + { + auto tuple1 = std::make_tuple(u256(1), std::string("id1"), std::string("test1"), u256(2)); + auto tuple2 = std::make_tuple(u256(1), std::string("id2"), std::string("test2"), u256(2)); + auto testEncode = std::make_tuple(std::vector{tuple1, tuple2}); + auto encodedBytes = abi.abiIn("", std::string("t_test"), testEncode); + // solc 0.6.12 + // solidity struct A{ enum,string,string,enum } struct B {A[]} + // B(A[]({1,"id1","test1",2},{1,"id2","test2",2})) + std::string bytesString = + "00000000000000000000000000000000000000000000000000000000000000400000000000000000000000" + "0000" + "00000000000000000000000000000000000080000000000000000000000000000000000000000000000000" + "0000" + "000000000006745f7465737400000000000000000000000000000000000000000000000000000000000000" + "0000" + "00000000000000000000000000000000000000000000000020000000000000000000000000000000000000" + "0000" + "00000000000000000000000200000000000000000000000000000000000000000000000000000000000000" + "4000" + "00000000000000000000000000000000000000000000000000000000000140000000000000000000000000" + "0000" + "00000000000000000000000000000000000100000000000000000000000000000000000000000000000000" + "0000" + "000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000" + "0000" + "00000000000000000000000000000000000000000000000200000000000000000000000000000000000000" + "0000" + "00000000000000000000036964310000000000000000000000000000000000000000000000000000000000" + "0000" + "00000000000000000000000000000000000000000000000000000000000574657374310000000000000000" + "0000" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000" + "00000001000000000000000000000000000000000000000000000000000000000000008000000000000000" + "0000" + "00000000000000000000000000000000000000000000c00000000000000000000000000000000000000000" + "0000" + "00000000000000000002000000000000000000000000000000000000000000000000000000000000000369" + "6432" + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000" + "00000000000000000000000000000005746573743200000000000000000000000000000000000000000000" + "0000" + "000000"; + std::string hexString = *toHexString(encodedBytes); + BOOST_CHECK(hexString == bytesString); + + decltype(testEncode) testDecode; + std::string testString; + abi.abiOut(ref(encodedBytes), testString, testDecode); + + BOOST_CHECK(std::get<0>(testDecode).size() == 2); + auto tupleDecode1 = std::get<0>(testDecode).at(0); + auto tupleDecode2 = std::get<0>(testDecode).at(1); + BOOST_CHECK(std::get<0>(tupleDecode1) == std::get<0>(tuple1)); + BOOST_CHECK(std::get<1>(tupleDecode1) == std::get<1>(tuple1)); + BOOST_CHECK(std::get<2>(tupleDecode1) == std::get<2>(tuple1)); + BOOST_CHECK(std::get<3>(tupleDecode1) == std::get<3>(tuple1)); + + BOOST_CHECK(std::get<0>(tupleDecode2) == std::get<0>(tuple2)); + BOOST_CHECK(std::get<1>(tupleDecode2) == std::get<1>(tuple2)); + BOOST_CHECK(std::get<2>(tupleDecode2) == std::get<2>(tuple2)); + BOOST_CHECK(std::get<3>(tupleDecode2) == std::get<3>(tuple2)); + } + + // simple tuple + { + auto test1 = std::make_tuple(std::string("123"), s256(-1), + Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2"), + *fromHexString("420f853b49838bd3e9466c85a4cc3428c960dde2"), + std::vector({"123", "456"})); + auto test1Encode = abi.abiIn("", test1); + decltype(test1) test1Decode; + abi.abiOut(ref(test1Encode), test1Decode); + + BOOST_CHECK(std::get<0>(test1) == std::get<0>(test1Decode)); + BOOST_CHECK(std::get<1>(test1) == std::get<1>(test1Decode)); + BOOST_CHECK(std::get<2>(test1) == std::get<2>(test1Decode)); + BOOST_CHECK(std::get<3>(test1) == std::get<3>(test1Decode)); + BOOST_CHECK(std::get<4>(test1)[0] == std::get<4>(test1Decode)[0]); + BOOST_CHECK(std::get<4>(test1)[1] == std::get<4>(test1Decode)[1]); + } + + // tuple(u256,bool,vector(tuple(string,s256,Address,bytes,vector)),vector(tuple(string,s256,Address,bytes,vector))) + { + auto tuple1 = std::make_tuple(std::string("123"), s256(-1), + Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2"), + *fromHexString("420f853b49838bd3e9466c85a4cc3428c960dde2"), + std::vector({"123", "456"})); + + auto tuple2 = std::make_tuple(std::string("456"), s256(-123), + Address("0x420f853b49838bd3e9466c85a4cc3428c360dde2"), + *fromHexString("420f853b49838bd3e9466c85a4cc3528c960dde2"), + std::vector({"321", "33333"})); + + std::vector tupleV1{tuple1, tuple2}; + std::vector tupleV2{tuple2, tuple1}; + + auto tupleTest1 = std::make_tuple(u256(321321441), true, tupleV1, tupleV2); + auto test1Encode = abi.abiIn("", tuple1, tupleTest1); + decltype(tuple1) tuple1Decode; + decltype(tupleTest1) test1Decode; + abi.abiOut(ref(test1Encode), tuple1Decode, test1Decode); + + BOOST_CHECK(std::get<0>(tuple1Decode) == std::get<0>(tuple1)); + BOOST_CHECK(std::get<1>(tuple1Decode) == std::get<1>(tuple1)); + BOOST_CHECK(std::get<2>(tuple1Decode) == std::get<2>(tuple1)); + BOOST_CHECK(std::get<3>(tuple1Decode) == std::get<3>(tuple1)); + BOOST_CHECK(std::get<4>(tuple1Decode)[0] == std::get<4>(tuple1)[0]); + BOOST_CHECK(std::get<4>(tuple1Decode)[1] == std::get<4>(tuple1)[1]); + + BOOST_CHECK(std::get<0>(test1Decode) == std::get<0>(tupleTest1)); + BOOST_CHECK(std::get<1>(test1Decode) == std::get<1>(tupleTest1)); + auto test1DecodeTupleV1 = std::get<2>(test1Decode); + auto test1DecodeTupleV2 = std::get<3>(test1Decode); + + BOOST_CHECK(std::get<0>(test1DecodeTupleV1[0]) == std::get<0>(tuple1)); + BOOST_CHECK(std::get<1>(test1DecodeTupleV1[0]) == std::get<1>(tuple1)); + BOOST_CHECK(std::get<2>(test1DecodeTupleV1[0]) == std::get<2>(tuple1)); + BOOST_CHECK(std::get<3>(test1DecodeTupleV1[0]) == std::get<3>(tuple1)); + BOOST_CHECK(std::get<4>(test1DecodeTupleV1[0])[0] == std::get<4>(tuple1)[0]); + BOOST_CHECK(std::get<4>(test1DecodeTupleV1[0])[1] == std::get<4>(tuple1)[1]); + + BOOST_CHECK(std::get<0>(test1DecodeTupleV1[1]) == std::get<0>(tuple2)); + BOOST_CHECK(std::get<1>(test1DecodeTupleV1[1]) == std::get<1>(tuple2)); + BOOST_CHECK(std::get<2>(test1DecodeTupleV1[1]) == std::get<2>(tuple2)); + BOOST_CHECK(std::get<3>(test1DecodeTupleV1[1]) == std::get<3>(tuple2)); + BOOST_CHECK(std::get<4>(test1DecodeTupleV1[1])[0] == std::get<4>(tuple2)[0]); + BOOST_CHECK(std::get<4>(test1DecodeTupleV1[1])[1] == std::get<4>(tuple2)[1]); + + BOOST_CHECK(std::get<0>(test1DecodeTupleV2[0]) == std::get<0>(tuple2)); + BOOST_CHECK(std::get<1>(test1DecodeTupleV2[0]) == std::get<1>(tuple2)); + BOOST_CHECK(std::get<2>(test1DecodeTupleV2[0]) == std::get<2>(tuple2)); + BOOST_CHECK(std::get<3>(test1DecodeTupleV2[0]) == std::get<3>(tuple2)); + BOOST_CHECK(std::get<4>(test1DecodeTupleV2[0])[0] == std::get<4>(tuple2)[0]); + BOOST_CHECK(std::get<4>(test1DecodeTupleV2[0])[1] == std::get<4>(tuple2)[1]); + + BOOST_CHECK(std::get<0>(test1DecodeTupleV2[1]) == std::get<0>(tuple1)); + BOOST_CHECK(std::get<1>(test1DecodeTupleV2[1]) == std::get<1>(tuple1)); + BOOST_CHECK(std::get<2>(test1DecodeTupleV2[1]) == std::get<2>(tuple1)); + BOOST_CHECK(std::get<3>(test1DecodeTupleV2[1]) == std::get<3>(tuple1)); + BOOST_CHECK(std::get<4>(test1DecodeTupleV2[1])[0] == std::get<4>(tuple1)[0]); + BOOST_CHECK(std::get<4>(test1DecodeTupleV2[1])[1] == std::get<4>(tuple1)[1]); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-codec/test/unittests/ScaleCodecTest.cpp b/bcos-codec/test/unittests/ScaleCodecTest.cpp new file mode 100644 index 0000000..fa5da06 --- /dev/null +++ b/bcos-codec/test/unittests/ScaleCodecTest.cpp @@ -0,0 +1,1149 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "bcos-codec/scale/Scale.h" +#include "bcos-codec/scale/ScaleDecoderStream.h" +#include "bcos-codec/scale/ScaleEncoderStream.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::codec::scale; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(ScaleTest, TestPromptFixture) +/** + * @given collection of N of type uint8_t + * @when encode array and decode back + * @then given equal array + */ +template > +void testArray() +{ + for (auto value : + {0b0000'0000, 0b0011'0011, 0b0101'0101, 0b1010'1010, 0b1100'1100, 0b1111'1111}) + { + Array testee; + std::fill(testee.begin(), testee.end(), value); + + auto data = encode(testee); + auto decoded_res = decode((data)); + BOOST_CHECK(testee == decoded_res); + } +} +BOOST_AUTO_TEST_CASE(ArrayTest) +{ + testArray<0>(); + testArray<127>(); + testArray<128>(); + testArray<255>(); + testArray<256>(); + testArray<999>(); +} + +struct ThreeBooleans +{ + bool b1 = false; + bool b2 = false; + bool b3 = false; +}; + +template > +Stream& operator>>(Stream& s, ThreeBooleans& v) +{ + return s >> v.b1 >> v.b2 >> v.b3; +} +BOOST_AUTO_TEST_CASE(BoolTest) +{ + ScaleEncoderStream s1; + s1 << true; + std::vector data = {0x1}; + BOOST_CHECK(s1.data() == data); + ScaleEncoderStream s2; + s2 << false; + data = {0x0}; + BOOST_CHECK(s2.data() == data); + + // exception case + data = bytes{0, 1, 2}; + BOOST_CHECK_THROW(decode((data)), ScaleDecodeException); + + data = bytes{0, 1, 0}; + auto result = decode((data)); + BOOST_CHECK(result.b1 == false); + BOOST_CHECK(result.b2 == true); + BOOST_CHECK(result.b3 == false); +} +BOOST_AUTO_TEST_CASE(pairTest) +{ + uint8_t v1 = 1; + uint32_t v2 = 2; + ScaleEncoderStream s; + s << std::make_pair(v1, v2); + bytes data = {1, 2, 0, 0, 0}; + BOOST_CHECK(s.data() == data); + + data = {1, 2, 0, 0, 0}; + ScaleDecoderStream s2((data)); + using pair_type = std::pair; + pair_type pair{}; + s2 >> pair; + BOOST_CHECK(pair.first == 1); + BOOST_CHECK(pair.second == 2); +} + +template +void testMap(std::vector& t_v, std::vector& f_v, size_t _size = 1) +{ + std::map m; + for (size_t i = 0; i < _size; i++) + { + m.insert(std::make_pair(t_v[i], f_v[i])); + } + ScaleEncoderStream s; + s << m; + bytes encodeBytes = s.data(); + + ScaleDecoderStream s2((encodeBytes)); + std::map newMap; + s2 >> newMap; + + BOOST_CHECK(_size == newMap.size()); + bool allEqual = std::equal(m.begin(), m.end(), newMap.begin(), [&](auto& pair1, auto& pair2) { + return pair1.first == pair2.first && pair1.second == pair2.second; + }); + BOOST_CHECK(allEqual); +} + +BOOST_AUTO_TEST_CASE(mapTest) +{ + // string 2 string + { + std::vector v1{"test1", "test2"}; + std::vector v2{"test3", "test4"}; + testMap(v1, v2, v1.size()); + } + // string 2 bytes + { + std::vector v1{"test1", "test2"}; + std::vector v2{asBytes("test3"), asBytes("test4")}; + testMap(v1, v2, v1.size()); + } + // s256 2 u256 + { + std::vector v1{0, -1, -256123}; + std::vector v2{0, 1, 256123}; + testMap(v1, v2, v1.size()); + } + + // bool 2 vector + { + std::vector v1{true, false}; + std::vector v2_1 = {asBytes("test1"), asBytes("test2")}; + std::vector v2_2 = {asBytes("test3"), asBytes("test4")}; + std::vector> v2{v2_1, v2_2}; + testMap>(v1, v2, v1.size()); + } + + // bytes 2 map + { + std::vector v1{asBytes("test1"), asBytes("test2")}; + + std::map v2_1; + v2_1.insert(std::make_pair(Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2"), true)); + v2_1.insert(std::make_pair(Address("0x120f853b49838bd3e9466c85a4cc3428c960dde2"), true)); + std::map v2_2; + v2_2.insert(std::make_pair(Address("0x420f853b49838bd3e9466c85a4cc3428c960d123"), false)); + v2_2.insert(std::make_pair(Address("0x420f853b49838bd3e9466c85a4cc3428c960d456"), true)); + std::vector> v2{v2_1, v2_2}; + testMap>(v1, v2, v1.size()); + } + + // map 2 map + { + std::map v1_1; + v1_1.insert(std::make_pair(123, asBytes("test1"))); + std::map v1_2; + v1_2.insert(std::make_pair(456, asBytes("test2"))); + std::vector> v1{v1_1, v1_2}; + + std::map v2_1; + v2_1.insert(std::make_pair(-789, asBytes("test3"))); + std::map v2_2; + v2_2.insert(std::make_pair(-987, asBytes("test4"))); + std::vector> v2{v2_1, v2_2}; + testMap, std::map>(v1, v2, v1.size()); + } +} + +BOOST_AUTO_TEST_CASE(testString) +{ + std::string v = "asdadad"; + ScaleEncoderStream s{}; + s << v; + bytes data = {28, 'a', 's', 'd', 'a', 'd', 'a', 'd'}; + BOOST_CHECK(s.data() == data); + + std::string v2 = "asdadad"; + ScaleEncoderStream s2; + s2 << v2; + data = {28, 'a', 's', 'd', 'a', 'd', 'a', 'd'}; + BOOST_CHECK(s.data() == data); + + data = {28, 'a', 's', 'd', 'a', 'd', 'a', 'd'}; + ScaleDecoderStream s3((data)); + s3 >> v; + BOOST_CHECK(v == "asdadad"); +} + + +BOOST_AUTO_TEST_CASE(testBytes1) +{ + std::string v = "0x1"; + FixedBytes<1> fb1(v); + ScaleEncoderStream s{}; + s << fb1; + bytes data = {1}; + BOOST_CHECK(s.data() == data); + FixedBytes<1> fb2; + ScaleDecoderStream sd((data)); + sd >> fb2; + BOOST_CHECK(fb1 == fb2); +} + +BOOST_AUTO_TEST_CASE(testBytes2) +{ + std::string v = "0x0102"; + FixedBytes<2> fb2_i(v); + ScaleEncoderStream s{}; + s << fb2_i; + bytes data = {1, 2}; + BOOST_CHECK(s.data() == data); + FixedBytes<2> fb2_o; + ScaleDecoderStream sd((data)); + sd >> fb2_o; + BOOST_CHECK(fb2_i == fb2_o); +} + +BOOST_AUTO_TEST_CASE(testBytes16) +{ + std::string v = "0x000102030405060708090a0b0c0d0e0f"; + FixedBytes<16> fb2_i(v); + ScaleEncoderStream s{}; + s << fb2_i; + bytes data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + BOOST_CHECK(s.data() == data); + FixedBytes<16> fb2_o; + ScaleDecoderStream sd((data)); + sd >> fb2_o; + BOOST_CHECK(fb2_i == fb2_o); +} + +BOOST_AUTO_TEST_CASE(testBytes22) +{ + std::string v = "0x000102030405060708090a0b0c0d0e0f10111213141516"; + FixedBytes<22> fb2_i(v); + ScaleEncoderStream s{}; + s << fb2_i; + bytes data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21}; + BOOST_CHECK(s.data() == data); + FixedBytes<22> fb2_o; + ScaleDecoderStream sd((data)); + sd >> fb2_o; + BOOST_CHECK(fb2_i == fb2_o); +} + +BOOST_AUTO_TEST_CASE(testBytes32) +{ + std::string v = "0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"; + FixedBytes<32> fb2_i(v); + ScaleEncoderStream s{}; + s << fb2_i; + bytes data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31}; + BOOST_CHECK(s.data() == data); + FixedBytes<32> fb2_o; + ScaleDecoderStream sd((data)); + sd >> fb2_o; + BOOST_CHECK(fb2_i == fb2_o); +} + +BOOST_AUTO_TEST_CASE(testTuple) +{ + { + uint8_t v1 = 1; + uint32_t v2 = 2; + uint8_t v3 = 3; + bytes expectedBytes = {1, 2, 0, 0, 0, 3}; + ScaleEncoderStream s; + s << std::make_tuple(v1, v2, v3); + BOOST_CHECK(s.data() == expectedBytes); + } + + { + bytes data = {1, 2, 0, 0, 0, 3}; + ScaleDecoderStream s2((data)); + using tuple_type = std::tuple; + tuple_type tuple{}; + s2 >> tuple; + auto&& [v1, v2, v3] = tuple; + BOOST_CHECK(v1 == 1); + BOOST_CHECK(v2 == 2); + BOOST_CHECK(v3 == 3); + } + + using tuple_type_t = std::tuple; + tuple_type_t tuple = std::make_tuple(uint8_t(1), uint16_t(3), uint8_t(2), uint32_t(4)); + auto encodeBytes = encode(tuple); + auto decodResult = decode((encodeBytes)); + BOOST_CHECK(decodResult == tuple); +} + +struct TestStruct +{ + std::string a; + int b; + inline bool operator==(const TestStruct& rhs) const { return a == rhs.a && b == rhs.b; } +}; +template > +Stream& operator<<(Stream& s, const TestStruct& test_struct) +{ + return s << test_struct.a << test_struct.b; +} + +template > +Stream& operator>>(Stream& s, TestStruct& test_struct) +{ + return s >> test_struct.a >> test_struct.b; +} + +BOOST_AUTO_TEST_CASE(ScaleConvenienceFuncsTest) +{ + TestStruct s1{"some_string", 42}; + auto encodedData = encode((s1)); + auto decodedResult = decode((encodedData)); + BOOST_CHECK(decodedResult == s1); + + std::string expectedString = "some_string"; + int expectedInt = 42; + encodedData = encode(expectedString, expectedInt); + decodedResult = decode(encodedData); + BOOST_CHECK(decodedResult.a == expectedString); + BOOST_CHECK(decodedResult.b == expectedInt); +} + +BOOST_AUTO_TEST_CASE(EncodeOptionalTest) +{ + // most simple case + { + ScaleEncoderStream s; + s << boost::optional{boost::none}; + BOOST_CHECK(s.data() == (bytes{0})); + } + // encode existing uint8_t + { + ScaleEncoderStream s; + s << boost::optional{1}; + BOOST_CHECK(s.data() == (bytes{1, 1})); + } + + { + // encode negative int8_t + ScaleEncoderStream s; + s << boost::optional{-1}; + BOOST_CHECK(s.data() == (bytes{1, 255})); + } + + // encode non-existing uint16_t + { + ScaleEncoderStream s; + s << boost::optional{boost::none}; + BOOST_CHECK(s.data() == (bytes{0})); + } + // encode existing uint16_t + { + ScaleEncoderStream s; + s << boost::optional{511}; + BOOST_CHECK(s.data() == (bytes{1, 255, 1})); + } + // encode existing uint32_t + { + ScaleEncoderStream s; + s << boost::optional{67305985}; + BOOST_CHECK(s.data() == (bytes{1, 1, 2, 3, 4})); + } +} + +BOOST_AUTO_TEST_CASE(DecodeOptionalTest) +{ + auto data = bytes{0, // first value + 1, 1, // second value + 1, 255, // third value + 0, // fourth value + 1, 255, 1, // fifth value + 1, 1, 2, 3, 4}; // sixth value + + auto stream = ScaleDecoderStream{data}; + // decode nullopt uint8_t + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == false); + } + // decode optional uint8_t + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == true); + BOOST_CHECK(*opt == 1); + } + // decode optional negative int8_t + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == true); + BOOST_CHECK(*opt == -1); + } + // decode nullopt uint16_t + // it requires 1 zero byte just like any other nullopt + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == false); + } + // decode optional uint16_t + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == true); + BOOST_CHECK(*opt == 511); + } + // decode optional uint32_t + { + boost::optional opt; + stream >> opt; + BOOST_CHECK(opt.has_value() == true); + BOOST_CHECK(*opt == 67305985); + } +} + +struct FourOptBools +{ + boost::optional b1; + boost::optional b2; + boost::optional b3; + boost::optional b4; +}; +template > +Stream& operator>>(Stream& s, FourOptBools& v) +{ + return s >> v.b1 >> v.b2 >> v.b3 >> v.b4; +} + +BOOST_AUTO_TEST_CASE(encodeOptionalBoolSuccessTest) +{ + std::vector> values = {true, false, boost::none}; + ScaleEncoderStream s; + for (auto&& v : values) + { + s << v; + } + BOOST_CHECK(s.data() == (bytes{1, 2, 0})); + auto data = bytes{0, 1, 2, 3}; + BOOST_CHECK_THROW(decode(data), ScaleDecodeException); + data = bytes{0, 1, 2, 1}; + using optbool = boost::optional; + auto res = decode(data); + BOOST_CHECK(res.b1 == boost::none); + BOOST_CHECK(res.b2 == optbool(true)); + BOOST_CHECK(res.b3 == optbool(false)); + BOOST_CHECK(res.b4 == optbool(true)); +} + +BOOST_AUTO_TEST_CASE(scaleDecodeStreamTest) +{ + auto data = bytes{0, 1, 2}; + auto stream = ScaleDecoderStream{data}; + + for (size_t i = 0; i < data.size(); i++) + { + uint8_t byteData = 255u; + byteData = stream.nextByte(); + BOOST_CHECK(byteData == data.at(i)); + } + BOOST_CHECK_THROW(stream.nextByte(), std::exception); + data = bytes{0, 1}; + auto stream2 = ScaleDecoderStream{data}; + BOOST_CHECK(stream2.hasMore(0) == true); + BOOST_CHECK(stream2.hasMore(1) == true); + BOOST_CHECK(stream2.hasMore(2) == true); + BOOST_CHECK(stream2.hasMore(3) == false); + stream2.nextByte(); + BOOST_CHECK(stream2.hasMore(1) == true); + BOOST_CHECK(stream2.hasMore(2) == false); + stream2.nextByte(); + BOOST_CHECK(stream2.hasMore(1) == false); + BOOST_CHECK_THROW(stream2.nextByte(), std::exception); +} + + +std::pair makeCompactPair(CompactInteger v, bytes m) +{ + return std::make_pair(CompactInteger(std::move(v)), std::move(m)); +} + +void testCompactEncodeAndDecode(std::pair _compactData) +{ + ScaleEncoderStream s; + // encode + const auto& [value, match] = _compactData; + s << value; + BOOST_CHECK(s.data() == match); + // decode + ScaleDecoderStream s2(gsl::make_span(match)); + CompactInteger v{}; + s2 >> v; + BOOST_CHECK(v == value); +} + +BOOST_AUTO_TEST_CASE(scaleCompactTest) +{ + auto compactPair = makeCompactPair(0, {0}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(1, {4}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(63, {252}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(64, {1, 1}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(255, {253, 3}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(511, {253, 7}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(16383, {253, 255}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(16384, {2, 0, 1, 0}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(65535, {254, 255, 3, 0}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(1073741823ul, {254, 255, 255, 255}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(CompactInteger("1234567890123456789012345678901234567890"), + {0b110111, 210, 10, 63, 206, 150, 95, 188, 172, 184, 243, 219, 192, 117, 32, 201, 160, 3}); + testCompactEncodeAndDecode(compactPair); + compactPair = makeCompactPair(1073741824, {3, 0, 0, 0, 64}); + testCompactEncodeAndDecode(compactPair); + compactPair = + makeCompactPair(CompactInteger("224945689727159819140526925384299092943484855915095831" + "655037778630591879033574393515952034305194542857496045" + "531676044756160413302774714984450425759043258192756735"), + *fromHexString("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + "FFFF")); + testCompactEncodeAndDecode(compactPair); +} + +BOOST_AUTO_TEST_CASE(testScaleEncodeFail) +{ + CompactInteger v(-1); + ScaleEncoderStream out{}; + BOOST_CHECK_THROW((out << v), std::exception); + BOOST_CHECK(out.data().size() == 0); // nothing was written to buffer + + CompactInteger v2( + "224945689727159819140526925384299092943484855915095831" + "655037778630591879033574393515952034305194542857496045" + "531676044756160413302774714984450425759043258192756736"); // 2^536 + + ScaleEncoderStream out2; + BOOST_CHECK_THROW((out2 << v2), std::exception); // value is too big, it is not encoded + BOOST_CHECK(out2.data().size() == 0); // nothing was written to buffer + + auto data = bytes{255, 255, 255, 255}; + BOOST_CHECK_THROW(decode(data), ScaleDecodeException); +} + +std::pair, bytes> makeVariantPair( + boost::variant v, bytes m) +{ + return std::pair, bytes>(std::move(v), std::move(m)); +} + +BOOST_AUTO_TEST_CASE(testScaleVariant) +{ + // encode uint8_t + ScaleEncoderStream s; + auto variantPair = makeVariantPair(uint8_t(1), {0, 1}); + const auto& [value, match] = variantPair; + s << value; + BOOST_CHECK(s.data() == match); + // decode uint8_t + ScaleDecoderStream s2(match); + boost::variant val{}; + s2 >> val; + BOOST_CHECK(boost::get(val) == 1); + + // encode uint32_t + variantPair = makeVariantPair(uint32_t(2), {1, 2, 0, 0, 0}); + ScaleEncoderStream s3; + const auto& [value2, match2] = variantPair; + s3 << value2; + BOOST_CHECK(s3.data() == match2); + ScaleDecoderStream s4(match2); + s4 >> val; + BOOST_CHECK(boost::get(val) == 2); +} + + +template +std::pair makeMatchPair(T value, const bytes& match) +{ + return std::make_pair(value, match); +} + +template +void testFixedWidthInteger(std::pair const& _matchPair, bool _check = true) +{ + auto [value, match] = _matchPair; + ScaleEncoderStream s; + s << value; + if (_check) + { + BOOST_CHECK(s.data() == match); + ScaleDecoderStream s2(match); + T v; + s2 >> v; + BOOST_CHECK(v == value); + } + std::cout << "##### value:" << std::to_string(value) << ", data:" << *toHexString(s.data()) + << std::endl; +} + +BOOST_AUTO_TEST_CASE(testFixedWidthIntegerCase) +{ + // Int8Test + std::cout << "##### int8_t test" << std::endl; + auto fixedWidthIntegerInt8 = makeMatchPair(0, {0}); + testFixedWidthInteger(fixedWidthIntegerInt8); + fixedWidthIntegerInt8 = makeMatchPair(-1, {255}); + testFixedWidthInteger(fixedWidthIntegerInt8); + fixedWidthIntegerInt8 = makeMatchPair(-128, {128}); + testFixedWidthInteger(fixedWidthIntegerInt8); + fixedWidthIntegerInt8 = makeMatchPair(-127, {129}); + testFixedWidthInteger(fixedWidthIntegerInt8); + fixedWidthIntegerInt8 = makeMatchPair(123, {123}); + testFixedWidthInteger(fixedWidthIntegerInt8); + fixedWidthIntegerInt8 = makeMatchPair(-15, {241}); + testFixedWidthInteger(fixedWidthIntegerInt8); + // UInt8Test + std::cout << "##### uint8_t test" << std::endl; + auto fixedWidthIntegerUInt8 = makeMatchPair(0, {0}); + testFixedWidthInteger(fixedWidthIntegerUInt8); + fixedWidthIntegerUInt8 = makeMatchPair(234, {234}); + testFixedWidthInteger(fixedWidthIntegerUInt8); + fixedWidthIntegerUInt8 = makeMatchPair(255, {255}); + testFixedWidthInteger(fixedWidthIntegerUInt8); + fixedWidthIntegerUInt8 = makeMatchPair(129, {255}); + testFixedWidthInteger(fixedWidthIntegerUInt8, false); + fixedWidthIntegerUInt8 = makeMatchPair(132, {255}); + testFixedWidthInteger(fixedWidthIntegerUInt8, false); + fixedWidthIntegerUInt8 = makeMatchPair(128, {255}); + testFixedWidthInteger(fixedWidthIntegerUInt8, false); + fixedWidthIntegerUInt8 = makeMatchPair(244, {255}); + testFixedWidthInteger(fixedWidthIntegerUInt8, false); + // Int16Test + std::cout << "##### int16_t test" << std::endl; + auto fixedWidthIntegerInt16 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(-32767, {1, 128}); + testFixedWidthInteger(fixedWidthIntegerInt16); + fixedWidthIntegerInt16 = makeMatchPair(-3, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(3, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(128, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(-128, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + + fixedWidthIntegerInt16 = makeMatchPair(-1, {255, 255}); + testFixedWidthInteger(fixedWidthIntegerInt16); + fixedWidthIntegerInt16 = makeMatchPair(32767, {255, 127}); + testFixedWidthInteger(fixedWidthIntegerInt16); + fixedWidthIntegerInt16 = makeMatchPair(12345, {57, 48}); + testFixedWidthInteger(fixedWidthIntegerInt16); + fixedWidthIntegerInt16 = makeMatchPair(-12345, {199, 207}); + testFixedWidthInteger(fixedWidthIntegerInt16); + fixedWidthIntegerInt16 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(252, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + fixedWidthIntegerInt16 = makeMatchPair(244, {}); + testFixedWidthInteger(fixedWidthIntegerInt16, false); + // UInt16Test + std::cout << "##### uint16_t test" << std::endl; + auto fixedWidthIntegerUInt16 = makeMatchPair(32767, {255, 127}); + testFixedWidthInteger(fixedWidthIntegerUInt16); + fixedWidthIntegerUInt16 = makeMatchPair(65535, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + fixedWidthIntegerUInt16 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + fixedWidthIntegerUInt16 = makeMatchPair(1, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + + fixedWidthIntegerUInt16 = makeMatchPair(128, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + fixedWidthIntegerUInt16 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + fixedWidthIntegerUInt16 = makeMatchPair(256, {}); + testFixedWidthInteger(fixedWidthIntegerUInt16, false); + fixedWidthIntegerUInt16 = makeMatchPair(12345, {57, 48}); + testFixedWidthInteger(fixedWidthIntegerUInt16); + // Int32Test + + std::cout << "##### int32_t test" << std::endl; + auto fixedWidthIntegerInt32 = makeMatchPair(2147483647l, {255, 255, 255, 127}); + testFixedWidthInteger(fixedWidthIntegerInt32); + fixedWidthIntegerInt32 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-3, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(3, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(252, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-252, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-255, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(256, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-256, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(257, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-257, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(65535, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-65535, {}); + testFixedWidthInteger(fixedWidthIntegerInt32, false); + fixedWidthIntegerInt32 = makeMatchPair(-1, {255, 255, 255, 255}); + testFixedWidthInteger(fixedWidthIntegerInt32); + fixedWidthIntegerInt32 = makeMatchPair(1, {1, 0, 0, 0}); + testFixedWidthInteger(fixedWidthIntegerInt32); + // Uint32Test + std::cout << "##### uint32_t test" << std::endl; + auto fixedWidthIntegerUInt32 = makeMatchPair(16909060ul, {4, 3, 2, 1}); + testFixedWidthInteger(fixedWidthIntegerUInt32); + fixedWidthIntegerUInt32 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(1, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(2, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(127, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(128, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(129, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(256, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(257, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(65535, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(65536, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(65537, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + fixedWidthIntegerUInt32 = makeMatchPair(2147483647ul, {}); + testFixedWidthInteger(fixedWidthIntegerUInt32, false); + + fixedWidthIntegerUInt32 = makeMatchPair(67305985, {1, 2, 3, 4}); + testFixedWidthInteger(fixedWidthIntegerUInt32); + // Int64Test + std::cout << "##### int64_t test" << std::endl; + auto fixedWidthIntegerInt64 = + makeMatchPair(578437695752307201ll, {1, 2, 3, 4, 5, 6, 7, 8}); + testFixedWidthInteger(fixedWidthIntegerInt64); + fixedWidthIntegerInt64 = makeMatchPair(-1, {255, 255, 255, 255, 255, 255, 255, 255}); + testFixedWidthInteger(fixedWidthIntegerInt64); + + fixedWidthIntegerInt64 = makeMatchPair(-1, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(1, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-127, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(127, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-128, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(128, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(129, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-129, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-255, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(256, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-256, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(257, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-257, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(65535, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-65535, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + + fixedWidthIntegerInt64 = makeMatchPair(65536, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-65536, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(65537, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-65537, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-2147483647, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(2147483647, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-2147483648, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(2147483648, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-2147483649, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(2147483649, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(67305985, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(-67305985, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + fixedWidthIntegerInt64 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerInt64, false); + + + // UInt64Test + std::cout << "##### uint64_t test" << std::endl; + auto fixedWidthIntegerUInt64 = + makeMatchPair(578437695752307201ull, {1, 2, 3, 4, 5, 6, 7, 8}); + testFixedWidthInteger(fixedWidthIntegerUInt64); + fixedWidthIntegerUInt64 = makeMatchPair(0, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(1, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(127, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(128, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(129, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(255, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(256, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(257, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(65535, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(65536, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(65537, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(2147483647, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(2147483648, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); + fixedWidthIntegerUInt64 = makeMatchPair(2147483649, {}); + testFixedWidthInteger(fixedWidthIntegerUInt64, false); +} + +BOOST_AUTO_TEST_CASE(testCollections) +{ + { + // 80 items of value 1 + bytes collection(80, 1); + auto match = bytes{65, 1}; // header + match.insert(match.end(), collection.begin(), collection.end()); + ScaleEncoderStream s; + s << collection; + auto&& out = s.data(); + BOOST_CHECK(out.size() == 82); + BOOST_CHECK(out == match); + } + + { + // test uint16_t collections + std::vector collectionInt16 = {1, 2, 3, 4}; + ScaleEncoderStream s; + s << collectionInt16; + auto&& out = s.data(); + // clang-format off + BOOST_CHECK(out == + (bytes{ + 16, // header + 1, 0, // first item + 2, 0, // second item + 3, 0, // third item + 4, 0 // fourth item + })); +} +{ + // test uint32_t collections + std::vector collectionUint32 = {50462976, 117835012, 185207048, + 252579084}; + ScaleEncoderStream s; + s << collectionUint32; + auto &&out = s.data(); + // clang-format off + BOOST_CHECK(out == + (bytes{ + 16, // header + 0, 1, 2, 3, // first item + 4, 5, 6, 7, // second item + 8, 9, 0xA, 0xB, // third item + 0xC, 0xD, 0xE, 0xF // fourth item + })); +} +{ + // test uint64_t collections +std::vector collection = {506097522914230528ull, + 1084818905618843912ull}; + ScaleEncoderStream s; + s << collection; + auto &&out = s.data(); + // clang-format off + BOOST_CHECK(out == + (bytes{ + 8, // header + 0, 1, 2, 3, // first item + 4, 5, 6, 7, // second item + 8, 9, 0xA, 0xB, // third item + 0xC, 0xD, 0xE, 0xF // fourth item + })); +} + +// test uint16_t collections +{ +std::vector collection; + auto length = 16384; + collection.reserve(length); + for (auto i = 0; i < length; ++i) { + collection.push_back(i % 256); + } + ScaleEncoderStream s; + s << collection; + auto &&out = s.data(); + BOOST_CHECK((size_t)out.size() == (size_t)(length * 2 + 4)); + // header takes 4 byte, + // first 4 bytes represent le-encoded value 2^16 + 2 + // which is compact-encoded value 2^14 = 16384 + auto stream = ScaleDecoderStream(gsl::make_span(out)); + CompactInteger res; + stream >> res; + BOOST_CHECK(res == 16384); + // now only 32768 bytes left in stream + BOOST_CHECK(stream.hasMore(32768)== true); + BOOST_CHECK(stream.hasMore(32769)== false); + for (auto i = 0; i < length; ++i) { + uint8_t data = 0u; + stream >> data; + BOOST_CHECK(data == i % 256); + stream >> data; + BOOST_CHECK(data == 0); + } + BOOST_CHECK(stream.hasMore(1) == false); +} + +{ +// test very long collections +/** + * @given very long collection of items of type uint8_t containing 2^20 items + * this number takes ~ 1 Mb of data + * where collection[i] == i % 256 + * @when encodeCollection is applied + * @then obtain byte array of length 1048576 + 4 bytes (header) bytes + * where first bytes repreent header, other are data itself + * where each byte after header == i%256 + */ +auto length = 1048576; // 2^20 + std::vector collection; + collection.reserve(length); + + for (auto i = 0; i < length; ++i) { + collection.push_back(i % 256); + } + ScaleEncoderStream s; + s << collection; + auto &&out = s.data(); + BOOST_CHECK((size_t)out.size() == (size_t)(length + 4)); + // header takes 4 bytes, + // first byte == (4-4) + 3 = 3, + // which means that number of items requires 4 bytes + // 3 next bytes are 0, and the last 4-th == 2^6 == 64 + // which is compact-encoded value 2^14 = 16384 + auto stream = ScaleDecoderStream(gsl::make_span(out)); + CompactInteger bi; + stream >> bi; + BOOST_CHECK(bi == 1048576); + + // now only 1048576 bytes left in stream + BOOST_CHECK(stream.hasMore(1048576) == true); + BOOST_CHECK(stream.hasMore(1048576 + 1) == false); + + for (auto i = 0; i < length; ++i) { + uint8_t data{0u}; + stream >> data; + BOOST_CHECK(data == i % 256); + } + BOOST_CHECK(stream.hasMore(1) ==false); +} +} + +template +void printData(T const& _data) +{ + ScaleEncoderStream encoder; + encoder << _data; + auto &&out = encoder.data(); + T decodedNumber; + ScaleDecoderStream decoder(gsl::make_span(out)); + decoder >> decodedNumber; + BOOST_CHECK(_data == decodedNumber); + std::cout << "#### value:" << _data << ", encoded:" << *toHexString(encoder.data()) << std::endl; +} +BOOST_AUTO_TEST_CASE(testU256) +{ + u256 number = 3453456346534; + ScaleEncoderStream encoder; + // encode + encoder << number; + // decode + u256 decodedNumber; + auto &&out = encoder.data(); + ScaleDecoderStream decoder(gsl::make_span(out)); + decoder >> decodedNumber; + std::cout << "#### number:" << number << ", decodedNumber:" << decodedNumber << std::endl; + BOOST_CHECK(number == decodedNumber); + + CompactInteger number2("123"); + ScaleEncoderStream encoder2; + encoder2 << number2; + auto &&out2 = encoder2.data(); + ScaleDecoderStream decoder2(gsl::make_span(out2)); + CompactInteger decodedNumber2; + decoder2 >> decodedNumber2; + std::cout << "#### number2:" << number2 << ", decodedNumber2:" << decodedNumber2 << std::endl; + BOOST_CHECK(number2 == decodedNumber2); + + std::cout << "##### u256 test" << std::endl; + printData((u256)0); + printData((u256)1); + printData((u256)127); + printData((u256)128); + printData((u256)129); + printData((u256)255); + printData((u256)256); + printData((u256)257); + printData((u256)65535); + printData((u256)65536); + printData((u256)65537); + printData((u256)2147483647); + printData((u256)2147483648); + printData((u256)2147483649); + printData((u256)123123122147483649); + std::cout << "##### u256 test end" << std::endl; +} +BOOST_AUTO_TEST_CASE(tests256) +{ + s256 number = 3453456346534; + ScaleEncoderStream encoder; + // encode + encoder << number; + // decode + s256 decodedNumber; + auto &&out = encoder.data(); + ScaleDecoderStream decoder(gsl::make_span(out)); + decoder >> decodedNumber; + std::cout << "#### number:" << number << ", decodedNumber:" << decodedNumber << std::endl; + BOOST_CHECK(number == decodedNumber); + + + s256 number2 = -3453456346534; + ScaleEncoderStream encoder2; + // encode + encoder2 << number2; + // decode + s256 decodedNumber2; + auto &&out2 = encoder2.data(); + ScaleDecoderStream decoder2(gsl::make_span(out2)); + decoder2 >> decodedNumber2; + std::cout << "#### number2:" << number2 << ", decodedNumber2:" << decodedNumber2 << std::endl; + BOOST_CHECK(number2 == decodedNumber2); + + std::cout << "##### s256 test" << std::endl; + printData((s256)0); + printData((s256)1); + printData((s256)127); + printData((s256)128); + printData((s256)129); + printData((s256)255); + printData((s256)256); + printData((s256)257); + printData((s256)65535); + printData((s256)65536); + printData((s256)65537); + printData((s256)2147483647); + printData((s256)2147483648); + printData((s256)2147483649); + printData((s256)123123122147483649); + + printData((s256)-1); + printData((s256)-127); + printData((s256)-128); + printData((s256)-129); + printData((s256)-255); + printData((s256)-256); + printData((s256)-257); + printData((s256)-65535); + printData((s256)-65536); + printData((s256)-65537); + printData((s256)-2147483647); + printData((s256)-2147483648); + printData((s256)-2147483649); + printData((s256)-123123122147483649); + std::cout << "##### s256 test end" << std::endl; +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-codec/test/unittests/main/main.cpp b/bcos-codec/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-codec/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-crypto/CMakeLists.txt b/bcos-crypto/CMakeLists.txt new file mode 100644 index 0000000..94e46ea --- /dev/null +++ b/bcos-crypto/CMakeLists.txt @@ -0,0 +1,22 @@ + +project(bcos-crypto VERSION ${VERSION}) + +file(GLOB_RECURSE ALL_SRCS bcos-crypto/*.cpp) +set(LIB_LIST OpenSSL::SSL OpenSSL::Crypto wedprcrypto::crypto wedprcrypto::zkp bcos-utilities bcos-concepts TBB::tbb SDF) + +find_package(OpenSSL REQUIRED) +find_package(TBB REQUIRED) +find_package(wedprcrypto REQUIRED) + +add_library(bcos-crypto STATIC ${ALL_SRCS}) +target_link_libraries(bcos-crypto PUBLIC ${LIB_LIST}) + +if(TESTS) + enable_testing() + add_subdirectory(test) + add_subdirectory(demo) +endif() + +include(GNUInstallDirs) +install(TARGETS bcos-crypto EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-crypto" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/ChecksumAddress.h b/bcos-crypto/bcos-crypto/ChecksumAddress.h new file mode 100644 index 0000000..1369787 --- /dev/null +++ b/bcos-crypto/bcos-crypto/ChecksumAddress.h @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ChecksumAddress.h + * @author: xingqiangbai + * @date: 2021-07-30 + */ + +#pragma once + +#include +#include +#include +#include + +namespace bcos +{ +inline void toChecksumAddress(std::string& _addr, const std::string_view& addressHashHex) +{ + auto convertHexCharToInt = [](char byte) { + int ret = 0; + if (byte >= '0' && byte <= '9') + { + ret = byte - '0'; + } + else if (byte >= 'a' && byte <= 'f') + { + ret = byte - 'a' + 10; + } + else if (byte >= 'A' && byte <= 'F') + { + ret = byte - 'A' + 10; + } + return ret; + }; + for (size_t i = 0; i < _addr.size(); ++i) + { + if (isdigit(_addr[i])) + { + continue; + } + if (convertHexCharToInt(addressHashHex[i]) >= 8) + { + _addr[i] = toupper(_addr[i]); + } + } +} + +inline void toCheckSumAddress(std::string& _hexAddress, crypto::Hash::Ptr _hashImpl) +{ + boost::algorithm::to_lower(_hexAddress); + toChecksumAddress(_hexAddress, _hashImpl->hash(_hexAddress).hex()); +} + +inline void toAddress(std::string& _hexAddress, [[maybe_unused]] crypto::Hash::Ptr _hashImpl) +{ + boost::algorithm::to_lower(_hexAddress); + // toChecksumAddress(_hexAddress, _hashImpl->hash(_hexAddress).hex()); notice : + // toChecksumAddress must be used before rpc return +} + + +inline std::string toChecksumAddressFromBytes( + const std::string_view& _AddressBytes, crypto::Hash::Ptr _hashImpl) +{ + auto hexAddress = *toHexString(_AddressBytes); + toAddress(hexAddress, _hashImpl); + return hexAddress; +} + +inline std::string newEVMAddress( + bcos::crypto::Hash::Ptr _hashImpl, int64_t blockNumber, int64_t contextID, int64_t seq) +{ + auto hash = _hashImpl->hash(boost::lexical_cast(blockNumber) + "_" + + boost::lexical_cast(contextID) + "_" + + boost::lexical_cast(seq)); + + std::string hexAddress; + hexAddress.reserve(40); + boost::algorithm::hex(hash.data(), hash.data() + 20, std::back_inserter(hexAddress)); + + toAddress(hexAddress, _hashImpl); + + return hexAddress; +} + + +inline std::string newEVMAddress(bcos::crypto::Hash::Ptr _hashImpl, const std::string_view& _sender, + bytesConstRef _init, u256 const& _salt) +{ + auto hash = + _hashImpl->hash(bytes{0xff} + _sender + toBigEndian(_salt) + _hashImpl->hash(_init)); + + std::string hexAddress; + hexAddress.reserve(40); + boost::algorithm::hex(hash.data(), hash.data() + 20, std::back_inserter(hexAddress)); + + toAddress(hexAddress, _hashImpl); + + return hexAddress; +} + +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/TrivialObject.h b/bcos-crypto/bcos-crypto/TrivialObject.h new file mode 100644 index 0000000..e5a8dbc --- /dev/null +++ b/bcos-crypto/bcos-crypto/TrivialObject.h @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief concepts for crypto + * @file Concepts.h + * @author: ancelmo + * @date 2022-05-06 + */ +#pragma once + +#include +#include +#include +#include + +namespace bcos::crypto::trivial +{ + +template +concept Value = std::is_trivial_v> && + !std::is_pointer_v>; + +template +concept Range = RANGES::contiguous_range> && + std::is_trivial_v>>; + +template +concept Object = Value || Range; + +constexpr size_t size(Object auto&& obj) +{ + auto view = toView(std::forward(obj)); + return view.size(); +} + +constexpr auto toView(trivial::Object auto&& object) +{ + using RawType = std::remove_cvref_t; + + if constexpr (trivial::Value) + { + using ByteType = + std::conditional_t>, + std::byte const, std::byte>; + std::span view{(ByteType*)&object, sizeof(object)}; + + return view; + } + else if constexpr (trivial::Range) + { + using ByteType = std::conditional_t< + std::is_const_v>>, + std::byte const, std::byte>; + std::span view{(ByteType*)std::data(object), + sizeof(std::remove_cvref_t>) * RANGES::size(object)}; + + return view; + } + else + { + static_assert(!sizeof(object), "Unsupported type!"); + } +} + +template +concept DynamicRange = requires(Range range, size_t newSize) +{ + requires RANGES::range; + range.resize(newSize); + range.reserve(newSize); +}; + +void resizeTo(RANGES::range auto& out, size_t size) +{ + if ((size_t)RANGES::size(out) < size) + { + if constexpr (DynamicRange>) + { + out.resize(size); + return; + } + + BOOST_THROW_EXCEPTION(std::runtime_error("Not enough output space!")); + } +} + +} // namespace bcos::crypto::trivial \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/digestsign/DigestSign.h b/bcos-crypto/bcos-crypto/digestsign/DigestSign.h new file mode 100644 index 0000000..e832700 --- /dev/null +++ b/bcos-crypto/bcos-crypto/digestsign/DigestSign.h @@ -0,0 +1,19 @@ +#pragma once +#include "../TrivialObject.h" +#include +#include +#include + +namespace bcos::crypto::digestsign +{ + +template +concept DigestSign = requires(DigestSignType digestSign) +{ + typename DigestSignType::Key; + typename DigestSignType::Sign; + + digestSign.sign(typename DigestSignType::Key const& key, trivial::Object auto const& hash); +}; + +} // namespace bcos::crypto::digestsign \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/digestsign/OpenSSLDigestSign.h b/bcos-crypto/bcos-crypto/digestsign/OpenSSLDigestSign.h new file mode 100644 index 0000000..ba8fc2f --- /dev/null +++ b/bcos-crypto/bcos-crypto/digestsign/OpenSSLDigestSign.h @@ -0,0 +1,101 @@ +#pragma once + +#include "DigestSign.h" +#include +#include +#include +#include + +namespace bcos::crypto::digestsign::openssl +{ + +enum DigestSignType +{ + SM2 +}; + +template +class OpenSSLDigestSign +{ +private: + constexpr static int id() + { + if constexpr (digestSignType == SM2) { return EVP_PKEY_SM2; } + else { static_assert(!sizeof(OpenSSLDigestSign), "Unknown DigestSignType!"); } + } + + struct EVPContext + { + EVPContext() : m_context(EVP_PKEY_CTX_new_id(id(), nullptr)) {} + + EVP_PKEY_CTX* context() { return m_context.get(); } + struct Deleter + { + void operator()(EVP_PKEY_CTX* p) const { EVP_PKEY_CTX_free(p); } + }; + std::unique_ptr m_context; + }; + +public: + constexpr static size_t KEY_SIZE = 32; + constexpr static size_t SIGN_SIZE = 32; + + class Key + { + public: + Key() : m_key{EVP_PKEY_new()} {}; + + Key(const Key&) = delete; + Key(Key&&) noexcept = default; + Key& operator=(const Key&) = delete; + Key& operator=(Key&&) noexcept = default; + ~Key() = default; + + private: + Key(EVP_PKEY* pkey) : m_key{pkey} {}; + + const EVP_PKEY* pkey() const { return m_key.get(); } + EVP_PKEY* pkey() { return m_key.get(); } + + void setPKey(EVP_PKEY* pkey) { m_key.reset(pkey); } + + struct Deleter + { + void operator()(EVP_PKEY* p) const { EVP_PKEY_free(p); } + }; + std::unique_ptr m_key; + }; + + struct Sign : public std::array + { + using std::array::array; + }; + + class KeyGenerator + { + public: + void gen(Key& key) + { + if (!EVP_PKEY_keygen_init(m_context.context())) [[unlikely]] + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_PKEY_keygen_init error!"}); + + EVP_PKEY** ppkey = nullptr; + if (!EVP_PKEY_keygen(m_context.context(), ppkey)) [[unlikely]] + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_PKEY_keygen error!"}); + + key.setPKey(*ppkey); + } + + private: + EVPContext m_context; + }; + + class Encrypter + { + }; +}; + +using OpenSSL_SM2_DigestSign = OpenSSLDigestSign; + +static_assert(DigestSign, "Assert OpenSSLHasher type"); +} // namespace bcos::crypto::digestsign::openssl \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/AESCrypto.cpp b/bcos-crypto/bcos-crypto/encrypt/AESCrypto.cpp new file mode 100644 index 0000000..7d691d0 --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/AESCrypto.cpp @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for AES encryption/decryption + * @file AESCrypto.cpp + * @date 2021.04.03 + * @author yujiechen + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +bytesPointer bcos::crypto::AESEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize) +{ + CInputBuffer plainText{(const char*)_plainData, _plainDataSize}; + + FixedBytes fixedKeyData(_key, _keySize); + CInputBuffer key{(const char*)fixedKeyData.data(), AES_KEY_SIZE}; + + FixedBytes FixedIVData(_ivData, _ivDataSize); + CInputBuffer ivData{(const char*)FixedIVData.data(), AES_IV_DATA_SIZE}; + + auto encryptedData = std::make_shared(); + size_t ciperDataSize = _plainDataSize + AES_MAX_PADDING_SIZE; + encryptedData->resize(ciperDataSize); + COutputBuffer encryptResult{(char*)encryptedData->data(), ciperDataSize}; + + if (wedpr_aes256_encrypt(&plainText, &key, &ivData, &encryptResult) == WEDPR_ERROR) + { + BOOST_THROW_EXCEPTION(EncryptException() << errinfo_comment("AES encrypt exception")); + } + encryptedData->resize(encryptResult.len); + return encryptedData; +} + +bytesPointer bcos::crypto::AESDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize) +{ + CInputBuffer ciper{(const char*)_cipherData, _cipherDataSize}; + + FixedBytes fixedKeyData(_key, _keySize); + CInputBuffer key{(const char*)fixedKeyData.data(), AES_KEY_SIZE}; + + FixedBytes fixedIVData(_ivData, _ivDataSize); + CInputBuffer iv{(const char*)fixedIVData.data(), AES_IV_DATA_SIZE}; + + auto decodedData = std::make_shared(); + auto plainDataSize = _cipherDataSize; + decodedData->resize(plainDataSize); + COutputBuffer decodedResult{(char*)decodedData->data(), plainDataSize}; + + if (wedpr_aes256_decrypt(&ciper, &key, &iv, &decodedResult) == WEDPR_ERROR) + { + BOOST_THROW_EXCEPTION(DecryptException() << errinfo_comment("AES decrypt exception")); + } + decodedData->resize(decodedResult.len); + + return decodedData; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/AESCrypto.h b/bcos-crypto/bcos-crypto/encrypt/AESCrypto.h new file mode 100644 index 0000000..0dba971 --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/AESCrypto.h @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for AES encryption/decryption + * @file AESCrypto.h + * @date 2021.04.03 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +const int AES_MAX_PADDING_SIZE = 26; +const int AES_KEY_SIZE = 32; +const int AES_IV_DATA_SIZE = 16; +bytesPointer AESEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize); +bytesPointer AESDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize); +class AESCrypto : public SymmetricEncryption +{ +public: + using Ptr = std::shared_ptr; + AESCrypto() = default; + ~AESCrypto() override {} + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricEncrypt(_plainData, _plainDataSize, _key, _keySize, _key, AES_IV_DATA_SIZE); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricDecrypt( + _cipherData, _cipherDataSize, _key, _keySize, _key, AES_IV_DATA_SIZE); + } + + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return AESEncrypt(_plainData, _plainDataSize, _key, _keySize, _ivData, _ivDataSize); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return AESDecrypt(_cipherData, _cipherDataSize, _key, _keySize, _ivData, _ivDataSize); + } +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/Exceptions.h b/bcos-crypto/bcos-crypto/encrypt/Exceptions.h new file mode 100644 index 0000000..9dd9a25 --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/Exceptions.h @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the exceptions for encryption/decryption algorithm of bcos-crypto + * @file Execptions.h + * @date 2021.04.05 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +DERIVE_BCOS_EXCEPTION(EncryptException); +DERIVE_BCOS_EXCEPTION(DecryptException); +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.cpp b/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.cpp new file mode 100644 index 0000000..765b7c9 --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.cpp @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for Hsm SM4 encryption/decryption + * @file HsmSM4Crypto.cpp + * @date 2022.11.04 + * @author lucasli + */ +#include +#include +#include + +#include "hsm-crypto/hsm/CryptoProvider.h" +#include "hsm-crypto/hsm/SDFCryptoProvider.h" + +using namespace hsm; +using namespace bcos; +using namespace bcos::crypto; + +bcos::bytesPointer HsmSM4Crypto::HsmSM4Encrypt(const unsigned char* _plainData, + size_t _plainDataSize, const unsigned char* _key, size_t, const unsigned char* _ivData, size_t) +{ + // note: parm _ivDataSize and _keySize wasn't used + // Add padding + int padding = _plainDataSize % 16; + int nSize = 16 - padding; + int inDataVLen = _plainDataSize + nSize; + bytes inDataV(inDataVLen); + memcpy(inDataV.data(), _plainData, _plainDataSize); + memset(inDataV.data() + _plainDataSize, 0, nSize); + + // Encrypt + Key key = Key(); + std::shared_ptr> pbKeyValue = + std::make_shared>(_key, _key + 16); + key.setSymmetricKey(pbKeyValue); + CryptoProvider& provider = SDFCryptoProvider::GetInstance(m_hsmLibPath); + + unsigned int size; + auto encryptedData = std::make_shared(); + encryptedData->resize(inDataVLen); + provider.Encrypt(key, SM4_CBC, (unsigned char*)_ivData, (unsigned char*)inDataV.data(), + inDataVLen, (unsigned char*)encryptedData->data(), &size); + CRYPTO_LOG(DEBUG) << "[HsmSM4Crypto::Encrypt] Encrypt Success"; + return encryptedData; +} + +bcos::bytesPointer HsmSM4Crypto::HsmSM4Decrypt(const unsigned char* _cipherData, + size_t _cipherDataSize, const unsigned char* _key, size_t, const unsigned char* _ivData, size_t) +{ + auto decryptedData = std::make_shared(); + decryptedData->resize(_cipherDataSize); + Key key = Key(); + std::shared_ptr> pbKeyValue = + std::make_shared>(_key, _key + 16); + key.setSymmetricKey(pbKeyValue); + CryptoProvider& provider = SDFCryptoProvider::GetInstance(m_hsmLibPath); + + unsigned int size; + provider.Decrypt(key, SM4_CBC, (unsigned char*)_ivData, _cipherData, _cipherDataSize, + (unsigned char*)decryptedData->data(), &size); + CRYPTO_LOG(DEBUG) << "[HsmSM4Crypto::Decrypt] Decrypt Success"; + return decryptedData; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.h b/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.h new file mode 100644 index 0000000..f9da64d --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/HsmSM4Crypto.h @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for HSM sm4 encryption/decryption + * @file HsmSM4Crypto.h + * @date 2022.11.04 + * @author lucasli + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +class HsmSM4Crypto : public SymmetricEncryption +{ +public: + using Ptr = std::shared_ptr; + HsmSM4Crypto(std::string _libPath) { m_hsmLibPath = _libPath; } + ~HsmSM4Crypto() override {} + + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricEncrypt(_plainData, _plainDataSize, _key, _keySize, _key, 16); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricDecrypt(_cipherData, _cipherDataSize, _key, _keySize, _key, 16); + } + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return HsmSM4Encrypt(_plainData, _plainDataSize, _key, _keySize, _ivData, _ivDataSize); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return HsmSM4Decrypt(_cipherData, _cipherDataSize, _key, _keySize, _ivData, _ivDataSize); + } + + bytesPointer HsmSM4Encrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize); + bytesPointer HsmSM4Decrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize); + +private: + std::string m_hsmLibPath; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.cpp b/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.cpp new file mode 100644 index 0000000..f3e580a --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.cpp @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for SM4 encryption/decryption + * @file SM4Crypto.cpp + * @date 2021.04.03 + * @author yujiechen + */ +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::crypto; + +bytesPointer bcos::crypto::SM4Encrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize) +{ + CInputBuffer plain{(const char*)_plainData, _plainDataSize}; + + FixedBytes fixedKeyData(_key, _keySize); + CInputBuffer key{(const char*)fixedKeyData.data(), SM4_KEY_SIZE}; + + FixedBytes fixedIVData(_ivData, _ivDataSize); + CInputBuffer iv{(const char*)fixedIVData.data(), SM4_IV_SIZE}; + + auto encryptedData = std::make_shared(); + encryptedData->resize(_plainDataSize + SM4_MAX_PADDING_LEN); + COutputBuffer ciper{(char*)encryptedData->data(), encryptedData->size()}; + + if (wedpr_sm4_encrypt(&plain, &key, &iv, &ciper) == WEDPR_ERROR) + { + BOOST_THROW_EXCEPTION(EncryptException() << errinfo_comment("SM4 encrypt exception")); + } + encryptedData->resize(ciper.len); + return encryptedData; +} + + +bytesPointer bcos::crypto::SM4Decrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize) +{ + CInputBuffer cipher{(const char*)_cipherData, _cipherDataSize}; + + FixedBytes fixedKeyData(_key, _keySize); + CInputBuffer key{(const char*)fixedKeyData.data(), SM4_KEY_SIZE}; + + FixedBytes fixedIVData(_ivData, _ivDataSize); + CInputBuffer iv{(const char*)fixedIVData.data(), SM4_IV_SIZE}; + + auto decryptedData = std::make_shared(); + decryptedData->resize(_cipherDataSize); + COutputBuffer plain{(char*)decryptedData->data(), decryptedData->size()}; + + if (wedpr_sm4_decrypt(&cipher, &key, &iv, &plain) == WEDPR_ERROR) + { + BOOST_THROW_EXCEPTION(DecryptException() << errinfo_comment("SM4 decrypt exception")); + } + decryptedData->resize(plain.len); + return decryptedData; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.h b/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.h new file mode 100644 index 0000000..06cf599 --- /dev/null +++ b/bcos-crypto/bcos-crypto/encrypt/SM4Crypto.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm4 encryption/decryption + * @file SM4Crypto.h + * @date 2021.04.03 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +const int SM4_MAX_PADDING_LEN = 26; +const int SM4_KEY_SIZE = 16; +const int SM4_IV_SIZE = 16; +bytesPointer SM4Encrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize); +bytesPointer SM4Decrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, size_t _ivDataSize); +class SM4Crypto : public SymmetricEncryption +{ +public: + using Ptr = std::shared_ptr; + SM4Crypto() = default; + ~SM4Crypto() override {} + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricEncrypt(_plainData, _plainDataSize, _key, _keySize, _key, 16); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize) override + { + return symmetricDecrypt(_cipherData, _cipherDataSize, _key, _keySize, _key, 16); + } + + bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return SM4Encrypt(_plainData, _plainDataSize, _key, _keySize, _ivData, _ivDataSize); + } + bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) override + { + return SM4Decrypt(_cipherData, _cipherDataSize, _key, _keySize, _ivData, _ivDataSize); + } +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hash/Keccak256.h b/bcos-crypto/bcos-crypto/hash/Keccak256.h new file mode 100644 index 0000000..5edf597 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hash/Keccak256.h @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Hash algorithm of keccak256 + * @file Keccak256.h + * @date 2021.03.04 + * @author yujiechen + */ +#pragma once + +#include +#include + +namespace bcos::crypto +{ + +inline HashType keccak256Hash(bytesConstRef _data) +{ + bcos::crypto::hasher::openssl::OpenSSL_Keccak256_Hasher hasher; + hasher.update(_data); + + HashType out; + hasher.final(out); + return out; +} + +class Keccak256 : public Hash +{ +public: + using Ptr = std::shared_ptr; + Keccak256() { setHashImplType(HashImplType::Keccak256Hash); } + ~Keccak256() override {} + HashType hash(bytesConstRef _data) override { return keccak256Hash(_data); } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{ + bcos::crypto::hasher::openssl::OpenSSL_Keccak256_Hasher{}}; + } +}; +} // namespace bcos::crypto diff --git a/bcos-crypto/bcos-crypto/hash/SM3.h b/bcos-crypto/bcos-crypto/hash/SM3.h new file mode 100644 index 0000000..39da67c --- /dev/null +++ b/bcos-crypto/bcos-crypto/hash/SM3.h @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Hash algorithm of sm3 + * @file SM3.h + * @date 2021.03.04 + * @author yujiechen + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace crypto +{ +HashType inline sm3Hash(bytesConstRef _data) +{ + hasher::openssl::OpenSSL_SM3_Hasher hasher; + hasher.update(_data); + + HashType out; + hasher.final(out); + return out; +} +class SM3 : public Hash +{ +public: + using Ptr = std::shared_ptr; + SM3() { setHashImplType(HashImplType::Sm3Hash); } + virtual ~SM3() {} + HashType hash(bytesConstRef _data) override { return sm3Hash(_data); } + + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher{}}; + }; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/hash/Sha256.h b/bcos-crypto/bcos-crypto/hash/Sha256.h new file mode 100644 index 0000000..0e95df8 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hash/Sha256.h @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Hash algorithm of sha3 + * @file Sha3.h + * @date 2021.04.01 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +HashType inline sha256Hash(bytesConstRef _data) +{ + hasher::openssl::OpenSSL_SHA2_256_Hasher hasher; + hasher.update(_data); + + HashType out; + hasher.final(out); + return out; +} +class Sha256 : public Hash +{ +public: + using Ptr = std::shared_ptr; + Sha256() { setHashImplType(HashImplType::Sha3); } + virtual ~Sha256() {} + HashType hash(bytesConstRef _data) override { return sha256Hash(_data); } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{ + bcos::crypto::hasher::openssl::OpenSSL_SHA3_256_Hasher{}}; + }; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hash/Sha3.h b/bcos-crypto/bcos-crypto/hash/Sha3.h new file mode 100644 index 0000000..2bafca7 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hash/Sha3.h @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Hash algorithm of sha3 + * @file Sha3.h + * @date 2021.04.01 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +HashType inline sha3Hash(bytesConstRef _data) +{ + hasher::openssl::OpenSSL_SHA3_256_Hasher hasher; + hasher.update(_data); + + HashType out; + hasher.final(out); + return out; +} + +class Sha3 : public Hash +{ +public: + using Ptr = std::shared_ptr; + Sha3() { setHashImplType(HashImplType::Sha3); } + virtual ~Sha3() {} + HashType hash(bytesConstRef _data) override { return sha3Hash(_data); } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{ + bcos::crypto::hasher::openssl::OpenSSL_SHA3_256_Hasher{}}; + }; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hasher/AnyHasher.h b/bcos-crypto/bcos-crypto/hasher/AnyHasher.h new file mode 100644 index 0000000..add67a6 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hasher/AnyHasher.h @@ -0,0 +1,12 @@ +#pragma once +#include "OpenSSLHasher.h" +#include + +namespace bcos::crypto::hasher +{ + +// Type erasure hasher +using AnyHasher = std::variant; + +} // namespace bcos::crypto::hasher \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hasher/Hasher.h b/bcos-crypto/bcos-crypto/hasher/Hasher.h new file mode 100644 index 0000000..f9a0af8 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hasher/Hasher.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include +#include +#include + +namespace bcos::crypto::hasher +{ + +template +concept Hasher = requires(HasherType hasher, std::span out) +{ + HasherType{}; + HasherType::HASH_SIZE > 0; + hasher.update(std::span{}); + hasher.final(out); +}; + +auto final(Hasher auto& hasher) +{ + std::array::HASH_SIZE> out; + hasher.final(out); + return out; +} + +} // namespace bcos::crypto::hasher \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hasher/IPPCryptoHasher.h b/bcos-crypto/bcos-crypto/hasher/IPPCryptoHasher.h new file mode 100644 index 0000000..2c4d929 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hasher/IPPCryptoHasher.h @@ -0,0 +1,98 @@ +#ifdef ENABLE_IPPCRYPTO +#pragma once + +#include "Hasher.h" +#include "ippcp.h" +#include +#include +#include + +namespace bcos::crypto::ippcrypto +{ + +enum HasherType +{ + SM3_256, + SHA3_256, + SHA2_256, + Keccak256, +}; + +template +class IPPCryptoHasher : public bcos::crypto::HasherBase> +{ +public: + IPPCryptoHasher() + { + int hashStateSize; + if (ippsHashGetSize_rmf(&hashStateSize) != ippStsNoErr) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"ippsHashGetSize_rmf error!"}); + } + + const IppsHashMethod* hashMethod; + if constexpr (hasherType == SM3_256) + { + hashMethod = ippsHashMethod_SM3(); + } + else if constexpr (hasherType == SHA2_256) + { + hashMethod = ippsHashMethod_SHA256_TT(); + } + else + { + static_assert(!sizeof(*this), "Unknown Hasher Type!"); + } + + m_hashState.reset(new std::byte[hashStateSize]); + if (ippsHashInit_rmf(hashState(), hashMethod) != ippStsNoErr) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"ippsHashInit_rmf error!"}); + } + } + + void impl_update(std::span in) + { + if (ippsHashUpdate_rmf(reinterpret_cast(in.data()), + static_cast(in.size()), hashState()) != ippStsNoErr) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"ippsHashUpdate_rmf error!"}); + } + } + + void impl_final(std::span out) + { + if (out.size() < HASH_SIZE) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Output size too short!"}); + } + + if (ippsHashFinal_rmf(reinterpret_cast(out.data()), hashState()) != ippStsNoErr) + [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"ippsHashFinal_rmf error!"}); + } + } + + constexpr static size_t impl_hashSize() noexcept { return HASH_SIZE; } + +private: + constexpr static size_t HASH_SIZE = 32; + + IppsHashState_rmf* hashState() + { + return reinterpret_cast(m_hashState.get()); + } + + std::unique_ptr m_hashState; +}; + +using IPPCrypto_SM3_256_Hasher = IPPCryptoHasher; +using IPPCrypto_SHA2_256_Hasher = IPPCryptoHasher; + +static_assert(Hasher, "Assert Hasher type"); +static_assert(Hasher, "Assert Hasher type"); + +} // namespace bcos::crypto::ippcrypto + +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/hasher/OpenSSLHasher.h b/bcos-crypto/bcos-crypto/hasher/OpenSSLHasher.h new file mode 100644 index 0000000..4a97ae0 --- /dev/null +++ b/bcos-crypto/bcos-crypto/hasher/OpenSSLHasher.h @@ -0,0 +1,150 @@ +#pragma once + +#include "../TrivialObject.h" +#include "Hasher.h" +#include +#include +#include +#include +#include +#include + +namespace bcos::crypto::hasher::openssl +{ +enum HasherType +{ + SM3, + SHA3_256, + SHA2_256, + Keccak256 +}; + +template +class OpenSSLHasher +{ +public: + OpenSSLHasher() : m_mdCtx(EVP_MD_CTX_new()), m_init(false) + { + if (!m_mdCtx) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_MD_CTX_new error!"}); + } + } + + OpenSSLHasher(const OpenSSLHasher&) = delete; + OpenSSLHasher(OpenSSLHasher&&) = default; + OpenSSLHasher& operator=(const OpenSSLHasher&) = delete; + OpenSSLHasher& operator=(OpenSSLHasher&&) = default; + ~OpenSSLHasher() = default; + + constexpr static size_t HASH_SIZE = 32; + + void init() + { + auto md = chooseMD(); + + if (!EVP_DigestInit(m_mdCtx.get(), md)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_DigestInit error!"}); + } + + // Keccak256 special padding + if constexpr (hasherType == Keccak256) + { + struct KECCAK1600_CTX + { + uint64_t A[5][5]; + size_t block_size; + size_t md_size; + size_t num; + unsigned char buf[1600 / 8 - 32]; + unsigned char pad; + }; + + struct EVP_MD_CTX_Keccak256 + { + const EVP_MD* digest; + ENGINE* engine; + unsigned long flags; + + KECCAK1600_CTX* md_data; + }; + + auto keccak256 = reinterpret_cast(m_mdCtx.get()); + if (!keccak256->md_data || keccak256->md_data->pad != 0x06) // The sha3 origin pad + { + BOOST_THROW_EXCEPTION(std::runtime_error{ + "OpenSSL KECCAK1600_CTX layout error! Maybe untested openssl version"}); + } + keccak256->md_data->pad = 0x01; + } + } + + void update(bcos::crypto::trivial::Object auto const& in) + { + if (!m_init) + { + init(); + m_init = true; + } + auto view = bcos::crypto::trivial::toView(std::forward(in)); + + if (!EVP_DigestUpdate(m_mdCtx.get(), view.data(), view.size())) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_DigestUpdate error!"}); + } + } + + void final(bcos::crypto::trivial::Object auto& out) + { + m_init = false; + bcos::crypto::trivial::resizeTo(out, HASH_SIZE); + auto view = bcos::crypto::trivial::toView(std::forward(out)); + + if (!EVP_DigestFinal(m_mdCtx.get(), reinterpret_cast(view.data()), nullptr)) + [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"EVP_DigestFinal error!"}); + } + } + + constexpr const EVP_MD* chooseMD() + { + if constexpr (hasherType == SM3) + { + return EVP_sm3(); + } + else if constexpr (hasherType == SHA3_256 || hasherType == Keccak256) + { + return EVP_sha3_256(); + } + else if constexpr (hasherType == SHA2_256) + { + return EVP_sha256(); + } + else + { + static_assert(!sizeof(*this), "Unknown EVP Type!"); + } + } + + struct Deleter + { + void operator()(EVP_MD_CTX* p) const { EVP_MD_CTX_free(p); } + }; + + std::unique_ptr m_mdCtx; + bool m_init; +}; + +using OpenSSL_SHA3_256_Hasher = OpenSSLHasher; +using OpenSSL_SHA2_256_Hasher = OpenSSLHasher; +using OpenSSL_SM3_Hasher = OpenSSLHasher; +using OpenSSL_Keccak256_Hasher = OpenSSLHasher; + +static_assert(Hasher, "Assert OpenSSLHasher type"); +static_assert(Hasher, "Assert OpenSSLHasher type"); +static_assert(Hasher, "Assert OpenSSLHasher type"); +static_assert(Hasher, "Assert OpenSSLHasher type"); + +} // namespace bcos::crypto::hasher::openssl diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/CommonType.h b/bcos-crypto/bcos-crypto/interfaces/crypto/CommonType.h new file mode 100644 index 0000000..0f94009 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/CommonType.h @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief common types for crypto + * @file CommonType.h + * @author: yujiechen + * @date 2021-04-01 + */ +#pragma once +#include +#include + +#define CRYPTO_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("CRYPTO") +namespace bcos::crypto +{ +using HashType = h256; +using HashList = std::vector; +using HashListPtr = std::shared_ptr; + +} // namespace bcos::crypto \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/CryptoSuite.h b/bcos-crypto/bcos-crypto/interfaces/crypto/CryptoSuite.h new file mode 100644 index 0000000..478884e --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/CryptoSuite.h @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief crypto suite toolkit + * @file CryptoSuite.h + * @author: yujiechen + * @date 2021-03-03 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +class CryptoSuite +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + CryptoSuite(Hash::Ptr _hashImpl, SignatureCrypto::Ptr _signatureImpl, + SymmetricEncryption::Ptr _symmetricEncryptionHandler) + : m_hashImpl(_hashImpl), + m_signatureImpl(_signatureImpl), + m_symmetricEncryptionHandler(_symmetricEncryptionHandler) + {} + virtual ~CryptoSuite() {} + Hash::Ptr hashImpl() { return m_hashImpl; } + SignatureCrypto::Ptr signatureImpl() { return m_signatureImpl; } + SymmetricEncryption::Ptr symmetricEncryptionHandler() { return m_symmetricEncryptionHandler; } + + template + HashType hash(T&& _data) + { + return m_hashImpl->hash(_data); + } + + virtual Address calculateAddress(PublicPtr _public) + { + return right160(m_hashImpl->hash(_public)); + } + + virtual void setKeyFactory(KeyFactory::Ptr _keyFactory) { m_keyFactory = _keyFactory; } + virtual KeyFactory::Ptr keyFactory() { return m_keyFactory; } + +private: + Hash::Ptr m_hashImpl; + SignatureCrypto::Ptr m_signatureImpl; + SymmetricEncryption::Ptr m_symmetricEncryptionHandler; + KeyFactory::Ptr m_keyFactory; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/Hash.h b/bcos-crypto/bcos-crypto/interfaces/crypto/Hash.h new file mode 100644 index 0000000..4afa9b6 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/Hash.h @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for Hash + * @file Hash.h + * @author: yujiechen + * @date 2021-03-03 + */ +#pragma once +#include "../../hasher/AnyHasher.h" +#include +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +enum HashImplType : int +{ + Keccak256Hash, + Sm3Hash, + Sha3 +}; +class Hash +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + Hash() = default; + virtual ~Hash() {} + virtual HashType hash(bytesConstRef _data) = 0; + virtual HashType emptyHash() + { + if (HashType() == m_emptyHash) + { + m_emptyHash = hash(bytesConstRef()); + } + return m_emptyHash; + } + virtual HashType hash(bytes const& _data) + { + return hash(bytesConstRef(_data.data(), _data.size())); + } + virtual HashType hash(std::string const& _data) { return hash(bytesConstRef(_data)); } + + template + inline HashType hash(FixedBytes const& _input) + { + return hash(_input.ref()); + } + + inline HashType hash(PublicPtr _public) { return hash(_public->data()); } + + inline void setHashImplType(HashImplType _type) { m_type = _type; } + + inline HashImplType getHashImplType() const { return m_type; } + + virtual bcos::crypto::hasher::AnyHasher hasher() const = 0; + +private: + HashType m_emptyHash = HashType(); + HashImplType m_type = Keccak256Hash; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/KeyFactory.h b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyFactory.h new file mode 100644 index 0000000..ff7dcff --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyFactory.h @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Public/Secret key creation + * @file KeyFactory.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once +#include +namespace bcos +{ +namespace crypto +{ +class KeyFactory +{ +public: + using Ptr = std::shared_ptr; + KeyFactory() = default; + virtual ~KeyFactory() {} + + virtual KeyInterface::Ptr createKey(bytesConstRef _keyData) = 0; + virtual KeyInterface::Ptr createKey(bytes const& _keyData) = 0; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/KeyInterface.h b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyInterface.h new file mode 100644 index 0000000..a445072 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyInterface.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Public/Secret key + * @file KeyInterface.h + * @author: yujiechen + * @date 2021-04-02 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace crypto +{ +class KeyInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + KeyInterface() = default; + virtual ~KeyInterface() {} + virtual const bytes& data() const = 0; + virtual size_t size() const = 0; + virtual char* mutableData() = 0; + virtual const char* constData() const = 0; + virtual std::shared_ptr encode() const = 0; + virtual void decode(bytesConstRef _data) = 0; + virtual void decode(bytes&& _data) = 0; + + virtual std::string shortHex() = 0; + virtual std::string hex() = 0; +}; +using Public = KeyInterface; +using Secret = KeyInterface; +using PublicPtr = KeyInterface::Ptr; +using SecretPtr = KeyInterface::Ptr; +using NodeIDPtr = KeyInterface::Ptr; +using NodeIDs = std::vector; +using NodeIDListPtr = std::shared_ptr; + +struct KeyCompare +{ +public: + bool operator()(KeyInterface::Ptr const& _first, KeyInterface::Ptr const& _second) const + { + // increase order + return _first->data() < _second->data(); + } +}; +using NodeIDSet = std::set; +using NodeIDSetPtr = std::shared_ptr; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairFactory.h b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairFactory.h new file mode 100644 index 0000000..90857e6 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairFactory.h @@ -0,0 +1,37 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file KeyPairFactory.h + * @author: yujiechen + * @date 2022-01-18 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace crypto +{ +class KeyPairFactory +{ +public: + using Ptr = std::shared_ptr; + KeyPairFactory() = default; + virtual ~KeyPairFactory() {} + virtual KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) = 0; + virtual KeyPairInterface::UniquePtr generateKeyPair() = 0; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairInterface.h b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairInterface.h new file mode 100644 index 0000000..270ee96 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/KeyPairInterface.h @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for KeyPair + * @file KeyPairInterface.h + * @author: yujiechen + * @date 2021-04-02 + */ +#pragma once +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +enum class KeyPairType : int +{ + Secp256K1 = 0, + SM2 = 1, + Ed25519 = 2, + HsmSM2 = 3 +}; +class KeyPairInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + KeyPairInterface() = default; + virtual ~KeyPairInterface() {} + + virtual SecretPtr secretKey() const = 0; + virtual PublicPtr publicKey() const = 0; + virtual Address address(Hash::Ptr _hashImpl) = 0; + virtual KeyPairType keyPairType() const = 0; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/Signature.h b/bcos-crypto/bcos-crypto/interfaces/crypto/Signature.h new file mode 100644 index 0000000..cf2eb76 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/Signature.h @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for Signature + * @file Signature.h + * @author: yujiechen + * @date 2021-03-03 + */ +#pragma once +#include +#include +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +class SignatureCrypto +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + SignatureCrypto() = default; + virtual ~SignatureCrypto() = default; + + // sign returns a signature of a given hash + virtual std::shared_ptr sign(const KeyPairInterface& _keyPair, const HashType& _hash, + bool _signatureWithPub = false) const = 0; + + // verify checks whether a signature is calculated from a given hash + virtual bool verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const = 0; + virtual bool verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const = 0; + + // recover recovers the public key from the given signature + virtual PublicPtr recover(const HashType& _hash, bytesConstRef _signatureData) const = 0; + + // generateKeyPair generates keyPair + virtual KeyPairInterface::UniquePtr generateKeyPair() const = 0; + + // recoverAddress recovers address from a signature(for precompiled) + virtual std::pair recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _in) const = 0; + + virtual KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) const = 0; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/interfaces/crypto/SymmetricEncryption.h b/bcos-crypto/bcos-crypto/interfaces/crypto/SymmetricEncryption.h new file mode 100644 index 0000000..b447518 --- /dev/null +++ b/bcos-crypto/bcos-crypto/interfaces/crypto/SymmetricEncryption.h @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for Symmetric encryption + * @file SymmetricEncryption.h + * @author: yujiechen + * @date 2021-03-03 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +class SymmetricEncryption +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + SymmetricEncryption() = default; + virtual ~SymmetricEncryption() {} + + // symmetricEncrypt encrypts plain data with default ivData + virtual bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize) = 0; + // symmetricDecrypt encrypts plain data with default ivData + virtual bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize) = 0; + + // symmetricEncrypt encrypts plain data with given ivData + virtual bytesPointer symmetricEncrypt(const unsigned char* _plainData, size_t _plainDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) = 0; + // symmetricDecrypt encrypts plain data with given ivData + virtual bytesPointer symmetricDecrypt(const unsigned char* _cipherData, size_t _cipherDataSize, + const unsigned char* _key, size_t _keySize, const unsigned char* _ivData, + size_t _ivDataSize) = 0; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/merkle/Merkle.h b/bcos-crypto/bcos-crypto/merkle/Merkle.h new file mode 100644 index 0000000..abc942a --- /dev/null +++ b/bcos-crypto/bcos-crypto/merkle/Merkle.h @@ -0,0 +1,264 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::crypto::merkle +{ + +template +concept HashRange = RANGES::random_access_range && + bcos::concepts::bytebuffer::ByteBuffer>>; + +template +concept MerkleRange = HashRange; + +template +concept ProofRange = bcos::concepts::DynamicRange && + bcos::concepts::bytebuffer::ByteBuffer>>; + +template +class Merkle +{ + static_assert(width >= 2, "Width too short, at least 2"); + static_assert(HasherType::HASH_SIZE >= 4, "Hash size too short!"); + + using HashType = std::array; + +public: + bool verifyMerkleProof(ProofRange auto const& proof, bcos::concepts::bytebuffer::Hash auto hash, + bcos::concepts::bytebuffer::Hash auto const& root) + { + if (RANGES::empty(proof)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Empty input proof!"}); + } + + if (RANGES::size(proof) > 1) + { + for (auto it = RANGES::begin(proof); it != RANGES::end(proof);) + { + auto count = getNumberFromHash(*(it++)); + auto range = RANGES::subrange{it, it + count}; + + if (RANGES::find(range, hash) == RANGES::end(range)) [[unlikely]] + { + return false; + } + + HasherType hasher; + for (auto& merkleHash : range) + { + hasher.update(merkleHash); + } + hasher.final(hash); + + std::advance(it, count); + } + } + + if (hash != root) [[unlikely]] + { + return false; + } + + return true; + } + + void generateMerkleProof(HashRange auto const& originHashes, + bcos::concepts::bytebuffer::Hash auto const& hash, ProofRange auto& out) const + { + // Find the hash in originHashes first + auto it = RANGES::find(originHashes, hash); + if (it == RANGES::end(originHashes)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Not found hash!"}); + } + + std::vector merkle; + generateMerkle(originHashes, merkle); + + generateMerkleProof( + originHashes, merkle, RANGES::distance(RANGES::begin(originHashes), it), out); + } + + void generateMerkleProof(HashRange auto const& originHashes, MerkleRange auto const& merkle, + bcos::concepts::bytebuffer::Hash auto const& hash, ProofRange auto& out) const + { + // Find the hash in originHashes first + auto it = RANGES::find(originHashes, hash); + if (it == RANGES::end(originHashes)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Not found hash!"}); + } + + generateMerkleProof( + originHashes, merkle, RANGES::distance(RANGES::begin(originHashes), it), out); + } + + void generateMerkleProof(HashRange auto const& originHashes, MerkleRange auto const& merkle, + std::integral auto index, ProofRange auto& out) const + { + if ((size_t)index >= (size_t)RANGES::size(originHashes)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Out of range!"}); + } + + if (RANGES::size(originHashes) == 1) + { + concepts::resizeTo(out, 1); + bcos::concepts::bytebuffer::assignTo(*RANGES::begin(merkle), *RANGES::begin(out)); + return; + } + + auto [merkleNodes, merkleLevels] = getMerkleSize(RANGES::size(originHashes)); + if (merkleNodes != RANGES::size(merkle)) + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Merkle size mismatch!"}); + } + + index = indexAlign(index); + auto count = std::min((size_t)(RANGES::size(originHashes) - index), (size_t)width); + + setNumberToHash(count, out.emplace_back()); + + for (auto it = RANGES::begin(originHashes) + index; + it < RANGES::begin(originHashes) + index + count; ++it) + { + bcos::concepts::bytebuffer::assignTo(*it, out.emplace_back()); + } + + // Query next level hashes + auto inputIt = RANGES::begin(merkle); + while (inputIt != RANGES::end(merkle)) + { + index = indexAlign(index / width); + auto levelLength = getNumberFromHash(*(inputIt++)); + assert(index < levelLength); + if (levelLength == 1) + { // Ignore merkle root + break; + } + + auto nextCount = std::min((size_t)(levelLength - index), (size_t)width); + + setNumberToHash(nextCount, out.emplace_back()); + for (auto it = inputIt + index; it < inputIt + index + nextCount; ++it) + { + bcos::concepts::bytebuffer::assignTo(*it, out.emplace_back()); + } + RANGES::advance(inputIt, levelLength); + } + } + + void generateMerkle(HashRange auto const& originHashes, MerkleRange auto& out) const + { + if (RANGES::empty(originHashes)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Empty input"}); + } + + if (RANGES::size(originHashes) == 1) + { + bcos::concepts::resizeTo(out, 1); + bcos::concepts::bytebuffer::assignTo(*RANGES::begin(originHashes), *RANGES::begin(out)); + return; + } + + [[maybe_unused]] auto [merkleNodes, merkleLevels] = + getMerkleSize(RANGES::size(originHashes)); + bcos::concepts::resizeTo(out, merkleNodes); + + // Calculate first level from originHashes + auto it = RANGES::begin(out); + auto nextNodes = getNextLevelSize(RANGES::size(originHashes)); + setNumberToHash(nextNodes, *(it++)); + auto outputRange = RANGES::subrange(it, it + nextNodes); + calculateLevelHashes(originHashes, outputRange); + + while (nextNodes > 1) // Calculate next level from out, ignore only root + { + auto inputRange = RANGES::subrange(it, it + nextNodes); + + RANGES::advance(it, nextNodes); + nextNodes = getNextLevelSize(nextNodes); + + setNumberToHash(nextNodes, *(it++)); + auto nextOutputRange = RANGES::subrange(it, it + nextNodes); + calculateLevelHashes(inputRange, nextOutputRange); + + assert(it <= RANGES::end(out)); + } + } + +private: + auto indexAlign(std::integral auto index) const { return index - ((index + width) % width); } + + void setNumberToHash(uint32_t number, bcos::concepts::bytebuffer::Hash auto& output) const + { + bcos::concepts::resizeTo(output, sizeof(uint32_t)); + *((uint32_t*)output.data()) = boost::endian::native_to_big(number); + } + + uint32_t getNumberFromHash(bcos::concepts::bytebuffer::Hash auto const& input) const + { + return boost::endian::big_to_native(*((uint32_t*)input.data())); + } + + std::tuple getMerkleSize(std::integral auto inputSize) const + { + auto nodeSize = 0U; + auto levels = 0U; + while (inputSize > 1) + { + inputSize = getNextLevelSize(inputSize); + nodeSize += (inputSize + 1); // Extra 1 for length record + ++levels; + } + + return std::make_tuple(nodeSize, levels); + } + + auto getNextLevelSize(std::integral auto inputSize) const + { + return (inputSize + (width - 1)) / width; + } + + void calculateLevelHashes(HashRange auto const& input, HashRange auto& output) const + { + assert(RANGES::size(input) > 0); + + auto outputSize = RANGES::size(output); + tbb::parallel_for(tbb::blocked_range(0, outputSize), + [&input, &output](const tbb::blocked_range& range) { + HasherType hasher; + + for (auto i = range.begin(); i < range.end(); ++i) + { + for (auto j = i * width; j < (i + 1) * width && j < RANGES::size(input); ++j) + { + hasher.update(input[j]); + } + hasher.final(output[i]); + } + }); + } +}; + +} // namespace bcos::crypto::merkle \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/Exceptions.h b/bcos-crypto/bcos-crypto/signature/Exceptions.h new file mode 100644 index 0000000..0e3133a --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/Exceptions.h @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the exceptions for signature of bcos-crypto + * @file Execptions.h + * @date 2021.03.05 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +DERIVE_BCOS_EXCEPTION(PriToPublicKeyException); +DERIVE_BCOS_EXCEPTION(SignException); +DERIVE_BCOS_EXCEPTION(InvalidSignature); +DERIVE_BCOS_EXCEPTION(InvalidSignatureData); +DERIVE_BCOS_EXCEPTION(InvalidKey); +DERIVE_BCOS_EXCEPTION(GenerateKeyPairException); +DERIVE_BCOS_EXCEPTION(InvalidSecretKey); +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/codec/SignatureData.h b/bcos-crypto/bcos-crypto/signature/codec/SignatureData.h new file mode 100644 index 0000000..5e653e4 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/codec/SignatureData.h @@ -0,0 +1,70 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief codec for signature data + * @file SignatureData.h + * @date 2021.03.10 + * @author yujiechen + */ + +#pragma once +#include +#include +namespace bcos +{ +namespace crypto +{ +class SignatureData +{ +public: + using Ptr = std::shared_ptr; + SignatureData() = default; + SignatureData(h256 const& _r, h256 const& _s) : m_r(_r), m_s(_s) {} + virtual ~SignatureData() {} + virtual bytesPointer encode() const = 0; + virtual void decode(bytesConstRef _signatureData) = 0; + + h256 const& r() const { return m_r; } + h256 const& s() const { return m_s; } + +protected: + virtual void decodeCommonFields(bytesConstRef _signatureData) + { + if (_signatureData.size() < m_signatureLen) + { + BOOST_THROW_EXCEPTION( + InvalidSignatureData() << errinfo_comment( + "InvalidSignatureData: the signature data size must be at least " + + std::to_string(m_signatureLen))); + } + m_r = h256(_signatureData.data(), h256::ConstructorType::FromPointer); + m_s = h256(_signatureData.data() + 32, h256::ConstructorType::FromPointer); + } + virtual void encodeCommonFields(bytesPointer _signatureData) const + { + _signatureData->resize(64); + memcpy(_signatureData->data(), m_r.data(), 32); + memcpy(_signatureData->data() + 32, m_s.data(), 32); + } + +protected: + size_t m_signatureLen = 64; + +private: + h256 m_r; + h256 m_s; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithPub.h b/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithPub.h new file mode 100644 index 0000000..8f6e67f --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithPub.h @@ -0,0 +1,70 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief codec for signature data with pub + * @file SignatureDataWithPub.h + * @date 2021.03.10 + * @author yujiechen + */ +#pragma once +#include +#include +namespace bcos +{ +namespace crypto +{ +class SignatureDataWithPub : public SignatureData +{ +public: + using Ptr = std::shared_ptr; + explicit SignatureDataWithPub(bytesConstRef _data) : m_pub(std::make_shared()) + { + decode(_data); + } + SignatureDataWithPub(h256 const& _r, h256 const& _s, bytesConstRef _pub) + : SignatureData(_r, _s), m_pub(std::make_shared(_pub.begin(), _pub.end())) + {} + + SignatureDataWithPub(h256 const& _r, h256 const& _s, bytesPointer _pub) + : SignatureData(_r, _s), m_pub(_pub) + {} + + ~SignatureDataWithPub() override {} + + bytesPointer pub() const { return m_pub; } + bytesPointer encode() const override + { + auto encodedData = std::make_shared(); + encodeCommonFields(encodedData); + encodedData->insert(encodedData->end(), m_pub->begin(), m_pub->end()); + return encodedData; + } + + void decode(bytesConstRef _signatureData) override + { + m_pub->clear(); + decodeCommonFields(_signatureData); + if (_signatureData.size() > m_signatureLen) + { + m_pub->insert( + m_pub->end(), _signatureData.data() + m_signatureLen, _signatureData.end()); + } + } + +private: + bytesPointer m_pub; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithV.h b/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithV.h new file mode 100644 index 0000000..0485e09 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/codec/SignatureDataWithV.h @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief codec for signature data with v (for secp256k1) + * @file SignatureDataWithV.h + * @date 2021.03.10 + * @author yujiechen + */ + +#pragma once +#include +#include + +namespace bcos +{ +namespace crypto +{ +class SignatureDataWithV : public SignatureData +{ +public: + using Ptr = std::shared_ptr; + explicit SignatureDataWithV(bytesConstRef _data) { decode(_data); } + SignatureDataWithV(h256 const& _r, h256 const& _s, byte const& _v) + : SignatureData(_r, _s), m_v(_v) + {} + + ~SignatureDataWithV() override {} + + byte const& v() { return m_v; } + + bytesPointer encode() const override + { + auto encodedData = std::make_shared(); + encodeCommonFields(encodedData); + encodedData->emplace_back(m_v); + return encodedData; + } + void decode(bytesConstRef _signatureData) override + { + if (_signatureData.size() < m_signatureLen + 1) + { + BOOST_THROW_EXCEPTION( + InvalidSignatureData() << errinfo_comment( + "InvalidSignatureData: the signature data size must be at least " + + std::to_string(m_signatureLen + 1))); + } + decodeCommonFields(_signatureData); + m_v = (byte)(_signatureData[m_signatureLen]); + } + +private: + byte m_v; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.cpp b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.cpp new file mode 100644 index 0000000..8836490 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.cpp @@ -0,0 +1,139 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 signature algorithm + * @file Ed25519Crypto.cpp + * @date 2021.04.01 + * @author yujiechen + */ +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +std::shared_ptr bcos::crypto::ed25519Sign( + const KeyPairInterface& _keyPair, const HashType& _messageHash, bool _signatureWithPub) +{ + CInputBuffer privateKey{_keyPair.secretKey()->constData(), _keyPair.secretKey()->size()}; + CInputBuffer messagHash{(const char*)_messageHash.data(), HashType::SIZE}; + FixedBytes signatureArray; + COutputBuffer signatureResult{(char*)signatureArray.data(), ED25519_SIGNATURE_LEN}; + auto retCode = wedpr_ed25519_sign(&privateKey, &messagHash, &signatureResult); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION(SignException() << errinfo_comment( + "secp256k1Sign exception, messageHash: " + _messageHash.hex())); + } + auto signatureData = std::make_shared(); + *signatureData = signatureArray.asBytes(); + if (_signatureWithPub) + { + signatureData->insert(signatureData->end(), _keyPair.publicKey()->mutableData(), + _keyPair.publicKey()->mutableData() + _keyPair.publicKey()->size()); + } + return signatureData; +} + +KeyPairInterface::UniquePtr bcos::crypto::ed25519GenerateKeyPair() +{ + auto ed25519KeyPair = std::make_unique(); + COutputBuffer publicKey{ + ed25519KeyPair->publicKey()->mutableData(), ed25519KeyPair->publicKey()->size()}; + COutputBuffer privateKey{ + ed25519KeyPair->secretKey()->mutableData(), ed25519KeyPair->secretKey()->size()}; + if (wedpr_ed25519_gen_key_pair(&publicKey, &privateKey) != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + GenerateKeyPairException() << errinfo_comment("ed25519GenerateKeyPair exception")); + } + return ed25519KeyPair; +} + +bool bcos::crypto::ed25519Verify( + PublicPtr _pubKey, const HashType& _messageHash, bytesConstRef _signatureData) +{ + CInputBuffer publicKey{_pubKey->constData(), _pubKey->size()}; + CInputBuffer msgHash{(const char*)_messageHash.data(), HashType::SIZE}; + + auto signatureWithoutPub = bytesConstRef(_signatureData.data(), ED25519_SIGNATURE_LEN); + CInputBuffer signatureData{(const char*)signatureWithoutPub.data(), signatureWithoutPub.size()}; + if (wedpr_ed25519_verify(&publicKey, &msgHash, &signatureData) != WEDPR_SUCCESS) + { + return false; + } + return true; +} + +PublicPtr bcos::crypto::ed25519Recover(const HashType& _messageHash, bytesConstRef _signatureData) +{ + auto signature = std::make_shared(_signatureData); + auto ed25519Pub = std::make_shared(ED25519_PUBLIC_LEN, signature->pub()); + if (!ed25519Verify(ed25519Pub, _messageHash, _signatureData)) + { + BOOST_THROW_EXCEPTION( + InvalidSignature() << errinfo_comment( + "invalid signature: ed25519 recover failed, msgHash : " + _messageHash.hex() + + ", signature:" + *toHexString(_signatureData))); + } + return ed25519Pub; +} + +std::pair bcos::crypto::ed25519Recover(Hash::Ptr _hashImpl, bytesConstRef _input) +{ + struct + { + HashType hash; + h256 pub; + h256 r; + h256 s; + } in; + memcpy(&in, _input.data(), std::min(_input.size(), sizeof(_input))); + // verify the signature + auto signatureData = std::make_shared(in.r, in.s, in.pub.ref()); + try + { + auto encodedData = signatureData->encode(); + auto ed25519Pub = std::make_shared(ED25519_PUBLIC_LEN, signatureData->pub()); + if (ed25519Verify( + ed25519Pub, in.hash, bytesConstRef(encodedData->data(), encodedData->size()))) + { + auto address = calculateAddress(_hashImpl, ed25519Pub); + return {true, address.asBytes()}; + } + } + catch (const std::exception& e) + { + CRYPTO_LOG(WARNING) << LOG_DESC("ed25519Recover failed") + << LOG_KV("error", boost::diagnostic_information(e)); + } + return {false, {}}; +} + + +bool Ed25519Crypto::verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const +{ + return ed25519Verify( + std::make_shared(ED25519_PUBLIC_LEN, _pubKeyBytes), _hash, _signatureData); +} + +KeyPairInterface::UniquePtr Ed25519Crypto::createKeyPair(SecretPtr _secretKey) const +{ + return std::make_unique(_secretKey); +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.h b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.h new file mode 100644 index 0000000..4c5d6e5 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519Crypto.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 signature algorithm + * @file Ed25519Crypto.h + * @date 2021.04.01 + * @author yujiechen + */ +#pragma once +#include +namespace bcos +{ +namespace crypto +{ +const int ED25519_SIGNATURE_LEN = 64; + +std::shared_ptr ed25519Sign( + const KeyPairInterface& _keyPair, const HashType& _messageHash, bool _signatureWithPub = false); +KeyPairInterface::UniquePtr ed25519GenerateKeyPair(); +bool ed25519Verify(PublicPtr _pubKey, const HashType& _messageHash, bytesConstRef _signatureData); +PublicPtr ed25519Recover(const HashType& _messageHash, bytesConstRef _signatureData); + +std::pair ed25519Recover(Hash::Ptr _hashImpl, bytesConstRef _in); + +class Ed25519Crypto : public SignatureCrypto +{ +public: + using Ptr = std::shared_ptr; + Ed25519Crypto() = default; + ~Ed25519Crypto() override {} + std::shared_ptr sign(const KeyPairInterface& _keyPair, const HashType& _messageHash, + bool _signatureWithPub = false) const override + { + return ed25519Sign(_keyPair, _messageHash, _signatureWithPub); + } + + bool verify(PublicPtr _pubKey, const HashType& _messageHash, + bytesConstRef _signatureData) const override + { + return ed25519Verify(_pubKey, _messageHash, _signatureData); + } + + bool verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const override; + + PublicPtr recover(const HashType& _messageHash, bytesConstRef _signatureData) const override + { + return ed25519Recover(_messageHash, _signatureData); + } + + KeyPairInterface::UniquePtr generateKeyPair() const override + { + return ed25519GenerateKeyPair(); + } + + std::pair recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _in) const override + { + return ed25519Recover(_hashImpl, _in); + } + + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) const override; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.cpp b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.cpp new file mode 100644 index 0000000..78ebac6 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.cpp @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 keyPair algorithm + * @file Ed25519KeyPair.cpp + * @date 2021.04.01 + * @author yujiechen + */ + +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +PublicPtr bcos::crypto::ed25519PriToPub(SecretPtr _secretKey) +{ + CInputBuffer privateKey{_secretKey->constData(), _secretKey->size()}; + auto pub = std::make_shared(ED25519_PUBLIC_LEN); + COutputBuffer publicKey{pub->mutableData(), pub->size()}; + // get public key + if (wedpr_ed25519_derive_public_key(&privateKey, &publicKey) != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + PriToPublicKeyException() << errinfo_comment("ed25519PriToPub exception")); + } + return pub; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.h b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.h new file mode 100644 index 0000000..4a43010 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/ed25519/Ed25519KeyPair.h @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 keyPair algorithm + * @file Ed25519KeyPair.h + * @date 2021.04.01 + * @author yujiechen + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace crypto +{ +const int ED25519_PUBLIC_LEN = 32; +const int ED25519_PRIVATE_LEN = 32; + +PublicPtr ed25519PriToPub(SecretPtr _secretKey); +class Ed25519KeyPair : public KeyPair +{ +public: + Ed25519KeyPair() : KeyPair(ED25519_PUBLIC_LEN, ED25519_PRIVATE_LEN, KeyPairType::Ed25519) {} + explicit Ed25519KeyPair(SecretPtr _secretKey) : Ed25519KeyPair() + { + m_secretKey = _secretKey; + m_publicKey = priToPub(_secretKey); + m_type = KeyPairType::Ed25519; + } + ~Ed25519KeyPair() override {} + virtual PublicPtr priToPub(SecretPtr _secretKey) { return ed25519PriToPub(_secretKey); } +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2Crypto.h b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2Crypto.h new file mode 100644 index 0000000..ede367d --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2Crypto.h @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FastSM2Crypto.h + * @date 2022.01.17 + * @author yujiechen + */ + +#pragma once +#include +#include +#include +#include + +#ifdef WITH_SM2_OPTIMIZE + +namespace bcos +{ +namespace crypto +{ +class FastSM2Crypto : public SM2Crypto +{ +public: + using Ptr = std::shared_ptr; + FastSM2Crypto() : SM2Crypto() + { + m_signer = fast_sm2_sign; + m_verifier = fast_sm2_verify; + m_keyPairFactory = std::make_shared(); + } + virtual ~FastSM2Crypto() {} +}; +} // namespace crypto +} // namespace bcos + +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPair.h b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPair.h new file mode 100644 index 0000000..e30a57f --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPair.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for fast-sm2 keyPair + * @file FastSM2KeyPair.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once +#include +#include + +#ifdef WITH_SM2_OPTIMIZE + +namespace bcos +{ +namespace crypto +{ +class FastSM2KeyPair : public SM2KeyPair +{ +public: + using Ptr = std::shared_ptr; + FastSM2KeyPair() : SM2KeyPair() { m_publicKeyDeriver = fast_sm2_derive_public_key; } + explicit FastSM2KeyPair(SecretPtr _secretKey) : SM2KeyPair(_secretKey) {} +}; +} // namespace crypto +} // namespace bcos + +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPairFactory.h b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPairFactory.h new file mode 100644 index 0000000..b10b020 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/fastsm2/FastSM2KeyPairFactory.h @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for fast-sm2 keyPairFactory + * @file FastSM2KeyPairFactory.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once +#include +#include +#include +#include + +#ifdef WITH_SM2_OPTIMIZE + +namespace bcos +{ +namespace crypto +{ +class FastSM2KeyPairFactory : public SM2KeyPairFactory +{ +public: + using Ptr = std::shared_ptr; + FastSM2KeyPairFactory() : SM2KeyPairFactory() {} + ~FastSM2KeyPairFactory() override {} + + KeyPairInterface::UniquePtr createKeyPair() override + { + return std::make_unique(); + } + + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) override + { + return std::make_unique(_secretKey); + } +}; +} // namespace crypto +} // namespace bcos + +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.cpp b/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.cpp new file mode 100644 index 0000000..ca7ad5c --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.cpp @@ -0,0 +1,307 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 keyPair algorithm + * @file fast_sm2.h + * @date 2022.01.17 + * @author yujiechen + */ +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef WITH_SM2_OPTIMIZE +using namespace bcos; +using namespace bcos::crypto; + +const char* c_userId = "1234567812345678"; +const int c_R_FIELD_LEN = 32; +const int c_S_FIELD_LEN = 32; +const int c_PUBLICKEY_LEN = 64; +// Note: EC_GROUP_new_by_curve_name cost performance, So only one copy is created globally to +// improve performance +EC_GROUP* sm2Group = EC_GROUP_new_by_curve_name(NID_sm2); + +// C interface for 'fast_sm2_sign'. +int8_t bcos::crypto::fast_sm2_sign(const CInputBuffer* raw_private_key, + const CInputBuffer* raw_public_key, const CInputBuffer* raw_message_hash, + COutputBuffer* output_signature) +{ + auto hexPubKey = + toHexString(raw_public_key->data, raw_public_key->data + raw_public_key->len, "04"); + int len = 0; + // create EC_GROUP + EC_KEY* sm2Key = NULL; + ECDSA_SIG* sig = NULL; + EC_POINT* publicKey = NULL; + BIGNUM* privateKey = NULL; + int8_t ret = WEDPR_ERROR; + + // load privateKey + privateKey = BN_bin2bn((const unsigned char*)raw_private_key->data, raw_private_key->len, NULL); + if (privateKey == NULL) + { + CRYPTO_LOG(ERROR) << LOG_DESC("sm2: fast_sm2_sign: error of BN_bin2bn for privateKey"); + goto done; + } + publicKey = EC_POINT_hex2point(sm2Group, hexPubKey->data(), NULL, NULL); + if (publicKey == NULL) + { + CRYPTO_LOG(ERROR) << LOG_DESC("sm2: fast_sm2_sign: error of BN_bin2bn for publicKey"); + goto done; + } + sm2Key = EC_KEY_new(); + if (sm2Key == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_sign: error of EC_KEY_new"; + goto done; + } + if (!EC_KEY_set_group(sm2Key, sm2Group)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_sign: error of EC_KEY_set_group"; + goto done; + } + // set the private key + if (!EC_KEY_set_private_key(sm2Key, privateKey)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_sign: error of EC_KEY_set_private_key"; + goto done; + } + // set the public key + if (!EC_KEY_set_public_key(sm2Key, publicKey)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_sign: error of EC_KEY_set_public_key"; + goto done; + } + sig = sm2_do_sign(sm2Key, EVP_sm3(), (const uint8_t*)c_userId, (size_t)strlen(c_userId), + (const uint8_t*)raw_message_hash->data, raw_message_hash->len); + if (sig == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_sign: error of sm2_do_sign"; + goto done; + } + // set (r, s) to output_signature + len = BN_bn2bin(ECDSA_SIG_get0_r(sig), (unsigned char*)output_signature->data); + if (len < c_R_FIELD_LEN) + { + // padding zero to the r field + memmove(output_signature->data + (c_R_FIELD_LEN - len), output_signature->data, len); + memset(output_signature->data, 0, (c_R_FIELD_LEN - len)); + } + // get s filed + len = + BN_bn2bin(ECDSA_SIG_get0_s(sig), (unsigned char*)(output_signature->data + c_R_FIELD_LEN)); + if (len < c_S_FIELD_LEN) + { + auto startPointer = output_signature->data + c_R_FIELD_LEN; + // padding zero to the s field + memmove(startPointer + (c_S_FIELD_LEN - len), startPointer, len); + memset(startPointer, 0, (c_S_FIELD_LEN - len)); + } + ret = WEDPR_SUCCESS; +done: + if (sm2Key) + { + EC_KEY_free(sm2Key); + } + if (sig) + { + ECDSA_SIG_free(sig); + } + if (privateKey) + { + BN_free(privateKey); + } + if (publicKey) + { + EC_POINT_free(publicKey); + } + return ret; +} + +int8_t bcos::crypto::fast_sm2_verify(const CInputBuffer* raw_public_key, + const CInputBuffer* raw_message_hash, const CInputBuffer* raw_signature) +{ + auto hexPubKey = + toHexString(raw_public_key->data, raw_public_key->data + raw_public_key->len, "04"); + EC_KEY* sm2Key = NULL; + EC_POINT* point = NULL; + BIGNUM* r = NULL; + BIGNUM* s = NULL; + ECDSA_SIG* signData = NULL; + int8_t ret = WEDPR_ERROR; + point = EC_POINT_new(sm2Group); + if (point == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of EC_POINT_new"; + goto done; + } + if (!EC_POINT_hex2point(sm2Group, hexPubKey->data(), point, NULL)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of EC_POINT_bin2point"; + goto done; + } + + sm2Key = EC_KEY_new(); + if (sm2Key == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of EC_KEY_new"; + goto done; + } + + if (!EC_KEY_set_group(sm2Key, sm2Group)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of EC_KEY_set_group"; + goto done; + } + if (!EC_KEY_set_public_key(sm2Key, point)) + { + CRYPTO_LOG(ERROR) << "EC_KEY_set_public_key of EC_KEY_set_public_key"; + goto done; + } + r = BN_bin2bn((const unsigned char*)raw_signature->data, c_R_FIELD_LEN, NULL); + if (r == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of BN_bin2bn for r"; + goto done; + } + s = BN_bin2bn((const unsigned char*)(raw_signature->data + c_R_FIELD_LEN), c_S_FIELD_LEN, NULL); + if (s == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of BN_bin2bn for s"; + goto done; + } + signData = ECDSA_SIG_new(); + if (signData == NULL) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of ECDSA_SIG_new"; + goto done; + } + // takes ownership of r and s + if (!ECDSA_SIG_set0(signData, r, s)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_verify: error of ECDSA_SIG_set0"; + goto done; + } + if (sm2_do_verify(sm2Key, EVP_sm3(), signData, (const uint8_t*)c_userId, strlen(c_userId), + (const uint8_t*)raw_message_hash->data, raw_message_hash->len)) + { + ret = WEDPR_SUCCESS; + } +done: + if (sm2Key) + { + EC_KEY_free(sm2Key); + } + if (point) + { + EC_POINT_free(point); + } + if (signData == NULL) + { + BN_free(r); + BN_free(s); + } + if (signData) + { + ECDSA_SIG_free(signData); + } + return ret; +} + +// C interface for 'fast_sm2_derive_public_key'. +int8_t bcos::crypto::fast_sm2_derive_public_key( + const CInputBuffer* raw_private_key, COutputBuffer* output_public_key) +{ + int8_t ret = WEDPR_ERROR; + EC_KEY* sm2Key = NULL; + EC_POINT* pubPoint = NULL; + BN_CTX* ctx = NULL; + char* publicKey = NULL; + BIGNUM* privateKey = + BN_bin2bn((const unsigned char*)raw_private_key->data, raw_private_key->len, NULL); + if (!privateKey) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error of BN_bin2bn for privateKey"; + goto done; + } + ctx = BN_CTX_new(); + if (!ctx) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error of BN_CTX_new"; + goto done; + } + sm2Key = EC_KEY_new_by_curve_name(NID_sm2); + if (!sm2Key) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error of EC_KEY_new_by_curve_name"; + goto done; + } + if (!EC_KEY_set_private_key(sm2Key, privateKey)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error EC_KEY_set_private_key"; + goto done; + } + pubPoint = EC_POINT_new(sm2Group); + if (!pubPoint) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error EC_POINT_new"; + goto done; + } + if (!EC_POINT_mul(sm2Group, pubPoint, privateKey, NULL, NULL, NULL)) + { + CRYPTO_LOG(ERROR) << "sm2: fast_sm2_derive_public_key: error of EC_POINT_mul"; + goto done; + } + if (!EC_POINT_point2buf( + sm2Group, pubPoint, POINT_CONVERSION_UNCOMPRESSED, (unsigned char**)&publicKey, ctx)) + { + CRYPTO_LOG(ERROR) + << "sm2: fast_sm2_derive_public_key: error of EC_POINT_point2bin for publicKey"; + goto done; + } + // remove the prefix 04 + memcpy(output_public_key->data, publicKey + 1, c_PUBLICKEY_LEN); + ret = WEDPR_SUCCESS; +done: + if (sm2Key) + { + EC_KEY_free(sm2Key); + } + if (pubPoint) + { + EC_POINT_free(pubPoint); + } + if (ctx) + { + BN_CTX_free(ctx); + } + if (privateKey) + { + BN_free(privateKey); + } + if (publicKey) + { + OPENSSL_free(publicKey); + } + return ret; +} + +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.h b/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.h new file mode 100644 index 0000000..8a79ba5 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/fastsm2/fast_sm2.h @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ed25519 keyPair algorithm + * @file fast_sm2.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once + +#ifdef WITH_SM2_OPTIMIZE +#include + +namespace bcos +{ +namespace crypto +{ +// C interface for 'fast_sm2_sign'. +int8_t fast_sm2_sign(const CInputBuffer* raw_private_key, const CInputBuffer* raw_public_key, + const CInputBuffer* raw_message_hash, COutputBuffer* output_signature); + +// C interface for 'fast_sm2_verify'. +int8_t fast_sm2_verify(const CInputBuffer* raw_public_key, const CInputBuffer* raw_message_hash, + const CInputBuffer* raw_signature); + +// C interface for 'fast_sm2_verify'. +int8_t fast_sm2_derive_public_key( + const CInputBuffer* raw_private_key, COutputBuffer* output_public_key); +} // namespace crypto +} // namespace bcos +#endif \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.cpp b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.cpp new file mode 100644 index 0000000..70f5b71 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.cpp @@ -0,0 +1,205 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for hsm sm2 signature + * @file HsmSM2Crypto.cpp + * @date 2022.10.07 + * @author lucasli + */ +#include "hsm-crypto/hsm/CryptoProvider.h" +#include "hsm-crypto/hsm/SDFCryptoProvider.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace hsm; + +#define SDR_OK 0x0 +#define SDR_BASE 0x01000000 +#define SDR_VERIFYERR (SDR_BASE + 0x0000000E) + +std::shared_ptr HsmSM2Crypto::sign( + const KeyPairInterface& _keyPair, const HashType& _hash, bool _signatureWithPub) const +{ + auto& hsmKeyPair = dynamic_cast(_keyPair); + CryptoProvider& provider = SDFCryptoProvider::GetInstance(m_hsmLibPath); + + Key key = Key(); + if (hsmKeyPair.isInternalKey()) + { + auto pwdConstPtr = + std::make_shared(hsmKeyPair.password().begin(), hsmKeyPair.password().end()); + key = Key(hsmKeyPair.keyIndex(), pwdConstPtr); + CRYPTO_LOG(DEBUG) << "[HSMSignature::key] is internal key " + << LOG_KV("keyIndex", key.identifier()) + << LOG_KV("password", hsmKeyPair.password()); + } + else + { + auto privKey = + std::make_shared>((byte*)hsmKeyPair.secretKey()->constData(), + (byte*)hsmKeyPair.secretKey()->constData() + 32); + key.setPrivateKey(privKey); + CRYPTO_LOG(DEBUG) << "[HSMSignature::key] is external key "; + } + std::shared_ptr signatureData = std::make_shared(64); + + // According to the SM2 standard + // step 1 : calculate M' = Za || M + // step 2 : e = H(M') + // step 3 : signature = Sign(e) + // get provider + + auto pubKey = + std::make_shared>((byte*)hsmKeyPair.publicKey()->constData(), + (byte*)hsmKeyPair.publicKey()->constData() + 64); + key.setPublicKey(pubKey); + // step 2 : e = H(M') + unsigned char hashResult[HSM_SM3_DIGEST_LENGTH]; + unsigned int uiHashResultLen; + unsigned int code = provider.Hash(&key, hsm::SM3, _hash.data(), HSM_SM3_DIGEST_LENGTH, + (unsigned char*)hashResult, &uiHashResultLen); + if (code != SDR_OK) + { + CRYPTO_LOG(ERROR) << "[HSMSignature::sign] ERROR of compute H(M')" + << LOG_KV("error", provider.GetErrorMessage(code)); + return nullptr; + } + + // step 3 : signature = Sign(e) + unsigned int signLen; + code = provider.Sign( + key, hsm::SM2, (const unsigned char*)hashResult, 32, signatureData->data(), &signLen); + if (code != SDR_OK) + { + CRYPTO_LOG(ERROR) << "[HSMSignature::sign] ERROR of Sign" + << LOG_KV("error", provider.GetErrorMessage(code)); + return nullptr; + } + + // append the public key + if (_signatureWithPub) + { + signatureData->insert(signatureData->end(), hsmKeyPair.publicKey()->mutableData(), + hsmKeyPair.publicKey()->mutableData() + hsmKeyPair.publicKey()->size()); + } + return signatureData; +} + +bool HsmSM2Crypto::verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const +{ + return verify( + std::make_shared(HSM_SM2_PUBLIC_KEY_LEN, _pubKeyBytes), _hash, _signatureData); +} + +bool HsmSM2Crypto::verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const +{ + // get provider + CryptoProvider& provider = SDFCryptoProvider::GetInstance(m_hsmLibPath); + + // parse input + Key key = Key(); + auto pubKey = std::make_shared>( + (byte*)_pubKey->constData(), (byte*)_pubKey->constData() + 64); + key.setPublicKey(pubKey); + bool verifyResult = false; + + // Get Z + bytes hashResult(HSM_SM3_DIGEST_LENGTH); + unsigned int uiHashResultLen; + unsigned int code = provider.Hash(&key, hsm::SM3, _hash.data(), HSM_SM3_DIGEST_LENGTH, + (unsigned char*)hashResult.data(), &uiHashResultLen); + if (code != SDR_OK) + { + CRYPTO_LOG(ERROR) << "[HSMSignature::verify] ERROR of Hash" + << LOG_KV("error", provider.GetErrorMessage(code)); + return false; + } + + code = provider.Verify(key, hsm::SM2, (const unsigned char*)hashResult.data(), + HSM_SM3_DIGEST_LENGTH, _signatureData.data(), 64, &verifyResult); + if (code != SDR_OK) + { + CRYPTO_LOG(ERROR) << "[HSMSignature::verify] ERROR of Verify" + << LOG_KV("error", provider.GetErrorMessage(code)); + return false; + } + return true; +} + +PublicPtr HsmSM2Crypto::recover(const HashType& _hash, bytesConstRef _signData) const +{ + auto signatureStruct = std::make_shared(_signData); + auto hsmSM2Pub = std::make_shared(HSM_SM2_PUBLIC_KEY_LEN, signatureStruct->pub()); + if (verify(hsmSM2Pub, _hash, _signData)) + { + return hsmSM2Pub; + } + BOOST_THROW_EXCEPTION(InvalidSignature() << errinfo_comment( + "invalid signature: hsm sm2 recover public key failed, msgHash : " + + _hash.hex() + ", signature:" + *toHexString(_signData))); +} + +std::pair HsmSM2Crypto::recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _input) const +{ + struct + { + HashType hash; + h512 pub; + h256 r; + h256 s; + } in; + memcpy(&in, _input.data(), std::min(_input.size(), sizeof(_input))); + // verify the signature + auto signatureData = std::make_shared(in.r, in.s, in.pub.ref()); + try + { + auto encodedData = signatureData->encode(); + auto hsmSM2Pub = std::make_shared(HSM_SM2_PUBLIC_KEY_LEN, signatureData->pub()); + if (verify(hsmSM2Pub, in.hash, bytesConstRef(encodedData->data(), encodedData->size()))) + { + auto address = calculateAddress(_hashImpl, hsmSM2Pub); + return {true, address.asBytes()}; + } + } + catch (const std::exception& e) + { + CRYPTO_LOG(WARNING) << LOG_DESC("Hsm SM2 recoverAddress failed") + << LOG_KV("error", boost::diagnostic_information(e)); + } + return {false, {}}; +} + +KeyPairInterface::UniquePtr HsmSM2Crypto::generateKeyPair() const +{ + return m_keyPairFactory->generateKeyPair(); +} + +KeyPairInterface::UniquePtr HsmSM2Crypto::createKeyPair(SecretPtr _secretKey) const +{ + return m_keyPairFactory->createKeyPair(_secretKey); +} + +KeyPairInterface::UniquePtr HsmSM2Crypto::createKeyPair( + unsigned int _keyIndex, std::string _password) +{ + return dynamic_pointer_cast(m_keyPairFactory) + ->createKeyPair(_keyIndex, _password); +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.h b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.h new file mode 100644 index 0000000..a858d2d --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2Crypto.h @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for hsm sm2 signature + * @file HsmSM2Crypto.h + * @date 2022.11.04 + * @author lucasli + */ +#pragma once +#include +#include +#include + +namespace bcos::crypto +{ +const int HSM_SM2_SIGNATURE_LEN = 64; +const int HSM_SM3_DIGEST_LENGTH = 32; + +class HsmSM2Crypto : public SignatureCrypto +{ +public: + using Ptr = std::shared_ptr; + HsmSM2Crypto(std::string _libPath) + { + m_hsmLibPath = _libPath; + m_keyPairFactory = std::make_shared(m_hsmLibPath); + } + ~HsmSM2Crypto() override = default; + + std::shared_ptr sign(const KeyPairInterface& _keyPair, const HashType& _hash, + bool _signatureWithPub = false) const override; + + bool verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const override; + bool verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const override; + + PublicPtr recover(const HashType& _hash, bytesConstRef _signatureData) const override; + std::pair recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _in) const override; + + KeyPairInterface::UniquePtr generateKeyPair() const override; + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) const override; + KeyPairInterface::UniquePtr createKeyPair(unsigned int _keyIndex, std::string _password); + +private: + KeyPairFactory::Ptr m_keyPairFactory; + std::string m_hsmLibPath; +}; +} // namespace bcos::crypto \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.cpp b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.cpp new file mode 100644 index 0000000..0b66726 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.cpp @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for hsm SM2 KeyPair + * @file HsmSM2KeyPair.cpp + * @date 2022.11.04 + * @author lucasli + */ +#include "hsm-crypto/hsm/CryptoProvider.h" +#include "hsm-crypto/hsm/SDFCryptoProvider.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace hsm; + +#define SDR_OK 0x0 + +HsmSM2KeyPair::HsmSM2KeyPair(std::string _libPath, SecretPtr _secretKey) : HsmSM2KeyPair(_libPath) +{ + if (_secretKey->size() != HSM_SM2_PRIVATE_KEY_LEN) + { + BOOST_THROW_EXCEPTION(GenerateKeyPairException() << errinfo_comment( + "Invalid InvalidSecretKey, hsm sm2 secret length must be " + + std::to_string(HSM_SM2_PRIVATE_KEY_LEN))); + } + m_secretKey = _secretKey; + m_publicKey = priToPub(_secretKey); +} + +HsmSM2KeyPair::HsmSM2KeyPair(std::string _libPath, unsigned int _keyIndex, std::string _password) + : HsmSM2KeyPair(_libPath) +{ + m_keyIndex = _keyIndex; + m_password = _password; + m_isInternalKey = true; + + SDFCryptoProvider& provider = SDFCryptoProvider::GetInstance(m_hsmLibPath); + + Key key = Key(m_keyIndex); + unsigned int code = provider.ExportInternalPublicKey(key, AlgorithmType::SM2); + if (code != SDR_OK) + { + BOOST_THROW_EXCEPTION(GenerateKeyPairException() + << errinfo_comment("HsmSM2ExportInternalPublicKey exception")); + } + m_publicKey = std::make_shared(HSM_SM2_PUBLIC_KEY_LEN, key.publicKey()); +} + +PublicPtr HsmSM2KeyPair::priToPub(SecretPtr _secretKey) +{ + CInputBuffer privateKey{_secretKey->constData(), _secretKey->size()}; + auto pubKey = std::make_shared(HSM_SM2_PUBLIC_KEY_LEN); + COutputBuffer publicKey{pubKey->mutableData(), pubKey->size()}; + auto retCode = m_publicKeyDeriver(&privateKey, &publicKey); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + PriToPublicKeyException() << errinfo_comment("HsmSM2PriToPub exception")); + } + return pubKey; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.h b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.h new file mode 100644 index 0000000..256855f --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPair.h @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for hsm SM2 KeyPair + * @file HsmSM2KeyPair.h + * @date 2022.11.04 + * @author lucasli + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +const int HSM_SM2_PRIVATE_KEY_LEN = 32; +const int HSM_SM2_PUBLIC_KEY_LEN = 64; +const int SDF_KEY_LEN = 256; + +class HsmSM2KeyPair : public KeyPair +{ +public: + using Ptr = std::shared_ptr; + HsmSM2KeyPair(std::string _libPath) + : KeyPair(HSM_SM2_PUBLIC_KEY_LEN, HSM_SM2_PRIVATE_KEY_LEN, KeyPairType::HsmSM2) + { + m_hsmLibPath = _libPath; + m_publicKeyDeriver = wedpr_sm2_derive_public_key; + } + HsmSM2KeyPair(std::string _libPath, SecretPtr _secretKey); + HsmSM2KeyPair(std::string _libPath, unsigned int _keyIndex, std::string _password); + ~HsmSM2KeyPair() override {} + + PublicPtr priToPub(SecretPtr _secretKey); + bool isInternalKey() const { return m_isInternalKey; } + + void setHsmLibPath(std::string _libPath) { m_hsmLibPath = _libPath; } + unsigned int keyIndex() const { return m_keyIndex; } + void setKeyIndex(unsigned int _keyIndex) + { + m_keyIndex = _keyIndex; + m_isInternalKey = true; + } + const std::string& password() const { return m_password; } + void setPassword(std::string _password) + { + m_password = _password; + m_isInternalKey = true; + } + +private: + std::function + m_publicKeyDeriver; + bool m_isInternalKey = false; + std::string m_hsmLibPath; + unsigned int m_keyIndex; + std::string m_password; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPairFactory.h b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPairFactory.h new file mode 100644 index 0000000..486a952 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/hsmSM2/HsmSM2KeyPairFactory.h @@ -0,0 +1,62 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for hsm sm2 keyPairFactory algorithm + * @file HsmSM2KeyPairFactory.h + * @date 2022.11.04 + * @author lucasli + */ +#pragma once +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +class HsmSM2KeyPairFactory : public KeyPairFactory +{ +public: + using Ptr = std::shared_ptr; + HsmSM2KeyPairFactory(std::string _libPath) + { + m_hsmLibPath = _libPath; + CRYPTO_LOG(INFO) << "[HsmSM2KeyPairFactory::HsmSM2KeyPairFactory]" + << LOG_KV("_libPath", _libPath) << LOG_KV("lib_path", m_hsmLibPath); + } + ~HsmSM2KeyPairFactory() override {} + + void setHsmLibPath(std::string _libPath) { m_hsmLibPath = _libPath; } + + KeyPairInterface::UniquePtr createKeyPair(unsigned int _keyIndex, std::string _password) + { + return std::make_unique(m_hsmLibPath, _keyIndex, _password); + } + + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) override + { + return std::make_unique(m_hsmLibPath, _secretKey); + } + + KeyPairInterface::UniquePtr generateKeyPair() override + { + return std::make_unique(m_hsmLibPath); + } + +private: + std::string m_hsmLibPath; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/key/KeyFactoryImpl.h b/bcos-crypto/bcos-crypto/signature/key/KeyFactoryImpl.h new file mode 100644 index 0000000..b181006 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/key/KeyFactoryImpl.h @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for KeyFactory + * @file KeyFactoryImpl.h + * @date 2021.05.10 + * @author yujiechen + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace crypto +{ +class KeyFactoryImpl : public KeyFactory +{ +public: + using Ptr = std::shared_ptr; + KeyFactoryImpl() = default; + ~KeyFactoryImpl() override {} + + KeyInterface::Ptr createKey(bytesConstRef _keyData) override + { + return std::make_shared(_keyData); + } + + KeyInterface::Ptr createKey(bytes const& _keyData) override + { + return std::make_shared(_keyData); + } +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/key/KeyImpl.h b/bcos-crypto/bcos-crypto/signature/key/KeyImpl.h new file mode 100644 index 0000000..61614f6 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/key/KeyImpl.h @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for public key/private key + * @file KeyImpl.h + * @date 2021.04.01 + * @author yujiechen + */ +#pragma once +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +class KeyImpl : public KeyInterface +{ +public: + using Ptr = std::shared_ptr; + explicit KeyImpl(size_t _keySize) : m_keyData(std::make_shared(_keySize)) {} + explicit KeyImpl(bytesConstRef _data) : m_keyData(std::make_shared()) { decode(_data); } + explicit KeyImpl(bytes const& _data) : KeyImpl(ref(_data)) {} + explicit KeyImpl(size_t _keySize, std::shared_ptr _data) + : m_keyData(std::make_shared()) + { + if (_data->size() < _keySize) + { + BOOST_THROW_EXCEPTION(InvalidKey() << errinfo_comment( + "invalidKey, the key size: " + std::to_string(_data->size()) + + ", expected size:" + std::to_string(_keySize))); + } + *m_keyData = *_data; + } + + bool operator==(KeyImpl const& _comparedKey) { return (*m_keyData == _comparedKey.data()); } + bool operator!=(KeyImpl const& _comparedKey) { return !operator==(_comparedKey); } + + ~KeyImpl() override {} + + const bytes& data() const override { return *m_keyData; } + size_t size() const override { return m_keyData->size(); } + char* mutableData() override { return (char*)m_keyData->data(); } + const char* constData() const override { return (const char*)m_keyData->data(); } + std::shared_ptr encode() const override { return m_keyData; } + void decode(bytesConstRef _data) override { *m_keyData = _data.toBytes(); } + + void decode(bytes&& _data) override { *m_keyData = std::move(_data); } + + std::string shortHex() override + { + auto startIt = m_keyData->begin(); + auto endIt = m_keyData->end(); + if (m_keyData->size() > 4) + { + endIt = startIt + 4 * sizeof(byte); + } + return *toHexString(startIt, endIt) + "..."; + } + + std::string hex() override { return *toHexString(*m_keyData); } + +private: + std::shared_ptr m_keyData; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/key/KeyPair.h b/bcos-crypto/bcos-crypto/signature/key/KeyPair.h new file mode 100644 index 0000000..7160d24 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/key/KeyPair.h @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Basic implementation of KeyPairInterface + * @file KeyPair.h + * @date 2021.4.2 + * @author yujiechen + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +Address inline calculateAddress(Hash::Ptr _hashImpl, PublicPtr _publicKey) +{ + return right160(_hashImpl->hash(_publicKey)); +} + +class KeyPair : public KeyPairInterface +{ +public: + using Ptr = std::shared_ptr; + KeyPair(int _pubKeyLen, int _secretLen, KeyPairType _type) + : m_publicKey(std::make_shared(_pubKeyLen)), + m_secretKey(std::make_shared(_secretLen)), + m_type(_type) + {} + + KeyPair(Public const& _publicKey, Secret const& _secretKey, KeyPairType _type) + : m_publicKey(std::make_shared(_publicKey.data())), + m_secretKey(std::make_shared(_secretKey.data())), + m_type(_type) + {} + + ~KeyPair() override {} + KeyPairType keyPairType() const override { return m_type; } + SecretPtr secretKey() const override { return m_secretKey; } + PublicPtr publicKey() const override { return m_publicKey; } + + Address address(Hash::Ptr _hashImpl) override + { + return calculateAddress(_hashImpl, m_publicKey); + } + +protected: + PublicPtr m_publicKey; + SecretPtr m_secretKey; + KeyPairType m_type; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.cpp b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.cpp new file mode 100644 index 0000000..e15bbf2 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.cpp @@ -0,0 +1,136 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for secp256k1 signature algorithm + * @file Secp256k1Signature.cpp + * @date 2021.03.05 + * @author yujiechen + */ + +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +std::shared_ptr bcos::crypto::secp256k1Sign( + const KeyPairInterface& _keyPair, const HashType& _hash) +{ + FixedBytes signatureDataArray; + CInputBuffer privateKey{_keyPair.secretKey()->constData(), _keyPair.secretKey()->size()}; + CInputBuffer msgHash{(const char*)_hash.data(), HashType::SIZE}; + COutputBuffer secp256k1SignatureResult{ + (char*)signatureDataArray.data(), SECP256K1_SIGNATURE_LEN}; + auto retCode = wedpr_secp256k1_sign(&privateKey, &msgHash, &secp256k1SignatureResult); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION(SignException() << errinfo_comment( + "secp256k1Sign exception, raw data: " + _hash.hex())); + } + std::shared_ptr signatureData = std::make_shared(); + *signatureData = signatureDataArray.asBytes(); + return signatureData; +} + +bool bcos::crypto::secp256k1Verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) +{ + CInputBuffer publicKey{_pubKey->constData(), _pubKey->size()}; + CInputBuffer msgHash{(const char*)_hash.data(), HashType::SIZE}; + CInputBuffer signature{(const char*)_signatureData.data(), _signatureData.size()}; + auto verifyResult = wedpr_secp256k1_verify(&publicKey, &msgHash, &signature); + if (verifyResult == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +KeyPairInterface::UniquePtr bcos::crypto::secp256k1GenerateKeyPair() +{ + auto keyPair = std::make_unique(); + COutputBuffer publicKey{keyPair->publicKey()->mutableData(), keyPair->publicKey()->size()}; + COutputBuffer privateKey{keyPair->secretKey()->mutableData(), keyPair->secretKey()->size()}; + auto retCode = wedpr_secp256k1_gen_key_pair(&publicKey, &privateKey); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + GenerateKeyPairException() << errinfo_comment("secp256k1GenerateKeyPair exception")); + } + return keyPair; +} + +PublicPtr bcos::crypto::secp256k1Recover(const HashType& _hash, bytesConstRef _signatureData) +{ + CInputBuffer msgHash{(const char*)_hash.data(), HashType::SIZE}; + CInputBuffer signature{(const char*)_signatureData.data(), _signatureData.size()}; + auto pubKey = std::make_shared(SECP256K1_PUBLIC_LEN); + COutputBuffer publicKeyResult{pubKey->mutableData(), pubKey->size()}; + auto retCode = wedpr_secp256k1_recover_public_key(&msgHash, &signature, &publicKeyResult); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION(InvalidSignature() << errinfo_comment( + "invalid signature: secp256k1Recover failed, msgHash : " + + _hash.hex() + ", signData:" + *toHexString(_signatureData))); + } + return pubKey; +} + +std::pair bcos::crypto::secp256k1Recover(Hash::Ptr _hashImpl, bytesConstRef _input) +{ + struct + { + HashType hash; + h256 v; + h256 r; + h256 s; + } in; + memcpy(&in, _input.data(), std::min(_input.size(), sizeof(_input))); + u256 v = (u256)in.v; + if (v >= 27 && v <= 28) + { + auto signatureData = std::make_shared(in.r, in.s, (byte)((int)v - 27)); + try + { + auto encodedBytes = signatureData->encode(); + auto publicKey = secp256k1Recover( + in.hash, bytesConstRef(encodedBytes->data(), encodedBytes->size())); + auto address = calculateAddress(_hashImpl, publicKey); + return {true, address.asBytes()}; + } + catch (const std::exception& e) + { + CRYPTO_LOG(WARNING) << LOG_DESC("secp256k1Recover failed") + << LOG_KV("error", boost::diagnostic_information(e)); + } + } + return {false, {}}; +} + +bool Secp256k1Crypto::verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const +{ + return secp256k1Verify( + std::make_shared(SECP256K1_PUBLIC_LEN, _pubKeyBytes), _hash, _signatureData); +} + +KeyPairInterface::UniquePtr Secp256k1Crypto::createKeyPair(SecretPtr _secretKey) const +{ + return std::make_unique(_secretKey); +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.h b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.h new file mode 100644 index 0000000..b3de989 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1Crypto.h @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for secp256k1 signature algorithm + * @file Secp256k1Crypto.h + * @date 2021.03.05 + * @author yujiechen + */ + +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +const int SECP256K1_SIGNATURE_LEN = 65; +std::shared_ptr secp256k1Sign(const KeyPairInterface& _keyPair, const HashType& _hash); +bool secp256k1Verify(PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData); +KeyPairInterface::UniquePtr secp256k1GenerateKeyPair(); + +PublicPtr secp256k1Recover(const HashType& _hash, bytesConstRef _signatureData); +std::pair secp256k1Recover(Hash::Ptr _hashImpl, bytesConstRef _in); + +class Secp256k1Crypto : public SignatureCrypto +{ +public: + using Ptr = std::shared_ptr; + Secp256k1Crypto() = default; + ~Secp256k1Crypto() override = default; + std::shared_ptr sign( + const KeyPairInterface& _keyPair, const HashType& _hash, bool) const override + { + return secp256k1Sign(_keyPair, _hash); + } + bool verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const override + { + return secp256k1Verify(_pubKey, _hash, _signatureData); + } + + bool verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const override; + + PublicPtr recover(const HashType& _hash, bytesConstRef _signatureData) const override + { + return secp256k1Recover(_hash, _signatureData); + } + KeyPairInterface::UniquePtr generateKeyPair() const override + { + return secp256k1GenerateKeyPair(); + } + + std::pair recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _in) const override + { + return secp256k1Recover(_hashImpl, _in); + } + + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) const override; +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.cpp b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.cpp new file mode 100644 index 0000000..1883564 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.cpp @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for secp256k1 KeyPair + * @file Secp256k1KeyPair.cpp + * @date 2021.03.05 + * @author yujiechen + */ +#include +#include +#include + +bcos::crypto::PublicPtr bcos::crypto::secp256k1PriToPub(bcos::crypto::SecretPtr _secret) +{ + CInputBuffer privateKey{_secret->constData(), _secret->size()}; + + PublicPtr pubKey = std::make_shared(SECP256K1_PUBLIC_LEN); + COutputBuffer publicKey{pubKey->mutableData(), pubKey->size()}; + auto retCode = wedpr_secp256k1_derive_public_key(&privateKey, &publicKey); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + PriToPublicKeyException() << errinfo_comment("secp256k1PriToPub exception")); + } + return pubKey; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.h b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.h new file mode 100644 index 0000000..3589362 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/secp256k1/Secp256k1KeyPair.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for secp256k1 KeyPair + * @file Secp256k1KeyPair.h + * @date 2021.03.05 + * @author yujiechen + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace crypto +{ +const int SECP256K1_PUBLIC_LEN = 64; +const int SECP256K1_PRIVATE_LEN = 32; + +PublicPtr secp256k1PriToPub(SecretPtr _secret); +class Secp256k1KeyPair : public KeyPair +{ +public: + using Ptr = std::shared_ptr; + Secp256k1KeyPair() + : KeyPair(SECP256K1_PUBLIC_LEN, SECP256K1_PRIVATE_LEN, KeyPairType::Secp256K1) + {} + explicit Secp256k1KeyPair(SecretPtr _secretKey) : Secp256k1KeyPair() + { + m_secretKey = _secretKey; + m_publicKey = priToPub(_secretKey); + m_type = KeyPairType::Secp256K1; + } + virtual PublicPtr priToPub(SecretPtr _secret) { return secp256k1PriToPub(_secret); } +}; +} // namespace crypto +} // namespace bcos diff --git a/bcos-crypto/bcos-crypto/signature/sm2.cpp b/bcos-crypto/bcos-crypto/signature/sm2.cpp new file mode 100644 index 0000000..12a9f9f --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2.cpp @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm2 algorithm + * @file sm2.cpp + * @date 2022.01.17 + * @author yujiechen + */ +#include +#include +#include +#include + +#if WITH_SM2_OPTIMIZE +#include "fastsm2/FastSM2Crypto.h" +bcos::crypto::FastSM2Crypto c_sm2Crypto; +bcos::crypto::FastSM2KeyPair c_sm2KeyPair; +#else +bcos::crypto::SM2Crypto c_sm2Crypto; +bcos::crypto::SM2KeyPair c_sm2KeyPair; +#endif + + +using namespace bcos; +using namespace bcos::crypto; + +PublicPtr bcos::crypto::sm2PriToPub(SecretPtr _secretKey) +{ + return c_sm2KeyPair.priToPub(_secretKey); +} + +std::shared_ptr bcos::crypto::sm2Sign( + const KeyPairInterface& _keyPair, const HashType& _hash, bool _signatureWithPub) +{ + return c_sm2Crypto.sign(_keyPair, _hash, _signatureWithPub); +} + +KeyPairInterface::UniquePtr bcos::crypto::sm2GenerateKeyPair() +{ + return c_sm2Crypto.generateKeyPair(); +} + +bool bcos::crypto::sm2Verify(PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) +{ + return c_sm2Crypto.verify(_pubKey, _hash, _signatureData); +} + +PublicPtr bcos::crypto::sm2Recover(const HashType& _hash, bytesConstRef _signData) +{ + return c_sm2Crypto.recover(_hash, _signData); +} + +std::pair bcos::crypto::sm2Recover(Hash::Ptr _hashImpl, bytesConstRef _input) +{ + return c_sm2Crypto.recoverAddress(_hashImpl, _input); +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/sm2.h b/bcos-crypto/bcos-crypto/signature/sm2.h new file mode 100644 index 0000000..4f8a04a --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2.h @@ -0,0 +1,39 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm2 algorithm + * @file sm2.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once +#include +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +std::shared_ptr sm2Sign( + const KeyPairInterface& _keyPair, const HashType& _hash, bool _signatureWithPub = false); +bool sm2Verify(PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData); +KeyPairInterface::UniquePtr sm2GenerateKeyPair(); +PublicPtr sm2Recover(const HashType& _hash, bytesConstRef _signData); + +std::pair sm2Recover(Hash::Ptr _hashImpl, bytesConstRef _in); +PublicPtr sm2PriToPub(SecretPtr _secret); +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.cpp b/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.cpp new file mode 100644 index 0000000..68e622c --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.cpp @@ -0,0 +1,127 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm2 signature + * @file SM2Crypto.cpp + * @date 2021.03.10 + * @author yujiechen + */ +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +bool SM2Crypto::verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const +{ + return verify( + std::make_shared(SM2_PUBLIC_KEY_LEN, _pubKeyBytes), _hash, _signatureData); +} + +KeyPairInterface::UniquePtr SM2Crypto::createKeyPair(SecretPtr _secretKey) const +{ + return m_keyPairFactory->createKeyPair(_secretKey); +} + +std::shared_ptr SM2Crypto::sign( + const KeyPairInterface& _keyPair, const HashType& _hash, bool _signatureWithPub) const +{ + FixedBytes signatureDataArray; + CInputBuffer rawPrivateKey{_keyPair.secretKey()->constData(), _keyPair.secretKey()->size()}; + CInputBuffer rawPublicKey{_keyPair.publicKey()->constData(), _keyPair.publicKey()->size()}; + CInputBuffer rawMsgHash{(const char*)_hash.data(), HashType::SIZE}; + COutputBuffer sm2SignatureResult{(char*)signatureDataArray.data(), SM2_SIGNATURE_LEN}; + auto retCode = m_signer(&rawPrivateKey, &rawPublicKey, &rawMsgHash, &sm2SignatureResult); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + SignException() << errinfo_comment("sm2Sign failed, raw data: " + _hash.hex())); + } + std::shared_ptr signatureData = std::make_shared(); + *signatureData = signatureDataArray.asBytes(); + // append the public key + if (_signatureWithPub) + { + signatureData->insert(signatureData->end(), _keyPair.publicKey()->mutableData(), + _keyPair.publicKey()->mutableData() + _keyPair.publicKey()->size()); + } + return signatureData; +} + +bool SM2Crypto::verify(PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const +{ + CInputBuffer publicKey{_pubKey->constData(), _pubKey->size()}; + CInputBuffer messageHash{(const char*)_hash.data(), HashType::SIZE}; + + auto signatureWithoutPub = bytesConstRef(_signatureData.data(), SM2_SIGNATURE_LEN); + CInputBuffer signature{(const char*)signatureWithoutPub.data(), signatureWithoutPub.size()}; + auto verifyResult = m_verifier(&publicKey, &messageHash, &signature); + if (verifyResult == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +PublicPtr SM2Crypto::recover(const HashType& _hash, bytesConstRef _signData) const +{ + auto signatureStruct = std::make_shared(_signData); + auto sm2Pub = std::make_shared(SM2_PUBLIC_KEY_LEN, signatureStruct->pub()); + if (verify(sm2Pub, _hash, _signData)) + { + return sm2Pub; + } + BOOST_THROW_EXCEPTION(InvalidSignature() << errinfo_comment( + "invalid signature: sm2 recover public key failed, msgHash : " + + _hash.hex() + ", signature:" + *toHexString(_signData))); +} + +std::pair SM2Crypto::recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _input) const +{ + struct + { + HashType hash; + h512 pub; + h256 r; + h256 s; + } in; + memcpy(&in, _input.data(), std::min(_input.size(), sizeof(_input))); + // verify the signature + auto signatureData = std::make_shared(in.r, in.s, in.pub.ref()); + try + { + auto encodedData = signatureData->encode(); + auto sm2Pub = std::make_shared(SM2_PUBLIC_KEY_LEN, signatureData->pub()); + if (verify(sm2Pub, in.hash, bytesConstRef(encodedData->data(), encodedData->size()))) + { + auto address = calculateAddress(_hashImpl, sm2Pub); + return {true, address.asBytes()}; + } + } + catch (const std::exception& e) + { + CRYPTO_LOG(WARNING) << LOG_DESC("sm2Recover failed") + << LOG_KV("error", boost::diagnostic_information(e)); + } + return {false, {}}; +} + +KeyPairInterface::UniquePtr SM2Crypto::generateKeyPair() const +{ + return m_keyPairFactory->generateKeyPair(); +} diff --git a/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.h b/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.h new file mode 100644 index 0000000..000f32a --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2/SM2Crypto.h @@ -0,0 +1,70 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm2 signature + * @file SM2Crypto.h + * @date 2021.03.10 + * @author yujiechen + */ +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +const int SM2_SIGNATURE_LEN = 64; +class SM2Crypto : public SignatureCrypto +{ +public: + using Ptr = std::shared_ptr; + SM2Crypto() + { + m_signer = wedpr_sm2_sign_fast; + m_verifier = wedpr_sm2_verify; + m_keyPairFactory = std::make_shared(); + } + ~SM2Crypto() = default; + std::shared_ptr sign(const KeyPairInterface& _keyPair, const HashType& _hash, + bool _signatureWithPub = false) const override; + + bool verify( + PublicPtr _pubKey, const HashType& _hash, bytesConstRef _signatureData) const override; + + bool verify(std::shared_ptr _pubKeyBytes, const HashType& _hash, + bytesConstRef _signatureData) const override; + + PublicPtr recover(const HashType& _hash, bytesConstRef _signatureData) const override; + KeyPairInterface::UniquePtr generateKeyPair() const override; + + std::pair recoverAddress(Hash::Ptr _hashImpl, bytesConstRef _in) const override; + + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) const override; + +protected: + std::function + m_signer; + + std::function + m_verifier; + KeyPairFactory::Ptr m_keyPairFactory; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.cpp b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.cpp new file mode 100644 index 0000000..863e97d --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.cpp @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for SM2KeyPair + * @file SM2KeyPair.cpp + * @date 2021.03.10 + * @author yujiechen + */ +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +SM2KeyPair::SM2KeyPair(SecretPtr _secretKey) : SM2KeyPair() +{ + if (_secretKey->size() != SM2_PRIVATE_KEY_LEN) + { + BOOST_THROW_EXCEPTION(GenerateKeyPairException() << errinfo_comment( + "Invalid InvalidSecretKey, sm2 secret length must be " + + std::to_string(SM2_PRIVATE_KEY_LEN))); + } + m_secretKey = _secretKey; + m_publicKey = priToPub(_secretKey); +} + +PublicPtr SM2KeyPair::priToPub(SecretPtr _secretKey) +{ + CInputBuffer privateKey{_secretKey->constData(), _secretKey->size()}; + auto pubKey = std::make_shared(SM2_PUBLIC_KEY_LEN); + COutputBuffer publicKey{pubKey->mutableData(), pubKey->size()}; + auto retCode = m_publicKeyDeriver(&privateKey, &publicKey); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + PriToPublicKeyException() << errinfo_comment("sm2PriToPub exception")); + } + return pubKey; +} \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.h b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.h new file mode 100644 index 0000000..8ced522 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPair.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for SM2KeyPair + * @file SM2KeyPair.h + * @date 2021.03.10 + * @author yujiechen + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace crypto +{ +const int SM2_PRIVATE_KEY_LEN = 32; +const int SM2_PUBLIC_KEY_LEN = 64; +PublicPtr sm2PriToPub(SecretPtr _secret); +class SM2KeyPair : public KeyPair +{ +public: + SM2KeyPair() : KeyPair(SM2_PUBLIC_KEY_LEN, SM2_PRIVATE_KEY_LEN, KeyPairType::SM2) + { + m_publicKeyDeriver = wedpr_sm2_derive_public_key; + } + explicit SM2KeyPair(SecretPtr _secretKey); + ~SM2KeyPair() override {} + virtual PublicPtr priToPub(SecretPtr _secretKey); + +protected: + std::function + m_publicKeyDeriver; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPairFactory.h b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPairFactory.h new file mode 100644 index 0000000..886e433 --- /dev/null +++ b/bcos-crypto/bcos-crypto/signature/sm2/SM2KeyPairFactory.h @@ -0,0 +1,62 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for sm2 keyPairFactory algorithm + * @file SM2KeyPairFactory.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once +#include +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +class SM2KeyPairFactory : public KeyPairFactory +{ +public: + using Ptr = std::shared_ptr; + SM2KeyPairFactory() { m_keyPairGenerator = wedpr_sm2_gen_key_pair; } + ~SM2KeyPairFactory() override {} + + virtual KeyPairInterface::UniquePtr createKeyPair() { return std::make_unique(); } + KeyPairInterface::UniquePtr createKeyPair(SecretPtr _secretKey) override + { + return std::make_unique(_secretKey); + } + + KeyPairInterface::UniquePtr generateKeyPair() override + { + auto keyPair = createKeyPair(); + COutputBuffer publicKey{keyPair->publicKey()->mutableData(), keyPair->publicKey()->size()}; + COutputBuffer privateKey{keyPair->secretKey()->mutableData(), keyPair->secretKey()->size()}; + auto retCode = m_keyPairGenerator(&publicKey, &privateKey); + if (retCode != WEDPR_SUCCESS) + { + BOOST_THROW_EXCEPTION( + GenerateKeyPairException() << errinfo_comment("generateKeyPair exception")); + } + return keyPair; + } + +protected: + std::function + m_keyPairGenerator; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/zkp/Common.h b/bcos-crypto/bcos-crypto/zkp/Common.h new file mode 100644 index 0000000..9d515ea --- /dev/null +++ b/bcos-crypto/bcos-crypto/zkp/Common.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the exceptions for zkp of bcos-crypto + * @file Common.h + * @date 2022.07.18 + * @author yujiechen + */ +#pragma once +#include "Exceptions.h" +#include +#include + +namespace bcos +{ +namespace crypto +{ +inline CInputBuffer bytesToInputBuffer(bytes const& data, size_t _length) +{ + if (data.size() < _length) + { + BOOST_THROW_EXCEPTION( + InvalidInputInput() << errinfo_comment( + "InvalidInputInput: the data size must be at least " + std::to_string(_length))); + } + return CInputBuffer{(const char*)data.data(), _length}; +} +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/zkp/Exceptions.h b/bcos-crypto/bcos-crypto/zkp/Exceptions.h new file mode 100644 index 0000000..45409d9 --- /dev/null +++ b/bcos-crypto/bcos-crypto/zkp/Exceptions.h @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the exceptions for zkp of bcos-crypto + * @file Execptions.h + * @date 2022.07.18 + * @author yujiechen + */ +#pragma once +#include + +namespace bcos +{ +namespace crypto +{ +DERIVE_BCOS_EXCEPTION(ZkpExcetpion); +DERIVE_BCOS_EXCEPTION(InvalidInputInput); +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.cpp b/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.cpp new file mode 100644 index 0000000..704fa44 --- /dev/null +++ b/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.cpp @@ -0,0 +1,161 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for discrete-logarithm-proof + * @file DiscreteLogarithmZkp.cpp + * @date 2022.01.17 + * @author yujiechen + */ +#include "DiscreteLogarithmZkp.h" +#include "bcos-crypto/zkp/Common.h" + +using namespace bcos; +using namespace bcos::crypto; + +// wedpr_verify_either_equality_relationship_proof +bool DiscreteLogarithmZkp::verifyEitherEqualityProof(bytes const& c1PointData, + bytes const& c2PointData, bytes const& c3PointData, bytes const& equalityProofData, + bytes const& basePointData, bytes const& blindingBasePointData) +{ + auto c1Point = bytesToInputBuffer(c1PointData, m_pointLen); + auto c2Point = bytesToInputBuffer(c2PointData, m_pointLen); + auto c3Point = bytesToInputBuffer(c3PointData, m_pointLen); + CInputBuffer proof{(const char*)equalityProofData.data(), equalityProofData.size()}; + auto basePoint = bytesToInputBuffer(basePointData, m_pointLen); + auto blindingBasePoint = bytesToInputBuffer(blindingBasePointData, m_pointLen); + auto ret = wedpr_verify_either_equality_relationship_proof( + &c1Point, &c2Point, &c3Point, &proof, &basePoint, &blindingBasePoint); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_verify_knowledge_proof +bool DiscreteLogarithmZkp::verifyKnowledgeProof(bytes const& pointData, + bytes const& knowledgeProofData, bytes const& basePointData, bytes const& blindingBasePointData) +{ + auto point = bytesToInputBuffer(pointData, m_pointLen); + CInputBuffer proof{(const char*)knowledgeProofData.data(), knowledgeProofData.size()}; + auto basePoint = bytesToInputBuffer(basePointData, m_pointLen); + auto blindingBasePoint = bytesToInputBuffer(blindingBasePointData, m_pointLen); + + auto ret = wedpr_verify_knowledge_proof(&point, &proof, &basePoint, &blindingBasePoint); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_verify_format_proof +bool DiscreteLogarithmZkp::verifyFormatProof(bytes const& c1Point, bytes const& c2Point, + bytes const& formatProofData, bytes const& c1BasePointData, bytes const& c2BasePointData, + bytes const& blindingBasePointData) +{ + auto c1 = bytesToInputBuffer(c1Point, m_pointLen); + auto c2 = bytesToInputBuffer(c2Point, m_pointLen); + CInputBuffer proof{(const char*)formatProofData.data(), formatProofData.size()}; + auto c1BasePoint = bytesToInputBuffer(c1BasePointData, m_pointLen); + auto c2BasePoint = bytesToInputBuffer(c2BasePointData, m_pointLen); + auto blindingBasePoint = bytesToInputBuffer(blindingBasePointData, m_pointLen); + auto ret = + wedpr_verify_format_proof(&c1, &c2, &proof, &c1BasePoint, &c2BasePoint, &blindingBasePoint); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_verify_sum_relationship +bool DiscreteLogarithmZkp::verifySumProof(bytes const& c1Point, bytes const& c2Point, + bytes const& c3Point, bytes const& arithmeticProofData, bytes const& valueBasePointData, + bytes const& blindingBasePointData) +{ + auto c1 = bytesToInputBuffer(c1Point, m_pointLen); + auto c2 = bytesToInputBuffer(c2Point, m_pointLen); + auto c3 = bytesToInputBuffer(c3Point, m_pointLen); + CInputBuffer proof{(const char*)arithmeticProofData.data(), arithmeticProofData.size()}; + auto valueBasePoint = bytesToInputBuffer(valueBasePointData, m_pointLen); + auto blindingBasePoint = bytesToInputBuffer(blindingBasePointData, m_pointLen); + auto ret = + wedpr_verify_sum_relationship(&c1, &c2, &c3, &proof, &valueBasePoint, &blindingBasePoint); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_verify_product_relationship +bool DiscreteLogarithmZkp::verifyProductProof(bytes const& c1Point, bytes const& c2Point, + bytes const& c3Point, bytes const& arithmeticProofData, bytes const& valueBasePointData, + bytes const& blindingBasePointData) +{ + auto c1 = bytesToInputBuffer(c1Point, m_pointLen); + auto c2 = bytesToInputBuffer(c2Point, m_pointLen); + auto c3 = bytesToInputBuffer(c3Point, m_pointLen); + CInputBuffer proof{(const char*)arithmeticProofData.data(), arithmeticProofData.size()}; + auto valueBasePoint = bytesToInputBuffer(valueBasePointData, m_pointLen); + auto blindingBasePoint = bytesToInputBuffer(blindingBasePointData, m_pointLen); + auto ret = wedpr_verify_product_relationship( + &c1, &c2, &c3, &proof, &valueBasePoint, &blindingBasePoint); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_verify_equality_relationship_proof +bool DiscreteLogarithmZkp::verifyEqualityProof(bytes const& c1Point, bytes const c2Point, + bytes const& equalityProofData, bytes const& basePoint1Data, bytes const& basePoint2Data) +{ + auto c1 = bytesToInputBuffer(c1Point, m_pointLen); + auto c2 = bytesToInputBuffer(c2Point, m_pointLen); + CInputBuffer proof{(const char*)equalityProofData.data(), equalityProofData.size()}; + + auto basePoint1 = bytesToInputBuffer(basePoint1Data, m_pointLen); + auto basePoint2 = bytesToInputBuffer(basePoint2Data, m_pointLen); + auto ret = wedpr_verify_equality_relationship_proof(&c1, &c2, &proof, &basePoint1, &basePoint2); + if (ret == WEDPR_SUCCESS) + { + return true; + } + return false; +} + +// wedpr_aggregate_ristretto_point +bytes DiscreteLogarithmZkp::aggregateRistrettoPoint(bytes const& pointSum, bytes const& pointShare) +{ + // with empty pointShare to aggregate + if (pointShare.size() == 0) + { + return pointSum; + } + auto pointSumInput = bytesToInputBuffer(pointSum, m_pointLen); + auto pointShareInput = bytesToInputBuffer(pointShare, m_pointLen); + bytes aggregatedResult; + aggregatedResult.resize(m_pointLen); + COutputBuffer result{(char*)aggregatedResult.data(), m_pointLen}; + auto ret = wedpr_aggregate_ristretto_point(&pointSumInput, &pointShareInput, &result); + if (ret == WEDPR_SUCCESS) + { + return aggregatedResult; + } + BOOST_THROW_EXCEPTION(ZkpExcetpion() << errinfo_comment("aggregateRistrettoPoint error")); +} diff --git a/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.h b/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.h new file mode 100644 index 0000000..fc102c0 --- /dev/null +++ b/bcos-crypto/bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.h @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for discrete-logarithm-proof + * @file DiscreteLogarithmZkp.h + * @date 2022.01.17 + * @author yujiechen + */ +#pragma once +#include +#include +#include +namespace bcos +{ +namespace crypto +{ +class DiscreteLogarithmZkp +{ +public: + using Ptr = std::shared_ptr; + DiscreteLogarithmZkp(size_t _pointLen) : m_pointLen(_pointLen) {} + DiscreteLogarithmZkp() {} + + virtual ~DiscreteLogarithmZkp() {} + + // wedpr_verify_either_equality_relationship_proof + bool verifyEitherEqualityProof(bytes const& c1Point, bytes const& c2Point, bytes const& c3Point, + bytes const& equalityProof, bytes const& basePoint, bytes const& blindingBasePoint); + + // wedpr_verify_knowledge_proof + bool verifyKnowledgeProof(bytes const& pointData, bytes const& knowledgeProof, + bytes const& basePointData, bytes const& blindingBasePoint); + + // wedpr_verify_format_proof + bool verifyFormatProof(bytes const& c1Point, bytes const& c2Point, bytes const& formatProof, + bytes const& c1BasePoint, bytes const& c2BasePoint, bytes const& blindingBasePoint); + + // wedpr_verify_sum_relationship + bool verifySumProof(bytes const& c1Point, bytes const& c2Point, bytes const& c3Point, + bytes const& arithmeticProof, bytes const& valueBasePoint, bytes const& blindingBasePoint); + + // wedpr_verify_product_relationship + bool verifyProductProof(bytes const& c1Point, bytes const& c2Point, bytes const& c3Point, + bytes const& arithmeticProof, bytes const& valueBasePoint, bytes const& blindingBasePoint); + + // wedpr_verify_equality_relationship_proof + bool verifyEqualityProof(bytes const& c1Point, bytes const c2Point, bytes const& equalityProof, + bytes const& basePoint1, bytes const& basePoint2); + + // wedpr_aggregate_ristretto_point + bytes aggregateRistrettoPoint(bytes const& pointSum, bytes const& pointShare); + +private: + size_t m_pointLen = 32; +}; +} // namespace crypto +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/demo/CMakeLists.txt b/bcos-crypto/demo/CMakeLists.txt new file mode 100644 index 0000000..844d57f --- /dev/null +++ b/bcos-crypto/demo/CMakeLists.txt @@ -0,0 +1,15 @@ +find_package(ZLIB REQUIRED) + +add_executable(perf_demo perf_demo.cpp) +target_link_libraries(perf_demo PRIVATE bcos-crypto ZLIB::ZLIB) + +if(ENABLE_IPPCRYPTO) + find_package(IPPCrypto REQUIRED MODULE) + if (NOT IPPCRYPTO_FOUND) + message(FATAL_ERROR "No Intel IPP Cryptography library found on the system. To build bcos-crypto, please specify -DIPPCRYPTO_ROOT_DIR= option, where is the path to directory that contains include/ and lib/ folders of Intel IPP Cryptography product.") + endif() + + add_executable(hasher_test hasher_test.cpp) + target_include_directories(hasher_test PUBLIC ${IPPCRYPTO_INCLUDE_DIRS}) + target_link_libraries(hasher_test PUBLIC ${BCOS_CRYPTO_TARGET} Boost::thread ${IPPCRYPTO_LIBRARIES} ZLIB::ZLIB) +endif() \ No newline at end of file diff --git a/bcos-crypto/demo/hasher_test.cpp b/bcos-crypto/demo/hasher_test.cpp new file mode 100644 index 0000000..11309b4 --- /dev/null +++ b/bcos-crypto/demo/hasher_test.cpp @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto::hasher; + +template +auto hasherTest(std::string_view name, RANGES::random_access_range auto&& input, + size_t totalSize, bool multiThread) +{ + std::vector> results{RANGES::size(input)}; + + std::cout << " " << name; + auto begin = std::chrono::high_resolution_clock::now(); + +#pragma omp parallel if (multiThread) + { + HasherType hasher; + +#pragma omp for + for (RANGES::range_size_t i = 0; i < RANGES::size(input); ++i) + { + hasher.update(input[i]); + results[i] = hasher.final(); + } + } + + auto duration = std::chrono::duration_cast( + std::chrono::high_resolution_clock::now() - begin) + .count(); + auto throughput = ((double)totalSize / ((double)duration / 1000.0)) / 1024.0 / 1024.0; + std::cout << " duration: " << duration << "ms throughput: " << throughput << "MB/s" + << std::endl; + + return results; +} + +template +void testHash(size_t count, bool multiThread) +{ + constexpr auto valueSize = blockSize * 1024; + std::vector> inputData; + inputData.resize(count); + + // Generate random data +#pragma omp parallel + { + std::mt19937 random(std::random_device{}()); + +#pragma omp for + for (typename decltype(inputData)::size_type i = 0; i < inputData.size(); ++i) + { + auto& output = inputData[i]; + std::span view{ + (unsigned int*)output.data(), output.size() / sizeof(unsigned int)}; + for (auto& num : view) + { + num = random(); + } + } + } + + hasherTest( + "OpenSSL_SHA2_256", inputData, valueSize * count, multiThread); + hasherTest( + "OpenSSL_SM3", inputData, valueSize * count, multiThread); + + hasherTest( + "IPPCrypto_SHA2_256", inputData, valueSize * count, multiThread); + hasherTest( + "IPPCrypto_SM3", inputData, valueSize * count, multiThread); +} + +int main(int argc, char* argv[]) +{ + boost::ignore_unused(argc, argv); + if (argc < 2) + { + std::cout << "Usage: " << argv[0] << " [count] [enable multithread(0/1)]" << std::endl; + return 1; + } + + auto count = boost::lexical_cast(argv[1]); + auto multiThread = boost::lexical_cast(argv[2]); + + std::cout << "Testing 1k chunk..." << std::endl; + testHash<1>(count, multiThread); + std::cout << "Testing 4k chunk..." << std::endl; + testHash<4>(count, multiThread); + std::cout << "Testing 8k chunk..." << std::endl; + testHash<8>(count, multiThread); + std::cout << "Testing 16k chunk..." << std::endl; + testHash<16>(count, multiThread); + + return 0; +} \ No newline at end of file diff --git a/bcos-crypto/demo/perf_demo.cpp b/bcos-crypto/demo/perf_demo.cpp new file mode 100644 index 0000000..a7addce --- /dev/null +++ b/bcos-crypto/demo/perf_demo.cpp @@ -0,0 +1,369 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief perf for bcos-crypto + * @file perf_demo.cpp + * @date 2022.06.04 + * @author yujiechen ancelmo + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +const std::string HASH_CMD = "hash"; +const std::string SIGN_CMD = "sign"; +const std::string ENCRYPT_CMD = "enc"; + +void Usage(std::string const& _appName) +{ + std::cout << _appName << " [" << HASH_CMD << "/" << SIGN_CMD << "/" << ENCRYPT_CMD << "] count" + << std::endl; +} + +double getTPS(int64_t _endT, int64_t _startT, size_t _count) +{ + return (1000.0 * (double)_count) / (double)(_endT - _startT); +} + +template +std::vector hashPerf( + Hash& _hash, std::string_view _hashName, std::string_view _inputData, size_t _count) +{ + std::vector result(_count); + + std::cout << std::endl; + std::cout << "----------- " << _hashName << " perf start -----------" << std::endl; + auto startT = utcTime(); + for (size_t i = 0; i < _count; i++) + { + result[i] = _hash->hash(bytesConstRef((byte const*)_inputData.data(), _inputData.size())); + } + std::cout << "input data size: " << (double)_inputData.size() / 1000.0 + << "KB, loops: " << _count << ", timeCost: " << utcTime() - startT << std::endl; + std::cout << "TPS of " << _hashName << ": " + << getTPS(utcTime(), startT, _count) * (double)_inputData.size() / (1024 * 1024) + << " MB/s" << std::endl; + std::cout << "----------- " << _hashName << " perf end -----------" << std::endl; + std::cout << std::endl; + + return result; +} + +std::vector hashingPerf( + bcos::crypto::hasher::Hasher auto& hasher, std::string_view _inputData, size_t _count) +{ + std::vector result(_count); + + std::string hashName = std::string{"New Hashing Test: "} + typeid(hasher).name(); + std::cout << std::endl; + std::cout << "----------- " << hashName << " perf start -----------" << std::endl; + auto startT = utcTime(); + + for (size_t i = 0; i < _count; i++) + { + hasher.update(_inputData); + hasher.final(result[i]); + } + + std::cout << "input data size: " << (double)_inputData.size() / 1000.0 + << "KB, loops: " << _count << ", timeCost: " << utcTime() - startT << std::endl; + std::cout << "TPS of " << hashName << ": " + << getTPS(utcTime(), startT, _count) * (double)_inputData.size() / (1024 * 1024) + << " MB/s" << std::endl; + std::cout << "----------- " << hashName << " perf end -----------" << std::endl; + std::cout << std::endl; + + return result; +} + +void stTest(std::string_view inputData, size_t _count) +{ + // keccak256 perf + // auto hashImpl = std::make_shared(); + // auto keccak256Old = hashPerf(hashImpl, "Keccak256", inputData, _count); + + // openssl::OPENSSL_Keccak256_Hasher hasherKeccak256; + // auto keccak256New = hashingPerf(hasherKeccak256, inputData, _count); + // if (keccak256Old[0] != keccak256New[0]) + // { + // std::cout << "Wrong keccak256 hash result! old: " << keccak256Old[0] + // << " new: " << keccak256New[0] << std::endl; + // } + + // sha3 perf + auto hashImpl2 = std::make_shared(); + auto sha3Old = hashPerf(hashImpl2, "SHA3", inputData, _count); + + hasher::openssl::OpenSSL_SHA3_256_Hasher hasherSHA3; + auto sha3New = hashingPerf(hasherSHA3, inputData, _count); + + for (size_t i = 0; i < _count; ++i) + { + if (sha3Old[i] != sha3New[i]) + { + std::cout << "Wrong sha3 hash result! old: " << sha3Old[i] << " new: " << sha3New[i] + << std::endl; + break; + } + } + + // sm3 perf + auto hashImpl3 = std::make_shared(); + auto sm3Old = hashPerf(hashImpl3, "SM3", inputData, _count); + + hasher::openssl::OpenSSL_SM3_Hasher hasherSM3; + auto sm3New = hashingPerf(hasherSM3, inputData, _count); + + for (size_t i = 0; i < _count; ++i) + { + if (sm3Old[i] != sm3New[i]) + { + std::cout << "Wrong sm3 hash result! old: " << sm3Old[i] << " new: " << sm3New[i] + << std::endl; + break; + } + } + + auto hashImpl4 = std::make_shared(); + auto sha256Old = hashPerf(hashImpl4, "SHA256", inputData, _count); + + hasher::openssl::OpenSSL_SHA2_256_Hasher hasherSHA2; + auto sha256New = hashingPerf(hasherSHA2, inputData, _count); + + for (size_t i = 0; i < _count; ++i) + { + if (sha256Old[i] != sha256New[i]) + { + std::cout << "Wrong sha256 hash result! old: " << sha256Old[i] + << " new: " << sha256New[i] << std::endl; + break; + } + } +} + +void signaturePerf(SignatureCrypto::Ptr _signatureImpl, HashType const& _msgHash, + std::string const& _signatureName, size_t _count) +{ + std::cout << std::endl; + std::cout << "----------- " << _signatureName << " perf test start -----------" << std::endl; + + auto keyPair = _signatureImpl->generateKeyPair(); + // sign + std::shared_ptr signedData; + auto startT = utcTime(); + for (size_t i = 0; i < _count; i++) + { + signedData = _signatureImpl->sign(*keyPair, _msgHash, false); + } + std::cout << "TPS of " << _signatureName << " sign:" << getTPS(utcTime(), startT, _count) + << std::endl; + + // verify + startT = utcTime(); + for (size_t i = 0; i < _count; i++) + { + assert(_signatureImpl->verify(keyPair->publicKey(), _msgHash, ref(*signedData))); + } + std::cout << "TPS of " << _signatureName << " verify:" << getTPS(utcTime(), startT, _count) + << std::endl; + + // recover + signedData = _signatureImpl->sign(*keyPair, _msgHash, true); + startT = utcTime(); + for (size_t i = 0; i < _count; i++) + { + _signatureImpl->recover(_msgHash, ref(*signedData)); + } + std::cout << "TPS of " << _signatureName << " recover:" << getTPS(utcTime(), startT, _count) + << std::endl; + std::cout << "----------- " << _signatureName << " perf test end -----------" << std::endl; + std::cout << std::endl; +} + +void derivePublicKeyPerf(SignatureCrypto::Ptr _signatureImpl, std::string const& _signatureName, + const KeyPairInterface& _keyPair, size_t _count) +{ + std::cout << std::endl; + std::cout << "----------- " << _signatureName << " derivePublicKeyPerf test start -----------" + << std::endl; + auto startT = utcTime(); + KeyPairInterface::Ptr keyPair; + for (size_t i = 0; i < _count; i++) + { + keyPair = _signatureImpl->createKeyPair(_keyPair.secretKey()); + assert(keyPair->secretKey()->data() == _keyPair.secretKey()->data()); + assert(keyPair->publicKey()->data() == _keyPair.publicKey()->data()); + } + std::cout << "TPS of " << _signatureName + << " derivePublicKeyPerf:" << getTPS(utcTime(), startT, _count) << std::endl; + std::cout << "----------- " << _signatureName << " derivePublicKeyPerf test end -----------" + << std::endl; +} + +void derivePublicKeyPerf(size_t _count) +{ + SignatureCrypto::Ptr signatureImpl = nullptr; + signatureImpl = std::make_shared(); + auto keyPair = signatureImpl->generateKeyPair(); + derivePublicKeyPerf(signatureImpl, "secp256k1", *keyPair, _count); + + signatureImpl = std::make_shared(); + keyPair = signatureImpl->generateKeyPair(); + derivePublicKeyPerf(signatureImpl, "SM2", *keyPair, _count); + +#if SM2_OPTIMIZE + signatureImpl = std::make_shared(); + keyPair = signatureImpl->generateKeyPair(); + derivePublicKeyPerf(signatureImpl, "FastSM2", *keyPair, _count); +#endif + + signatureImpl = std::make_shared(); + keyPair = signatureImpl->generateKeyPair(); + derivePublicKeyPerf(signatureImpl, "Ed25519Crypto", *keyPair, _count); +} +void signaturePerf(size_t _count) +{ + std::string inputData = "signature perf test"; + auto msgHash = keccak256Hash(bytesConstRef((byte const*)inputData.c_str(), inputData.size())); + // secp256k1 perf + SignatureCrypto::Ptr signatureImpl = std::make_shared(); + signaturePerf(signatureImpl, msgHash, "secp256k1", _count); + + // sm2 perf + signatureImpl = std::make_shared(); + signaturePerf(signatureImpl, msgHash, "SM2", _count); + +#if SM2_OPTIMIZE + // fastsm2 perf + signatureImpl = std::make_shared(); + signaturePerf(signatureImpl, msgHash, "FastSM2", _count); +#endif + + // ed25519 perf + signatureImpl = std::make_shared(); + signaturePerf(signatureImpl, msgHash, "Ed25519", _count); +} + +void encryptPerf(SymmetricEncryption::Ptr _encryptor, std::string const& _inputData, + const std::string& _encryptorName, size_t _count) +{ + std::cout << std::endl; + std::cout << "----------- " << _encryptorName << " perf test start -----------" << std::endl; + std::string key = "abcdefgwerelkewrwerw"; + // encrypt + bytesPointer encryptedData; + auto startT = utcTime(); + for (size_t i = 0; i < _count; i++) + { + encryptedData = _encryptor->symmetricEncrypt((const unsigned char*)_inputData.c_str(), + _inputData.size(), (const unsigned char*)key.c_str(), key.size()); + } + std::cout << "PlainData size:" << (double)_inputData.size() / 1000.0 << " KB, loops: " << _count + << ", timeCost: " << utcTime() - startT << " ms" << std::endl; + std::cout << "TPS of " << _encryptorName << " encrypt:" + << (getTPS(utcTime(), startT, _count) * (double)(_inputData.size())) / 1000.0 + << "KB/s" << std::endl; + std::cout << std::endl; + // decrypt + startT = utcTime(); + bytesPointer decryptedData; + for (size_t i = 0; i < _count; i++) + { + decryptedData = _encryptor->symmetricDecrypt((const unsigned char*)encryptedData->data(), + encryptedData->size(), (const unsigned char*)key.c_str(), key.size()); + } + std::cout << "CiperData size:" << (double)encryptedData->size() / 1000.0 + << " KB, loops: " << _count << ", timeCost:" << utcTime() - startT << " ms" + << std::endl; + std::cout << "TPS of " << _encryptorName << " decrypt:" + << (getTPS(utcTime(), startT, _count) * (double)_inputData.size()) / 1000.0 << "KB/s" + << std::endl; + bytes plainBytes(_inputData.begin(), _inputData.end()); + assert(plainBytes == *decryptedData); + + std::cout << "----------- " << _encryptorName << " perf test end -----------" << std::endl; + std::cout << std::endl; +} + +void encryptPerf(size_t _count) +{ + std::string inputData = "w3rwerk2-304swlerkjewlrjoiur4kslfjsd,fmnsdlfjlwerlwerjw;erwe;rewrew"; + std::string deltaData = inputData; + for (int i = 0; i < 100; i++) + { + inputData += deltaData; + } + // AES + SymmetricEncryption::Ptr encryptor = std::make_shared(); + encryptPerf(encryptor, inputData, "AES", _count); + // SM4 + encryptor = std::make_shared(); + encryptPerf(encryptor, inputData, "SM4", _count); +} + +int main(int argc, char* argv[]) +{ + if (argc < 3) + { + Usage(argv[0]); + return -1; + } + auto cmd = argv[1]; + size_t count = atoi(argv[2]); + + std::string data; + data.reserve(16 * 1024); + for (size_t i = 0; i < 16 * 1024; ++i) + { + char c = i; + data.push_back(c); + } + + + if (HASH_CMD == cmd) + { + stTest(data, count); + } + else if (SIGN_CMD == cmd) + { + signaturePerf(count); + derivePublicKeyPerf(count); + } + else if (ENCRYPT_CMD == cmd) + { + encryptPerf(count); + } + else + { + std::cout << "Invalid subcommand \"" << cmd << "\"" << std::endl; + Usage(argv[0]); + } + return 0; +} diff --git a/bcos-crypto/test/CMakeLists.txt b/bcos-crypto/test/CMakeLists.txt new file mode 100644 index 0000000..57373dd --- /dev/null +++ b/bcos-crypto/test/CMakeLists.txt @@ -0,0 +1,29 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-framework +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-crypto) + +find_package(Boost REQUIRED COMPONENTS unit_test_framework) +find_package(ZLIB REQUIRED) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE ..) +target_link_libraries(${TEST_BINARY_NAME} Boost::unit_test_framework bcos-utilities bcos-crypto ZLIB::ZLIB) +add_test(NAME test-crypto WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-crypto/test/unittests/EncryptionTest.cpp b/bcos-crypto/test/unittests/EncryptionTest.cpp new file mode 100644 index 0000000..4353f8d --- /dev/null +++ b/bcos-crypto/test/unittests/EncryptionTest.cpp @@ -0,0 +1,106 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test cases for AES/sm4 + * @file SignatureTest.h + * @date 2021.03.06 + */ +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(EncryptionTest, TestPromptFixture) + +void testEncryption(SymmetricEncryption::Ptr _encrypt) +{ + std::string plainData = "testAESx%$234sdfjl234129p"; + std::string key = "abcd"; + // encrypt + auto ciperData = _encrypt->symmetricEncrypt((const unsigned char*)plainData.c_str(), + plainData.size(), (const unsigned char*)key.c_str(), key.size()); + // decrypt + auto decryptedData = _encrypt->symmetricDecrypt((const unsigned char*)ciperData->data(), + ciperData->size(), (const unsigned char*)key.c_str(), key.size()); + bytes plainDataBytes(plainData.begin(), plainData.end()); + BOOST_CHECK(*decryptedData == plainDataBytes); + + // invalid key + std::string invalidKey = "ABCDCD"; + try + { + _encrypt->symmetricDecrypt((const unsigned char*)ciperData->data(), ciperData->size(), + (const unsigned char*)invalidKey.c_str(), invalidKey.size()); + BOOST_CHECK(std::string_view((const char*)ciperData->data(), ciperData->size()) != + std::string_view(plainData)); + } + catch (std::exception& e) + { + // We only need to throw DecryptException, if there is another exception, + // dynamic_cast will throw exception + // So we check no throw here. + BOOST_CHECK_NO_THROW(auto dee = dynamic_cast(e)); + } + + // invalid ciper + (*ciperData)[0] += 10; + decryptedData = _encrypt->symmetricDecrypt((const unsigned char*)ciperData->data(), + ciperData->size(), (const unsigned char*)key.c_str(), key.size()); + plainDataBytes = bytes(plainData.begin(), plainData.end()); + BOOST_CHECK(*decryptedData != plainDataBytes); + // test encrypt/decrypt with given ivData + std::string ivData = "adfwerivswerwerwerpi9werlwerwasdfa234523423dsfa"; + key = "werwlerewkrjewwwwwwwr4234981034%wer23423&3453453453465646778)7897678"; + plainData += "testAESx%$234sdfjl234129p" + ivData + key; + ciperData = _encrypt->symmetricEncrypt((const unsigned char*)plainData.c_str(), + plainData.size(), (const unsigned char*)key.c_str(), key.size(), + (const unsigned char*)ivData.c_str(), ivData.size()); + + decryptedData = _encrypt->symmetricDecrypt((const unsigned char*)ciperData->data(), + ciperData->size(), (const unsigned char*)key.c_str(), key.size(), + (const unsigned char*)ivData.c_str(), ivData.size()); + plainDataBytes = bytes(plainData.begin(), plainData.end()); + BOOST_CHECK(*decryptedData == plainDataBytes); + + // invalid ivData + std::string invalidIVData = "bdfwerivswerwerwerpi9werlwerwasdfa234523423dsf"; + decryptedData = _encrypt->symmetricDecrypt((const unsigned char*)ciperData->data(), + ciperData->size(), (const unsigned char*)key.c_str(), key.size(), + (const unsigned char*)invalidIVData.c_str(), invalidIVData.size()); + plainDataBytes = bytes(plainData.begin(), plainData.end()); + BOOST_CHECK(*decryptedData != plainDataBytes); +} +BOOST_AUTO_TEST_CASE(testAES) +{ + auto aes = std::make_shared(); + testEncryption(aes); +} + +BOOST_AUTO_TEST_CASE(testSM4) +{ + auto sm4 = std::make_shared(); + testEncryption(sm4); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-crypto/test/unittests/HashTest.cpp b/bcos-crypto/test/unittests/HashTest.cpp new file mode 100644 index 0000000..77f41a8 --- /dev/null +++ b/bcos-crypto/test/unittests/HashTest.cpp @@ -0,0 +1,126 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test cases for keccak256/sm3 + * @file HashTest.h + * @date 2021.03.04 + */ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace crypto; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(HashTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testKeccak256) +{ + auto keccak256 = std::make_shared(); + auto cryptoSuite = std::make_shared(keccak256, nullptr, nullptr); + // test multiple-thread + auto worker = std::make_shared("testHash", 8); + std::atomic totolCount = 1000; + worker->enqueue([&]() { + if (totolCount <= 0) + { + return; + } + while (totolCount > 0) + { + totolCount -= 1; + auto data = "abcde" + std::to_string(totolCount.load()); + keccak256->hash(data); + } + }); + while (totolCount > 0) + { + std::this_thread::sleep_for(std::chrono::milliseconds(5)); + } + std::string ts = keccak256->emptyHash().hex(); + BOOST_CHECK_EQUAL( + ts, std::string("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")); + + std::string hashData = "abcde"; + + ts = keccak256->hash(hashData).hex(); + BOOST_CHECK_EQUAL( + ts, std::string("6377c7e66081cb65e473c1b95db5195a27d04a7108b468890224bedbe1a8a6eb")); + + h256 emptyKeccak256( + *fromHexString("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")); + BOOST_REQUIRE_EQUAL(emptyKeccak256, keccak256->emptyHash()); + + BOOST_REQUIRE_EQUAL(cryptoSuite->hash(""), + h256("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")); + BOOST_REQUIRE_EQUAL(cryptoSuite->hash("hello"), + h256("1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8")); +} +BOOST_AUTO_TEST_CASE(testSM3) +{ + auto sm3 = std::make_shared(); + auto cryptoSuite = std::make_shared(sm3, nullptr, nullptr); + std::string ts = sm3->emptyHash().hex(); + BOOST_CHECK_EQUAL( + ts, std::string("1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b")); + + std::string hashData = "abcde"; + ts = sm3->hash(hashData).hex(); + BOOST_CHECK_EQUAL( + ts, std::string("afe4ccac5ab7d52bcae36373676215368baf52d3905e1fecbe369cc120e97628")); + + h256 emptySM3( + *fromHexString("1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b")); + BOOST_REQUIRE_EQUAL(emptySM3, sm3->emptyHash()); + + BOOST_REQUIRE_EQUAL(cryptoSuite->hash(""), + h256("1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b")); + + BOOST_REQUIRE_EQUAL(cryptoSuite->hash("hello"), + h256("becbbfaae6548b8bf0cfcad5a27183cd1be6093b1cceccc303d9c61d0a645268")); +} +BOOST_AUTO_TEST_CASE(testSha3) +{ + auto sha3 = std::make_shared(); + auto cryptoSuite = std::make_shared(sha3, nullptr, nullptr); + std::string ts = sha3->emptyHash().hex(); + BOOST_CHECK_EQUAL( + ts, std::string("a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a")); + + std::string hashData = "abcde"; + ts = sha3->hash(hashData).hex(); + BOOST_CHECK_EQUAL( + ts, std::string("d716ec61e18904a8f58679b71cb065d4d5db72e0e0c3f155a4feff7add0e58eb")); + + h256 emptySha3( + *fromHexString("a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a")); + BOOST_REQUIRE_EQUAL(emptySha3, sha3->emptyHash()); + + BOOST_REQUIRE_EQUAL(cryptoSuite->hash(""), + h256("a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a")); + + BOOST_REQUIRE_EQUAL(cryptoSuite->hash("hello"), + h256("3338be694f50c5f338814986cdf0686453a888b84f424d792af4b9202398f392")); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-crypto/test/unittests/HasherTest.cpp b/bcos-crypto/test/unittests/HasherTest.cpp new file mode 100644 index 0000000..0e04936 --- /dev/null +++ b/bcos-crypto/test/unittests/HasherTest.cpp @@ -0,0 +1,129 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test cases for hasher256 + * @file HasherTest.h + * @date 2022.04.19 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::crypto::hasher; + +namespace bcos::test +{ + +using HashType = std::array; + +BOOST_FIXTURE_TEST_SUITE(HasherTest, TestPromptFixture) BOOST_AUTO_TEST_CASE(testSHA256) +{ + std::string a = "arg"; + + openssl::OpenSSL_SHA3_256_Hasher hash1; + hash1.update(a); + hash1.update("abcdefg"); + hash1.update(100); + auto h1 = final(hash1); + + openssl::OpenSSL_SHA3_256_Hasher hash2; + hash2.update(a); + char s[] = "abcdefg"; + hash2.update(s); + auto b = 100; + hash2.update(b); + auto h2 = final(hash2); + + BOOST_CHECK_EQUAL(h1, h2); +} + +BOOST_AUTO_TEST_CASE(opensslSHA3) +{ + std::string a = "str123456789012345678901234567890"; + std::string_view view = a; + bcos::h256 h(100); + std::span hView(h.data(), h.SIZE); + + openssl::OpenSSL_SHA3_256_Hasher hasher1; + hasher1.update(100); + hasher1.update(a); + hasher1.update(view); + hasher1.update(hView); + hasher1.update("bbbc"); + + auto hash = final(hasher1); + + decltype(hash) emptyHash; + emptyHash.fill(std::byte('0')); + BOOST_CHECK_NE(hash, emptyHash); + + std::string a1 = "str123456789012345678901234567890"; + view = a1; + char by[] = "bbbc"; + int be = 100; + + openssl::OpenSSL_SHA3_256_Hasher hasher2; + hasher2.update(be); + hasher2.update(a1); + hasher2.update(view); + hasher2.update(std::span((const byte*)h.data(), h.SIZE)); + hasher2.update(by); + + auto hash2 = final(hasher2); + + BOOST_CHECK_EQUAL(hash, hash2); +} + +BOOST_AUTO_TEST_CASE(dynamicRange) +{ + bcos::h256 hash; + + int a = 10; + openssl::OpenSSL_SHA3_256_Hasher hasher; + hasher.update(a); + BOOST_CHECK_NO_THROW(hasher.final(hash)); + + std::vector hashVec; + hasher.update(a); + BOOST_CHECK_NO_THROW(hasher.final(hashVec)); + + auto b = bcos::crypto::trivial::DynamicRange>; +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test + +namespace std +{ + +template +::std::ostream& operator<<(::std::ostream& stream, const std::array& hash) +{ + std::string str; + str.reserve(hash.size() * 2); + std::span view{(char*)hash.data(), hash.size()}; + + boost::algorithm::hex_lower(view.begin(), view.end(), std::back_inserter(str)); + stream << str; + return stream; +} +} // namespace std \ No newline at end of file diff --git a/bcos-crypto/test/unittests/SignatureTest.cpp b/bcos-crypto/test/unittests/SignatureTest.cpp new file mode 100644 index 0000000..fdeda24 --- /dev/null +++ b/bcos-crypto/test/unittests/SignatureTest.cpp @@ -0,0 +1,392 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test cases for secp256k1/sm2/ed25519 + * @file SignatureTest.h + * @date 2021.03.06 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if SM2_OPTIMIZE +#include +#endif +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(SignatureTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testSecp256k1KeyPair) +{ + // BOOST_CHECK(Secret::size == 32); + // BOOST_CHECK(Public::size == 64); + // check secret->public + auto fixedSec1 = h256( + "bcec428d5205abe0f0cc8a7340839" + "08d9eb8563e31f943d760786edf42ad67dd"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto pub1 = secp256k1PriToPub(sec1); + for (int i = 0; i < 10; i++) + { + pub1 = secp256k1PriToPub(sec1); + BOOST_CHECK_EQUAL(*toHexString(pub1->data()), + "3378c2b7bcdce20357eb3dbb62590b88d4711dae74e1ea47dd4207441734d2fc7cf6df92fd8c0a3368ba5a" + "1f5f9c3318d19a3f00ba2f2bd9f508b953be299fb5"); + } + + auto signatureImpl = std::make_shared(); + auto keyPair1 = signatureImpl->createKeyPair(sec1); + BOOST_CHECK(pub1->data() == keyPair1->publicKey()->data()); + BOOST_CHECK(sec1->data() == keyPair1->secretKey()->data()); + + auto fixedSec2 = h256("bcec428d5205abe0"); + auto sec2 = std::make_shared(fixedSec2.asBytes()); + auto pub2 = secp256k1PriToPub(sec2); + auto keyPair2 = signatureImpl->createKeyPair(sec2); + BOOST_CHECK(pub2->data() == keyPair2->publicKey()->data()); + BOOST_CHECK(sec2->data() == keyPair2->secretKey()->data()); + BOOST_CHECK(pub1->data() != pub2->data()); + + // check address + auto hashImpl = std::make_shared(); + auto secp256k1KeyPair1 = std::make_shared(sec1); + auto secp256k1KeyPair2 = std::make_shared(sec2); + + Address address1 = secp256k1KeyPair1->address(hashImpl); + Address address2 = secp256k1KeyPair2->address(hashImpl); + BOOST_CHECK(address1 != address2); + + // test calculateAddress + BOOST_CHECK(secp256k1KeyPair1->address(hashImpl) == calculateAddress(hashImpl, pub1)); + BOOST_CHECK(secp256k1KeyPair2->address(hashImpl) == calculateAddress(hashImpl, pub2)); + // test privateKeyToPublicKey + auto derivedPub1 = secp256k1KeyPair1->priToPub(secp256k1KeyPair1->secretKey()); + auto derivedPub2 = secp256k1KeyPair2->priToPub(secp256k1KeyPair2->secretKey()); + BOOST_CHECK(derivedPub1->data() == pub1->data()); + BOOST_CHECK(derivedPub2->data() == pub2->data()); + + // create KeyPair + auto keyPair = secp256k1GenerateKeyPair(); + BOOST_CHECK(keyPair->secretKey()); + BOOST_CHECK(keyPair->publicKey()); + auto testPub = secp256k1PriToPub(keyPair->secretKey()); + BOOST_CHECK(keyPair->publicKey()->data() == testPub->data()); + SecretPtr emptySecret = std::make_shared(SECP256K1_PRIVATE_LEN); + BOOST_CHECK_THROW(Secp256k1KeyPair emptyKeyPair(emptySecret), PriToPublicKeyException); +} + +BOOST_AUTO_TEST_CASE(testSecp256k1SignAndVerify) +{ + auto keyPair = secp256k1GenerateKeyPair(); + auto hashData = keccak256Hash((std::string)("abcd")); + std::cout << "### hashData:" << *toHexString(hashData) << std::endl; + std::cout << "#### publicKey:" << keyPair->publicKey()->hex() << std::endl; + std::cout << "#### publicKey shortHex:" << keyPair->publicKey()->shortHex() << std::endl; + /// normal check + // sign + auto signData = secp256k1Sign(*keyPair, hashData); + std::cout << "### signData:" << *toHexString(*signData) << std::endl; + // verify + bool result = secp256k1Verify( + keyPair->publicKey(), hashData, bytesConstRef(signData->data(), signData->size())); + BOOST_CHECK(result == true); + std::cout << "### verify result:" << result << std::endl; + + // recover + auto pub = secp256k1Recover(hashData, bytesConstRef(signData->data(), signData->size())); + std::cout << "### secp256k1Recover begin, publicKey:" + << *toHexString(keyPair->publicKey()->data()) << std::endl; + std::cout << "#### recoverd publicKey:" << *toHexString(pub->data()) << std::endl; + BOOST_CHECK(pub->data() == keyPair->publicKey()->data()); + /// exception check: + // check1: invalid payload(hash) + h256 invalidHash = keccak256Hash((std::string)("abce")); + result = secp256k1Verify( + keyPair->publicKey(), invalidHash, bytesConstRef(signData->data(), signData->size())); + BOOST_CHECK(result == false); + + PublicPtr invalidPub = std::make_shared(SECP256K1_PUBLIC_LEN); + invalidPub = secp256k1Recover(invalidHash, bytesConstRef(signData->data(), signData->size())); + BOOST_CHECK(invalidPub->data() != keyPair->publicKey()->data()); + + // check2: invalid sig + auto anotherSig(secp256k1Sign(*keyPair, invalidHash)); + result = secp256k1Verify( + keyPair->publicKey(), hashData, bytesConstRef(anotherSig->data(), anotherSig->size())); + BOOST_CHECK(result == false); + + invalidPub = secp256k1Recover(hashData, bytesConstRef(anotherSig->data(), anotherSig->size())); + BOOST_CHECK(invalidPub->data() != keyPair->publicKey()->data()); + + // check3: invalid keyPair + auto keyPair2 = secp256k1GenerateKeyPair(); + result = secp256k1Verify( + keyPair2->publicKey(), hashData, bytesConstRef(signData->data(), signData->size())); + BOOST_CHECK(result == false); + + h256 r(keccak256Hash(std::string("+++"))); + h256 s(keccak256Hash(std::string("24324"))); + byte v = 4; + auto signatureData = std::make_shared(r, s, v); + auto secp256k1Crypto = std::make_shared(); + auto encodedData = signatureData->encode(); + BOOST_CHECK_THROW(secp256k1Crypto->recover(hashData, ref(*encodedData)), InvalidSignature); + + + // test signatureData encode and decode + encodedData = signatureData->encode(); + auto signatureData2 = std::make_shared( + bytesConstRef(encodedData->data(), encodedData->size())); + BOOST_CHECK(signatureData2->r() == signatureData->r()); + BOOST_CHECK(signatureData2->s() == signatureData->s()); + BOOST_CHECK(signatureData2->v() == signatureData->v()); + + auto signatureData3 = + std::make_shared(bytesConstRef(signData->data(), signData->size())); + encodedData = signatureData3->encode(); + BOOST_CHECK(*signData == *encodedData); + auto publicKey = secp256k1Crypto->recover(hashData, ref(*encodedData)); + BOOST_CHECK(publicKey->data() == keyPair->publicKey()->data()); +} + +BOOST_AUTO_TEST_CASE(testSM2KeyPair) +{ + // check secret->public + h256 fixedSec1( + "bcec428d5205abe0f0cc8a7340839" + "08d9eb8563e31f943d760786edf42ad67dd"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto keyFactory = std::make_shared(); + auto secCreated = keyFactory->createKey(fixedSec1.asBytes()); + BOOST_CHECK(sec1->data() == secCreated->data()); + + auto pub1 = sm2PriToPub(sec1); + auto keyPair1 = std::make_shared(sec1); + + auto signatureImpl = std::make_shared(); + auto keyPairTest = signatureImpl->createKeyPair(sec1); + BOOST_CHECK(keyPairTest->publicKey()->data() == keyPair1->publicKey()->data()); + BOOST_CHECK(keyPairTest->secretKey()->data() == keyPair1->secretKey()->data()); + + h256 fixedSec2("bcec428d5205abe0"); + auto sec2 = std::make_shared(fixedSec2.asBytes()); + auto pub2 = sm2PriToPub(sec2); + auto keyPair2 = std::make_shared(sec2); + + BOOST_CHECK(pub1->data() != pub2->data()); + + + // check public to address + auto hashImpl = std::make_shared(); + Address address1 = calculateAddress(hashImpl, pub1); + Address address2 = calculateAddress(hashImpl, pub2); + BOOST_CHECK(address1 != address2); + + // check secret to address + Address addressSec1 = keyPair1->address(hashImpl); + Address addressSec2 = keyPair2->address(hashImpl); + BOOST_CHECK(addressSec1 != addressSec2); + BOOST_CHECK(address1 == addressSec1); + BOOST_CHECK(address2 == addressSec2); + + // create keyPair + auto keyPair = sm2GenerateKeyPair(); + BOOST_CHECK(keyPair->publicKey()); + BOOST_CHECK(keyPair->secretKey()); + pub1 = sm2PriToPub(keyPair->secretKey()); + BOOST_CHECK(keyPair->publicKey()->data() == pub1->data()); + + // empty case + auto emptySecret = std::make_shared(SM2_PRIVATE_KEY_LEN); + BOOST_CHECK_THROW(SM2KeyPair sm2KeyPair(emptySecret), PriToPublicKeyException); +} + +inline void SM2SignAndVerifyTest(SM2Crypto::Ptr _smCrypto) +{ + auto hashCrypto = std::make_shared(); + auto hashData = hashCrypto->hash(std::string("abcd")); + + h256 secret("ca508b2b49c1d2dc46cbd5a011686fdc19937dbc704afe6c547a862b3e2b6c69"); + auto sec = std::make_shared(secret.asBytes()); + auto keyPair = _smCrypto->createKeyPair(sec); + BOOST_CHECK(keyPair->publicKey()->data() == + *(fromHexString("f7dee65e76603ed7cd4c598d53cabe875c459e0fae4c6fd7b858189fd4741081e9" + "70bca0d5cb571a7ac30586aec71b23187d4b25e59143812f74a2744604d42b"))); + auto signatureData = fromHexString( + "cd39bf939d999ca710576a629c962edfc28608701a3a7b61c971daeac5a1399cf4a7272fa80783e171c7fd5b03" + "8a3af4521f681ebe9fd44db3b60e750c438293f7dee65e76603ed7cd4c598d53cabe875c459e0fae4c6fd7b858" + "189fd4741081e970bca0d5cb571a7ac30586aec71b23187d4b25e59143812f74a2744604d42b"); + // check verify + bool result = _smCrypto->verify(keyPair->publicKey(), hashData, + bytesConstRef(signatureData->data(), signatureData->size())); + BOOST_CHECK(result == true); + + keyPair = _smCrypto->generateKeyPair(); + // sign + auto sig = _smCrypto->sign(*keyPair, hashData, true); + // verify + result = + _smCrypto->verify(keyPair->publicKey(), hashData, bytesConstRef(sig->data(), sig->size())); + + std::cout << "#### privateKey:" << *toHexString(keyPair->secretKey()->data()) << std::endl; + std::cout << "#### phase 1, signatureData:" << *toHexString(*sig) << std::endl; + BOOST_CHECK(result == true); + // recover + auto pub = _smCrypto->recover(hashData, bytesConstRef(sig->data(), sig->size())); + std::cout << "#### phase 2" << std::endl; + BOOST_CHECK(pub->data() == keyPair->publicKey()->data()); + + + // exception case + // invalid payload(hash) + auto invalidHash = hashCrypto->hash(std::string("abce")); + result = _smCrypto->verify( + keyPair->publicKey(), invalidHash, bytesConstRef(sig->data(), sig->size())); + BOOST_CHECK(result == false); + // recover + BOOST_CHECK_THROW( + _smCrypto->recover(invalidHash, bytesConstRef(sig->data(), sig->size())), InvalidSignature); + + // invalid signature + auto anotherSig = _smCrypto->sign(*keyPair, invalidHash, true); + result = _smCrypto->verify( + keyPair->publicKey(), hashData, bytesConstRef(anotherSig->data(), anotherSig->size())); + BOOST_CHECK(result == false); + BOOST_CHECK_THROW( + _smCrypto->recover(hashData, bytesConstRef(anotherSig->data(), anotherSig->size())), + InvalidSignature); + + // invalid sig + auto keyPair2 = _smCrypto->generateKeyPair(); + result = + _smCrypto->verify(keyPair2->publicKey(), hashData, bytesConstRef(sig->data(), sig->size())); + BOOST_CHECK(result == false); + auto signatureStruct = + std::make_shared(bytesConstRef(sig->data(), sig->size())); + auto r = signatureStruct->r(); + auto s = signatureStruct->s(); + + auto signatureStruct2 = std::make_shared(r, s, signatureStruct->pub()); + auto encodedData = signatureStruct2->encode(); + auto recoverKey = + _smCrypto->recover(hashData, bytesConstRef(encodedData->data(), encodedData->size())); + BOOST_CHECK(recoverKey->data() == keyPair->publicKey()->data()); + + // test padding + unsigned fieldLen = 32; + std::shared_ptr data = std::make_shared(fieldLen, 0); + auto binData = fromHexString("508b2b49c1d2dc46cbd5a011686fdc19937dbc704afe6c547a862b3e2b6c69"); + memcpy(data->data(), binData->data(), binData->size()); + // padding zero to the r field + memmove(data->data() + (fieldLen - binData->size()), data->data(), binData->size()); + memset(data->data(), 0, (fieldLen - binData->size())); + std::cout << "#### data:" << *toHexString(*data) << std::endl; + std::cout << "#### binData:" << *toHexString(*binData) << std::endl; + std::cout << "### data 0:" << int((*data)[0]) << std::endl; + std::cout << "### data 1:" << int((*data)[1]) << std::endl; +} + +BOOST_AUTO_TEST_CASE(testSM2SignAndVerify) +{ + std::cout << "### testSM2SignAndVerify: SM2Crypto" << std::endl; + auto signatureCrypto = std::make_shared(); + SM2SignAndVerifyTest(signatureCrypto); +#if SM2_OPTIMIZE + std::cout << "### testSM2SignAndVerify: FastSM2Crypto" << std::endl; + auto fastCrypto = std::make_shared(); + SM2SignAndVerifyTest(fastCrypto); +#endif +} + + +BOOST_AUTO_TEST_CASE(testED25519SignAndVerify) +{ + auto signatureCrypto = std::make_shared(); + auto hashCrypto = std::make_shared(); + auto keyPair = signatureCrypto->generateKeyPair(); + auto hashData = hashCrypto->hash(std::string("abcd")); + // sign + auto sig = signatureCrypto->sign(*keyPair, hashData, true); + // verify + bool result = signatureCrypto->verify( + keyPair->publicKey(), hashData, bytesConstRef(sig->data(), sig->size())); + std::cout << "#### phase 1, signatureData:" << *toHexString(*sig) << std::endl; + std::cout << "#### keyPair->publicKey():" << *toHexString(keyPair->publicKey()->data()) + << std::endl; + BOOST_CHECK(result == true); + // recover + auto pub = signatureCrypto->recover(hashData, bytesConstRef(sig->data(), sig->size())); + std::cout << "#### phase 2" << std::endl; + BOOST_CHECK(pub->data() == keyPair->publicKey()->data()); + + // exception case + // invalid payload(hash) + auto invalidHash = hashCrypto->hash(std::string("abce")); + result = signatureCrypto->verify( + keyPair->publicKey(), invalidHash, bytesConstRef(sig->data(), sig->size())); + BOOST_CHECK(result == false); + + // recover + BOOST_CHECK_THROW( + signatureCrypto->recover(invalidHash, bytesConstRef(sig->data(), sig->size())), + InvalidSignature); + + // invalid signature + auto anotherSig = signatureCrypto->sign(*keyPair, invalidHash, true); + result = signatureCrypto->verify( + keyPair->publicKey(), hashData, bytesConstRef(anotherSig->data(), anotherSig->size())); + BOOST_CHECK(result == false); + BOOST_CHECK_THROW( + signatureCrypto->recover(hashData, bytesConstRef(anotherSig->data(), anotherSig->size())), + InvalidSignature); + + // invalid sig + auto keyPair2 = signatureCrypto->generateKeyPair(); + result = signatureCrypto->verify( + keyPair2->publicKey(), hashData, bytesConstRef(sig->data(), sig->size())); + BOOST_CHECK(result == false); + + auto signatureStruct = + std::make_shared(bytesConstRef(sig->data(), sig->size())); + auto r = signatureStruct->r(); + auto s = signatureStruct->s(); + + auto signatureStruct2 = std::make_shared(r, s, signatureStruct->pub()); + auto encodedData = signatureStruct2->encode(); + auto recoverKey = + signatureCrypto->recover(hashData, bytesConstRef(encodedData->data(), encodedData->size())); + BOOST_CHECK(recoverKey->data() == keyPair->publicKey()->data()); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/test/unittests/ZkpTest.cpp b/bcos-crypto/test/unittests/ZkpTest.cpp new file mode 100644 index 0000000..4ad1239 --- /dev/null +++ b/bcos-crypto/test/unittests/ZkpTest.cpp @@ -0,0 +1,221 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test cases for secp256k1/sm2/ed25519 + * @file SignatureTest.h + * @date 2021.03.06 + */ +#include "bcos-crypto/zkp/discretezkp/DiscreteLogarithmZkp.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(ZkpTest, TestPromptFixture) +// aggregateRistrettoPoint +BOOST_AUTO_TEST_CASE(testAggregateRistrettoPoint) +{ + std::string point1 = "5ede6177a14b66389ab5fe5785d7c14adf2a3973aa7c3070878954937e47746f"; + std::string point2 = "d21b3e0fde82da359493b96b8f3633f9ba39bbb8d8d72c951c173639c750c248"; + auto zkpImpl = std::make_shared(); + + auto result = zkpImpl->aggregateRistrettoPoint(*fromHexString(point1), *fromHexString(point2)); + BOOST_CHECK( + *toHexString(result) == "327ea1e62fd6c6a3fc8fb203618fbf2f7924bbfbdec52a9324bd6964c4c0ca12"); + + point1 = "786058ceffe85198ef127b6a9781b07adbe3b2d21de87a26804e6a1b43cd4135"; + point2 = "18df09397eed2a614062649be865da8e26cbdd8848fdbed7e8ae8b0e67745d52"; + result = zkpImpl->aggregateRistrettoPoint(*fromHexString(point1), *fromHexString(point2)); + BOOST_CHECK( + *toHexString(result) == "36f238ce7215e9704a60c631ac0d576a5d816baf6fc1092798d3bd6ae260f540"); + + point2 = "c25d4eed8b636edaa06e2ee0b3a16d1ea7058a3fd455702180cc9bdb14ce8016"; + result = zkpImpl->aggregateRistrettoPoint(*fromHexString(point1), *fromHexString(point2)); + BOOST_CHECK( + *toHexString(result) != "36f238ce7215e9704a60c631ac0d576a5d816baf6fc1092798d3bd6ae260f540"); +} +// verifyEitherEqualityProof +BOOST_AUTO_TEST_CASE(testVerifyEitherEqualityProof) +{ + std::string c1_point = "e0ad69e116f7aa07e7ce1d9e55eec9be69baa310ec4616fbf7e11756a3ff3627"; + std::string c2_point = "8020353cff25729feb2d057330434b423b5b01fc6325b9c5aae49df56dceff7b"; + std::string c3_point = "aac55c73d60521c0978394872db2a8a9ee21b67ea990e6cd1301f71e6f449216"; + std::string basepoint = "e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"; + std::string blinding_basepoint = + "8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"; + std::string proof = + "d13f92f8ff02ed667f318f90e63db8f7c6cc5504bca4d30ba5ba98ee27762500c97cabd65e0d0f383e2a86ded2" + "95e8a6b5474c59455802a1d48e480de1b2be08fb48782b96d8090c9b4b619a8998f8cc8999d12edb7e0fbdb394" + "6c7373b41509807b2a1b88febf3058f843d73e72f73841093be86e20cb0c16f28ee5ffd3750aa90efe06abee0e" + "893f6af3dbd214a66d312ae4dd1253dd3bcb70dfc5f9821e03a92492bd5a18e05e64c98165b8a433f068c39796" + "703d8069b6c3fae2b4406d06f54a46f05c5d321c4ed01f1c72c9a89c3d3ba7adbd807da14148dd4c77b41c07c4" + "3d026dd14fa7c025ad3a06a9a891149d6a25268b49f79cc016c6c49bafd107"; + auto zkpImpl = std::make_shared(); + auto result = zkpImpl->verifyEitherEqualityProof(*fromHexString(c1_point), + *fromHexString(c2_point), *fromHexString(c3_point), *fromHexString(proof), + *fromHexString(basepoint), *fromHexString(blinding_basepoint)); + BOOST_CHECK(result == true); + + // invalid case + result = zkpImpl->verifyEitherEqualityProof(*fromHexString(c2_point), *fromHexString(c2_point), + *fromHexString(c1_point), *fromHexString(proof), *fromHexString(basepoint), + *fromHexString(blinding_basepoint)); + BOOST_CHECK(result == false); + + // case equal to zeror + c1_point = "ced7f98f75ab04635c7acd0600a67067b5c3475a82911aa02cdd92864a273118"; + proof = + "4bdc1283354b39dbb901b5bd96ee1de30601bf6321c2348f3c594b2a0fe8b306eba04833e1b817c25f50103b95" + "7ae8657f8e3497b92d993ffd040ad4a4f28a0e831601c9efde53fd3252d6e70aa0f10ecd6852739ae03fc20b4a" + "aeb922fc3c0895be82ed5be7012dbb25615e41b6184f76f39ecc01a3696c9d5dd8acb79d1b0fcf8db3cc437612" + "a333d67298562f994857b73cc241cc550cb8ec19057c669e0b7535f5c0b3f73d6778a6d6f9d762cd35be7d6603" + "a04767c24de80b6544577306bf42cc0f703fddfefffc50b88a1f275c31ceed85cbf0de458fc570ddf4ba570185" + "d6c0a0b18c136fd2fc16e7bdde856e90ab7488b44ed829ca305d861df1e30e"; + result = zkpImpl->verifyEitherEqualityProof(*fromHexString(c1_point), *fromHexString(c2_point), + *fromHexString(c3_point), *fromHexString(proof), *fromHexString(basepoint), + *fromHexString(blinding_basepoint)); + BOOST_CHECK(result == true); +} + +// verifyKnowledgeProof +BOOST_AUTO_TEST_CASE(testVerifyKnowledgeProof) +{ + auto zkpImpl = std::make_shared(); + bytes point = + *fromHexString("c2e63cef83875e81ea26e00546102cfbbca50ec21a92d077df9100d1bc3a461e"); + bytes proof = *fromHexString( + "5466f3449a00af0d922670b9f80295c6a685c23713349a91a36e4c082a3e282f9aa835448523cfc62b527d7533" + "0845f4e889c2e70e844c35177a9f0647e3d00b0d17ac6a70acbf14f9a7d838a0b4fe251ba59dc00404cb7d243d" + "d4cba1832d0f"); + bytes base_point = + *fromHexString("e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"); + bytes blinding_base_point = + *fromHexString("625c50529218ebb9f80e296886f4ac5bb55e06416db27b901c552d3e06ec4871"); + auto ret = zkpImpl->verifyKnowledgeProof(point, proof, base_point, blinding_base_point); + BOOST_CHECK(ret == true); + + // invalid case + ret = zkpImpl->verifyKnowledgeProof(base_point, proof, point, blinding_base_point); + BOOST_CHECK(ret == false); +} + +// verifyFormatProof +BOOST_AUTO_TEST_CASE(testVerifyFormatProof) +{ + auto zkpImpl = std::make_shared(); + bytes c1 = *fromHexString("febd4c0d856502a95986a7181c42c51768846755147f178c3646a12834b4e63d"); + bytes c2 = *fromHexString("ce8c95f13b202defc2bd0e3ddf62dddeb478b693b5f20ce9cd28b64c473aef0f"); + bytes proof = *fromHexString( + "80b7cb7fe7f4aa86b86b7d375d15242cc33336e8b2b735807d9a786be353f0544e99b6d416ce1f1b8d97894f33" + "d2c94dbe4987dea483ac68cf44b2abf7c6594dc12255a9babc8bd275fe3103ea44d0a33cc3cad8f2d0ef4ca5fc" + "9257464ecd0405bde6b3bb5e612b14c738e6221940a3f07e82344693867bcd6c85360bbff40e"); + bytes c1_basepoint = + *fromHexString("e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"); + bytes c2_basepoint = + *fromHexString("8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"); + bytes blinding_base_point = + *fromHexString("c2b614cc98c793bff0298b0c0881fa78261f0bc6d5f826484257b34d3480c22e"); + auto ret = + zkpImpl->verifyFormatProof(c1, c2, proof, c1_basepoint, c2_basepoint, blinding_base_point); + BOOST_CHECK(ret == true); + + // invalid case + ret = + zkpImpl->verifyFormatProof(c2, c1, proof, c1_basepoint, c2_basepoint, blinding_base_point); + BOOST_CHECK(ret == false); +} + +// verifySumProof +BOOST_AUTO_TEST_CASE(testVerifySumProof) +{ + auto zkpImpl = std::make_shared(); + bytes c1 = *fromHexString("d4cc1326224453213b6a8d758a87bda4612cfabc7992127580e39cddba6ca234"); + bytes c2 = *fromHexString("6839477d311c001e605001c6f270b99429b0b2a3fc7e8e0ae70fe77c4c203a1e"); + bytes c3 = *fromHexString("b050a9a8baae17bdaa7d0cac3f3f2fbb2634a02ca0a86962f2ece308b6fffa3e"); + bytes proof = *fromHexString( + "fca6e4c20eaa0c167aecd92579b726851369cd993b2204aef6d48064522b2f17849ad5218b1caf6857db0df2f9" + "db348f981e928f61b26aa4b83d2f834332237bf6a293eb4e1161db741fe77c4c22e4109cb4d9fc2baada7c46d1" + "2a567fe1114cc24be6612d716b0ff984a98d52a6b0215ffd3ae05afb1e3ce2ea326bb1f66f0ed805efec8c1b73" + "b87541f05bb28fa8bc4a52c1a0505a420f4b55b088900e75000e49b79e6039f17d9f8f01cf6090a3e8b3946113" + "897e090e46671b6272ecde05412f27c2cd4f06d738473a561bf23cb6bf96960db30a6b414660977417ae580d44" + "8123c5f895f563adf7bc56fe7ca7a42149dc0ac4a4203ccc3b68daa5cc1504"); + bytes value_basepoint = + *fromHexString("e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"); + bytes blinding_base_point = + *fromHexString("8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"); + auto ret = zkpImpl->verifySumProof(c1, c2, c3, proof, value_basepoint, blinding_base_point); + BOOST_CHECK(ret == true); + + // invalid case + ret = zkpImpl->verifySumProof(c2, c1, c3, proof, value_basepoint, blinding_base_point); + BOOST_CHECK(ret == false); +} + +// verifyProductProof +BOOST_AUTO_TEST_CASE(testVerifyProductProof) +{ + auto zkpImpl = std::make_shared(); + bytes c1 = *fromHexString("54a33c1e4a2f7c9201b888b2260aade604a546e5acf49c63bd016fc442270640"); + bytes c2 = *fromHexString("80c99be28493d198e4c2780446d54701a7773ef0d5c4f511d04a832047c62971"); + bytes c3 = *fromHexString("66b290292161da6e43fcd32ef103a674fa9535155443bcba462455a838bac71f"); + bytes proof = *fromHexString( + "687f1bed4716b0e1b0ab3c855594bf82e119b48f71f0f2c42cdb43725bbe2d39b0ed1666b78c87b785e2c7bbd0" + "69981be08634a8c9ee712bd94cf30153f63e2974a00e328f42b3992fce13f66a44adb0a5b8814a3bc34d3da406" + "f3d90014bc679cd0e0456ae03f1cf34156aec93d1b0c81f2e14de374c4d90540562181073500512781dc90f142" + "30e152e313c8571c9406a9497480d7b71c8b38564dd4c2dd051acc1d1db1acd4528a2ef9911ab487b192abf7d5" + "3ea94cbd5ed83ca23d7c760d70231328c4a4008cc58de545712dae4f1d336b8562ec59468b737c30b76938002f" + "79a5923855cf48c6399fa25cebeea13502768ed584dc04b2821b35fb32540d"); + bytes value_basepoint = + *fromHexString("e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"); + bytes blinding_base_point = + *fromHexString("8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"); + auto ret = zkpImpl->verifyProductProof(c1, c2, c3, proof, value_basepoint, blinding_base_point); + BOOST_CHECK(ret == true); + + // invalid case + ret = zkpImpl->verifyProductProof(c2, c1, c3, proof, value_basepoint, blinding_base_point); + BOOST_CHECK(ret == false); +} + +// verifyEqualityProof +BOOST_AUTO_TEST_CASE(testVerifyEqualityProof) +{ + auto zkpImpl = std::make_shared(); + bytes c1 = *fromHexString("62bf13dcf116499f3970b8497120741e9dc66fe1d9c3a34274b5e7e851398f40"); + bytes c2 = *fromHexString("6c07f2bd045bd4058e2f8c15b618193229a749827784c6e0b62ee175a987c510"); + bytes proof = *fromHexString( + "a782e114de54fd1460081bae2b05edfc157b6ff31cb55c85d81c130556fb5b03e2569d3ec8e78be9732e73a6c5" + "e9c0e231aff1171ae87453747cabaaf2cfdc1de474d1c45b0ac1454e5b3ba860d73d5938b2536f06a13b321fe9" + "664acfc0c013"); + bytes basepoint1 = + *fromHexString("e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"); + bytes basepoint2 = + *fromHexString("8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"); + auto ret = zkpImpl->verifyEqualityProof(c1, c2, proof, basepoint1, basepoint2); + BOOST_CHECK(ret == true); + + // invalid case + ret = zkpImpl->verifyEqualityProof(c2, c1, proof, basepoint1, basepoint2); + BOOST_CHECK(ret == false); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-crypto/test/unittests/main.cpp b/bcos-crypto/test/unittests/main.cpp new file mode 100644 index 0000000..7f0f193 --- /dev/null +++ b/bcos-crypto/test/unittests/main.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/bcos-crypto/test/unittests/testMerkle.cpp b/bcos-crypto/test/unittests/testMerkle.cpp new file mode 100644 index 0000000..928ea64 --- /dev/null +++ b/bcos-crypto/test/unittests/testMerkle.cpp @@ -0,0 +1,168 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using HashType = std::array; + +namespace std +{ +std::ostream& operator<<(std::ostream& stream, const HashType& hash) +{ + std::string hex; + boost::algorithm::hex_lower( + (char*)hash.data(), (char*)hash.data() + hash.size(), std::back_inserter(hex)); + std::string_view view{hex.data(), 8}; + stream << view; + return stream; +} +} // namespace std + + +namespace bcos::test +{ + +using namespace bcos::crypto::merkle; +using MerkleProof = std::vector, std::vector>>; +using MerkleProofPtr = std::shared_ptr; + +struct TestBinaryMerkleTrieFixture +{ + std::array hashes; + + TestBinaryMerkleTrieFixture() + { + crypto::hasher::openssl::OpenSSL_SHA3_256_Hasher hasher; + std::mt19937 prng(std::random_device{}()); + + for (auto& element : hashes) + { + hasher.update(prng()); + hasher.final(element); + } + } +}; + +BOOST_FIXTURE_TEST_SUITE(TestBinaryMerkleTrie, TestBinaryMerkleTrieFixture) + +template +void testFixedWidthMerkle(bcos::crypto::merkle::HashRange auto const& inputHashes) +{ + HashType emptyHash; + emptyHash.fill(0); + auto seed = std::random_device{}(); + + for (auto count = 0lu; count < RANGES::size(inputHashes); ++count) + { + std::span hashes(inputHashes.data(), count); + + bcos::crypto::merkle::Merkle + trie; + std::vector out; + BOOST_CHECK_THROW(trie.generateMerkle(std::vector{}, out), + boost::wrapexcept); + + if (count == 0) + { + BOOST_CHECK_THROW(trie.generateMerkle(std::as_const(hashes), out), + boost::wrapexcept); + } + else + { + std::vector outMerkle; + BOOST_CHECK_NO_THROW(trie.generateMerkle(std::as_const(hashes), outMerkle)); + std::cout << "Merkle: " << std::endl; + std::cout << outMerkle << std::endl; + + std::vector outProof; + BOOST_CHECK_THROW(trie.generateMerkleProof(hashes, outMerkle, emptyHash, outProof), + boost::wrapexcept); + BOOST_CHECK_THROW( + trie.generateMerkleProof(hashes, outMerkle, RANGES::size(hashes), outProof), + boost::wrapexcept); + + for (auto& hash : hashes) + { + trie.generateMerkleProof(hashes, outMerkle, hash, outProof); + + std::cout << "Width: " << width << " Root: " << *outMerkle.rbegin() + << " Hash: " << hash << std::endl; + + std::cout << "Proof: " << std::endl; + std::cout << outProof << std::endl; + BOOST_CHECK(trie.verifyMerkleProof(outProof, hash, *(outMerkle.rbegin()))); + BOOST_CHECK(!trie.verifyMerkleProof(outProof, emptyHash, *(outMerkle.rbegin()))); + + auto dis = std::uniform_int_distribution(0lu, outProof.size() - 1); + std::mt19937 prng{seed}; + outProof[dis(prng)] = emptyHash; + + if (outProof.size() > 1) + { + BOOST_CHECK(!trie.verifyMerkleProof(outProof, hash, *(outMerkle.rbegin()))); + } + + outProof.clear(); + BOOST_CHECK_THROW(trie.verifyMerkleProof(outProof, hash, *(outMerkle.rbegin())), + boost::wrapexcept); + } + } + } +} + +template +constexpr void loopWidthTest(bcos::crypto::merkle::HashRange auto const& inputHashes) +{ + testFixedWidthMerkle(inputHashes); + + if constexpr (i > 2) + { + loopWidthTest(inputHashes); + } +} + +BOOST_AUTO_TEST_CASE(merkle) +{ + constexpr static size_t testCount = 16; + loopWidthTest(hashes); +} + +template +std::shared_ptr calculateRootByMerkleProof( + const bcos::bytes& _txHash, MerkleProofPtr merkleProof, Hasher& hasher) +{ + auto txHash = _txHash; + for (auto& oneLevel : *merkleProof) + { + auto& left = oneLevel.first; + auto& right = oneLevel.second; + // left + std::for_each(left.begin(), left.end(), + [&hasher](const std::string& _hash) { hasher.update(*fromHexString(_hash)); }); + hasher.update(txHash); + // right + std::for_each(right.begin(), right.end(), + [&hasher](const std::string& _hash) { hasher.update(*fromHexString(_hash)); }); + hasher.final(txHash); + } + return toHexString(txHash); +} + +BOOST_AUTO_TEST_CASE(performance) {} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/CMakeLists.txt b/bcos-executor/CMakeLists.txt new file mode 100644 index 0000000..d6a7448 --- /dev/null +++ b/bcos-executor/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.14) + + +project(bcos-executor VERSION ${VERSION}) + +find_package(TBB CONFIG REQUIRED) +find_package(wedprcrypto REQUIRED) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + +find_package(evmc REQUIRED) +find_package(evmone REQUIRED) +find_package(intx REQUIRED) +find_package(ethash REQUIRED) +find_package(Boost REQUIRED serialization program_options context) +find_package(jsoncpp REQUIRED) + +file(GLOB_RECURSE SRCS src/*.cpp) +add_library(${EXECUTOR_TARGET} ${SRCS}) +if(WITH_WASM) + target_link_libraries(${EXECUTOR_TARGET} PUBLIC jsoncpp_static ${CODEC_TARGET} ${CRYPTO_TARGET} ${TABLE_TARGET} wedprcrypto::fisco-bcos bcos-protocol + Boost::context evmone fbwasm evmc::loader evmc::instructions wabt GroupSig) +else() + target_link_libraries(${EXECUTOR_TARGET} PUBLIC jsoncpp_static ${CODEC_TARGET} ${CRYPTO_TARGET} ${TABLE_TARGET} wedprcrypto::fisco-bcos bcos-protocol + Boost::context evmone evmc::loader evmc::instructions GroupSig) +endif() + +if (TOOLS) + add_subdirectory(tools) +endif() + +if (TESTS) + enable_testing() + set(ENV{CTEST_OUTPUT_ON_FAILURE} True) + add_subdirectory(test/unittest) +endif() diff --git a/bcos-executor/src/CallParameters.h b/bcos-executor/src/CallParameters.h new file mode 100644 index 0000000..92b610a --- /dev/null +++ b/bcos-executor/src/CallParameters.h @@ -0,0 +1,125 @@ +#pragma once + +#include +#include +#include +#include + +namespace bcos::executor +{ +struct CallParameters +{ + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + + enum Type : int8_t + { + MESSAGE = 0, + KEY_LOCK = 1, + FINISHED = 2, + REVERT = 3, + }; + + explicit CallParameters(Type _type) : type(_type) {} + + CallParameters(const CallParameters&) = delete; + CallParameters& operator=(const CallParameters&) = delete; + + CallParameters(CallParameters&&) = delete; + CallParameters(const CallParameters&&) = delete; + + int64_t contextID = 0; + int64_t seq = 0; + + std::string senderAddress; // common field, readable format + std::string codeAddress; // common field, readable format + std::string receiveAddress; // common field, readable format + std::string origin; // common field, readable format + + /// WARNING: gasLeft, be cautious to assign value + int64_t gas = 0; // common field + bcos::bytes data; // common field, transaction data, binary format + std::string abi; // common field, contract abi, json format + + std::vector keyLocks; // common field + std::string acquireKeyLock; // by response + + std::string message; // by response, readable format + std::vector logEntries; // by response + std::optional createSalt; // by response + std::string newEVMContractAddress; // by response, readable format + + int32_t status = 0; // by response + int32_t evmStatus = 0; + Type type; + bool staticCall = false; // common field + bool create = false; // by request, is creation + bool internalCreate = false; // by internal precompiled request, is creation + /** + * Internal precompiled contract request, this option is used to + * modify contract table, which address scheduled by 'to', by a + * certain precompiled contract + */ + bool internalCall = false; + + // delegateCall + bool delegateCall = false; + bytes delegateCallCode; + std::string delegateCallSender; + + std::string toString() + { + std::stringstream ss; + ss << "[" << contextID << "|" << seq << "|"; + switch (type) + { + case MESSAGE: + ss << "MESSAGE"; + break; + case KEY_LOCK: + ss << "KEY_LOCK"; + break; + case FINISHED: + ss << "FINISHED"; + break; + case REVERT: + ss << "REVERT"; + break; + }; + ss << "]"; + return ss.str(); + } + + // this method only for trace log + std::string toFullString() + { + std::stringstream ss; + // clang-format off + ss << toString() + << "senderAddress:" << senderAddress << "|" + << "codeAddress:" << codeAddress << "|" + << "receiveAddress:" << receiveAddress << "|" + << "origin:" << origin << "|" + << "gas:" << gas << "|" + << "dataSize:" << data.size() << "|" + << "abiSize:" << abi.size() << "|" + << "acquireKeyLock:" << acquireKeyLock << "|" + << "message:" << message << "|" + << "newEVMContractAddress:" << newEVMContractAddress << "|" + << "staticCall:" << staticCall << "|" + << "create :" << create << "|" + << "delegateCall:" << delegateCall << "|" + << "delegateCallSender" << delegateCallSender ; + // clang-format on + ss << "|logEntries: "; + for (const auto& logEntry : logEntries) + { + ss << "[" << logEntry.address() << "|" + << toHexStringWithPrefix( + h256((byte*)logEntry.topics().data(), logEntry.topics().size())) + << "|" << toHexStringWithPrefix(logEntry.data()) << "]"; + } + return ss.str(); + } +}; +} // namespace bcos::executor \ No newline at end of file diff --git a/bcos-executor/src/Common.cpp b/bcos-executor/src/Common.cpp new file mode 100644 index 0000000..cafbaff --- /dev/null +++ b/bcos-executor/src/Common.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief vm common + * @file Common.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#include "Common.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include + +using namespace bcos::protocol; + +namespace bcos +{ +bool hasWasmPreamble(const std::string_view& _input) +{ + return hasWasmPreamble( + bytesConstRef(reinterpret_cast(_input.data()), _input.size())); +} +bool hasWasmPreamble(const bytesConstRef& _input) +{ + return _input.size() >= 8 && _input[0] == 0 && _input[1] == 'a' && _input[2] == 's' && + _input[3] == 'm'; +} + +bool hasWasmPreamble(const bytes& _input) +{ + return hasWasmPreamble(bytesConstRef(_input.data(), _input.size())); +} + +bool hasPrecompiledPrefix(const std::string_view& _code) +{ + return _code.size() > precompiled::PRECOMPILED_CODE_FIELD_SIZE && + _code.substr(0, precompiled::PRECOMPILED_CODE_FIELD_SIZE) == + precompiled::PRECOMPILED_CODE_FIELD; +} + +namespace executor +{ +TransactionStatus toTransactionStatus(Exception const& _e) +{ + if (!!dynamic_cast(&_e)) + return TransactionStatus::OutOfGasLimit; + if (!!dynamic_cast(&_e)) + return TransactionStatus::NotEnoughCash; + if (!!dynamic_cast(&_e)) + return TransactionStatus::BadInstruction; + if (!!dynamic_cast(&_e)) + return TransactionStatus::BadJumpDestination; + if (!!dynamic_cast(&_e)) + return TransactionStatus::OutOfGas; + if (!!dynamic_cast(&_e)) + return TransactionStatus::OutOfStack; + if (!!dynamic_cast(&_e)) + return TransactionStatus::StackUnderflow; + if (!!dynamic_cast(&_e)) + return TransactionStatus::ContractAddressAlreadyUsed; + if (!!dynamic_cast(&_e)) + return TransactionStatus::PrecompiledError; + if (!!dynamic_cast(&_e)) + return TransactionStatus::RevertInstruction; + if (!!dynamic_cast(&_e)) + return TransactionStatus::PermissionDenied; + if (!!dynamic_cast(&_e)) + return TransactionStatus::CallAddressError; + if (!!dynamic_cast(&_e)) + return TransactionStatus::GasOverflow; + if (!!dynamic_cast(&_e)) + return TransactionStatus::ContractFrozen; + if (!!dynamic_cast(&_e)) + return TransactionStatus::AccountFrozen; + return TransactionStatus::Unknown; +} +} // namespace executor + +} // namespace bcos diff --git a/bcos-executor/src/Common.h b/bcos-executor/src/Common.h new file mode 100644 index 0000000..bdfceec --- /dev/null +++ b/bcos-executor/src/Common.h @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief vm common + * @file Common.h + * @author: xingqiangbai + * @date: 2021-05-24 + * @brief vm common + * @file Common.h + * @author: ancelmo + * @date: 2021-10-08 + */ + +#pragma once + +#include "CallParameters.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "bcos-protocol/TransactionStatus.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +DERIVE_BCOS_EXCEPTION(PermissionDenied); +DERIVE_BCOS_EXCEPTION(InternalVMError); +DERIVE_BCOS_EXCEPTION(InvalidInputSize); +DERIVE_BCOS_EXCEPTION(InvalidEncoding); + +namespace executor +{ + +using bytes_view = std::basic_string_view; + +#define EXECUTOR_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("EXECUTOR") +#define EXECUTOR_BLK_LOG(LEVEL, number) EXECUTOR_LOG(LEVEL) << BLOCK_NUMBER(number) +#define EXECUTOR_NAME_LOG(LEVEL) \ + BCOS_LOG(LEVEL) << LOG_BADGE("EXECUTOR:" + std::to_string(m_schedulerTermId)) +#define COROUTINE_TRACE_LOG(LEVEL, contextID, seq) \ + BCOS_LOG(LEVEL) << LOG_BADGE("EXECUTOR") << "[" << (contextID) << "," << (seq) << "]" +#define PARA_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("PARA") << LOG_BADGE(utcTime()) + + +static constexpr std::string_view USER_TABLE_PREFIX = "/tables/"; +static constexpr std::string_view USER_APPS_PREFIX = "/apps/"; +static constexpr std::string_view USER_SYS_PREFIX = "/sys/"; +static constexpr std::string_view USER_USR_PREFIX = "/usr/"; + +static const char* const STORAGE_VALUE = "value"; +static const char* const ACCOUNT_CODE_HASH = "codeHash"; +static const char* const ACCOUNT_CODE = "code"; +static const char* const ACCOUNT_BALANCE = "balance"; +static const char* const ACCOUNT_ABI = "abi"; +static const char* const ACCOUNT_NONCE = "nonce"; +static const char* const ACCOUNT_ALIVE = "alive"; +static const char* const ACCOUNT_FROZEN = "frozen"; + +/// auth +static constexpr const std::string_view CONTRACT_SUFFIX = "_accessAuth"; +static constexpr const std::string_view ADMIN_FIELD = "admin"; +static constexpr const std::string_view STATUS_FIELD = "status"; +static constexpr const std::string_view METHOD_AUTH_TYPE = "method_auth_type"; +static constexpr const std::string_view METHOD_AUTH_WHITE = "method_auth_white"; +static constexpr const std::string_view METHOD_AUTH_BLACK = "method_auth_black"; + +/// account +static constexpr const std::string_view ACCOUNT_STATUS = "status"; +static constexpr const std::string_view ACCOUNT_LAST_UPDATE = "last_update"; +static constexpr const std::string_view ACCOUNT_LAST_STATUS = "last_status"; +enum AccountStatus : uint8_t +{ + normal = 0, + freeze = 1, + abolish = 2, +}; + +/// contract status +static constexpr const std::string_view CONTRACT_NORMAL = "normal"; +static constexpr const std::string_view CONTRACT_FROZEN = "frozen"; +static constexpr const std::string_view CONTRACT_ABOLISH = "abolish"; +static constexpr inline std::string_view StatusToString(uint8_t _status) noexcept +{ + switch (_status) + { + case 0: + return CONTRACT_NORMAL; + case 1: + return CONTRACT_FROZEN; + case 2: + return CONTRACT_ABOLISH; + default: + return ""; + } +} + +/// FileSystem table keys +static const char* const FS_KEY_NAME = "name"; +static const char* const FS_KEY_TYPE = "type"; +static const char* const FS_KEY_SUB = "sub"; +static const char* const FS_ACL_TYPE = "acl_type"; +static const char* const FS_ACL_WHITE = "acl_white"; +static const char* const FS_ACL_BLACK = "acl_black"; +static const char* const FS_KEY_EXTRA = "extra"; +static const char* const FS_LINK_ADDRESS = "link_address"; +static const char* const FS_LINK_ABI = "link_abi"; + +/// FileSystem file type +static const char* const FS_TYPE_DIR = "directory"; +static const char* const FS_TYPE_CONTRACT = "contract"; +static const char* const FS_TYPE_LINK = "link"; + +#define EXECUTIVE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[EXECUTOR]" + +struct GlobalHashImpl +{ + static crypto::Hash::Ptr g_hashImpl; +}; + +struct SubState +{ + std::set suicides; ///< Any accounts that have suicided. + protocol::LogEntriesPtr logs = std::make_shared(); ///< Any logs. + u256 refunds; ///< Refund counter of SSTORE nonzero->zero. + + SubState& operator+=(SubState const& _s) + { + suicides += _s.suicides; + refunds += _s.refunds; + *logs += *_s.logs; + return *this; + } + + void clear() + { + suicides.clear(); + logs->clear(); + refunds = 0; + } +}; + +struct VMSchedule +{ + VMSchedule() {} + bool exceptionalFailedCodeDeposit = true; + bool enableLondon = true; + bool enablePairs = false; + unsigned sstoreRefundGas = 15000; + unsigned suicideRefundGas = 24000; + unsigned createDataGas = 20; + unsigned maxEvmCodeSize = 0x40000; + unsigned maxWasmCodeSize = 0xF00000; // 15MB + +}; + +static const VMSchedule FiscoBcosSchedule = [] { + VMSchedule schedule = VMSchedule(); + return schedule; +}(); + +static const VMSchedule FiscoBcosScheduleV320 = [] { + VMSchedule schedule = VMSchedule(); + schedule.enablePairs = true; + schedule.maxEvmCodeSize = 0x100000; // 1MB + schedule.maxWasmCodeSize = 0xF00000; // 15MB + return schedule; +}(); + +protocol::TransactionStatus toTransactionStatus(Exception const& _e); + +} // namespace executor + +bool hasWasmPreamble(const std::string_view& _input); +bool hasWasmPreamble(const bytesConstRef& _input); +bool hasWasmPreamble(const bytes& _input); +bool hasPrecompiledPrefix(const std::string_view& _code); +/** + * @brief : trans string addess to evm address + * @param _addr : the string address + * @return evmc_address : the transformed evm address + */ +inline evmc_address toEvmC(const std::string_view& addr) +{ // TODO: add another interfaces for wasm + evmc_address ret; + constexpr static auto evmAddressLength = sizeof(ret); + + if (addr.size() < evmAddressLength) + { + std::uninitialized_fill_n(ret.bytes, evmAddressLength, 0); + } + else + { + std::uninitialized_copy_n(addr.begin(), evmAddressLength, ret.bytes); + } + return ret; +} + +/** + * @brief : trans ethereum hash to evm hash + * @param _h : hash value + * @return evmc_bytes32 : transformed hash + */ +inline evmc_bytes32 toEvmC(h256 const& hash) +{ + evmc_bytes32 evmBytes; + static_assert(sizeof(evmBytes) == h256::SIZE, "Hash size mismatch!"); + std::uninitialized_copy(hash.begin(), hash.end(), evmBytes.bytes); + return evmBytes; +} +/** + * @brief : trans uint256 number of evm-represented to u256 + * @param _n : the uint256 number that can parsed by evm + * @return u256 : transformed u256 number + */ +inline u256 fromEvmC(evmc_bytes32 const& _n) +{ + return fromBigEndian(_n.bytes); +} + +/** + * @brief : trans evm address to ethereum address + * @param _addr : the address that can parsed by evm + * @return string_view : the transformed ethereum address + */ +inline std::string_view fromEvmC(evmc_address const& _addr) +{ + return {(char*)_addr.bytes, 20}; +} + +inline std::string fromBytes(const bytes& _addr) +{ + return {(char*)_addr.data(), _addr.size()}; +} + +inline std::string fromBytes(const bytesConstRef& _addr) +{ + return _addr.toString(); +} + +inline bytes toBytes(const std::string_view& _addr) +{ + return {(char*)_addr.data(), (char*)(_addr.data() + _addr.size())}; +} + +inline std::string getContractTableName(const std::string_view& _address) +{ + constexpr static std::string_view prefix("/apps/"); + std::string out; + if (_address[0] == '/') + { + out.reserve(prefix.size() + _address.size() - 1); + std::copy(prefix.begin(), prefix.end(), std::back_inserter(out)); + std::copy(_address.begin() + 1, _address.end(), std::back_inserter(out)); + } + else + { + out.reserve(prefix.size() + _address.size()); + std::copy(prefix.begin(), prefix.end(), std::back_inserter(out)); + std::copy(_address.begin(), _address.end(), std::back_inserter(out)); + } + + return out; +} + +} // namespace bcos diff --git a/bcos-executor/src/dag/Abi.cpp b/bcos-executor/src/dag/Abi.cpp new file mode 100644 index 0000000..62649b0 --- /dev/null +++ b/bcos-executor/src/dag/Abi.cpp @@ -0,0 +1,202 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief ABI data structure used in transaction construction + * @file Abi.cpp + * @author: catli + * @date: 2021-09-11 + */ + +#include "Abi.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos::executor; + +ParameterAbi parseParameter(const Json::Value& input) +{ + auto paramType = input["type"].asString(); + auto components = vector(); + if (boost::starts_with(paramType, "tuple")) + { + auto& paramComponents = input["components"]; + assert(!paramComponents.isNull()); + + components.reserve(paramComponents.size()); + for (auto& component : paramComponents) + { + components.emplace_back(parseParameter(component)); + } + } + auto parameterAbi = ParameterAbi(paramType, components); + return parameterAbi; +} + +vector flattenStaticParameter(const ParameterAbi& param) +{ // TODO: return vector>>, pair is type and access path + const auto TUPLE_STR = "tuple"; + auto flatTypes = vector(); + if (boost::starts_with(param.type, TUPLE_STR)) + { + for (auto i = (size_t)0; i < param.components.size(); i++) + { + auto types = flattenStaticParameter(param.components[i]); + flatTypes.insert(flatTypes.end(), types.begin(), types.end()); + } + } + else if (boost::algorithm::contains(param.type, "[") && + !boost::algorithm::contains(param.type, "[]")) + { + auto type = param.type.substr(0, param.type.find("[")); + size_t len = std::stoi(param.type.substr(param.type.find("["), param.type.find("]"))); + flatTypes.insert(flatTypes.end(), len, type); + } + else + { + flatTypes.push_back(param.type); + } + return flatTypes; +} + +unique_ptr FunctionAbi::deserialize( + string_view abiStr, const bytes& expected, bool isSMCrypto) +{ + assert(expected.size() == 4); + + Json::Reader reader; + Json::Value root; + if (!reader.parse(abiStr.begin(), abiStr.end(), root)) + { + BCOS_LOG(DEBUG) << LOG_BADGE("EXECUTOR") << LOG_DESC("unable to parse contract ABI") + << LOG_KV("abiStr", abiStr); + return nullptr; + } + + if (!root.isArray()) + { + BCOS_LOG(DEBUG) << LOG_BADGE("EXECUTOR") << LOG_DESC("contract ABI is not an array") + << LOG_KV("abiStr", abiStr); + return nullptr; + } + + for (auto& function : root) + { + auto& type = function["type"]; + if (type.isNull() || type.asString() != "function") + { + continue; + } + + if (!function["constant"].isNull()) + { // liquid + if (function["constant"].asBool()) + { + continue; + } + } + else if (!function["stateMutability"].isNull()) + { // solidity + if (function["stateMutability"].asString() == "view" || + function["stateMutability"].asString() == "pure") + { + continue; + } + } + else + { + continue; + } + auto& functionName = function["name"]; + assert(!functionName.isNull()); + uint32_t selector = 0; + if (!function["selector"].isNull() && function["selector"].isArray()) + { + if (isSMCrypto) + { + selector = (uint32_t)function["selector"][1].asUInt(); + } + else + { + selector = (uint32_t)function["selector"][0].asUInt(); + } + } + + auto expectedSelector = *((uint32_t*)expected.data()); + expectedSelector = ((expectedSelector & 0xff) << 24) | ((expectedSelector & 0xff00) << 8) | + ((expectedSelector & 0xff0000) >> 8) | + ((expectedSelector & 0xff000000) >> 24); + + if (expectedSelector != selector) + { + BCOS_LOG(DEBUG) << LOG_BADGE("EXECUTOR") << LOG_DESC("selector mismatch") + << LOG_KV("name", functionName) + << LOG_KV("expected selector", expectedSelector) + << LOG_KV("selector", selector); + continue; + } + + auto& functionConflictFields = function["conflictFields"]; + auto conflictFields = vector(); + conflictFields.reserve(functionConflictFields.size()); + if (!functionConflictFields.isNull()) + { + for (auto& conflictField : functionConflictFields) + { + auto value = vector(); + if (!conflictField["value"].isNull()) + { + value.reserve(conflictField["value"].size()); + for (auto& pathItem : conflictField["value"]) + { + value.emplace_back(static_cast(pathItem.asUInt())); + } + } + std::optional slot = std::nullopt; + if (!conflictField["slot"].isNull()) + { + slot = std::optional(conflictField["slot"].asInt()); + } + conflictFields.emplace_back(ConflictField{ + static_cast(conflictField["kind"].asUInt()), value, slot}); + } + } + + auto& functionInputs = function["inputs"]; + assert(!functionInputs.isNull()); + auto inputs = vector(); + inputs.reserve(functionInputs.size()); + auto flatInputs = vector(); + for (auto i = (Json::ArrayIndex)0; i < functionInputs.size(); ++i) + { + auto param = parseParameter(functionInputs[i]); + auto flatTypes = flattenStaticParameter(param); + flatInputs.insert(flatInputs.end(), flatTypes.begin(), flatTypes.end()); + inputs.emplace_back(std::move(param)); + } + + return unique_ptr( + new FunctionAbi{functionName.asString(), inputs, selector, conflictFields, flatInputs}); + } + + return nullptr; +} diff --git a/bcos-executor/src/dag/Abi.h b/bcos-executor/src/dag/Abi.h new file mode 100644 index 0000000..156d92b --- /dev/null +++ b/bcos-executor/src/dag/Abi.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief ABI data structure used in transaction construction + * @file Abi.h + * @author: catli + * @date: 2021-09-11 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +struct ConflictField +{ + std::uint8_t kind; + std::vector value; + std::optional slot; +}; + +struct ParameterAbi +{ + std::string type; + std::vector components; + + ParameterAbi() = default; + + ParameterAbi(const std::string& type) { this->type = type; } + + ParameterAbi(const std::string& type, const std::vector& components) + { + this->type = type; + this->components = components; + } + + friend std::ostream& operator<<(std::ostream& output, const ParameterAbi& param) + { + output << "{\"type\": " << param.type << ", \"components\": ["; + for (auto& component : param.components) + { + output << component; + } + output << "]}"; + return output; + } +}; + +struct FunctionAbi +{ + std::string name; + std::vector inputs; + std::uint32_t selector; + std::vector conflictFields; + std::vector flatInputs; + + static std::unique_ptr deserialize( + std::string_view abiStr, const bcos::bytes& expected, bool isSMCrypto); +}; +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/dag/ClockCache.cpp b/bcos-executor/src/dag/ClockCache.cpp new file mode 100644 index 0000000..f257cc0 --- /dev/null +++ b/bcos-executor/src/dag/ClockCache.cpp @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of clock cache, which used to cache deserialization result of ABI + * info + * @file ClockCache.cpp + * @author: catli + * @date: 2021-09-11 + */ + +#include "ClockCache.h" +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +CacheItem* CacheShard::insert(size_t hash, void* value, bool holdReference) +{ + auto guard = lock_guard(m_mutex); + auto success = evictFromCache(); + if (!success) + { + return nullptr; + } + + // Grab available slot from recycle bin. If recycle bin is empty, create + // and append new slot to end of circular list. + CacheItem* item = nullptr; + if (!m_recycle.empty()) + { + item = m_recycle.back(); + m_recycle.pop_back(); + } + else + { + m_list.emplace_back(); + item = &m_list.back(); + } + + item->hash = hash; + item->value = value; + auto flags = holdReference ? s_inCacheBit + s_oneRef : s_inCacheBit; + + item->flags.store(flags, std::memory_order_relaxed); + HashTable::accessor accessor; + if (m_table.find(accessor, hash)) + { + auto existingHandle = accessor->second; + m_table.erase(accessor); + unsetInCache(existingHandle); + } + m_table.insert(HashTable::value_type(hash, item)); + m_usage.fetch_add(1, std::memory_order_relaxed); + return item; +} + +CacheItem* CacheShard::lookup(size_t hash) +{ + HashTable::const_accessor accessor; + if (!m_table.find(accessor, hash)) + { + return nullptr; + } + + CacheItem* item = accessor->second; + accessor.release(); + // ref() could fail if another thread sneak in and evict/erase the cache + // entry before we are able to hold reference. + if (!ref(item)) + { + return nullptr; + } + else + + // Double check the key since the item may now representing another key + // if other threads sneak in, evict/erase the entry and re-used the item + // for another cache entry. + if (hash != item->hash) + { + unref(item, false); + return nullptr; + } + return item; +} + +bool CacheShard::ref(CacheItem* item) +{ + // CAS loop to increase reference count. + uint32_t flags = item->flags.load(std::memory_order_relaxed); + while (inCache(flags)) + { + // Use acquire semantics on success, as further operations on the cache + // entry has to be order after reference count is increased. + if (item->flags.compare_exchange_weak( + flags, flags + s_oneRef, std::memory_order_acquire, std::memory_order_relaxed)) + { + return true; + } + } + return false; +} + +bool CacheShard::unref(CacheItem* item, bool setUsage) +{ + if (setUsage) + { + item->flags.fetch_or(s_usageBit, std::memory_order_relaxed); + } + // Use acquire-release semantics as previous operations on the cache entry + // has to be order before reference count is decreased, and potential cleanup + // of the entry has to be order after. + uint32_t flags = item->flags.fetch_sub(s_oneRef, std::memory_order_acq_rel); + assert(refCounts(flags) > 0); + if (refCounts(flags) == 1) + { + if (!inCache(flags)) + { + auto guard = lock_guard(m_mutex); + recycleItem(item); + return true; + } + } + return false; +} + +void CacheShard::unsetInCache(CacheItem* item) +{ + assert(!m_mutex.try_lock()); + + // Use acquire-release semantics as previous operations on the cache entry + // has to be order before reference count is decreased, and potential cleanup + // of the entry has to be order after. + uint32_t flags = item->flags.fetch_and(~s_inCacheBit, std::memory_order_acq_rel); + // Cleanup if it is the last reference. + if (inCache(flags) && refCounts(flags) == 0) + { + recycleItem(item); + } +} + +bool CacheShard::evictFromCache() +{ + assert(!m_mutex.try_lock()); + auto usage = m_usage.load(std::memory_order_relaxed); + auto capacity = m_capacity.load(memory_order_relaxed); + if (usage == 0) + { + return true; + } + + auto newHead = m_head; + bool is2ndIteration = false; + while (usage >= capacity) + { + assert(newHead < m_list.size()); + auto evicted = tryEvict(&m_list[newHead]); + newHead = (newHead + 1 >= m_list.size()) ? 0 : newHead + 1; + if (evicted) + { + usage = m_usage.load(memory_order_relaxed); + } + else + { + if (newHead == m_head) + { + if (is2ndIteration) + { + return false; + } + else + { + is2ndIteration = true; + } + } + } + } + m_head = newHead; + return true; +} + +bool CacheShard::tryEvict(CacheItem* item) +{ + assert(!m_mutex.try_lock()); + auto flags = s_inCacheBit; + if (item->flags.compare_exchange_strong( + flags, 0, std::memory_order_acquire, std::memory_order_relaxed)) + { + auto erased = m_table.erase(item->hash); + assert(erased); + boost::ignore_unused(erased); + boost::ignore_unused(flags); + + recycleItem(item); + return true; + } + item->flags.fetch_and(~s_usageBit, memory_order_relaxed); + return false; +} + +void CacheShard::recycleItem(CacheItem* item) +{ + assert(!m_mutex.try_lock()); + auto& flags = item->flags; + assert(!inCache(flags) && refCounts(flags) == 0); + boost::ignore_unused(flags); + + m_deleter(item->value); + m_recycle.push_back(item); + m_usage.fetch_sub(1, std::memory_order_relaxed); +} + +void CacheShard::setCapacity(size_t capacity) +{ + assert(capacity > 0); + auto guard = lock_guard(m_mutex); + m_capacity.store(capacity, std::memory_order_relaxed); + evictFromCache(); +} + +CacheShard::~CacheShard() +{ + for (auto& item : m_list) + { + uint32_t flags = item.flags.load(std::memory_order_relaxed); + if (inCache(flags) || refCounts(flags) > 0) + { + m_deleter(item.value); + } + } +} diff --git a/bcos-executor/src/dag/ClockCache.h b/bcos-executor/src/dag/ClockCache.h new file mode 100644 index 0000000..7896c8f --- /dev/null +++ b/bcos-executor/src/dag/ClockCache.h @@ -0,0 +1,307 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of clock cache, which used to cache deserialization result of ABI + * info + * @file ClockCache.h + * @author: catli + * @date: 2021-09-11 + */ + +#pragma once + +#include "Abi.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +// Cache entry meta data. +struct CacheItem +{ + CacheItem() = default; + + CacheItem(const CacheItem& a) { *this = a; } + + CacheItem& operator=(const CacheItem& a) + { + value = a.value; + return *this; + } + + size_t hash; + + void* value; + + // Flags and counters associated with the cache item: + // lowest bit: in-cache bit + // second lowest bit: usage bit + // the rest bits: reference count + // The item is unused when flags equals to 0. The thread decreases the count + // to 0 is responsible to put the item back to recycle and cleanup memory. + std::atomic flags; +}; + +// A cache shard which maintains its own clock cache. +class CacheShard +{ +public: + using HashTable = tbb::concurrent_hash_map; + using Deleter = void (*)(void* value); + + CacheShard() : m_head(0), m_usage(0) {} + + // Insert a mapping from key->value into the cache. + CacheItem* insert(size_t hash, void* value, bool holdReference); + + // If the cache has no mapping for "key", returns nullptr, otherwise return a + // item that corresponds to the mapping. The caller must call this->unref(item) + // when the returned mapping is no longer needed. + CacheItem* lookup(size_t hash); + + // Increments the reference count for the item if it refers to an entry in + // the cache. Returns true if refcount was incremented; otherwise, returns + // false. + // + // REQUIRES: item must have been returned by a method on *this. + bool ref(CacheItem* item); + + // Decrease reference count of the entry. If this decreases the count to 0, + // recycle the entry. If set_usage is true, also set the usage bit. Returns true + // if a value is erased. + // + // Not necessary to hold mutex_ before being called. + bool unref(CacheItem* item, bool setUsage); + + void setCapacity(size_t capacity); + + void setDeleter(Deleter deleter) { m_deleter = deleter; } + + ~CacheShard(); + +private: + static const std::uint32_t s_inCacheBit = 1; + static const std::uint32_t s_usageBit = 2; + static const std::uint32_t s_refCountOffset = 2; + static const std::uint32_t s_oneRef = 1 << s_refCountOffset; + + static bool inCache(uint32_t flags) { return flags & s_inCacheBit; } + static bool hasUsage(uint32_t flags) { return flags & s_usageBit; } + static uint32_t refCounts(uint32_t flags) { return flags >> s_refCountOffset; } + + // Unset in-cache bit of the entry. Recycle the item if necessary, returns + // true if a value is erased. + // + // Has to hold mutex_ before being called. + void unsetInCache(CacheItem* item); + + // Scan through the circular list, evict entries until we get enough space + // for a new cache entry. Return true if success, false otherwise. + // + // Has to hold mutex_ before being called. + bool evictFromCache(); + + // Examine the item for eviction. If the item is in cache, usage bit is + // not set, and referece count is 0, evict it from cache. Otherwise unset + // the usage bit. + // + // Has to hold mutex_ before being called. + bool tryEvict(CacheItem* item); + + // Put the item back to recycle list, and put the value associated with + // it into to-be-deleted list. + // + // Has to hold mutex_ before being called. + void recycleItem(CacheItem* item); + + // The circular list of cache handles. Initially the list is empty. Once a + // item is needed by insertion, and no more handles are available in + // recycle bin, one more item is appended to the end. + // + // We use std::deque for the circular list because we want to make sure + // pointers to handles are valid through out the life-cycle of the cache + // (in contrast to std::vector), and be able to grow the list (in contrast + // to statically allocated arrays). + std::deque m_list; + + // Pointer to the next item in the circular list to be examine for + // eviction. + size_t m_head; + + // Recycle bin of cache handles. + std::vector m_recycle; + + // Maximum cache size. + std::atomic m_capacity; + + // Current total size of the cache. + std::atomic m_usage; + + // Guards m_list, m_head, and m_recycle. In addition, updating m_table also has + // to hold the mutex, to avoid the cache being in inconsistent state. + std::mutex m_mutex; + + // Hash table (tbb::concurrent_hash_map) for lookup. + HashTable m_table; + + Deleter m_deleter; +}; + +template +class CacheHandle +{ +public: + CacheHandle() = default; + + CacheHandle(CacheItem* item, CacheShard* ownedShard) + { + m_item = item; + m_ownedShard = ownedShard; + } + + CacheHandle(const CacheHandle&) = delete; + + CacheHandle& operator=(const CacheHandle&) = delete; + + CacheHandle(CacheHandle&& a) + { + if (isValid()) + { + m_ownedShard->unref(m_item, true); + } + m_item = a.m_item; + m_ownedShard = a.m_ownedShard; + a.m_item = nullptr; + a.m_ownedShard = nullptr; + } + + CacheHandle& operator=(CacheHandle&& a) + { + if (this != &a) + { + if (isValid()) + { + m_ownedShard->unref(m_item, true); + } + m_item = a.m_item; + m_ownedShard = a.m_ownedShard; + a.m_item = nullptr; + a.m_ownedShard = nullptr; + } + return *this; + } + + ~CacheHandle() + { + if (isValid()) + { + m_ownedShard->unref(m_item, true); + } + } + + T& value() const { return *static_cast(m_item->value); } + + bool release() + { + if (isValid()) + { + auto result = m_ownedShard->unref(m_item, true); + m_item = nullptr; + m_ownedShard = nullptr; + return result; + } + return false; + } + + bool isValid() const { return m_item != nullptr && m_ownedShard != nullptr; } + +private: + CacheItem* m_item; + CacheShard* m_ownedShard; +}; + +template +class ClockCache +{ +public: + ClockCache(size_t capacity, int numShardBits = -1) + { + assert(capacity > 0); + if (numShardBits == -1) + { + numShardBits = 4; + } + m_numShards = 1 << numShardBits; + m_shardMask = (size_t{1} << numShardBits) - 1; + m_shards = new CacheShard[m_numShards]; + + for (auto i = 0u; i < m_numShards; ++i) + { + m_shards[i].setCapacity(capacity); + m_shards[i].setDeleter([](void* value) { delete static_cast(value); }); + } + } + + CacheHandle lookup(const K& key) + { + auto hasher = boost::hash(); + auto hash = hasher(key); + auto& ownedShard = getShard(hash); + auto item = ownedShard.lookup(hash); + return CacheHandle(item, &ownedShard); + } + + bool insert(const K& key, V* value, CacheHandle* outHandle = nullptr) + { + auto hasher = boost::hash(); + auto hash = hasher(key); + auto& shard = getShard(hash); + auto item = shard.insert(hash, value, outHandle != nullptr); + if (outHandle != nullptr) + { + if (item != nullptr) + { + (*outHandle) = CacheHandle(item, &shard); + } + } + return item != nullptr; + } + + ~ClockCache() { delete[] m_shards; } + +private: + CacheShard& getShard(size_t hash) + { + auto shardId = hash & m_shardMask; + return m_shards[shardId]; + } + + size_t m_numShards; + size_t m_shardMask; + CacheShard* m_shards; +}; +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/dag/CriticalFields.h b/bcos-executor/src/dag/CriticalFields.h new file mode 100644 index 0000000..28962da --- /dev/null +++ b/bcos-executor/src/dag/CriticalFields.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Critical fields analysing + * @author: jimmyshi + * @date: 2022-1-14 + */ + + +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +namespace critical +{ +using ID = uint32_t; +static const ID INVALID_ID = (ID(0) - 1); + +using OnConflictHandler = std::function; // conflict from -> to +using OnFirstConflictHandler = std::function; // conflict +using OnEmptyConflictHandler = std::function; // conflict +using OnAllConflictHandler = std::function; // conflict + +class CriticalFieldsInterface +{ +public: + using Ptr = std::shared_ptr; + + virtual size_t size() = 0; + + virtual bool contains(size_t id) = 0; + + virtual void traverseDag(OnConflictHandler const& _onConflict, + OnFirstConflictHandler const& _onFirstConflict, + OnEmptyConflictHandler const& _onEmptyConflict, + OnAllConflictHandler const& _onAllConflict) = 0; +}; + +class CriticalFields : public virtual CriticalFieldsInterface +{ +public: + using Ptr = std::shared_ptr; + using CriticalField = std::vector>; + using CriticalFieldPtr = std::shared_ptr; + + CriticalFields(size_t _size) : m_criticals(std::vector(_size)) {} + virtual ~CriticalFields() {} + + size_t size() override { return m_criticals.size(); } + bool contains(size_t id) override { return id < size() && get(id) != nullptr; }; + void put(size_t _id, CriticalFieldPtr _criticalField) { m_criticals[_id] = _criticalField; } + CriticalFieldPtr get(size_t _id) { return m_criticals[_id]; } + + void traverseDag(OnConflictHandler const& _onConflict, + OnFirstConflictHandler const& _onFirstConflict, + OnEmptyConflictHandler const& _onEmptyConflict, + OnAllConflictHandler const& _onAllConflict) override + { + auto dependencies = std::unordered_map, std::vector, boost::hash>>(); + + for (ID id = 0; id < m_criticals.size(); ++id) + { + auto criticals = m_criticals[id]; + + if (criticals == nullptr) + { + _onAllConflict(id); + } + else if (criticals->empty()) + { + _onEmptyConflict(id); + } + else if (!criticals->empty()) + { + // Get conflict parent's id set + std::set pIds; + for (auto const& c : *criticals) + { + auto& ids = dependencies[c]; + for (auto pId : ids) + { + pIds.insert(pId); + } + ids.push_back(id); + } + + if (pIds.empty()) + { + _onFirstConflict(id); + } + else + { + for (ID pId : pIds) + { + _onConflict(pId, id); + } + } + } + else + { + continue; + } + } + }; + +private: + std::vector m_criticals; +}; +} // namespace critical +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/dag/DAG.cpp b/bcos-executor/src/dag/DAG.cpp new file mode 100644 index 0000000..391e5f4 --- /dev/null +++ b/bcos-executor/src/dag/DAG.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : DAG(Directed Acyclic Graph) basic implement + * @author: jimmyshi + * @date: 2019-1-8 + */ + +#include "DAG.h" +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +DAG::~DAG() +{ + clear(); +} + +void DAG::init(ID _maxSize) +{ + clear(); + for (ID i = 0; i < _maxSize; ++i) + m_vtxs.emplace_back(make_shared()); + m_totalVtxs = _maxSize; + m_totalConsume = 0; +} + +void DAG::addEdge(ID _f, ID _t) +{ + if (_f >= m_vtxs.size() && _t >= m_vtxs.size()) + return; + m_vtxs[_f]->outEdge.emplace_back(_t); + m_vtxs[_t]->inDegree += 1; + // PARA_LOG(TRACE) << LOG_BADGE("DAG") << LOG_DESC("Add edge") << LOG_KV("from", _f) + // << LOG_KV("to", _t); +} + +void DAG::generate() +{ + for (ID id = 0; id < m_vtxs.size(); ++id) + { + if (m_vtxs[id]->inDegree == 0) + m_topLevel.push(id); + } + + // PARA_LOG(TRACE) << LOG_BADGE("DAG") << LOG_DESC("generate") + // << LOG_KV("queueSize", m_topLevel.size()); + // for (ID id = 0; id < m_vtxs.size(); id++) + // printVtx(id); +} + +ID DAG::waitPop(bool _needWait) +{ + // Note: concurrent_queue of TBB can't be used with boost::conditional_variable + // the try_pop will already be false + std::unique_lock ul(x_topLevel); + ID top = INVALID_ID; + cv_topLevel.wait_for(ul, std::chrono::milliseconds(10), [&]() { + auto has = m_topLevel.try_pop(top); + if (has) + { + return true; + } + else if (m_totalConsume >= m_totalVtxs) + { + return true; + } + else if (!_needWait) + { + return true; + } + // process-exit related: + // if the m_stop is true (may be the storage has exceptioned) + // return true, will pop INVALID_ID + else if (m_stop.load()) + { + return true; + } + + return false; + }); + return top; +} + +ID DAG::consume(ID _id) +{ + ID producedNum = 0; + ID nextId = INVALID_ID; + ID lastDegree = INVALID_ID; + for (ID id : m_vtxs[_id]->outEdge) + { + auto vtx = m_vtxs[id]; + { + lastDegree = vtx->inDegree.fetch_sub(1); + } + if (lastDegree == 1) + { + ++producedNum; + if (producedNum == 1) + { + nextId = id; + } + else + { + m_topLevel.push(id); + cv_topLevel.notify_one(); + } + } + } + + if (m_totalConsume.fetch_add(1) + 1 == m_totalVtxs) + { + cv_topLevel.notify_all(); + } + // PARA_LOG(TRACE) << LOG_BADGE("TbbCqDAG") << LOG_DESC("consumed") + // << LOG_KV("queueSize", m_topLevel.size()); + // for (ID id = 0; id < m_vtxs.size(); id++) + // printVtx(id); + return nextId; +} + +void DAG::clear() +{ + m_vtxs = std::vector>(); + // XXXX m_topLevel.clear(); +} + +void DAG::printVtx(ID _id) +{ + for (ID id : m_vtxs[_id]->outEdge) + { + PARA_LOG(TRACE) << LOG_BADGE("DAG") << LOG_DESC("VertexEdge") << LOG_KV("ID", _id) + << LOG_KV("inDegree", m_vtxs[_id]->inDegree) << LOG_KV("edge", id); + } +} \ No newline at end of file diff --git a/bcos-executor/src/dag/DAG.h b/bcos-executor/src/dag/DAG.h new file mode 100644 index 0000000..5229306 --- /dev/null +++ b/bcos-executor/src/dag/DAG.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : DAG(Directed Acyclic Graph) basic implement + * @author: jimmyshi + * @date: 2019-1-8 + */ + + +#pragma once +#include "../Common.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +using ID = uint32_t; +using IDs = std::vector; +static const ID INVALID_ID = (ID(0) - 1); + +struct Vertex +{ + std::atomic inDegree; + std::vector outEdge; +}; + +class DAG +{ + // Just algorithm, not thread safe +public: + DAG(){}; + ~DAG(); + + // Init DAG basic memory, should call before other function + // _maxSize is max ID + 1 + void init(ID _maxSize); + + // Add edge between vertex + void addEdge(ID _f, ID _t); + + // Generate DAG + void generate(); + + // Wait until topLevel is not empty, return INVALID_ID if DAG reach the end + ID waitPop(bool _needWait = true); + + // Consume the top and add new top in top queue (thread safe) + ID consume(ID _id); + + // Clear all data of this class (thread safe) + void clear(); + +private: + std::vector> m_vtxs; + tbb::concurrent_queue m_topLevel; + + ID m_totalVtxs = 0; + std::atomic m_totalConsume; + +private: + void printVtx(ID _id); + mutable std::mutex x_topLevel; + std::condition_variable cv_topLevel; + std::atomic_bool m_stop = {false}; +}; + +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/dag/ScaleUtils.cpp b/bcos-executor/src/dag/ScaleUtils.cpp new file mode 100644 index 0000000..18f94eb --- /dev/null +++ b/bcos-executor/src/dag/ScaleUtils.cpp @@ -0,0 +1,268 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tools for scale codec + * info + * @file ScaleUtils.cpp + * @author: catli + * @date: 2021-09-11 + */ + +#include "ScaleUtils.h" +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +optional bcos::executor::decodeCompactInteger(const bytes& encodedBytes, size_t startPos) +{ + if (encodedBytes.size() - startPos < 1) + { + return nullopt; + } + + auto _1stByte = encodedBytes[startPos]; + auto flag = (_1stByte)&0b00000011u; + auto number = 0u; + + switch (flag) + { + case 0b00u: + { + // single-byte mode: + // upper six bits are the LE encoding of the value (valid only for values of 0-63). + number = static_cast(_1stByte >> 2u); + break; + } + case 0b01u: + { + // two-byte mode: + // upper six bits and the following byte is the LE encoding of the value (valid only + // for values 64-(2**14-1)). + if (encodedBytes.size() - startPos < 2) + { + BCOS_LOG(TRACE) << LOG_BADGE("decodeCompactInteger") + << LOG_DESC("not enough data to decode compact integer"); + return nullopt; + } + auto _2ndByte = encodedBytes[startPos + 1]; + number = + (static_cast((_1stByte)&0b11111100u) + static_cast(_2ndByte) * 256u) >> + 2u; + break; + } + case 0b10u: + { + // four-byte mode: + // upper six bits and the following three bytes are the LE encoding of the value + // (valid only for values (2**14)-(2**30-1)) + number = _1stByte; + size_t multiplier = 256u; + if (encodedBytes.size() - startPos < 4) + { + BCOS_LOG(TRACE) << LOG_BADGE("decodeCompactInteger") + << LOG_DESC("not enough data to decode compact integer"); + return nullopt; + } + + for (auto i = 1u; i < 4u; ++i) + { + number += encodedBytes[startPos + i] * multiplier; + multiplier = multiplier << 8u; + } + number = number >> 2u; + break; + } + case 0b11: + { + // big-integer mode: + // upper six bits are the number of bytes following, less four. The value is + // contained, LE encoded, in the bytes following. The final (most significant) byte + // must be non-zero. Valid only for values (2**30)-(2**536-1) + auto bytesCount = ((_1stByte) >> 2u) + 4u; + if (encodedBytes.size() - startPos < bytesCount + 1) + { + BCOS_LOG(TRACE) << LOG_BADGE("decodeCompactInteger") + << LOG_DESC("not enough data to decode compact integer"); + return nullopt; + } + + auto multiplier = 1u; + for (auto i = 1u; i < bytesCount + 1; ++i) + { + number += (encodedBytes[startPos + i]) * multiplier; + multiplier *= 256u; + } + break; + } + default: + return nullopt; + } + return number; +} + +optional bcos::executor::scaleEncodingLength( + const ParameterAbi& param, const bytes& encodedBytes, size_t startPos) +{ + auto& type = param.type; + if (boost::ends_with(type, "]")) + { + auto leftBracketPos = type.rfind("["); + if (leftBracketPos == type.npos) + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to parse array type") << LOG_KV("type", type); + return nullopt; + } + + auto size = 0u; + auto length = 0u; + if (leftBracketPos == type.length() - 2) + { + auto compactLength = decodeCompactInteger(encodedBytes, startPos); + if (compactLength) + { + size = compactLength.value(); + length += codec::scale::compactLen(size); + startPos += length; + } + else + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to parse length of dynamic array"); + return nullopt; + } + } + else + { + auto dimension = type.substr(leftBracketPos + 1, type.length() - leftBracketPos - 1); + try + { + size = stoul(dimension); + } + catch (...) + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to parse dimension") + << LOG_KV("dimension", dimension); + return nullopt; + } + } + + auto subParam = ParameterAbi{type.substr(0, leftBracketPos), param.components}; + for (auto i = 0u; i < size; ++i) + { + auto subTypeLength = scaleEncodingLength(subParam, encodedBytes, startPos); + if (subTypeLength) + { + auto value = subTypeLength.value(); + length += value; + startPos += value; + } + else + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to calculate length of element"); + return nullopt; + } + } + return {length}; + } + + if (boost::starts_with(type, "uint") || boost::starts_with(type, "int")) + { + auto digitStartPos = type.rfind("t"); + auto digitsNum = 0u; + try + { + digitsNum = stoul(type.substr(digitStartPos + 1)); + } + catch (...) + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") << LOG_DESC("unable to parse type") + << LOG_KV("type", type); + return nullopt; + } + return digitsNum >> 3; + } + + if (type == "string" || type == "bytes") + { + auto compactLength = decodeCompactInteger(encodedBytes, startPos); + if (compactLength) + { + auto value = compactLength.value(); + return {value + codec::scale::compactLen(value)}; + } + else + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to parse string or bytes"); + return nullopt; + } + } + + if (type == "bool" || type == "byte") + { + return 1; + } + + if (boost::starts_with(type, "bytes")) + { + auto digitStartPos = type.rfind("s"); + auto digitsNum = 0u; + try + { + digitsNum = stoul(type.substr(digitStartPos + 1)); + } + catch (...) + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") << LOG_DESC("unable to parse type") + << LOG_KV("type", type); + return nullopt; + } + return digitsNum; + } + + if (type == "tuple") + { + auto length = 0u; + for (auto& component : param.components) + { + auto componentLength = scaleEncodingLength(component, encodedBytes, startPos); + if (componentLength) + { + auto value = componentLength.value(); + length += value; + startPos += value; + } + else + { + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") + << LOG_DESC("unable to parse component") + << LOG_KV("type", component); + return nullopt; + } + } + return {length}; + } + + BCOS_LOG(TRACE) << LOG_BADGE("scaleEncodingLength") << LOG_DESC("unable to parse type") + << LOG_KV("type", type); + return nullopt; +} \ No newline at end of file diff --git a/bcos-executor/src/dag/ScaleUtils.h b/bcos-executor/src/dag/ScaleUtils.h new file mode 100644 index 0000000..cf27479 --- /dev/null +++ b/bcos-executor/src/dag/ScaleUtils.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tools for scale codec + * info + * @file ScaleUtils.h + * @author: catli + * @date: 2021-09-11 + */ + +#pragma once + +#include "../Common.h" +#include "Abi.h" +#include + +namespace bcos +{ +namespace executor +{ +std::optional decodeCompactInteger(const bcos::bytes& encodedBytes, size_t startPos); + +std::optional scaleEncodingLength( + const ParameterAbi& param, const bytes& encodedBytes, size_t startPos); +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/dag/TxDAG2.cpp b/bcos-executor/src/dag/TxDAG2.cpp new file mode 100644 index 0000000..b37829f --- /dev/null +++ b/bcos-executor/src/dag/TxDAG2.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Transaction DAG flowGraph implementation + * @author: jimmyshi + * @date: 2022-1-4 + */ + + +#include "TxDAG2.h" +#include "CriticalFields.h" + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::executor::critical; +using namespace tbb::flow; + +#define DAG_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("DAG") + +// Generate DAG according with given transactions +void TxDAG2::init(critical::CriticalFieldsInterface::Ptr _txsCriticals, ExecuteTxFunc const& _f) +{ + auto txsSize = _txsCriticals->size(); + DAG_LOG(INFO) << LOG_DESC("Begin init transaction DAG") << LOG_KV("transactionNum", txsSize); + + f_executeTx = _f; + m_totalParaTxs = _txsCriticals->size(); + + // Generate tasks in m_tasks + // Note: we must generate every task in m_tasks before make_edge(). Otherwise, may lead to core. + using Msg = const continue_msg&; + std::vector id2TaskId(txsSize); + for (ID id = 0; id < _txsCriticals->size(); ++id) + { + if (_txsCriticals->contains(id)) + { + // generate tasks + auto task = [this, id](Msg) { f_executeTx(id); }; + auto t = Task(m_dag, std::move(task)); + auto taskId = m_tasks.size(); + m_tasks.push_back(t); + + id2TaskId[id] = taskId; + } + } + + // define conflict handler + auto onConflictHandler = [&](ID pId, ID id) { + auto pTaskId = id2TaskId[pId]; + auto taskId = id2TaskId[id]; + make_edge(m_tasks[pTaskId], m_tasks[taskId]); + }; + auto onFirstConflictHandler = [&](ID id) { + auto taskId = id2TaskId[id]; + make_edge(m_startTask, m_tasks[taskId]); + }; + auto onEmptyConflictHandler = [&](ID id) { + auto taskId = id2TaskId[id]; + make_edge(m_startTask, m_tasks[taskId]); + }; + auto onAllConflictHandler = [&](ID id) { + // do nothing + // ignore normal tx, only handle DAG tx, normal tx has been sent back to be executed by DMC + (void)id; + }; + + // parse criticals + _txsCriticals->traverseDag( + onConflictHandler, onFirstConflictHandler, onEmptyConflictHandler, onAllConflictHandler); + + DAG_LOG(TRACE) << LOG_DESC("End init transaction DAG"); +} + +void TxDAG2::run(unsigned int threadNum) +{ + // TODO: add timeout logic + (void)threadNum; + m_startTask.try_put(continue_msg()); + m_dag.wait_for_all(); +} \ No newline at end of file diff --git a/bcos-executor/src/dag/TxDAG2.h b/bcos-executor/src/dag/TxDAG2.h new file mode 100644 index 0000000..0092ae5 --- /dev/null +++ b/bcos-executor/src/dag/TxDAG2.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Transaction DAG flowGraph implementation + * @author: jimmyshi + * @date: 2022-1-4 + */ + + +#pragma once +#include "./TxDAGInterface.h" +#include "tbb/flow_graph.h" +#include + + +namespace bcos +{ +namespace executor +{ + +class TxDAG2 : public virtual TxDAGInterface +{ + using Task = tbb::flow::continue_node; + +public: + TxDAG2() : m_startTask(m_dag) {} + + virtual ~TxDAG2() {} + + void init( + critical::CriticalFieldsInterface::Ptr _txsCriticals, ExecuteTxFunc const& _f) override; + + void run(unsigned int threadNum) override; + +private: + ExecuteTxFunc f_executeTx; + tbb::flow::graph m_dag; + tbb::flow::broadcast_node m_startTask; + std::vector m_tasks = std::vector(); + size_t m_totalParaTxs; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/dag/TxDAGInterface.h b/bcos-executor/src/dag/TxDAGInterface.h new file mode 100644 index 0000000..492b0a3 --- /dev/null +++ b/bcos-executor/src/dag/TxDAGInterface.h @@ -0,0 +1,69 @@ +/* +* Copyright (C) 2021 FISCO BCOS. +* SPDX-License-Identifier: Apache-2.0 +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +/** +* @brief : Transaction DAG interface +* @author: jimmyshi +* @date: 2022-1-4 +*/ + + +#pragma once +#include "../CallParameters.h" +#include "../Common.h" +#include "../executive/BlockContext.h" +#include "../executive/TransactionExecutive.h" +#include "../executor/TransactionExecutor.h" +#include "CriticalFields.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class TransactionExecutive; +using ExecuteTxFunc = std::function; + +enum ConflictFieldKind : std::uint8_t +{ + All = 0, + Len, + Env, + Params, + Const, + None, +}; + +enum EnvKind : std::uint8_t +{ + Caller = 0, + Origin, + Now, + BlockNumber, + Addr, +}; + +class TxDAGInterface +{ +public: + virtual void init(critical::CriticalFieldsInterface::Ptr _txsCriticals, ExecuteTxFunc const& _f) = 0; + + virtual void run(unsigned int threadNum) = 0; +}; +}} + diff --git a/bcos-executor/src/executive/BlockContext.cpp b/bcos-executor/src/executive/BlockContext.cpp new file mode 100644 index 0000000..57cd40e --- /dev/null +++ b/bcos-executor/src/executive/BlockContext.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief block level context + * @file BlockContext.h + * @author: xingqiangbai + * @date: 2021-05-27 + */ + +#include "BlockContext.h" +#include "../vm/Precompiled.h" +#include "ExecutiveStackFlow.h" +#include "TransactionExecutive.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include "bcos-framework/protocol/Exceptions.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include +#include +#include +#include +#include + +using namespace bcos::executor; +using namespace bcos::protocol; +using namespace bcos::precompiled; +using namespace std; + +BlockContext::BlockContext(std::shared_ptr storage, + LedgerCache::Ptr ledgerCache, crypto::Hash::Ptr _hashImpl, + bcos::protocol::BlockNumber blockNumber, h256 blockHash, uint64_t timestamp, + uint32_t blockVersion, const VMSchedule& _schedule, bool _isWasm, bool _isAuthCheck) + : m_blockNumber(blockNumber), + m_blockHash(blockHash), + m_timeStamp(timestamp), + m_blockVersion(blockVersion), + m_schedule(_schedule), + m_isWasm(_isWasm), + m_isAuthCheck(_isAuthCheck), + m_storage(std::move(storage)), + m_hashImpl(_hashImpl), + m_ledgerCache(ledgerCache) +{} + +BlockContext::BlockContext(std::shared_ptr storage, + LedgerCache::Ptr ledgerCache, crypto::Hash::Ptr _hashImpl, + protocol::BlockHeader::ConstPtr _current, const VMSchedule& _schedule, bool _isWasm, + bool _isAuthCheck, std::shared_ptr>> _keyPageIgnoreTables) + : BlockContext(storage, ledgerCache, _hashImpl, _current->number(), _current->hash(), + _current->timestamp(), _current->version(), _schedule, _isWasm, _isAuthCheck) +{ + m_keyPageIgnoreTables = std::move(_keyPageIgnoreTables); +} + + +ExecutiveFlowInterface::Ptr BlockContext::getExecutiveFlow(std::string codeAddress) +{ + bcos::ReadGuard l(x_executiveFlows); + auto it = m_executiveFlows.find(codeAddress); + if (it == m_executiveFlows.end()) + { + /* + bool success; + std::tie(it, success) = + m_executiveFlows.emplace(codeAddress, std::make_shared()); + + */ + return nullptr; + } + return it->second; +} + +void BlockContext::setExecutiveFlow( + std::string codeAddress, ExecutiveFlowInterface::Ptr executiveFlow) +{ + bcos::ReadGuard l(x_executiveFlows); + m_executiveFlows.emplace(codeAddress, executiveFlow); +} + +void BlockContext::suicide(std::string_view contract2Suicide) +{ + { + bcos::WriteGuard l(x_suicides); + m_suicides.emplace(contract2Suicide); + } + + EXECUTOR_LOG(TRACE) << LOG_BADGE("SUICIDE") + << "Add suicide: " << LOG_KV("table2Suicide", contract2Suicide) + << LOG_KV("suicides.size", m_suicides.size()) + << LOG_KV("blockNumber", m_blockNumber); +} + +void BlockContext::killSuicides() +{ + bcos::ReadGuard l(x_suicides); + if (m_suicides.empty()) + { + return; + } + + auto emptyCodeHash = m_hashImpl->hash(""); + for (std::string_view table2Suicide : m_suicides) + { + auto contractTable = storage()->openTable(table2Suicide); + + if (contractTable) + { + // set codeHash + bcos::storage::Entry emptyCodeHashEntry; + emptyCodeHashEntry.importFields({emptyCodeHash.asBytes()}); + contractTable->setRow(ACCOUNT_CODE_HASH, std::move(emptyCodeHashEntry)); + + // delete binary + bcos::storage::Entry emptyCodeEntry; + emptyCodeEntry.importFields({std::move("")}); + contractTable->setRow(ACCOUNT_CODE, std::move(emptyCodeEntry)); + } + + EXECUTOR_LOG(TRACE) << LOG_BADGE("SUICIDE") + << "Kill contract: " << LOG_KV("contract2Suicide", table2Suicide) + << LOG_KV("blockNumber", m_blockNumber); + } +} diff --git a/bcos-executor/src/executive/BlockContext.h b/bcos-executor/src/executive/BlockContext.h new file mode 100644 index 0000000..a438041 --- /dev/null +++ b/bcos-executor/src/executive/BlockContext.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief block level context + * @file BlockContext.h + * @author: xingqiangbai + * @date: 2021-05-26 + */ + +#pragma once + +#include "../Common.h" +#include "ExecutiveFactory.h" +#include "ExecutiveFlowInterface.h" +#include "LedgerCache.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class TransactionExecutive; +class PrecompiledContract; + +class BlockContext : public std::enable_shared_from_this +{ +public: + typedef std::shared_ptr Ptr; + + BlockContext(std::shared_ptr storage, + LedgerCache::Ptr ledgerCache, crypto::Hash::Ptr _hashImpl, + bcos::protocol::BlockNumber blockNumber, h256 blockHash, uint64_t timestamp, + uint32_t blockVersion, const VMSchedule& _schedule, bool _isWasm, bool _isAuthCheck); + + BlockContext(std::shared_ptr storage, + LedgerCache::Ptr ledgerCache, crypto::Hash::Ptr _hashImpl, + protocol::BlockHeader::ConstPtr _current, const VMSchedule& _schedule, bool _isWasm, + bool _isAuthCheck, std::shared_ptr>> = nullptr); + + using getTxCriticalsHandler = std::function>( + const protocol::Transaction::ConstPtr& _tx)>; + virtual ~BlockContext(){}; + + std::shared_ptr storage() { return m_storage; } + + uint64_t txGasLimit() const { return m_ledgerCache->fetchTxGasLimit(); } + + auto getTxCriticals(const protocol::Transaction::ConstPtr& _tx) + -> std::shared_ptr>; + + crypto::Hash::Ptr hashHandler() const { return m_hashImpl; } + bool isWasm() const { return m_isWasm; } + bool isAuthCheck() const { return m_isAuthCheck; } + int64_t number() const { return m_blockNumber; } + h256 hash() const { return m_blockHash; } + h256 blockHash(int64_t _number) const { return m_ledgerCache->fetchBlockHash(_number); } + uint64_t timestamp() const { return m_timeStamp; } + uint32_t blockVersion() const { return m_blockVersion; } + void suicide(std::string_view address); + void killSuicides(); + + VMSchedule const& vmSchedule() const { return m_schedule; } + + ExecutiveFlowInterface::Ptr getExecutiveFlow(std::string codeAddress); + void setExecutiveFlow(std::string codeAddress, ExecutiveFlowInterface::Ptr executiveFlow); + + std::shared_ptr getVMFactory() { return m_vmFactory; } + void setVMFactory(std::shared_ptr factory) { m_vmFactory = factory; } + + void stop() + { + std::vector executiveFlow2Stop; + { + bcos::ReadGuard l(x_executiveFlows); + for (auto it : m_executiveFlows) + { + EXECUTOR_LOG(INFO) << "Try to stop flow: " << it.first; + executiveFlow2Stop.push_back(it.second); + } + } + + if (executiveFlow2Stop.empty()) + { + return; + } + + for (auto executiveFlow : executiveFlow2Stop) + { + executiveFlow->stop(); + } + } + void clear() + { + bcos::WriteGuard l(x_executiveFlows); + m_executiveFlows.clear(); + } + + void registerNeedSwitchEvent(std::function event) { f_onNeedSwitchEvent = event; } + + void triggerSwitch() + { + if (f_onNeedSwitchEvent) + { + f_onNeedSwitchEvent(); + } + } + + auto keyPageIgnoreTables() const { return m_keyPageIgnoreTables; } + +private: + mutable bcos::SharedMutex x_executiveFlows; + tbb::concurrent_unordered_map m_executiveFlows; + + bcos::protocol::BlockNumber m_blockNumber; + h256 m_blockHash; + uint64_t m_timeStamp; + uint32_t m_blockVersion; + + VMSchedule m_schedule; + bool m_isWasm = false; + bool m_isAuthCheck = false; + std::shared_ptr m_storage; + crypto::Hash::Ptr m_hashImpl; + std::function f_onNeedSwitchEvent; + std::shared_ptr>> m_keyPageIgnoreTables; + LedgerCache::Ptr m_ledgerCache; + std::set m_suicides; // contract address need to selfdestruct + mutable bcos::SharedMutex x_suicides; + std::shared_ptr m_vmFactory; +}; + +} // namespace executor + +} // namespace bcos diff --git a/bcos-executor/src/executive/CoroutineTransactionExecutive.cpp b/bcos-executor/src/executive/CoroutineTransactionExecutive.cpp new file mode 100644 index 0000000..2300cec --- /dev/null +++ b/bcos-executor/src/executive/CoroutineTransactionExecutive.cpp @@ -0,0 +1,138 @@ +#include "CoroutineTransactionExecutive.h" +#include + +using namespace bcos::executor; +CallParameters::UniquePtr CoroutineTransactionExecutive::start(CallParameters::UniquePtr input) +{ + m_pullMessage.emplace([this, inputPtr = input.release()](Coroutine::push_type& push) { + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) << "Create new coroutine"; + + // Take ownership from input + m_pushMessage.emplace(std::move(push)); + + auto callParameters = std::unique_ptr(inputPtr); + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null")); + } + + m_syncStorageWrapper = std::make_unique(blockContext->storage(), + std::bind(&CoroutineTransactionExecutive::externalAcquireKeyLocks, this, + std::placeholders::_1), + m_recoder); + + m_storageWrapper = m_syncStorageWrapper; // must set to base class + + + if (!callParameters->keyLocks.empty()) + { + m_syncStorageWrapper->importExistsKeyLocks(callParameters->keyLocks); + } + + m_exchangeMessage = execute(std::move(callParameters)); + // Execute is finished, erase the key locks + m_exchangeMessage->keyLocks.clear(); + + // Return the ownership to input + push = std::move(*m_pushMessage); + + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) << "Finish coroutine executing"; + }); + + return dispatcher(); +} + +CallParameters::UniquePtr CoroutineTransactionExecutive::dispatcher() +{ + try + { + for (auto it = RANGES::begin(*m_pullMessage); it != RANGES::end(*m_pullMessage); ++it) + { + if (*it) + { + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) + << "Context switch to main coroutine to call func"; + (*it)(ResumeHandler(*this)); + } + + if (m_exchangeMessage) + { + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) + << "Context switch to main coroutine to return output"; + return std::move(m_exchangeMessage); + } + } + } + catch (std::exception& e) + { + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) + << "Error while dispatch, " << boost::diagnostic_information(e); + BOOST_THROW_EXCEPTION(BCOS_ERROR_WITH_PREV(-1, "Error while dispatch", e)); + } + + COROUTINE_TRACE_LOG(TRACE, m_contextID, m_seq) << "Context switch to main coroutine, Finished!"; + return std::move(m_exchangeMessage); +} + +CallParameters::UniquePtr CoroutineTransactionExecutive::externalCall( + CallParameters::UniquePtr input) +{ + input->keyLocks = m_syncStorageWrapper->exportKeyLocks(); + + spawnAndCall([this, inputPtr = input.release()]( + ResumeHandler) { m_exchangeMessage = CallParameters::UniquePtr(inputPtr); }); + + // When resume, exchangeMessage set to output + auto output = std::move(m_exchangeMessage); + + if (output->delegateCall && output->type != CallParameters::FINISHED) + { + EXECUTIVE_LOG(DEBUG) << "Could not getCode during DMC externalCall" + << LOG_KV("codeAddress", output->codeAddress); + output->data = bytes(); + output->status = (int32_t)bcos::protocol::TransactionStatus::RevertInstruction; + output->evmStatus = EVMC_REVERT; + } + + // After coroutine switch, set the recoder + m_syncStorageWrapper->setRecoder(m_recoder); + + // Set the keyLocks + m_syncStorageWrapper->importExistsKeyLocks(output->keyLocks); + + return output; +} + +void CoroutineTransactionExecutive::externalAcquireKeyLocks(std::string acquireKeyLock) +{ + EXECUTOR_LOG(TRACE) << "Executor acquire key lock: " << acquireKeyLock; + + auto callParameters = std::make_unique(CallParameters::KEY_LOCK); + callParameters->senderAddress = m_contractAddress; + callParameters->keyLocks = m_syncStorageWrapper->exportKeyLocks(); + callParameters->acquireKeyLock = std::move(acquireKeyLock); + + spawnAndCall([this, inputPtr = callParameters.release()]( + ResumeHandler) { m_exchangeMessage = CallParameters::UniquePtr(inputPtr); }); + + // After coroutine switch, set the recoder, before the exception throw + m_syncStorageWrapper->setRecoder(m_recoder); + + auto output = std::move(m_exchangeMessage); + if (output->type == CallParameters::REVERT) + { + // Deadlock, revert + BOOST_THROW_EXCEPTION(BCOS_ERROR( + ExecuteError::DEAD_LOCK, "Dead lock detected, revert transaction: " + + boost::lexical_cast(output->type))); + } + + // Set the keyLocks + m_syncStorageWrapper->importExistsKeyLocks(output->keyLocks); +} + +void CoroutineTransactionExecutive::spawnAndCall(std::function function) +{ + (*m_pushMessage)(std::move(function)); +} diff --git a/bcos-executor/src/executive/CoroutineTransactionExecutive.h b/bcos-executor/src/executive/CoroutineTransactionExecutive.h new file mode 100644 index 0000000..25aaffb --- /dev/null +++ b/bcos-executor/src/executive/CoroutineTransactionExecutive.h @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The serial transaction execute context without coroutine + * @file CoroutineTransactionExecutive.h + * @author: jimmyshi + * @date: 2022-07-19 + */ + +#pragma once + +#include "SyncStorageWrapper.h" +#include "TransactionExecutive.h" +#include + +namespace bcos::executor +{ + +class CoroutineTransactionExecutive : public TransactionExecutive +{ +public: + using Ptr = std::shared_ptr; + + + class ResumeHandler; + + using CoroutineMessage = std::function; + using Coroutine = boost::coroutines2::coroutine; + + class ResumeHandler + { + public: + ResumeHandler(CoroutineTransactionExecutive& executive) : m_executive(executive) {} + + void operator()() + { + COROUTINE_TRACE_LOG(TRACE, m_executive.contextID(), m_executive.seq()) + << "Context switch to executive coroutine, from ResumeHandler"; + (*m_executive.m_pullMessage)(); + } + + private: + CoroutineTransactionExecutive& m_executive; + }; + + + CoroutineTransactionExecutive(std::weak_ptr blockContext, + std::string contractAddress, int64_t contextID, int64_t seq, + std::shared_ptr& gasInjector) + : TransactionExecutive( + std::move(blockContext), std::move(contractAddress), contextID, seq, gasInjector) + {} + + CallParameters::UniquePtr start(CallParameters::UniquePtr input) override; // start a new + // coroutine to + // execute + + // External call request + CallParameters::UniquePtr externalCall(CallParameters::UniquePtr input) override; // call by + // hostContext + + // External request key locks, throw exception if dead lock detected + void externalAcquireKeyLocks(std::string acquireKeyLock); + + virtual void setExchangeMessage(CallParameters::UniquePtr callParameters) + { + m_exchangeMessage = std::move(callParameters); + } + + std::string getExchangeMessageStr() + { + if (m_exchangeMessage) + { + return m_exchangeMessage->toString(); + } + else + { + return "[empty exchange message]"; + } + } + + + virtual void appendResumeKeyLocks(std::vector keyLocks) + { + std::copy( + keyLocks.begin(), keyLocks.end(), std::back_inserter(m_exchangeMessage->keyLocks)); + } + + virtual CallParameters::UniquePtr resume() + { + EXECUTOR_LOG(TRACE) << "Context switch to executive coroutine, from resume"; + (*m_pullMessage)(); + + return dispatcher(); + } + +private: + CallParameters::UniquePtr dispatcher(); + void spawnAndCall(std::function function); + + std::shared_ptr m_syncStorageWrapper; + CallParameters::UniquePtr m_exchangeMessage = nullptr; + + std::optional m_pullMessage; + std::optional m_pushMessage; +}; +} // namespace bcos::executor diff --git a/bcos-executor/src/executive/ExecutiveFactory.cpp b/bcos-executor/src/executive/ExecutiveFactory.cpp new file mode 100644 index 0000000..43b49ea --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveFactory.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory of executive + * @file ExecutiveFactory.cpp + * @author: jimmyshi + * @date: 2022-03-22 + */ + +#include "ExecutiveFactory.h" +#include "CoroutineTransactionExecutive.h" +#include "TransactionExecutive.h" +#include "bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.h" +#include "bcos-executor/src/precompiled/extension/AccountPrecompiled.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "bcos-framework/protocol/Protocol.h" + +using namespace bcos::executor; +using namespace bcos::precompiled; + + +std::shared_ptr ExecutiveFactory::build( + const std::string& _contractAddress, int64_t contextID, int64_t seq, bool useCoroutine) +{ + std::shared_ptr executive; + if (useCoroutine) + { + executive = std::make_shared( + m_blockContext, _contractAddress, contextID, seq, m_gasInjector); + } + else + { + executive = std::make_shared( + m_blockContext, _contractAddress, contextID, seq, m_gasInjector); + } + executive->setConstantPrecompiled(m_constantPrecompiled); + executive->setEVMPrecompiled(m_precompiledContract); + executive->setBuiltInPrecompiled(m_builtInPrecompiled); + + registerExtPrecompiled(executive); + return executive; +} +void ExecutiveFactory::registerExtPrecompiled(std::shared_ptr& executive) +{ + // Code below has moved to initEvmEnvironment & initWasmEnvironment in TransactionExecutor.cpp: + // m_constantPrecompiled->insert( + // {ACCOUNT_MGR_ADDRESS, std::make_shared()}); + // m_constantPrecompiled->insert({ACCOUNT_MANAGER_NAME, + // std::make_shared()}); + // m_constantPrecompiled->insert({ACCOUNT_ADDRESS, std::make_shared()}); + + // TODO: register User developed Precompiled contract + // registerUserPrecompiled(context); +} \ No newline at end of file diff --git a/bcos-executor/src/executive/ExecutiveFactory.h b/bcos-executor/src/executive/ExecutiveFactory.h new file mode 100644 index 0000000..bcc3180 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveFactory.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory of executive + * @file ExecutiveFactory.h + * @author: jimmyshi + * @date: 2022-03-22 + */ + +#pragma once + +#include "../executor/TransactionExecutor.h" +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class BlockContext; +class TransactionExecutive; + +class ExecutiveFactory +{ +public: + using Ptr = std::shared_ptr; + + ExecutiveFactory(std::weak_ptr blockContext, + std::shared_ptr>> + precompiledContract, + std::shared_ptr>> + constantPrecompiled, + std::shared_ptr> builtInPrecompiled, + std::shared_ptr gasInjector) + : m_precompiledContract(precompiledContract), + m_constantPrecompiled(constantPrecompiled), + m_builtInPrecompiled(builtInPrecompiled), + m_blockContext(blockContext), + m_gasInjector(gasInjector) + {} + virtual ~ExecutiveFactory() = default; + virtual std::shared_ptr build(const std::string& _contractAddress, + int64_t contextID, int64_t seq, bool useCoroutine = true); + +private: + void registerExtPrecompiled(std::shared_ptr& executive); + + std::shared_ptr>> + m_precompiledContract; + std::shared_ptr>> + m_constantPrecompiled; + std::shared_ptr> m_builtInPrecompiled; + std::weak_ptr m_blockContext; + std::shared_ptr m_gasInjector; +}; + +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/executive/ExecutiveFlowInterface.h b/bcos-executor/src/executive/ExecutiveFlowInterface.h new file mode 100644 index 0000000..1bb7c20 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveFlowInterface.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface definition of TransactionFlow + * @file ExecutiveFlowInterface.h + * @author: jimmyshi + * @date: 2022-03-22 + */ + +#pragma once + +#include "../CallParameters.h" +#include + +namespace bcos +{ +namespace executor +{ +class ExecutiveFlowInterface +{ +public: + using Ptr = std::shared_ptr; + + virtual void submit(CallParameters::UniquePtr txInput) = 0; + virtual void submit(std::shared_ptr> txInputs) = 0; + + virtual void asyncRun( + // onTxReturn(output) + std::function onTxReturn, + + // onFinished(success, errorMessage) + std::function onFinished) = 0; + + virtual void stop() + { + try + { + auto pool = getPoolInstance(); + if (pool) + { + pool->stop(); + } + } + catch (std::exception const& e) + { + EXECUTOR_LOG(DEBUG) << "ExecutiveFlowInterface stop: " << e.what(); + } + } + + void setThreadPool(bcos::ThreadPool::Ptr pool) + { + bcos::RecursiveGuard lock(x_pool); + m_pool = pool; + } + +protected: + template + void asyncTo(F f) + { + // f(); + getPoolInstance()->enqueue([f = std::move(f)]() { f(); }); + } + +private: + bcos::ThreadPool::Ptr getPoolInstance() + { + if (!m_pool) + { + bcos::RecursiveGuard lock(x_pool); + if (!m_pool) + { + m_pool = std::make_shared( + "ExecutiveFlow", std::thread::hardware_concurrency()); + } + } + + if (m_pool->hasStopped()) + { + throw std::runtime_error("Executive flow has stopped"); + } + + return m_pool; + } + + bcos::ThreadPool::Ptr m_pool; + bcos::RecursiveMutex x_pool; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executive/ExecutiveSerialFlow.cpp b/bcos-executor/src/executive/ExecutiveSerialFlow.cpp new file mode 100644 index 0000000..a8742f0 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveSerialFlow.cpp @@ -0,0 +1,125 @@ + +#include "ExecutiveSerialFlow.h" +#include "TransactionExecutive.h" +#include + +using namespace bcos; +using namespace bcos::executor; + +void ExecutiveSerialFlow::submit(CallParameters::UniquePtr txInput) +{ + WriteGuard lock(x_lock); + + auto contextID = txInput->contextID; + + if (m_txInputs == nullptr) + { + m_txInputs = std::make_shared(); + } + + (*m_txInputs)[contextID] = std::move(txInput); +} + +void ExecutiveSerialFlow::submit(std::shared_ptr> txInputs) +{ + WriteGuard lock(x_lock); + if (m_txInputs == nullptr) + { + m_txInputs = std::make_shared(); + } + + for (auto& txInput : *txInputs) + { + auto contextID = txInput->contextID; + (*m_txInputs)[contextID] = std::move(txInput); + } +} + +void ExecutiveSerialFlow::asyncRun(std::function onTxReturn, + std::function onFinished) +{ + try + { + auto self = std::weak_ptr(shared_from_this()); + asyncTo([self, onTxReturn = std::move(onTxReturn), onFinished = std::move(onFinished)]() { + try + { + auto flow = self.lock(); + if (flow) + { + flow->run(onTxReturn, onFinished); + } + } + catch (std::exception& e) + { + onFinished(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "ExecutiveSerialFlow asyncRun exception:" + std::string(e.what()))); + } + }); + } + catch (std::exception const& e) + { + onFinished(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "ExecutiveSerialFlow asyncTo exception:" + std::string(e.what()))); + } +} + +void ExecutiveSerialFlow::run(std::function onTxReturn, + std::function onFinished) +{ + try + { + std::shared_ptr blockTxs = nullptr; + + { + bcos::WriteGuard lock(x_lock); + blockTxs = std::move(m_txInputs); + } + + for (auto it = blockTxs->begin(); it != blockTxs->end(); it++) + { + if (!m_isRunning) + { + EXECUTOR_LOG(DEBUG) << "ExecutiveSerialFlow has stopped during running"; + onFinished(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "ExecutiveSerialFlow has stopped during running")); + return; + } + + auto contextID = it->first; + auto& txInput = it->second; + if (!txInput) + { + EXECUTIVE_LOG(WARNING) << "Ignore tx[" << contextID << "] with empty message"; + continue; + } + + EXECUTOR_LOG(DEBUG) << "Serial execute tx start" << txInput->toString(); + + auto seq = txInput->seq; + // build executive + auto executive = m_executiveFactory->build( + txInput->codeAddress, txInput->contextID, txInput->seq, false); + + + // run evm + CallParameters::UniquePtr output = executive->start(std::move(txInput)); + + // set result + output->contextID = contextID; + output->seq = seq; + + // call back + EXECUTOR_LOG(DEBUG) << "Serial execute tx finish" << output->toString(); + onTxReturn(std::move(output)); + } + + onFinished(nullptr); + } + catch (std::exception& e) + { + EXECUTIVE_LOG(ERROR) << "ExecutiveSerialFlow run error: " + << boost::diagnostic_information(e); + onFinished(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "ExecutiveSerialFlow run error", e)); + } +} diff --git a/bcos-executor/src/executive/ExecutiveSerialFlow.h b/bcos-executor/src/executive/ExecutiveSerialFlow.h new file mode 100644 index 0000000..aefc634 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveSerialFlow.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Executive flow for serial execution + * @file ExecutiveSerialFlow.h + * @author: jimmyshi + * @date: 2022-07-21 + */ + +#pragma once + +#include "ExecutiveFactory.h" +#include "ExecutiveFlowInterface.h" +#include "ExecutiveState.h" +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class ExecutiveSerialFlow : public virtual ExecutiveFlowInterface, + public std::enable_shared_from_this +{ +public: + ExecutiveSerialFlow(ExecutiveFactory::Ptr executiveFactory) + : m_executiveFactory(executiveFactory) + {} + + virtual ~ExecutiveSerialFlow() {} + + void submit(CallParameters::UniquePtr txInput) override; + void submit(std::shared_ptr> txInputs) override; + + void asyncRun( + // onTxReturn(output) + std::function onTxReturn, + + // onFinished(success, errorMessage) + std::function onFinished) override; + + void stop() override + { + EXECUTOR_LOG(DEBUG) << "Try to stop ExecutiveSerialFlow"; + if (!m_isRunning) + { + EXECUTOR_LOG(DEBUG) << "Executor has tried to stop"; + return; + } + + m_isRunning = false; + ExecutiveFlowInterface::stop(); + }; + +private: + using SerialMap = std::map>; + using SerialMapPtr = std::shared_ptr; + + void run(std::function onTxReturn, + std::function onFinished); + + template + void asyncTo(F f) + { + // call super function + ExecutiveFlowInterface::asyncTo(std::move(f)); + } + + + // -> Executive + SerialMapPtr m_txInputs; + + ExecutiveFactory::Ptr m_executiveFactory; + + mutable SharedMutex x_lock; + + bool m_isRunning = true; +}; + + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executive/ExecutiveStackFlow.cpp b/bcos-executor/src/executive/ExecutiveStackFlow.cpp new file mode 100644 index 0000000..2938716 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveStackFlow.cpp @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface definition of ExecutiveFlow + * @file ExecutiveStackFlow.cpp + * @author: jimmyshi + * @date: 2022-03-22 + */ + +#include "ExecutiveStackFlow.h" +#include "../Common.h" +#include + +using namespace bcos; +using namespace bcos::executor; + +void ExecutiveStackFlow::submit(CallParameters::UniquePtr txInput) +{ + auto contextID = txInput->contextID; + auto seq = txInput->seq; + auto type = txInput->type; + auto executiveState = m_executives[{contextID, seq}]; + if (executiveState == nullptr) + { + // add to top if not exists + executiveState = std::make_shared(m_executiveFactory, std::move(txInput)); + m_executives[{contextID, seq}] = executiveState; + } + else + { + // update resume params + executiveState->setResumeParam(std::move(txInput)); + } + + if (seq == 0 && type == CallParameters::MESSAGE) + { + // the tx has not been executed ever (created by a user) + m_originFlow.push(executiveState); + } + else + { + // the tx is not first run: + // 1. created by sending from a contract + // 2. is a revert message, seq = 0 but type = REVERT + m_pausedPool.erase({contextID, seq}); + m_waitingFlow.insert({contextID, seq}); + }; +} + +void ExecutiveStackFlow::submit(std::shared_ptr> txInputs) +{ + WriteGuard lock(x_lock); + + // from back to front, push in stack, so stack's tx can be executed from top + for (std::size_t i = 0; i < txInputs->size(); i++) + { + submit(std::move((*txInputs)[i])); + } +} + +void ExecutiveStackFlow::asyncRun(std::function onTxReturn, + std::function onFinished) +{ + try + { + auto self = std::weak_ptr(shared_from_this()); + asyncTo([self, onTxReturn = std::move(onTxReturn), onFinished = std::move(onFinished)]() { + try + { + auto flow = self.lock(); + if (flow) + { + flow->run(onTxReturn, onFinished); + } + } + catch (std::exception& e) + { + onFinished(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "ExecutiveStackFlow asyncRun exception:" + std::string(e.what()))); + } + }); + } + catch (std::exception const& e) + { + onFinished(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "ExecutiveStackFlow asyncTo exception:" + std::string(e.what()))); + } +} + +void ExecutiveStackFlow::run(std::function onTxReturn, + std::function onFinished) +{ + // origin flow: all messages received in first DMC iteration. if paused, move to paused pool + // paused poll: all paused messages during DMC iteration. if resumed, move to waiting pool + // waiting flow: include all messages received during DMC iteration. + + // These three pool above run as a stack manner. + // We must run waiting flow before origin flow and push message in waiting flow during DMC + // iteration. + + try + { + bcos::WriteGuard lock(x_lock); + + // must run all messages in waiting pool before origin pool + if (!m_waitingFlow.empty()) + { + runWaitingFlow(onTxReturn); + } + + if (m_pausedPool.empty()) + { + // origin flow can only be run if there is no paused message + runOriginFlow(onTxReturn); + } + + onFinished(nullptr); + } + catch (std::exception& e) + { + EXECUTIVE_LOG(ERROR) << "ExecutiveStackFlow run error: " + << boost::diagnostic_information(e); + onFinished(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "ExecutiveStackFlow run error", e)); + } +} + + +void ExecutiveStackFlow::runWaitingFlow(std::function onTxReturn) +{ + std::vector lastKeyLocks; + auto callback = [&lastKeyLocks, onTxReturn = std::move(onTxReturn)]( + CallParameters::UniquePtr output) { + if (output->type == CallParameters::MESSAGE || output->type == CallParameters::KEY_LOCK) + { + std::copy( + output->keyLocks.begin(), output->keyLocks.end(), std::back_inserter(lastKeyLocks)); + } + + + onTxReturn(std::move(output)); + }; + + for (auto contextIDAndSeq : m_waitingFlow) + { + if (!m_isRunning) + { + EXECUTOR_LOG(DEBUG) << "ExecutiveStackFlow has stopped during running waiting flow"; + return; + } + + auto executiveState = m_executives[contextIDAndSeq]; + executiveState->appendKeyLocks(lastKeyLocks); + + runOne(executiveState, callback); + } + + m_waitingFlow.clear(); +} + +void ExecutiveStackFlow::runOriginFlow(std::function onTxReturn) +{ + while (!m_originFlow.empty()) + { + if (!m_isRunning) + { + EXECUTOR_LOG(DEBUG) << "ExecutiveStackFlow has stopped during running origin flow"; + return; + } + + auto executiveState = m_originFlow.front(); + m_originFlow.pop(); + runOne(executiveState, onTxReturn); + + if (executiveState->getStatus() == ExecutiveState::PAUSED) + { + break; // break at once paused + } + } +} + +void ExecutiveStackFlow::runOne( + ExecutiveState::Ptr executiveState, std::function onTxReturn) +{ + CallParameters::UniquePtr output; + + output = executiveState->go(); + + switch (executiveState->getStatus()) + { + case ExecutiveState::NEED_RUN: + case ExecutiveState::NEED_RESUME: + { + // assume never goes here + + assert(false); + EXECUTIVE_LOG(FATAL) << "Invalid executiveState type"; + break; + } + case ExecutiveState::PAUSED: + { + m_pausedPool.insert({executiveState->getContextID(), executiveState->getSeq()}); + onTxReturn(std::move(output)); + break; + } + case ExecutiveState::FINISHED: + { + onTxReturn(std::move(output)); + break; + } + } +} \ No newline at end of file diff --git a/bcos-executor/src/executive/ExecutiveStackFlow.h b/bcos-executor/src/executive/ExecutiveStackFlow.h new file mode 100644 index 0000000..7869c56 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveStackFlow.h @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Executive flow for DMC execution + * @file ExecutiveStackFlow.h + * @author: jimmyshi + * @date: 2022-03-22 + */ + +#pragma once + +#include "ExecutiveFactory.h" +#include "ExecutiveFlowInterface.h" +#include "ExecutiveState.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class ExecutiveStackFlow : public virtual ExecutiveFlowInterface, + public std::enable_shared_from_this +{ +public: + ExecutiveStackFlow(ExecutiveFactory::Ptr executiveFactory) + : m_executiveFactory(executiveFactory) + {} + + virtual ~ExecutiveStackFlow() {} + + void submit(CallParameters::UniquePtr txInput) override; + void submit(std::shared_ptr> txInputs) override; + + void asyncRun( + // onTxReturn(output) + std::function onTxReturn, + + // onFinished(success, errorMessage) + std::function onFinished) override; + + struct ContextIDSeqCmp + { + bool operator()( + const std::tuple& a, const std::tuple& b) const + { + // order: ContextID increasing and Seq decreasing + return std::get<0>(a) == std::get<0>(b) ? std::get<1>(a) < std::get<1>(b) : + std::get<0>(a) > std::get<0>(b); + } + }; + + void stop() override + { + EXECUTOR_LOG(DEBUG) << "Try to stop ExecutiveStackFlow"; + if (!m_isRunning) + { + EXECUTOR_LOG(DEBUG) << "Executor has tried to stop"; + return; + } + + m_isRunning = false; + ExecutiveFlowInterface::stop(); + }; + +private: + void run(std::function onTxReturn, + std::function onFinished); + + void runWaitingFlow(std::function onTxReturn); + + void runOriginFlow(std::function onTxReturn); + + void runOne(ExecutiveState::Ptr executiveState, + std::function onTxReturn); + + template + void asyncTo(F f) + { + // call super function + ExecutiveFlowInterface::asyncTo(std::move(f)); + } + + std::queue m_originFlow; + + // -> Executive + std::set> m_pausedPool; + + // ContextID -> Executive + std::set, ContextIDSeqCmp> m_waitingFlow; + + // -> Executive + std::map, ExecutiveState::Ptr> m_executives; + + ExecutiveFactory::Ptr m_executiveFactory; + + mutable SharedMutex x_lock; + + bool m_isRunning = true; +}; + + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executive/ExecutiveState.cpp b/bcos-executor/src/executive/ExecutiveState.cpp new file mode 100644 index 0000000..e30f2a4 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveState.cpp @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the state of executive for TransactionFlow run + * @file ExecutiveState.cpp + * @author: jimmyshi + * @date: 2022-03-23 + */ + +#include "ExecutiveState.h" + +using namespace bcos; +using namespace bcos::executor; + +CallParameters::UniquePtr ExecutiveState::go() +{ + // init + if (!m_executive) + { + m_executive = + std::dynamic_pointer_cast(m_executiveFactory->build( + m_input->codeAddress, m_input->contextID, m_input->seq, true)); + } + + // run + CallParameters::UniquePtr output; + switch (m_status) + { + case NEED_RUN: + EXECUTOR_LOG(DEBUG) << "DMC Execute tx start" << m_input->toString(); + output = m_executive->start(std::move(m_input)); + break; + case PAUSED: + // just ignore, need to set resume params + EXECUTOR_LOG(FATAL) << "Invalid type"; + assert(false); + break; + case NEED_RESUME: + EXECUTOR_LOG(DEBUG) << "DMC Execute tx resume" << m_executive->getExchangeMessageStr(); + output = m_executive->resume(); + break; + case FINISHED: + // do nothing + break; + } + + // update status + EXECUTOR_LOG(DEBUG) << "DMC Execute tx done" << output->toString(); + switch (output->type) + { + case CallParameters::MESSAGE: + case CallParameters::KEY_LOCK: + m_status = PAUSED; + break; + case CallParameters::FINISHED: + case CallParameters::REVERT: + m_status = FINISHED; + break; + } + + // TODO: debug in executive + // Bug: Must force set contextID here to fix bug. + // But why output->context & output->seq here always be 0 ????? + output->contextID = m_contextID; + output->seq = m_seq; + return output; +} + +void ExecutiveState::setResumeParam(CallParameters::UniquePtr pullParam) +{ + m_status = NEED_RESUME; + m_executive->setExchangeMessage(std::move(pullParam)); +} + + +void ExecutiveState::appendKeyLocks(std::vector keyLocks) +{ + switch (getStatus()) + { + case NEED_RUN: + std::copy(keyLocks.begin(), keyLocks.end(), std::back_inserter(m_input->keyLocks)); + break; + case PAUSED: + case NEED_RESUME: + m_executive->appendResumeKeyLocks(std::move(keyLocks)); + break; + case FINISHED: + break; + } +} \ No newline at end of file diff --git a/bcos-executor/src/executive/ExecutiveState.h b/bcos-executor/src/executive/ExecutiveState.h new file mode 100644 index 0000000..fc7b0a2 --- /dev/null +++ b/bcos-executor/src/executive/ExecutiveState.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the state of executive for TransactionFlow run + * @file ExecutiveState.h + * @author: jimmyshi + * @date: 2022-03-23 + */ + +#pragma once + +#include "../CallParameters.h" +#include "CoroutineTransactionExecutive.h" +#include "ExecutiveFactory.h" + +namespace bcos +{ +namespace executor +{ +class ExecutiveState +{ +public: + using Ptr = std::shared_ptr; + + ExecutiveState(ExecutiveFactory::Ptr executiveFactory, CallParameters::UniquePtr input) + : m_isStaticCall(input->staticCall), + m_contextID(input->contextID), + m_seq(input->seq), + m_input(std::move(input)), + m_executiveFactory(executiveFactory){}; + + enum Status + { + NEED_RUN = 0, + PAUSED = 1, + NEED_RESUME = 2, + FINISHED = 3, + }; + + Status getStatus() { return m_status; } + CallParameters::UniquePtr go(); + void setResumeParam(CallParameters::UniquePtr pullParam); + int64_t getContextID() const { return m_contextID; } + int64_t getSeq() const { return m_seq; } + + void appendKeyLocks(std::vector keyLocks); + +private: + bool m_isStaticCall; + int64_t m_contextID; + int64_t m_seq; + CallParameters::UniquePtr m_input; + std::shared_ptr m_executive; + Status m_status = NEED_RUN; + ExecutiveFactory::Ptr m_executiveFactory; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executive/LedgerCache.h b/bcos-executor/src/executive/LedgerCache.h new file mode 100644 index 0000000..9e3a67b --- /dev/null +++ b/bcos-executor/src/executive/LedgerCache.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Cache uncommitted but executed block info + * @file LedgerCache.h + * @author: jimmyshi + * @date: 2022-11-07 + */ + +#pragma once + +#include "../Common.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include +#include + +namespace bcos::executor +{ +class LedgerCache : public bcos::tool::LedgerConfigFetcher +{ +public: + using Ptr = std::shared_ptr; + LedgerCache(bcos::ledger::LedgerInterface::Ptr ledger) : bcos::tool::LedgerConfigFetcher(ledger) + {} + virtual ~LedgerCache() = default; + + void setBlockNumber2Hash(int64_t blockNumber, h256 blockHash) + { + bcos::WriteGuard l(x_blockNumber2Hash); + m_blockNumber2Hash[blockNumber] = blockHash; + } + + void clearCacheByNumber(int64_t blockNumber) + { + // remaining cache >= blockNumber + bcos::WriteGuard l(x_blockNumber2Hash); + std::erase_if(m_blockNumber2Hash, + [blockNumber](const auto& item) { return item.first < blockNumber; }); + } + + bcos::crypto::HashType fetchBlockHash(bcos::protocol::BlockNumber _blockNumber) override + { + EXECUTOR_LOG(TRACE) << LOG_BADGE("LedgerCache") << "fetchBlockHash start" + << LOG_KV("blockNumber", _blockNumber); + { + bcos::ReadGuard l(x_blockNumber2Hash); + if (m_blockNumber2Hash.contains(_blockNumber)) + { + auto& hash = m_blockNumber2Hash.at(_blockNumber); + EXECUTOR_LOG(TRACE) + << LOG_BADGE("LedgerCache") << "fetchBlockHash return cache" + << LOG_KV("blockNumber", _blockNumber) << LOG_KV("hash", hash.abridged()); + return hash; + } + } + + auto hash = bcos::tool::LedgerConfigFetcher::fetchBlockHash(_blockNumber); + EXECUTOR_LOG(TRACE) << LOG_BADGE("LedgerCache") + << "fetchBlockHash return by fetching from ledger" + << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("hash", hash.abridged()); + return hash; + } + + uint64_t fetchTxGasLimit() + { + EXECUTOR_LOG(TRACE) << LOG_BADGE("LedgerCache") << "fetchTxGasLimit start"; + std::promise txGasLimitFuture; + + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_TX_GAS_LIMIT, + [&txGasLimitFuture]( + Error::Ptr error, std::string config, protocol::BlockNumber _number) mutable { + if (error) + { + EXECUTOR_LOG(ERROR) + << LOG_BADGE("LedgerCache") + << "fetchTxGasLimit error: " << LOG_KV("code", error->errorCode()) + << LOG_KV("message", error->errorMessage()); + txGasLimitFuture.set_value(0); + } + else + { + txGasLimitFuture.set_value(boost::lexical_cast(config)); + EXECUTOR_LOG(TRACE) + << LOG_BADGE("LedgerCache") << "fetchTxGasLimit finish" + << LOG_KV("txGasLimit", config) << LOG_KV("blockNumber", _number); + } + }); + auto txGasLimit = txGasLimitFuture.get_future().get(); + return txGasLimit; + } + +private: + std::map> m_blockNumber2Hash; + mutable bcos::SharedMutex x_blockNumber2Hash; +}; +} // namespace bcos::executor diff --git a/bcos-executor/src/executive/SyncStorageWrapper.h b/bcos-executor/src/executive/SyncStorageWrapper.h new file mode 100644 index 0000000..5a6e930 --- /dev/null +++ b/bcos-executor/src/executive/SyncStorageWrapper.h @@ -0,0 +1,117 @@ +#pragma once + +#include "../Common.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StorageWrapper.h" +#include +#include +#include +#include +#include + +namespace bcos::executor +{ +using KeyLockResponse = std::tuple; +using AcquireKeyLockResponse = std::tuple>; + +class SyncStorageWrapper : public storage::StorageWrapper +{ +public: + using Ptr = std::shared_ptr; + + SyncStorageWrapper(storage::StateStorageInterface::Ptr storage, + std::function externalAcquireKeyLocks, + bcos::storage::Recoder::Ptr recoder) + : StorageWrapper(storage, recoder), + m_externalAcquireKeyLocks(std::move(externalAcquireKeyLocks)) + {} + + SyncStorageWrapper(const SyncStorageWrapper&) = delete; + SyncStorageWrapper(SyncStorageWrapper&&) = delete; + SyncStorageWrapper& operator=(const SyncStorageWrapper&) = delete; + SyncStorageWrapper& operator=(SyncStorageWrapper&&) = delete; + + + std::optional getRow( + const std::string_view& table, const std::string_view& _key) override + { + acquireKeyLock(_key); + + return StorageWrapper::getRow(table, _key); + } + + std::vector> getRows(const std::string_view& table, + RANGES::any_view + keys) override + { + for (auto it : keys) + { + acquireKeyLock(it); + } + + return StorageWrapper::getRows(table, keys); + } + + void setRow( + const std::string_view& table, const std::string_view& key, storage::Entry entry) override + { + acquireKeyLock(key); + + StorageWrapper::setRow(table, key, std::move(entry)); + } + + void importExistsKeyLocks(gsl::span keyLocks) + { + m_existsKeyLocks.clear(); + + for (auto& it : keyLocks) + { + m_existsKeyLocks.emplace(std::move(it)); + } + } + + std::vector exportKeyLocks() + { + std::vector keyLocks; + keyLocks.reserve(m_myKeyLocks.size()); + for (auto& it : m_myKeyLocks) + { + keyLocks.emplace_back(std::move(it)); + } + + m_myKeyLocks.clear(); + + return keyLocks; + } + +private: + void acquireKeyLock(const std::string_view& key) + { + /* + if (!key.compare(ACCOUNT_CODE)) + { + // ignore static system key + return; + } +*/ + if (m_existsKeyLocks.find(key) != m_existsKeyLocks.end()) + { + m_externalAcquireKeyLocks(std::string(key)); + } + + auto it = m_myKeyLocks.lower_bound(key); + if (it == m_myKeyLocks.end() || *it != key) + { + m_myKeyLocks.emplace_hint(it, key); + } + } + + std::function m_externalAcquireKeyLocks; + + std::set> m_existsKeyLocks; + std::set> m_myKeyLocks; +}; +} // namespace bcos::executor \ No newline at end of file diff --git a/bcos-executor/src/executive/TransactionExecutive.cpp b/bcos-executor/src/executive/TransactionExecutive.cpp new file mode 100644 index 0000000..5998870 --- /dev/null +++ b/bcos-executor/src/executive/TransactionExecutive.cpp @@ -0,0 +1,1501 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief executive of vm + * @file TransactionExecutive.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#include "TransactionExecutive.h" +#include "../precompiled/BFSPrecompiled.h" +#include "../precompiled/extension/AccountPrecompiled.h" +#include "../precompiled/extension/AuthManagerPrecompiled.h" +#include "../precompiled/extension/ContractAuthMgrPrecompiled.h" +#include "../vm/DelegateHostContext.h" +#include "../vm/EVMHostInterface.h" +#include "../vm/HostContext.h" +#include "../vm/Precompiled.h" +#include "../vm/VMFactory.h" +#include "../vm/VMInstance.h" + +#ifdef WITH_WASM +#include "../vm/gas_meter/GasInjector.h" +#endif + +#include "BlockContext.h" +#include "ExecutiveFactory.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-crypto/bcos-crypto/ChecksumAddress.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/Exceptions.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-protocol/TransactionStatus.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::protocol; +using namespace bcos::codec; +using namespace bcos::precompiled; + +/// Error info for VMInstance status code. +using errinfo_evmcStatusCode = boost::error_info; + +CallParameters::UniquePtr TransactionExecutive::start(CallParameters::UniquePtr input) +{ + EXECUTIVE_LOG(TRACE) << "Execute start\t" << input->toFullString(); + + + auto& callParameters = input; + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null")); + } + + m_storageWrapper = std::make_shared(blockContext->storage(), m_recoder); + + auto message = execute(std::move(callParameters)); + + EXECUTIVE_LOG(TRACE) << "Execute finish\t" << message->toFullString(); + + return message; +} + +CallParameters::UniquePtr TransactionExecutive::externalCall(CallParameters::UniquePtr input) +{ + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + EXECUTIVE_LOG(TRACE) << "externalCall start\t" << input->toFullString(); + } + auto newSeq = seq() + 1; + bool isCreate = input->create; + input->seq = newSeq; + input->contextID = m_contextID; + + std::string newAddress; + // if internalCreate, sometimes it will use given address, if receiveAddress is empty then give + // a new address + if (isCreate && !m_blockContext.lock()->isWasm() && std::empty(input->receiveAddress)) + { + if (input->createSalt) + { + // TODO: Add sender in this process(consider compat with ethereum) + newAddress = bcos::newEVMAddress(m_hashImpl, input->senderAddress, + bytesConstRef(input->data.data(), input->data.size()), *(input->createSalt)); + } + else + { + // TODO: Add sender in this process(consider compat with ethereum) + newAddress = bcos::newEVMAddress( + m_hashImpl, m_blockContext.lock()->number(), m_contextID, newSeq); + } + + input->receiveAddress = newAddress; + input->codeAddress = newAddress; + } + + if (input->delegateCall) + { + assert(!m_blockContext.lock()->isWasm()); + auto tableName = getContractTableName(input->codeAddress, false); + + // get codeHash in contract table + auto codeHashEntry = storage().getRow(tableName, ACCOUNT_CODE_HASH); + if (!codeHashEntry || codeHashEntry->get().empty()) + { + auto& output = input; + EXECUTIVE_LOG(DEBUG) << "Could not getCodeHash during externalCall" + << LOG_KV("codeAddress", input->codeAddress); + output->data = bytes(); + output->status = (int32_t)TransactionStatus::RevertInstruction; + output->evmStatus = EVMC_REVERT; + return std::move(output); + } + + auto codeHash = codeHashEntry->getField(0); + + // get code in code binary table + auto entry = storage().getRow(bcos::ledger::SYS_CODE_BINARY, codeHash); + if (!entry || entry->get().empty()) + { + auto& output = input; + EXECUTIVE_LOG(DEBUG) << "Could not getCode during externalCall" + << LOG_KV("codeAddress", input->codeAddress); + output->data = bytes(); + output->status = (int32_t)TransactionStatus::RevertInstruction; + output->evmStatus = EVMC_REVERT; + return std::move(output); + } + input->delegateCallCode = toBytes(entry->get()); + } + + if (input->data == bcos::protocol::GET_CODE_INPUT_BYTES) + { + EXECUTIVE_LOG(DEBUG) << "Get external code request" + << LOG_KV("codeAddress", input->codeAddress); + + auto tableName = getContractTableName(input->codeAddress, false); + + auto& output = input; + // get codeHash in contract table + auto codeHashEntry = storage().getRow(tableName, ACCOUNT_CODE_HASH); + if (!codeHashEntry || codeHashEntry->get().empty()) + { + EXECUTIVE_LOG(DEBUG) << "Could not get external code hash from local storage" + << LOG_KV("codeAddress", input->codeAddress); + output->data = bytes(); + return std::move(output); + } + + auto codeHash = codeHashEntry->getField(0); + + // get code in code binary table + auto entry = storage().getRow(bcos::ledger::SYS_CODE_BINARY, codeHash); + if (!entry || entry->get().empty()) + { + EXECUTIVE_LOG(DEBUG) << "Could not get external code from local storage" + << LOG_KV("codeAddress", input->codeAddress); + output->data = bytes(); + return std::move(output); + } + output->data = toBytes(entry->get()); + return std::move(output); + } + + auto executiveFactory = std::make_shared(m_blockContext, m_evmPrecompiled, + m_constantPrecompiled, m_builtInPrecompiled, m_gasInjector); + auto executive = executiveFactory->build(input->codeAddress, m_contextID, newSeq, false); + + auto output = executive->start(std::move(input)); + + // update seq + m_seq = executive->seq(); + + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + EXECUTIVE_LOG(TRACE) << "externalCall finish\t" << output->toFullString(); + } + return output; +} + + +CallParameters::UniquePtr TransactionExecutive::execute(CallParameters::UniquePtr callParameters) +{ + if (c_fileLogLevel <= LogLevel::TRACE) + { + EXECUTIVE_LOG(TRACE) << LOG_BADGE("Execute") << LOG_DESC("Execute begin") + << LOG_KV("callParameters", callParameters->toFullString()) + << LOG_KV("blockNumber", blockContext().lock()->number()); + } + m_storageWrapper->setRecoder(m_recoder); + + std::unique_ptr hostContext; + CallParameters::UniquePtr callResults; + if (callParameters->create) + { + std::tie(hostContext, callResults) = create(std::move(callParameters)); + } + else + { + std::tie(hostContext, callResults) = call(std::move(callParameters)); + } + + if (hostContext) + { + callResults = go(*hostContext, std::move(callResults)); + + // TODO: check if needed + hostContext->sub().refunds += + hostContext->vmSchedule().suicideRefundGas * hostContext->sub().suicides.size(); + } + if (c_fileLogLevel <= LogLevel::TRACE) + { + EXECUTIVE_LOG(TRACE) << LOG_BADGE("Execute") << LOG_DESC("Execute finished") + << LOG_KV("callResults", callResults->toFullString()) + << LOG_KV("blockNumber", blockContext().lock()->number()); + } + return callResults; +} + +std::tuple, CallParameters::UniquePtr> TransactionExecutive::call( + CallParameters::UniquePtr callParameters) +{ + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null")); + } + + EXECUTIVE_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_DESC("executive call") + << LOG_KV("contract", callParameters->receiveAddress) + << LOG_KV("sender", callParameters->senderAddress) + << LOG_KV("internalCall", callParameters->internalCall) + << LOG_KV("delegateCall", callParameters->delegateCall) + << LOG_KV("codeAddress", callParameters->codeAddress); + + auto tableName = getContractTableName(callParameters->receiveAddress, blockContext->isWasm()); + // delegateCall is just about to replace code, no need to check permission beforehand + if (callParameters->delegateCall) + { + auto hostContext = make_unique( + std::move(callParameters), shared_from_this(), std::move(tableName)); + return {std::move(hostContext), nullptr}; + } + // check permission first + if (blockContext->isAuthCheck() && !checkAuth(callParameters)) + { + revert(); + return {nullptr, std::move(callParameters)}; + } + if (isPrecompiled(callParameters->receiveAddress) || callParameters->internalCall) + { + return {nullptr, callPrecompiled(std::move(callParameters))}; + } + + auto hostContext = make_unique( + std::move(callParameters), shared_from_this(), std::move(tableName)); + return {std::move(hostContext), nullptr}; +} + +CallParameters::UniquePtr TransactionExecutive::callPrecompiled( + CallParameters::UniquePtr callParameters) +{ + auto precompiledCallParams = std::make_shared(callParameters); + bytes data{}; + if (callParameters->internalCall) + { + std::string contract; + auto blockContext = m_blockContext.lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(ref(callParameters->data), contract, data); + precompiledCallParams->m_precompiledAddress = contract; + precompiledCallParams->m_input = ref(data); + } + try + { + execPrecompiled(precompiledCallParams); + + if (precompiledCallParams->m_gasLeft < 0) + { + revert(); + EXECUTIVE_LOG(INFO) << "Revert transaction: call precompiled out of gas."; + callParameters->type = CallParameters::REVERT; + callParameters->status = (int32_t)TransactionStatus::OutOfGas; + if (versionCompareTo( + blockContext().lock()->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Call precompiled out of gas.", *callParameters); + } + return callParameters; + } + precompiledCallParams->takeDataToCallParameter(callParameters); + } + catch (protocol::PrecompiledError const& e) + { + EXECUTIVE_LOG(INFO) << "Revert transaction: " + << "PrecompiledError" + << LOG_KV("address", precompiledCallParams->m_precompiledAddress) + << LOG_KV("error", e.what()); + // Note: considering the scenario where the contract calls the contract, the error message + // still needs to be written to the output + writeErrInfoToOutput(e.what(), *callParameters); + revert(); + callParameters->type = CallParameters::REVERT; + callParameters->status = (int32_t)TransactionStatus::PrecompiledError; + callParameters->message = e.what(); + } + catch (Exception const& e) + { + EXECUTIVE_LOG(WARNING) << "Exception" + << LOG_KV("address", precompiledCallParams->m_precompiledAddress) + << LOG_KV("error", e.what()); + writeErrInfoToOutput(e.what(), *callParameters); + revert(); + callParameters->type = CallParameters::REVERT; + callParameters->status = (int32_t)executor::toTransactionStatus(e); + callParameters->message = e.what(); + } + catch (std::exception const& e) + { + // Note: Since the information of std::exception may be affected by the version of the c++ + // library, in order to ensure compatibility, the information is not written to output + writeErrInfoToOutput("InternalPrecompiledError", *callParameters); + EXECUTIVE_LOG(WARNING) << LOG_DESC("callPrecompiled") + << LOG_KV("error", boost::diagnostic_information(e)); + revert(); + callParameters->type = CallParameters::REVERT; + callParameters->status = (int32_t)TransactionStatus::Unknown; + callParameters->message = e.what(); + } + return callParameters; +} + +std::tuple, CallParameters::UniquePtr> TransactionExecutive::create( + CallParameters::UniquePtr callParameters) +{ + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null")); + } + auto tableName = getContractTableName( + callParameters->codeAddress, blockContext->isWasm(), blockContext->blockVersion()); + auto extraData = std::make_unique(CallParameters::MESSAGE); + extraData->abi = std::move(callParameters->abi); + + EXECUTIVE_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_DESC("executive deploy contract") << LOG_KV("tableName", tableName) + << LOG_KV("abi len", extraData->abi.size()) + << LOG_KV("sender", callParameters->senderAddress) + << LOG_KV("internalCreate", callParameters->internalCreate); + + // check permission first + if (blockContext->isAuthCheck() && !checkAuth(callParameters)) + { + revert(); + return {nullptr, std::move(callParameters)}; + } + if (callParameters->internalCreate) + { + callParameters->abi = std::move(extraData->abi); + auto sender = callParameters->senderAddress; + auto response = internalCreate(std::move(callParameters)); + if (blockContext->isAuthCheck() && + blockContext->blockVersion() >= static_cast(BlockVersion::V3_1_VERSION)) + { + // Create auth table + creatAuthTable(tableName, response->origin, std::move(sender)); + } + return {nullptr, std::move(response)}; + } + // Create table + try + { + m_storageWrapper->createTable(tableName, STORAGE_VALUE); + EXECUTIVE_LOG(INFO) << "create contract table " << LOG_KV("table", tableName) + << LOG_KV("sender", callParameters->senderAddress); + if (blockContext->isAuthCheck()) + { + // Create auth table + creatAuthTable(tableName, callParameters->origin, callParameters->senderAddress); + } + } + catch (exception const& e) + { + // this exception will be frequent to happened in liquid + revert(); + callParameters->status = (int32_t)TransactionStatus::ContractAddressAlreadyUsed; + callParameters->type = CallParameters::REVERT; + callParameters->message = e.what(); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Contract address already used.", *callParameters); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << LOG_DESC("createTable failed") + << callParameters->message << LOG_KV("tableName", tableName); + return {nullptr, std::move(callParameters)}; + } + +#ifdef WITH_WASM + if (blockContext->isWasm()) + { + // Liquid + std::tuple input; + auto codec = CodecWrapper(blockContext->hashHandler(), true); + codec.decode(ref(callParameters->data), input); + auto& [code, params] = input; + + if (!hasWasmPreamble(code)) + { + revert(); + + auto callResults = std::move(callParameters); + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::WASMValidationFailure; + callResults->message = "the code is not wasm bytecode"; + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callResults->message; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "WASM bytecode invalid or use unsupported opcode.", *callResults); + } + return {nullptr, std::move(callResults)}; + } + + auto result = m_gasInjector->InjectMeter(code); + if (result.status == wasm::GasInjector::Status::Success) + { + result.byteCode->swap(code); + } + else + { + revert(); + + auto callResults = std::move(callParameters); + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::WASMValidationFailure; + callResults->message = "wasm bytecode invalid or use unsupported opcode"; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "WASM bytecode invalid or use unsupported opcode.", *callResults); + } + // use wrong wasm code + EXECUTIVE_LOG(WARNING) << "Revert transaction: " << callResults->message; + return {nullptr, std::move(callResults)}; + } + + callParameters->data.swap(code); + + extraData->data = std::move(params); + } +#endif + + auto hostContext = + std::make_unique(std::move(callParameters), shared_from_this(), tableName); + return {std::move(hostContext), std::move(extraData)}; +} + +CallParameters::UniquePtr TransactionExecutive::internalCreate( + CallParameters::UniquePtr callParameters) +{ + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null")); + } + auto newAddress = string(callParameters->codeAddress); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + std::string tableName; + std::string codeString; + codec.decode(ref(callParameters->data), tableName, codeString); + EXECUTIVE_LOG(DEBUG) << LOG_DESC("internalCreate") << LOG_KV("newAddress", newAddress) + << LOG_KV("codeString", codeString); + + if (blockContext->isWasm()) + { + /// BFS create contract table and write metadata in parent table + if (!buildBfsPath(newAddress, callParameters->origin, newAddress, FS_TYPE_CONTRACT, + callParameters->gas)) + { + revert(); + auto buildCallResults = std::move(callParameters); + buildCallResults->type = CallParameters::REVERT; + buildCallResults->status = (int32_t)TransactionStatus::RevertInstruction; + buildCallResults->message = "Error occurs in build BFS dir"; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Error occurs in building BFS dir.", *buildCallResults); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << buildCallResults->message + << LOG_KV("newAddress", newAddress); + return buildCallResults; + } + /// create contract table + m_storageWrapper->createTable(newAddress, STORAGE_VALUE); + /// set code field + Entry entry = {}; + entry.importFields({codeString}); + m_storageWrapper->setRow(newAddress, ACCOUNT_CODE, std::move(entry)); + } + else + { + /// BFS create link table and write metadata in parent table + if (!buildBfsPath( + tableName, callParameters->origin, newAddress, FS_TYPE_LINK, callParameters->gas)) + { + revert(); + auto buildCallResults = std::move(callParameters); + buildCallResults->type = CallParameters::REVERT; + buildCallResults->status = (int32_t)TransactionStatus::RevertInstruction; + buildCallResults->message = "Error occurs in build BFS dir"; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Error occurs in building BFS dir.", *buildCallResults); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << buildCallResults->message + << LOG_KV("newAddress", newAddress); + return buildCallResults; + } + + /// create link table + auto linkTable = m_storageWrapper->createTable(tableName, STORAGE_VALUE); + + /// create code index contract + auto codeTable = getContractTableName(newAddress, false); + m_storageWrapper->createTable(codeTable, STORAGE_VALUE); + + /// set code field + Entry entry = {}; + entry.importFields({codeString}); + m_storageWrapper->setRow(codeTable, ACCOUNT_CODE, std::move(entry)); + if (!callParameters->abi.empty()) + { + Entry abiEntry = {}; + abiEntry.importFields({std::move(callParameters->abi)}); + m_storageWrapper->setRow(codeTable, ACCOUNT_ABI, std::move(abiEntry)); + } + + /// set link data + tool::BfsFileFactory::buildLink(linkTable.value(), newAddress, ""); + } + callParameters->type = CallParameters::FINISHED; + callParameters->status = (int32_t)TransactionStatus::None; + callParameters->internalCreate = false; + callParameters->create = false; + callParameters->data.clear(); + return callParameters; +} + +CallParameters::UniquePtr TransactionExecutive::go( + HostContext& hostContext, CallParameters::UniquePtr extraData) +{ + try + { + auto getEVMCMessage = [&extraData](const BlockContext& blockContext, + const HostContext& hostContext) -> evmc_message { + // the block number will be larger than 0, + // can be controlled by the programmers + if (!blockContext.isAuthCheck()) + { + assert(blockContext.number() > 0); + } + + evmc_call_kind kind = hostContext.isCreate() ? EVMC_CREATE : EVMC_CALL; + uint32_t flags = hostContext.staticCall() ? EVMC_STATIC : 0; + // this is ensured by solidity compiler + assert(flags != EVMC_STATIC || kind == EVMC_CALL); // STATIC implies a CALL. + auto leftGas = hostContext.gas(); + + evmc_message evmcMessage; + evmcMessage.kind = kind; + evmcMessage.flags = flags; + evmcMessage.depth = 0; // depth own by scheduler + evmcMessage.gas = leftGas; + evmcMessage.value = toEvmC(h256(0)); + evmcMessage.create2_salt = toEvmC(0x0_cppui256); + + if (blockContext.isWasm()) + { + evmcMessage.destination_ptr = (uint8_t*)hostContext.myAddress().data(); + evmcMessage.destination_len = hostContext.codeAddress().size(); + + evmcMessage.sender_ptr = (uint8_t*)hostContext.caller().data(); + evmcMessage.sender_len = hostContext.caller().size(); + + if (hostContext.isCreate()) + { + assert(extraData != nullptr); + evmcMessage.input_data = extraData->data.data(); + evmcMessage.input_size = extraData->data.size(); + } + else + { + evmcMessage.input_data = hostContext.data().data(); + evmcMessage.input_size = hostContext.data().size(); + } + } + else + { + evmcMessage.input_data = hostContext.data().data(); + evmcMessage.input_size = hostContext.data().size(); + + if (hostContext.myAddress().size() < sizeof(evmcMessage.recipient) * 2) + { + std::uninitialized_fill_n( + evmcMessage.recipient.bytes, sizeof(evmcMessage.recipient), 0); + } + else + { + boost::algorithm::unhex(hostContext.myAddress(), evmcMessage.recipient.bytes); + } + + if (hostContext.caller().size() < sizeof(evmcMessage.sender) * 2) + { + std::uninitialized_fill_n( + evmcMessage.sender.bytes, sizeof(evmcMessage.sender), 0); + } + else + { + boost::algorithm::unhex(hostContext.caller(), evmcMessage.sender.bytes); + } + } + evmcMessage.code_address = evmcMessage.recipient; + + return evmcMessage; + }; + + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null!")); + } + + if (hostContext.isCreate()) + { + auto evmcMessage = getEVMCMessage(*blockContext, hostContext); + + auto code = hostContext.data(); + auto vmKind = VMKind::evmone; + + if (blockContext->isWasm()) + { + vmKind = VMKind::BcosWasm; + } + auto revision = toRevision(hostContext.vmSchedule()); + // the code evm uses to deploy is not runtime code, so create can not use cache + auto vm = blockContext->getVMFactory()->create( + vmKind, revision, crypto::HashType(), code, true); + auto ret = vm.execute(hostContext, &evmcMessage); + + auto callResults = hostContext.takeCallParameters(); + // clear unnecessary logs + if (blockContext->blockVersion() >= static_cast(BlockVersion::V3_1_VERSION)) + { + EXECUTIVE_LOG(TRACE) + << "logEntries" << LOG_KV("LogSize", callResults->logEntries.size()); + } + else + { + if (callResults->origin != callResults->senderAddress) + { + EXECUTIVE_LOG(TRACE) + << "clear logEntries" + << LOG_KV("beforeClearLogSize", callResults->logEntries.size()); + callResults->logEntries.clear(); + } + } + callResults = parseEVMCResult(std::move(callResults), ret); + + if (callResults->status != (int32_t)TransactionStatus::None) + { + EXECUTIVE_LOG(INFO) + << "Revert transaction: " << LOG_DESC("deploy failed due to status error") + << LOG_KV("status", callResults->status) + << LOG_KV("sender", callResults->senderAddress) + << LOG_KV("address", callResults->codeAddress); + revert(); + callResults->type = CallParameters::REVERT; + // Clear the creation flag + callResults->create = false; + return callResults; + } + + auto outputRef = ret.output(); + auto maxCodeSize = blockContext->isWasm() ? blockContext->vmSchedule().maxWasmCodeSize : + hostContext.vmSchedule().maxEvmCodeSize; + if (outputRef.size() > maxCodeSize) + { + revert(); + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::OutOfGas; + callResults->message = + "Code is too large: " + boost::lexical_cast(outputRef.size()) + + " limit: " + boost::lexical_cast(maxCodeSize); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Deploy code is too large.", *callResults); + } + EXECUTIVE_LOG(DEBUG) + << "Revert transaction: " << LOG_DESC("deploy failed code too large") + << LOG_KV("message", callResults->message); + return callResults; + } + + if ((int64_t)(outputRef.size() * hostContext.vmSchedule().createDataGas) > + callResults->gas) + { + if (hostContext.vmSchedule().exceptionalFailedCodeDeposit) + { + revert(); + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::OutOfGas; + callResults->message = "exceptionalFailedCodeDeposit"; + if (versionCompareTo( + blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Exceptional Failed Code Deposit", *callResults); + } + EXECUTIVE_LOG(INFO) + << "Revert transaction: " << LOG_DESC("deploy failed OutOfGas") + << LOG_KV("message", callResults->message); + return callResults; + } + } + + if (blockContext->isWasm()) + { + // BFS create contract table and write metadata in parent table + auto tableName = getContractTableName(hostContext.myAddress(), true); + if (!buildBfsPath(tableName, callResults->origin, hostContext.myAddress(), + FS_TYPE_CONTRACT, callResults->gas)) + { + revert(); + auto buildCallResults = std::move(callResults); + buildCallResults->type = CallParameters::REVERT; + buildCallResults->status = (int32_t)TransactionStatus::RevertInstruction; + buildCallResults->message = "Error occurs in build BFS dir"; + if (versionCompareTo( + blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "Error occurs in building BFS dir.", *buildCallResults); + } + EXECUTIVE_LOG(DEBUG) << "Revert transaction: " << buildCallResults->message + << LOG_KV("tableName", tableName); + return buildCallResults; + } + } + + assert(extraData != nullptr); + + if (outputRef.empty()) + { + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::Unknown; + callResults->message = "Create contract with empty code, wrong code input."; + EXECUTIVE_LOG(WARNING) + << "Revert transaction: " << LOG_DESC("deploy failed code empty") + << LOG_KV("message", callResults->message); + // Clear the creation flag + callResults->create = false; + // Clear the data + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "Create contract with empty code, invalid code input.", *callResults); + } + else if (versionCompareTo( + blockContext->blockVersion(), BlockVersion::V3_0_VERSION) <= 0) + { + callResults->data.clear(); + } + revert(); + return callResults; + } + hostContext.setCodeAndAbi(outputRef.toBytes(), extraData->abi); + + callResults->gas -= outputRef.size() * hostContext.vmSchedule().createDataGas; + callResults->newEVMContractAddress = callResults->codeAddress; + + // Clear the creation flag + callResults->create = false; + + // Clear the data + callResults->data.clear(); + + return callResults; + } + else + { // execute + auto codeEntry = hostContext.code(); + if (!codeEntry) + { + revert(); + auto callResult = hostContext.takeCallParameters(); + callResult->type = CallParameters::REVERT; + callResult->status = (int32_t)TransactionStatus::CallAddressError; + callResult->message = "Error contract address."; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Call address error.", *callResult); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " + << LOG_DESC("call address error, maybe address not exist") + << LOG_KV("address", callResult->codeAddress) + << LOG_KV("sender", callResult->senderAddress); + return callResult; + } + auto code = codeEntry->get(); + if (hasPrecompiledPrefix(code)) + { + return callDynamicPrecompiled(hostContext.takeCallParameters(), std::string(code)); + } + + auto vmKind = VMKind::evmone; + if (hasWasmPreamble(code)) + { + vmKind = VMKind::BcosWasm; + } + auto revision = toRevision(hostContext.vmSchedule()); + auto vm = blockContext->getVMFactory()->create(vmKind, revision, hostContext.codeHash(), + bytes_view((uint8_t*)code.data(), code.size())); + auto evmcMessage = getEVMCMessage(*blockContext, hostContext); + auto ret = vm.execute(hostContext, &evmcMessage); + + auto callResults = hostContext.takeCallParameters(); + callResults = parseEVMCResult(std::move(callResults), ret); + + if (blockContext->blockVersion() >= static_cast(BlockVersion::V3_1_VERSION)) + { + EXECUTIVE_LOG(TRACE) + << "logEntries" << LOG_KV("LogSize", callResults->logEntries.size()); + return callResults; + } + if (callResults->origin != callResults->senderAddress) + { + EXECUTIVE_LOG(TRACE) + << "clear logEntries" + << LOG_KV("beforeClearLogSize", callResults->logEntries.size()); + callResults->logEntries.clear(); + } + return callResults; + } + } + catch (bcos::Error& e) + { + auto callResults = hostContext.takeCallParameters(); + if (!callResults) + { + callResults = std::make_unique(CallParameters::REVERT); + } + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::RevertInstruction; + callResults->message = e.errorMessage(); + if (versionCompareTo(blockContext().lock()->blockVersion(), BlockVersion::V3_1_VERSION) >= + 0) + { + writeErrInfoToOutput(e.errorMessage(), *callResults); + } + + revert(); + + + if (e.errorCode() == DEAD_LOCK) + { + // DEAD LOCK revert need provide sender and receiver + EXECUTOR_LOG(DEBUG) << "Revert by dead lock, sender: " << callResults->senderAddress + << " receiver: " << callResults->receiveAddress; + } + /*else if (StorageError::UnknownError <= e.errorCode() && + StorageError::TimestampMismatch <= e.errorCode()) + { + // is storage error + EXECUTOR_LOG(DEBUG) + << "Storage exception during tx execute. trigger switch(if this tx is not call). e:" + << diagnostic_information(e); + auto blockContext = m_blockContext.lock(); + blockContext->triggerSwitch(); + } + */ + else + { + EXECUTIVE_LOG(ERROR) << "BCOS Error: " << diagnostic_information(e); + } + + return callResults; + } + catch (InternalVMError const& _e) + { + EXECUTIVE_LOG(ERROR) << "Internal VM Error (" + << *boost::get_error_info(_e) << ")\n" + << diagnostic_information(_e); + exit(1); + } + catch (Exception const& _e) + { + // TODO: AUDIT: check that this can never reasonably happen. Consider what + // to do if it does. + EXECUTIVE_LOG(ERROR) << "Unexpected exception in VM. There may be a bug " + "in this implementation. " + << diagnostic_information(_e); + exit(1); + // Another solution would be to reject this transaction, but that also + // has drawbacks. Essentially, the amount of ram has to be increased here. + } + catch (std::exception& _e) + { + // TODO: AUDIT: check that this can never reasonably happen. Consider what + // to do if it does. + EXECUTIVE_LOG(ERROR) << "Unexpected std::exception in VM. Not enough RAM? " + << LOG_KV("what", _e.what()) + << LOG_KV("diagnostic", boost::diagnostic_information(_e)); + exit(1); + // Another solution would be to reject this transaction, but that also + // has drawbacks. Essentially, the amount of ram has to be increased here. + } +} + +CallParameters::UniquePtr TransactionExecutive::callDynamicPrecompiled( + CallParameters::UniquePtr callParameters, const std::string& code) +{ + auto blockContext = m_blockContext.lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + std::vector codeParameters{}; + boost::split(codeParameters, code, boost::is_any_of(",")); + if (codeParameters.size() < 3) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "CallDynamicPrecompiled error code field.")); + } + callParameters->codeAddress = callParameters->receiveAddress; + callParameters->receiveAddress = codeParameters[1]; + // for scalability, erase [PRECOMPILED_PREFIX,codeAddress], left actual parameters + codeParameters.erase(codeParameters.begin(), codeParameters.begin() + 2); + // enc([call precompiled parameters],[user call parameters]) + auto newParams = codec.encode(codeParameters, callParameters->data); + + callParameters->data = std::move(newParams); + EXECUTIVE_LOG(TRACE) << LOG_DESC("callDynamicPrecompiled") + << LOG_KV("codeAddr", callParameters->codeAddress) + << LOG_KV("recvAddr", callParameters->receiveAddress) + << LOG_KV("code", code); + auto callResult = callPrecompiled(std::move(callParameters)); + + callResult->receiveAddress = callResult->codeAddress; + return callResult; +} + +std::shared_ptr TransactionExecutive::execPrecompiled( + precompiled::PrecompiledExecResult::Ptr const& _precompiledParams) +{ + auto precompiled = getPrecompiled(_precompiledParams->m_precompiledAddress); + + if (precompiled) + { + auto execResult = precompiled->call(shared_from_this(), _precompiledParams); + return execResult; + } + [[unlikely]] EXECUTIVE_LOG(ERROR) + << LOG_DESC("[call]Can't find precompiled address") + << LOG_KV("address", _precompiledParams->m_precompiledAddress); + BOOST_THROW_EXCEPTION(PrecompiledError("can't find precompiled address.")); +} + +bool TransactionExecutive::isPrecompiled(const std::string& address) const +{ + return m_constantPrecompiled->count(address) > 0; +} + +std::shared_ptr TransactionExecutive::getPrecompiled(const std::string& address) const +{ + auto constantPrecompiled = m_constantPrecompiled->find(address); + + if (constantPrecompiled != m_constantPrecompiled->end()) + { + return constantPrecompiled->second; + } + return {}; +} + +std::pair TransactionExecutive::executeOriginPrecompiled( + const string& _a, bytesConstRef _in) const +{ + return m_evmPrecompiled->at(_a)->execute(_in); +} + +int64_t TransactionExecutive::costOfPrecompiled(const string& _a, bytesConstRef _in) const +{ + return m_evmPrecompiled->at(_a)->cost(_in).convert_to(); +} + +void TransactionExecutive::setEVMPrecompiled( + std::shared_ptr> precompiledContract) +{ + m_evmPrecompiled = precompiledContract; +} +void TransactionExecutive::setConstantPrecompiled( + const string& address, std::shared_ptr precompiled) +{ + m_constantPrecompiled->insert({address, precompiled}); +} +void TransactionExecutive::setConstantPrecompiled( + std::shared_ptr>> + _constantPrecompiled) +{ + m_constantPrecompiled = _constantPrecompiled; +} + +void TransactionExecutive::revert() +{ + auto blockContext = m_blockContext.lock(); + if (!blockContext) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "blockContext is null!")); + } + EXECUTOR_BLK_LOG(INFO, blockContext->number()) << "Revert transaction"; + + blockContext->storage()->rollback(*m_recoder); + m_recoder->clear(); +} + +CallParameters::UniquePtr TransactionExecutive::parseEVMCResult( + CallParameters::UniquePtr callResults, const Result& _result) +{ + auto blockContext = m_blockContext.lock(); + callResults->type = CallParameters::REVERT; + // FIXME: if EVMC_REJECTED, then use default vm to run. maybe wasm call evm + // need this + callResults->evmStatus = _result.status(); + auto outputRef = _result.output(); + switch (_result.status()) + { + case EVMC_SUCCESS: + { + callResults->type = CallParameters::FINISHED; + callResults->status = _result.status(); + callResults->gas = _result.gasLeft(); + if (!callResults->create) + { + callResults->data.assign(outputRef.begin(), outputRef.end()); // TODO: avoid the data + // copy + } + break; + } + case EVMC_REVERT: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVM_REVERT") << LOG_KV("to", callResults->receiveAddress) + << LOG_KV("gasLeft", callResults->gas); + // FIXME: Copy the output for now, but copyless version possible. + callResults->gas = _result.gasLeft(); + revert(); + // Note: both the precompiled or the application-developer may calls writeErrorInfo to the + // data when revert + callResults->data.assign(outputRef.begin(), outputRef.end()); + // m_output = owning_bytes_ref( + // bytes(outputRef.data(), outputRef.data() + outputRef.size()), 0, outputRef.size()); + callResults->status = (int32_t)TransactionStatus::RevertInstruction; + // m_excepted = TransactionStatus::RevertInstruction; + break; + } + case EVMC_OUT_OF_GAS: + { + revert(); + EXECUTIVE_LOG(INFO) << "Revert transaction: " << LOG_DESC("OutOfGas") + << LOG_KV("to", callResults->receiveAddress) + << LOG_KV("gas", _result.gasLeft()); + callResults->status = (int32_t)TransactionStatus::OutOfGas; + callResults->gas = _result.gasLeft(); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution out of gas.", *callResults); + } + break; + } + case EVMC_FAILURE: + { + revert(); + EXECUTIVE_LOG(INFO) << "Revert transaction: " << LOG_DESC("WASMTrap") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::WASMTrap; + callResults->gas = _result.gasLeft(); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution failure.", *callResults); + } + break; + } + case EVMC_INVALID_INSTRUCTION: // NOTE: this could have its own exception + case EVMC_UNDEFINED_INSTRUCTION: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVMC_INVALID_INSTRUCTION/EVMC_INVALID_INSTRUCTION") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::BadInstruction; + revert(); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution invalid/undefined opcode.", *callResults); + } + break; + } + case EVMC_BAD_JUMP_DESTINATION: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVMC_BAD_JUMP_DESTINATION") + << LOG_KV("to", callResults->receiveAddress); + // m_remainGas = 0; + callResults->status = (int32_t)TransactionStatus::BadJumpDestination; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "Execution has violated the jump destination restrictions.", *callResults); + } + revert(); + break; + } + case EVMC_STACK_OVERFLOW: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVMC_STACK_OVERFLOW") + << LOG_KV("to", callResults->receiveAddress); + // m_remainGas = 0; + callResults->status = (int32_t)TransactionStatus::OutOfStack; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution stack overflow.", *callResults); + } + revert(); + break; + } + case EVMC_STACK_UNDERFLOW: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVMC_STACK_UNDERFLOW") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::StackUnderflow; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution needs more items on EVM stack.", *callResults); + } + revert(); + break; + } + case EVMC_INVALID_MEMORY_ACCESS: + { + // m_remainGas = 0; + EXECUTIVE_LOG(INFO) << LOG_DESC("VM error, BufferOverrun") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::StackUnderflow; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Execution tried to read outside memory bounds.", *callResults); + } + revert(); + break; + } + case EVMC_STATIC_MODE_VIOLATION: + { + // m_remainGas = 0; + EXECUTIVE_LOG(INFO) << LOG_DESC("VM error, DisallowedStateChange") + << LOG_KV("to", callResults->receiveAddress); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "Execution tried to execute an operation which is restricted in static mode.", + *callResults); + } + callResults->status = (int32_t)TransactionStatus::Unknown; + revert(); + break; + } + case EVMC_CONTRACT_VALIDATION_FAILURE: + { + EXECUTIVE_LOG(INFO) + << LOG_DESC("WASM validation failed, contract hash algorithm dose not match host.") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::WASMValidationFailure; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Contract validation has failed.", *callResults); + } + revert(); + break; + } + case EVMC_ARGUMENT_OUT_OF_RANGE: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("WASM Argument Out Of Range") + << LOG_KV("to", callResults->receiveAddress); + callResults->status = (int32_t)TransactionStatus::WASMArgumentOutOfRange; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput( + "An argument to a state accessing method has a value outside of the accepted range " + "of values.", + *callResults); + } + revert(); + break; + } + case EVMC_WASM_TRAP: + case EVMC_WASM_UNREACHABLE_INSTRUCTION: + { + EXECUTIVE_LOG(INFO) << LOG_DESC("WASM Unreachable/Trap Instruction") + << LOG_KV("to", callResults->receiveAddress) + << LOG_KV("status", _result.status()); + callResults->status = (int32_t)TransactionStatus::WASMUnreachableInstruction; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("A WebAssembly trap has been hit during execution.", *callResults); + } + revert(); + break; + } + case EVMC_INTERNAL_ERROR: + default: + { + EXECUTIVE_LOG(WARNING) << LOG_DESC("EVMC_INTERNAL_ERROR/default revert") + << LOG_KV("to", callResults->receiveAddress) + << LOG_KV("status", _result.status()); + revert(); + if (_result.status() <= EVMC_INTERNAL_ERROR) + { + BOOST_THROW_EXCEPTION(InternalVMError{} << errinfo_evmcStatusCode(_result.status())); + } + else + { // These cases aren't really internal errors, just more specific + // error codes returned by the VM. Map all of them to OOG.m_externalCallCallback + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::OutOfGas; + } + } + } + + return callResults; +} + +void TransactionExecutive::creatAuthTable( + std::string_view _tableName, std::string_view _origin, std::string_view _sender) +{ + // Create the access table + // /sys/ not create + if (_tableName.starts_with(USER_SYS_PREFIX) || + getContractTableName(_sender, false).starts_with(USER_SYS_PREFIX)) + { + return; + } + auto authTableName = std::string(_tableName).append(CONTRACT_SUFFIX); + std::string admin; + if (_sender != _origin) + { + // if contract external create contract, then inheritance admin, always be origin + admin = std::string(_origin); + } + else + { + admin = std::string(_sender); + } + EXECUTIVE_LOG(DEBUG) << "creatAuthTable in deploy" << LOG_KV("tableName", _tableName) + << LOG_KV("origin", _origin) << LOG_KV("sender", _sender) + << LOG_KV("admin", admin); + auto table = m_storageWrapper->createTable(authTableName, STORAGE_VALUE); + + if (table) + { + tool::BfsFileFactory::buildAuth(table.value(), admin); + } +} + +bool TransactionExecutive::buildBfsPath(std::string_view _absoluteDir, std::string_view _origin, + std::string_view _sender, std::string_view _type, int64_t gasLeft) +{ + /// this method only write bfs metadata, not create final table + /// you should create locally, after external call successfully + EXECUTIVE_LOG(TRACE) << LOG_DESC("build BFS metadata") << LOG_KV("absoluteDir", _absoluteDir) + << LOG_KV("type", _type); + auto response = + externalTouchNewFile(shared_from_this(), _origin, _sender, _absoluteDir, _type, gasLeft); + return response == (int)precompiled::CODE_SUCCESS; +} + +bool TransactionExecutive::checkAuth(const CallParameters::UniquePtr& callParameters) +{ + auto blockContext = m_blockContext.lock(); + // check account first + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + uint8_t accountStatus = checkAccountAvailable(callParameters); + if (accountStatus == AccountStatus::freeze) + { + writeErrInfoToOutput("Account is frozen.", *callParameters); + callParameters->status = (int32_t)TransactionStatus::AccountFrozen; + callParameters->type = CallParameters::REVERT; + callParameters->message = "Account's status is abnormal"; + callParameters->create = false; + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callParameters->message + << LOG_KV("origin", callParameters->origin); + return false; + } + else if (accountStatus == AccountStatus::abolish) + { + writeErrInfoToOutput("Account is abolished.", *callParameters); + callParameters->status = (int32_t)TransactionStatus::AccountAbolished; + callParameters->type = CallParameters::REVERT; + callParameters->message = "Account's status is abnormal"; + callParameters->create = false; + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callParameters->message + << LOG_KV("origin", callParameters->origin); + return false; + } + } + if (callParameters->create) + { + // if create contract, then + // check exec auth + if (!checkExecAuth(callParameters)) + { + auto newAddress = string(callParameters->codeAddress); + callParameters->status = (int32_t)TransactionStatus::PermissionDenied; + callParameters->type = CallParameters::REVERT; + callParameters->message = "Create permission denied"; + callParameters->create = false; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Create permission denied.", *callParameters); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callParameters->message + << LOG_KV("newAddress", newAddress) + << LOG_KV("origin", callParameters->origin); + return false; + } + } + else + { + // if internal call, then not check auth + if (callParameters->internalCall) + { + return true; + } + auto tableName = + getContractTableName(callParameters->receiveAddress, blockContext->isWasm()); + // if call contract, then + // check contract available + // check exec auth + auto contractStatus = checkContractAvailable(callParameters); + if (contractStatus != static_cast(ContractStatus::Available)) + { + callParameters->status = (int32_t)TransactionStatus::ContractFrozen; + callParameters->type = CallParameters::REVERT; + callParameters->message = "Contract is frozen"; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_2_VERSION) >= 0) + { + if (contractStatus == static_cast(ContractStatus::Abolish)) + { + callParameters->status = (int32_t)TransactionStatus::ContractAbolished; + callParameters->message = "Contract is abolished"; + writeErrInfoToOutput("Contract is abolished.", *callParameters); + } + } + else if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= + 0) + { + writeErrInfoToOutput("Contract is frozen.", *callParameters); + } + else if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_0_VERSION) <= + 0) + { + callParameters->data.clear(); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callParameters->message + << LOG_KV("tableName", tableName) + << LOG_KV("origin", callParameters->origin); + return false; + } + if (!checkExecAuth(callParameters)) + { + callParameters->status = (int32_t)TransactionStatus::PermissionDenied; + callParameters->type = CallParameters::REVERT; + callParameters->message = "Call permission denied"; + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + writeErrInfoToOutput("Call permission denied.", *callParameters); + } + else if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_0_VERSION) <= + 0) + { + callParameters->data.clear(); + } + EXECUTIVE_LOG(INFO) << "Revert transaction: " << callParameters->message + << LOG_KV("tableName", tableName) + << LOG_KV("origin", callParameters->origin); + return false; + } + } + return true; +} + +bool TransactionExecutive::checkExecAuth(const CallParameters::UniquePtr& callParameters) +{ + // static call does not have 'origin', so return true for now + // precompiled return true by default + if (callParameters->staticCall || isPrecompiled(callParameters->receiveAddress)) + { + return true; + } + auto blockContext = m_blockContext.lock(); + const auto* authMgrAddress = + blockContext->isWasm() ? precompiled::AUTH_MANAGER_NAME : precompiled::AUTH_MANAGER_ADDRESS; + auto contractAuthPrecompiled = dynamic_pointer_cast( + m_constantPrecompiled->at(AUTH_CONTRACT_MGR_ADDRESS)); + EXECUTIVE_LOG(TRACE) << "check auth" << LOG_KV("codeAddress", callParameters->receiveAddress) + << LOG_KV("isCreate", callParameters->create) + << LOG_KV("originAddress", callParameters->origin); + bool result = true; + if (callParameters->create) + { + /// external call authMgrAddress to check deploy auth + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto input = + blockContext->isWasm() ? + codec.encodeWithSig("hasDeployAuth(string)", callParameters->origin) : + codec.encodeWithSig("hasDeployAuth(address)", Address(callParameters->origin)); + auto response = externalRequest(shared_from_this(), ref(input), callParameters->origin, + callParameters->receiveAddress, authMgrAddress, false, false, callParameters->gas); + codec.decode(ref(response->data), result); + } + else + { + bytesRef func = ref(callParameters->data).getCroppedData(0, 4); + result = contractAuthPrecompiled->checkMethodAuth( + shared_from_this(), callParameters->receiveAddress, func, callParameters->origin); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_2_VERSION) >= 0 && + callParameters->origin != callParameters->senderAddress) + { + auto senderCheck = contractAuthPrecompiled->checkMethodAuth(shared_from_this(), + callParameters->receiveAddress, func, callParameters->senderAddress); + result = result && senderCheck; + } + } + EXECUTIVE_LOG(TRACE) << "check auth finished" + << LOG_KV("codeAddress", callParameters->receiveAddress) + << LOG_KV("result", result); + return result; +} + +int32_t TransactionExecutive::checkContractAvailable( + const CallParameters::UniquePtr& callParameters) +{ + // precompiled always available + if (isPrecompiled(callParameters->receiveAddress) || + c_systemTxsAddress.contains(callParameters->receiveAddress)) + { + return 0; + } + auto blockContext = m_blockContext.lock(); + auto contractAuthPrecompiled = dynamic_pointer_cast( + m_constantPrecompiled->at(AUTH_CONTRACT_MGR_ADDRESS)); + // if status is normal, then return 0; else if status is abnormal, then return else + // if return <0, it means status row not exist, check pass by default in this case + auto status = contractAuthPrecompiled->getContractStatus( + shared_from_this(), callParameters->receiveAddress); + return status < 0 ? 0 : status; +} + +uint8_t TransactionExecutive::checkAccountAvailable(const CallParameters::UniquePtr& callParameters) +{ + if (callParameters->staticCall || callParameters->origin != callParameters->senderAddress || + callParameters->internalCall) + { + // static call sender and origin will be empty + // contract calls, pass through + return 0; + } + auto blockContext = m_blockContext.lock(); + AccountPrecompiled::Ptr accountPrecompiled = + dynamic_pointer_cast( + m_constantPrecompiled->at(ACCOUNT_ADDRESS)); + + return accountPrecompiled->getAccountStatus(callParameters->origin, shared_from_this()); +} \ No newline at end of file diff --git a/bcos-executor/src/executive/TransactionExecutive.h b/bcos-executor/src/executive/TransactionExecutive.h new file mode 100644 index 0000000..6f91993 --- /dev/null +++ b/bcos-executor/src/executive/TransactionExecutive.h @@ -0,0 +1,232 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief executive of vm + * @file TransactionExecutive.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once + +#include "../Common.h" +#include "../executor/TransactionExecutor.h" +#include "../vm/VMFactory.h" +#include "BlockContext.h" +#include "SyncStorageWrapper.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-protocol/TransactionStatus.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class Result; + +} // namespace executor +namespace precompiled +{ +struct PrecompiledExecResult; +} + +namespace executor +{ +class HostContext; + +class TransactionExecutive : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + TransactionExecutive(std::weak_ptr blockContext, std::string contractAddress, + int64_t contextID, int64_t seq, std::shared_ptr& gasInjector) + : m_blockContext(std::move(blockContext)), + m_contractAddress(std::move(contractAddress)), + m_contextID(contextID), + m_seq(seq), + m_gasInjector(gasInjector) + { + m_recoder = std::make_shared(); + m_hashImpl = m_blockContext.lock()->hashHandler(); + } + + TransactionExecutive(TransactionExecutive const&) = delete; + TransactionExecutive& operator=(TransactionExecutive) = delete; + TransactionExecutive(TransactionExecutive&&) = delete; + TransactionExecutive& operator=(TransactionExecutive&&) = delete; + + virtual ~TransactionExecutive() = default; + + virtual CallParameters::UniquePtr start(CallParameters::UniquePtr input); + + // External call request + virtual CallParameters::UniquePtr externalCall(CallParameters::UniquePtr input); + + auto& storage() + { + assert(m_storageWrapper); + return *m_storageWrapper; + } + + std::weak_ptr blockContext() { return m_blockContext; } + + int64_t contextID() const { return m_contextID; } + int64_t seq() const { return m_seq; } + + std::string_view contractAddress() { return m_contractAddress; } + + CallParameters::UniquePtr execute( + CallParameters::UniquePtr callParameters); // execute parameters in + // current corouitine + + bool isPrecompiled(const std::string& _address) const; + + std::shared_ptr getPrecompiled(const std::string& _address) const; + + void setConstantPrecompiled( + const std::string& _address, std::shared_ptr precompiled); + + void setBuiltInPrecompiled(std::shared_ptr> _builtInPrecompiled) + { + m_builtInPrecompiled = _builtInPrecompiled; + } + + inline bool isBuiltInPrecompiled(const std::string& _a) const + { + std::stringstream prefix; + prefix << std::setfill('0') << std::setw(36) << "0"; + return _a.starts_with(prefix.str()) && m_builtInPrecompiled->contains(_a); + } + + inline bool isEthereumPrecompiled(const std::string& _a) const + { + std::stringstream prefix; + prefix << std::setfill('0') << std::setw(39) << "0"; + return m_evmPrecompiled != nullptr && _a.starts_with(prefix.str()) && + m_evmPrecompiled->contains(_a); + } + + std::pair executeOriginPrecompiled(const std::string& _a, bytesConstRef _in) const; + + int64_t costOfPrecompiled(const std::string& _a, bytesConstRef _in) const; + + void setEVMPrecompiled( + std::shared_ptr>> + precompiledContract); + + void setConstantPrecompiled( + std::shared_ptr>> + _constantPrecompiled); + + std::shared_ptr execPrecompiled( + precompiled::PrecompiledExecResult::Ptr const& _precompiledParams); + + + VMSchedule const& vmSchedule() const { return m_blockContext.lock()->vmSchedule(); } + + bool isWasm() { return m_blockContext.lock()->isWasm(); } + +protected: + std::tuple, CallParameters::UniquePtr> call( + CallParameters::UniquePtr callParameters); + CallParameters::UniquePtr callPrecompiled(CallParameters::UniquePtr callParameters); + std::tuple, CallParameters::UniquePtr> create( + CallParameters::UniquePtr callParameters); + CallParameters::UniquePtr internalCreate(CallParameters::UniquePtr callParameters); + CallParameters::UniquePtr go( + HostContext& hostContext, CallParameters::UniquePtr extraData = nullptr); + CallParameters::UniquePtr callDynamicPrecompiled( + CallParameters::UniquePtr callParameters, const std::string& code); + + void revert(); + + CallParameters::UniquePtr parseEVMCResult( + CallParameters::UniquePtr callResults, const Result& _result); + + void writeErrInfoToOutput(std::string const& errInfo, CallParameters& _callParameters) + { + bcos::codec::abi::ContractABICodec abi(m_hashImpl); + auto codecOutput = abi.abiIn("Error(string)", errInfo); + _callParameters.data = std::move(codecOutput); + } + + inline std::string getContractTableName( + const std::string_view& _address, bool isWasm = false, uint32_t version = 0) + { + auto blockContext = m_blockContext.lock(); + + if (blockContext->isAuthCheck()) + { + if (_address.starts_with(precompiled::SYS_ADDRESS_PREFIX)) + { + return std::string(USER_SYS_PREFIX).append(_address); + } + } + + + std::string formatAddress(_address); + if (isWasm) + { + if (protocol::versionCompareTo(version, protocol::BlockVersion::V3_2_VERSION) < 0) + { + if (_address.find(USER_TABLE_PREFIX) == 0) + { + return formatAddress; + } + } + formatAddress = (_address[0] == '/') ? formatAddress.substr(1) : formatAddress; + } + + return std::string(USER_APPS_PREFIX).append(formatAddress); + } + + bool checkAuth(const CallParameters::UniquePtr& callParameters); + bool checkExecAuth(const CallParameters::UniquePtr& callParameters); + int32_t checkContractAvailable(const CallParameters::UniquePtr& callParameters); + uint8_t checkAccountAvailable(const CallParameters::UniquePtr& callParameters); + + void creatAuthTable( + std::string_view _tableName, std::string_view _origin, std::string_view _sender); + + bool buildBfsPath(std::string_view _absoluteDir, std::string_view _origin, + std::string_view _sender, std::string_view _type, int64_t gasLeft); + + std::weak_ptr m_blockContext; ///< Information on the runtime environment. + std::shared_ptr>> + m_constantPrecompiled; + std::shared_ptr>> + m_evmPrecompiled; + std::shared_ptr> m_builtInPrecompiled; + + std::string m_contractAddress; + int64_t m_contextID; + int64_t m_seq; + crypto::Hash::Ptr m_hashImpl; + + std::shared_ptr m_gasInjector = nullptr; + + bcos::storage::Recoder::Ptr m_recoder; + std::shared_ptr m_storageWrapper; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executor/ExecuteOutputs.h b/bcos-executor/src/executor/ExecuteOutputs.h new file mode 100644 index 0000000..0552f98 --- /dev/null +++ b/bcos-executor/src/executor/ExecuteOutputs.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief block level context + * @file ExecuteOutputs.h + * @author: jimmyshi + * @date: 2022-04-02 + */ + +#pragma once + +#include "bcos-executor/src/Common.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include + + +namespace bcos +{ +namespace executor +{ +class ExecuteOutputs +{ +public: + using Ptr = std::shared_ptr; + + void add(protocol::ExecutionMessage::UniquePtr result) + { + auto contextID = result->contextID(); + m_contextID2Result.emplace(contextID, std::move(result)); + } + std::vector dumpAndClear() + { + auto results = std::vector(); + + std::set> contextIDs; + + for (auto it = m_contextID2Result.begin(); it != m_contextID2Result.end(); it++) + { + // we assume that context id is in sequence increasing + contextIDs.insert(it->first); + } + + for (auto contextID : contextIDs) + { + auto& result = m_contextID2Result.at(contextID); + // std::cout << " dump " << result->contextID() << " | " << result->seq() << " | " + // << protocol::ExecutionMessage::getTypeName(result->type()) << std::endl; + results.push_back(std::move(result)); + } + + m_contextID2Result.clear(); + return results; + } + + void clear() { m_contextID2Result.clear(); } + +private: + tbb::concurrent_unordered_map + m_contextID2Result; +}; +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/executor/SwitchExecutorManager.h b/bcos-executor/src/executor/SwitchExecutorManager.h new file mode 100644 index 0000000..fb4ec8c --- /dev/null +++ b/bcos-executor/src/executor/SwitchExecutorManager.h @@ -0,0 +1,667 @@ +#pragma once + +#include "TransactionExecutorFactory.h" +#include "bcos-executor/src/executor/TransactionExecutor.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include +#include +#include +#include + +namespace bcos::executor +{ +class SwitchExecutorManager : public executor::ParallelTransactionExecutorInterface +{ +public: + using Ptr = std::shared_ptr; + + const int64_t INIT_SCHEDULER_TERM_ID = 0; + const int64_t STOPPED_TERM_ID = -1; + + SwitchExecutorManager(bcos::executor::TransactionExecutorFactory::Ptr factory) + : m_pool("exec", std::thread::hardware_concurrency()), m_factory(factory) + { + factory->registerNeedSwitchEvent([this]() { selfAsyncRefreshExecutor(); }); + + // refreshExecutor(INIT_SCHEDULER_TERM_ID + 1); + } + + ~SwitchExecutorManager() noexcept override {} + + void refreshExecutor(int64_t schedulerTermId) + { + // refresh when receive larger schedulerTermId + if (schedulerTermId > m_schedulerTermId) + { + bcos::executor::TransactionExecutor::Ptr oldExecutor; + { + WriteGuard l(m_mutex); + if (m_schedulerTermId != schedulerTermId) + { + oldExecutor = m_executor; + + m_executor = m_factory->build(); // may throw exception + + m_schedulerTermId = schedulerTermId; + + EXECUTOR_LOG(DEBUG) << LOG_BADGE("Switch") + << "ExecutorSwitch: Build new executor instance with " + << LOG_KV("schedulerTermId", schedulerTermId); + } + } + if (oldExecutor) + { + oldExecutor->stop(); + } + } + } + + void selfAsyncRefreshExecutor() + { + auto toTermId = m_schedulerTermId + 1; + auto toSeq = m_seq + 1; + m_pool.enqueue([toTermId, toSeq, this]() { + if (toTermId == m_schedulerTermId) + { + // already switch + return; + } + + try + { + refreshExecutor(toTermId); + } + catch (Exception const& _e) + { + EXECUTOR_LOG(ERROR) + << LOG_DESC("selfAsyncRefreshExecutor exception. Re-push to task pool") + << LOG_KV("toTermId", toTermId) << LOG_KV("currentTermId", m_schedulerTermId) + << diagnostic_information(_e); + + selfAsyncRefreshExecutor(); + return; + } + + + if (toTermId == m_schedulerTermId) + { + // if switch success, set seq to trigger scheduler switch + m_seq = toSeq; + EXECUTOR_LOG(DEBUG) + << LOG_BADGE("Switch") << "ExecutorSwitch: selfAsyncRefreshExecutor success" + << LOG_KV("schedulerTermId", m_schedulerTermId) << LOG_KV("seq", m_seq); + } + }); + } + + void triggerSwitch() { selfAsyncRefreshExecutor(); } + + bool hasStopped() { return m_schedulerTermId == STOPPED_TERM_ID; } + + bool hasNextBlockHeaderDone() { return m_schedulerTermId != INIT_SCHEDULER_TERM_ID; } + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "nextBlockHeader: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message)); + return; + } + + if (schedulerTermId < m_schedulerTermId) + { + // Call from an outdated scheduler instance + // Just return without callback, because run callback may trigger a new switch, thus + // some message will be outdated and trigger switch again and again. + EXECUTOR_LOG(INFO) + << LOG_DESC("nextBlockHeader: not refreshExecutor for invalid schedulerTermId") + << LOG_KV("termId", schedulerTermId) << LOG_KV("currentTermId", m_schedulerTermId); + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "old executor has been stopped")); + return; + } + + try + { + refreshExecutor(schedulerTermId); + } + catch (Exception const& _e) + { + EXECUTOR_LOG(ERROR) << LOG_DESC("nextBlockHeader: not refreshExecutor for exception") + << LOG_KV("toTermId", schedulerTermId) + << LOG_KV("currentTermId", m_schedulerTermId) + << diagnostic_information(_e); + callback(BCOS_ERROR_UNIQUE_PTR( + bcos::executor::ExecuteError::INTERNAL_ERROR, "refreshExecutor exception")); + return; + } + + m_pool.enqueue([executor = m_executor, schedulerTermId, + blockHeader = std::move(blockHeader), callback = std::move(callback)]() { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::UniquePtr error) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error)); + }; + + // execute the function + executor->nextBlockHeader( + schedulerTermId, blockHeader, std::move(_holdExecutorCallback)); + }); + } + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (hasStopped()) + { + std::string message = "executeTransaction: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback( + BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), nullptr); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch"), + nullptr); + return; + } + + m_pool.enqueue( + [executor = m_executor, inputRaw = input.release(), callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = + [executorHolder = executor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, + bcos::protocol::ExecutionMessage::UniquePtr output) { + EXECUTOR_LOG(TRACE) << "Release executor holder" + << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(output)); + }; + + // execute the function + executor->executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr(inputRaw), + std::move(_holdExecutorCallback)); + }); + } + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (hasStopped()) + { + std::string message = "call: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback( + BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), nullptr); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + // create a holder + auto _holdExecutorCallback = + [executorHolder = currentExecutor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr output) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(output)); + }; + + // execute the function + currentExecutor->call(bcos::protocol::ExecutionMessage::UniquePtr(input.release()), + std::move(_holdExecutorCallback)); + } + + void executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override + { + if (hasStopped()) + { + std::string message = "executeTransactions: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + // Note: copy the inputs here in case of inputs has been released + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch"), + {}); + return; + } + + auto inputsVec = + std::make_shared>(); + for (auto i = 0u; i < inputs.size(); i++) + { + inputsVec->emplace_back(std::move(inputs[i])); + } + m_pool.enqueue([executor = m_executor, contractAddress = std::move(contractAddress), + inputsVec, callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = + [executorHolder = executor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, + std::vector outputs) { + EXECUTOR_LOG(TRACE) << "Release executor holder" + << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(outputs)); + }; + + // execute the function + executor->executeTransactions( + contractAddress, *inputsVec, std::move(_holdExecutorCallback)); + }); + } + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override + { + if (hasStopped()) + { + std::string message = "dmcExecuteTransactions: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch"), + {}); + return; + } + + // Note: copy the inputs here in case of inputs has been released + auto inputsVec = + std::make_shared>(); + for (auto i = 0u; i < inputs.size(); i++) + { + inputsVec->emplace_back(std::move(inputs[i])); + } + m_pool.enqueue([executor = m_executor, contractAddress = std::move(contractAddress), + inputsVec, callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = + [executorHolder = executor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, + std::vector outputs) { + EXECUTOR_LOG(TRACE) << "Release executor holder" + << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(outputs)); + }; + + // execute the function + executor->dmcExecuteTransactions( + contractAddress, *inputsVec, std::move(_holdExecutorCallback)); + }); + } + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override + { + if (hasStopped()) + { + std::string message = "dagExecuteTransactions: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch"), + {}); + return; + } + + auto inputsVec = + std::make_shared>(); + for (auto i = 0u; i < inputs.size(); i++) + { + inputsVec->emplace_back(std::move(inputs[i])); + } + m_pool.enqueue([executor = m_executor, inputsVec, callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = + [executorHolder = executor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, + std::vector outputs) { + EXECUTOR_LOG(TRACE) << "Release executor holder" + << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(outputs)); + }; + + // execute the function + executor->dagExecuteTransactions(*inputsVec, std::move(_holdExecutorCallback)); + }); + } + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (hasStopped()) + { + std::string message = "dmcCall: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback( + BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), nullptr); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + // create a holder + auto _holdExecutorCallback = + [executorHolder = currentExecutor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr output) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(output)); + }; + + // execute the function + currentExecutor->dmcCall(bcos::protocol::ExecutionMessage::UniquePtr(input.release()), + std::move(_holdExecutorCallback)); + } + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "getHash: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + m_pool.enqueue([executor = currentExecutor, number, callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = + [executorHolder = executor, callback = std::move(callback)]( + bcos::Error::UniquePtr error, crypto::HashType hashType) { + EXECUTOR_LOG(TRACE) << "Release executor holder" + << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(hashType)); + }; + + // execute the function + executor->getHash(number, std::move(_holdExecutorCallback)); + }); + } + + /* ----- XA Transaction interface Start ----- */ + + // Write data to storage uncommitted + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "prepare: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message)); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch")); + return; + } + + m_pool.enqueue([executor = m_executor, params = bcos::protocol::TwoPCParams(params), + callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error)); + }; + + // execute the function + executor->prepare(params, std::move(_holdExecutorCallback)); + }); + } + + // Commit uncommitted data + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "commit: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message)); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch")); + return; + } + + m_pool.enqueue([executor = m_executor, params = bcos::protocol::TwoPCParams(params), + callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error)); + }; + + // execute the function + executor->commit(params, std::move(_holdExecutorCallback)); + }); + } + + // Rollback the changes + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "rollback: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message)); + return; + } + + if (!hasNextBlockHeaderDone()) + { + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR, + "Executor has just inited, need to switch")); + return; + } + + m_pool.enqueue([executor = m_executor, params = bcos::protocol::TwoPCParams(params), + callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error)); + }; + + // execute the function + executor->rollback(params, std::move(_holdExecutorCallback)); + }); + } + + /* ----- XA Transaction interface End ----- */ + + // drop all status + void reset(std::function callback) override + { + if (hasStopped()) + { + std::string message = "reset: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message)); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + m_pool.enqueue([executor = currentExecutor, callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error)); + }; + + // execute the function + executor->reset(std::move(_holdExecutorCallback)); + }); + } + void getCode(std::string_view contract, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "getCode: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + m_pool.enqueue([executor = currentExecutor, contract = std::string(contract), + callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error, bcos::bytes bytes) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(bytes)); + }; + + // execute the function + executor->getCode(contract, std::move(_holdExecutorCallback)); + }); + } + + void getABI(std::string_view contract, + std::function callback) override + { + if (hasStopped()) + { + std::string message = "getABI: executor has been stopped"; + EXECUTOR_LOG(DEBUG) << message; + callback(BCOS_ERROR_UNIQUE_PTR(bcos::executor::ExecuteError::STOPPED, message), {}); + return; + } + + auto currentExecutor = getAndNewExecutorIfNotExists(); + + m_pool.enqueue([executor = currentExecutor, contract = std::string(contract), + callback = std::move(callback)] { + // create a holder + auto _holdExecutorCallback = [executorHolder = executor, callback = + std::move(callback)]( + bcos::Error::Ptr error, std::string str) { + EXECUTOR_LOG(TRACE) + << "Release executor holder" << LOG_KV("ptr count", executorHolder.use_count()); + callback(std::move(error), std::move(str)); + }; + + // execute the function + executor->getABI(contract, std::move(_holdExecutorCallback)); + }); + } + + void stop() override + { + EXECUTOR_LOG(INFO) << "Try to stop SwitchExecutorManager"; + m_schedulerTermId = STOPPED_TERM_ID; + + auto executorUseCount = 0; + bcos::executor::TransactionExecutor::Ptr executor = getCurrentExecutor(); + m_executor = nullptr; + + if (executor) + { + executor->stop(); + } + executorUseCount = executor.use_count(); + + // waiting for stopped + while (executorUseCount > 1) + { + if (executor != nullptr) + { + executorUseCount = executor.use_count(); + } + EXECUTOR_LOG(DEBUG) << "Executor is stopping.. " + << LOG_KV("unfinishedTaskNum", executorUseCount - 1); + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } + EXECUTOR_LOG(INFO) << "Executor has stopped."; + } + + bcos::executor::TransactionExecutor::Ptr getCurrentExecutor() { return m_executor; } + + bcos::executor::TransactionExecutor::Ptr getAndNewExecutorIfNotExists() + { + if (!m_executor) + { + refreshExecutor(INIT_SCHEDULER_TERM_ID + 1); + } + + auto executor = m_executor; + return executor; + } + +private: + bcos::ThreadPool m_pool; + bcos::executor::TransactionExecutor::Ptr m_executor; + int64_t m_schedulerTermId = INIT_SCHEDULER_TERM_ID; + + mutable bcos::SharedMutex m_mutex; + + bcos::executor::TransactionExecutorFactory::Ptr m_factory; +}; +} // namespace bcos::executor \ No newline at end of file diff --git a/bcos-executor/src/executor/TransactionExecutor.cpp b/bcos-executor/src/executor/TransactionExecutor.cpp new file mode 100644 index 0000000..53da879 --- /dev/null +++ b/bcos-executor/src/executor/TransactionExecutor.cpp @@ -0,0 +1,2776 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief TransactionExecutor + * @file TransactionExecutor.cpp + * @author: xingqiangbai + * @date: 2021-09-01 + */ + +#include "TransactionExecutor.h" +#include "../Common.h" +#include "../dag/Abi.h" +#include "../dag/ClockCache.h" +#include "../dag/CriticalFields.h" +#include "../dag/ScaleUtils.h" +#include "../dag/TxDAG2.h" +#include "../executive/BlockContext.h" +#include "../executive/ExecutiveFactory.h" +#include "../executive/ExecutiveSerialFlow.h" +#include "../executive/ExecutiveStackFlow.h" +#include "../executive/TransactionExecutive.h" +#include "../precompiled/BFSPrecompiled.h" +#include "../precompiled/CastPrecompiled.h" +#include "../precompiled/ConsensusPrecompiled.h" +#include "../precompiled/CryptoPrecompiled.h" +#include "../precompiled/KVTablePrecompiled.h" +#include "../precompiled/SystemConfigPrecompiled.h" +#include "../precompiled/TableManagerPrecompiled.h" +#include "../precompiled/TablePrecompiled.h" +#include "../precompiled/extension/AccountManagerPrecompiled.h" +#include "../precompiled/extension/AccountPrecompiled.h" +#include "../precompiled/extension/AuthManagerPrecompiled.h" +#include "../precompiled/extension/ContractAuthMgrPrecompiled.h" +#include "../precompiled/extension/DagTransferPrecompiled.h" +#include "../precompiled/extension/GroupSigPrecompiled.h" +#include "../precompiled/extension/RingSigPrecompiled.h" +#include "../precompiled/extension/UserPrecompiled.h" +#include "../precompiled/extension/ZkpPrecompiled.h" +#include "../vm/Precompiled.h" + +#ifdef WITH_WASM +#include "../vm/gas_meter/GasInjector.h" +#endif + +#include "ExecuteOutputs.h" +#include "bcos-codec/abi/ContractABIType.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include "bcos-framework/dispatcher/SchedulerInterface.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "bcos-tool/BfsFileFactory.h" +#include "tbb/flow_graph.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace bcos; +using namespace std; +using namespace bcos::executor; +using namespace bcos::executor::critical; +using namespace bcos::wasm; +using namespace bcos::protocol; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace tbb::flow; + +crypto::Hash::Ptr GlobalHashImpl::g_hashImpl; + + +TransactionExecutor::TransactionExecutor(bcos::ledger::LedgerInterface::Ptr ledger, + txpool::TxPoolInterface::Ptr txpool, storage::MergeableStorageInterface::Ptr cachedStorage, + storage::TransactionalStorageInterface::Ptr backendStorage, + protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + storage::StateStorageFactory::Ptr stateStorageFactory, bcos::crypto::Hash::Ptr hashImpl, + bool isWasm, bool isAuthCheck, std::shared_ptr vmFactory, + std::shared_ptr>> keyPageIgnoreTables = nullptr, + std::string name = "default-executor-name") + : m_name(std::move(name)), + m_ledger(ledger), + m_txpool(std::move(txpool)), + m_cachedStorage(std::move(cachedStorage)), + m_backendStorage(std::move(backendStorage)), + m_executionMessageFactory(std::move(executionMessageFactory)), + m_stateStorageFactory(stateStorageFactory), + m_hashImpl(std::move(hashImpl)), + m_isAuthCheck(isAuthCheck), + m_isWasm(isWasm), + m_keyPageIgnoreTables(std::move(keyPageIgnoreTables)), + m_ledgerCache(std::make_shared(ledger)), + m_vmFactory(std::move(vmFactory)) +{ + assert(m_backendStorage); + m_ledgerCache->fetchCompatibilityVersion(); + + GlobalHashImpl::g_hashImpl = m_hashImpl; + m_abiCache = make_shared>(32); +#ifdef WITH_WASM + m_gasInjector = std::make_shared(wasm::GetInstructionTable()); +#endif + + m_threadPool = std::make_shared(name, std::thread::hardware_concurrency()); + setBlockVersion(m_ledgerCache->ledgerConfig()->compatibilityVersion()); + assert(!m_constantPrecompiled->empty()); + assert(m_builtInPrecompiled); + start(); +} + +void TransactionExecutor::setBlockVersion(uint32_t blockVersion) +{ + if (m_blockVersion == blockVersion) + { + return; + } + + RecursiveGuard l(x_resetEnvironmentLock); + if (m_blockVersion != blockVersion) + { + m_blockVersion = blockVersion; + + resetEnvironment(); // should not be called concurrently, if called, there's a bug in + // caller + } +} + +void TransactionExecutor::resetEnvironment() +{ + RecursiveGuard l(x_resetEnvironmentLock); + if (m_isWasm) + { + initWasmEnvironment(); + } + else + { + initEvmEnvironment(); + } +} + +void TransactionExecutor::initEvmEnvironment() +{ + auto fillZero = [](int _num) -> std::string { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::hex << _num; + return stream.str(); + }; + m_precompiledContract = + std::make_shared>>(); + m_builtInPrecompiled = std::make_shared>(); + m_constantPrecompiled = + std::make_shared>>(); + + m_precompiledContract->insert(std::make_pair(fillZero(1), + make_shared(3000, 0, PrecompiledRegistrar::executor("ecrecover")))); + m_precompiledContract->insert(std::make_pair(fillZero(2), + make_shared(60, 12, PrecompiledRegistrar::executor("sha256")))); + m_precompiledContract->insert(std::make_pair(fillZero(3), + make_shared(600, 120, PrecompiledRegistrar::executor("ripemd160")))); + m_precompiledContract->insert(std::make_pair(fillZero(4), + make_shared(15, 3, PrecompiledRegistrar::executor("identity")))); + m_precompiledContract->insert( + {fillZero(5), make_shared(PrecompiledRegistrar::pricer("modexp"), + PrecompiledRegistrar::executor("modexp"))}); + m_precompiledContract->insert( + {fillZero(6), make_shared( + 150, 0, PrecompiledRegistrar::executor("alt_bn128_G1_add"))}); + m_precompiledContract->insert( + {fillZero(7), make_shared( + 6000, 0, PrecompiledRegistrar::executor("alt_bn128_G1_mul"))}); + m_precompiledContract->insert({fillZero(8), + make_shared(PrecompiledRegistrar::pricer("alt_bn128_pairing_product"), + PrecompiledRegistrar::executor("alt_bn128_pairing_product"))}); + m_precompiledContract->insert({fillZero(9), + make_shared(PrecompiledRegistrar::pricer("blake2_compression"), + PrecompiledRegistrar::executor("blake2_compression"))}); + assert(m_precompiledContract); + + auto sysConfig = std::make_shared(); + auto consensusPrecompiled = std::make_shared(m_hashImpl); + auto tableManagerPrecompiled = + std::make_shared(m_hashImpl); + auto kvTablePrecompiled = std::make_shared(m_hashImpl); + auto tablePrecompiled = std::make_shared(m_hashImpl); + + // in EVM + m_constantPrecompiled->insert({SYS_CONFIG_ADDRESS, sysConfig}); + m_constantPrecompiled->insert({CONSENSUS_ADDRESS, consensusPrecompiled}); + m_constantPrecompiled->insert({TABLE_MANAGER_ADDRESS, tableManagerPrecompiled}); + m_constantPrecompiled->insert({KV_TABLE_ADDRESS, kvTablePrecompiled}); + m_constantPrecompiled->insert({TABLE_ADDRESS, tablePrecompiled}); + m_constantPrecompiled->insert( + {DAG_TRANSFER_ADDRESS, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {CRYPTO_ADDRESS, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {BFS_ADDRESS, std::make_shared(m_hashImpl)}); + /// auth precompiled + if (m_isAuthCheck) + { + m_constantPrecompiled->insert({AUTH_MANAGER_ADDRESS, + std::make_shared(m_hashImpl, m_isWasm)}); + m_constantPrecompiled->insert({AUTH_CONTRACT_MGR_ADDRESS, + std::make_shared(m_hashImpl, m_isWasm)}); + } + + + if (m_blockVersion >= (uint32_t)protocol::BlockVersion::V3_2_VERSION) + { + m_constantPrecompiled->insert( + {CAST_ADDRESS, std::make_shared(GlobalHashImpl::g_hashImpl)}); + } + if (m_blockVersion >= static_cast(BlockVersion::V3_1_VERSION)) + { + m_constantPrecompiled->insert( + {ACCOUNT_MGR_ADDRESS, std::make_shared()}); + m_constantPrecompiled->insert({ACCOUNT_ADDRESS, std::make_shared()}); + } + + m_constantPrecompiled->insert( + {GROUP_SIG_ADDRESS, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {RING_SIG_ADDRESS, std::make_shared(m_hashImpl)}); + + set builtIn = {CRYPTO_ADDRESS, GROUP_SIG_ADDRESS, RING_SIG_ADDRESS}; + m_builtInPrecompiled = make_shared>(builtIn); + + // create the zkp-precompiled + m_constantPrecompiled->insert( + {DISCRETE_ZKP_ADDRESS, std::make_shared(m_hashImpl)}); + + + // test precompiled + CpuHeavyPrecompiled::registerPrecompiled(m_constantPrecompiled, m_hashImpl); + SmallBankPrecompiled::registerPrecompiled(m_constantPrecompiled, m_hashImpl); +} + +void TransactionExecutor::initWasmEnvironment() +{ + m_builtInPrecompiled = std::make_shared>(); + m_constantPrecompiled = + std::make_shared>>(); + + auto sysConfig = std::make_shared(); + auto consensusPrecompiled = std::make_shared(m_hashImpl); + auto tableManagerPrecompiled = + std::make_shared(m_hashImpl); + auto kvTablePrecompiled = std::make_shared(m_hashImpl); + auto tablePrecompiled = std::make_shared(m_hashImpl); + + // in WASM + m_constantPrecompiled->insert({SYS_CONFIG_NAME, sysConfig}); + m_constantPrecompiled->insert({CONSENSUS_NAME, consensusPrecompiled}); + m_constantPrecompiled->insert({TABLE_MANAGER_NAME, tableManagerPrecompiled}); + m_constantPrecompiled->insert({KV_TABLE_NAME, kvTablePrecompiled}); + m_constantPrecompiled->insert({TABLE_NAME, tablePrecompiled}); + m_constantPrecompiled->insert( + {DAG_TRANSFER_NAME, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert({CRYPTO_NAME, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {BFS_NAME, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {GROUP_SIG_NAME, std::make_shared(m_hashImpl)}); + m_constantPrecompiled->insert( + {RING_SIG_NAME, std::make_shared(m_hashImpl)}); + if (m_isAuthCheck) + { + m_constantPrecompiled->insert({AUTH_MANAGER_NAME, + std::make_shared(m_hashImpl, m_isWasm)}); + m_constantPrecompiled->insert({AUTH_CONTRACT_MGR_ADDRESS, + std::make_shared(m_hashImpl, m_isWasm)}); + } + + if (m_blockVersion >= (uint32_t)protocol::BlockVersion::V3_2_VERSION) + { + m_constantPrecompiled->insert( + {CAST_NAME, std::make_shared(GlobalHashImpl::g_hashImpl)}); + } + if (m_blockVersion >= static_cast(BlockVersion::V3_1_VERSION)) + { + m_constantPrecompiled->insert( + {ACCOUNT_MANAGER_NAME, std::make_shared()}); + m_constantPrecompiled->insert({ACCOUNT_ADDRESS, std::make_shared()}); + } + + set builtIn = {CRYPTO_NAME, GROUP_SIG_NAME, RING_SIG_NAME}; + m_builtInPrecompiled = make_shared>(builtIn); + // create the zkp-precompiled + m_constantPrecompiled->insert( + {DISCRETE_ZKP_NAME, std::make_shared(m_hashImpl)}); + + // test precompiled + CpuHeavyPrecompiled::registerPrecompiled(m_constantPrecompiled, m_hashImpl); + SmallBankPrecompiled::registerPrecompiled(m_constantPrecompiled, m_hashImpl); +} + +void TransactionExecutor::initTestPrecompiledTable(storage::StorageInterface::Ptr storage) +{ + SmallBankPrecompiled::createTable(storage); + DagTransferPrecompiled::createDagTable(storage); +} + +BlockContext::Ptr TransactionExecutor::createBlockContext( + const protocol::BlockHeader::ConstPtr& currentHeader, + storage::StateStorageInterface::Ptr storage) +{ + BlockContext::Ptr context = make_shared(storage, m_ledgerCache, m_hashImpl, + currentHeader, getVMSchedule((uint32_t)currentHeader->version()), m_isWasm, m_isAuthCheck, + m_keyPageIgnoreTables); + context->setVMFactory(m_vmFactory); + if (f_onNeedSwitchEvent) + { + context->registerNeedSwitchEvent(f_onNeedSwitchEvent); + } + + return context; +} + +std::shared_ptr TransactionExecutor::createBlockContextForCall( + bcos::protocol::BlockNumber blockNumber, h256 blockHash, uint64_t timestamp, + int32_t blockVersion, storage::StateStorageInterface::Ptr storage) +{ + BlockContext::Ptr context = make_shared(storage, m_ledgerCache, m_hashImpl, + blockNumber, blockHash, timestamp, blockVersion, getVMSchedule((uint32_t)blockVersion), + m_isWasm, m_isAuthCheck); + context->setVMFactory(m_vmFactory); + return context; +} + + +void TransactionExecutor::nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) +{ + m_schedulerTermId = schedulerTermId; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + try + { + auto view = blockHeader->parentInfo(); + auto parentInfoIt = view.begin(); + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockHeader->number()) + << "NextBlockHeader request: " + << LOG_KV("blockVersion", blockHeader->version()) + << LOG_KV("schedulerTermId", schedulerTermId) + << LOG_KV("parentHash", blockHeader->number() > 0 ? + (*parentInfoIt).blockHash.abridged() : + "null"); + setBlockVersion(blockHeader->version()); + { + std::unique_lock lock(m_stateStoragesMutex); + bcos::storage::StateStorageInterface::Ptr stateStorage; + if (m_stateStorages.empty()) + { + if (m_cachedStorage) + { + stateStorage = createStateStorage(m_cachedStorage); + } + else + { + stateStorage = createStateStorage(m_backendStorage); + } + + // check storage block Number + auto storageBlockNumber = getBlockNumberInStorage(); + EXECUTOR_NAME_LOG(DEBUG) << "NextBlockHeader, executor load from backend storage, " + "check storage blockNumber" + << LOG_KV("storageBlockNumber", storageBlockNumber) + << LOG_KV("requestBlockNumber", blockHeader->number()); + // Note: skip check for sys contract deploy + if (blockHeader->number() - storageBlockNumber != 1 && + !isSysContractDeploy(blockHeader->number())) + { + auto fmt = boost::format( + "[%s] Block number mismatch in storage! request: %d, current in " + "storage: %d, trigger switch") % + m_name % blockHeader->number() % storageBlockNumber; + EXECUTOR_NAME_LOG(ERROR) << fmt; + // to trigger switch operation + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, fmt.str())); + return; + } + } + else + { + auto& prev = m_stateStorages.back(); + + // check number continuity + if (blockHeader->number() - prev.number != 1) + { + // m_stateStorages.pop_back(); + auto fmt = boost::format( + "[%s] Block number mismatch! request: %d, current: %d. trigger " + "switch.") % + m_name % blockHeader->number() % prev.number; + EXECUTOR_NAME_LOG(ERROR) << fmt; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, fmt.str())); + return; + } + + prev.storage->setReadOnly(true); + stateStorage = createStateStorage(prev.storage); + } + + if (m_blockContext) + { + m_blockContext->clear(); + } + + // set last commit state storage to blockContext, to auth read last block state + m_blockContext = createBlockContext(blockHeader, stateStorage); + m_stateStorages.emplace_back(blockHeader->number(), stateStorage); + + if (blockHeader->number() == 0) + { + initTestPrecompiledTable(stateStorage); + } + } + + // cache parentHash + if (blockHeader->number() > 0) + { + m_ledgerCache->setBlockNumber2Hash( + blockHeader->number() - 1, (*parentInfoIt).blockHash); + } + + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockHeader->number()) << "NextBlockHeader success" + << LOG_KV("number", blockHeader->number()) + << LOG_KV("parentHash", blockHeader->number() > 0 ? + (*parentInfoIt).blockHash.abridged() : + "null"); + callback(nullptr); + } + catch (std::exception& e) + { + EXECUTOR_NAME_LOG(ERROR) << "NextBlockHeader error: " << boost::diagnostic_information(e); + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "nextBlockHeader unknown error", e)); + } +} + +void TransactionExecutor::dmcExecuteTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + EXECUTOR_NAME_LOG(TRACE) << "ExecuteTransaction request" + << LOG_KV("ContextID", input->contextID()) + << LOG_KV("seq", input->seq()) + << LOG_KV("messageType", (int32_t)input->type()) + << LOG_KV("to", input->to()) << LOG_KV("create", input->create()); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + + if (!m_blockContext) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::EXECUTE_ERROR, "Execute failed with empty blockContext!"), + nullptr); + return; + } + + asyncExecute(m_blockContext, std::move(input), true, + [this, callback = std::move(callback)]( + Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + if (error) + { + std::string errorMessage = "ExecuteTransaction failed: " + error->errorMessage(); + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, errorMessage, *error), nullptr); + return; + } + + callback(std::move(error), std::move(result)); + }); +} + +void TransactionExecutor::dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + EXECUTOR_NAME_LOG(TRACE) << "dmcCall request" << LOG_KV("ContextID", input->contextID()) + << LOG_KV("seq", input->seq()) << LOG_KV("Message type", input->type()) + << LOG_KV("To", input->to()) << LOG_KV("Create", input->create()); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + + BlockContext::Ptr blockContext; + switch (input->type()) + { + case protocol::ExecutionMessage::MESSAGE: + { + auto blockHeader = m_lastCommittedBlockHeader; + if (!blockHeader) + { + auto message = "dmcCall could not get current block header, contextID: " + + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()); + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + storage::StorageInterface::Ptr prev; + + if (m_cachedStorage) + { + prev = m_cachedStorage; + } + else + { + prev = m_backendStorage; + } + + // Create a temp storage + auto storage = createStateStorage(std::move(prev), true); + + // Create a temp block context + blockContext = createBlockContextForCall( + blockHeader->number() + 1, h256(), utcTime(), m_blockVersion, std::move(storage)); + + auto inserted = m_calledContext->emplace( + std::tuple{input->contextID(), input->seq()}, CallState{blockContext}); + + if (!inserted) + { + auto message = "dmcCall error, contextID: " + + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()) + " exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + break; + } + case protocol::ExecutionMessage::FINISHED: + case protocol::ExecutionMessage::REVERT: + { + tbb::concurrent_hash_map, CallState, HashCombine>::accessor it; + m_calledContext->find(it, std::tuple{input->contextID(), input->seq()}); + + if (it.empty()) + { + auto message = "dmcCall error, contextID: " + + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()) + + " does not exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + blockContext = it->second.blockContext; + + break; + } + default: + { + auto message = + "dmcCall error, Unknown call type: " + boost::lexical_cast(input->type()); + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + + break; + } + } + + asyncExecute(std::move(blockContext), std::move(input), true, + [this, callback = std::move(callback)]( + Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + if (error) + { + std::string errorMessage = "Call failed: " + error->errorMessage(); + EXECUTOR_NAME_LOG(WARNING) + << LOG_DESC("Call error") << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, errorMessage, *error), nullptr); + return; + } + + if (result->type() == protocol::ExecutionMessage::FINISHED || + result->type() == protocol::ExecutionMessage::REVERT) + { + auto erased = + m_calledContext->erase(std::tuple{result->contextID(), result->seq()}); + + if (!erased) + { + auto message = "dmcCall error, erase contextID: " + + boost::lexical_cast(result->contextID()) + + " seq: " + boost::lexical_cast(result->seq()) + + " does not exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + } + + EXECUTOR_NAME_LOG(TRACE) + << "dmcCall success" << LOG_KV("staticCall", result->staticCall()) + << LOG_KV("from", result->from()) << LOG_KV("to", result->to()) + << LOG_KV("context", result->contextID()); + callback(std::move(error), std::move(result)); + }); +} + +void TransactionExecutor::executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + EXECUTOR_NAME_LOG(TRACE) << "ExecuteTransaction request" + << LOG_KV("ContextID", input->contextID()) + << LOG_KV("seq", input->seq()) + << LOG_KV("messageType", (int32_t)input->type()) + << LOG_KV("to", input->to()) << LOG_KV("create", input->create()); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + + if (!m_blockContext) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::EXECUTE_ERROR, "Execute failed with empty blockContext!"), + nullptr); + return; + } + + asyncExecute(m_blockContext, std::move(input), false, + [this, callback = std::move(callback)]( + Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + if (error) + { + std::string errorMessage = "ExecuteTransaction failed: " + error->errorMessage(); + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, errorMessage, *error), nullptr); + return; + } + + callback(std::move(error), std::move(result)); + }); +} + +void TransactionExecutor::call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + EXECUTOR_NAME_LOG(TRACE) << "Call request" << LOG_KV("ContextID", input->contextID()) + << LOG_KV("seq", input->seq()) << LOG_KV("Message type", input->type()) + << LOG_KV("To", input->to()) << LOG_KV("Create", input->create()); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + + BlockContext::Ptr blockContext; + switch (input->type()) + { + case protocol::ExecutionMessage::MESSAGE: + { + auto blockHeader = m_lastCommittedBlockHeader; + if (!blockHeader) + { + auto message = "call could not get current block header, contextID: " + + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()); + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + storage::StorageInterface::Ptr prev; + + if (m_cachedStorage) + { + prev = m_cachedStorage; + } + else + { + prev = m_backendStorage; + } + + // Create a temp storage + auto storage = createStateStorage(std::move(prev), true); + + // Create a temp block context + blockContext = createBlockContextForCall( + blockHeader->number() + 1, h256(), utcTime(), m_blockVersion, std::move(storage)); + + auto inserted = m_calledContext->emplace( + std::tuple{input->contextID(), input->seq()}, CallState{blockContext}); + + if (!inserted) + { + auto message = + "Call error, contextID: " + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()) + " exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + break; + } + case protocol::ExecutionMessage::FINISHED: + case protocol::ExecutionMessage::REVERT: + { + tbb::concurrent_hash_map, CallState, HashCombine>::accessor it; + m_calledContext->find(it, std::tuple{input->contextID(), input->seq()}); + + if (it.empty()) + { + auto message = + "Call error, contextID: " + boost::lexical_cast(input->contextID()) + + " seq: " + boost::lexical_cast(input->seq()) + " does not exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + + blockContext = it->second.blockContext; + + break; + } + default: + { + auto message = + "Call error, Unknown call type: " + boost::lexical_cast(input->type()); + EXECUTOR_NAME_LOG(ERROR) << message; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + + break; + } + } + + asyncExecute(std::move(blockContext), std::move(input), false, + [this, callback = std::move(callback)]( + Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + if (error) + { + std::string errorMessage = "Call failed: " + error->errorMessage(); + EXECUTOR_NAME_LOG(WARNING) + << LOG_DESC("Call error") << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, errorMessage, *error), nullptr); + return; + } + + if (result->type() == protocol::ExecutionMessage::FINISHED || + result->type() == protocol::ExecutionMessage::REVERT) + { + auto erased = + m_calledContext->erase(std::tuple{result->contextID(), result->seq()}); + + if (!erased) + { + auto message = "Call error, erase contextID: " + + boost::lexical_cast(result->contextID()) + + " seq: " + boost::lexical_cast(result->seq()) + + " does not exists"; + EXECUTOR_NAME_LOG(ERROR) << message; + + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, message), nullptr); + return; + } + } + + EXECUTOR_NAME_LOG(TRACE) << "Call success" << LOG_KV("staticCall", result->staticCall()) + << LOG_KV("from", result->from()) << LOG_KV("to", result->to()) + << LOG_KV("context", result->contextID()); + callback(std::move(error), std::move(result)); + }); +} + +void TransactionExecutor::executeTransactionsInternal(std::string contractAddress, + gsl::span inputs, bool useCoroutine, + std::function)> + _callback) +{ + if (!m_blockContext) + { + _callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::EXECUTE_ERROR, "Execute failed with empty blockContext!"), + {}); + return; + } + + auto requestTimestamp = utcTime(); + auto txNum = inputs.size(); + auto blockNumber = m_blockContext->number(); + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockNumber) << "executeTransactionsInternal request" + << LOG_KV("useCoroutine", useCoroutine) << LOG_KV("txNum", txNum) + << LOG_KV("contractAddress", contractAddress) + << LOG_KV("requestTimestamp", requestTimestamp); + + auto callback = [this, useCoroutine, _callback = _callback, requestTimestamp, blockNumber, + txNum, contractAddress](bcos::Error::UniquePtr error, + std::vector outputs) { + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockNumber) + << "executeTransactionsInternal response" + << LOG_KV("useCoroutine", useCoroutine) << LOG_KV("txNum", txNum) + << LOG_KV("outputNum", outputs.size()) + << LOG_KV("contractAddress", contractAddress) + << LOG_KV("requestTimestamp", requestTimestamp) + << LOG_KV("msg", error ? error->errorMessage() : "ok") + << LOG_KV("timeCost", utcTime() - requestTimestamp); + _callback(std::move(error), std::move(outputs)); + }; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), {}); + return; + } + + auto recoredT = utcTime(); + auto startT = utcTime(); + // for fill block + auto txHashes = make_shared(); + std::vector indexes; + auto fillInputs = std::make_shared>(); + + // final result + auto callParametersList = + std::make_shared>(inputs.size()); + + bool isStaticCall = true; + + std::mutex writeMutex; + tbb::parallel_for(tbb::blocked_range(0U, inputs.size()), [&, this](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& params = inputs[i]; + + if (!params->staticCall()) + { + isStaticCall = false; + } + + switch (params->type()) + { + case ExecutionMessage::TXHASH: + { + std::unique_lock lock(writeMutex); + txHashes->emplace_back(params->transactionHash()); + indexes.emplace_back(i); + fillInputs->emplace_back(std::move(params)); + + break; + } + case ExecutionMessage::MESSAGE: + case bcos::protocol::ExecutionMessage::REVERT: + case bcos::protocol::ExecutionMessage::FINISHED: + case bcos::protocol::ExecutionMessage::KEY_LOCK: + { + callParametersList->at(i) = createCallParameters(*params, params->staticCall()); + break; + } + default: + { + auto message = + (boost::format("Unsupported message type: %d") % params->type()).str(); + EXECUTOR_NAME_LOG(ERROR) + << BLOCK_NUMBER(blockNumber) << "DAG Execute error, " << message; + // callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::DAG_ERROR, message), {}); + break; + } + } + } + }); + + if (isStaticCall) + { + EXECUTOR_NAME_LOG(FATAL) + << "executeTransactionsInternal() only handle non static transactions but " + "receive static call"; + assert(false); + } + + auto prepareT = utcTime() - startT; + startT = utcTime(); + + if (!txHashes->empty()) + { + m_txpool->asyncFillBlock(txHashes, + [this, startT, useCoroutine, contractAddress, indexes = std::move(indexes), + fillInputs = std::move(fillInputs), + callParametersList = std::move(callParametersList), callback = std::move(callback), + txHashes, + blockNumber](Error::Ptr error, protocol::TransactionsPtr transactions) mutable { + auto fillTxsT = (utcTime() - startT); + + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + + if (error) + { + auto errorMessage = "[" + m_name + "] asyncFillBlock failed"; + EXECUTOR_NAME_LOG(ERROR) + << BLOCK_NUMBER(blockNumber) << errorMessage << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + ExecuteError::DAG_ERROR, errorMessage, *error), + {}); + return; + } + auto recordT = utcTime(); + tbb::parallel_for(tbb::blocked_range(0U, transactions->size()), + [this, &transactions, &callParametersList, &indexes, &fillInputs]( + auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + assert(transactions->at(i)); + callParametersList->at(indexes[i]) = + createCallParameters(*fillInputs->at(i), *transactions->at(i)); + } + }); + + auto prepareT = utcTime() - recordT; + recordT = utcTime(); + + auto executiveFlow = + getExecutiveFlow(m_blockContext, contractAddress, useCoroutine); + executiveFlow->submit(callParametersList); + + asyncExecuteExecutiveFlow(executiveFlow, + [callback = std::move(callback)](bcos::Error::UniquePtr&& error, + std::vector&& messages) { + callback(std::move(error), std::move(messages)); + }); + + EXECUTOR_NAME_LOG(INFO) + << BLOCK_NUMBER(blockNumber) + << LOG_DESC("executeTransactionsInternal after fillblock") + << LOG_KV("useCoroutine", useCoroutine) << LOG_KV("fillTxsT", fillTxsT) + << LOG_KV("prepareT", prepareT) << LOG_KV("dmcT", (utcTime() - recordT)); + }); + } + else + { + auto executiveFlow = getExecutiveFlow(m_blockContext, contractAddress, useCoroutine); + executiveFlow->submit(callParametersList); + + asyncExecuteExecutiveFlow(executiveFlow, + [callback = std::move(callback)](bcos::Error::UniquePtr&& error, + std::vector&& messages) { + callback(std::move(error), std::move(messages)); + }); + } + + EXECUTOR_NAME_LOG(TRACE) << LOG_DESC("executeTransactionsInternal") + << LOG_KV("useCoroutine", useCoroutine) << LOG_KV("prepareT", prepareT) + << LOG_KV("total", (utcTime() - recoredT)); +} + +void TransactionExecutor::executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + _callback) +{ + executeTransactionsInternal( + std::move(contractAddress), std::move(inputs), false, std::move(_callback)); +} + +void TransactionExecutor::dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + _callback) +{ + executeTransactionsInternal( + std::move(contractAddress), std::move(inputs), true, std::move(_callback)); +} + +void TransactionExecutor::getHash(bcos::protocol::BlockNumber number, + std::function callback) +{ + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(number) << "GetTableHashes"; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), {}); + return; + } + + if (m_stateStorages.empty()) + { + EXECUTOR_NAME_LOG(ERROR) << "GetTableHashes error: No uncommitted state"; + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::GETHASH_ERROR, "No uncommitted state"), + crypto::HashType()); + return; + } + + auto& last = m_stateStorages.back(); + if (last.number != number) + { + auto errorMessage = + "GetTableHashes error: Request blockNumber: " + + boost::lexical_cast(number) + + " not equal to last blockNumber: " + boost::lexical_cast(last.number); + + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::GETHASH_ERROR, errorMessage), crypto::HashType()); + + return; + } + + // remove suicides beforehand + m_blockContext->killSuicides(); + + auto hash = last.storage->hash(m_hashImpl); + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(number) << "GetTableHashes success" + << LOG_KV("hash", hash.hex()); + + callback(nullptr, std::move(hash)); +} + +void TransactionExecutor::dagExecuteTransactions( + gsl::span inputs, + std::function)> + _callback) +{ + if (!m_blockContext) + { + _callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::EXECUTE_ERROR, "Execute failed with empty blockContext!"), + {}); + return; + } + + auto requestTimestamp = utcTime(); + auto txNum = inputs.size(); + auto blockNumber = m_blockContext->number(); + EXECUTOR_NAME_LOG(INFO) << "dagExecuteTransactions request" + << LOG_KV("blockNumber", blockNumber) << LOG_KV("txNum", txNum) + << LOG_KV("requestTimestamp", requestTimestamp); + + auto callback = [this, _callback = _callback, requestTimestamp, blockNumber, txNum]( + bcos::Error::UniquePtr error, + std::vector outputs) { + EXECUTOR_NAME_LOG(DEBUG) << "dagExecuteTransactions response" + << LOG_KV("blockNumber", blockNumber) << LOG_KV("txNum", txNum) + << LOG_KV("outputNum", outputs.size()) + << LOG_KV("requestTimestamp", requestTimestamp) + << LOG_KV("msg", error ? error->errorMessage() : "ok") + << LOG_KV("timeCost", utcTime() - requestTimestamp); + _callback(std::move(error), std::move(outputs)); + }; + + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), {}); + return; + } + + auto recoredT = utcTime(); + auto startT = utcTime(); + // for fill block + auto txHashes = make_shared(); + std::vector indexes; + auto fillInputs = std::make_shared>(); + + // final result + auto callParametersList = + std::make_shared>(inputs.size()); + +#pragma omp parallel for + for (auto i = 0u; i < inputs.size(); ++i) + { + auto& params = inputs[i]; + switch (params->type()) + { + case ExecutionMessage::TXHASH: + { +#pragma omp critical + { + txHashes->emplace_back(params->transactionHash()); + indexes.emplace_back(i); + fillInputs->emplace_back(std::move(params)); + } + + break; + } + case ExecutionMessage::MESSAGE: + { + callParametersList->at(i) = createCallParameters(*params, false); + break; + } + default: + { + auto message = (boost::format("Unsupported message type: %d") % params->type()).str(); + EXECUTOR_NAME_LOG(ERROR) << "DAG Execute error, " << message; + // callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::DAG_ERROR, message), {}); + break; + } + } + } + auto prepareT = utcTime() - startT; + startT = utcTime(); + if (!txHashes->empty()) + { + m_txpool->asyncFillBlock(txHashes, + [this, startT, indexes = std::move(indexes), fillInputs = std::move(fillInputs), + callParametersList = std::move(callParametersList), callback = std::move(callback), + txHashes, + blockNumber](Error::Ptr error, protocol::TransactionsPtr transactions) mutable { + auto fillTxsT = utcTime() - startT; + + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + auto errorMessage = "[" + m_name + "] asyncFillBlock failed"; + EXECUTOR_NAME_LOG(ERROR) + << BLOCK_NUMBER(blockNumber) << errorMessage << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + ExecuteError::DAG_ERROR, errorMessage, *error), + {}); + return; + } + auto recordT = utcTime(); +#pragma omp parallel for + for (size_t i = 0; i < transactions->size(); ++i) + { + assert(transactions->at(i)); + callParametersList->at(indexes[i]) = + createCallParameters(*fillInputs->at(i), *transactions->at(i)); + } + auto prepareT = utcTime() - recordT; + recordT = utcTime(); + dagExecuteTransactionsInternal(*callParametersList, std::move(callback)); + + EXECUTOR_NAME_LOG(INFO) + << LOG_DESC("dagExecuteTransactionsInternal after fillblock") + << LOG_KV("fillTxsT", fillTxsT) << LOG_KV("prepareT", prepareT) + << LOG_KV("dagT", (utcTime() - recordT)); + }); + } + else + { + dagExecuteTransactionsInternal(*callParametersList, std::move(callback)); + } + + EXECUTOR_NAME_LOG(INFO) << LOG_DESC("dagExecuteTransactions") << LOG_KV("prepareT", prepareT) + << LOG_KV("total", (utcTime() - recoredT)) + << LOG_KV("inputSize", inputs.size()); +} + +bytes getComponentBytes(size_t index, const std::string& typeName, const bytesConstRef& data) +{ + size_t indexOffset = index * 32; + auto header = bytes(data.begin() + indexOffset, data.begin() + indexOffset + 32); + if (typeName == "string" || typeName == "bytes") + { + u256 u = fromBigEndian(header); + auto offset = static_cast(u); + auto rawData = data.getCroppedData(offset); + auto len = static_cast( + fromBigEndian(bytes(rawData.begin(), rawData.begin() + 32))); + return bytes(rawData.begin() + 32, rawData.begin() + 32 + static_cast(len)); + } + return header; +} + +std::shared_ptr> TransactionExecutor::extractConflictFields( + const FunctionAbi& functionAbi, const CallParameters& params, + std::shared_ptr _blockContext) +{ + if (functionAbi.conflictFields.empty()) + { + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") + << LOG_DESC("conflictFields is empty") + << LOG_KV("address", params.senderAddress) + << LOG_KV("functionName", functionAbi.name); + return nullptr; + } + + const auto& to = params.receiveAddress; + auto hasher = boost::hash(); + auto toHash = hasher(to); + + auto conflictFields = make_shared>(); + + for (auto& conflictField : functionAbi.conflictFields) + { + auto criticalKey = bytes(); + + size_t slot = toHash; + if (conflictField.slot.has_value()) + { + slot += static_cast(conflictField.slot.value()); + } + criticalKey.insert(criticalKey.end(), (uint8_t*)&slot, (uint8_t*)&slot + sizeof(slot)); + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") << LOG_KV("to", to) + << LOG_KV("functionName", functionAbi.name) + << LOG_KV("addressHash", toHash) << LOG_KV("slot", slot); + + switch (conflictField.kind) + { + case All: + { + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") << LOG_DESC("use `All`"); + return nullptr; + } + case Len: + { + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") << LOG_DESC("use `Len`"); + break; + } + case Env: + { + assert(conflictField.value.size() == 1); + + auto envKind = conflictField.value[0]; + switch (envKind) + { + case EnvKind::Caller: + { + const auto& sender = params.senderAddress; + criticalKey.insert(criticalKey.end(), sender.begin(), sender.end()); + + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") + << LOG_DESC("use `Caller`") << LOG_KV("caller", sender); + break; + } + case EnvKind::Origin: + { + const auto& sender = params.origin; + criticalKey.insert(criticalKey.end(), sender.begin(), sender.end()); + + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") + << LOG_DESC("use `Origin`") << LOG_KV("origin", sender); + break; + } + case EnvKind::Now: + { + auto now = _blockContext->timestamp(); + auto bytes = static_cast(static_cast(&now)); + criticalKey.insert(criticalKey.end(), bytes, bytes + sizeof(now)); + + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("extractConflictFields") + << LOG_DESC("use `Now`") << LOG_KV("now", now); + break; + } + case EnvKind::BlockNumber: + { + auto blockNumber = _blockContext->number(); + auto bytes = static_cast(static_cast(&blockNumber)); + criticalKey.insert(criticalKey.end(), bytes, bytes + sizeof(blockNumber)); + + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("extractConflictFields") << LOG_DESC("use `BlockNumber`") + << LOG_KV("functionName", functionAbi.name) + << LOG_KV("blockNumber", blockNumber); + break; + } + case EnvKind::Addr: + { + criticalKey.insert(criticalKey.end(), to.begin(), to.end()); + + EXECUTOR_NAME_LOG(DEBUG) << LOG_BADGE("extractConflictFields") + << LOG_DESC("use `Addr`") << LOG_KV("addr", to); + break; + } + default: + { + EXECUTOR_NAME_LOG(ERROR) << LOG_BADGE("unknown env kind in conflict field") + << LOG_KV("envKind", envKind); + return nullptr; + } + } + break; + } + case Params: + { + assert(!conflictField.value.empty()); + const ParameterAbi* paramAbi = nullptr; + auto components = &functionAbi.inputs; + auto inputData = ref(params.data).getCroppedData(4).toBytes(); + if (_blockContext->isWasm()) + { + auto startPos = 0u; + for (auto segment : conflictField.value) + { + if (segment >= components->size()) + { + return nullptr; + } + + for (auto i = 0u; i < segment; ++i) + { + auto length = scaleEncodingLength(components->at(i), inputData, startPos); + if (!length.has_value()) + { + return nullptr; + } + startPos += length.value(); + } + paramAbi = &components->at(segment); + components = ¶mAbi->components; + } + auto length = scaleEncodingLength(*paramAbi, inputData, startPos); + if (!length.has_value()) + { + return nullptr; + } + assert(startPos + length.value() <= inputData.size()); + bytes var( + inputData.begin() + startPos, inputData.begin() + startPos + length.value()); + criticalKey.insert(criticalKey.end(), var.begin(), var.end()); + } + else + { // evm + auto index = conflictField.value[0]; + auto typeName = functionAbi.flatInputs[index]; + if (typeName.empty()) + { + return nullptr; + } + auto out = getComponentBytes(index, typeName, ref(params.data).getCroppedData(4)); + criticalKey.insert(criticalKey.end(), out.begin(), out.end()); + } + + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("extractConflictFields") << LOG_DESC("use `Params`") + << LOG_KV("functionName", functionAbi.name) + << LOG_KV("criticalKey", toHexStringWithPrefix(criticalKey)); + break; + } + case Const: + { + criticalKey.insert( + criticalKey.end(), conflictField.value.begin(), conflictField.value.end()); + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("extractConflictFields") << LOG_DESC("use `Const`") + << LOG_KV("functionName", functionAbi.name) + << LOG_KV("criticalKey", toHexStringWithPrefix(criticalKey)); + break; + } + case None: + { + EXECUTOR_NAME_LOG(DEBUG) << LOG_BADGE("extractConflictFields") << LOG_DESC("use `None`") + << LOG_KV("functionName", functionAbi.name) + << LOG_KV("criticalKey", toHexStringWithPrefix(criticalKey)); + break; + } + default: + { + EXECUTOR_NAME_LOG(ERROR) << LOG_BADGE("unknown conflict field kind") + << LOG_KV("conflictFieldKind", conflictField.kind); + return nullptr; + } + } + + conflictFields->emplace_back(std::move(criticalKey)); + } + return conflictFields; +} + +void TransactionExecutor::dagExecuteTransactionsInternal( + gsl::span> inputs, + std::function)> + callback) +{ + auto recordT = utcTime(); + auto startT = utcTime(); + + auto transactionsNum = inputs.size(); + auto executionResults = vector(transactionsNum); + + CriticalFields::Ptr txsCriticals = make_shared(transactionsNum); + + mutex tableMutex; + + // parallel to extract critical fields + tbb::parallel_for(tbb::blocked_range(0, transactionsNum), + [&](const tbb::blocked_range& range) { + try + { + for (auto i = range.begin(); i != range.end(); ++i) + { + auto defaultExecutionResult = + m_executionMessageFactory->createExecutionMessage(); + executionResults[i].swap(defaultExecutionResult); + + const auto& params = inputs[i]; + + auto to = params->receiveAddress; + const auto& input = params->data; + + if (params->create) + { + executionResults[i] = toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::SEND_BACK); + continue; + } + CriticalFields::CriticalFieldPtr conflictFields = nullptr; + auto selector = ref(input).getCroppedData(0, 4); + auto abiKey = bytes(to.cbegin(), to.cend()); + abiKey.insert(abiKey.end(), selector.begin(), selector.end()); + // if precompiled + auto executiveFactory = + std::make_shared(m_blockContext, m_precompiledContract, + m_constantPrecompiled, m_builtInPrecompiled, m_gasInjector); + auto executive = executiveFactory->build( + params->codeAddress, params->contextID, params->seq, false); + auto p = executive->getPrecompiled(params->receiveAddress); + if (p) + { + // Precompile transaction + if (p->isParallelPrecompiled()) + { + auto criticals = + vector(p->getParallelTag(ref(params->data), m_isWasm)); + conflictFields = make_shared>(); + for (string& critical : criticals) + { + critical += params->receiveAddress; + conflictFields->push_back(bytes((uint8_t*)critical.data(), + (uint8_t*)critical.data() + critical.size())); + } + } + else + { + // Note: must be sure that the log accessed data should be valid + // always + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("the precompiled can't be parallel") + << LOG_KV("address", to); + executionResults[i] = toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::SEND_BACK); + continue; + } + } + else + { + auto cacheHandle = m_abiCache->lookup(abiKey); + // find FunctionAbi in cache first + if (!cacheHandle.isValid()) + { + EXECUTOR_NAME_LOG(TRACE) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("No ABI found in cache, try to load") + << LOG_KV("abiKey", toHexStringWithPrefix(abiKey)); + + std::lock_guard guard(tableMutex); + + cacheHandle = m_abiCache->lookup(abiKey); + if (cacheHandle.isValid()) + { + EXECUTOR_NAME_LOG(TRACE) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("ABI had been loaded by other workers") + << LOG_KV("abiKey", toHexStringWithPrefix(abiKey)); + auto& functionAbi = cacheHandle.value(); + conflictFields = + extractConflictFields(functionAbi, *params, m_blockContext); + } + else + { + auto storage = m_blockContext->storage(); + + auto tableName = "/apps/" + string(to); + + auto table = storage->openTable(tableName); + if (!table.has_value()) + { + executionResults[i] = toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::REVERT); + EXECUTOR_NAME_LOG(INFO) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("No ABI found, please deploy first") + << LOG_KV("tableName", tableName); + continue; + } + // get abi json + // new logic + std::string_view abiStr; + if (m_blockContext->blockVersion() >= + uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + // get codehash + auto entry = table->getRow(ACCOUNT_CODE_HASH); + if (!entry || entry->get().empty()) + { + executionResults[i] = + toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::SEND_BACK); + EXECUTOR_NAME_LOG(INFO) + << "No codeHash found, please deploy first " + << LOG_KV("tableName", tableName); + continue; + } + + auto codeHash = entry->getField(0); + + // get abi according to codeHash + auto abiTable = + storage->openTable(bcos::ledger::SYS_CONTRACT_ABI); + auto abiEntry = abiTable->getRow(codeHash); + if (!abiEntry || abiEntry->get().empty()) + { + abiEntry = table->getRow(ACCOUNT_ABI); + if (!abiEntry || abiEntry->get().empty()) + { + executionResults[i] = + toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType( + ExecutionMessage::SEND_BACK); + EXECUTOR_NAME_LOG(INFO) + << "No ABI found, please deploy first " + << LOG_KV("tableName", tableName); + continue; + } + } + abiStr = abiEntry->getField(0); + } + else + { + // old logic + auto entry = table->getRow(ACCOUNT_ABI); + abiStr = entry->getField(0); + } + bool isSmCrypto = + m_hashImpl->getHashImplType() == crypto::HashImplType::Sm3Hash; + + EXECUTOR_NAME_LOG(TRACE) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("ABI loaded") << LOG_KV("address", to) + << LOG_KV("selector", toHexString(selector)) + << LOG_KV("ABI", abiStr); + auto functionAbi = FunctionAbi::deserialize( + abiStr, selector.toBytes(), isSmCrypto); + if (!functionAbi) + { + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("ABI deserialize failed") + << LOG_KV("address", to) << LOG_KV("ABI", abiStr); + executionResults[i] = toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::SEND_BACK); + // If abi is not valid, we don't impact the cache. In such a + // situation, if the caller invokes this method over and + // over again, executor will read the contract table + // repeatedly, which may cause performance loss. But we + // think occurrence of invalid abi is impossible in actual + // situations. + continue; + } + + auto abiPtr = functionAbi.get(); + if (m_abiCache->insert(abiKey, abiPtr, &cacheHandle)) + { + // If abi object had been inserted into the cache + // successfully, the cache will take charge of life time + // management of the object. After this object being + // eliminated, the cache will delete its memory storage. + std::ignore = functionAbi.release(); + } + conflictFields = + extractConflictFields(*abiPtr, *params, m_blockContext); + } + } + else + { + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("Found ABI in cache") << LOG_KV("address", to) + << LOG_KV("abiKey", toHexStringWithPrefix(abiKey)); + auto& functionAbi = cacheHandle.value(); + conflictFields = + extractConflictFields(functionAbi, *params, m_blockContext); + } + } + if (conflictFields == nullptr) + { + EXECUTOR_NAME_LOG(DEBUG) + << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("The transaction can't be executed concurrently") + << LOG_KV("address", to) + << LOG_KV("abiKey", toHexStringWithPrefix(abiKey)); + executionResults[i] = toExecutionResult(std::move(inputs[i])); + executionResults[i]->setType(ExecutionMessage::SEND_BACK); + continue; + } + txsCriticals->put(i, std::move(conflictFields)); + } + } + catch (exception& e) + { + EXECUTOR_NAME_LOG(ERROR) << LOG_BADGE("dagExecuteTransactionsInternal") + << LOG_DESC("Error during parallel extractConflictFields") + << LOG_KV("EINFO", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION( + BCOS_ERROR_WITH_PREV(-1, "Error while extractConflictFields", e)); + } + }); + auto dagInitT = utcTime() - startT; + startT = utcTime(); + // DAG run + try + { + // DAG run + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(m_blockContext->number()) + << LOG_DESC("begin executeTransactionsWithCriticals") + << LOG_KV("txsCriticalsSize", txsCriticals->size()); + executeTransactionsWithCriticals(txsCriticals, inputs, executionResults); + } + catch (exception& e) + { + EXECUTOR_NAME_LOG(ERROR) << LOG_BADGE("executeBlock") + << LOG_DESC("Error during dag execution") + << LOG_KV("EINFO", boost::diagnostic_information(e)); + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::CALL_ERROR, boost::diagnostic_information(e)), + vector{}); + return; + } + EXECUTOR_NAME_LOG(INFO) << LOG_DESC("dagExecuteTransactions") << LOG_KV("dagInitT", dagInitT) + << LOG_KV("dagRunT", (utcTime() - startT)) + << LOG_KV("totalCost", (utcTime() - recordT)); + callback(nullptr, std::move(executionResults)); +} + +void TransactionExecutor::prepare( + const TwoPCParams& params, std::function callback) +{ + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(params.number) << "Prepare request"; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + auto first = m_stateStorages.begin(); + if (first == m_stateStorages.end()) + { + const auto* errorMessage = "Prepare error: empty stateStorages"; + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(-1, errorMessage)); + + return; + } + + if (first->number != params.number) + { + auto errorMessage = + "Prepare error: Request blockNumber: " + + boost::lexical_cast(params.number) + + " not equal to last blockNumber: " + boost::lexical_cast(first->number) + + " trigger switch"; + + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, errorMessage)); + + return; + } + + bcos::protocol::TwoPCParams storageParams{params.number, params.primaryKey, params.timestamp}; + + m_backendStorage->asyncPrepare(storageParams, *(first->storage), + [this, callback = std::move(callback), blockNumber = params.number]( + auto&& error, uint64_t, const std::string&) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + if (error) + { + auto errorMessage = "Prepare error: " + error->errorMessage(); + + EXECUTOR_NAME_LOG(ERROR) << BLOCK_NUMBER(blockNumber) << errorMessage; + callback( + BCOS_ERROR_WITH_PREV_PTR(ExecuteError::PREPARE_ERROR, errorMessage, *error)); + return; + } + + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(blockNumber) << "Prepare success"; + callback(nullptr); + }); +} + +void TransactionExecutor::commit( + const TwoPCParams& params, std::function callback) +{ + EXECUTOR_NAME_LOG(TRACE) << BLOCK_NUMBER(params.number) << "Commit request"; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + auto first = m_stateStorages.begin(); + if (first == m_stateStorages.end()) + { + auto errorMessage = "Commit error: empty stateStorages"; + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(INVALID_BLOCKNUMBER, errorMessage)); + + return; + } + + if (first->number != params.number) + { + auto errorMessage = + "Commit error: Request blockNumber: " + + boost::lexical_cast(params.number) + + " not equal to last blockNumber: " + boost::lexical_cast(first->number); + + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(INVALID_BLOCKNUMBER, errorMessage)); + + return; + } + + bcos::protocol::TwoPCParams storageParams{params.number, params.primaryKey, params.timestamp}; + m_backendStorage->asyncCommit(storageParams, [this, callback = std::move(callback), + blockNumber = params.number]( + Error::Ptr&& error, uint64_t) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + if (error) + { + auto errorMessage = "Commit error: " + error->errorMessage(); + + EXECUTOR_NAME_LOG(ERROR) << BLOCK_NUMBER(blockNumber) << errorMessage; + callback(BCOS_ERROR_WITH_PREV_PTR(ExecuteError::COMMIT_ERROR, errorMessage, *error)); + return; + } + + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockNumber) << "Commit success"; + + m_lastCommittedBlockHeader = getBlockHeaderInStorage(blockNumber); + m_ledgerCache->fetchCompatibilityVersion(); + + setBlockVersion(m_ledgerCache->ledgerConfig()->compatibilityVersion()); + removeCommittedState(); + + callback(nullptr); + }); +} + +void TransactionExecutor::rollback( + const TwoPCParams& params, std::function callback) +{ + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(params.number) << "Rollback request: "; + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + auto first = m_stateStorages.begin(); + if (first == m_stateStorages.end()) + { + auto errorMessage = "Rollback error: empty stateStorages"; + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(-1, errorMessage)); + + return; + } + + if (first->number != params.number) + { + auto errorMessage = + "Rollback error: Request blockNumber: " + + boost::lexical_cast(params.number) + + " not equal to last blockNumber: " + boost::lexical_cast(first->number) + + " trigger switch"; + + EXECUTOR_NAME_LOG(ERROR) << errorMessage; + callback(BCOS_ERROR_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, errorMessage)); + + return; + } + + bcos::protocol::TwoPCParams storageParams{params.number, params.primaryKey, params.timestamp}; + m_backendStorage->asyncRollback(storageParams, + [this, callback = std::move(callback), blockNumber = params.number](auto&& error) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running")); + return; + } + + if (error) + { + auto errorMessage = "Rollback error: " + error->errorMessage(); + + EXECUTOR_NAME_LOG(ERROR) << BLOCK_NUMBER(blockNumber) << errorMessage; + callback(BCOS_ERROR_WITH_PREV_PTR(-1, errorMessage, *error)); + return; + } + + EXECUTOR_NAME_LOG(INFO) << BLOCK_NUMBER(blockNumber) << "Rollback success"; + callback(nullptr); + }); +} + +void TransactionExecutor::reset(std::function callback) +{ + m_stateStorages.clear(); + + callback(nullptr); +} + +void TransactionExecutor::getCode( + std::string_view contract, std::function callback) +{ + EXECUTOR_NAME_LOG(INFO) << "Get code request" << LOG_KV("Contract", contract); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), {}); + return; + } + + storage::StateStorageInterface::Ptr stateStorage; + + { + std::unique_lock lock(m_stateStoragesMutex); + if (!m_stateStorages.empty()) + { + stateStorage = createStateStorage(m_stateStorages.back().storage, true); + } + } + // create temp state storage + if (!stateStorage) + { + if (m_cachedStorage) + { + stateStorage = createStateStorage(m_cachedStorage, true); + } + else + { + stateStorage = createStateStorage(m_backendStorage, true); + } + } + + std::string contractTableName = getContractTableName(contract); + + auto getCodeFromContractTable = [stateStorage, this](std::string_view contractTableName, + decltype(callback) _callback) { + stateStorage->asyncGetRow(contractTableName, ACCOUNT_CODE, + [this, callback = std::move(_callback)]( + Error::UniquePtr error, std::optional entry) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get code error: " << error->errorMessage(); + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "Get code error", *error), {}); + return; + } + + if (!entry) + { + EXECUTOR_NAME_LOG(DEBUG) << "Get code success, empty code"; + + callback(nullptr, bcos::bytes()); + return; + } + + auto code = entry->getField(0); + EXECUTOR_NAME_LOG(INFO) << "Get code success" << LOG_KV("code size", code.size()); + + auto codeBytes = bcos::bytes(code.begin(), code.end()); + callback(nullptr, std::move(codeBytes)); + }); + }; + if (m_blockVersion >= uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + auto codeHash = getCodeHash(contractTableName, stateStorage); + // asyncGetRow key should not be empty + auto codeKey = codeHash.empty() ? ACCOUNT_CODE : codeHash; + // try to get abi from SYS_CODE_BINARY first + stateStorage->asyncGetRow(bcos::ledger::SYS_CODE_BINARY, codeKey, + [this, contractTableName, callback = std::move(callback), + getCodeFromContractTable = std::move(getCodeFromContractTable)]( + Error::UniquePtr error, std::optional entry) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get code error: " << error->errorMessage(); + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "Get code error", *error), {}); + return; + } + + if (!entry) + { + EXECUTOR_NAME_LOG(DEBUG) + << "Get code success, empty code, try to search in the contract table"; + getCodeFromContractTable(contractTableName, std::move(callback)); + return; + } + + auto code = entry->getField(0); + EXECUTOR_NAME_LOG(INFO) << "Get code success" << LOG_KV("code size", code.size()); + + auto codeBytes = bcos::bytes(code.begin(), code.end()); + callback(nullptr, std::move(codeBytes)); + }); + return; + } + getCodeFromContractTable(contractTableName, std::move(callback)); +} + +void TransactionExecutor::getABI( + std::string_view contract, std::function callback) +{ + EXECUTOR_NAME_LOG(INFO) << "Get ABI request" << LOG_KV("Contract", contract); + + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(ERROR) << "TransactionExecutor is not running"; + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), {}); + return; + } + + storage::StateStorageInterface::Ptr stateStorage; + + { + std::unique_lock lock(m_stateStoragesMutex); + if (!m_stateStorages.empty()) + { + stateStorage = createStateStorage(m_stateStorages.back().storage, true); + } + } + // create temp state storage + if (!stateStorage) + { + if (m_cachedStorage) + { + stateStorage = createStateStorage(m_cachedStorage, true); + } + else + { + stateStorage = createStateStorage(m_backendStorage, true); + } + } + + + std::string contractTableName = getContractTableName(contract); + auto getAbiFromContractTable = [stateStorage, this](std::string_view contractTableName, + decltype(callback) _callback) { + stateStorage->asyncGetRow(contractTableName, ACCOUNT_ABI, + [this, callback = std::move(_callback)]( + Error::UniquePtr error, std::optional entry) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get ABI error: " << error->errorMessage(); + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "Get ABI error", *error), {}); + return; + } + + if (!entry) + { + EXECUTOR_NAME_LOG(DEBUG) << "Get ABI success, empty ABI"; + + callback(nullptr, std::string()); + return; + } + auto abi = entry->getField(0); + EXECUTOR_NAME_LOG(INFO) << "Get ABI success" << LOG_KV("ABI size", abi.size()); + callback(nullptr, std::string(abi)); + }); + }; + if (m_blockVersion >= uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + auto codeHash = getCodeHash(contractTableName, stateStorage); + // asyncGetRow key should not be empty + std::string abiKey = codeHash.empty() ? ACCOUNT_ABI : codeHash; + // try to get abi from SYS_CONTRACT_ABI first + EXECUTOR_LOG(TRACE) << LOG_DESC("get abi") << LOG_KV("abiKey", abiKey); + + stateStorage->asyncGetRow(bcos::ledger::SYS_CONTRACT_ABI, abiKey, + [this, contractTableName, callback = std::move(callback), + getAbiFromContractTable = std::move(getAbiFromContractTable)]( + Error::UniquePtr error, std::optional entry) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get ABI error: " << error->errorMessage(); + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "Get ABI error", *error), {}); + return; + } + + // when get abi from SYS_CONTRACT_ABI failed, try to get abi from contract table + if (!entry) + { + EXECUTOR_NAME_LOG(DEBUG) + << "Get ABI failed, empty entry, try to search in the contract table"; + getAbiFromContractTable(contractTableName, callback); + return; + } + + auto abi = entry->getField(0); + EXECUTOR_NAME_LOG(INFO) << "Get ABI success" << LOG_KV("ABI size", abi.size()); + callback(nullptr, std::string(abi)); + }); + return; + } + getAbiFromContractTable(contractTableName, std::move(callback)); +} + +ExecutiveFlowInterface::Ptr TransactionExecutor::getExecutiveFlow( + std::shared_ptr blockContext, std::string codeAddress, bool useCoroutine) +{ + EXECUTOR_NAME_LOG(DEBUG) << "getExecutiveFlow" << LOG_KV("codeAddress", codeAddress); + bcos::RecursiveGuard lock(x_executiveFlowLock); + ExecutiveFlowInterface::Ptr executiveFlow = blockContext->getExecutiveFlow(codeAddress); + if (executiveFlow == nullptr) + { + auto executiveFactory = std::make_shared(blockContext, + m_precompiledContract, m_constantPrecompiled, m_builtInPrecompiled, m_gasInjector); + if (!useCoroutine) + { + executiveFlow = std::make_shared(executiveFactory); + executiveFlow->setThreadPool(m_threadPool); + blockContext->setExecutiveFlow(codeAddress, executiveFlow); + } + else + { + executiveFlow = std::make_shared(executiveFactory); + executiveFlow->setThreadPool(m_threadPool); + blockContext->setExecutiveFlow(codeAddress, executiveFlow); + } + } + return executiveFlow; +} + + +void TransactionExecutor::asyncExecuteExecutiveFlow(ExecutiveFlowInterface::Ptr executiveFlow, + std::function&&)> + callback) +{ + ExecuteOutputs::Ptr allOutputs = std::make_shared(); + EXECUTOR_NAME_LOG(DEBUG) << "asyncExecuteExecutiveFlow start"; + executiveFlow->asyncRun( + // onTxReturn + [this, allOutputs, callback](CallParameters::UniquePtr output) { + auto message = toExecutionResult(std::move(output)); + allOutputs->add(std::move(message)); + }, + // onFinished + [this, allOutputs, callback](bcos::Error::UniquePtr error) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + // do nothing + if (error != nullptr) + { + EXECUTOR_NAME_LOG(ERROR) + << "ExecutiveFlow asyncRun error: " << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + m_blockContext->clear(); + callback(std::move(error), std::vector()); + } + else + { + auto messages = allOutputs->dumpAndClear(); + callback(nullptr, std::move(messages)); + } + }); +} + +void TransactionExecutor::asyncExecute(std::shared_ptr blockContext, + bcos::protocol::ExecutionMessage::UniquePtr input, bool useCoroutine, + std::function + callback) +{ + EXECUTOR_NAME_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_DESC("asyncExecute") + << LOG_KV("contextID", input->contextID()) + << LOG_KV("seq", input->seq()) + << LOG_KV("MessageType", std::to_string(input->type())) + << LOG_KV("To", input->to()) + << LOG_KV("staticCall", input->staticCall()) + << LOG_KV("Create", input->create()); + switch (input->type()) + { + case bcos::protocol::ExecutionMessage::TXHASH: + { + // Get transaction first + auto txHashes = std::make_shared(1); + (*txHashes)[0] = (input->transactionHash()); + + m_txpool->asyncFillBlock(std::move(txHashes), + [this, useCoroutine, inputPtr = input.release(), blockContext = std::move(blockContext), + callback](Error::Ptr error, bcos::protocol::TransactionsPtr transactions) mutable { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + + auto input = std::unique_ptr(inputPtr); + + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "Transaction does not exists: " + input->transactionHash().hex(), + *error), + nullptr); + return; + } + + if (!transactions || transactions->empty()) + { + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "Transaction does not exists: " + input->transactionHash().hex()), + nullptr); + return; + } + + auto tx = (*transactions)[0]; + if (!tx) + { + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "Transaction is null: " + input->transactionHash().hex()), + nullptr); + return; + } + + auto callParameters = createCallParameters(*input, *tx); + + ExecutiveFlowInterface::Ptr executiveFlow = + getExecutiveFlow(blockContext, callParameters->receiveAddress, useCoroutine); + executiveFlow->submit(std::move(callParameters)); + + asyncExecuteExecutiveFlow(executiveFlow, + [this, callback = std::move(callback)](bcos::Error::UniquePtr&& error, + std::vector&& messages) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, + "TransactionExecutor is not running"), + nullptr); + return; + } + + if (error) + { + EXECUTOR_LOG(ERROR) << "asyncExecuteExecutiveFlow error: " + << LOG_KV("msg", error->errorMessage()) + << LOG_KV("code", error->errorCode()); + callback(std::move(error), nullptr); + } + else + { + EXECUTOR_NAME_LOG(TRACE) << "asyncExecuteExecutiveFlow complete: " + << messages[0]->toString(); + callback(std::move(error), std::move(messages[0])); + } + }); + }); + break; + } + case bcos::protocol::ExecutionMessage::MESSAGE: + case bcos::protocol::ExecutionMessage::REVERT: + case bcos::protocol::ExecutionMessage::FINISHED: + case bcos::protocol::ExecutionMessage::KEY_LOCK: + { + auto callParameters = createCallParameters(*input, input->staticCall()); + ExecutiveFlowInterface::Ptr executiveFlow = + getExecutiveFlow(blockContext, callParameters->receiveAddress, useCoroutine); + executiveFlow->submit(std::move(callParameters)); + asyncExecuteExecutiveFlow(executiveFlow, + [this, callback = std::move(callback)](bcos::Error::UniquePtr&& error, + std::vector&& messages) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + ExecuteError::STOPPED, "TransactionExecutor is not running"), + {}); + return; + } + + if (error) + { + EXECUTOR_LOG(ERROR) << "asyncExecuteExecutiveFlow error: " + << LOG_KV("msg", error->errorMessage()) + << LOG_KV("code", error->errorCode()); + callback(std::move(error), nullptr); + } + else + { + EXECUTOR_NAME_LOG(TRACE) + << "asyncExecuteExecutiveFlow complete: " << messages[0]->toString(); + callback(std::move(error), std::move(messages[0])); + } + }); + + break; + } + default: + { + EXECUTOR_NAME_LOG(ERROR) << "Unknown message type: " << input->type(); + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "Unknown type" + boost::lexical_cast(input->type())), + nullptr); + return; + } + } +} + +std::function input)> +TransactionExecutor::createExternalFunctionCall( + std::function& + callback) +{ + return [this, &callback]( + const TransactionExecutive& executive, CallParameters::UniquePtr input) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::STOPPED, "TransactionExecutor is not running"), + nullptr); + return; + } + auto message = toExecutionResult(executive, std::move(input)); + callback(nullptr, std::move(message)); + }; +} + +std::unique_ptr TransactionExecutor::toExecutionResult( + const TransactionExecutive& executive, std::unique_ptr params) +{ + auto message = toExecutionResult(std::move(params)); + + message->setContextID(executive.contextID()); + message->setSeq(executive.seq()); + + return message; +} + +std::unique_ptr TransactionExecutor::toExecutionResult( + std::unique_ptr params) +{ + auto message = m_executionMessageFactory->createExecutionMessage(); + switch (params->type) + { + case CallParameters::MESSAGE: + message->setFrom(std::move(params->senderAddress)); + message->setTo(std::move(params->receiveAddress)); + message->setType(ExecutionMessage::MESSAGE); + message->setKeyLocks(std::move(params->keyLocks)); + break; + case CallParameters::KEY_LOCK: + message->setFrom(params->senderAddress); + message->setTo(std::move(params->senderAddress)); + message->setType(ExecutionMessage::KEY_LOCK); + message->setKeyLockAcquired(std::move(params->acquireKeyLock)); + message->setKeyLocks(std::move(params->keyLocks)); + + break; + case CallParameters::FINISHED: + // Response message, Swap the from and to + message->setFrom(std::move(params->receiveAddress)); + message->setTo(std::move(params->senderAddress)); + message->setType(ExecutionMessage::FINISHED); + break; + case CallParameters::REVERT: + // Response message, Swap the from and to + message->setFrom(std::move(params->receiveAddress)); + message->setTo(std::move(params->senderAddress)); + message->setType(ExecutionMessage::REVERT); + break; + } + + message->setContextID(params->contextID); + message->setSeq(params->seq); + message->setOrigin(std::move(params->origin)); + message->setGasAvailable(params->gas); + message->setData(std::move(params->data)); + message->setStaticCall(params->staticCall); + message->setCreate(params->create); + message->setInternalCreate(params->internalCreate); + message->setInternalCall(params->internalCall); + if (params->createSalt) + { + message->setCreateSalt(*params->createSalt); + } + + message->setEvmStatus(params->evmStatus); + message->setStatus(params->status); + message->setMessage(std::move(params->message)); + message->setLogEntries(std::move(params->logEntries)); + message->setNewEVMContractAddress(std::move(params->newEVMContractAddress)); + message->setDelegateCall(params->delegateCall); + message->setDelegateCallAddress(std::move(params->codeAddress)); + message->setDelegateCallCode(std::move(params->delegateCallCode)); + message->setDelegateCallSender(std::move(params->delegateCallSender)); + + return message; +} + +void TransactionExecutor::removeCommittedState() +{ + if (m_stateStorages.empty()) + { + EXECUTOR_NAME_LOG(ERROR) << "Remove committed state failed, empty states"; + return; + } + + bcos::protocol::BlockNumber number = 0; + bcos::storage::StateStorageInterface::Ptr storage; + + { + std::unique_lock lock(m_stateStoragesMutex); + auto it = m_stateStorages.begin(); + number = it->number; + storage = it->storage; + } + + if (m_cachedStorage) + { + auto keyPageStorage = std::dynamic_pointer_cast(storage); + if (keyPageStorage) + { + EXECUTOR_NAME_LOG(INFO) + << LOG_DESC("merge keyPage to cachedStorage") << LOG_KV("number", number); + keyPageStorage->setReadOnly(true); + } + else + { + EXECUTOR_NAME_LOG(INFO) << "Merge state number: " << number << " to cachedStorage"; + } + + m_cachedStorage->merge(true, *storage); + + std::unique_lock lock(m_stateStoragesMutex); + auto it = m_stateStorages.begin(); + it = m_stateStorages.erase(it); + if (it != m_stateStorages.end()) + { + EXECUTOR_NAME_LOG(INFO) + << "Set state number, " << it->number << " prev to cachedStorage"; + it->storage->setPrev(m_cachedStorage); + } + } + else if (m_backendStorage) + { + std::unique_lock lock(m_stateStoragesMutex); + auto it = m_stateStorages.begin(); + EXECUTOR_NAME_LOG(DEBUG) << LOG_DESC("removeCommittedState") + << LOG_KV("commitNumber", number) + << LOG_KV("erasedStorage", it->number) + << LOG_KV("stateStorageSize", m_stateStorages.size()); + + it = m_stateStorages.erase(it); + if (it != m_stateStorages.end()) + { + it->storage->setPrev(m_backendStorage); + } + } + + m_ledgerCache->clearCacheByNumber(number); +} + +std::unique_ptr TransactionExecutor::createCallParameters( + bcos::protocol::ExecutionMessage& input, bool staticCall) +{ + auto callParameters = std::make_unique(CallParameters::MESSAGE); + callParameters->status = input.status(); + + switch (input.type()) + { + case ExecutionMessage::MESSAGE: + { + break; + } + case ExecutionMessage::REVERT: + { + callParameters->type = CallParameters::REVERT; + break; + } + case ExecutionMessage::FINISHED: + { + callParameters->type = CallParameters::FINISHED; + break; + } + case ExecutionMessage::KEY_LOCK: + { + break; + } + case ExecutionMessage::SEND_BACK: + case ExecutionMessage::TXHASH: + { + BOOST_THROW_EXCEPTION(BCOS_ERROR( + ExecuteError::EXECUTE_ERROR, "Unexpected execution message type: " + + boost::lexical_cast(input.type()))); + } + } + + callParameters->contextID = input.contextID(); + callParameters->seq = input.seq(); + constexpr static auto addressSize = Address::SIZE * 2; + if (staticCall) + { + // padding zero + callParameters->origin = std::string(addressSize - input.origin().size(), '0'); + callParameters->senderAddress = std::string(addressSize - input.from().size(), '0'); + } + callParameters->origin += input.origin(); + callParameters->senderAddress += input.from(); + callParameters->receiveAddress = input.to(); + callParameters->codeAddress = input.to(); + callParameters->create = input.create(); + callParameters->internalCreate = input.internalCreate(); + callParameters->internalCall = input.internalCall(); + callParameters->evmStatus = input.evmStatus(); + callParameters->message = input.message(); + callParameters->data = input.takeData(); + callParameters->gas = input.gasAvailable(); + callParameters->staticCall = staticCall; + callParameters->newEVMContractAddress = input.newEVMContractAddress(); + callParameters->keyLocks = input.takeKeyLocks(); + callParameters->logEntries = input.takeLogEntries(); + if (input.create()) + { + callParameters->abi = input.abi(); + } + callParameters->delegateCall = input.delegateCall(); + callParameters->delegateCallCode = input.takeDelegateCallCode(); + callParameters->delegateCallSender = input.delegateCallSender(); + if (input.delegateCall()) + { + callParameters->codeAddress = input.delegateCallAddress(); + } + + if (!m_isWasm) + { + if (callParameters->codeAddress.size() < addressSize) [[unlikely]] + { + callParameters->codeAddress.insert( + 0, callParameters->codeAddress.size() - addressSize, '0'); + } + if (callParameters->receiveAddress.size() < addressSize) [[unlikely]] + { + callParameters->receiveAddress.insert( + 0, callParameters->receiveAddress.size() - addressSize, '0'); + } + } + + return callParameters; +} + +std::unique_ptr TransactionExecutor::createCallParameters( + bcos::protocol::ExecutionMessage& input, const bcos::protocol::Transaction& tx) +{ + auto callParameters = std::make_unique(CallParameters::MESSAGE); + + callParameters->contextID = input.contextID(); + callParameters->seq = input.seq(); + callParameters->origin = toHex(tx.sender()); + callParameters->senderAddress = callParameters->origin; + callParameters->receiveAddress = input.to(); + callParameters->codeAddress = input.to(); + callParameters->gas = input.gasAvailable(); + callParameters->staticCall = input.staticCall(); + callParameters->evmStatus = input.evmStatus(); + callParameters->create = input.create(); + callParameters->internalCreate = input.internalCreate(); + callParameters->internalCall = input.internalCall(); + callParameters->message = input.message(); + callParameters->data = tx.input().toBytes(); + callParameters->keyLocks = input.takeKeyLocks(); + callParameters->logEntries = input.takeLogEntries(); + callParameters->abi = tx.abi(); + callParameters->delegateCall = false; + callParameters->delegateCallCode = bytes(); + callParameters->delegateCallSender = ""; + + if (!m_isWasm) + { + constexpr static auto addressSize = Address::SIZE * 2; + if (callParameters->codeAddress.size() < addressSize) [[unlikely]] + { + callParameters->codeAddress.insert( + 0, callParameters->codeAddress.size() - addressSize, '0'); + } + if (callParameters->receiveAddress.size() < addressSize) [[unlikely]] + { + callParameters->receiveAddress.insert( + 0, callParameters->receiveAddress.size() - addressSize, '0'); + } + } + return callParameters; +} + +void TransactionExecutor::executeTransactionsWithCriticals( + critical::CriticalFieldsInterface::Ptr criticals, + gsl::span> inputs, + vector& executionResults) +{ + // DAG run + shared_ptr txDag = make_shared(); + txDag->init(criticals, [this, &inputs, &executionResults](ID id) { + if (!m_isRunning) + { + return; + } + + auto& input = inputs[id]; + auto executiveFactory = std::make_shared(m_blockContext, + m_precompiledContract, m_constantPrecompiled, m_builtInPrecompiled, m_gasInjector); + auto executive = + executiveFactory->build(input->codeAddress, input->contextID, input->seq, false); + + EXECUTOR_NAME_LOG(TRACE) << LOG_BADGE("executeTransactionsWithCriticals") + << LOG_DESC("Start transaction") + << LOG_KV("to", input->receiveAddress) + << LOG_KV("data", toHexStringWithPrefix(input->data)); + try + { + auto output = executive->start(std::move(input)); + assert(output); + if (output->type == CallParameters::MESSAGE) + { + EXECUTOR_NAME_LOG(DEBUG) << LOG_BADGE("call/deploy in dag") + << LOG_KV("senderAddress", output->senderAddress) + << LOG_KV("codeAddress", output->codeAddress); + } + executionResults[id] = toExecutionResult(*executive, std::move(output)); + } + catch (std::exception& e) + { + EXECUTOR_NAME_LOG(ERROR) + << "executeTransactionsWithCriticals error: " << boost::diagnostic_information(e); + } + }); + + txDag->run(m_DAGThreadNum); +} + +bcos::storage::StateStorageInterface::Ptr TransactionExecutor::createStateStorage( + bcos::storage::StorageInterface::Ptr storage, bool ignoreNotExist) +{ + auto stateStorage = m_stateStorageFactory->createStateStorage(storage, m_blockVersion); + return stateStorage; +} + +protocol::BlockNumber TransactionExecutor::getBlockNumberInStorage() +{ + std::promise blockNumberFuture; + m_ledger->asyncGetBlockNumber( + [this, &blockNumberFuture](Error::Ptr error, protocol::BlockNumber number) { + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get blockNumber from storage failed"; + blockNumberFuture.set_value(-1); + } + else + { + blockNumberFuture.set_value(number); + } + }); + + return blockNumberFuture.get_future().get(); +} + +protocol::BlockHeader::Ptr TransactionExecutor::getBlockHeaderInStorage( + protocol::BlockNumber number) +{ + std::promise blockHeaderFuture; + + m_ledger->asyncGetBlockDataByNumber(number, bcos::ledger::HEADER, + [this, &blockHeaderFuture](Error::Ptr error, Block::Ptr block) { + if (error) + { + EXECUTOR_NAME_LOG(INFO) << "Get getBlockHeader from storage failed"; + blockHeaderFuture.set_value(nullptr); + } + else + { + blockHeaderFuture.set_value(block->blockHeader()); + } + }); + + + return blockHeaderFuture.get_future().get(); +} + +std::string TransactionExecutor::getCodeHash( + std::string_view tableName, storage::StateStorageInterface::Ptr const& stateStorage) +{ + std::promise codeHashPromise; + stateStorage->asyncGetRow( + tableName, ACCOUNT_CODE_HASH, [&codeHashPromise, this](auto&& error, auto&& entry) mutable { + if (error || !entry) + { + EXECUTOR_NAME_LOG(DEBUG) << "Get codeHashes success, empty codeHash"; + codeHashPromise.set_value(std::string()); + return; + } + auto codeHash = std::string(entry->getField(0)); + codeHashPromise.set_value(std::move(codeHash)); + }); + return codeHashPromise.get_future().get(); +} + + +void TransactionExecutor::stop() +{ + EXECUTOR_NAME_LOG(INFO) << "Try to stop executor"; + if (!m_isRunning) + { + EXECUTOR_NAME_LOG(INFO) << "Executor has just tried to stop"; + return; + } + m_isRunning = false; + if (m_blockContext) + { + m_blockContext->stop(); + } +} diff --git a/bcos-executor/src/executor/TransactionExecutor.h b/bcos-executor/src/executor/TransactionExecutor.h new file mode 100644 index 0000000..734d0fd --- /dev/null +++ b/bcos-executor/src/executor/TransactionExecutor.h @@ -0,0 +1,344 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief TransactionExecutor + * @file TransactionExecutor.h + * @author: xingqiangbai + * @date: 2021-05-27 + * @brief TransactionExecutor + * @file TransactionExecutor.h + * @author: ancelmo + * @date: 2021-10-16 + */ +#pragma once + +#include "../Common.h" +#include "../dag/CriticalFields.h" +#include "bcos-executor/src/vm/VMFactory.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/BlockFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/txpool/TxPoolInterface.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "tbb/concurrent_unordered_map.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace bcos +{ +namespace precompiled +{ +class Precompiled; +struct PrecompiledExecResult; +} // namespace precompiled +namespace wasm +{ +class GasInjector; +} +namespace executor +{ +enum ExecutorVersion : int32_t +{ + Version_3_0_0 = 1, +}; + +class TransactionExecutive; +class ExecutiveFlowInterface; +class BlockContext; +class PrecompiledContract; +template +class ClockCache; +class StateStorageFactory; +struct FunctionAbi; +struct CallParameters; + +using executionCallback = std::function&)>; + +class TransactionExecutor : public ParallelTransactionExecutorInterface, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + TransactionExecutor(bcos::ledger::LedgerInterface::Ptr ledger, + txpool::TxPoolInterface::Ptr txpool, storage::MergeableStorageInterface::Ptr cachedStorage, + storage::TransactionalStorageInterface::Ptr backendStorage, + protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + storage::StateStorageFactory::Ptr stateStorageFactory, bcos::crypto::Hash::Ptr hashImpl, + bool isWasm, bool isAuthCheck, std::shared_ptr vmFactory, + std::shared_ptr>> keyPageIgnoreTables, std::string name); + + ~TransactionExecutor() override = default; + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override; + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override; + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override; + + void dmcExecuteTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override; + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override; + + /* ----- XA Transaction interface Start ----- */ + + // Write data to storage uncommitted + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + // Commit uncommitted data + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + // Rollback the changes + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + /* ----- XA Transaction interface End ----- */ + + // drop all status + void reset(std::function callback) override; + void getCode(std::string_view contract, + std::function callback) override; + void getABI(std::string_view contract, + std::function callback) override; + + void start() override { m_isRunning = true; } + void stop() override; + + void registerNeedSwitchEvent(std::function event) { f_onNeedSwitchEvent = event; } + +protected: + void executeTransactionsInternal(std::string contractAddress, + gsl::span inputs, bool useCoroutine, + std::function)> + callback); + + virtual void dagExecuteTransactionsInternal(gsl::span> inputs, + std::function)> + callback); + virtual std::shared_ptr> extractConflictFields( + const FunctionAbi& functionAbi, const CallParameters& params, + std::shared_ptr _blockContext); + + virtual std::shared_ptr createBlockContext( + const protocol::BlockHeader::ConstPtr& currentHeader, + storage::StateStorageInterface::Ptr tableFactory); + + virtual std::shared_ptr createBlockContextForCall( + bcos::protocol::BlockNumber blockNumber, h256 blockHash, uint64_t timestamp, + int32_t blockVersion, storage::StateStorageInterface::Ptr tableFactory); + + void asyncExecute(std::shared_ptr blockContext, + bcos::protocol::ExecutionMessage::UniquePtr input, bool useCoroutine, + std::function + callback); + + std::unique_ptr toExecutionResult( + const TransactionExecutive& executive, std::unique_ptr params); + + std::unique_ptr toExecutionResult( + std::unique_ptr params); + + std::unique_ptr createCallParameters( + bcos::protocol::ExecutionMessage& inputs, bool staticCall); + + std::unique_ptr createCallParameters( + bcos::protocol::ExecutionMessage& input, const bcos::protocol::Transaction& tx); + + std::function input)> + createExternalFunctionCall(std::function& callback); + + + void removeCommittedState(); + + // execute transactions with criticals and return in executionResults + void executeTransactionsWithCriticals(critical::CriticalFieldsInterface::Ptr criticals, + gsl::span> inputs, + std::vector& executionResults); + + std::shared_ptr getExecutiveFlow( + std::shared_ptr blockContext, std::string codeAddress, bool useCoroutine); + + + void asyncExecuteExecutiveFlow(std::shared_ptr executiveFlow, + std::function&&)> + callback); + + + bcos::storage::StateStorageInterface::Ptr createStateStorage( + bcos::storage::StorageInterface::Ptr storage, bool ignoreNotExist = false); + + protocol::BlockNumber getBlockNumberInStorage(); + protocol::BlockHeader::Ptr getBlockHeaderInStorage(protocol::BlockNumber number); + std::string getCodeHash( + std::string_view tableName, storage::StateStorageInterface::Ptr const& stateStorage); + + std::string m_name; + bcos::ledger::LedgerInterface::Ptr m_ledger; + txpool::TxPoolInterface::Ptr m_txpool; + storage::MergeableStorageInterface::Ptr m_cachedStorage; + std::shared_ptr m_backendStorage; + protocol::ExecutionMessageFactory::Ptr m_executionMessageFactory; + storage::StateStorageFactory::Ptr m_stateStorageFactory; + std::shared_ptr m_blockContext; + crypto::Hash::Ptr m_hashImpl; + bool m_isAuthCheck = false; + std::shared_ptr> m_abiCache; + + struct State + { + State( + bcos::protocol::BlockNumber _number, bcos::storage::StateStorageInterface::Ptr _storage) + : number(_number), storage(std::move(_storage)) + {} + State(const State&) = delete; + State& operator=(const State&) = delete; + + bcos::protocol::BlockNumber number; + bcos::storage::StateStorageInterface::Ptr storage; + }; + std::list m_stateStorages; + + bcos::protocol::BlockHeader::Ptr m_lastCommittedBlockHeader = + getBlockHeaderInStorage(getBlockNumberInStorage()); + + struct HashCombine + { + size_t hash(const std::tuple& val) const + { + size_t seed = hashInt64(std::get<0>(val)); + boost::hash_combine(seed, hashInt64(std::get<1>(val))); + + return seed; + } + + bool equal( + const std::tuple& lhs, const std::tuple& rhs) const + { + return std::get<0>(lhs) == std::get<0>(rhs) && std::get<1>(lhs) == std::get<1>(rhs); + } + + std::hash hashInt64; + }; + + struct CallState + { + std::shared_ptr blockContext; + }; + std::shared_ptr, CallState, HashCombine>> + m_calledContext = std::make_shared< + tbb::concurrent_hash_map, CallState, HashCombine>>(); + std::shared_mutex m_stateStoragesMutex; + + std::shared_ptr>> + m_precompiledContract; + std::shared_ptr>> + m_constantPrecompiled = + std::make_shared>>(); + mutable bcos::SharedMutex x_constantPrecompiled; + + std::shared_ptr> m_builtInPrecompiled; + unsigned int m_DAGThreadNum = std::max(std::thread::hardware_concurrency(), (unsigned int)1); + std::shared_ptr m_gasInjector = nullptr; + mutable bcos::RecursiveMutex x_executiveFlowLock; + bool m_isWasm = false; + uint32_t m_blockVersion = 0; + std::shared_ptr>> m_keyPageIgnoreTables; + bool m_isRunning = false; + int64_t m_schedulerTermId = -1; + + bcos::ThreadPool::Ptr m_threadPool; + mutable RecursiveMutex x_resetEnvironmentLock; + + void setBlockVersion(uint32_t blockVersion); + void initEvmEnvironment(); + void initWasmEnvironment(); + void resetEnvironment(); + void initTestPrecompiledTable(storage::StorageInterface::Ptr storage); + VMSchedule getVMSchedule(uint32_t currentVersion) const + { + if (currentVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION) + { + return FiscoBcosScheduleV320; + } + return FiscoBcosSchedule; + } + std::function f_onNeedSwitchEvent; + + LedgerCache::Ptr m_ledgerCache; + std::shared_ptr m_vmFactory; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/executor/TransactionExecutorFactory.h b/bcos-executor/src/executor/TransactionExecutorFactory.h new file mode 100644 index 0000000..9078546 --- /dev/null +++ b/bcos-executor/src/executor/TransactionExecutorFactory.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief TransactionExecutorFactory + * @file TransactionExecutorFactory.h + * @author: jimmyshi + * @date: 2022-01-19 + */ +#pragma once + +#include "TransactionExecutor.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-ledger/src/libledger/utilities/Common.h" +#include +#include + +#include + + +namespace bcos +{ +namespace executor +{ + +class TransactionExecutorFactory +{ +public: + using Ptr = std::shared_ptr; + + static TransactionExecutor::Ptr build(bcos::ledger::LedgerInterface::Ptr ledger, + txpool::TxPoolInterface::Ptr txpool, storage::MergeableStorageInterface::Ptr cachedStorage, + storage::TransactionalStorageInterface::Ptr backendStorage, + protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + storage::StateStorageFactory::Ptr stateStorageFactory, bcos::crypto::Hash::Ptr hashImpl, + bool isWasm, bool isAuthCheck, std::string name = "executor-" + std::to_string(utcTime())) + { // only for test + auto keyPageIgnoreTables = std::make_shared>>( + std::initializer_list>::value_type>{ + std::string(ledger::SYS_CONFIG), + std::string(ledger::SYS_CONSENSUS), + storage::FS_ROOT, + storage::FS_APPS, + storage::FS_USER, + storage::FS_SYS_BIN, + storage::FS_USER_TABLE, + storage::StorageInterface::SYS_TABLES, + }); + return std::make_shared(ledger, txpool, cachedStorage, backendStorage, + executionMessageFactory, stateStorageFactory, hashImpl, isWasm, isAuthCheck, + std::make_shared(), keyPageIgnoreTables, name); + } + + TransactionExecutorFactory(bcos::ledger::LedgerInterface::Ptr ledger, + txpool::TxPoolInterface::Ptr txpool, storage::CacheStorageFactory::Ptr cacheFactory, + storage::TransactionalStorageInterface::Ptr storage, + protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + storage::StateStorageFactory::Ptr stateStorageFactory, bcos::crypto::Hash::Ptr hashImpl, + bool isWasm, size_t vmCacheSize, bool isAuthCheck, std::string name) + : m_name(std::move(name)), + m_ledger(std::move(ledger)), + m_txpool(std::move(txpool)), + m_cacheFactory(std::move(cacheFactory)), + m_stateStorageFactory(stateStorageFactory), + m_storage(std::move(storage)), + m_executionMessageFactory(std::move(executionMessageFactory)), + m_hashImpl(std::move(hashImpl)), + m_isWasm(isWasm), + m_isAuthCheck(isAuthCheck), + m_vmFactory(std::make_shared(vmCacheSize)) + { + m_keyPageIgnoreTables = std::make_shared>>( + std::initializer_list>::value_type>{ + std::string(ledger::SYS_CONFIG), + std::string(ledger::SYS_CONSENSUS), + storage::FS_ROOT, + storage::FS_APPS, + storage::FS_USER, + storage::FS_SYS_BIN, + storage::FS_USER_TABLE, + storage::StorageInterface::SYS_TABLES, + }); + } + + TransactionExecutor::Ptr build() + { + auto executor = std::make_shared(m_ledger, m_txpool, + m_cacheFactory ? m_cacheFactory->build() : nullptr, m_storage, + m_executionMessageFactory, m_stateStorageFactory, m_hashImpl, m_isWasm, m_isAuthCheck, + m_vmFactory, m_keyPageIgnoreTables, m_name + "-" + std::to_string(utcTime())); + if (f_onNeedSwitchEvent) + { + executor->registerNeedSwitchEvent(f_onNeedSwitchEvent); + } + return executor; + } + + void registerNeedSwitchEvent(std::function event) { f_onNeedSwitchEvent = event; } + +private: + std::string m_name; + std::shared_ptr>> m_keyPageIgnoreTables; + bcos::ledger::LedgerInterface::Ptr m_ledger; + txpool::TxPoolInterface::Ptr m_txpool; + storage::CacheStorageFactory::Ptr m_cacheFactory; + storage::StateStorageFactory::Ptr m_stateStorageFactory; + storage::TransactionalStorageInterface::Ptr m_storage; + protocol::ExecutionMessageFactory::Ptr m_executionMessageFactory; + bcos::crypto::Hash::Ptr m_hashImpl; + bool m_isWasm; + bool m_isAuthCheck; + std::function f_onNeedSwitchEvent; + std::shared_ptr m_vmFactory; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/precompiled/BFSPrecompiled.cpp b/bcos-executor/src/precompiled/BFSPrecompiled.cpp new file mode 100644 index 0000000..0a4b866 --- /dev/null +++ b/bcos-executor/src/precompiled/BFSPrecompiled.cpp @@ -0,0 +1,1047 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BFSPrecompiled.cpp + * @author: kyonRay + * @date 2021-06-10 + */ + +#include "BFSPrecompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::protocol; + +constexpr const char* const FILE_SYSTEM_METHOD_LIST = "list(string)"; +constexpr const char* const FILE_SYSTEM_METHOD_LIST_PAGE = "list(string,uint256,uint256)"; +constexpr const char* const FILE_SYSTEM_METHOD_MKDIR = "mkdir(string)"; +constexpr const char* const FILE_SYSTEM_METHOD_LINK_CNS = "link(string,string,string,string)"; +constexpr const char* const FILE_SYSTEM_METHOD_LINK = "link(string,string,string)"; +constexpr const char* const FILE_SYSTEM_METHOD_RLINK = "readlink(string)"; +constexpr const char* const FILE_SYSTEM_METHOD_TOUCH = "touch(string,string)"; +constexpr const char* const FILE_SYSTEM_METHOD_INIT = "initBfs()"; +constexpr const char* const FILE_SYSTEM_METHOD_REBUILD = "rebuildBfs(uint256,uint256)"; + +BFSPrecompiled::BFSPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[FILE_SYSTEM_METHOD_LIST] = getFuncSelector(FILE_SYSTEM_METHOD_LIST, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_LIST_PAGE] = + getFuncSelector(FILE_SYSTEM_METHOD_LIST_PAGE, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_MKDIR] = getFuncSelector(FILE_SYSTEM_METHOD_MKDIR, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_LINK] = getFuncSelector(FILE_SYSTEM_METHOD_LINK, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_LINK_CNS] = + getFuncSelector(FILE_SYSTEM_METHOD_LINK_CNS, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_TOUCH] = getFuncSelector(FILE_SYSTEM_METHOD_TOUCH, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_RLINK] = getFuncSelector(FILE_SYSTEM_METHOD_RLINK, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_INIT] = getFuncSelector(FILE_SYSTEM_METHOD_INIT, _hashImpl); + name2Selector[FILE_SYSTEM_METHOD_REBUILD] = + getFuncSelector(FILE_SYSTEM_METHOD_REBUILD, _hashImpl); + BfsTypeSet = {FS_TYPE_DIR, FS_TYPE_CONTRACT, FS_TYPE_LINK}; +} + +std::shared_ptr BFSPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + uint32_t func = getParamFunc(_callParameters->input()); + uint32_t version = _executive->blockContext().lock()->blockVersion(); + + if (func == name2Selector[FILE_SYSTEM_METHOD_LIST]) + { + // list(string) => (int32,fileList) + listDir(_executive, _callParameters); + } + else if (version >= static_cast(BlockVersion::V3_1_VERSION) && + func == name2Selector[FILE_SYSTEM_METHOD_LIST_PAGE]) + { + // list(string,uint,uint) => (int32,fileList) + listDirPage(_executive, _callParameters); + } + else if (func == name2Selector[FILE_SYSTEM_METHOD_MKDIR]) + { + // mkdir(string) => int32 + makeDir(_executive, _callParameters); + } + else if (func == name2Selector[FILE_SYSTEM_METHOD_LINK_CNS]) + { + // link(string name, string version, address, abi) => int32 + linkAdaptCNS(_executive, _callParameters); + } + else if (version >= static_cast(BlockVersion::V3_1_VERSION) && + func == name2Selector[FILE_SYSTEM_METHOD_LINK]) + { + // link(absolutePath, address, abi) => int32 + link(_executive, _callParameters); + } + else if (func == name2Selector[FILE_SYSTEM_METHOD_RLINK]) + { + readLink(_executive, _callParameters); + } + else if (func == name2Selector[FILE_SYSTEM_METHOD_TOUCH]) + { + // touch(string absolute,string type) => int32 + touch(_executive, _callParameters); + } + else if (version >= static_cast(BlockVersion::V3_1_VERSION) && + func == name2Selector[FILE_SYSTEM_METHOD_INIT]) + { + // initBfs for the first time + initBfs(_executive, _callParameters); + } + else if (func == name2Selector[FILE_SYSTEM_METHOD_REBUILD]) + { + // initBfs for the first time + rebuildBfs(_executive, _callParameters); + } + else [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("BFSPrecompiled call undefined function!")); + } + + return _callParameters; +} + +int BFSPrecompiled::checkLinkParam(TransactionExecutive::Ptr _executive, + std::string const& _contractAddress, std::string& _contractName, std::string& _contractVersion, + std::string const& _contractAbi) +{ + boost::trim(_contractName); + boost::trim(_contractVersion); + // check the status of the contract(only print the error message to the log) + std::string tableName = getContractTableName(_contractAddress); + ContractStatus contractStatus = getContractStatus(_executive, tableName); + + if (contractStatus != ContractStatus::Available) + { + std::stringstream errorMessage; + errorMessage << "Link operation failed for "; + switch (contractStatus) + { + case ContractStatus::Frozen: + errorMessage << "\"" << _contractName + << "\" has been frozen, contractAddress = " << _contractAddress; + break; + case ContractStatus::AddressNonExistent: + errorMessage << "the contract \"" << _contractName << "\" with address " + << _contractAddress << " does not exist"; + break; + case ContractStatus::NotContractAddress: + errorMessage << "invalid address " << _contractAddress + << ", please make sure it's a contract address"; + break; + default: + errorMessage << "invalid contract \"" << _contractName << "\" with address " + << _contractAddress << ", error code:" << std::to_string(contractStatus); + break; + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC(errorMessage.str()) + << LOG_KV("contractAddress", _contractAddress) + << LOG_KV("contractName", _contractName); + return CODE_ADDRESS_OR_VERSION_ERROR; + } + if (_contractVersion.find('/') != std::string::npos || + _contractName.find('/') != std::string::npos) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("version or name contains \"/\"") + << LOG_KV("contractName", _contractName) + << LOG_KV("version", _contractVersion); + return CODE_ADDRESS_OR_VERSION_ERROR; + } + // check the length of the field value + checkLengthValidate( + _contractAbi, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW); + return CODE_SUCCESS; +} + +void BFSPrecompiled::makeDir(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + // mkdir(string) + std::string absolutePath; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath); + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("BFSPrecompiled") + << LOG_KV("mkdir", absolutePath); + auto table = _executive->storage().openTable(absolutePath); + if (table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("BFS file name already exists, please check") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_ALREADY_EXIST))); + return; + } + + const auto* bfsAddress = blockContext->isWasm() ? BFS_NAME : BFS_ADDRESS; + + auto response = externalTouchNewFile(_executive, _callParameters->m_origin, bfsAddress, + absolutePath, FS_TYPE_DIR, _callParameters->m_gasLeft); + auto result = codec.encode(response); + if (blockContext->isWasm() && + protocol::versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_2_VERSION) >= 0) + { + result = codec.encode((int32_t)response); + } + _callParameters->setExecResult(std::move(result)); +} + +void BFSPrecompiled::listDir(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + // list(string) + std::string absolutePath; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath); + std::vector files = {}; + PRECOMPILED_LOG(TRACE) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("ls path") + << LOG_KV("path", absolutePath); + if (!checkPathValid(absolutePath, blockContext->blockVersion())) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("invalid path name") + << LOG_KV("path", absolutePath); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_INVALID_PATH), files)); + return; + } + auto table = _executive->storage().openTable(absolutePath); + + if (table) + { + // exist + auto [parentDir, baseName] = getParentDirAndBaseName(absolutePath); + if (blockContext->blockVersion() >= (uint32_t)BlockVersion::V3_1_VERSION) + { + // check parent dir to get type + auto baseNameEntry = _executive->storage().getRow(parentDir, baseName); + if (baseName == tool::FS_ROOT) + { + // root special logic + Entry entry; + tool::BfsFileFactory::buildDirEntry(entry, FS_TYPE_DIR); + baseNameEntry = std::make_optional(entry); + } + if (!baseNameEntry) [[unlikely]] + { + // maybe hidden table + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list not exist file") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_NOT_EXIST), files)); + return; + } + auto baseFields = baseNameEntry->getObject>(); + if (baseFields[0] == tool::FS_TYPE_DIR) + { + // if type is dir, then return sub resource + auto keyCondition = std::make_optional(); + // max return is 500 + keyCondition->limit(0, USER_TABLE_MAX_LIMIT_COUNT); + auto keys = _executive->storage().getPrimaryKeys(absolutePath, keyCondition); + for (const auto& key : keys | RANGES::views::all) + { + auto entry = _executive->storage().getRow(absolutePath, key); + auto fields = entry->getObject>(); + files.emplace_back( + key, fields[0], std::vector{fields.begin() + 1, fields.end()}); + } + } + else if (baseFields[0] == tool::FS_TYPE_LINK) + { + // if type is link, then return link address + auto addressEntry = _executive->storage().getRow(absolutePath, FS_LINK_ADDRESS); + auto abiEntry = _executive->storage().getRow(absolutePath, FS_LINK_ABI); + std::vector ext = {std::string(addressEntry->getField(0)), + abiEntry.has_value() ? std::string(abiEntry->getField(0)) : ""}; + BfsTuple link = std::make_tuple(baseName, FS_TYPE_LINK, std::move(ext)); + files.emplace_back(std::move(link)); + } + else if (baseFields[0] == tool::FS_TYPE_CONTRACT) + { + // if type is contract, then return contract name + files.emplace_back(baseName, tool::FS_TYPE_CONTRACT, + std::vector{baseFields.begin() + 1, baseFields.end()}); + } + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS), files)); + return; + } + + // file exists, try to get type + auto typeEntry = _executive->storage().getRow(absolutePath, FS_KEY_TYPE); + if (typeEntry) + { + // get type success, this is dir or link + // if dir + if (typeEntry->getField(0) == FS_TYPE_DIR) + { + auto subEntry = _executive->storage().getRow(absolutePath, FS_KEY_SUB); + std::map bfsInfo; + auto&& out = asBytes(std::string(subEntry->getField(0))); + codec::scale::decode(bfsInfo, gsl::make_span(out)); + files.reserve(bfsInfo.size()); + for (const auto& bfs : bfsInfo) + { + BfsTuple file = + std::make_tuple(bfs.first, bfs.second, std::vector({})); + files.emplace_back(std::move(file)); + } + } + else if (typeEntry->getField(0) == FS_TYPE_LINK) + { + // if link + auto addressEntry = _executive->storage().getRow(absolutePath, FS_LINK_ADDRESS); + auto abiEntry = _executive->storage().getRow(absolutePath, FS_LINK_ABI); + std::vector ext = {std::string(addressEntry->getField(0)), + abiEntry.has_value() ? std::string(abiEntry->getField(0)) : ""}; + BfsTuple link = std::make_tuple(baseName, FS_TYPE_LINK, std::move(ext)); + files.emplace_back(std::move(link)); + } + } + else + { + // fail to get type, this is contract + BfsTuple file = + std::make_tuple(baseName, FS_TYPE_CONTRACT, std::vector({})); + files.emplace_back(std::move(file)); + } + + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS), files)); + } + else + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list not exist file") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_NOT_EXIST), files)); + } +} + +void BFSPrecompiled::listDirPage(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + // list(string,uint,uint) + std::string absolutePath; + u256 offset = 0; + u256 count = 0; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath, offset, count); + std::vector files = {}; + PRECOMPILED_LOG(TRACE) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("ls path") + << LOG_KV("path", absolutePath) << LOG_KV("offset", offset) + << LOG_KV("count", count); + if (!checkPathValid(absolutePath, blockContext->blockVersion())) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("invalid path name") + << LOG_KV("path", absolutePath); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_INVALID_PATH), files)); + return; + } + auto table = _executive->storage().openTable(absolutePath); + + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list not exist file") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_NOT_EXIST), files)); + return; + } + + // exist + auto [parentDir, baseName] = getParentDirAndBaseName(absolutePath); + + // check parent dir to get type + auto baseNameEntry = _executive->storage().getRow(parentDir, baseName); + if (baseName == tool::FS_ROOT) + { + baseNameEntry = std::make_optional(); + tool::BfsFileFactory::buildDirEntry(baseNameEntry.value(), tool::FileType::DIRECTOR); + } + if (!baseNameEntry) [[unlikely]] + { + // maybe hidden table + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list not exist file") + << LOG_KV("parentDir", parentDir) << LOG_KV("baseName", baseName); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_NOT_EXIST), files)); + return; + } + auto baseFields = baseNameEntry->getObject>(); + if (baseFields[0] == tool::FS_TYPE_DIR) + { + // if type is dir, then return sub resource + auto keyCondition = std::make_optional(); + keyCondition->limit((size_t)offset, (size_t)count); + auto keys = _executive->storage().getPrimaryKeys(absolutePath, keyCondition); + + for (const auto& key : keys | RANGES::views::all) + { + auto entry = _executive->storage().getRow(absolutePath, key); + auto fields = entry->getObject>(); + files.emplace_back( + key, fields[0], std::vector{fields.begin() + 1, fields.end()}); + } + if (count == keys.size()) + { + // count is full, maybe still left elements + auto [total, error] = _executive->storage().count(absolutePath); + if (error) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list not exist file") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult( + codec.encode(s256((int)CODE_FILE_COUNT_ERROR), std::vector{})); + return; + } + auto result = codec.encode(s256(total - offset - count), files); + if (c_fileLogLevel == LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) + << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list trace") + << LOG_KV("filesSize", files.size()) << LOG_KV("resultDataSize", result.size()); + } + _callParameters->setExecResult(std::move(result)); + return; + } + } + else if (baseFields[0] == tool::FS_TYPE_LINK) + { + // if type is link, then return link address + auto addressEntry = _executive->storage().getRow(absolutePath, FS_LINK_ADDRESS); + auto abiEntry = _executive->storage().getRow(absolutePath, FS_LINK_ABI); + std::vector ext = {std::string(addressEntry->getField(0)), + abiEntry.has_value() ? std::string(abiEntry->getField(0)) : ""}; + BfsTuple link = std::make_tuple(baseName, FS_TYPE_LINK, std::move(ext)); + files.emplace_back(std::move(link)); + } + else if (baseFields[0] == tool::FS_TYPE_CONTRACT) + { + // if type is contract, then return contract name + files.emplace_back(baseName, tool::FS_TYPE_CONTRACT, + std::vector{baseFields.begin() + 1, baseFields.end()}); + } + auto result = codec.encode(s256((int)CODE_SUCCESS), files); + if (c_fileLogLevel <= LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("list trace") + << LOG_KV("filesSize", files.size()) + << LOG_KV("resultDataSize", result.size()); + } + _callParameters->setExecResult(std::move(result)); +} + +void BFSPrecompiled::link(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + std::string absolutePath, contractAddress, contractAbi; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath, contractAddress, contractAbi); + if (!blockContext->isWasm()) + { + contractAddress = trimHexPrefix(contractAddress); + } + + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("link") << LOG_KV("absolutePath", absolutePath) + << LOG_KV("contractAddress", contractAddress) + << LOG_KV("contractAbiSize", contractAbi.size()); + auto linkTableName = getContractTableName(absolutePath); + + if (!checkPathValid(linkTableName, blockContext->blockVersion())) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("check link params failed, invalid path name") + << LOG_KV("absolutePath", absolutePath) + << LOG_KV("contractAddress", contractAddress); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_INVALID_PATH))); + return; + } + + auto linkTable = _executive->storage().openTable(linkTableName); + if (linkTable) + { + // table exist, check this resource is a link + auto typeEntry = _executive->storage().getRow(linkTableName, FS_KEY_TYPE); + if (typeEntry && typeEntry->getField(0) == FS_TYPE_LINK) + { + // contract name and version exist, overwrite address and abi + tool::BfsFileFactory::buildLink(linkTable.value(), contractAddress, contractAbi); + _callParameters->setExecResult(codec.encode(s256((int)CODE_SUCCESS))); + return; + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("File already exists.") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_ALREADY_EXIST))); + return; + } + // table not exist, mkdir -p /apps/contractName first + std::string bfsAddress = blockContext->isWasm() ? BFS_NAME : BFS_ADDRESS; + + auto response = externalTouchNewFile(_executive, _callParameters->m_origin, bfsAddress, + linkTableName, FS_TYPE_LINK, _callParameters->m_gasLeft); + if (response != 0) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("external build link file metadata failed") + << LOG_KV("absolutePath", absolutePath); + _callParameters->setExecResult(codec.encode(s256((int)CODE_FILE_BUILD_DIR_FAILED))); + return; + } + auto newLinkTable = _executive->storage().createTable(linkTableName, STORAGE_VALUE); + // set link info to link table + tool::BfsFileFactory::buildLink(newLinkTable.value(), contractAddress, contractAbi); + _callParameters->setExecResult(codec.encode(s256((int)CODE_SUCCESS))); +} + +void BFSPrecompiled::linkAdaptCNS(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + std::string contractName, contractVersion, contractAddress, contractAbi; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode( + _callParameters->params(), contractName, contractVersion, contractAddress, contractAbi); + if (!blockContext->isWasm()) + { + contractAddress = trimHexPrefix(contractAddress); + } + + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("link") << LOG_KV("contractName", contractName) + << LOG_KV("contractVersion", contractVersion) + << LOG_KV("contractAddress", contractAddress) + << LOG_KV("contractAbiSize", contractAbi.size()); + int validCode = + checkLinkParam(_executive, contractAddress, contractName, contractVersion, contractAbi); + auto linkTableName = std::string(USER_APPS_PREFIX) + contractName + '/' + contractVersion; + + if (validCode < 0 || !checkPathValid(linkTableName, blockContext->blockVersion())) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("check link params failed, invalid path name") + << LOG_KV("contractName", contractName) + << LOG_KV("contractVersion", contractVersion) + << LOG_KV("contractAddress", contractAddress); + _callParameters->setExecResult( + codec.encode(int32_t(validCode < 0 ? validCode : CODE_FILE_INVALID_PATH))); + return; + } + auto linkTable = _executive->storage().openTable(linkTableName); + if (linkTable) + { + // table exist, check this resource is a link + auto typeEntry = _executive->storage().getRow(linkTableName, FS_KEY_TYPE); + if (typeEntry && typeEntry->getField(0) == FS_TYPE_LINK) + { + // contract name and version exist, overwrite address and abi + auto addressEntry = linkTable->newEntry(); + addressEntry.importFields({contractAddress}); + auto abiEntry = linkTable->newEntry(); + abiEntry.importFields({contractAbi}); + _executive->storage().setRow(linkTableName, FS_LINK_ADDRESS, std::move(addressEntry)); + _executive->storage().setRow(linkTableName, FS_LINK_ABI, std::move(abiEntry)); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); + return; + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("File already exists.") + << LOG_KV("contractName", contractName) + << LOG_KV("version", contractVersion); + _callParameters->setExecResult(codec.encode((int32_t)CODE_FILE_ALREADY_EXIST)); + return; + } + // table not exist, mkdir -p /apps/contractName first + std::string bfsAddress = blockContext->isWasm() ? BFS_NAME : BFS_ADDRESS; + + auto response = externalTouchNewFile(_executive, _callParameters->m_origin, bfsAddress, + linkTableName, FS_TYPE_LINK, _callParameters->m_gasLeft); + if (response != 0) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("external build link file metadata failed") + << LOG_KV("contractName", contractName) + << LOG_KV("contractVersion", contractVersion); + _callParameters->setExecResult(codec.encode((int32_t)CODE_FILE_BUILD_DIR_FAILED)); + return; + } + auto newLinkTable = _executive->storage().createTable(linkTableName, STORAGE_VALUE); + // set link info to link table + tool::BfsFileFactory::buildLink( + newLinkTable.value(), contractAddress, contractAbi, contractVersion); + _callParameters->setExecResult(codec.encode((int32_t)CODE_SUCCESS)); +} + +void BFSPrecompiled::readLink(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + // readlink(string) + std::string absolutePath; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("readLink path") + << LOG_KV("path", absolutePath); + bytes emptyResult = + blockContext->isWasm() ? codec.encode(std::string("")) : codec.encode(Address()); + auto table = _executive->storage().openTable(absolutePath); + + if (table) + { + // file exists, try to get type + auto typeEntry = _executive->storage().getRow(absolutePath, FS_KEY_TYPE); + if (typeEntry && typeEntry->getField(0) == FS_TYPE_LINK) + { + // if link + auto addressEntry = _executive->storage().getRow(absolutePath, FS_LINK_ADDRESS); + auto contractAddress = std::string(addressEntry->getField(0)); + auto codecAddress = blockContext->isWasm() ? codec.encode(contractAddress) : + codec.encode(Address(contractAddress)); + _callParameters->setExecResult(codecAddress); + return; + } + + _callParameters->setExecResult(emptyResult); + return; + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("link file not exist, return empty address") + << LOG_KV("path", absolutePath); + _callParameters->setExecResult(emptyResult); +} + +void BFSPrecompiled::touch(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + // touch(string absolute, string type) + std::string absolutePath; + std::string type; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), absolutePath, type); + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("touch new file") << LOG_KV("absolutePath", absolutePath) + << LOG_KV("type", type); + if (!checkPathValid(absolutePath, blockContext->blockVersion())) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("file name is invalid"); + + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_INVALID_PATH))); + return; + } + if (BfsTypeSet.find(type) == BfsTypeSet.end()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("touch file in error type") + << LOG_KV("absolutePath", absolutePath) << LOG_KV("type", type); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_INVALID_TYPE))); + return; + } + if (!absolutePath.starts_with(USER_APPS_PREFIX) && !absolutePath.starts_with(USER_TABLE_PREFIX)) + { + if (blockContext->blockVersion() >= + (uint32_t)(bcos::protocol::BlockVersion::V3_1_VERSION) && + absolutePath.starts_with(USER_USR_PREFIX)) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("touch /usr/ file") + << LOG_KV("absolutePath", absolutePath) << LOG_KV("type", type); + } + else + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("only support touch file under the system dir /apps/, /tables/") + << LOG_KV("absolutePath", absolutePath) << LOG_KV("type", type); + _callParameters->setExecResult(codec.encode(int32_t(CODE_FILE_INVALID_PATH))); + return; + } + } + + std::string parentDir; + std::string baseName; + if (type == FS_TYPE_DIR) + { + parentDir = absolutePath; + } + else + { + std::tie(parentDir, baseName) = getParentDirAndBaseName(absolutePath); + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("directory not exists, build dir first") + << LOG_KV("parentDir", parentDir) << LOG_KV("baseName", baseName) + << LOG_KV("type", type); + auto buildResult = recursiveBuildDir(_executive, parentDir); + if (!buildResult) + { + BOOST_THROW_EXCEPTION(PrecompiledError("Recursive build bfs dir error.")); + } + if (type == FS_TYPE_DIR) + { + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); + return; + } + + // set meta data in parent table + if (blockContext->blockVersion() >= (uint32_t)BlockVersion::V3_1_VERSION) + { + Entry subEntry; + tool::BfsFileFactory::buildDirEntry(subEntry, type); + _executive->storage().setRow(parentDir, baseName, std::move(subEntry)); + + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); + } + else + { + std::map bfsInfo; + auto subEntry = _executive->storage().getRow(parentDir, FS_KEY_SUB); + auto&& out = asBytes(std::string(subEntry->getField(0))); + codec::scale::decode(bfsInfo, gsl::make_span(out)); + bfsInfo.insert(std::make_pair(baseName, type)); + subEntry->setField(0, asString(codec::scale::encode(bfsInfo))); + _executive->storage().setRow(parentDir, FS_KEY_SUB, std::move(subEntry.value())); + + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); + } +} + +void BFSPrecompiled::initBfs(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + PRECOMPILED_LOG(INFO) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("initBfs"); + auto table = _executive->storage().openTable(tool::FS_ROOT); + if (table.has_value()) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("initBfs, root table already exist, return by default"); + return; + } + // create / dir + _executive->storage().createTable(std::string(tool::FS_ROOT), std::string(tool::FS_DIR_FIELDS)); + // build root subs metadata + for (const auto& subName : tool::FS_ROOT_SUBS | RANGES::views::drop(1)) + { + Entry entry; + // type, status, acl_type, acl_white, acl_black, extra + tool::BfsFileFactory::buildDirEntry(entry, tool::FileType::DIRECTOR); + _executive->storage().setRow(tool::FS_ROOT, + subName == tool::FS_ROOT ? subName : subName.substr(1), std::move(entry)); + } + // build apps, usr, tables metadata + _executive->storage().createTable(std::string(tool::FS_USER), std::string(tool::FS_DIR_FIELDS)); + _executive->storage().createTable(std::string(tool::FS_APPS), std::string(tool::FS_DIR_FIELDS)); + _executive->storage().createTable( + std::string(tool::FS_USER_TABLE), std::string(tool::FS_DIR_FIELDS)); + _executive->storage().createTable( + std::string(tool::FS_SYS_BIN), std::string(tool::FS_DIR_FIELDS)); + + // build /sys/ + buildSysSubs(_executive); +} + +void BFSPrecompiled::rebuildBfs(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (_callParameters->m_sender != precompiled::SYS_CONFIG_ADDRESS && + _callParameters->m_sender != precompiled::SYS_CONFIG_NAME) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("BFSPrecompiled") + << LOG_DESC("rebuildBfs not called by sys config") + << LOG_KV("sender", _callParameters->m_sender); + _callParameters->setExecResult(codec.encode(int32_t(CODE_NO_AUTHORIZED))); + return; + } + uint32_t fromVersion = 0; + uint32_t toVersion = 0; + codec.decode(_callParameters->params(), fromVersion, toVersion); + PRECOMPILED_LOG(INFO) << LOG_BADGE("BFSPrecompiled") << LOG_DESC("rebuildBfs") + << LOG_KV("fromVersion", fromVersion) << LOG_KV("toVersion", toVersion); + // TODO: add from and to version check + if (fromVersion <= static_cast(BlockVersion::V3_0_VERSION) && + toVersion >= static_cast(BlockVersion::V3_1_VERSION)) + { + rebuildBfs310(_executive); + } + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); +} + +void BFSPrecompiled::rebuildBfs310( + const std::shared_ptr& _executive) +{ + auto blockContext = _executive->blockContext().lock(); + auto keyPageIgnoreTables = blockContext->keyPageIgnoreTables(); + // child, parent, all absolute path + std::queue> rebuildQ; + rebuildQ.push({std::string(tool::FS_ROOT), ""}); + bool rebuildSys = true; + while (!rebuildQ.empty()) + { + keyPageIgnoreTables->insert(tool::FS_ROOT_SUBS.begin(), tool::FS_ROOT_SUBS.end()); + auto [rebuildPath, parentPath] = rebuildQ.front(); + rebuildQ.pop(); + auto subEntry = _executive->storage().getRow(rebuildPath, tool::FS_KEY_SUB); + auto table = _executive->storage().openTable(rebuildPath); + if (!subEntry.has_value() || table->tableInfo()->fields().size() > 1) + { + // not old data structure + // root is new data structure + rebuildSys = (rebuildPath != tool::FS_ROOT); + continue; + } + + // rewrite type, acl_type, acl_white, acl_black, extra to parent + auto typeEntry = _executive->storage().getRow(rebuildPath, tool::FS_KEY_TYPE); + auto aclTypeEntry = _executive->storage().getRow(rebuildPath, tool::FS_ACL_TYPE); + auto aclWhiteEntry = _executive->storage().getRow(rebuildPath, tool::FS_ACL_WHITE); + auto aclBlackEntry = _executive->storage().getRow(rebuildPath, tool::FS_ACL_BLACK); + auto extraEntry = _executive->storage().getRow(rebuildPath, tool::FS_KEY_EXTRA); + // root has no parent + Entry newFormEntry; + newFormEntry.setObject(std::vector{ + std::string(typeEntry->get()), + std::string("0"), + std::string(aclTypeEntry->get()), + std::string(aclWhiteEntry->get()), + std::string(aclBlackEntry->get()), + std::string(extraEntry->get()), + }); + typeEntry->setStatus(Entry::Status::DELETED); + aclTypeEntry->setStatus(Entry::Status::DELETED); + aclWhiteEntry->setStatus(Entry::Status::DELETED); + aclBlackEntry->setStatus(Entry::Status::DELETED); + extraEntry->setStatus(Entry::Status::DELETED); + _executive->storage().setRow(rebuildPath, tool::FS_KEY_TYPE, std::move(typeEntry.value())); + _executive->storage().setRow( + rebuildPath, tool::FS_ACL_TYPE, std::move(aclTypeEntry.value())); + _executive->storage().setRow( + rebuildPath, tool::FS_ACL_WHITE, std::move(aclWhiteEntry.value())); + _executive->storage().setRow( + rebuildPath, tool::FS_ACL_BLACK, std::move(aclBlackEntry.value())); + _executive->storage().setRow( + rebuildPath, tool::FS_KEY_EXTRA, std::move(extraEntry.value())); + + std::map bfsInfo; + auto&& out = asBytes(std::string(subEntry->get())); + codec::scale::decode(bfsInfo, gsl::make_span(out)); + + // delete sub + subEntry->setStatus(Entry::Status::DELETED); + _executive->storage().setRow(rebuildPath, tool::FS_KEY_SUB, std::move(subEntry.value())); + + // use keyPage to rewrite info + for (const auto& _sub : tool::FS_ROOT_SUBS) + { + std::string sub(_sub); + keyPageIgnoreTables->erase(sub); + } + if (!parentPath.empty()) + { + _executive->storage().setRow( + parentPath, getPathBaseName(rebuildPath), std::move(newFormEntry)); + } + + // rewrite sub info + for (const auto& [name, type] : bfsInfo) + { + Entry entry; + tool::BfsFileFactory::buildDirEntry(entry, type); + _executive->storage().setRow(rebuildPath, name, std::move(entry)); + if (type == tool::FS_TYPE_DIR) + { + rebuildQ.push( + {(rebuildPath == tool::FS_ROOT ? rebuildPath : rebuildPath + "/") + name, + rebuildPath}); + } + } + } + if (rebuildSys) + { + // build /sys/ + buildSysSubs(_executive); + } +} + +bool BFSPrecompiled::recursiveBuildDir( + const std::shared_ptr& _executive, + const std::string& _absoluteDir) +{ + if (_absoluteDir.empty()) + { + return false; + } + // transfer /usr/local/bin => ["usr", "local", "bin"] + std::vector dirList; + std::string absoluteDir = _absoluteDir; + if (absoluteDir.starts_with('/')) + { + absoluteDir = absoluteDir.substr(1); + } + if (absoluteDir.ends_with('/')) + { + absoluteDir.pop_back(); + } + boost::split(dirList, absoluteDir, boost::is_any_of("/"), boost::token_compress_on); + std::string root = "/"; + + auto version = _executive->blockContext().lock()->blockVersion(); + for (const auto& dir : dirList) + { + auto table = _executive->storage().openTable(root); + if (!table) + { + EXECUTIVE_LOG(TRACE) << LOG_BADGE("recursiveBuildDir") + << LOG_DESC("can not open path table") + << LOG_KV("tableName", root); + return false; + } + auto newTableName = ((root == "/") ? root : (root + "/")).append(dir); + + if (version >= (uint32_t)BlockVersion::V3_1_VERSION) + { + auto dirEntry = _executive->storage().getRow(root, dir); + if (!dirEntry) + { + // not exist, then set row to root, create dir + Entry newEntry; + // type, status, acl_type, acl_white, acl_black, extra + tool::BfsFileFactory::buildDirEntry(newEntry, tool::FileType::DIRECTOR); + _executive->storage().setRow(root, dir, std::move(newEntry)); + + _executive->storage().createTable(newTableName, std::string(tool::FS_DIR_FIELDS)); + root = newTableName; + continue; + } + else + { + auto dirFields = dirEntry->getObject>(); + if (dirFields[0] == tool::FS_TYPE_DIR) + { + // if dir is directory, continue + root = newTableName; + continue; + } + // exist in root, it means this dir is not a directory + EXECUTIVE_LOG(DEBUG) << LOG_BADGE("recursiveBuildDir") + << LOG_DESC("file had already existed, and not directory type") + << LOG_KV("parentDir", root) << LOG_KV("dir", dir) + << LOG_KV("type", dirFields[0]); + return false; + } + } + + // if version < 3.0.0 + auto typeEntry = _executive->storage().getRow(root, FS_KEY_TYPE); + if (typeEntry) + { + // can get type, then this type is directory + // try open root + dir + auto nextDirTable = _executive->storage().openTable(newTableName); + if (nextDirTable.has_value()) + { + // root + dir table exist, try to get type entry + auto tryGetTypeEntry = _executive->storage().getRow(newTableName, FS_KEY_TYPE); + if (tryGetTypeEntry.has_value() && tryGetTypeEntry->getField(0) == FS_TYPE_DIR) + { + // if success and dir is directory, continue + root = newTableName; + continue; + } + + // can not get type, it means this dir is not a directory + EXECUTIVE_LOG(DEBUG) << LOG_BADGE("recursiveBuildDir") + << LOG_DESC("file had already existed, and not directory type") + << LOG_KV("parentDir", root) << LOG_KV("dir", dir); + return false; + } + + // root + dir not exist, create root + dir and build bfs info in root table + auto subEntry = _executive->storage().getRow(root, FS_KEY_SUB); + auto&& out = asBytes(std::string(subEntry->getField(0))); + // codec to map + std::map bfsInfo; + codec::scale::decode(bfsInfo, gsl::make_span(out)); + + /// create table and build bfs info + bfsInfo.insert(std::make_pair(dir, FS_TYPE_DIR)); + _executive->storage().createTable(newTableName, SYS_VALUE_FIELDS); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + _executive->storage().setRow(newTableName, FS_KEY_TYPE, std::move(tEntry)); + _executive->storage().setRow(newTableName, FS_KEY_SUB, std::move(newSubEntry)); + _executive->storage().setRow(newTableName, FS_ACL_TYPE, std::move(aclTypeEntry)); + _executive->storage().setRow(newTableName, FS_ACL_WHITE, std::move(aclWEntry)); + _executive->storage().setRow(newTableName, FS_ACL_BLACK, std::move(aclBEntry)); + _executive->storage().setRow(newTableName, FS_KEY_EXTRA, std::move(extraEntry)); + + // set metadata in parent dir + subEntry->setField(0, asString(codec::scale::encode(bfsInfo))); + _executive->storage().setRow(root, FS_KEY_SUB, std::move(subEntry.value())); + root = newTableName; + } + else + { + EXECUTIVE_LOG(TRACE) << LOG_BADGE("recursiveBuildDir") + << LOG_DESC("parent type not found") << LOG_KV("parentDir", root) + << LOG_KV("dir", dir); + return false; + } + } + return true; +} + +void BFSPrecompiled::buildSysSubs( + const std::shared_ptr& _executive) const +{ + for (const auto& sysSub : BFS_SYS_SUBS) + { + Entry entry; + // type, status, acl_type, acl_white, acl_black, extra + tool::BfsFileFactory::buildDirEntry(entry, tool::LINK); + _executive->storage().setRow( + tool::FS_SYS_BIN, sysSub.substr(tool::FS_SYS_BIN.length() + 1), std::move(entry)); + } + // build sys contract + for (const auto& nameAddress : SYS_NAME_ADDRESS_MAP) + { + auto linkTable = + _executive->storage().createTable(std::string(nameAddress.first), SYS_VALUE_FIELDS); + tool::BfsFileFactory::buildLink(linkTable.value(), std::string(nameAddress.second), ""); + } +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/BFSPrecompiled.h b/bcos-executor/src/precompiled/BFSPrecompiled.h new file mode 100644 index 0000000..9caab43 --- /dev/null +++ b/bcos-executor/src/precompiled/BFSPrecompiled.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BFSPrecompiled.h + * @author: kyonRay + * @date 2021-06-10 + */ + +#pragma once +#include "../vm/Precompiled.h" + +namespace bcos::precompiled +{ +class BFSPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + BFSPrecompiled(crypto::Hash::Ptr _hashImpl); + ~BFSPrecompiled() override = default; + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void listDir(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void listDirPage(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void makeDir(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void link(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void linkAdaptCNS(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void readLink(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void touch(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void initBfs(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void rebuildBfs(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + void rebuildBfs310(const std::shared_ptr& _executive); + int checkLinkParam(std::shared_ptr _executive, + std::string const& _contractAddress, std::string& _contractName, + std::string& _contractVersion, std::string const& _contractAbi); + bool recursiveBuildDir(const std::shared_ptr& _executive, + const std::string& _absoluteDir); + std::set BfsTypeSet; + void buildSysSubs(const std::shared_ptr& _executive) const; +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/CastPrecompiled.cpp b/bcos-executor/src/precompiled/CastPrecompiled.cpp new file mode 100644 index 0000000..d8caa2c --- /dev/null +++ b/bcos-executor/src/precompiled/CastPrecompiled.cpp @@ -0,0 +1,152 @@ +#include "CastPrecompiled.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::protocol; + +constexpr const char* const CAST_STR_S256 = "stringToS256(string)"; +constexpr const char* const CAST_STR_S64 = "stringToS64(string)"; +constexpr const char* const CAST_STR_U256 = "stringToU256(string)"; +constexpr const char* const CAST_STR_ADDR = "stringToAddr(string)"; +constexpr const char* const CAST_STR_BT32 = "stringToBytes32(string)"; + +constexpr const char* const CAST_S256_STR = "s256ToString(int256)"; +constexpr const char* const CAST_S64_STR = "s64ToString(int64)"; +constexpr const char* const CAST_U256_STR = "u256ToString(uint256)"; +constexpr const char* const CAST_ADDR_STR = "addrToString(address)"; +constexpr const char* const CAST_BT32_STR = "bytes32ToString(bytes32)"; + +CastPrecompiled::CastPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[CAST_STR_S256] = getFuncSelector(CAST_STR_S256, _hashImpl); + name2Selector[CAST_STR_S64] = getFuncSelector(CAST_STR_S64, _hashImpl); + name2Selector[CAST_STR_U256] = getFuncSelector(CAST_STR_U256, _hashImpl); + name2Selector[CAST_STR_ADDR] = getFuncSelector(CAST_STR_ADDR, _hashImpl); + name2Selector[CAST_STR_BT32] = getFuncSelector(CAST_STR_BT32, _hashImpl); + + name2Selector[CAST_S256_STR] = getFuncSelector(CAST_S256_STR, _hashImpl); + name2Selector[CAST_S64_STR] = getFuncSelector(CAST_S64_STR, _hashImpl); + name2Selector[CAST_U256_STR] = getFuncSelector(CAST_U256_STR, _hashImpl); + name2Selector[CAST_ADDR_STR] = getFuncSelector(CAST_ADDR_STR, _hashImpl); + name2Selector[CAST_BT32_STR] = getFuncSelector(CAST_BT32_STR, _hashImpl); +} + +std::shared_ptr CastPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + if (func == name2Selector[CAST_STR_S256]) + { + // stringToS256(string) + std::string src; + codec.decode(data, src); + s256 num = boost::lexical_cast(src); + gasPricer->appendOperation(InterfaceOpcode::GetInt); + _callParameters->setExecResult(codec.encode(num)); + } + else if (func == name2Selector[CAST_STR_S64]) + { + // stringToS64(string) + std::string src; + codec.decode(data, src); + gasPricer->appendOperation(InterfaceOpcode::GetInt); + _callParameters->setExecResult(codec.encode(boost::lexical_cast(src))); + } + else if (func == name2Selector[CAST_STR_U256]) + { + // stringToU256(string) + std::string src; + codec.decode(data, src); + u256 num = boost::lexical_cast(src); + gasPricer->appendOperation(InterfaceOpcode::GetInt); + _callParameters->setExecResult(codec.encode(num)); + } + else if (func == name2Selector[CAST_STR_ADDR]) + { + // stringToAddr(string) + std::string src; + codec.decode(data, src); + Address ret = Address(src); + gasPricer->appendOperation(InterfaceOpcode::GetAddr); + _callParameters->setExecResult(codec.encode(ret)); + } + else if (func == name2Selector[CAST_STR_BT32]) + { + // stringToBt32(string) + std::string src; + codec.decode(data, src); + string32 s32 = bcos::codec::toString32(src); + gasPricer->appendOperation(InterfaceOpcode::GetByte32); + _callParameters->setExecResult(codec.encode(s32)); + } + else if (func == name2Selector[CAST_S256_STR]) + { + // s256ToString(int256) + s256 src; + codec.decode(data, src); + std::string value = boost::lexical_cast(src); + gasPricer->appendOperation(InterfaceOpcode::GetString); + _callParameters->setExecResult(codec.encode(value)); + } + else if (func == name2Selector[CAST_S64_STR]) + { + // s64ToString(int64) + int64_t src; + codec.decode(data, src); + gasPricer->appendOperation(InterfaceOpcode::GetString); + _callParameters->setExecResult(codec.encode(boost::lexical_cast(src))); + } + else if (func == name2Selector[CAST_U256_STR]) + { + // u256ToString(uint256) + u256 src; + codec.decode(data, src); + std::string value = boost::lexical_cast(src); + gasPricer->appendOperation(InterfaceOpcode::GetString); + _callParameters->setExecResult(codec.encode(value)); + } + else if (func == name2Selector[CAST_ADDR_STR]) + { + // addrToString(address) + Address src; + codec.decode(data, src); + gasPricer->appendOperation(InterfaceOpcode::GetString); + _callParameters->setExecResult(codec.encode(src.hex())); + } + else if (func == name2Selector[CAST_BT32_STR]) + { + // bytes32ToString(bytes32) + string32 src; + codec.decode(data, src); + std::string ret; + ret.resize(32); + for (size_t i = 0; i < src.size(); ++i) + { + ret[i] = src[i]; + } + gasPricer->appendOperation(InterfaceOpcode::GetString); + _callParameters->setExecResult(codec.encode(ret)); + } + else [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("CastPrecompiled") + << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("CastPrecompiled call undefined function!")); + } + return _callParameters; +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/CastPrecompiled.h b/bcos-executor/src/precompiled/CastPrecompiled.h new file mode 100644 index 0000000..484e3f4 --- /dev/null +++ b/bcos-executor/src/precompiled/CastPrecompiled.h @@ -0,0 +1,21 @@ +#pragma once + +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include + +namespace bcos::precompiled +{ +class CastPrecompiled : public Precompiled +{ +public: + using Ptr = std::shared_ptr; + CastPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~CastPrecompiled() = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +}; +} // namespace precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/ConsensusPrecompiled.cpp b/bcos-executor/src/precompiled/ConsensusPrecompiled.cpp new file mode 100644 index 0000000..979677c --- /dev/null +++ b/bcos-executor/src/precompiled/ConsensusPrecompiled.cpp @@ -0,0 +1,399 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ConsensusPrecompiled.cpp + * @author: kyonRay + * @date 2021-05-26 + */ + +#include "ConsensusPrecompiled.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::ledger; + +const char* const CSS_METHOD_ADD_SEALER = "addSealer(string,uint256)"; +const char* const CSS_METHOD_ADD_SER = "addObserver(string)"; +const char* const CSS_METHOD_REMOVE = "remove(string)"; +const char* const CSS_METHOD_SET_WEIGHT = "setWeight(string,uint256)"; +const auto NODE_LENGTH = 128U; + +ConsensusPrecompiled::ConsensusPrecompiled(const crypto::Hash::Ptr& _hashImpl) + : Precompiled(_hashImpl) +{ + name2Selector[CSS_METHOD_ADD_SEALER] = getFuncSelector(CSS_METHOD_ADD_SEALER, _hashImpl); + name2Selector[CSS_METHOD_ADD_SER] = getFuncSelector(CSS_METHOD_ADD_SER, _hashImpl); + name2Selector[CSS_METHOD_REMOVE] = getFuncSelector(CSS_METHOD_REMOVE, _hashImpl); + name2Selector[CSS_METHOD_SET_WEIGHT] = getFuncSelector(CSS_METHOD_SET_WEIGHT, _hashImpl); +} + +std::shared_ptr ConsensusPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + + showConsensusTable(_executive); + + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + if (blockContext->isAuthCheck() && !checkSenderFromAuth(_callParameters->m_sender)) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("sender is not from sys") + << LOG_KV("sender", _callParameters->m_sender); + _callParameters->setExecResult(codec.encode(int32_t(CODE_NO_AUTHORIZED))); + return _callParameters; + } + + int result = 0; + if (func == name2Selector[CSS_METHOD_ADD_SEALER]) + { + // addSealer(string, uint256) + result = addSealer(_executive, data, codec); + } + else if (func == name2Selector[CSS_METHOD_ADD_SER]) + { + // addObserver(string) + result = addObserver(_executive, data, codec); + } + else if (func == name2Selector[CSS_METHOD_REMOVE]) + { + // remove(string) + result = removeNode(_executive, data, codec); + } + else if (func == name2Selector[CSS_METHOD_SET_WEIGHT]) + { + // setWeight(string,uint256) + result = setWeight(_executive, data, codec); + } + else [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("ConsensusPrecompiled call undefined function!")); + } + + _callParameters->setExecResult(codec.encode(int32_t(result))); + return _callParameters; +} + +int ConsensusPrecompiled::addSealer( + const std::shared_ptr& _executive, bytesConstRef& _data, + const CodecWrapper& codec) +{ + // addSealer(string, uint256) + std::string nodeID; + u256 weight; + auto blockContext = _executive->blockContext().lock(); + codec.decode(_data, nodeID, weight); + // Uniform lowercase nodeID + boost::to_lower(nodeID); + + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("addSealer") + << LOG_KV("nodeID", nodeID); + if (nodeID.size() != NODE_LENGTH || + std::count_if(nodeID.begin(), nodeID.end(), + [](unsigned char _ch) { return std::isxdigit(_ch); }) != NODE_LENGTH) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("nodeID length error") << LOG_KV("nodeID", nodeID); + return CODE_INVALID_NODE_ID; + } + if (weight == 0) + { + // u256 weight be then 0 + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("weight is 0") + << LOG_KV("nodeID", nodeID); + return CODE_INVALID_WEIGHT; + } + + auto& storage = _executive->storage(); + + ConsensusNodeList consensusList; + auto entry = storage.getRow(SYS_CONSENSUS, "key"); + if (entry) + { + consensusList = entry->getObject(); + } + else + { + entry.emplace(Entry()); + } + + auto node = std::find_if(consensusList.begin(), consensusList.end(), + [&nodeID](const ConsensusNode& node) { return node.nodeID == nodeID; }); + if (node != consensusList.end()) + { + // exist + node->weight = weight; + node->type = ledger::CONSENSUS_SEALER; + node->enableNumber = boost::lexical_cast(blockContext->number() + 1); + } + else + { + // no exist + if (blockContext->blockVersion() >= (uint32_t)protocol::BlockVersion::V3_1_VERSION) + { + // version >= 3.1.0, only allow adding sealer in observer list + return CODE_ADD_SEALER_SHOULD_IN_OBSERVER; + } + consensusList.emplace_back(nodeID, weight, std::string{ledger::CONSENSUS_SEALER}, + boost::lexical_cast(blockContext->number() + 1)); + } + + entry->setObject(consensusList); + + storage.setRow(SYS_CONSENSUS, "key", std::move(*entry)); + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("addSealer successfully insert") << LOG_KV("nodeID", nodeID) + << LOG_KV("weight", weight); + return 0; +} + +int ConsensusPrecompiled::addObserver( + const std::shared_ptr& _executive, bytesConstRef& _data, + const CodecWrapper& codec) +{ + // addObserver(string) + std::string nodeID; + auto blockContext = _executive->blockContext().lock(); + codec.decode(_data, nodeID); + // Uniform lowercase nodeID + boost::to_lower(nodeID); + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("addObserver") + << LOG_KV("nodeID", nodeID); + + if (nodeID.size() != NODE_LENGTH || + std::count_if(nodeID.begin(), nodeID.end(), + [](unsigned char c) { return std::isxdigit(c); }) != NODE_LENGTH) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("nodeID length error") << LOG_KV("nodeID", nodeID); + return CODE_INVALID_NODE_ID; + } + + auto& storage = _executive->storage(); + + auto entry = storage.getRow(SYS_CONSENSUS, "key"); + + ConsensusNodeList consensusList; + if (entry) + { + consensusList = entry->getObject(); + } + else + { + entry.emplace(Entry()); + } + auto node = std::find_if(consensusList.begin(), consensusList.end(), + [&nodeID](const ConsensusNode& node) { return node.nodeID == nodeID; }); + if (node != consensusList.end()) + { + // find it in consensus list + auto sealerCount = std::count_if(consensusList.begin(), consensusList.end(), + [](auto&& node) { return node.type == ledger::CONSENSUS_SEALER; }); + if (sealerCount == 1) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("addObserver failed, because last sealer"); + return CODE_LAST_SEALER; + } + node->weight = 0; + node->type = ledger::CONSENSUS_OBSERVER; + node->enableNumber = boost::lexical_cast(blockContext->number() + 1); + } + else + { + consensusList.emplace_back(nodeID, 0, std::string{ledger::CONSENSUS_OBSERVER}, + boost::lexical_cast(blockContext->number() + 1)); + } + + entry->setObject(consensusList); + + storage.setRow(SYS_CONSENSUS, "key", std::move(*entry)); + + return 0; +} + +int ConsensusPrecompiled::removeNode( + const std::shared_ptr& _executive, bytesConstRef& _data, + const CodecWrapper& codec) +{ + // remove(string) + std::string nodeID; + auto blockContext = _executive->blockContext().lock(); + codec.decode(_data, nodeID); + // Uniform lowercase nodeID + boost::to_lower(nodeID); + PRECOMPILED_LOG(INFO) << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("remove") + << LOG_KV("nodeID", nodeID); + if (nodeID.size() != NODE_LENGTH) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("nodeID length error") << LOG_KV("nodeID", nodeID); + return CODE_INVALID_NODE_ID; + } + + auto& storage = _executive->storage(); + + ConsensusNodeList consensusList; + auto entry = storage.getRow(SYS_CONSENSUS, "key"); + if (entry) + { + consensusList = entry->getObject(); + } + else + { + entry.emplace(Entry()); + } + auto node = std::find_if(consensusList.begin(), consensusList.end(), + [&nodeID](const ConsensusNode& node) { return node.nodeID == nodeID; }); + if (node != consensusList.end()) + { + consensusList.erase(node); + } + else + { + return CODE_NODE_NOT_EXIST; // Not found + } + + auto sealerSize = std::count_if(consensusList.begin(), consensusList.end(), + [](auto&& node) { return node.type == ledger::CONSENSUS_SEALER; }); + if (sealerSize == 0) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("removeNode failed, because last sealer"); + return CODE_LAST_SEALER; + } + + entry->setObject(consensusList); + + storage.setRow(SYS_CONSENSUS, "key", std::move(*entry)); + + return 0; +} + +int ConsensusPrecompiled::setWeight( + const std::shared_ptr& _executive, bytesConstRef& _data, + const CodecWrapper& codec) +{ + // setWeight(string,uint256) + std::string nodeID; + u256 weight; + auto blockContext = _executive->blockContext().lock(); + codec.decode(_data, nodeID, weight); + // Uniform lowercase nodeID + boost::to_lower(nodeID); + PRECOMPILED_LOG(INFO) << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("setWeight") + << LOG_KV("nodeID", nodeID) << LOG_KV("weight", weight); + if (nodeID.size() != NODE_LENGTH) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("nodeID length error") << LOG_KV("nodeID", nodeID); + return CODE_INVALID_NODE_ID; + } + if (weight == 0) + { + // u256 weight must greater then 0 + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("weight is 0") + << LOG_KV("nodeID", nodeID); + return CODE_INVALID_WEIGHT; + } + + auto& storage = _executive->storage(); + + auto entry = storage.getRow(SYS_CONSENSUS, "key"); + + ConsensusNodeList consensusList; + if (entry) + { + auto value = entry->getField(0); + + consensusList = decodeConsensusList(value); + } + auto node = std::find_if(consensusList.begin(), consensusList.end(), + [&nodeID](const ConsensusNode& node) { return node.nodeID == nodeID; }); + if (node != consensusList.end()) + { + if (node->type != ledger::CONSENSUS_SEALER) + { + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Cannot set weight to observer.")); + } + node->weight = weight; + node->enableNumber = boost::lexical_cast(blockContext->number() + 1); + } + else + { + return CODE_NODE_NOT_EXIST; // Not found + } + + entry->setObject(consensusList); + + storage.setRow(SYS_CONSENSUS, "key", std::move(*entry)); + + return 0; +} + +void ConsensusPrecompiled::showConsensusTable( + const std::shared_ptr& _executive) +{ + auto& storage = _executive->storage(); + // SYS_CONSENSUS must exist + auto entry = storage.getRow(SYS_CONSENSUS, "key"); + + if (!entry) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ConsensusPrecompiled") + << LOG_DESC("showConsensusTable") << " No consensus"; + return; + } + + if (c_fileLogLevel < bcos::LogLevel::TRACE) + { + return; + } + auto consensusList = entry->getObject(); + + std::stringstream consensusTable; + consensusTable << "ConsensusPrecompiled show table:\n"; + for (auto& node : consensusList) + { + auto& [nodeID, weight, type, enableNumber] = node; + + consensusTable << "ConsensusPrecompiled: " << nodeID << "," << type << "," << enableNumber + << "," << weight << "\n"; + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ConsensusPrecompiled") << LOG_DESC("showConsensusTable") + << LOG_KV("consensusTable", consensusTable.str()); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/ConsensusPrecompiled.h b/bcos-executor/src/precompiled/ConsensusPrecompiled.h new file mode 100644 index 0000000..62dc1e2 --- /dev/null +++ b/bcos-executor/src/precompiled/ConsensusPrecompiled.h @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ConsensusPrecompiled.h + * @author: kyonRay + * @date 2021-05-26 + */ + +#pragma once +#include "../executive/BlockContext.h" +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include +#include +#include + +namespace bcos::precompiled +{ +class ConsensusPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + explicit ConsensusPrecompiled(const crypto::Hash::Ptr& _hashImpl); + ~ConsensusPrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + [[nodiscard]] int addSealer(const std::shared_ptr& _executive, + bytesConstRef& _data, const CodecWrapper& codec); + + [[nodiscard]] int addObserver(const std::shared_ptr& _executive, + bytesConstRef& _data, const CodecWrapper& codec); + + [[nodiscard]] int removeNode(const std::shared_ptr& _executive, + bytesConstRef& _data, const CodecWrapper& codec); + + [[nodiscard]] int setWeight(const std::shared_ptr& _executive, + bytesConstRef& _data, const CodecWrapper& codec); + + void showConsensusTable(const std::shared_ptr& _executive); +}; +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/CryptoPrecompiled.cpp b/bcos-executor/src/precompiled/CryptoPrecompiled.cpp new file mode 100644 index 0000000..f98730a --- /dev/null +++ b/bcos-executor/src/precompiled/CryptoPrecompiled.cpp @@ -0,0 +1,196 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CryptoPrecompiled.cpp + * @author: kyonRay + * @date 2021-05-30 + */ + +#include "CryptoPrecompiled.h" +#include "bcos-crypto/signature/codec/SignatureDataWithPub.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::codec; +using namespace bcos::crypto; +using namespace bcos::executor; +using namespace bcos::precompiled; + +// precompiled interfaces related to hash calculation +const char* const CRYPTO_METHOD_SM3_STR = "sm3(bytes)"; +// Note: the interface here can't be keccak256k1 for naming conflict +const char* const CRYPTO_METHOD_KECCAK256_STR = "keccak256Hash(bytes)"; +// precompiled interfaces related to verify +// sm2 verify: (message, publicKey, r, s) +const char* const CRYPTO_METHOD_SM2_VERIFY_STR = "sm2Verify(bytes32,bytes,bytes32,bytes32)"; +// the params are (vrfInput, vrfPublicKey, vrfProof) +const char* const CRYPTO_METHOD_CURVE25519_VRF_VERIFY_STR = + "curve25519VRFVerify(bytes,bytes,bytes)"; + +CryptoPrecompiled::CryptoPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[CRYPTO_METHOD_SM3_STR] = getFuncSelector(CRYPTO_METHOD_SM3_STR, _hashImpl); + name2Selector[CRYPTO_METHOD_KECCAK256_STR] = + getFuncSelector(CRYPTO_METHOD_KECCAK256_STR, _hashImpl); + name2Selector[CRYPTO_METHOD_SM2_VERIFY_STR] = + getFuncSelector(CRYPTO_METHOD_SM2_VERIFY_STR, _hashImpl); + name2Selector[CRYPTO_METHOD_CURVE25519_VRF_VERIFY_STR] = + getFuncSelector(CRYPTO_METHOD_CURVE25519_VRF_VERIFY_STR, _hashImpl); +} + +std::shared_ptr CryptoPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto funcSelector = getParamFunc(_callParameters->input()); + auto paramData = _callParameters->params(); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(paramData.size()); + auto version = blockContext->blockVersion(); + + if (funcSelector == name2Selector[CRYPTO_METHOD_SM3_STR]) + { + bytes inputData; + codec.decode(paramData, inputData); + + auto sm3Hash = crypto::sm3Hash(ref(inputData)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("CryptoPrecompiled: sm3") + << LOG_KV("input", toHexString(inputData)) + << LOG_KV("result", toHexString(sm3Hash)); + _callParameters->setExecResult(codec.encode(codec::toString32(sm3Hash))); + } + else if (funcSelector == name2Selector[CRYPTO_METHOD_KECCAK256_STR]) + { + bytes inputData; + codec.decode(paramData, inputData); + auto keccak256Hash = crypto::keccak256Hash(ref(inputData)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("CryptoPrecompiled: keccak256") + << LOG_KV("input", toHexString(inputData)) + << LOG_KV("result", toHexString(keccak256Hash)); + _callParameters->setExecResult(codec.encode(codec::toString32(keccak256Hash))); + } + else if (funcSelector == name2Selector[CRYPTO_METHOD_SM2_VERIFY_STR]) + { + sm2Verify(_executive, paramData, _callParameters); + } + // curve25519VRFVerify + else if (funcSelector == name2Selector[CRYPTO_METHOD_CURVE25519_VRF_VERIFY_STR] && + (version >= (uint32_t)(bcos::protocol::BlockVersion::V3_0_VERSION))) + { + curve25519VRFVerify(_executive, paramData, _callParameters); + } + else + { + // no defined function + PRECOMPILED_LOG(INFO) << LOG_DESC("CryptoPrecompiled: undefined method") + << LOG_KV("funcSelector", std::to_string(funcSelector)); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("CryptoPrecompiled call undefined function!")); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} + +void CryptoPrecompiled::curve25519VRFVerify( + const std::shared_ptr& _executive, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + bool verifySuccess = false; + u256 randomValue = 0; + try + { + bytes message; + bytes publicKey; + bytes proof; + codec.decode(_paramData, message, publicKey, proof); + CInputBuffer rawPublicKey{(const char*)publicKey.data(), publicKey.size()}; + CInputBuffer rawMsg{(const char*)message.data(), message.size()}; + CInputBuffer rawProof{(const char*)proof.data(), proof.size()}; + HashType vrfHash; + COutputBuffer outputHash{(char*)vrfHash.data(), vrfHash.size()}; + if ((wedpr_curve25519_vrf_is_valid_public_key(&rawPublicKey) == WEDPR_SUCCESS) && + (wedpr_curve25519_vrf_verify_utf8(&rawPublicKey, &rawMsg, &rawProof) == + WEDPR_SUCCESS) && + (wedpr_curve25519_vrf_proof_to_hash(&rawProof, &outputHash) == WEDPR_SUCCESS)) + { + verifySuccess = true; + randomValue = (u256)(vrfHash); + } + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(INFO) << LOG_DESC("CryptoPrecompiled: curve25519VRFVerify exception") + << LOG_KV("e", boost::diagnostic_information(e)); + } + PRECOMPILED_LOG(TRACE) << LOG_DESC("CryptoPrecompiled: curve25519VRFVerify ") << verifySuccess + << LOG_KV("randomValue", randomValue); + _callResult->setExecResult(codec.encode(verifySuccess, randomValue)); +} + +void CryptoPrecompiled::sm2Verify(const std::shared_ptr& _executive, + bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + try + { + string32 message; + bytes inputPublicKey; + string32 r; + string32 s; + codec.decode(_paramData, message, inputPublicKey, r, s); + auto msgHash = fromString32(message); + Address account; + bool verifySuccess = true; + auto signatureData = std::make_shared( + fromString32(r), fromString32(s), ref(inputPublicKey)); + auto publicKey = crypto::sm2Recover(msgHash, ref(*(signatureData->encode()))); + if (!publicKey) + { + PRECOMPILED_LOG(DEBUG) + << LOG_DESC("CryptoPrecompiled: sm2Verify failed for recover public key failed"); + _callResult->setExecResult(codec.encode(false, account)); + return; + } + + account = right160( + crypto::sm3Hash(bytesConstRef(publicKey->data().data(), publicKey->data().size()))); + PRECOMPILED_LOG(TRACE) << LOG_DESC("CryptoPrecompiled: sm2Verify") + << LOG_KV("verifySuccess", verifySuccess) + << LOG_KV("publicKey", publicKey->hex()) + << LOG_KV("account", account); + _callResult->setExecResult(codec.encode(verifySuccess, account)); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(INFO) << LOG_DESC("CryptoPrecompiled: sm2Verify exception") + << LOG_KV("e", boost::diagnostic_information(e)); + Address emptyAccount; + _callResult->setExecResult(codec.encode(false, emptyAccount)); + } +} diff --git a/bcos-executor/src/precompiled/CryptoPrecompiled.h b/bcos-executor/src/precompiled/CryptoPrecompiled.h new file mode 100644 index 0000000..81fef25 --- /dev/null +++ b/bcos-executor/src/precompiled/CryptoPrecompiled.h @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CryptoPrecompiled.h + * @author: kyonRay + * @date 2021-05-30 + */ + +#pragma once +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" + +namespace bcos +{ +namespace precompiled +{ +#if 0 +abstract contract Crypto +{ + function sm3(bytes memory data) public view returns(bytes32){} + function keccak256Hash(bytes memory data) public view returns(bytes32){} + function sm2Verify(bytes32 message, bytes memory publicKey, bytes32 r, bytes32 s) public view returns(bool, address){} + function curve25519VRFVerify(bytes memory message, bytes memory publicKey, bytes memory proof) public view returns(bool, uint256){} +} +#endif + +class CryptoPrecompiled : public Precompiled +{ +public: + using Ptr = std::shared_ptr; + CryptoPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~CryptoPrecompiled() {} + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void sm2Verify(const std::shared_ptr& _executive, + bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult); + void curve25519VRFVerify(const std::shared_ptr& _executive, + bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult); +}; +} // namespace precompiled +} // namespace bcos diff --git a/bcos-executor/src/precompiled/KVTablePrecompiled.cpp b/bcos-executor/src/precompiled/KVTablePrecompiled.cpp new file mode 100644 index 0000000..dbeefc9 --- /dev/null +++ b/bcos-executor/src/precompiled/KVTablePrecompiled.cpp @@ -0,0 +1,145 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file KVTablePrecompiled.cpp + * @author: kyonRay + * @date 2021-05-27 + */ + +#include "KVTablePrecompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::protocol; + +const char* const KV_TABLE_METHOD_SET = "set(string,string)"; +const char* const KV_TABLE_METHOD_GET = "get(string)"; + +KVTablePrecompiled::KVTablePrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[KV_TABLE_METHOD_SET] = getFuncSelector(KV_TABLE_METHOD_SET, _hashImpl); + name2Selector[KV_TABLE_METHOD_GET] = getFuncSelector(KV_TABLE_METHOD_GET, _hashImpl); +} + +std::shared_ptr KVTablePrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + // [tableName][actualParams] + std::vector dynamicParams; + bytes param; + codec.decode(_callParameters->input(), dynamicParams, param); + auto tableName = dynamicParams.at(0); + tableName = getActualTableName(tableName); + + // get user call actual params + auto originParam = ref(param); + uint32_t func = getParamFunc(originParam); + bytesConstRef data = getParamData(originParam); + + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(_callParameters->input().size()); + + auto table = _executive->storage().openTable(tableName); + if (!table.has_value()) + { + BOOST_THROW_EXCEPTION(PrecompiledError(tableName + " does not exist")); + } + + if (func == name2Selector[KV_TABLE_METHOD_SET]) + { + /// set(string,string) + set(tableName, _executive, data, _callParameters, gasPricer); + } + else if (func == name2Selector[KV_TABLE_METHOD_GET]) + { + /// get(string) + get(tableName, _executive, data, _callParameters, gasPricer); + } + else [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("KVTablePrecompiled") + << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("KVTablePrecompiled call undefined function!")); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} + +void KVTablePrecompiled::get(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const std::shared_ptr& callResult, const PrecompiledGas::Ptr& gasPricer) +{ + /// get(string) => (bool, string) + std::string key; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, key); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("KVTable") << LOG_KV("tableName", tableName) + << LOG_KV("get", key); + auto table = _executive->storage().openTable(tableName); + + auto entry = table->getRow(key); + gasPricer->appendOperation(InterfaceOpcode::Select); + if (!entry) + { + callResult->setExecResult(codec.encode(false, std::string(""))); + return; + } + + gasPricer->updateMemUsed(entry->size()); + callResult->setExecResult(codec.encode(true, std::string(entry->get()))); +} + +void KVTablePrecompiled::set(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const std::shared_ptr& callResult, const PrecompiledGas::Ptr& gasPricer) +{ + /// set(string,string) + std::string key, value; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, key, value); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("KVTable") << LOG_KV("tableName", tableName) + << LOG_KV("key", key) << LOG_KV("value", value); + + checkLengthValidate(key, USER_TABLE_KEY_VALUE_MAX_LENGTH, CODE_TABLE_KEY_VALUE_LENGTH_OVERFLOW); + + checkLengthValidate( + value, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_KEY_VALUE_LENGTH_OVERFLOW); + + Entry entry; + entry.importFields({value}); + _executive->storage().setRow(tableName, key, std::move(entry)); + callResult->setExecResult(codec.encode(int32_t(1))); + gasPricer->setMemUsed(1); + gasPricer->appendOperation(InterfaceOpcode::Insert); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/KVTablePrecompiled.h b/bcos-executor/src/precompiled/KVTablePrecompiled.h new file mode 100644 index 0000000..ecc02c4 --- /dev/null +++ b/bcos-executor/src/precompiled/KVTablePrecompiled.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file KVTablePrecompiled.h + * @author: kyonRay + * @date 2021-05-27 + */ + +#pragma once + +#include "../vm/Precompiled.h" +#include +#include + +namespace bcos::precompiled +{ +#if 0 +contract KVTableFactory { + function openTable(string) public constant returns (KVTable); + function createTable(string, string, string) public returns (bool,int); +} +#endif + +class KVTablePrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + KVTablePrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~KVTablePrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void get(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const std::shared_ptr& callResult, + const PrecompiledGas::Ptr& gasPricer); + void set(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const std::shared_ptr& callResult, + const PrecompiledGas::Ptr& gasPricer); +}; + +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/SystemConfigPrecompiled.cpp b/bcos-executor/src/precompiled/SystemConfigPrecompiled.cpp new file mode 100644 index 0000000..2d4956e --- /dev/null +++ b/bcos-executor/src/precompiled/SystemConfigPrecompiled.cpp @@ -0,0 +1,291 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SystemConfigPrecompiled.cpp + * @author: kyonRay + * @date 2021-05-26 + */ + +#include "SystemConfigPrecompiled.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::ledger; +using namespace bcos::protocol; + +const char* const SYSCONFIG_METHOD_SET_STR = "setValueByKey(string,string)"; +const char* const SYSCONFIG_METHOD_GET_STR = "getValueByKey(string)"; + +SystemConfigPrecompiled::SystemConfigPrecompiled() : Precompiled(GlobalHashImpl::g_hashImpl) +{ + name2Selector[SYSCONFIG_METHOD_SET_STR] = + getFuncSelector(SYSCONFIG_METHOD_SET_STR, GlobalHashImpl::g_hashImpl); + name2Selector[SYSCONFIG_METHOD_GET_STR] = + getFuncSelector(SYSCONFIG_METHOD_GET_STR, GlobalHashImpl::g_hashImpl); + auto defaultCmp = [](std::string_view _key, int64_t _value, int64_t _minValue) { + if (_value >= _minValue) + { + return; + } + BOOST_THROW_EXCEPTION(PrecompiledError( + "Invalid value " + std::to_string(_value) + " ,the value for " + std::string{_key} + + " must be no less than " + std::to_string(_minValue))); + }; + m_sysValueCmp.insert(std::make_pair(SYSTEM_KEY_TX_GAS_LIMIT, [defaultCmp](int64_t _value) { + defaultCmp(SYSTEM_KEY_TX_GAS_LIMIT, _value, TX_GAS_LIMIT_MIN); + })); + m_sysValueCmp.insert( + std::make_pair(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, [defaultCmp](int64_t _value) { + defaultCmp(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, _value, 1); + })); + m_sysValueCmp.insert(std::make_pair(SYSTEM_KEY_TX_COUNT_LIMIT, [defaultCmp](int64_t _value) { + defaultCmp(SYSTEM_KEY_TX_COUNT_LIMIT, _value, TX_COUNT_LIMIT_MIN); + })); + // for compatibility + // Note: the compatibility_version is not compatibility + m_sysValueCmp.insert(std::make_pair(SYSTEM_KEY_COMPATIBILITY_VERSION, [](int64_t _value) { + if (_value < (uint32_t)(g_BCOSConfig.minSupportedVersion())) + { + std::stringstream errorMsg; + errorMsg << LOG_DESC("set " + std::string(SYSTEM_KEY_COMPATIBILITY_VERSION) + + " failed for lower than min_supported_version") + << LOG_KV("minSupportedVersion", g_BCOSConfig.minSupportedVersion()); + PRECOMPILED_LOG(INFO) << errorMsg.str() << LOG_KV("setValue", _value); + BOOST_THROW_EXCEPTION(PrecompiledError(errorMsg.str())); + } + })); + m_valueConverter.insert(std::make_pair(SYSTEM_KEY_COMPATIBILITY_VERSION, + [](const std::string& _value, uint32_t blockVersion) -> uint64_t { + auto version = bcos::tool::toVersionNumber(_value); + if (versionCompareTo(blockVersion, BlockVersion::V3_1_VERSION) >= 0) + { + if (version < blockVersion) + { + BOOST_THROW_EXCEPTION(PrecompiledError( + "Set compatibility version should not lower than version nowadays.")); + } + } + return version; + })); +} + +std::shared_ptr SystemConfigPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (func == name2Selector[SYSCONFIG_METHOD_SET_STR]) + { + // setValueByKey(string,string) + if (blockContext->isAuthCheck() && !checkSenderFromAuth(_callParameters->m_sender)) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("SystemConfigPrecompiled") << LOG_DESC("sender is not from sys") + << LOG_KV("sender", _callParameters->m_sender); + _callParameters->setExecResult(codec.encode(int32_t(CODE_NO_AUTHORIZED))); + } + else + { + std::string configKey; + std::string configValue; + codec.decode(_callParameters->params(), configKey, configValue); + // Uniform lowercase configKey + boost::to_lower(configKey); + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("setValueByKey") << LOG_KV("configKey", configKey) + << LOG_KV("configValue", configValue); + + int64_t value = checkValueValid(configKey, configValue, blockContext->blockVersion()); + auto table = _executive->storage().openTable(ledger::SYS_CONFIG); + + auto entry = table->newEntry(); + auto systemConfigEntry = SystemConfigEntry{configValue, blockContext->number() + 1}; + entry.setObject(systemConfigEntry); + + table->setRow(configKey, std::move(entry)); + + if (shouldUpgradeChain(configKey, blockContext->blockVersion(), value)) + { + upgradeChain(_executive, _callParameters, codec, value); + } + + PRECOMPILED_LOG(INFO) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("set system config") << LOG_KV("configKey", configKey) + << LOG_KV("configValue", configValue) + << LOG_KV("enableNum", blockContext->number() + 1); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); + } + } + else if (func == name2Selector[SYSCONFIG_METHOD_GET_STR]) + { + // getValueByKey(string) + std::string configKey; + codec.decode(_callParameters->params(), configKey); + // Uniform lowercase configKey + boost::to_lower(configKey); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("getValueByKey func") << LOG_KV("configKey", configKey); + + auto valueNumberPair = getSysConfigByKey(_executive, configKey); + _callParameters->setExecResult(codec.encode(valueNumberPair.first, valueNumberPair.second)); + } + else [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION(PrecompiledError("SystemConfigPrecompiled call undefined function!")); + } + return _callParameters; +} + +int64_t SystemConfigPrecompiled::checkValueValid( + std::string_view _key, std::string_view value, uint32_t blockVersion) +{ + int64_t configuredValue = 0; + std::string key = std::string(_key); + if (!c_supportedKey.contains(key)) + { + BOOST_THROW_EXCEPTION(PrecompiledError("unsupported key " + key)); + } + if (value.empty()) + { + BOOST_THROW_EXCEPTION(PrecompiledError("The value for " + key + " must be non-empty.")); + } + try + { + if (m_valueConverter.contains(key)) + { + configuredValue = (m_valueConverter.at(key))(std::string(value), blockVersion); + } + else + { + configuredValue = boost::lexical_cast(value); + } + } + catch (bcos::tool::InvalidVersion const& e) + { + // Note: be careful when modify error message here + auto errorMsg = + "Invalid value for " + key + + ". The version must be in format of major_version.middle_version.minimum_version, and " + "the minimum version is optional. The major version must between " + + std::to_string(bcos::protocol::MIN_MAJOR_VERSION) + " to " + + std::to_string(bcos::protocol::MAX_MAJOR_VERSION); + PRECOMPILED_LOG(INFO) << LOG_DESC("SystemConfigPrecompiled: invalid version") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(PrecompiledError(errorMsg)); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("checkValueValid failed") << LOG_KV("key", _key) + << LOG_KV("value", value) + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION( + PrecompiledError("The value for " + key + " must be a valid number.")); + } + if (m_sysValueCmp.contains(key)) + { + (m_sysValueCmp.at(key))(configuredValue); + } + return configuredValue; +} + +std::pair SystemConfigPrecompiled::getSysConfigByKey( + const std::shared_ptr& _executive, + const std::string& _key) const +{ + try + { + auto table = _executive->storage().openTable(ledger::SYS_CONFIG); + auto entry = table->getRow(_key); + if (entry) + { + auto [value, enableNumber] = entry->getObject(); + return {value, enableNumber}; + } + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("get sys config failed") << LOG_KV("configKey", _key); + return {"", -1}; + } + catch (std::exception const& e) + { + auto errorMsg = + "getSysConfigByKey for " + _key + "failed, e:" + boost::diagnostic_information(e); + PRECOMPILED_LOG(INFO) << LOG_BADGE("SystemConfigPrecompiled") << errorMsg; + return {errorMsg, -1}; + } +} + +void SystemConfigPrecompiled::upgradeChain( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, CodecWrapper const& codec, + uint32_t toVersion) const +{ + auto blockContext = _executive->blockContext().lock(); + + if (blockContext->blockVersion() <= static_cast(BlockVersion::V3_0_VERSION) && + toVersion >= static_cast(BlockVersion::V3_1_VERSION)) + { + // rebuild Bfs + auto input = codec.encodeWithSig( + "rebuildBfs(uint256,uint256)", blockContext->blockVersion(), toVersion); + std::string sender = + blockContext->isWasm() ? precompiled::SYS_CONFIG_NAME : precompiled::SYS_CONFIG_ADDRESS; + std::string toAddress = + blockContext->isWasm() ? precompiled::BFS_NAME : precompiled::BFS_ADDRESS; + auto response = externalRequest(_executive, ref(input), _callParameters->m_origin, sender, + toAddress, false, false, _callParameters->m_gasLeft); + + if (response->status != (int32_t)TransactionStatus::None) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("SystemConfigPrecompiled") + << LOG_DESC("rebuildBfs failed") + << LOG_KV("status", response->status); + BOOST_THROW_EXCEPTION(PrecompiledError("Rebuild BFS error.")); + } + + // create new system tables of 3.1.0 + // clang-format off + std::string_view tables[] = { + SYS_CODE_BINARY, bcos::ledger::SYS_VALUE, + SYS_CONTRACT_ABI, bcos::ledger::SYS_VALUE, + }; + // clang-format on + size_t total = sizeof(tables) / sizeof(std::string_view); + + for (size_t i = 0; i < total; i += 2) + { + _executive->storage().createTable(std::string(tables[i]), std::string(tables[i + 1])); + } + } +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/SystemConfigPrecompiled.h b/bcos-executor/src/precompiled/SystemConfigPrecompiled.h new file mode 100644 index 0000000..04acae5 --- /dev/null +++ b/bcos-executor/src/precompiled/SystemConfigPrecompiled.h @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SystemConfigPrecompiled.h + * @author: kyonRay + * @date 2021-05-26 + */ + +#pragma once +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include +#include +namespace bcos::precompiled +{ +class SystemConfigPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + + SystemConfigPrecompiled(); + ~SystemConfigPrecompiled() override = default; + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + std::pair getSysConfigByKey( + const std::shared_ptr& _executive, + const std::string& _key) const; + +private: + int64_t checkValueValid(std::string_view key, std::string_view value, uint32_t blockVersion); + inline bool shouldUpgradeChain( + std::string_view key, uint32_t fromVersion, uint32_t toVersion) const noexcept + { + return key == bcos::ledger::SYSTEM_KEY_COMPATIBILITY_VERSION && toVersion > fromVersion; + } + void upgradeChain(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, CodecWrapper const& codec, + uint32_t toVersion) const; + + std::map> m_valueConverter; + std::map> m_sysValueCmp; + const std::set c_supportedKey = {bcos::ledger::SYSTEM_KEY_TX_GAS_LIMIT, + bcos::ledger::SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, bcos::ledger::SYSTEM_KEY_TX_COUNT_LIMIT, + bcos::ledger::SYSTEM_KEY_COMPATIBILITY_VERSION}; +}; + +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/TableManagerPrecompiled.cpp b/bcos-executor/src/precompiled/TableManagerPrecompiled.cpp new file mode 100644 index 0000000..2996bb2 --- /dev/null +++ b/bcos-executor/src/precompiled/TableManagerPrecompiled.cpp @@ -0,0 +1,442 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TableManagerPrecompiled.cpp + * @author: kyonGuo + * @date 2022/4/8 + */ + +#include "TableManagerPrecompiled.h" + +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::protocol; + +constexpr const char* const TABLE_METHOD_CREATE = "createTable(string,(string,string[]))"; +constexpr const char* const TABLE_METHOD_CREATE_KV = "createKVTable(string,string,string)"; +constexpr const char* const TABLE_METHOD_APPEND = "appendColumns(string,string[])"; +constexpr const char* const TABLE_METHOD_OPEN = "openTable(string)"; +constexpr const char* const TABLE_METHOD_DESC = "desc(string)"; +constexpr const char* const TABLE_METHOD_DESC_V32 = "descWithKeyOrder(string)"; +constexpr const char* const TABLE_METHOD_CREATE_V320 = + "createTable(string,(uint8,string,string[]))"; + + +TableManagerPrecompiled::TableManagerPrecompiled(crypto::Hash::Ptr _hashImpl) + : Precompiled(_hashImpl) +{ + registerFunc(getFuncSelector(TABLE_METHOD_CREATE), + [this](auto&& executive, auto&& pricer, auto&& params) { + createTable(executive, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_APPEND), + [this](auto&& executive, auto&& pricer, auto&& params) { + appendColumns(executive, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_CREATE_KV), + [this](auto&& executive, auto&& pricer, auto&& params) { + createKVTable(executive, pricer, params); + }); + registerFunc( + getFuncSelector(TABLE_METHOD_OPEN), [this](auto&& executive, auto&& pricer, auto&& params) { + openTable(executive, pricer, params); + }); + registerFunc( + getFuncSelector(TABLE_METHOD_DESC), [this](auto&& executive, auto&& pricer, auto&& params) { + desc(executive, pricer, params); + }); + registerFunc( + getFuncSelector(TABLE_METHOD_DESC_V32), + [this](auto&& executive, auto&& pricer, auto&& params) { + descWithKeyOrder(executive, pricer, params); + }, + protocol::BlockVersion::V3_2_VERSION); + registerFunc( + getFuncSelector(TABLE_METHOD_CREATE_V320), + [this](auto&& executive, auto&& pricer, auto&& params) { + createTableV32(executive, pricer, params); + }, + protocol::BlockVersion::V3_2_VERSION); +} + +std::shared_ptr TableManagerPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + uint32_t func = getParamFunc(_callParameters->input()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(_callParameters->input().size()); + + auto selector = selector2Func.find(func); + if (selector != selector2Func.end()) + { + if (blockContext->isWasm() && func == name2Selector[TABLE_METHOD_OPEN]) + {} + auto& [minVersion, execFunc] = selector->second; + if (versionCompareTo(blockContext->blockVersion(), minVersion) >= 0) + { + execFunc(_executive, gasPricer, _callParameters); + + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + PRECOMPILED_LOG(TRACE) + << LOG_BADGE("TableManagerPrecompiled") << LOG_DESC("call function") + << LOG_KV("func", func) << LOG_KV("minVersion", minVersion); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; + } + } + PRECOMPILED_LOG(INFO) << LOG_BADGE("TableManager") << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("TableManager call undefined function!")); +} + +void TableManagerPrecompiled::createTable( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + // createTable(string,(string,string[])) + std::string tableName; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + TableInfoTuple tableInfo; + codec.decode(_callParameters->params(), tableName, tableInfo); + std::string keyField = std::get<0>(tableInfo); + auto& valueFields = std::get<1>(tableInfo); + std::string valueField = precompiled::checkCreateTableParam(tableName, keyField, valueFields); + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("TableManagerPrecompiled") + << LOG_KV("createTable", tableName) << LOG_KV("keyField", keyField) + << LOG_KV("valueField", valueField); + // here is a trick to set table key field info + valueField = keyField + "," + valueField; + + externalCreateTable(_executive, gasPricer, _callParameters, tableName, codec, valueField); +} + +void TableManagerPrecompiled::createTableV32( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + // createTable(string,(string,string[])) or createTable(string,(uint8,string,string[])) + std::string tableName; + std::string keyField; + std::string valueField; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + TableInfoTupleV320 tableInfo; + codec.decode(_callParameters->params(), tableName, tableInfo); + auto keyOrder = std::make_optional(std::get<0>(tableInfo)); + keyField = std::get<1>(tableInfo); + auto& valueFields = std::get<2>(tableInfo); + valueField = precompiled::checkCreateTableParam(tableName, keyField, valueFields, keyOrder); + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("TableManagerPrecompiled") + << LOG_KV("createTable", tableName) << LOG_KV("keyOrder", int(*keyOrder)) + << LOG_KV("keyField", keyField) << LOG_KV("valueField", valueField); + // Compatible with older versions (< v3.2) of table and KvTable + valueField = + V320_TABLE_INFO_PREFIX + std::to_string(*keyOrder) + "," + keyField + "," + valueField; + + externalCreateTable(_executive, gasPricer, _callParameters, tableName, codec, valueField); +} + +void TableManagerPrecompiled::createKVTable( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// createKVTable(string,string,string) + std::string tableName, key, value; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), tableName, key, value); + precompiled::checkCreateTableParam(tableName, key, value); + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("TableManagerPrecompiled") + << LOG_KV("createKVTable", tableName) << LOG_KV("keyField", key) + << LOG_KV("valueField", value); + gasPricer->appendOperation(InterfaceOpcode::CreateTable); + // /tables + tableName + auto newTableName = getTableName(tableName); + auto table = _executive->storage().openTable(newTableName); + if (table) + { + // table already exist + _callParameters->setExecResult(codec.encode(int32_t(CODE_TABLE_NAME_ALREADY_EXIST))); + return; + } + std::string tableManagerAddress = + blockContext->isWasm() ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS; + std::string kvTableAddress = blockContext->isWasm() ? KV_TABLE_NAME : KV_TABLE_ADDRESS; + std::string codeString = getDynamicPrecompiledCodeString(kvTableAddress, newTableName); + + auto input = codec.encode(newTableName, codeString); + std::string abi = + blockContext->blockVersion() >= static_cast(BlockVersion::V3_1_VERSION) ? + std::string(KV_TABLE_ABI) : + ""; + auto response = externalRequest(_executive, ref(input), _callParameters->m_origin, + tableManagerAddress, blockContext->isWasm() ? newTableName : "", false, true, + _callParameters->m_gasLeft - gasPricer->calTotalGas(), false, std::move(abi)); + + if (response->status != (int32_t)TransactionStatus::None) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("TableManagerPrecompiled") + << LOG_DESC("create kv table error") + << LOG_KV("tableName", newTableName) << LOG_KV("valueField", value); + BOOST_THROW_EXCEPTION(PrecompiledError("Create table error.")); + } + + // here is a trick to set table key field info + value = key + "," + value; + _executive->storage().createTable(getActualTableName(newTableName), value); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); +} + +void TableManagerPrecompiled::appendColumns( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + // appendColumns(string,string[]) + std::string tableName; + std::vector newColumns; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), tableName, newColumns); + tableName = getActualTableName(getTableName(tableName)); + + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("TableManagerPrecompiled") << LOG_DESC("appendColumns") + << LOG_KV("tableName", tableName) + << LOG_KV("newColumns", boost::join(newColumns, ",")); + // 1. get origin table info + auto table = _executive->storage().openTable(StorageInterface::SYS_TABLES); + auto existEntry = table->getRow(tableName); + if (!existEntry) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TableManagerPrecompiled") + << LOG_DESC("table not exists") << LOG_KV("tableName", tableName); + _callParameters->setExecResult(codec.encode(int32_t(CODE_TABLE_NOT_EXIST))); + return; + } + // here is a trick to avoid key field dup, s_table save user table (key,fields) + std::vector originFields; + boost::split(originFields, std::string(existEntry->get()), boost::is_any_of(",")); + std::set checkDupFields(originFields.begin() + 1, originFields.end()); + // 2. check columns not duplicate + bool insertSuccess = true; + for (const auto& col : newColumns) + { + checkLengthValidate( + col, USER_TABLE_FIELD_NAME_MAX_LENGTH, CODE_TABLE_FIELD_LENGTH_OVERFLOW); + std::tie(std::ignore, insertSuccess) = checkDupFields.insert(col); + originFields.emplace_back(col); + if (!insertSuccess) + break; + } + if (!insertSuccess) + { + // dup + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TableManagerPrecompiled") + << LOG_DESC("columns duplicate") << LOG_KV("tableName", tableName); + _callParameters->setExecResult(codec.encode(int32_t(CODE_TABLE_DUPLICATE_FIELD))); + return; + } + // 3. append new columns + // manually change sys_table + // here is a trick to update table value fields + Entry newEntry; + auto newField = boost::join(originFields, ","); + + newEntry.importFields({std::move(newField)}); + _executive->storage().setRow(StorageInterface::SYS_TABLES, tableName, std::move(newEntry)); + gasPricer->appendOperation(InterfaceOpcode::Set, 1); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); +} + +void TableManagerPrecompiled::openTable( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// only solidity: openTable(string) => address + std::string tableName; + auto blockContext = _executive->blockContext().lock(); + if (blockContext->isWasm()) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("TableManager") << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("TableManager call undefined function!")); + } + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), tableName); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TableManagerPrecompiled") + << LOG_KV("openTable", tableName); + gasPricer->appendOperation(InterfaceOpcode::OpenTable); + // /tables + tableName + auto absolutePath = getTableName(tableName); + auto table = _executive->storage().openTable(absolutePath); + + if (table) + { + // file exists, try to get type + auto typeEntry = _executive->storage().getRow(absolutePath, FS_KEY_TYPE); + if (typeEntry && typeEntry->getField(0) == FS_TYPE_LINK) + { + // if link + auto addressEntry = _executive->storage().getRow(absolutePath, FS_LINK_ADDRESS); + auto contractAddress = std::string(addressEntry->get()); + auto codecAddress = codec.encode(Address(std::move(contractAddress))); + _callParameters->setExecResult(std::move(codecAddress)); + return; + } + + _callParameters->setExecResult(codec.encode(Address())); + return; + } + _callParameters->setExecResult(codec.encode(Address())); +} + +void TableManagerPrecompiled::desc( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// desc(string) + std::string tableName; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), tableName); + + tableName = getActualTableName(getTableName(tableName)); + PRECOMPILED_LOG(DEBUG) << LOG_DESC("Table desc") << LOG_KV("tableName", tableName); + + auto sysEntry = _executive->storage().getRow(storage::StorageInterface::SYS_TABLES, tableName); + if (!sysEntry) + { + TableInfoTuple tableInfo = {}; + _callParameters->setExecResult(codec.encode(std::move(tableInfo))); + return; + } + auto keyAndValue = sysEntry->get(); + // for compatibility + if (keyAndValue.starts_with(V320_TABLE_INFO_PREFIX)) + { + keyAndValue = keyAndValue.substr(keyAndValue.find_first_of(',') + 1); + } + auto keyField = std::string(keyAndValue.substr(0, keyAndValue.find_first_of(','))); + auto valueFields = std::string(keyAndValue.substr(keyAndValue.find_first_of(',') + 1)); + std::vector values; + boost::split(values, std::move(valueFields), boost::is_any_of(",")); + + TableInfoTuple tableInfo = {std::move(keyField), std::move(values)}; + + gasPricer->appendOperation(InterfaceOpcode::Select); + _callParameters->setExecResult(codec.encode(std::move(tableInfo))); +} + +void TableManagerPrecompiled::descWithKeyOrder( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// descWithKeyOrder(string) + std::string tableName; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), tableName); + + tableName = getActualTableName(getTableName(tableName)); + PRECOMPILED_LOG(DEBUG) << LOG_DESC("Table desc") << LOG_KV("tableName", tableName); + + auto sysEntry = _executive->storage().getRow(storage::StorageInterface::SYS_TABLES, tableName); + if (!sysEntry) + { + TableInfoTupleV320 tableInfo = {}; + _callParameters->setExecResult(codec.encode(std::move(tableInfo))); + return; + } + auto keyAndValue = sysEntry->get(); + + uint8_t keyOrder = 0; + if (keyAndValue.starts_with(V320_TABLE_INFO_PREFIX)) + { + keyAndValue = keyAndValue.substr(V320_TABLE_INFO_PREFIX.length()); + keyOrder = (uint8_t)boost::lexical_cast( + keyAndValue.substr(0, keyAndValue.find_first_of(','))); + keyAndValue = keyAndValue.substr(keyAndValue.find_first_of(',') + 1); + } + auto keyField = std::string(keyAndValue.substr(0, keyAndValue.find_first_of(','))); + auto valueFields = std::string(keyAndValue.substr(keyAndValue.find_first_of(',') + 1)); + std::vector values; + boost::split(values, std::move(valueFields), boost::is_any_of(",")); + + TableInfoTupleV320 tableInfo = {keyOrder, std::move(keyField), std::move(values)}; + + gasPricer->appendOperation(InterfaceOpcode::Select); + _callParameters->setExecResult(codec.encode(std::move(tableInfo))); +} + +void TableManagerPrecompiled::externalCreateTable( + const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters, + const std::string& tableName, const CodecWrapper& codec, const std::string& valueField) const +{ + auto blockContext = _executive->blockContext().lock(); + gasPricer->appendOperation(InterfaceOpcode::CreateTable); + // /tables + tableName + auto newTableName = getTableName(tableName); + auto table = _executive->storage().openTable(newTableName); + if (table) + { + // table already exist + _callParameters->setExecResult(codec.encode(int32_t(CODE_TABLE_NAME_ALREADY_EXIST))); + return; + } + std::string tableManagerAddress = + blockContext->isWasm() ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS; + std::string tableAddress = blockContext->isWasm() ? TABLE_NAME : TABLE_ADDRESS; + + std::string codeString = getDynamicPrecompiledCodeString(tableAddress, newTableName); + auto input = codec.encode(newTableName, codeString); + std::string abi = + blockContext->blockVersion() >= static_cast(BlockVersion::V3_1_VERSION) ? + std::string(TABLE_ABI) : + ""; + auto response = externalRequest(_executive, ref(input), _callParameters->m_origin, + tableManagerAddress, blockContext->isWasm() ? newTableName : "", false, true, + _callParameters->m_gasLeft - gasPricer->calTotalGas(), false, std::move(abi)); + + if (response->status != (int32_t)TransactionStatus::None) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("TableManagerPrecompiled") + << LOG_DESC("create table error") << LOG_KV("tableName", newTableName) + << LOG_KV("valueField", valueField); + BOOST_THROW_EXCEPTION(PrecompiledError("Create table error.")); + } + + _executive->storage().createTable(getActualTableName(newTableName), valueField); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); +} diff --git a/bcos-executor/src/precompiled/TableManagerPrecompiled.h b/bcos-executor/src/precompiled/TableManagerPrecompiled.h new file mode 100644 index 0000000..583ba93 --- /dev/null +++ b/bcos-executor/src/precompiled/TableManagerPrecompiled.h @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TableManagerPrecompiled.h + * @author: kyonGuo + * @date 2022/4/8 + */ + +#pragma once + +#include "../executive/TransactionExecutive.h" +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include + +namespace bcos::precompiled +{ +class TableManagerPrecompiled : public Precompiled +{ +public: + using Ptr = std::shared_ptr; + TableManagerPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~TableManagerPrecompiled() = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + using CRUDParams = std::function&, + const PrecompiledGas::Ptr&, PrecompiledExecResult::Ptr const&)>; + void createTable(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void createTableV32(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void createKVTable(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void appendColumns(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void openTable(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void desc(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void descWithKeyOrder(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void externalCreateTable(const std::shared_ptr& _executive, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters, + const std::string& tableName, const CodecWrapper& codec, + const std::string& valueField) const; + + inline void registerFunc(uint32_t _selector, CRUDParams _func, + protocol::BlockVersion _minVersion = protocol::BlockVersion::V3_0_VERSION) + { + selector2Func.insert({_selector, {_minVersion, std::move(_func)}}); + } + std::unordered_map> selector2Func; +}; +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/TablePrecompiled.cpp b/bcos-executor/src/precompiled/TablePrecompiled.cpp new file mode 100644 index 0000000..feb8312 --- /dev/null +++ b/bcos-executor/src/precompiled/TablePrecompiled.cpp @@ -0,0 +1,1193 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TablePrecompiled.cpp + * @author: kyonGuo + * @date 2022/4/20 + */ + +#include "TablePrecompiled.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::protocol; + +constexpr const char* const TABLE_METHOD_SELECT_KEY = "select(string)"; +constexpr const char* const TABLE_METHOD_SELECT_CON = "select((uint8,string)[],(uint32,uint32))"; +constexpr const char* const TABLE_METHOD_COUNT = "count((uint8,string)[])"; +constexpr const char* const TABLE_METHOD_INSERT = "insert((string,string[]))"; +constexpr const char* const TABLE_METHOD_UPDATE_KEY = "update(string,(string,string)[])"; +constexpr const char* const TABLE_METHOD_UPDATE_CON = + "update((uint8,string)[],(uint32,uint32),(string,string)[])"; +constexpr const char* const TABLE_METHOD_REMOVE_KEY = "remove(string)"; +constexpr const char* const TABLE_METHOD_REMOVE_CON = "remove((uint8,string)[],(uint32,uint32))"; + +/// v3.2.0 new interfaces +constexpr const char* const TABLE_METHOD_SELECT_CON_V320 = + "select((uint8,string,string)[],(uint32,uint32))"; +constexpr const char* const TABLE_METHOD_COUNT_V320 = "count((uint8,string,string)[])"; +constexpr const char* const TABLE_METHOD_UPDATE_CON_V320 = + "update((uint8,string,string)[],(uint32,uint32),(string,string)[])"; +constexpr const char* const TABLE_METHOD_REMOVE_CON_V320 = + "remove((uint8,string,string)[],(uint32,uint32))"; + +static std::string toNumericalOrder(std::string_view lexicographicKey) +{ + try + { + auto number = boost::lexical_cast(lexicographicKey); + // strict restrictions on lexicographicKey (for example, "000001234") + if (std::to_string(number) != lexicographicKey) [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) << "The key cannot be converted to a number(int64)"; + BOOST_THROW_EXCEPTION( + PrecompiledError("The key cannot be converted to a number(int64)")); + } + int64_t offset = std::numeric_limits::max(); + // map int64 to uint64 ([INT64_MIN, INT64_MAX] --> [UINT64_MIN, UINT64_MAX]) + uint64_t _number = + number < 0 ? (uint64_t)((number + offset) + 1) : ((uint64_t)(number) + offset) + 1; + std::stringstream stream; + // convert int64 to a string with length of 32 + stream << std::setfill('0') << std::setw(32) << std::right << _number; + return stream.str(); + } + catch (boost::bad_lexical_cast& e) + { + PRECOMPILED_LOG(DEBUG) << "The key cannot be converted to a number(int64)"; + BOOST_THROW_EXCEPTION(PrecompiledError("The key cannot be converted to a number(int64)")); + } +} + +static std::string toLexicographicOrder(std::string_view numericalKey) +{ + auto number = boost::lexical_cast(numericalKey); + int64_t offset = std::numeric_limits::max(); + // map uint64 to int64 ([UINT64_MIN, UINT64_MAX] --> [INT64_MIN, INT64_MAX]) + int64_t _number = number > (uint64_t)offset ? (int64_t)((number - offset) - 1) : + ((int64_t)number - offset) - 1; + return std::to_string(_number); +} + +bool TablePrecompiled::isNumericalOrder(const TableInfoTupleV320& tableInfo) +{ + uint8_t keyOrder = std::get<0>(tableInfo); + if (keyOrder != 0 && keyOrder != 1) [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) << std::to_string((int)keyOrder) + " KeyOrder not exist!"; + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError(std::to_string((int)keyOrder) + " KeyOrder not exist!")); + } + return keyOrder == 1; +} + +bool TablePrecompiled::isNumericalOrder( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const std::string& _tableName) +{ + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, _tableName, _executive, _callParameters, true); + return isNumericalOrder(tableInfo.info_v320); +} + +static size_t selectByValueCond(const std::shared_ptr& _executive, + const std::string& tableName, const std::vector& tableKeyList, + std::vector& entries, std::optional valueCondition, + bool toLexicographic = false) +{ + auto [offset, total] = valueCondition->getLimit(); + if (total == 0) + return 0; + + size_t validCount = 0; + for (const auto& key : tableKeyList) + { + auto tableEntry = _executive->storage().getRow(tableName, key); + EntryTuple entryTuple; + // Convert key back to lexicographical order, when the table uses numerical order + if (toLexicographic) + { + entryTuple = { + toLexicographicOrder(key), tableEntry->getObject>()}; + } + else + { + entryTuple = {key, tableEntry->getObject>()}; + } + + if (valueCondition->isValid(std::get<1>(entryTuple))) + { + if (validCount >= offset && validCount < offset + total) + { + entries.emplace_back(std::move(entryTuple)); + } + ++validCount; + if (validCount >= offset + total) + { + break; + } + } + } + return validCount; +} + +template +static void processEntryByValueCond( + const std::shared_ptr& _executive, const std::string& tableName, + std::optional keyCondition, + std::optional valueCondition, Functor&& processEntry) +{ + size_t totalCount = 0; + size_t singleCountByKeyMax = keyCondition->getLimit().second; + size_t singleCountByKey = singleCountByKeyMax; + auto [valueLimitOffset, valueLimitCount] = valueCondition->getLimit(); + while (singleCountByKey >= singleCountByKeyMax && totalCount < valueLimitCount) + { + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, keyCondition); + auto [validCount, entrySize] = processEntry(tableKeyList, valueCondition); + singleCountByKey = tableKeyList.size(); + totalCount += entrySize; + valueLimitOffset = std::max(int(valueLimitOffset - validCount), 0); + auto [keyLimitOffset, keyLimitCount] = keyCondition->getLimit(); + keyCondition->limit(keyLimitOffset + singleCountByKey, keyLimitCount); + valueCondition->limit(valueLimitOffset, valueLimitCount - totalCount); + } +} + +TablePrecompiled::TablePrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + registerFunc(getFuncSelector(TABLE_METHOD_SELECT_KEY), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + selectByKey(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_SELECT_CON), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + selectByCondition(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_COUNT), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + count(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_INSERT), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + insert(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_UPDATE_KEY), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + updateByKey(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_UPDATE_CON), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + updateByCondition(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_REMOVE_KEY), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + removeByKey(table, executive, data, pricer, params); + }); + registerFunc(getFuncSelector(TABLE_METHOD_REMOVE_CON), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + removeByCondition(table, executive, data, pricer, params); + }); + registerFunc( + getFuncSelector(TABLE_METHOD_SELECT_CON_V320), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + selectByConditionV32(table, executive, data, pricer, params); + }, + BlockVersion::V3_2_VERSION); + registerFunc( + getFuncSelector(TABLE_METHOD_COUNT_V320), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + countV32(table, executive, data, pricer, params); + }, + BlockVersion::V3_2_VERSION); + registerFunc( + getFuncSelector(TABLE_METHOD_UPDATE_CON_V320), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + updateByConditionV32(table, executive, data, pricer, params); + }, + BlockVersion::V3_2_VERSION); + registerFunc( + getFuncSelector(TABLE_METHOD_REMOVE_CON_V320), + [this](auto&& table, auto&& executive, auto&& data, auto&& pricer, auto&& params) { + removeByConditionV32(table, executive, data, pricer, params); + }, + BlockVersion::V3_2_VERSION); +} + +std::shared_ptr TablePrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + // [tableName,keyField,valueFields][actualParams] + std::vector dynamicParams; + bytes param; + codec.decode(_callParameters->input(), dynamicParams, param); + auto tableName = dynamicParams.at(0); + tableName = getActualTableName(tableName); + // get user call actual params + auto originParam = ref(param); + uint32_t func = getParamFunc(originParam); + bytesConstRef data = getParamData(originParam); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(param.size()); + + auto table = _executive->storage().openTable(tableName); + if (!table.has_value()) + { + BOOST_THROW_EXCEPTION(PrecompiledError(tableName + " does not exist")); + } + + auto selector = selector2Func.find(func); + if (selector != selector2Func.end()) [[likely]] + { + auto& [minVersion, execFunc] = selector->second; + if (versionCompareTo(blockContext->blockVersion(), minVersion) >= 0) + { + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_DESC("call function") + << LOG_KV("func", func) << LOG_KV("minVersion", minVersion); + } + execFunc(tableName, _executive, data, gasPricer, _callParameters); + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; + } + } + + PRECOMPILED_LOG(INFO) << LOG_BADGE("TablePrecompiled") << LOG_DESC("call undefined function!"); + BOOST_THROW_EXCEPTION(PrecompiledError("TablePrecompiled call undefined function!")); +} + +void TablePrecompiled::desc(precompiled::TableInfo& _tableInfo, const std::string& _tableName, + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, bool withKeyOrder) const +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto tableName = _tableName.starts_with("u_") ? _tableName.substr(2) : _tableName; + PRECOMPILED_LOG(DEBUG) << LOG_DESC("TablePrecompiled desc") << LOG_KV("tableName", tableName); + + auto input = withKeyOrder ? codec.encodeWithSig("descWithKeyOrder(string)", tableName) : + codec.encodeWithSig("desc(string)", tableName); + std::string tableManagerAddress = + blockContext->isWasm() ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS; + + // external call to get desc + auto response = externalRequest(_executive, ref(input), _callParameters->m_origin, + _callParameters->m_codeAddress, tableManagerAddress, _callParameters->m_staticCall, + _callParameters->m_create, _callParameters->m_gasLeft); + + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION && + withKeyOrder) + { + codec.decode(ref(response->data), _tableInfo.info_v320); + } + else + { + codec.decode(ref(response->data), _tableInfo.info); + } +} + +void TablePrecompiled::buildKeyCondition(std::shared_ptr& keyCondition, + const std::vector& conditions, const LimitTuple& limit) const +{ + const auto& offset = std::get<0>(limit); + const auto& count = std::get<1>(limit); + if (count > USER_TABLE_MAX_LIMIT_COUNT || offset > offset + count) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("build key condition limit overflow") + << LOG_KV("offset", offset) << LOG_KV("count", count); + BOOST_THROW_EXCEPTION(PrecompiledError("Limit overflow.")); + } + if (conditions.empty()) + { + BOOST_THROW_EXCEPTION(PrecompiledError("Condition is empty")); + } + for (const auto& condition : conditions) + { + const auto& cmp = std::get<0>(condition); + const auto& value = std::get<1>(condition); + switch (cmp) + { + case 0: + keyCondition->GT(value); + break; + case 1: + keyCondition->GE(value); + break; + case 2: + keyCondition->LT(value); + break; + case 3: + keyCondition->LE(value); + break; + default: + BOOST_THROW_EXCEPTION( + PrecompiledError(std::to_string(cmp) + " ConditionOP not exist!")); + } + } + + keyCondition->limit(offset, count); +} + +bool TablePrecompiled::buildConditions(std::optional& valueCondition, + const std::vector& conditions, const LimitTuple& limit, + precompiled::TableInfoTupleV320& tableInfo) const +{ + const auto& offset = std::get<0>(limit); + const auto& count = std::get<1>(limit); + if (count > USER_TABLE_MAX_LIMIT_COUNT || offset > offset + count) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("build key condition limit overflow") + << LOG_KV("offset", offset) << LOG_KV("count", count); + BOOST_THROW_EXCEPTION(PrecompiledError("Limit overflow.")); + } + if (conditions.empty()) + { + BOOST_THROW_EXCEPTION(PrecompiledError("Condition is empty")); + } + + auto& keyField = std::get<1>(tableInfo); + auto& columns = std::get<2>(tableInfo); + + bool isRangeSelect = true; + for (const auto& [cmp, field, field_value] : conditions) + { + uint32_t field_idx = 0; + auto const it = std::find(columns.begin(), columns.end(), field); + if (it == columns.end() && field != keyField) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_DESC("Table condition field not found") + << LOG_KV("field", field); + BOOST_THROW_EXCEPTION(PrecompiledError("Table condition fields not found")); + } + if (field != keyField) + { + field_idx = std::distance(columns.begin(), it) + 1; + } + + auto value = field_value; + + if (field_idx == 0) + { + if (isNumericalOrder(tableInfo) && + (cmp < (uint8_t)storage::Condition::Comparator::STARTS_WITH || + cmp > (uint8_t)storage::Condition::Comparator::CONTAINS)) + { + value = toNumericalOrder(value); + } + isRangeSelect = isRangeSelect && !(cmp < (uint8_t)storage::Condition::Comparator::GT || + cmp > (uint8_t)storage::Condition::Comparator::LE); + } + valueCondition->addOp(cmp, field_idx, value); + } + bool onlyUseKey = valueCondition->contains(0) && valueCondition->size() == 1; + if (onlyUseKey) + { + valueCondition->limitKey(offset, count); + } + else + { + valueCondition->limit(offset, count); + if (isRangeSelect && valueCondition->contains(0)) + { + valueCondition->limitKey(0, std::max(count, (uint32_t)USER_TABLE_MIN_LIMIT_COUNT)); + } + else + { + valueCondition->limitKey(0, USER_TABLE_MAX_LIMIT_COUNT); + } + } + return !onlyUseKey; +} + +void TablePrecompiled::selectByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// select(string) + std::string key; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, key); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("tableName", tableName); + + std::string originKey = key; + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION && + isNumericalOrder(_executive, _callParameters, tableName)) + { + key = toNumericalOrder(key); + } + + auto entry = _executive->storage().getRow(tableName, key); + if (!entry.has_value()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_DESC("Table select not exist") << LOG_KV("key", key); + EntryTuple emptyEntry = {}; + _callParameters->setExecResult(codec.encode(std::move(emptyEntry))); + return; + } + auto values = entry->getObject>(); + + // update the memory gas and the computation gas + gasPricer->updateMemUsed(values.size()); + gasPricer->appendOperation(InterfaceOpcode::Select); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("key", key) << LOG_KV("valueSize", values.size()); + + // Return the original key instead of the key converted to numerical order + EntryTuple entryTuple = {originKey, std::move(values)}; + _callParameters->setExecResult(codec.encode(std::move(entryTuple))); +} + +void TablePrecompiled::selectByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// select((uint8,string)[],(uint32,uint32)) + std::vector conditions; + precompiled::LimitTuple limit; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, conditions, limit); + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limit)) + << LOG_KV("limitCount", std::get<1>(limit)); + + auto keyCondition = std::make_shared(); + // will throw exception when wrong condition cmp or limit count overflow + buildKeyCondition(keyCondition, conditions, limit); + + std::vector entries({}); + + // merge keys from storage and eqKeys + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + entries.reserve(tableKeyList.size()); + for (auto& key : tableKeyList) + { + auto tableEntry = _executive->storage().getRow(tableName, key); + EntryTuple entryTuple = {key, tableEntry->getObject>()}; + entries.emplace_back(std::move(entryTuple)); + } + + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("entries.size", entries.size()); + // update the memory gas and the computation gas + gasPricer->updateMemUsed(entries.size()); + gasPricer->appendOperation(InterfaceOpcode::Select, entries.size()); + _callParameters->setExecResult(codec.encode(entries)); +} + +void TablePrecompiled::selectByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// select((uint8,string,string)[],(uint32,uint32)) + std::vector conditions; + precompiled::LimitTuple limit; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + bool _isNumericalOrder = false; + + codec.decode(data, conditions, limit); + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, tableName, _executive, _callParameters, true); + _isNumericalOrder = isNumericalOrder(tableInfo.info_v320); + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limit)) + << LOG_KV("limitCount", std::get<1>(limit)); + + auto valueCondition = std::make_optional(); + auto useValueCond = + buildConditions(valueCondition, std::move(conditions), limit, tableInfo.info_v320); + + std::vector entries({}); + // when limitcount==0, skip select operation directly + if (std::get<1>(limit) > 0) + { + if (useValueCond) + { + auto func = [_executive, &tableName, &entries, _isNumericalOrder]( + const std::vector& tableKeyList, + std::optional _valueCondition) { + size_t entrySize = entries.size(); + size_t validCount = selectByValueCond(_executive, tableName, tableKeyList, entries, + std::move(_valueCondition), _isNumericalOrder); + return std::pair{validCount, entries.size() - entrySize}; + }; + processEntryByValueCond( + _executive, tableName, *valueCondition->at(0), valueCondition, std::move(func)); + } + else + { + // merge keys from storage and eqKeys + // keyCondition must exist + auto tableKeyList = + _executive->storage().getPrimaryKeys(tableName, *valueCondition->at(0)); + entries.reserve(tableKeyList.size()); + for (auto& key : tableKeyList) + { + auto tableEntry = _executive->storage().getRow(tableName, key); + EntryTuple entryTuple; + if (_isNumericalOrder) + { + entryTuple = {toLexicographicOrder(key), + tableEntry->getObject>()}; + } + else + { + entryTuple = {key, tableEntry->getObject>()}; + } + entries.emplace_back(std::move(entryTuple)); + } + } + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("SELECT") + << LOG_KV("entries.size", entries.size()); + // update the memory gas and the computation gas + gasPricer->updateMemUsed(entries.size()); + gasPricer->appendOperation(InterfaceOpcode::Select, entries.size()); + _callParameters->setExecResult(codec.encode(entries)); +} + +void TablePrecompiled::count(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// count((uint8,string)[]) + std::vector conditions; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, conditions); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("COUNT") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()); + + uint32_t totalCount = 0; + uint32_t singleCount = 0; + do + { + auto keyCondition = std::make_shared(); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + // will throw exception when wrong condition cmp or limit count overflow + buildKeyCondition( + keyCondition, conditions, {0 + totalCount, USER_TABLE_MAX_LIMIT_COUNT}); + } + else if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_0_VERSION) <= 0) + { + /// NOTE: if version <= 3.0, here will use empty limit, which means count always return + /// 0 + buildKeyCondition(keyCondition, conditions, {}); + } + + singleCount = _executive->storage().getPrimaryKeys(tableName, *keyCondition).size(); + if (totalCount > totalCount + singleCount) + { + // overflow + totalCount = UINT32_MAX; + break; + } + totalCount += singleCount; + } while (singleCount >= USER_TABLE_MAX_LIMIT_COUNT); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("COUNT") + << LOG_KV("totalCount", totalCount); + // update the memory gas and the computation gas + gasPricer->appendOperation(InterfaceOpcode::Select); + _callParameters->setExecResult(codec.encode(uint32_t(totalCount))); +} + +void TablePrecompiled::countV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// count((uint8,string,string)[]) + std::vector conditions; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + codec.decode(data, conditions); + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, tableName, _executive, _callParameters, true); + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("COUNT") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()); + + auto valueCondition = std::make_optional(); + bool useValueCond = buildConditions( + valueCondition, conditions, {0, USER_TABLE_MAX_LIMIT_COUNT}, tableInfo.info_v320); + auto keyCondition = valueCondition->at(0); + uint32_t totalCount = 0; + uint32_t singleCount = 0; + uint32_t singleCountByKey = 0; + uint32_t singleCountByKeyMax = valueCondition->getKeyLimit().second; + do + { + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + singleCountByKey = tableKeyList.size(); + singleCount = singleCountByKey; + auto [keyLimitOffset, keyLimitCount] = keyCondition->m_limit; + keyCondition->limit(keyLimitOffset + singleCountByKey, keyLimitCount); + if (useValueCond) + { + std::vector entries({}); + entries.reserve(tableKeyList.size()); + selectByValueCond(_executive, tableName, tableKeyList, entries, valueCondition); + singleCount = entries.size(); + } + if (totalCount > totalCount + singleCount) + { + // overflow + totalCount = UINT32_MAX; + break; + } + totalCount += singleCount; + } while (singleCountByKey >= singleCountByKeyMax); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("COUNT") + << LOG_KV("totalCount", totalCount); + // update the memory gas and the computation gas + gasPricer->appendOperation(InterfaceOpcode::Select); + _callParameters->setExecResult(codec.encode(uint32_t(totalCount))); +} + +void TablePrecompiled::insert(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// insert((string,string[])) + precompiled::EntryTuple insertEntry; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, insertEntry); + + auto& key = std::get<0>(insertEntry); + auto& values = std::get<1>(insertEntry); + + precompiled::TableInfo tableInfo; + // external call table manager desc + std::vector columns; + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION) + { + desc(tableInfo, tableName, _executive, _callParameters, true); + if (isNumericalOrder(tableInfo.info_v320)) + { + key = toNumericalOrder(key); + } + columns = std::get<2>(tableInfo.info_v320); + } + else + { + desc(tableInfo, tableName, _executive, _callParameters, false); + columns = std::get<1>(tableInfo.info); + } + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("INSERT") + << LOG_KV("tableName", tableName) << LOG_KV("key", key) + << LOG_KV("valueSize", values.size()); + + if (values.size() != columns.size()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("INSERT") + << LOG_DESC("Table insert entry fields number mismatch") + << LOG_KV("valueSize", values.size()) + << LOG_KV("fieldSize", columns.size()); + BOOST_THROW_EXCEPTION(PrecompiledError("Table insert entry fields number mismatch")); + } + checkLengthValidate(key, USER_TABLE_KEY_VALUE_MAX_LENGTH, CODE_TABLE_KEY_VALUE_LENGTH_OVERFLOW); + std::for_each(values.begin(), values.end(), [](std::string_view _v) { + checkLengthValidate( + _v, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW); + }); + + if (_executive->storage().getRow(tableName, key)) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("INSERT") + << LOG_DESC("key already exist in table, please use UPDATE method") + << LOG_KV("key", key); + _callParameters->setExecResult(codec.encode(int32_t(CODE_INSERT_KEY_EXIST))); + return; + } + + Entry entry; + entry.setObject(std::move(values)); + + gasPricer->appendOperation(InterfaceOpcode::Insert); + gasPricer->updateMemUsed(entry.size()); + _executive->storage().setRow(tableName, key, std::move(entry)); + _callParameters->setExecResult(codec.encode(int32_t(1))); +} + +void TablePrecompiled::updateByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// update(string,(string,string)[]) + std::string key; + std::vector updateFields; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, key, updateFields); + + precompiled::TableInfo tableInfo; + // external call table manager desc + std::string keyField; + std::vector columns; + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION) + { + desc(tableInfo, tableName, _executive, _callParameters, true); + if (isNumericalOrder(tableInfo.info_v320)) + { + key = toNumericalOrder(key); + } + keyField = std::get<1>(tableInfo.info_v320); + columns = std::get<2>(tableInfo.info_v320); + } + else + { + desc(tableInfo, tableName, _executive, _callParameters, false); + keyField = std::get<0>(tableInfo.info); + columns = std::get<1>(tableInfo.info); + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_KV("tableName", tableName) << LOG_KV("updateKey", key) + << LOG_KV("updateFieldsSize", updateFields.size()); + auto existEntry = _executive->storage().getRow(tableName, key); + if (!existEntry) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("key not exist in table, please use INSERT method") + << LOG_KV("notExistKey", key); + _callParameters->setExecResult(codec.encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + return; + } + + auto values = existEntry->getObject>(); + for (const auto& kv : updateFields) + { + auto& field = std::get<0>(kv); + auto& value = std::get<1>(kv); + checkLengthValidate( + value, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW); + auto const it = std::find(columns.begin(), columns.end(), field); + if (field == keyField) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table cannot update keyField") << LOG_KV("keyField", keyField); + BOOST_THROW_EXCEPTION( + PrecompiledError("Table update fields cannot contains key field")); + } + if (it == columns.end()) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table update field not found") << LOG_KV("field", field); + BOOST_THROW_EXCEPTION(PrecompiledError("Table update fields not found")); + } + auto index = std::distance(columns.begin(), it); + values[index] = value; + } + Entry updateEntry; + updateEntry.setObject(std::move(values)); + _executive->storage().setRow(tableName, key, std::move(updateEntry)); + + gasPricer->appendOperation(InterfaceOpcode::Update); + _callParameters->setExecResult(codec.encode(int32_t(1))); +} + +void TablePrecompiled::updateByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// update((uint8,string)[],(uint32,uint32),(uint,string)[]) + std::vector conditions; + precompiled::LimitTuple limitTuple; + std::vector updateFields; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, conditions, limitTuple, updateFields); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limitTuple)) + << LOG_KV("limitCount", std::get<1>(limitTuple)) + << LOG_KV("updateFieldsSize", updateFields.size()); + auto keyCondition = std::make_shared(); + + // will throw exception when wrong condition cmp or limit count overflow + buildKeyCondition(keyCondition, std::move(conditions), std::move(limitTuple)); + + if (c_fileLogLevel <= LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("keyCond trace ") << keyCondition->toString(); + } + + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, tableName, _executive, _callParameters, false); + auto keyField = std::get<0>(tableInfo.info); + auto columns = std::get<1>(tableInfo.info); + + std::vector> updateValue; + updateValue.reserve(updateFields.size()); + for (const auto& kv : updateFields) + { + auto& field = std::get<0>(kv); + auto& value = std::get<1>(kv); + checkLengthValidate( + value, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW); + auto const it = std::find(columns.begin(), columns.end(), field); + if (field == keyField) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table cannot update keyField") << LOG_KV("keyField", keyField); + BOOST_THROW_EXCEPTION( + PrecompiledError("Table update fields cannot contains key field")); + } + if (it == columns.end()) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table update field not found") << LOG_KV("field", field); + BOOST_THROW_EXCEPTION(PrecompiledError("Table update fields not found")); + } + std::pair p = {std::distance(columns.begin(), it), std::move(value)}; + updateValue.emplace_back(std::move(p)); + } + + auto entries = _executive->storage().getRows(tableName, tableKeyList); + for (size_t i = 0; i < entries.size(); ++i) + { + auto&& entry = entries[i]; + auto values = entry->getObject>(); + for (auto& kv : updateValue) + { + values[kv.first] = kv.second; + } + entry->setObject(std::move(values)); + _executive->storage().setRow(tableName, tableKeyList[i], std::move(entry.value())); + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_KV("selectKeySize", tableKeyList.size()) + << LOG_KV("affectedRows", entries.size()); + gasPricer->setMemUsed(tableKeyList.size() * columns.size()); + gasPricer->appendOperation(InterfaceOpcode::Update, tableKeyList.size()); + _callParameters->setExecResult(codec.encode((int32_t)tableKeyList.size())); +} + +void TablePrecompiled::updateByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// update((uint8,string,string)[],(uint32,uint32),(uint,string)[]) + std::vector conditions; + precompiled::LimitTuple limitTuple; + std::vector updateFields; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + codec.decode(data, conditions, limitTuple, updateFields); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limitTuple)) + << LOG_KV("limitCount", std::get<1>(limitTuple)) + << LOG_KV("updateFieldsSize", updateFields.size()); + + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, tableName, _executive, _callParameters, true); + std::string keyField = std::get<1>(tableInfo.info_v320); + std::vector columns = std::get<2>(tableInfo.info_v320); + + auto valueCondition = std::make_optional(); + // will throw exception when wrong condition cmp or limit count overflow + bool useValueCond = + buildConditions(valueCondition, std::move(conditions), limitTuple, tableInfo.info_v320); + auto keyCondition = valueCondition->at(0); + + if (c_fileLogLevel <= LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("keyCond trace ") << keyCondition->toString(); + } + + std::vector> updateValue; + updateValue.reserve(updateFields.size()); + for (const auto& kv : updateFields) + { + auto& field = std::get<0>(kv); + auto& value = std::get<1>(kv); + checkLengthValidate( + value, USER_TABLE_FIELD_VALUE_MAX_LENGTH, CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW); + if (field == keyField) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table cannot update keyField") << LOG_KV("keyField", keyField); + BOOST_THROW_EXCEPTION( + PrecompiledError("Table update fields cannot contains key field")); + } + auto const it = std::find(columns.begin(), columns.end(), field); + if (it == columns.end()) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_DESC("Table update field not found") << LOG_KV("field", field); + BOOST_THROW_EXCEPTION(PrecompiledError("Table update fields not found")); + } + std::pair p = {std::distance(columns.begin(), it), std::move(value)}; + updateValue.emplace_back(std::move(p)); + } + + uint32_t affectedRows = 0; + // when limitcount==0, skip update operation directly + if (std::get<1>(limitTuple) > 0) + { + if (useValueCond) + { + auto func = [_executive, &tableName, &updateValue, &affectedRows]( + const std::vector& tableKeyList, + std::optional _valueCondition) { + std::vector entries({}); + size_t validCount = selectByValueCond( + _executive, tableName, tableKeyList, entries, _valueCondition); + for (auto& entryTuple : entries) + { + auto& values = std::get<1>(entryTuple); + for (auto& kv : updateValue) + { + values[kv.first] = kv.second; + } + storage::Entry entry; + entry.setObject(values); + _executive->storage().setRow( + tableName, std::get<0>(entryTuple), std::move(entry)); + } + affectedRows += entries.size(); + return std::pair{validCount, entries.size()}; + }; + processEntryByValueCond( + _executive, tableName, *keyCondition, valueCondition, std::move(func)); + } + else + { + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + auto entries = _executive->storage().getRows(tableName, tableKeyList); + for (size_t i = 0; i < entries.size(); ++i) + { + auto&& entry = entries[i]; + auto values = entry->getObject>(); + for (auto& kv : updateValue) + { + values[kv.first] = kv.second; + } + entry->setObject(std::move(values)); + _executive->storage().setRow(tableName, tableKeyList[i], std::move(entry.value())); + } + affectedRows = tableKeyList.size(); + } + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("UPDATE") + << LOG_KV("selectSize", affectedRows) + << LOG_KV("affectedRows", affectedRows); + gasPricer->setMemUsed(affectedRows * columns.size()); + gasPricer->appendOperation(InterfaceOpcode::Update, affectedRows); + _callParameters->setExecResult(codec.encode((int32_t)affectedRows)); +} + +void TablePrecompiled::removeByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// remove(string) + std::string key; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, key); + PRECOMPILED_LOG(DEBUG) << LOG_DESC("Table remove") << LOG_KV("tableName", tableName) + << LOG_KV("removeKey", key); + + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_2_VERSION && + isNumericalOrder(_executive, _callParameters, tableName)) + { + key = toNumericalOrder(key); + } + + auto existEntry = _executive->storage().getRow(tableName, key); + if (!existEntry) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_DESC("key not exist in table") << LOG_KV("notExistKey", key); + _callParameters->setExecResult(codec.encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + return; + } + Entry deletedEntry; + deletedEntry.setStatus(Entry::DELETED); + _executive->storage().setRow(tableName, key, std::move(deletedEntry)); + + gasPricer->appendOperation(InterfaceOpcode::Remove); + _callParameters->setExecResult(codec.encode(int32_t(1))); +} + +void TablePrecompiled::removeByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// remove((uint8,string)[],(uint32,uint32)) + std::vector conditions; + precompiled::LimitTuple limitTuple; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, conditions, limitTuple); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limitTuple)) + << LOG_KV("limitCount", std::get<1>(limitTuple)); + + auto keyCondition = std::make_shared(); + + // will throw exception when wrong condition cmp or limit count overflow + buildKeyCondition(keyCondition, std::move(conditions), std::move(limitTuple)); + + if (c_fileLogLevel <= LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_DESC("keyCond trace ") << keyCondition->toString(); + } + + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + + for (auto& tableKey : tableKeyList) + { + Entry deletedEntry; + deletedEntry.setStatus(Entry::DELETED); + _executive->storage().setRow(tableName, tableKey, std::move(deletedEntry)); + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_KV("affectedRows", tableKeyList.size()); + gasPricer->setMemUsed(tableKeyList.size()); + gasPricer->appendOperation(InterfaceOpcode::Remove, tableKeyList.size()); + _callParameters->setExecResult(codec.encode((int32_t)tableKeyList.size())); +} + +void TablePrecompiled::removeByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, const PrecompiledExecResult::Ptr& _callParameters) +{ + /// remove((uint8,string,string)[],(uint32,uint32)) + std::vector conditions; + precompiled::LimitTuple limitTuple; + auto blockContext = _executive->blockContext().lock(); + + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, conditions, limitTuple); + precompiled::TableInfo tableInfo; + // external call table manager desc + desc(tableInfo, tableName, _executive, _callParameters, true); + + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_KV("tableName", tableName) + << LOG_KV("ConditionSize", conditions.size()) + << LOG_KV("limitOffset", std::get<0>(limitTuple)) + << LOG_KV("limitCount", std::get<1>(limitTuple)); + + auto valueCondition = std::make_optional(); + // will throw exception when wrong condition cmp or limit count overflow + bool useValueCond = + buildConditions(valueCondition, std::move(conditions), limitTuple, tableInfo.info_v320); + auto keyCondition = valueCondition->at(0); + + if (c_fileLogLevel <= LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_DESC("keyCond trace ") << keyCondition->toString(); + } + + uint32_t removedRows = 0; + // when limitcount==0, skip remove operation directly + if (std::get<1>(limitTuple) > 0) + { + if (useValueCond) + { + auto func = [_executive, &tableName, &removedRows]( + const std::vector& tableKeyList, + std::optional _valueCondition) { + std::vector entries({}); + size_t validCount = selectByValueCond( + _executive, tableName, tableKeyList, entries, _valueCondition); + for (auto& entry : entries) + { + storage::Entry deletedEntry; + deletedEntry.setStatus(Entry::DELETED); + _executive->storage().setRow( + tableName, std::get<0>(entry), std::move(deletedEntry)); + } + removedRows += entries.size(); + return std::pair{validCount, entries.size()}; + }; + processEntryByValueCond( + _executive, tableName, *keyCondition, valueCondition, std::move(func)); + } + else + { + auto tableKeyList = _executive->storage().getPrimaryKeys(tableName, *keyCondition); + for (auto& tableKey : tableKeyList) + { + storage::Entry deletedEntry; + deletedEntry.setStatus(Entry::DELETED); + _executive->storage().setRow(tableName, tableKey, std::move(deletedEntry)); + } + removedRows = tableKeyList.size(); + } + } + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("TablePrecompiled") << LOG_BADGE("REMOVE") + << LOG_KV("removedRows", removedRows); + gasPricer->setMemUsed(removedRows); + gasPricer->appendOperation(InterfaceOpcode::Remove, removedRows); + _callParameters->setExecResult(codec.encode((int32_t)removedRows)); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/TablePrecompiled.h b/bcos-executor/src/precompiled/TablePrecompiled.h new file mode 100644 index 0000000..a671b98 --- /dev/null +++ b/bcos-executor/src/precompiled/TablePrecompiled.h @@ -0,0 +1,103 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TablePrecompiled.h + * @author: kyonGuo + * @date 2022/4/20 + */ + +#pragma once + +#include "../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Condition.h" +#include +#include + +namespace bcos::precompiled +{ +class TablePrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + TablePrecompiled(crypto::Hash::Ptr _hashImpl); + ~TablePrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + using CRUDParams = std::function&, bytesConstRef&, + const PrecompiledGas::Ptr&, PrecompiledExecResult::Ptr const&)>; + + void selectByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void selectByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void selectByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void count(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void countV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void insert(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void updateByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void updateByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void updateByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void removeByKey(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void removeByCondition(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void removeByConditionV32(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledGas::Ptr& gasPricer, PrecompiledExecResult::Ptr const& _callParameters); + void buildKeyCondition(std::shared_ptr& keyCondition, + const std::vector& conditions, + const precompiled::LimitTuple& limit) const; + bool buildConditions(std::optional& valueCondition, + const std::vector& conditions, + const precompiled::LimitTuple& limit, precompiled::TableInfoTupleV320& tableInfo) const; + void desc(precompiled::TableInfo& _tableInfo, const std::string& tableName, + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters, bool withKeyOrder) const; + bool isNumericalOrder(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const std::string& _tableName); + static bool isNumericalOrder(const TableInfoTupleV320& tableInfo); + + inline void registerFunc(uint32_t _selector, CRUDParams _func, + protocol::BlockVersion _minVersion = protocol::BlockVersion::V3_0_VERSION) + { + selector2Func.insert({_selector, {_minVersion, std::move(_func)}}); + } + std::unordered_map> selector2Func; +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/common/Common.h b/bcos-executor/src/precompiled/common/Common.h new file mode 100644 index 0000000..6511c0d --- /dev/null +++ b/bcos-executor/src/precompiled/common/Common.h @@ -0,0 +1,195 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: kyonRay + * @date 2021-05-25 + */ + +#pragma once + +#include "PrecompiledAbi.h" +#include "bcos-framework/Common.h" +#include "bcos-framework/protocol/CommonError.h" +#include "bcos-framework/protocol/Exceptions.h" +#include "bcos-framework/storage/Common.h" +#include "bcos-framework/storage/Entry.h" +#include "bcos-executor/src/Common.h" +#include +#include + +namespace bcos +{ +namespace precompiled +{ +#define PRECOMPILED_LOG(LEVEL) BCOS_LOG(LEVEL) << "[EXECUTOR][PRECOMPILED]" + +using TableInfoTuple = std::tuple>; +using TableInfoTupleV320 = std::tuple>; +using ConditionTuple = std::tuple; +using ConditionTupleV320 = std::tuple; +using LimitTuple = std::tuple; +using UpdateFieldTuple = std::tuple; +using EntryTuple = std::tuple>; +using BfsTuple = std::tuple>; + +struct TableInfo +{ + TableInfoTuple info; + TableInfoTupleV320 info_v320; +}; +/// Precompiled reserved code field +static constexpr const char* const PRECOMPILED_CODE_FIELD = "[PRECOMPILED]"; +static constexpr const int PRECOMPILED_CODE_FIELD_SIZE = 13; + +/// SYS_CONFIG table fields +static constexpr size_t SYS_VALUE = 0; +static constexpr const char* SYS_VALUE_FIELDS = "value"; + +/// V320 Table Info Prefix +static const std::string V320_TABLE_INFO_PREFIX = "__v320_table_info__"; + +/// FileSystem path limit +static const size_t FS_PATH_MAX_LENGTH = 56; +static const size_t FS_PATH_MAX_LEVEL = 6; + +const int SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH = 64; +const int SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH = 1024; +// field +const int USER_TABLE_FIELD_NAME_MAX_LENGTH = 64; +const int USER_TABLE_NAME_MAX_LENGTH_S = 50; +// value +const int USER_TABLE_KEY_VALUE_MAX_LENGTH = 255; +const int USER_TABLE_FIELD_VALUE_MAX_LENGTH = 16 * 1024 * 1024 - 1; +const int USER_TABLE_MAX_LIMIT_COUNT = 500; +const int USER_TABLE_MIN_LIMIT_COUNT = 50; + +const int CODE_NO_AUTHORIZED = -50000; +const int CODE_TABLE_NAME_ALREADY_EXIST = -50001; +const int CODE_TABLE_NAME_LENGTH_OVERFLOW = -50002; +const int CODE_TABLE_FIELD_LENGTH_OVERFLOW = -50003; +const int CODE_TABLE_FIELD_TOTAL_LENGTH_OVERFLOW = -50004; +const int CODE_TABLE_KEY_VALUE_LENGTH_OVERFLOW = -50005; +const int CODE_TABLE_FIELD_VALUE_LENGTH_OVERFLOW = -50006; +const int CODE_TABLE_DUPLICATE_FIELD = -50007; +const int CODE_TABLE_INVALIDATE_FIELD = -50008; + +const int TX_COUNT_LIMIT_MIN = 1; +const int TX_GAS_LIMIT_MIN = 100000; + +enum PrecompiledErrorCode : int +{ + // BFSPrecompiled -53099 ~ -53000 + CODE_ADDRESS_OR_VERSION_ERROR = -51202, + CODE_FILE_COUNT_ERROR = -53007, + CODE_FILE_INVALID_TYPE = -53006, + CODE_FILE_INVALID_PATH = -53005, + CODE_FILE_BUILD_DIR_FAILED = -53003, + CODE_FILE_ALREADY_EXIST = -53002, + CODE_FILE_NOT_EXIST = -53001, + + // AccountManagerPrecompiled -51999 ~ -51900 + CODE_INVALID_REVOKE_LAST_AUTHORIZATION = -51907, + CODE_INVALID_NON_EXIST_AUTHORIZATION = -51906, + CODE_INVALID_NO_AUTHORIZED = -51905, + CODE_INVALID_TABLE_NOT_EXIST = -51904, + CODE_INVALID_CONTRACT_ADDRESS = -51903, + CODE_INVALID_CONTRACT_REPEAT_AUTHORIZATION = -51902, + CODE_INVALID_CONTRACT_AVAILABLE = -51901, + CODE_ACCOUNT_ALREADY_EXIST = -51900, + + // RingSigPrecompiled -51899 ~ -51800 + VERIFY_RING_SIG_FAILED = -51800, + + // GroupSigPrecompiled -51799 ~ -51700 + VERIFY_GROUP_SIG_FAILED = -51700, + + // PaillierPrecompiled -51699 ~ -51600 + CODE_INVALID_CIPHERS = -51600, + + // CRUDPrecompiled -51599 ~ -51500 + CODE_REMOVE_KEY_NOT_EXIST = -51508, + CODE_UPDATE_KEY_NOT_EXIST = -51507, + CODE_INSERT_KEY_EXIST = -51506, + CODE_KEY_NOT_EXIST_IN_ENTRY = -51504, + CODE_INVALID_UPDATE_TABLE_KEY = -51503, + CODE_CONDITION_OPERATION_UNDEFINED = -51502, + CODE_PARSE_CONDITION_ERROR = -51501, + CODE_PARSE_ENTRY_ERROR = -51500, + + // DagTransferPrecompiled -51499 ~ -51400 + CODE_INVALID_OPENTABLE_FAILED = -51406, + CODE_INVALID_BALANCE_OVERFLOW = -51405, + CODE_INVALID_INSUFFICIENT_BALANCE = -51404, + CODE_INVALID_USER_ALREADY_EXIST = -51403, + CODE_INVALID_USER_NOT_EXIST = -51402, + CODE_INVALID_AMOUNT = -51401, + CODE_INVALID_USER_NAME = -51400, + + // SystemConfigPrecompiled -51399 ~ -51300 + + // ConsensusPrecompiled -51199 ~ -51100 + CODE_ADD_SEALER_SHOULD_IN_OBSERVER = -51104, + CODE_NODE_NOT_EXIST = -51103, + CODE_INVALID_WEIGHT = -51102, + CODE_LAST_SEALER = -51101, + CODE_INVALID_NODE_ID = -51100, + + // AuthPrecompiledTest -51099 ~ -51000 + CODE_TABLE_AUTH_TYPE_DECODE_ERROR = -51004, + CODE_TABLE_ERROR_AUTH_TYPE = -51003, + CODE_TABLE_AUTH_TYPE_NOT_EXIST = -51002, + CODE_TABLE_AUTH_ROW_NOT_EXIST = -51001, + CODE_TABLE_AGENT_ROW_NOT_EXIST = -51000, + + // Common error code among all precompiled contracts -50199 ~ -50100 + CODE_TABLE_OPEN_ERROR = -50105, + CODE_TABLE_CREATE_ERROR = -50104, + CODE_TABLE_SET_ROW_ERROR = -50103, + CODE_ADDRESS_INVALID = -50102, + CODE_UNKNOW_FUNCTION_CALL = -50101, + CODE_TABLE_NOT_EXIST = -50100, + + // correct return: code great or equal 0 + CODE_SUCCESS = 0 +}; + +enum ContractStatus : uint8_t +{ + Available = 0, + Frozen = 1, + Abolish = 2, + AddressNonExistent = 3, + NotContractAddress = 4, +}; + +static constexpr inline ContractStatus StatusFromString(std::string_view _status) noexcept +{ + if (_status == executor::CONTRACT_NORMAL) + { + return ContractStatus::Available; + } + else if (_status == executor::CONTRACT_FROZEN) + { + return ContractStatus::Frozen; + } + else if (_status == executor::CONTRACT_ABOLISH) + { + return ContractStatus::Abolish; + } + return ContractStatus::Available; +} +} // namespace precompiled +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/precompiled/common/Condition.h b/bcos-executor/src/precompiled/common/Condition.h new file mode 100644 index 0000000..c97a3c0 --- /dev/null +++ b/bcos-executor/src/precompiled/common/Condition.h @@ -0,0 +1,96 @@ +#pragma once + +#include +#include +#include +#include + +namespace bcos::precompiled +{ +class Condition +{ +public: + Condition() = default; + ~Condition() = default; + + + static inline constexpr storage::Condition::Comparator covertComparator(uint8_t cmp) + { + if (cmp > (uint8_t)storage::Condition::Comparator::CONTAINS) + { + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError(std::to_string(cmp) + " ConditionOP not exist!")); + } + return static_cast(cmp); + } + + void addOp(uint8_t cmp, uint32_t idx, const std::string& value) + { + if (!m_conditions.contains(idx)) + { + m_conditions[idx] = std::make_shared(); + } + m_conditions[idx]->m_conditions.emplace_back(covertComparator(cmp), value); + } + + inline void insert(uint32_t key, std::shared_ptr cond) + { + m_conditions[key] = std::move(cond); + } + + void limitKey(size_t start, size_t count) + { + if (!m_conditions.contains(0) || m_conditions[0] == nullptr) + { + m_conditions[0] = std::make_shared(); + } + m_conditions.at(0)->m_limit = {start, count}; + } + + void limit(size_t start, size_t count) { m_limit = std::pair(start, count); } + std::pair getLimit() const { return {m_limit.first, m_limit.second}; } + std::pair getKeyLimit() const + { + if (!m_conditions.contains(0)) + { + return {0, 0}; + } + return m_conditions.at(0)->m_limit; + } + inline bool contains(uint32_t key) const noexcept { return m_conditions.contains(key); } + inline size_t size() const noexcept { return m_conditions.size(); } + inline std::shared_ptr at(uint32_t key) + { + if (!m_conditions.contains(key)) + { + return nullptr; + } + return m_conditions.at(key); + } + + bool isValid(const std::vector& values) const + { + for (const auto& cond : m_conditions) + { + if (cond.first > values.size()) + { + PRECOMPILED_LOG(DEBUG) + << LOG_DESC("The field index is greater than the size of fields"); + BOOST_THROW_EXCEPTION(bcos::protocol::PrecompiledError( + "The field index is greater than the size of fields")); + } + if (cond.first == 0) + { + continue; + } + if (!cond.second->isValid(values[cond.first - 1])) + return false; + } + return true; + } + +private: + std::map> m_conditions; + std::pair m_limit; +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/common/PrecompiledAbi.h b/bcos-executor/src/precompiled/common/PrecompiledAbi.h new file mode 100644 index 0000000..a4a68ea --- /dev/null +++ b/bcos-executor/src/precompiled/common/PrecompiledAbi.h @@ -0,0 +1,33 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledAbi.h + * @author: kyonGuo + * @date 2022/10/25 + */ + +#pragma once +#include + +namespace bcos::precompiled +{ + +// clang-format off +constexpr static const std::string_view ACCOUNT_ABI = "[{\"inputs\":[],\"name\":\"getAccountStatus\",\"outputs\":[{\"internalType\":\"enum AccountStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"selector\":[460338666,3816497635],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum AccountStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"setAccountStatus\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[184977018,369160594],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"; +constexpr static const std::string_view TABLE_ABI = "[{\"inputs\":[{\"components\":[{\"internalType\":\"enum ConditionOP\",\"name\":\"op\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"}],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"selector\":[3625360167,2327356356],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"fields\",\"type\":\"string[]\"}],\"internalType\":\"struct Entry\",\"name\":\"entry\",\"type\":\"tuple\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[1550717023,1284216112],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ConditionOP\",\"name\":\"op\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"offset\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"internalType\":\"struct Limit\",\"name\":\"limit\",\"type\":\"tuple\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[1751202047,277135530],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[2153356875,2260153337],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ConditionOP\",\"name\":\"op\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"offset\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"internalType\":\"struct Limit\",\"name\":\"limit\",\"type\":\"tuple\"}],\"name\":\"select\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"fields\",\"type\":\"string[]\"}],\"internalType\":\"struct Entry[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"selector\":[1020609838,1062557692],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"select\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"fields\",\"type\":\"string[]\"}],\"internalType\":\"struct Entry\",\"name\":\"\",\"type\":\"tuple\"}],\"selector\":[4242006977,1530027384],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"columnName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct UpdateField[]\",\"name\":\"updateFields\",\"type\":\"tuple[]\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[1107285855,33194060],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ConditionOP\",\"name\":\"op\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct Condition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"offset\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"internalType\":\"struct Limit\",\"name\":\"limit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"columnName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"internalType\":\"struct UpdateField[]\",\"name\":\"updateFields\",\"type\":\"tuple[]\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[2572410770,107820592],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"; +constexpr static const std::string_view KV_TABLE_ABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"get\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"selector\":[1765722206,2065403395],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"set\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"selector\":[3913463062,439950516],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"; +// clang-format on + +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/common/PrecompiledGas.cpp b/bcos-executor/src/precompiled/common/PrecompiledGas.cpp new file mode 100644 index 0000000..211373a --- /dev/null +++ b/bcos-executor/src/precompiled/common/PrecompiledGas.cpp @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledGas.cpp + * @author: kyonRay + * @date 2021-05-25 + */ + +#include "PrecompiledGas.h" +#include "bcos-executor/src/precompiled/common/Common.h" +using namespace bcos; +using namespace bcos::precompiled; + +const int64_t GasMetrics::Zero = 0; +const int64_t GasMetrics::Base = 2; +const int64_t GasMetrics::VeryLow = 3; +const int64_t GasMetrics::Low = 5; +const int64_t GasMetrics::Mid = 8; +const int64_t GasMetrics::High = 10; +// Every 256 bytes is a memory gas calculation unit +const unsigned GasMetrics::MemGas = 3; +const unsigned GasMetrics::MemUnitSize = 32; + +void PrecompiledGas::appendOperation(InterfaceOpcode const& _opType, unsigned const& _opSize) +{ + m_operationList->push_back(std::make_pair(_opType, _opSize)); +} + +void PrecompiledGas::updateMemUsed(uint64_t const& _newMemSize) +{ + if (_newMemSize > m_memUsed) + { + m_memUsed = _newMemSize; + } +} + +int64_t PrecompiledGas::calTotalGas() +{ + return (calComputationGas() + calMemGas()); +} + + +// Traverse m_operationList to calculate total gas cost +int64_t PrecompiledGas::calComputationGas() +{ + int64_t totalGas = 0; + for (auto const& it : *m_operationList) + { + if (!m_metric->OpCode2GasCost.count(it.first)) [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_DESC("Invalid opType:") << it.first; + continue; + } + totalGas += ((m_metric->OpCode2GasCost)[it.first]) * it.second; + } + return totalGas; +} + +// Calculating gas consumed by memory +int64_t PrecompiledGas::calMemGas() +{ + if (m_memUsed == 0) + { + return 0; + } + auto memSize = (m_memUsed + GasMetrics::MemUnitSize - 1) / GasMetrics::MemUnitSize; + return (GasMetrics::MemGas * memSize) + (memSize * memSize) / 512; +} diff --git a/bcos-executor/src/precompiled/common/PrecompiledGas.h b/bcos-executor/src/precompiled/common/PrecompiledGas.h new file mode 100644 index 0000000..d137da6 --- /dev/null +++ b/bcos-executor/src/precompiled/common/PrecompiledGas.h @@ -0,0 +1,163 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompileGas.h + * @author: kyonRay + * @date 2021-05-25 + */ + +#pragma once +#include + +namespace bcos +{ +namespace executor +{ +using VMFlagType = uint64_t; +} + +namespace precompiled +{ +// opcode of corresponding method +enum InterfaceOpcode : int64_t +{ + EQ = 0x00, + GE = 0x01, + GT = 0x02, + LE = 0x03, + LT = 0x04, + NE = 0x05, + Limit = 0x06, + GetInt = 0x07, + GetAddr = 0x08, + Set = 0x09, + GetByte32 = 0X0a, + GetByte64 = 0x0b, + GetString = 0x0c, + CreateTable = 0x0d, + OpenTable = 0x0e, + Select = 0x0f, + Insert = 0x10, + Update = 0x11, + Remove = 0x12, + PaillierAdd = 0x13, + GroupSigVerify = 0x14, + RingSigVerify = 0x15 +}; + +struct GasMetrics +{ + // Measure the level of instruction gas + static const int64_t Zero; + static const int64_t Base; + static const int64_t VeryLow; + static const int64_t Low; + static const int64_t Mid; + static const int64_t High; + // Every 256 bytes is a memory gas calculation unit + static const unsigned MemGas; + static const unsigned MemUnitSize; + + int64_t CreateGas = 16000; + int64_t LoadGas = 200; + int64_t StoreGas = 10000; + int64_t RemoveGas = 2500; + int64_t VerifyGas = 20000; + + // opcode to gasCost mapping + std::map OpCode2GasCost; + + using Ptr = std::shared_ptr; + GasMetrics() { init(); }; + virtual ~GasMetrics() = default; + + void init() + { + OpCode2GasCost = {{InterfaceOpcode::EQ, VeryLow}, {InterfaceOpcode::GE, VeryLow}, + {InterfaceOpcode::GT, VeryLow}, {InterfaceOpcode::LE, VeryLow}, + {InterfaceOpcode::LT, VeryLow}, {InterfaceOpcode::NE, VeryLow}, + {InterfaceOpcode::Limit, VeryLow}, {InterfaceOpcode::GetInt, VeryLow}, + {InterfaceOpcode::GetAddr, VeryLow}, {InterfaceOpcode::Set, VeryLow}, + {InterfaceOpcode::GetByte32, 32 * VeryLow}, {InterfaceOpcode::GetByte64, 64 * VeryLow}, + {InterfaceOpcode::GetString, VeryLow}, {InterfaceOpcode::CreateTable, CreateGas}, + {InterfaceOpcode::OpenTable, LoadGas}, {InterfaceOpcode::Select, LoadGas}, + {InterfaceOpcode::Insert, StoreGas}, {InterfaceOpcode::Update, StoreGas}, + {InterfaceOpcode::Remove, RemoveGas}, {InterfaceOpcode::PaillierAdd, VerifyGas}, + {InterfaceOpcode::GroupSigVerify, VerifyGas}, + {InterfaceOpcode::RingSigVerify, VerifyGas}}; + } +}; + +// FreeStorageGasMetrics +struct FreeStorageGasMetrics : public GasMetrics +{ + FreeStorageGasMetrics() : GasMetrics() + { + CreateGas = 500; + LoadGas = 200; + StoreGas = 200; + RemoveGas = 200; + } + virtual ~FreeStorageGasMetrics() {} +}; + +class PrecompiledGas +{ +public: + using Ptr = std::shared_ptr; + using OpListType = std::vector>; + + PrecompiledGas() : m_operationList(std::make_shared()) {} + virtual ~PrecompiledGas() = default; + + virtual void appendOperation(InterfaceOpcode const& _opType, unsigned const& _opSize = 1); + virtual int64_t calTotalGas(); + void setMemUsed(uint64_t const& _memUsed) { m_memUsed = _memUsed; } + uint64_t const& memUsed() const { return m_memUsed; } + + void updateMemUsed(uint64_t const& _newMemSize); + void setGasMetric(GasMetrics::Ptr _metric) { m_metric = _metric; } + +protected: + // Traverse m_operationList to calculate total gas cost + virtual int64_t calComputationGas(); + // Calculating gas consumed by memory + virtual int64_t calMemGas(); + +private: + std::shared_ptr m_operationList; + GasMetrics::Ptr m_metric; + uint64_t m_memUsed = 0; +}; + +class PrecompiledGasFactory +{ +public: + using Ptr = std::shared_ptr; + PrecompiledGasFactory() { m_gasMetric = std::make_shared(); } + PrecompiledGas::Ptr createPrecompiledGas() + { + auto gasPricer = std::make_shared(); + gasPricer->setGasMetric(m_gasMetric); + return gasPricer; + } + + GasMetrics::Ptr gasMetric() { return m_gasMetric; } + +private: + GasMetrics::Ptr m_gasMetric; +}; +} // namespace precompiled +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/precompiled/common/PrecompiledResult.h b/bcos-executor/src/precompiled/common/PrecompiledResult.h new file mode 100644 index 0000000..233a9fa --- /dev/null +++ b/bcos-executor/src/precompiled/common/PrecompiledResult.h @@ -0,0 +1,88 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledResult.h + * @author: kyonRay + * @date 2021-05-25 + */ +#pragma once +#include "../../CallParameters.h" +#include "PrecompiledGas.h" +#include + +namespace bcos::precompiled +{ +struct PrecompiledExecResult +{ + using Ptr = std::shared_ptr; + PrecompiledExecResult() = default; + PrecompiledExecResult(const executor::CallParameters::UniquePtr& _callParameters) + : m_sender(_callParameters->senderAddress), + m_codeAddress(_callParameters->codeAddress), + m_precompiledAddress(_callParameters->receiveAddress), + m_origin(_callParameters->origin), + m_input(ref(_callParameters->data)), + m_gasLeft(_callParameters->gas), + m_staticCall(_callParameters->staticCall), + m_create(_callParameters->create) + {} + ~PrecompiledExecResult() = default; + PrecompiledExecResult(const PrecompiledExecResult&) = delete; + PrecompiledExecResult& operator=(const PrecompiledExecResult&) = delete; + + PrecompiledExecResult(PrecompiledExecResult&&) = delete; + PrecompiledExecResult(const PrecompiledExecResult&&) = delete; + + /** for input **/ + bytesConstRef const& input() const { return m_input; } + bytesConstRef params() const { return m_input.getCroppedData(4); } + + /** for output **/ + bytes const& execResult() const { return m_execResult; } + bytes& mutableExecResult() { return m_execResult; } + void setExecResult(bytes const& _execResult) { m_execResult = _execResult; } + void setExecResult(bytes&& _execResult) { m_execResult = std::move(_execResult); } + void setGasLeft(int64_t _gasLeft) { m_gasLeft = _gasLeft; } + inline void setExternalResult(executor::CallParameters::UniquePtr _callParameter) + { + m_execResult = std::move(_callParameter->data); + if (_callParameter->status != (int32_t)protocol::TransactionStatus::None) + { + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError("External call revert: " + _callParameter->message)); + } + } + + inline void takeDataToCallParameter(executor::CallParameters::UniquePtr& callParameters) + { + callParameters->type = executor::CallParameters::FINISHED; + callParameters->gas = m_gasLeft; + callParameters->status = (int32_t)protocol::TransactionStatus::None; + callParameters->data = std::move(m_execResult); + callParameters->internalCall = false; + } + + std::string m_sender; // common field, readable format + std::string m_codeAddress; // different to 'to', this field set to precompiled origin address + std::string m_precompiledAddress; // common field, readable format + std::string m_origin; // common field, readable format + + bytesConstRef m_input; // common field, transaction data, binary format + bcos::bytes m_execResult; + int64_t m_gasLeft = 0; + bool m_staticCall = false; // common field + bool m_create = false; // by request, is creation +}; +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/common/Utilities.cpp b/bcos-executor/src/precompiled/common/Utilities.cpp new file mode 100644 index 0000000..727c606 --- /dev/null +++ b/bcos-executor/src/precompiled/common/Utilities.cpp @@ -0,0 +1,407 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Utilities.cpp + * @author: kyonRay + * @date 2021-05-25 + */ + +#include "Utilities.h" +#include "Common.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::precompiled; +using namespace bcos::protocol; +using namespace bcos::crypto; + +static tbb::concurrent_unordered_map s_name2SelectCache; + +void bcos::precompiled::checkNameValidate(std::string_view tableName, std::string_view _keyField, + std::vector& valueFieldList) +{ + std::set valueFieldSet; + std::vector allowChar = {'$', '_', '@'}; + std::vector tableAllowChar = {'_', '/'}; + std::string allowCharString = "{$, _, @}"; + std::string tableAllowCharString = "{_, /}"; + auto checkTableNameValidate = [&tableAllowChar, &tableAllowCharString]( + std::string_view tableName) { + size_t iSize = tableName.size(); + for (size_t i = 0; i < iSize; i++) + { + if (!isalnum(tableName[i]) && + (tableAllowChar.end() == + find(tableAllowChar.begin(), tableAllowChar.end(), tableName[i]))) + { + std::stringstream errorMsg; + errorMsg << "Invalid table name \"" << tableName + << "\", the table name must be letters or numbers, and " + "only supports \"" + << tableAllowCharString << "\" as special character set"; + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("checkNameValidate") << LOG_DESC(errorMsg.str()); + // Note: the StorageException and PrecompiledException content can't + // be modified at will for the information will be written to the + // blockchain + BOOST_THROW_EXCEPTION(PrecompiledError(errorMsg.str())); + } + } + }; + + auto checkFieldNameValidate = [&allowChar, &allowCharString]( + std::string_view tableName, std::string_view fieldName) { + if (fieldName.empty() || fieldName[0] == '_') + { + std::stringstream errorMessage; + errorMessage << "Invalid field \"" << fieldName + << "\", the size of the field must be larger than 0 and " + "the field can't start with \"_\""; + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("checkNameValidate") << LOG_DESC(errorMessage.str()) + << LOG_KV("field name", fieldName) << LOG_KV("table name", tableName); + BOOST_THROW_EXCEPTION(PrecompiledError("invalid field: " + std::string(fieldName))); + } + size_t iSize = fieldName.size(); + for (size_t i = 0; i < iSize; i++) + { + if (!isalnum(fieldName[i]) && + (allowChar.end() == find(allowChar.begin(), allowChar.end(), fieldName[i]))) + { + std::stringstream errorMessage; + errorMessage + << "Invalid field \"" << fieldName + << "\", the field name must be letters or numbers, and only supports \"" + << allowCharString << "\" as special character set"; + + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("checkNameValidate") << LOG_DESC(errorMessage.str()) + << LOG_KV("field name", fieldName) << LOG_KV("table name", tableName); + BOOST_THROW_EXCEPTION(PrecompiledError("invalid field: " + std::string(fieldName))); + } + } + }; + + checkTableNameValidate(tableName); + + checkFieldNameValidate(tableName, _keyField); + + for (auto& valueField : valueFieldList) + { + auto ret = valueFieldSet.insert(valueField); + if (!ret.second) [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("checkNameValidate") << LOG_DESC("duplicated field") + << LOG_KV("field name", valueField) << LOG_KV("table name", tableName); + BOOST_THROW_EXCEPTION(PrecompiledError("duplicated field: " + valueField)); + } + checkFieldNameValidate(tableName, valueField); + } +} + +void bcos::precompiled::checkLengthValidate( + std::string_view fieldValue, int32_t maxLength, int32_t errorCode) +{ + if (fieldValue.size() > (size_t)maxLength) + { + PRECOMPILED_LOG(DEBUG) << "key:" << fieldValue << " value size:" << fieldValue.size() + << " greater than " << maxLength; + BOOST_THROW_EXCEPTION( + PrecompiledError("size of value/key greater than" + std::to_string(maxLength) + + " error code: " + std::to_string(errorCode))); + } +} + +std::string bcos::precompiled::checkCreateTableParam(const std::string_view& _tableName, + std::string& _keyField, const std::variant>& _valueField, + std::optional keyOrder) +{ + if (keyOrder && (*keyOrder != 0 && *keyOrder != 1)) + { + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError(std::to_string(int(*keyOrder)) + " KeyOrder not exist!")); + } + std::vector fieldNameList; + if (_valueField.index() == 1) + { + fieldNameList.assign(std::get<1>(_valueField).begin(), std::get<1>(_valueField).end()); + } + else + { + boost::split(fieldNameList, std::get<0>(_valueField), boost::is_any_of(",")); + } + + if (_keyField.size() > (size_t)SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH) + { // mysql TableName and fieldName length limit is 64 + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError("table field name length overflow " + + std::to_string(SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH))); + } + boost::trim(_keyField); + if (_keyField.size() > (size_t)SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH) + { // mysql TableName and fieldName length limit is 64 + BOOST_THROW_EXCEPTION(protocol::PrecompiledError( + "errorCode: " + std::to_string(CODE_TABLE_FIELD_LENGTH_OVERFLOW) + + std::string("table key name length overflow ") + + std::to_string(SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH))); + } + + for (auto& str : fieldNameList) + { + boost::trim(str); + if (str.size() > (size_t)SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH) + { // mysql TableName and fieldName length limit is 64 + BOOST_THROW_EXCEPTION(protocol::PrecompiledError( + "errorCode: " + std::to_string(CODE_TABLE_FIELD_LENGTH_OVERFLOW) + + std::string("table field name length overflow ") + + std::to_string(SYS_TABLE_KEY_FIELD_NAME_MAX_LENGTH))); + } + } + + checkNameValidate(_tableName, _keyField, fieldNameList); + + auto valueField = boost::join(fieldNameList, ","); + if (valueField.size() > (size_t)SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH) + { + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError(std::string("total table field name length overflow ") + + std::to_string(SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH))); + } + + auto tableName = precompiled::getTableName(_tableName); + if (tableName.size() > (size_t)USER_TABLE_NAME_MAX_LENGTH_S) + { + // mysql TableName and fieldName length limit is 64 + BOOST_THROW_EXCEPTION(protocol::PrecompiledError( + "errorCode: " + std::to_string(CODE_TABLE_NAME_LENGTH_OVERFLOW) + + std::string(" tableName length overflow ") + + std::to_string(USER_TABLE_NAME_MAX_LENGTH_S))); + } + return valueField; +} + +uint32_t bcos::precompiled::getFuncSelector( + std::string const& _functionName, const crypto::Hash::Ptr& _hashImpl) +{ + // global function selector cache + if (s_name2SelectCache.count(_functionName)) + { + return s_name2SelectCache[_functionName]; + } + auto selector = getFuncSelectorByFunctionName(_functionName, _hashImpl); + s_name2SelectCache.insert(std::make_pair(_functionName, selector)); + return selector; +} + +// for ut +void bcos::precompiled::clearName2SelectCache() +{ + s_name2SelectCache.clear(); +} + +uint32_t bcos::precompiled::getParamFunc(bytesConstRef _param) +{ + if (_param.size() < 4) [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_DESC( + "getParamFunc param too short, not enough to call precompiled") + << LOG_KV("param", toHexStringWithPrefix(_param.toBytes())); + BOOST_THROW_EXCEPTION(PrecompiledError("Empty param data in precompiled call")); + } + auto funcBytes = _param.getCroppedData(0, 4); + uint32_t func = *((uint32_t*)(funcBytes.data())); + + return ((func & 0x000000FF) << 24) | ((func & 0x0000FF00) << 8) | ((func & 0x00FF0000) >> 8) | + ((func & 0xFF000000) >> 24); +} + +uint32_t bcos::precompiled::getFuncSelectorByFunctionName( + std::string const& _functionName, const crypto::Hash::Ptr& _hashImpl) +{ + uint32_t func = *(uint32_t*)(_hashImpl->hash(_functionName).ref().getCroppedData(0, 4).data()); + uint32_t selector = ((func & 0x000000FF) << 24) | ((func & 0x0000FF00) << 8) | + ((func & 0x00FF0000) >> 8) | ((func & 0xFF000000) >> 24); + return selector; +} + +bcos::precompiled::ContractStatus bcos::precompiled::getContractStatus( + std::shared_ptr _executive, const std::string& _tableName) +{ + auto table = _executive->storage().openTable(_tableName); + if (!table) + { + return ContractStatus::AddressNonExistent; + } + + auto codeHashEntry = table->getRow(executor::ACCOUNT_CODE_HASH); + if (!codeHashEntry) + { + // this may happen when register link in contract constructor + return ContractStatus::Available; + } + auto codeHashStr = codeHashEntry->getField(0); + auto codeHash = HashType(codeHashStr, FixedBytes<32>::FromBinary); + + if (codeHash == HashType()) + { + return ContractStatus::NotContractAddress; + } + + // FIXME: frozen in BFS + auto frozenEntry = table->getRow(executor::ACCOUNT_FROZEN); + if (frozenEntry != std::nullopt && "true" == frozenEntry->getField(0)) + { + return ContractStatus::Frozen; + } + else + { + return ContractStatus::Available; + } +} + +bool precompiled::checkPathValid( + std::string_view _path, std::variant version) +{ + if (_path.empty()) [[unlikely]] + return false; + if (_path.length() > FS_PATH_MAX_LENGTH) [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("checkPathValid") + << LOG_DESC("path too long, over flow FS_PATH_MAX_LENGTH") + << LOG_KV("path", _path); + return false; + } + if (_path == "/") + return true; + std::string_view absoluteDir = _path; + if (absoluteDir.starts_with('/')) + { + absoluteDir.remove_prefix(1); + } + if (absoluteDir.ends_with('/')) + { + absoluteDir.remove_suffix(1); + } + std::vector pathList; + // constexpr std::string_view delim{"/"}; + // auto spliter = RANGES::split_view(absoluteDir, delim); + boost::split(pathList, absoluteDir, boost::is_any_of("/"), boost::token_compress_on); + if (pathList.size() > FS_PATH_MAX_LEVEL || pathList.empty()) + { + PRECOMPILED_LOG(DEBUG) + << LOG_BADGE("checkPathValid") + << LOG_DESC("resource path's level is too deep, level over FS_PATH_MAX_LEVEL") + << LOG_KV("path", _path); + return false; + } + // TODO: adapt Chinese, should use wstring + std::regex reg(R"(^[0-9a-zA-Z][^\>\<\*\?\/\=\+\(\)\$\"\']*$)"); + if (versionCompareTo(version, BlockVersion::V3_2_VERSION) >= 0) + { + reg = (R"(^[\w]+[\w\-#@.]*$)"); + } + auto checkFieldNameValidate = [®](std::string fieldName) -> bool { + if (fieldName.empty()) [[unlikely]] + { + std::stringstream errorMessage; + errorMessage << "Invalid field \"" + fieldName + << "\", the size of the field must be larger than 0"; + PRECOMPILED_LOG(DEBUG) + << LOG_DESC(errorMessage.str()) << LOG_KV("field name", fieldName); + return false; + } + if (!std::regex_match(fieldName, reg)) + { + PRECOMPILED_LOG(DEBUG) + << LOG_DESC("Invalid path field " + fieldName) << LOG_KV("field name", fieldName); + return false; + } + return true; + }; + return std::all_of(pathList.begin(), pathList.end(), + [checkFieldNameValidate](const std::string& s) { return checkFieldNameValidate(s); }); +} + +std::pair precompiled::getParentDirAndBaseName( + const std::string& _absolutePath) +{ + // transfer /usr/local/bin => ["usr", "local", "bin"] + if (_absolutePath == "/") + return {"/", "/"}; + + std::string absoluteDir = _absolutePath; + + if (absoluteDir.ends_with('/')) + { + absoluteDir.pop_back(); + } + size_t index = absoluteDir.find_last_of('/'); + auto parent = absoluteDir.substr(0, index); + return {parent.empty() ? "/" : parent, absoluteDir.substr(index + 1)}; +} + +executor::CallParameters::UniquePtr precompiled::externalRequest( + const std::shared_ptr& _executive, const bytesConstRef& _param, + std::string_view _origin, std::string_view _sender, std::string_view _to, bool _isStatic, + bool _isCreate, int64_t gasLeft, bool _isInternalCall, std::string const& _abi) +{ + auto request = std::make_unique(executor::CallParameters::MESSAGE); + + request->senderAddress = _sender; + request->receiveAddress = _to; + request->origin = _origin; + request->codeAddress = request->receiveAddress; + request->status = 0; + request->data = _param.toBytes(); + request->create = _isCreate; + request->staticCall = !_isCreate && _isStatic; + request->internalCreate = _isCreate; + request->internalCall = _isInternalCall; + request->gas = gasLeft; + if (_isCreate && !_abi.empty()) + { + request->abi = _abi; + } + return _executive->externalCall(std::move(request)); +} + +s256 precompiled::externalTouchNewFile( + const std::shared_ptr& _executive, std::string_view _origin, + std::string_view _sender, std::string_view _filePath, std::string_view _fileType, + int64_t gasLeft) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + std::string bfsAddress = blockContext->isWasm() ? BFS_NAME : BFS_ADDRESS; + auto codecResult = + codec.encodeWithSig("touch(string,string)", std::string(_filePath), std::string(_fileType)); + auto response = externalRequest( + _executive, ref(codecResult), _origin, _sender, bfsAddress, false, false, gasLeft); + int32_t result = 0; + if (response->status == (int32_t)TransactionStatus::None) + { + codec.decode(ref(response->data), result); + } + else + { + result = (int)CODE_FILE_BUILD_DIR_FAILED; + } + return result; +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/common/Utilities.h b/bcos-executor/src/precompiled/common/Utilities.h new file mode 100644 index 0000000..c3fe21d --- /dev/null +++ b/bcos-executor/src/precompiled/common/Utilities.h @@ -0,0 +1,147 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Utilities.h + * @author: kyonRay + * @date 2021-05-25 + */ + +#pragma once + +#include "Common.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-executor/src/Common.h" +#include "bcos-executor/src/executive/TransactionExecutive.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-tool/BfsFileFactory.h" +#include +#include +#include +#include +#include + +namespace bcos::precompiled +{ +inline void getErrorCodeOut(bytes& out, int const& result, const CodecWrapper& _codec) +{ + if (result >= 0 && result < 128) + { + out = _codec.encode(u256(result)); + return; + } + out = _codec.encode(s256(result)); +} + +inline std::string getTableName(const std::string_view& _tableName) +{ + if (_tableName.starts_with(executor::USER_TABLE_PREFIX)) + { + return std::string(_tableName); + } + auto tableName = (_tableName[0] == '/') ? _tableName.substr(1) : _tableName; + return std::string(executor::USER_TABLE_PREFIX) + std::string(tableName); +} + +inline std::string getActualTableName(const std::string& _tableName) +{ + return "u_" + _tableName; +} + +inline std::string getAccountTableName(std::string_view _account) +{ + if (_account.starts_with(executor::USER_USR_PREFIX)) + { + return std::string(_account); + } + auto tableName = (_account[0] == '/') ? _account.substr(1) : _account; + return std::string(executor::USER_USR_PREFIX) + std::string(tableName); +} + +inline std::string getDynamicPrecompiledCodeString( + const std::string& _address, const std::string& _params) +{ + /// Prefix , address , params + return boost::join(std::vector({PRECOMPILED_CODE_FIELD, _address, _params}), ","); +} + +inline std::string trimHexPrefix(const std::string& _hex) +{ + if (_hex.size() >= 2 && _hex[1] == 'x' && _hex[0] == '0') + { + return _hex.substr(2); + } + return _hex; +} + +void checkNameValidate(std::string_view tableName, std::string_view _keyField, + std::vector& valueFieldList); +void checkLengthValidate(std::string_view field_value, int32_t max_length, int32_t errorCode); + +std::string checkCreateTableParam(const std::string_view& _tableName, std::string& _keyField, + const std::variant>& _valueField, + std::optional keyOrder = std::nullopt); + +uint32_t getFuncSelector(std::string const& _functionName, + const crypto::Hash::Ptr& _hashImpl = executor::GlobalHashImpl::g_hashImpl); +// for ut +void clearName2SelectCache(); +uint32_t getParamFunc(bytesConstRef _param); +uint32_t getFuncSelectorByFunctionName( + std::string const& _functionName, const crypto::Hash::Ptr& _hashImpl); + +bcos::precompiled::ContractStatus getContractStatus( + std::shared_ptr _executive, + std::string const& _tableName); + +inline bytesConstRef getParamData(bytesConstRef _param) +{ + return _param.getCroppedData(4); +} + + +bool checkPathValid( + std::string_view _absolutePath, std::variant version); + +std::pair getParentDirAndBaseName(const std::string& _absolutePath); + +inline std::string_view getPathBaseName(std::string_view _absolutePath) +{ + if (_absolutePath == tool::FS_ROOT) + { + return _absolutePath; + } + if (_absolutePath.ends_with('/')) + { + return {}; + } + return _absolutePath.substr(_absolutePath.find_last_of('/') + 1); +} + +inline bool checkSenderFromAuth(std::string_view _sender) +{ + return _sender == precompiled::AUTH_COMMITTEE_ADDRESS; +} + +executor::CallParameters::UniquePtr externalRequest( + const std::shared_ptr& _executive, const bytesConstRef& _param, + std::string_view _origin, std::string_view _sender, std::string_view _to, bool _isStatic, + bool _isCreate, int64_t gasLeft, bool _isInternalCall = false, std::string const& _abi = ""); + +s256 externalTouchNewFile(const std::shared_ptr& _executive, + std::string_view _origin, std::string_view _sender, std::string_view _filePath, + std::string_view _fileType, int64_t gasLeft); +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.cpp b/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.cpp new file mode 100644 index 0000000..7ed2c68 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.cpp @@ -0,0 +1,248 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AccountManagerPrecompiled.cpp + * @author: kyonGuo + * @date 2022/9/26 + */ + +#include "AccountManagerPrecompiled.h" +#include "../../vm/HostContext.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::protocol; + +const char* const AM_METHOD_SET_ACCOUNT_STATUS = "setAccountStatus(address,uint8)"; +const char* const AM_METHOD_GET_ACCOUNT_STATUS = "getAccountStatus(address)"; + +AccountManagerPrecompiled::AccountManagerPrecompiled() : Precompiled(GlobalHashImpl::g_hashImpl) +{ + name2Selector[AM_METHOD_SET_ACCOUNT_STATUS] = + getFuncSelector(AM_METHOD_SET_ACCOUNT_STATUS, GlobalHashImpl::g_hashImpl); + name2Selector[AM_METHOD_GET_ACCOUNT_STATUS] = + getFuncSelector(AM_METHOD_GET_ACCOUNT_STATUS, GlobalHashImpl::g_hashImpl); +} + +std::shared_ptr AccountManagerPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + + /// directly passthrough data to call + if (func == name2Selector[AM_METHOD_SET_ACCOUNT_STATUS]) + { + setAccountStatus(_executive, _callParameters); + } + else if (func == name2Selector[AM_METHOD_GET_ACCOUNT_STATUS]) + { + getAccountStatus(_executive, _callParameters); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("AccountManagerPrecompiled call undefined function!")); + } + return _callParameters; +} + +void AccountManagerPrecompiled::createAccountWithStatus( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const CodecWrapper& codec, + std::string_view accountHex, uint8_t status) const +{ + auto accountTableName = getAccountTableName(accountHex); + + // prefix + address + tableName + std::string codeString = getDynamicPrecompiledCodeString(ACCOUNT_ADDRESS, accountTableName); + auto input = codec.encode(accountTableName, codeString); + + auto response = externalRequest(_executive, ref(input), _callParameters->m_origin, + _callParameters->m_codeAddress, accountHex, false, true, _callParameters->m_gasLeft, false, + std::string(ACCOUNT_ABI)); + + if (response->status != (int32_t)TransactionStatus::None) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("createAccount failed") + << LOG_KV("accountTableName", accountTableName) + << LOG_KV("status", response->status); + BOOST_THROW_EXCEPTION(PrecompiledError("Create account error.")); + } + + auto newParams = codec.encodeWithSig("setAccountStatus(uint8)", status); + auto setStatusRes = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + _callParameters->m_codeAddress, accountHex, _callParameters->m_staticCall, + _callParameters->m_create, _callParameters->m_gasLeft); + + if (setStatusRes->status != (int32_t)TransactionStatus::None) + { + PRECOMPILED_LOG(ERROR) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("set status failed") + << LOG_KV("accountTableName", accountTableName) + << LOG_KV("status", response->status); + BOOST_THROW_EXCEPTION(PrecompiledError("Set account status failed.")); + } + _callParameters->setExternalResult(std::move(setStatusRes)); +} + +void AccountManagerPrecompiled::setAccountStatus( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) const +{ + // setAccountStatus(address,uint8) + Address account; + uint8_t status = 0; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), account, status); + std::string accountStr = account.hex(); + + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AccountManagerPrecompiled") << LOG_DESC("setAccountStatus") + << LOG_KV("account", accountStr) + << LOG_KV("status", std::to_string(status)); + + // check is governor + auto governors = getGovernorList(_executive, _callParameters, codec); + if (RANGES::find_if(governors, [&_callParameters](const Address& address) { + return address.hex() == _callParameters->m_sender; + }) == governors.end()) + { + // not from governor + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + if (RANGES::find(governors, account) != governors.end()) + { + // set governor's status + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("set governor's status") << LOG_KV("account", accountStr) + << LOG_KV("status", std::to_string(status)); + BOOST_THROW_EXCEPTION(PrecompiledError("Should not set governor's status.")); + } + + // check account exist, if not exist, create first + auto accountTableName = getAccountTableName(account.hex()); + auto table = _executive->storage().openTable(accountTableName); + if (!table) + { + auto appsAccountTableName = getContractTableName(account.hex()); + auto appsTable = _executive->storage().openTable(appsAccountTableName); + if (appsTable) + { + PRECOMPILED_LOG(INFO) + << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("account table already exist in /apps, maybe this is a contract.") + << LOG_KV("account", accountStr) << LOG_KV("status", std::to_string(status)); + _callParameters->setExecResult(codec.encode(int32_t(CODE_ACCOUNT_ALREADY_EXIST))); + return; + } + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("setAccountStatus table not exist, create first") + << LOG_KV("account", accountStr) + << LOG_KV("status", std::to_string(status)); + // create table + createAccountWithStatus(_executive, _callParameters, codec, accountStr, status); + return; + } + + // table must exist, then call + auto newParams = codec.encodeWithSig("setAccountStatus(uint8)", status); + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + _callParameters->m_codeAddress, accountStr, _callParameters->m_staticCall, + _callParameters->m_create, _callParameters->m_gasLeft); + _callParameters->setExternalResult(std::move(response)); +} + +void AccountManagerPrecompiled::getAccountStatus( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) const +{ + // getAccountStatus(address) + Address account; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), account); + std::string accountStr = account.hex(); + + PRECOMPILED_LOG(TRACE) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("getAccountStatus") + << LOG_KV("account", accountStr); + auto newParams = codec.encodeWithSig("getAccountStatus()"); + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + _callParameters->m_codeAddress, accountStr, _callParameters->m_staticCall, + _callParameters->m_create, _callParameters->m_gasLeft); + if (response->status != (int32_t)TransactionStatus::None) + { + // maybe this address not exist in chain, return normal by default + _callParameters->setExecResult(codec.encode((uint8_t)0)); + return; + } + _callParameters->setExternalResult(std::move(response)); +} + +std::vector
AccountManagerPrecompiled::getGovernorList( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const CodecWrapper& codec) const +{ + auto blockContext = _executive->blockContext().lock(); + const auto* sender = blockContext->isWasm() ? ACCOUNT_MANAGER_NAME : ACCOUNT_MGR_ADDRESS; + auto getCommittee = codec.encodeWithSig("_committee()"); + auto getCommitteeResponse = externalRequest(_executive, ref(getCommittee), + _callParameters->m_origin, sender, AUTH_COMMITTEE_ADDRESS, _callParameters->m_staticCall, + false, _callParameters->m_gasLeft); + if (getCommitteeResponse->status != (int32_t)TransactionStatus::None) [[unlikely]] + { + PRECOMPILED_LOG(ERROR) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("get committee failed") + << LOG_KV("status", getCommitteeResponse->status); + BOOST_THROW_EXCEPTION(PrecompiledError("Get committee failed.")); + } + + Address committee; + codec.decode(ref(getCommitteeResponse->data), committee); + + auto getInfo = codec.encodeWithSig("getCommitteeInfo()"); + auto getInfoResponse = externalRequest(_executive, ref(getInfo), _callParameters->m_origin, + sender, committee.hex(), _callParameters->m_staticCall, false, _callParameters->m_gasLeft); + + if (getInfoResponse->status != (int32_t)TransactionStatus::None) [[unlikely]] + { + PRECOMPILED_LOG(ERROR) << LOG_BADGE("AccountManagerPrecompiled") + << LOG_DESC("get committee info failed") + << LOG_KV("committee", committee.hex()); + BOOST_THROW_EXCEPTION(PrecompiledError("Get committee info failed.")); + } + uint8_t participatesRate = 0; + uint8_t winRate = 0; + std::vector
governors; + std::vector weights; + codec.decode(ref(getInfoResponse->data), participatesRate, winRate, governors, weights); + return governors; +} diff --git a/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.h b/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.h new file mode 100644 index 0000000..f36b69b --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AccountManagerPrecompiled.h @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AccountManagerPrecompiled.h + * @author: kyonGuo + * @date 2022/9/26 + */ + +#pragma once +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +namespace bcos::precompiled +{ +class AccountManagerPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + AccountManagerPrecompiled(); + ~AccountManagerPrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void setAccountStatus(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) const; + + void getAccountStatus(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) const; + + void createAccountWithStatus(const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const CodecWrapper& codec, + std::string_view accountHex, uint8_t status = 0) const; + + std::vector
getGovernorList( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters, const CodecWrapper& codec) const; +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/AccountPrecompiled.cpp b/bcos-executor/src/precompiled/extension/AccountPrecompiled.cpp new file mode 100644 index 0000000..4a60912 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AccountPrecompiled.cpp @@ -0,0 +1,181 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AccountPrecompiled.cpp + * @author: kyonGuo + * @date 2022/9/26 + */ + +#include "AccountPrecompiled.h" +#include "../../vm/HostContext.h" + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::protocol; + +const char* const AM_METHOD_SET_ACCOUNT_STATUS = "setAccountStatus(uint8)"; +const char* const AM_METHOD_GET_ACCOUNT_STATUS = "getAccountStatus()"; + +AccountPrecompiled::AccountPrecompiled() : Precompiled(GlobalHashImpl::g_hashImpl) +{ + name2Selector[AM_METHOD_SET_ACCOUNT_STATUS] = + getFuncSelector(AM_METHOD_SET_ACCOUNT_STATUS, GlobalHashImpl::g_hashImpl); + name2Selector[AM_METHOD_GET_ACCOUNT_STATUS] = + getFuncSelector(AM_METHOD_GET_ACCOUNT_STATUS, GlobalHashImpl::g_hashImpl); +} + +std::shared_ptr AccountPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + // [tableName][actualParams] + std::vector dynamicParams; + bytes param; + codec.decode(_callParameters->input(), dynamicParams, param); + auto accountTableName = dynamicParams.at(0); + + // get user call actual params + auto originParam = ref(param); + uint32_t func = getParamFunc(originParam); + bytesConstRef data = getParamData(originParam); + auto table = _executive->storage().openTable(accountTableName); + if (!table.has_value()) [[unlikely]] + { + BOOST_THROW_EXCEPTION(PrecompiledError(accountTableName + " does not exist")); + } + + if (func == name2Selector[AM_METHOD_SET_ACCOUNT_STATUS]) + { + setAccountStatus(accountTableName, _executive, data, _callParameters); + } + else if (func == name2Selector[AM_METHOD_GET_ACCOUNT_STATUS]) + { + getAccountStatus(accountTableName, _executive, _callParameters); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AccountPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("AccountPrecompiled call undefined function!")); + } + return _callParameters; +} + + +void AccountPrecompiled::setAccountStatus(const std::string& accountTableName, + const std::shared_ptr& _executive, bytesConstRef& data, + const PrecompiledExecResult::Ptr& _callParameters) const +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + const auto* accountMgrSender = + blockContext->isWasm() ? ACCOUNT_MANAGER_NAME : ACCOUNT_MGR_ADDRESS; + if (_callParameters->m_sender != accountMgrSender) + { + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + + uint8_t status = 0; + codec.decode(data, status); + + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) << LOG_BADGE("AccountPrecompiled") + << LOG_DESC("setAccountStatus") << LOG_KV("account", accountTableName) + << LOG_KV("status", std::to_string(status)); + auto existEntry = _executive->storage().getRow(accountTableName, ACCOUNT_STATUS); + // already exist status, check and move it to last status + if (existEntry.has_value()) + { + auto statusStr = std::string(existEntry->get()); + auto existStatus = boost::lexical_cast(statusStr); + // account already abolish, should not set any status to it + if (existStatus == AccountStatus::abolish && status != AccountStatus::abolish) + { + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AccountPrecompiled") + << LOG_DESC("account already abolish, should not set any status") + << LOG_KV("account", accountTableName) + << LOG_KV("status", std::to_string(status)); + BOOST_THROW_EXCEPTION( + PrecompiledError("Account already abolish, should not set any status.")); + } + _executive->storage().setRow( + accountTableName, ACCOUNT_LAST_STATUS, std::move(existEntry.value())); + } + else + { + // first time + Entry lastStatusEntry; + lastStatusEntry.importFields({"0"}); + _executive->storage().setRow( + accountTableName, ACCOUNT_LAST_STATUS, std::move(lastStatusEntry)); + } + // set status and lastUpdateNumber + Entry statusEntry; + statusEntry.importFields({boost::lexical_cast(status)}); + _executive->storage().setRow(accountTableName, ACCOUNT_STATUS, std::move(statusEntry)); + Entry lastUpdateEntry; + lastUpdateEntry.importFields({boost::lexical_cast(blockContext->number())}); + _executive->storage().setRow(accountTableName, ACCOUNT_LAST_UPDATE, std::move(lastUpdateEntry)); + _callParameters->setExecResult(codec.encode(int32_t(CODE_SUCCESS))); +} + +void AccountPrecompiled::getAccountStatus(const std::string& tableName, + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) const +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + uint8_t status = getAccountStatus(tableName, _executive); + _callParameters->setExecResult(codec.encode(status)); +} + +uint8_t AccountPrecompiled::getAccountStatus(const std::string& account, + const std::shared_ptr& _executive) const +{ + auto accountTable = getAccountTableName(account); + auto entry = _executive->storage().getRow(accountTable, ACCOUNT_STATUS); + auto lastUpdateEntry = _executive->storage().getRow(accountTable, ACCOUNT_LAST_UPDATE); + if (!lastUpdateEntry.has_value()) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AccountPrecompiled") << LOG_DESC("getAccountStatus") + << LOG_DESC(" Status row not exist, return 0 by default"); + return 0; + } + auto lastUpdateNumber = boost::lexical_cast(std::string(lastUpdateEntry->get())); + auto blockContext = _executive->blockContext().lock(); + std::string statusStr; + if (blockContext->number() > lastUpdateNumber) [[likely]] + { + statusStr = std::string(entry->get()); + } + else [[unlikely]] + { + auto lastStatusEntry = _executive->storage().getRow(accountTable, ACCOUNT_LAST_STATUS); + statusStr = std::string(lastStatusEntry->get()); + } + + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AccountPrecompiled") + << BLOCK_NUMBER(blockContext->number()) << LOG_DESC("getAccountStatus") + << LOG_KV("lastUpdateNumber", lastUpdateNumber) + << LOG_KV("status", statusStr); + auto status = boost::lexical_cast(statusStr); + return status; +} diff --git a/bcos-executor/src/precompiled/extension/AccountPrecompiled.h b/bcos-executor/src/precompiled/extension/AccountPrecompiled.h new file mode 100644 index 0000000..10a5d83 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AccountPrecompiled.h @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AccountPrecompiled.h + * @author: kyonGuo + * @date 2022/9/26 + */ + +#pragma once +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +namespace bcos::precompiled +{ +class AccountPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + AccountPrecompiled(); + ~AccountPrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + + uint8_t getAccountStatus(const std::string& accountTable, + const std::shared_ptr& _executive) const; + +private: + void setAccountStatus(const std::string& tableName, + const std::shared_ptr& _executive, bytesConstRef& data, + PrecompiledExecResult::Ptr const& _callParameters) const; + + void getAccountStatus(const std::string& tableName, + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) const; +}; +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.cpp b/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.cpp new file mode 100644 index 0000000..e80b207 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.cpp @@ -0,0 +1,794 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AuthManagerPrecompiled.cpp + * @author: kyonRay + * @date 2021-10-09 + */ + +#include "AuthManagerPrecompiled.h" +#include "../../vm/HostContext.h" +#include "ContractAuthMgrPrecompiled.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; + +/// wasm +const char* const AUTH_METHOD_GET_ADMIN = "getAdmin(string)"; +const char* const AUTH_METHOD_SET_ADMIN = "resetAdmin(string,string)"; +const char* const AUTH_METHOD_SET_AUTH_TYPE = "setMethodAuthType(string,bytes4,uint8)"; +const char* const AUTH_METHOD_OPEN_AUTH = "openMethodAuth(string,bytes4,string)"; +const char* const AUTH_METHOD_CLOSE_AUTH = "closeMethodAuth(string,bytes4,string)"; +const char* const AUTH_METHOD_CHECK_AUTH = "checkMethodAuth(string,bytes4,string)"; +const char* const AUTH_METHOD_GET_AUTH = "getMethodAuth(string,bytes4)"; +/// evm +const char* const AUTH_METHOD_GET_ADMIN_ADD = "getAdmin(address)"; +const char* const AUTH_METHOD_SET_ADMIN_ADD = "resetAdmin(address,address)"; +const char* const AUTH_METHOD_SET_AUTH_TYPE_ADD = "setMethodAuthType(address,bytes4,uint8)"; +const char* const AUTH_METHOD_OPEN_AUTH_ADD = "openMethodAuth(address,bytes4,address)"; +const char* const AUTH_METHOD_CLOSE_AUTH_ADD = "closeMethodAuth(address,bytes4,address)"; +const char* const AUTH_METHOD_CHECK_AUTH_ADD = "checkMethodAuth(address,bytes4,address)"; +const char* const AUTH_METHOD_GET_AUTH_ADD = "getMethodAuth(address,bytes4)"; + +const char* const AUTH_METHOD_SET_CONTRACT = "setContractStatus(address,bool)"; +const char* const AUTH_METHOD_SET_CONTRACT_32 = "setContractStatus(address,uint8)"; +const char* const AUTH_METHOD_GET_CONTRACT = "contractAvailable(address)"; + +/// deploy +const char* const AUTH_METHOD_GET_DEPLOY_TYPE = "deployType()"; +const char* const AUTH_METHOD_SET_DEPLOY_TYPE = "setDeployAuthType(uint8)"; +/// wasm +const char* const AUTH_OPEN_DEPLOY_ACCOUNT = "openDeployAuth(string)"; +const char* const AUTH_CLOSE_DEPLOY_ACCOUNT = "closeDeployAuth(string)"; +const char* const AUTH_CHECK_DEPLOY_ACCESS = "hasDeployAuth(string)"; +/// evm +const char* const AUTH_OPEN_DEPLOY_ACCOUNT_ADD = "openDeployAuth(address)"; +const char* const AUTH_CLOSE_DEPLOY_ACCOUNT_ADD = "closeDeployAuth(address)"; +const char* const AUTH_CHECK_DEPLOY_ACCESS_ADD = "hasDeployAuth(address)"; + +AuthManagerPrecompiled::AuthManagerPrecompiled(crypto::Hash::Ptr _hashImpl, bool _isWasm) + : Precompiled(_hashImpl) +{ + const auto* getAdminStr = _isWasm ? AUTH_METHOD_GET_ADMIN : AUTH_METHOD_GET_ADMIN_ADD; + registerFunc(getFuncSelector(getAdminStr), [this](auto&& _executive, auto&& _callParameters) { + getAdmin(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* resetAdminStr = _isWasm ? AUTH_METHOD_SET_ADMIN : AUTH_METHOD_SET_ADMIN_ADD; + registerFunc(getFuncSelector(resetAdminStr), [this](auto&& _executive, auto&& _callParameters) { + resetAdmin(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* setMethodAuthTypeStr = + _isWasm ? AUTH_METHOD_SET_AUTH_TYPE : AUTH_METHOD_SET_AUTH_TYPE_ADD; + registerFunc( + getFuncSelector(setMethodAuthTypeStr), [this](auto&& _executive, auto&& _callParameters) { + setMethodAuthType(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* openMethodAuthStr = _isWasm ? AUTH_METHOD_OPEN_AUTH : AUTH_METHOD_OPEN_AUTH_ADD; + registerFunc( + getFuncSelector(openMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + setMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* closeMethodAuthStr = _isWasm ? AUTH_METHOD_CLOSE_AUTH : AUTH_METHOD_CLOSE_AUTH_ADD; + registerFunc( + getFuncSelector(closeMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + setMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* checkMethodAuthStr = _isWasm ? AUTH_METHOD_CHECK_AUTH : AUTH_METHOD_CHECK_AUTH_ADD; + registerFunc( + getFuncSelector(checkMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + checkMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* getMethodAuthStr = _isWasm ? AUTH_METHOD_GET_AUTH : AUTH_METHOD_GET_AUTH_ADD; + registerFunc( + getFuncSelector(getMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + getMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + registerFunc( + getFuncSelector(AUTH_METHOD_SET_CONTRACT_32), + [this](auto&& _executive, auto&& _callParameters) { + setContractStatus(std::forward(_executive), + std::forward(_callParameters)); + }, + protocol::BlockVersion::V3_2_VERSION); + + registerFunc(getFuncSelector(AUTH_METHOD_SET_CONTRACT), + [this](auto&& _executive, auto&& _callParameters) { + setContractStatus(std::forward(_executive), + std::forward(_callParameters)); + }); + registerFunc(getFuncSelector(AUTH_METHOD_GET_CONTRACT), + [this](auto&& _executive, auto&& _callParameters) { + contractAvailable(std::forward(_executive), + std::forward(_callParameters)); + }); + + /// deploy + registerFunc(getFuncSelector(AUTH_METHOD_GET_DEPLOY_TYPE), + [this](auto&& _executive, auto&& _callParameters) { + getDeployType(std::forward(_executive), + std::forward(_callParameters)); + }); + registerFunc(getFuncSelector(AUTH_METHOD_SET_DEPLOY_TYPE), + [this](auto&& _executive, auto&& _callParameters) { + setDeployType(std::forward(_executive), + std::forward(_callParameters)); + }); + const auto* openDeployAccountStr = + _isWasm ? AUTH_OPEN_DEPLOY_ACCOUNT : AUTH_OPEN_DEPLOY_ACCOUNT_ADD; + registerFunc( + getFuncSelector(openDeployAccountStr), [this](auto&& _executive, auto&& _callParameters) { + openDeployAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + const auto* closeDeployAccountStr = + _isWasm ? AUTH_CLOSE_DEPLOY_ACCOUNT : AUTH_CLOSE_DEPLOY_ACCOUNT_ADD; + registerFunc( + getFuncSelector(closeDeployAccountStr), [this](auto&& _executive, auto&& _callParameters) { + closeDeployAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + const auto* checkDeployAuthStr = + _isWasm ? AUTH_CHECK_DEPLOY_ACCESS : AUTH_CHECK_DEPLOY_ACCESS_ADD; + registerFunc( + getFuncSelector(checkDeployAuthStr), [this](auto&& _executive, auto&& _callParameters) { + hasDeployAuth(std::forward(_executive), + std::forward(_callParameters)); + }); +} + +std::shared_ptr AuthManagerPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + + /// directly passthrough data to call + auto selector = selector2Func.find(func); + if (selector != selector2Func.end()) + { + auto& [minVersion, execFunc] = selector->second; + if (versionCompareTo(blockContext->blockVersion(), minVersion) >= 0) + { + execFunc(_executive, _callParameters); + + if (c_fileLogLevel == LogLevel::TRACE) [[unlikely]] + { + PRECOMPILED_LOG(TRACE) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("call function") + << LOG_KV("func", func) << LOG_KV("minVersion", minVersion); + } + return _callParameters; + } + } + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("AuthManagerPrecompiled call undefined function!")); +} + +void AuthManagerPrecompiled::getAdmin( + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) + +{ + bytesConstRef data = getParamData(_callParameters->input()); + std::string path; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(data, path); + } + else + { + Address contractAddress; + codec.decode(data, contractAddress); + path = contractAddress.hex(); + } + + std::string adminStr = getContractAdmin(_executive, path, _callParameters); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("getAdmin success") + << LOG_KV("contractPath", path) << LOG_KV("admin", adminStr); + _callParameters->setExecResult( + blockContext->isWasm() ? codec.encode(adminStr) : codec.encode(Address(adminStr))); +} + +void AuthManagerPrecompiled::resetAdmin( + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) + +{ + std::string path; + std::string admin; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address adminAddress; + codec.decode(data, contractAddress, adminAddress); + path = contractAddress.hex(); + admin = adminAddress.hex(); + } + else + { + codec.decode(data, path, admin); + } + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("resetAdmin") + << LOG_KV("path", path) << LOG_KV("admin", admin); + if (!checkSenderFromAuth(_callParameters->m_sender)) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("sender is not from sys") << LOG_KV("path", path) + << LOG_KV("sender", _callParameters->m_sender); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, path, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::setMethodAuthType( + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) +{ + std::string path; + string32 _func; + string32 _type; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto beginT = utcTime(); + if (!blockContext->isWasm()) + { + Address contractAddress; + codec.decode(data, contractAddress, _func, _type); + path = contractAddress.hex(); + } + else + { + codec.decode(data, path, _func, _type); + } + auto admin = getContractAdmin(_executive, path, _callParameters); + if (_callParameters->m_sender != admin) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("Permission denied, only admin can set contract access.") + << LOG_KV("address", path) + << LOG_KV("sender", _callParameters->m_sender); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, path, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + auto finishedET = utcTime() - beginT; + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AuthManagerPrecompiled") << "setMethodAuthType finished" + << LOG_KV("setPath", path) << LOG_KV("finishedET", finishedET); + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::checkMethodAuth( + const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) +{ + std::string path; + string32 _func; + std::string account; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address accountAddress; + codec.decode(data, contractAddress, _func, accountAddress); + path = contractAddress.hex(); + account = accountAddress.hex(); + } + else + { + codec.decode(data, path, _func, account); + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, path, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::getMethodAuth( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string path; + string32 _func; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + codec.decode(data, contractAddress, _func); + path = contractAddress.hex(); + } + else + { + codec.decode(data, path, _func); + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, path, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::setMethodAuth( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string path; + std::string account; + string32 _func; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + bytesConstRef data = getParamData(_callParameters->input()); + auto recordT = utcTime(); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address accountAddress; + codec.decode(data, contractAddress, _func, accountAddress); + path = contractAddress.hex(); + account = accountAddress.hex(); + } + else + { + codec.decode(data, path, _func, account); + } + auto admin = getContractAdmin(_executive, path, _callParameters); + if (_callParameters->m_sender != admin) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("Permission denied, only admin can set contract access.") + << LOG_KV("address", path) + << LOG_KV("sender", _callParameters->m_sender); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, path, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AuthManagerPrecompiled") << "setMethodAuth finished" + << LOG_KV("setPath", path) << LOG_KV("execT", (utcTime() - recordT)); + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::setContractStatus( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string address; + bool isFreeze = false; + uint8_t status = 0; + bytesConstRef data = getParamData(_callParameters->input()); + auto func = getParamFunc(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (func == getFuncSelector(AUTH_METHOD_SET_CONTRACT)) + { + Address contractAddress; + codec.decode(data, contractAddress, isFreeze); + address = contractAddress.hex(); + } + else if (func == getFuncSelector(AUTH_METHOD_SET_CONTRACT_32)) + { + Address contractAddress; + codec.decode(data, contractAddress, status); + address = contractAddress.hex(); + } + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("setContractStatus") + << LOG_KV("address", address) << LOG_KV("isFreeze", isFreeze) + << LOG_KV("status", std::to_string(status)); + + /// check sender is contract admin + auto admin = getContractAdmin(_executive, address, _callParameters); + if (_callParameters->m_sender != admin) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("Permission denied, only admin can set contract access.") + << LOG_KV("address", address) + << LOG_KV("sender", _callParameters->m_sender); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, address, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + + _callParameters->setExternalResult(std::move(response)); +} + +void AuthManagerPrecompiled::contractAvailable( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string address; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(data, address); + } + else + { + Address contractAddress; + codec.decode(data, contractAddress); + address = contractAddress.hex(); + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("contractAvailable") + << LOG_KV("address", address); + + auto newParams = + codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), _callParameters->input().toBytes()); + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + auto response = externalRequest(_executive, ref(newParams), _callParameters->m_origin, + authMgrAddress, address, _callParameters->m_staticCall, _callParameters->m_create, + _callParameters->m_gasLeft, true); + + _callParameters->setExternalResult(std::move(response)); +} + +std::string AuthManagerPrecompiled::getContractAdmin( + const std::shared_ptr& _executive, const std::string& _to, + PrecompiledExecResult::Ptr const& _callParameters) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + std::string authMgrAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + + bytes selector = blockContext->isWasm() ? + codec.encodeWithSig(AUTH_METHOD_GET_ADMIN, _to) : + codec.encodeWithSig(AUTH_METHOD_GET_ADMIN_ADD, Address(_to)); + auto data = codec.encode(std::string(AUTH_CONTRACT_MGR_ADDRESS), selector); + auto response = + externalRequest(_executive, ref(data), _callParameters->m_origin, authMgrAddress, _to, + _callParameters->m_staticCall, false, _callParameters->m_gasLeft, true); + + if (response->status != (int32_t)protocol::TransactionStatus::None) + { + PRECOMPILED_LOG(DEBUG) << "Can't get contract admin, check the contract existence." + << LOG_KV("address", _to); + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError("Please check the existence of contract.")); + } + std::string admin = ""; + + codec.decode(ref(response->data), admin); + + return admin; +} + +u256 AuthManagerPrecompiled::getDeployAuthType( + const std::shared_ptr& _executive) +{ + std::string typeStr = ""; + if (_executive->blockContext().lock()->blockVersion() >= + static_cast(protocol::BlockVersion::V3_1_VERSION)) + { + auto entry = _executive->storage().getRow(tool::FS_ROOT, tool::FS_APPS.substr(1)); + // apps must exist + if (!entry) [[unlikely]] + { + PRECOMPILED_LOG(FATAL) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("apps not exist"); + } + auto fields = entry->getObject>(); + typeStr.assign(fields[2]); + } + else + { + auto entry = _executive->storage().getRow(tool::FS_APPS, FS_ACL_TYPE); + // entry must exist + typeStr.assign(entry->get()); + } + u256 type = 0; + try + { + type = boost::lexical_cast(typeStr); + } + catch (...) + { + return 0; + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("getDeployAuthType") << LOG_KV("type", type); + return type; +} + +void AuthManagerPrecompiled::getDeployType( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + + +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + u256 type = getDeployAuthType(_executive); + _callParameters->setExecResult(codec.encode(type)); +} + +void AuthManagerPrecompiled::setDeployType( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + string32 _type; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(data, _type); + if (!checkSenderFromAuth(_callParameters->m_sender)) + { + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + u256 type = _type[_type.size() - 1]; + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("setDeployType") + << LOG_KV("type", type); + if (type > 2) [[unlikely]] + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("deploy auth type must be 1 or 2."); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_ERROR_AUTH_TYPE, codec); + return; + } + if (blockContext->blockVersion() >= static_cast(protocol::BlockVersion::V3_1_VERSION)) + { + auto entry = _executive->storage().getRow(tool::FS_ROOT, tool::FS_APPS.substr(1)); + // apps must exist + if (!entry) [[unlikely]] + { + PRECOMPILED_LOG(FATAL) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("apps not exist"); + } + auto fields = entry->getObject>(); + fields[2] = boost::lexical_cast(type); + entry->setObject(fields); + _executive->storage().setRow( + tool::FS_ROOT, tool::FS_APPS.substr(1), std::move(entry.value())); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); + return; + } + Entry entry; + entry.importFields({boost::lexical_cast(type)}); + _executive->storage().setRow(tool::FS_APPS, FS_ACL_TYPE, std::move(entry)); + + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void AuthManagerPrecompiled::setDeployAuth( + const std::shared_ptr& _executive, bool _isClose, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string account; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(data, account); + } + else + { + Address accountAddress; + codec.decode(data, accountAddress); + account = accountAddress.hex(); + } + if (!checkSenderFromAuth(_callParameters->m_sender)) + { + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return; + } + PRECOMPILED_LOG(INFO) << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("setDeployAuth") + << LOG_KV("account", account) << LOG_KV("isClose", _isClose); + auto type = getDeployAuthType(_executive); + std::map aclMap; + bool access = _isClose ? (type == (int)AuthType::BLACK_LIST_MODE) : + (type == (int)AuthType::WHITE_LIST_MODE); + + if (blockContext->blockVersion() >= static_cast(protocol::BlockVersion::V3_1_VERSION)) + { + auto entry = _executive->storage().getRow(tool::FS_ROOT, tool::FS_APPS.substr(1)); + // apps must exist + if (!entry) [[unlikely]] + { + PRECOMPILED_LOG(FATAL) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("apps not exist"); + } + auto fields = entry->getObject>(); + + const auto insertIndex = (type == (int)AuthType::WHITE_LIST_MODE) ? 3 : 4; + + auto mapStr = std::string(fields.at(insertIndex)); + if (!mapStr.empty()) + { + auto&& out = asBytes(mapStr); + codec::scale::decode(aclMap, gsl::make_span(out)); + } + // covered writing + aclMap[account] = access; + fields[insertIndex] = asString(codec::scale::encode(aclMap)); + entry->setObject(fields); + + _executive->storage().setRow( + tool::FS_ROOT, tool::FS_APPS.substr(1), std::move(entry.value())); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); + return; + } + + auto getAclStr = (type == (int)AuthType::BLACK_LIST_MODE) ? FS_ACL_BLACK : FS_ACL_WHITE; + auto entry = _executive->storage().getRow(tool::FS_APPS, getAclStr); + auto mapStr = std::string(entry->getField(0)); + if (!mapStr.empty()) + { + auto&& out = asBytes(mapStr); + codec::scale::decode(aclMap, gsl::make_span(out)); + } + // covered writing + aclMap[account] = access; + entry->setField(0, asString(codec::scale::encode(aclMap))); + _executive->storage().setRow(tool::FS_APPS, getAclStr, std::move(entry.value())); + + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void AuthManagerPrecompiled::hasDeployAuth( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + std::string account; + bytesConstRef data = getParamData(_callParameters->input()); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(data, account); + } + else + { + Address accountAddress; + codec.decode(data, accountAddress); + account = accountAddress.hex(); + } + _callParameters->setExecResult(codec.encode(checkDeployAuth(_executive, account))); +} + +bool AuthManagerPrecompiled::checkDeployAuth( + const std::shared_ptr& _executive, const std::string& _account) +{ + auto type = getDeployAuthType(_executive); + if (type == 0) + { + return true; + } + std::map aclMap; + std::string aclMapStr = ""; + + if (_executive->blockContext().lock()->blockVersion() >= + static_cast(protocol::BlockVersion::V3_1_VERSION)) + { + auto entry = _executive->storage().getRow(tool::FS_ROOT, tool::FS_APPS.substr(1)); + // apps must exist + if (!entry) [[unlikely]] + { + PRECOMPILED_LOG(FATAL) + << LOG_BADGE("AuthManagerPrecompiled") << LOG_DESC("apps not exist"); + } + auto fields = entry->getObject>(); + auto getAclIndex = (type == (int)AuthType::WHITE_LIST_MODE) ? 3 : 4; + aclMapStr.assign(fields.at(getAclIndex)); + } + else + { + auto getAclType = (type == (int)AuthType::WHITE_LIST_MODE) ? FS_ACL_WHITE : FS_ACL_BLACK; + auto entry = _executive->storage().getRow(tool::FS_APPS, getAclType); + aclMapStr.assign(entry->get()); + } + + if (aclMapStr.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("AuthManagerPrecompiled") + << LOG_DESC("not deploy acl exist, return by default") + << LOG_KV("aclType", type); + // if entry still empty + // if white list mode, return false + // if black list mode, return true + return type == (int)AuthType::BLACK_LIST_MODE; + } + auto&& out = asBytes(aclMapStr); + codec::scale::decode(aclMap, gsl::make_span(out)); + if (aclMap.find(_account) == aclMap.end()) + { + // can't find account in map + // if white list mode, return false + // if black list mode, return true + return type == (int)AuthType::BLACK_LIST_MODE; + } + if (type == (int)AuthType::BLACK_LIST_MODE) + { + return !aclMap.at(_account); + } + return aclMap.at(_account); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.h b/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.h new file mode 100644 index 0000000..4b8ec4b --- /dev/null +++ b/bcos-executor/src/precompiled/extension/AuthManagerPrecompiled.h @@ -0,0 +1,97 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AuthManagerPrecompiled.h + * @author: kyonRay + * @date 2021-10-09 + */ + +#pragma once +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +namespace bcos::precompiled +{ +class AuthManagerPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + AuthManagerPrecompiled(crypto::Hash::Ptr _hashImpl, bool _isWasm); + ~AuthManagerPrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void getAdmin(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void resetAdmin(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setMethodAuthType(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void checkMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void getMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setContractStatus(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void contractAvailable(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void getDeployType(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setDeployType(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void hasDeployAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setDeployAuth(const std::shared_ptr& _executive, + bool _isClose, PrecompiledExecResult::Ptr const& _callParameters); + + inline void openDeployAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) + { + setDeployAuth(_executive, false, _callParameters); + } + + inline void closeDeployAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) + { + setDeployAuth(_executive, true, _callParameters); + } + + std::string getContractAdmin(const std::shared_ptr& _executive, + const std::string& _address, PrecompiledExecResult::Ptr const& _callParameters); + + u256 getDeployAuthType(const std::shared_ptr& _executive); + + bool checkDeployAuth(const std::shared_ptr& _executive, + const std::string& account); +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.cpp b/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.cpp new file mode 100644 index 0000000..e9e6c8a --- /dev/null +++ b/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.cpp @@ -0,0 +1,821 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContractAuthMgrPrecompiled.cpp + * @author: kyonGuo + * @date 2022/4/15 + */ + +#include "ContractAuthMgrPrecompiled.h" + +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::protocol; + +/// contract ACL +/// wasm +constexpr const char* const AUTH_METHOD_GET_ADMIN = "getAdmin(string)"; +constexpr const char* const AUTH_METHOD_SET_ADMIN = "resetAdmin(string,string)"; +constexpr const char* const AUTH_METHOD_SET_AUTH_TYPE = "setMethodAuthType(string,bytes4,uint8)"; +constexpr const char* const AUTH_METHOD_OPEN_AUTH = "openMethodAuth(string,bytes4,string)"; +constexpr const char* const AUTH_METHOD_CLOSE_AUTH = "closeMethodAuth(string,bytes4,string)"; +constexpr const char* const AUTH_METHOD_CHECK_AUTH = "checkMethodAuth(string,bytes4,string)"; +constexpr const char* const AUTH_METHOD_GET_AUTH = "getMethodAuth(string,bytes4)"; +/// evm +constexpr const char* const AUTH_METHOD_GET_ADMIN_ADD = "getAdmin(address)"; +constexpr const char* const AUTH_METHOD_SET_ADMIN_ADD = "resetAdmin(address,address)"; +constexpr const char* const AUTH_METHOD_SET_AUTH_TYPE_ADD = + "setMethodAuthType(address,bytes4,uint8)"; +constexpr const char* const AUTH_METHOD_OPEN_AUTH_ADD = "openMethodAuth(address,bytes4,address)"; +constexpr const char* const AUTH_METHOD_CLOSE_AUTH_ADD = "closeMethodAuth(address,bytes4,address)"; +constexpr const char* const AUTH_METHOD_CHECK_AUTH_ADD = "checkMethodAuth(address,bytes4,address)"; +constexpr const char* const AUTH_METHOD_GET_AUTH_ADD = "getMethodAuth(address,bytes4)"; + +/// contract status +constexpr const char* const AUTH_METHOD_SET_CONTRACT = "setContractStatus(address,bool)"; +constexpr const char* const AUTH_METHOD_SET_CONTRACT_32 = "setContractStatus(address,uint8)"; +constexpr const char* const AUTH_METHOD_GET_CONTRACT = "contractAvailable(address)"; + +ContractAuthMgrPrecompiled::ContractAuthMgrPrecompiled(crypto::Hash::Ptr _hashImpl, bool _isWasm) + : bcos::precompiled::Precompiled(std::move(_hashImpl)) +{ + const auto* getAdminStr = _isWasm ? AUTH_METHOD_GET_ADMIN : AUTH_METHOD_GET_ADMIN_ADD; + registerFunc(getFuncSelector(getAdminStr), [this](auto&& _executive, auto&& _callParameters) { + getAdmin(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* resetAdminStr = _isWasm ? AUTH_METHOD_SET_ADMIN : AUTH_METHOD_SET_ADMIN_ADD; + registerFunc(getFuncSelector(resetAdminStr), [this](auto&& _executive, auto&& _callParameters) { + resetAdmin(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* setMethodAuthTypeStr = + _isWasm ? AUTH_METHOD_SET_AUTH_TYPE : AUTH_METHOD_SET_AUTH_TYPE_ADD; + registerFunc( + getFuncSelector(setMethodAuthTypeStr), [this](auto&& _executive, auto&& _callParameters) { + setMethodAuthType(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* openMethodAuthStr = _isWasm ? AUTH_METHOD_OPEN_AUTH : AUTH_METHOD_OPEN_AUTH_ADD; + registerFunc( + getFuncSelector(openMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + openMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* closeMethodAuthStr = _isWasm ? AUTH_METHOD_CLOSE_AUTH : AUTH_METHOD_CLOSE_AUTH_ADD; + registerFunc( + getFuncSelector(closeMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + closeMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* checkMethodAuthStr = _isWasm ? AUTH_METHOD_CHECK_AUTH : AUTH_METHOD_CHECK_AUTH_ADD; + registerFunc( + getFuncSelector(checkMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + checkMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + const auto* getMethodAuthStr = _isWasm ? AUTH_METHOD_GET_AUTH : AUTH_METHOD_GET_AUTH_ADD; + registerFunc( + getFuncSelector(getMethodAuthStr), [this](auto&& _executive, auto&& _callParameters) { + getMethodAuth(std::forward(_executive), + std::forward(_callParameters)); + }); + + registerFunc( + getFuncSelector(AUTH_METHOD_SET_CONTRACT_32), + [this](auto&& _executive, auto&& _callParameters) { + setContractStatus32(std::forward(_executive), + std::forward(_callParameters)); + }, + protocol::BlockVersion::V3_2_VERSION); + + registerFunc(getFuncSelector(AUTH_METHOD_SET_CONTRACT), + [this](auto&& _executive, auto&& _callParameters) { + setContractStatus(std::forward(_executive), + std::forward(_callParameters)); + }); + registerFunc(getFuncSelector(AUTH_METHOD_GET_CONTRACT), + [this](auto&& _executive, auto&& _callParameters) { + contractAvailable(std::forward(_executive), + std::forward(_callParameters)); + }); +} + +std::shared_ptr ContractAuthMgrPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + + auto blockContext = _executive->blockContext().lock(); + const auto* authAddress = blockContext->isWasm() ? AUTH_MANAGER_NAME : AUTH_MANAGER_ADDRESS; + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + PRECOMPILED_LOG(TRACE) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") << LOG_DESC("call") + << LOG_KV("func", func); + + if (_callParameters->m_sender != authAddress) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("sender is not from AuthManager") + << LOG_KV("sender", _callParameters->m_sender); + BOOST_THROW_EXCEPTION(BCOS_ERROR( + CODE_NO_AUTHORIZED, "ContractAuthMgrPrecompiled: sender is not from AuthManager")); + } + auto selector = selector2Func.find(func); + if (selector != selector2Func.end()) + { + auto& [minVersion, execFunc] = selector->second; + if (versionCompareTo(blockContext->blockVersion(), minVersion) >= 0) + { + execFunc(_executive, _callParameters); + + if (c_fileLogLevel == LogLevel::TRACE) + { + PRECOMPILED_LOG(TRACE) + << LOG_BADGE("ContractAuthMgrPrecompiled") << LOG_DESC("call function") + << LOG_KV("func", func) << LOG_KV("minVersion", minVersion); + } + return _callParameters; + } + } + PRECOMPILED_LOG(INFO) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("ContractAuthMgrPrecompiled call undefined function!")); +} + +void ContractAuthMgrPrecompiled::getAdmin( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// evm: getAdmin(address) => string admin + /// wasm: getAdmin(string) => string admin + + std::string path; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(_callParameters->params(), path); + } + else + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress); + path = contractAddress.hex(); + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") << LOG_DESC("getAdmin") + << LOG_KV("path", path); + path = getAuthTableName(path); + + auto table = _executive->storage().openTable(path); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table not found") << LOG_KV("table", path); + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Contract address not found.")); + } + auto entry = table->getRow(ADMIN_FIELD); + if (!entry) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL admin entry not found") + << LOG_KV("path", path); + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Contract Admin row not found.")); + } + std::string adminStr = std::string(entry->getField(0)); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("getAdmin success") << LOG_KV("admin", adminStr); + _callParameters->setExecResult(codec.encode(adminStr)); +} + +void ContractAuthMgrPrecompiled::resetAdmin( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + /// evm: resetAdmin(address path,address admin) => int256 + /// wasm: resetAdmin(string path,string admin) => int256 + + std::string path; + std::string admin; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address adminAddress; + codec.decode(_callParameters->params(), contractAddress, adminAddress); + path = contractAddress.hex(); + admin = adminAddress.hex(); + } + else + { + codec.decode(_callParameters->params(), path, admin); + } + PRECOMPILED_LOG(DEBUG) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") << LOG_DESC("resetAdmin") + << LOG_KV("path", path) << LOG_KV("admin", admin); + path = getAuthTableName(path); + auto table = _executive->storage().openTable(path); + if (!table || !table->getRow(ADMIN_FIELD)) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table not found") << LOG_KV("path", path); + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Contract address not found.")); + } + auto newEntry = table->newEntry(); + newEntry.setField(SYS_VALUE, admin); + table->setRow(ADMIN_FIELD, std::move(newEntry)); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void ContractAuthMgrPrecompiled::setMethodAuthType( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// evm: setMethodAuthType(address path, bytes4 func, uint8 type) => int256 + /// wasm: setMethodAuthType(string path, bytes4 func, uint8 type) => int256 + + std::string path; + string32 _func; + string32 _type; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress, _func, _type); + path = contractAddress.hex(); + } + else + { + codec.decode(_callParameters->params(), path, _func, _type); + } + bytes func = codec::fromString32(_func).ref().getCroppedData(0, 4).toBytes(); + uint8_t type = _type[_type.size() - 1]; + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("setMethodAuthType") << LOG_KV("path", path) + << LOG_KV("func", toHexStringWithPrefix(func)) + << LOG_KV("type", (uint32_t)type); + path = getAuthTableName(path); + auto table = _executive->storage().openTable(path); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table not found") << LOG_KV("path", path); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_NOT_EXIST, codec); + return; + } + auto entry = table->getRow(METHOD_AUTH_TYPE); + if (!entry) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table method_auth_type row not found") + << LOG_KV("path", path); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_AUTH_ROW_NOT_EXIST, codec); + return; + } + + std::string authTypeStr = std::string(entry->getField(SYS_VALUE)); + std::map methAuthTypeMap; + if (!authTypeStr.empty()) + { + auto&& out = asBytes(authTypeStr); + codec::scale::decode(methAuthTypeMap, gsl::make_span(out)); + } + // covered writing + methAuthTypeMap[func] = type; + entry->setField(SYS_VALUE, asString(codec::scale::encode(methAuthTypeMap))); + table->setRow(METHOD_AUTH_TYPE, std::move(entry.value())); + + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void ContractAuthMgrPrecompiled::checkMethodAuth( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// evm: checkMethodAuth(address path, bytes4 func, address account) => bool + /// wasm: checkMethodAuth(string path, bytes4 func, string account) => bool + + std::string path; + string32 _func; + std::string account; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address accountAddress; + codec.decode(_callParameters->params(), contractAddress, _func, accountAddress); + path = contractAddress.hex(); + account = accountAddress.hex(); + } + else + { + codec.decode(_callParameters->params(), path, _func, account); + } + auto result = checkMethodAuth( + _executive, path, codec::fromString32(_func).ref().getCroppedData(0, 4), account); + _callParameters->setExecResult(codec.encode(result)); +} + +bool ContractAuthMgrPrecompiled::checkMethodAuth( + const std::shared_ptr& _executive, + const std::string_view& _path, bytesRef func, const std::string& account) +{ + auto path = getAuthTableName(_path); + auto table = _executive->storage().openTable(path); + if (!table) + { + // only precompiled contract in /sys/, or pre-built-in contract + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth table not found, auth pass through by default.") + << LOG_KV("path", path); + return true; + } + try + { + auto getMethodType = getMethodAuthType(_executive, path, func); + if (getMethodType == (int)CODE_TABLE_AUTH_TYPE_NOT_EXIST) + { + // this method not set type + return true; + } + auto&& authMap = getMethodAuth(_executive, path, getMethodType); + + if (authMap.empty()) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth row not found, no method set acl") + << LOG_KV("path", path) << LOG_KV("authType", getMethodType); + // if entry still empty + // if white list mode, return false + // if black list mode, return true + return getMethodType == (int)AuthType::BLACK_LIST_MODE; + } + if (authMap.find(func.toBytes()) == authMap.end()) + { + // func not set acl, pass through + return true; + } + if (authMap.at(func.toBytes()).find(account) == authMap.at(func.toBytes()).end()) + { + // can't find account in user map + // if white list mode, return false + // if black list mode, return true + return getMethodType == (int)AuthType::BLACK_LIST_MODE; + } + if (getMethodType == (int)AuthType::BLACK_LIST_MODE) + { + return !authMap.at(func.toBytes()).at(account); + } + return authMap.at(func.toBytes()).at(account); + } + catch (...) + { + // getMethodAuth will throw PrecompiledError + return true; + } +} + +void ContractAuthMgrPrecompiled::getMethodAuth( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// evm: getMethodAuth(address,bytes4) => (uint8,string[],string[]) + /// wasm: getMethodAuth(string,bytes4) => (uint8,string[],string[]) + + std::string path; + string32 _func; + bytes funcBytes; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (!blockContext->isWasm()) + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress, _func); + path = contractAddress.hex(); + } + else + { + codec.decode(_callParameters->params(), path, _func); + } + funcBytes = codec::fromString32(_func).ref().getCroppedData(0, 4).toBytes(); + std::vector accessList = {}; + std::vector blockList = {}; + path = getAuthTableName(path); + auto getMethodType = getMethodAuthType(_executive, path, ref(funcBytes)); + if (getMethodType < 0) + { + // no acl strategy + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("no acl strategy") << LOG_KV("path", path); + _callParameters->setExecResult( + codec.encode(uint8_t(0), std::move(accessList), std::move(blockList))); + return; + } + auto&& authMap = getMethodAuth(_executive, path, getMethodType); + + auto it = authMap.find(funcBytes); + if (it == authMap.end()) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth row not found, no method set acl") + << LOG_KV("path", path); + // func not set acl, return empty + _callParameters->setExecResult( + codec.encode(uint8_t(getMethodType), std::move(accessList), std::move(blockList))); + } + else + { + for (auto& addressPair : it->second) + { + bool access = addressPair.second ? (getMethodType == (int)AuthType::WHITE_LIST_MODE) : + (getMethodType == (int)AuthType::BLACK_LIST_MODE); + if (access) + { + accessList.emplace_back(std::move(addressPair.first)); + } + else + { + blockList.emplace_back(std::move(addressPair.first)); + } + } + _callParameters->setExecResult( + codec.encode(uint8_t(getMethodType), std::move(accessList), std::move(blockList))); + } +} + +void ContractAuthMgrPrecompiled::setMethodAuth( + const std::shared_ptr& _executive, bool _isClose, + const PrecompiledExecResult::Ptr& _callParameters) const + +{ + std::string path; + std::string account; + string32 _func; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_callParameters->params(), path, _func, account); + if (!blockContext->isWasm()) + { + Address contractAddress; + Address accountAddress; + codec.decode(_callParameters->params(), contractAddress, _func, accountAddress); + path = contractAddress.hex(); + account = accountAddress.hex(); + } + else + { + codec.decode(_callParameters->params(), path, _func, account); + } + bytes func = codec::fromString32(_func).ref().getCroppedData(0, 4).toBytes(); + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") << LOG_DESC("setAuth") + << LOG_KV("path", path) << LOG_KV("func", toHexStringWithPrefix(func)) + << LOG_KV("account", account) << LOG_KV("isClose", _isClose); + path = getAuthTableName(path); + auto table = _executive->storage().openTable(path); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("setMethodAuth: contract ACL table not found") + << LOG_KV("path", path); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_NOT_EXIST, codec); + return; + } + s256 authType = getMethodAuthType(_executive, path, ref(func)); + std::string getTypeStr; + if (authType == (int)AuthType::WHITE_LIST_MODE) + getTypeStr = METHOD_AUTH_WHITE; + else if (authType == (int)AuthType::BLACK_LIST_MODE) + getTypeStr = METHOD_AUTH_BLACK; + else [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("error auth type") << LOG_KV("path", path) + << LOG_KV("type", authType); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_ERROR_AUTH_TYPE, codec); + return; + } + auto entry = table->getRow(getTypeStr); + if (!entry) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth row not found, try to set new one") + << LOG_KV("path", path) << LOG_KV("Type", getTypeStr); + entry = table->newEntry(); + entry->setField(SYS_VALUE, ""); + } + + bool access = _isClose ? (authType == (int)AuthType::BLACK_LIST_MODE) : + (authType == (int)AuthType::WHITE_LIST_MODE); + + auto userAuth = std::make_pair(account, access); + + MethodAuthMap authMap; + if (entry->getField(SYS_VALUE).empty()) + { + // first insert func + authMap.insert({func, {std::move(userAuth)}}); + } + else + { + try + { + auto&& out = asBytes(std::string(entry->getField(SYS_VALUE))); + codec::scale::decode(authMap, gsl::make_span(out)); + if (authMap.find(func) != authMap.end()) + { + authMap.at(func)[account] = access; + } + else + { + authMap.insert({func, {std::move(userAuth)}}); + } + } + catch (...) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth map parse error") << LOG_KV("path", path); + getErrorCodeOut( + _callParameters->mutableExecResult(), CODE_TABLE_AUTH_ROW_NOT_EXIST, codec); + return; + } + } + entry->setField(SYS_VALUE, asString(codec::scale::encode(authMap))); + table->setRow(getTypeStr, std::move(entry.value())); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +int32_t ContractAuthMgrPrecompiled::getMethodAuthType( + const std::shared_ptr& _executive, const std::string& _path, + bytesConstRef _func) const +{ + auto table = _executive->storage().openTable(_path); + // _table can't be nullopt + auto entry = table->getRow(METHOD_AUTH_TYPE); + if (!entry || entry->getField(SYS_VALUE).empty()) + { + PRECOMPILED_LOG(TRACE) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("no acl strategy exist, should set the method access auth type firstly"); + return (int)CODE_TABLE_AUTH_TYPE_NOT_EXIST; + } + std::string authTypeStr = std::string(entry->getField(SYS_VALUE)); + std::map authTypeMap; + try + { + auto&& out = asBytes(authTypeStr); + codec::scale::decode(authTypeMap, gsl::make_span(out)); + auto it = authTypeMap.find(_func.toBytes()); + if (it == authTypeMap.end()) + { + return (int)CODE_TABLE_AUTH_TYPE_NOT_EXIST; + } + return it->second; + } + catch (...) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("decode method type error"); + return (int)CODE_TABLE_AUTH_TYPE_DECODE_ERROR; + } +} + +MethodAuthMap ContractAuthMgrPrecompiled::getMethodAuth( + const std::shared_ptr& _executive, const std::string& path, + int32_t getMethodType) const +{ + auto table = _executive->storage().openTable(path); + if (!table) + { + // only precompiled contract in /sys/, or pre-built-in contract + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth table not found.") << LOG_KV("path", path); + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Auth table not found")); + } + auto getTypeStr = + getMethodType == (int)AuthType::WHITE_LIST_MODE ? METHOD_AUTH_WHITE : METHOD_AUTH_BLACK; + + auto entry = table->getRow(getTypeStr); + MethodAuthMap authMap = {}; + if (!entry || entry->getField(SYS_VALUE).empty()) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth row not found, no method set acl") + << LOG_KV("path", path) << LOG_KV("authType", getTypeStr); + return authMap; + } + bytes&& out = asBytes(std::string(entry->getField(SYS_VALUE))); + codec::scale::decode(authMap, gsl::make_span(out)); + return authMap; +} + +void ContractAuthMgrPrecompiled::setContractStatus( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// setContractStatus(address _addr, bool isFreeze) => int256 + + std::string address; + bool isFreeze = false; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(_callParameters->params(), address, isFreeze); + } + else + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress, isFreeze); + address = contractAddress.hex(); + } + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("setContractStatus") << LOG_KV("address", address) + << LOG_KV("isFreeze", isFreeze); + auto path = getAuthTableName(address); + auto table = _executive->storage().openTable(path); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table not found") << LOG_KV("path", path); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_NOT_EXIST, codec); + return; + } + auto existEntry = table->getRow(STATUS_FIELD); + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_2_VERSION) >= 0 && + existEntry.has_value()) + { + auto existStatus = existEntry->get(); + // account already abolish, should not set any status to it + if (existStatus == CONTRACT_ABOLISH) + { + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract already abolish, should not set any status") + << LOG_KV("contract", path); + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError("Contract already abolish, should not set any status.")); + } + } + auto status = isFreeze ? CONTRACT_FROZEN : CONTRACT_NORMAL; + Entry entry = {}; + entry.importFields({std::string(status)}); + table->setRow("status", std::move(entry)); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void ContractAuthMgrPrecompiled::setContractStatus32( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) +{ + /// setContractStatus(address _addr, uint8) => int256 + std::string address; + uint8_t status = 0; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(_callParameters->params(), address, status); + } + else + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress, status); + address = contractAddress.hex(); + } + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("setContractStatus") << LOG_KV("address", address) + << LOG_KV("status", std::to_string(status)); + auto path = getAuthTableName(address); + auto table = _executive->storage().openTable(path); + if (!table) [[unlikely]] + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract ACL table not found") << LOG_KV("path", path); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_NOT_EXIST, codec); + return; + } + auto statusStr = StatusToString(status); + if (statusStr.empty()) [[unlikely]] + { + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Unrecognized status type.")); + } + + auto existEntry = table->getRow(STATUS_FIELD); + if (existEntry.has_value()) + { + auto existStatus = existEntry->get(); + // account already abolish, should not set any status to it + if (existStatus == CONTRACT_ABOLISH && statusStr != CONTRACT_ABOLISH) + { + PRECOMPILED_LOG(INFO) << BLOCK_NUMBER(blockContext->number()) + << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contract already abolish, should not set any status") + << LOG_KV("contract", path) << LOG_KV("status", statusStr); + BOOST_THROW_EXCEPTION( + protocol::PrecompiledError("Contract already abolish, should not set any status.")); + } + } + + Entry entry = {}; + entry.importFields({std::string(statusStr)}); + table->setRow(STATUS_FIELD, std::move(entry)); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_SUCCESS, codec); +} + +void ContractAuthMgrPrecompiled::contractAvailable( + const std::shared_ptr& _executive, + const PrecompiledExecResult::Ptr& _callParameters) + +{ + /// contractAvailable(address _addr) => bool + + std::string address; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + if (blockContext->isWasm()) + { + codec.decode(_callParameters->params(), address); + } + else + { + Address contractAddress; + codec.decode(_callParameters->params(), contractAddress); + address = contractAddress.hex(); + } + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("contractAvailable") << LOG_KV("address", address); + auto status = getContractStatus(_executive, address); + // result !=0 && result != 1 + if (status < 0) + { + BOOST_THROW_EXCEPTION(protocol::PrecompiledError("Cannot get contract status")); + } + bool result = (status == (uint8_t)ContractStatus::Available); + _callParameters->setExecResult(codec.encode(result)); +} + +int32_t ContractAuthMgrPrecompiled::getContractStatus( + const std::shared_ptr& _executive, std::string_view _path) +{ + auto path = getAuthTableName(_path); + auto table = _executive->storage().openTable(path); + if (!table) + { + // only precompiled contract in /sys/, or pre-built-in contract + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("auth table not found, auth pass through by default.") + << LOG_KV("path", path); + return (int)CODE_TABLE_NOT_EXIST; + } + auto entry = table->getRow(STATUS_FIELD); + if (!entry) + { + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC( + "auth status row not found, auth pass through by default."); + return (int)CODE_TABLE_AUTH_ROW_NOT_EXIST; + } + auto status = entry->get(); + PRECOMPILED_LOG(TRACE) << LOG_BADGE("ContractAuthMgrPrecompiled") + << LOG_DESC("get contract status success") << LOG_KV("contract", path) + << LOG_KV("status", status); + auto result = static_cast(StatusFromString(status)); + return result; +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.h b/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.h new file mode 100644 index 0000000..8c0f197 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/ContractAuthMgrPrecompiled.h @@ -0,0 +1,113 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContractAuthMgrPrecompiled.h + * @author: kyonGuo + * @date 2022/4/15 + */ + +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +namespace bcos::precompiled +{ +/// func => (address, access) +using MethodAuthMap = std::map>; + +enum AuthType : int +{ + WHITE_LIST_MODE = 1, + BLACK_LIST_MODE = 2 +}; + +class ContractAuthMgrPrecompiled : public bcos::precompiled::Precompiled +{ +public: + ContractAuthMgrPrecompiled(crypto::Hash::Ptr _hashImpl, bool _isWasm); + ~ContractAuthMgrPrecompiled() override = default; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + + bool checkMethodAuth(const std::shared_ptr& _executive, + const std::string_view& path, bytesRef func, const std::string& account); + + int32_t getContractStatus( + const std::shared_ptr& _executive, std::string_view _path); + +private: + void getAdmin(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void resetAdmin(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setMethodAuthType(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void checkMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void getMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + inline void closeMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) const + { + setMethodAuth(_executive, true, _callParameters); + } + + inline void openMethodAuth(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters) const + { + setMethodAuth(_executive, false, _callParameters); + } + + void setMethodAuth(const std::shared_ptr& _executive, + bool _isClose, PrecompiledExecResult::Ptr const& _callParameters) const; + + void setContractStatus(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void setContractStatus32(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + void contractAvailable(const std::shared_ptr& _executive, + PrecompiledExecResult::Ptr const& _callParameters); + + int32_t getMethodAuthType(const std::shared_ptr& _executive, + const std::string& _path, bytesConstRef _func) const; + + MethodAuthMap getMethodAuth(const std::shared_ptr& _executive, + const std::string& path, int32_t authType) const; + + inline std::string getAuthTableName(std::string_view _name) const + { + std::string tableName; + tableName.reserve( + executor::USER_APPS_PREFIX.size() + _name.size() + executor::CONTRACT_SUFFIX.size()); + // /apps/ + name + _accessAuth + tableName.append(executor::USER_APPS_PREFIX); + tableName.append(_name); + tableName.append(executor::CONTRACT_SUFFIX); + return tableName; + } +}; +} // namespace bcos::precompiled \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.cpp b/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.cpp new file mode 100644 index 0000000..2b0147a --- /dev/null +++ b/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.cpp @@ -0,0 +1,104 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CpuHeavyPrecompiled.cpp + * @author: jimmyshi + * @date 2021-02-23 + */ + +#include "CpuHeavyPrecompiled.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; + +/* +contract HelloWorld { + function get() public constant returns(string); + function set(string _m) public; +} +*/ + +// set interface +const char* const METHOD_SORT = "sort(uint256,uint256)"; + +CpuHeavyPrecompiled::CpuHeavyPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[METHOD_SORT] = getFuncSelector(METHOD_SORT, _hashImpl); +} + + +void quickSort(std::vector& arr, int left, int right) +{ + int i = left; + int j = right; + if (i == j) + return; + unsigned int pivot = arr[left + (right - left) / 2]; + while (i <= j) + { + while (arr[i] < pivot) + i++; + while (pivot < arr[j]) + j--; + if (i <= j) + { + std::swap(arr[i], arr[j]); + i++; + j--; + } + } + if (left < j) + quickSort(arr, left, j); + if (i < right) + quickSort(arr, i, right); +} + +void sort(int size) +{ + std::vector data = std::vector(size); + for (int x = 0; x < size; x++) + { + data[x] = size - x; + } + quickSort(data, 0, size - 1); +} + + +std::shared_ptr CpuHeavyPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + PRECOMPILED_LOG(TRACE) << LOG_BADGE("CpuHeavyPrecompiled") << LOG_DESC("call") + << LOG_KV("param", toHexString(_callParameters->input())); + + // parse function name + // uint32_t func = getParamFunc(_param); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + + u256 size, signature; + codec.decode(_callParameters->params(), size, signature); + + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(_callParameters->input().size()); + + sort(size.convert_to()); + + _callParameters->setExecResult(bytes()); + return _callParameters; +} diff --git a/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.h b/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.h new file mode 100644 index 0000000..ee55c25 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/CpuHeavyPrecompiled.h @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CpuHeavyPrecompiled.h + * @author: jimmyshi + * @date 2022-02-23 + */ + +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" + +namespace bcos +{ +namespace precompiled +{ +class CpuHeavyPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + + CpuHeavyPrecompiled(crypto::Hash::Ptr _hashImpl); + + virtual ~CpuHeavyPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + + // is this precompiled need parallel processing, default false. + virtual bool isParallelPrecompiled() override { return true; } + + virtual std::vector getParallelTag(bytesConstRef param, bool _isWasm) override + { + (void)param; + (void)_isWasm; + return std::vector(); + }; + + static inline std::string getAddress(unsigned int id) + { + u160 address = u160(CPU_HEAVY_START_ADDRESS); + address += id; + h160 addressBytes = h160(address); + return addressBytes.hex(); + } + + static void registerPrecompiled( + std::shared_ptr>> + registeredMap, + crypto::Hash::Ptr _hashImpl) + { + for (int id = 0; id < CPU_HEAVY_CONTRACT_NUM; id++) + { + std::string&& address = getAddress(id); + registeredMap->insert({std::move(address), + std::make_shared(_hashImpl)}); + } + BCOS_LOG(TRACE) << LOG_BADGE("CpuHeavy") << "Register CpuHeavyPrecompiled complete" + << LOG_KV("addressFrom", getAddress(0)) + << LOG_KV("addressTo", getAddress(CPU_HEAVY_CONTRACT_NUM - 1)); + } +}; +} // namespace precompiled +} // namespace bcos diff --git a/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.cpp b/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.cpp new file mode 100644 index 0000000..82fe2fa --- /dev/null +++ b/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.cpp @@ -0,0 +1,519 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DagTransferPrecompiled.cpp + * @author: kyonRay + * @date 2021-05-30 + */ + +#include "DagTransferPrecompiled.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::ledger; + +// interface of DagTransferPrecompiled +/* +contract DagTransfer{ + function userAdd(string user, uint256 balance) public returns(); + function userSave(string user, uint256 balance) public returns(uint256); + function userDraw(string user, uint256 balance) public returns(uint256); + function userBalance(string user) public constant returns(uint256,uint256); + function userTransfer(string user_a, string user_b, uint256 amount) public returns(uint256); +} +*/ +const char* const DAG_TRANSFER_METHOD_ADD_STR_UINT = "userAdd(string,uint256)"; +const char* const DAG_TRANSFER_METHOD_SAV_STR_UINT = "userSave(string,uint256)"; +const char* const DAG_TRANSFER_METHOD_DRAW_STR_UINT = "userDraw(string,uint256)"; +const char* const DAG_TRANSFER_METHOD_TRS_STR2_UINT = "userTransfer(string,string,uint256)"; +const char* const DAG_TRANSFER_METHOD_BAL_STR = "userBalance(string)"; + +// fields of table '_dag_transfer_' +// const char* const DAG_TRANSFER_FIELD_NAME = "user_name"; +const size_t DAG_TRANSFER_FIELD_BALANCE = 0; + +DagTransferPrecompiled::DagTransferPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[DAG_TRANSFER_METHOD_ADD_STR_UINT] = + getFuncSelector(DAG_TRANSFER_METHOD_ADD_STR_UINT, _hashImpl); + name2Selector[DAG_TRANSFER_METHOD_SAV_STR_UINT] = + getFuncSelector(DAG_TRANSFER_METHOD_SAV_STR_UINT, _hashImpl); + name2Selector[DAG_TRANSFER_METHOD_DRAW_STR_UINT] = + getFuncSelector(DAG_TRANSFER_METHOD_DRAW_STR_UINT, _hashImpl); + name2Selector[DAG_TRANSFER_METHOD_TRS_STR2_UINT] = + getFuncSelector(DAG_TRANSFER_METHOD_TRS_STR2_UINT, _hashImpl); + name2Selector[DAG_TRANSFER_METHOD_BAL_STR] = + getFuncSelector(DAG_TRANSFER_METHOD_BAL_STR, _hashImpl); +} + +std::vector DagTransferPrecompiled::getParallelTag(bytesConstRef _param, bool _isWasm) +{ + // parse function name + uint32_t func = getParamFunc(_param); + bytesConstRef data = getParamData(_param); + + std::vector results; + auto codec = CodecWrapper(m_hashImpl, _isWasm); + // user_name user_balance 2 fields in table, the key of table is user_name field + if (func == name2Selector[DAG_TRANSFER_METHOD_ADD_STR_UINT]) + { // userAdd(string,uint256) + std::string user; + u256 amount; + codec.decode(data, user, amount); + // if params is invalid , parallel process can be done + if (!user.empty()) + { + results.push_back(user); + } + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_SAV_STR_UINT]) + { // userSave(string,uint256) + std::string user; + u256 amount; + codec.decode(data, user, amount); + // if params is invalid , parallel process can be done + if (!user.empty()) + { + results.push_back(user); + } + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_DRAW_STR_UINT]) + { // userDraw(string,uint256) + std::string user; + u256 amount; + codec.decode(data, user, amount); + // if params is invalid , parallel process can be done + if (!user.empty()) + { + results.push_back(user); + } + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_TRS_STR2_UINT]) + { + // userTransfer(string,string,uint256) + std::string fromUser, toUser; + u256 amount; + codec.decode(data, fromUser, toUser, amount); + // if params is invalid , parallel process can be done + if (!fromUser.empty() && !toUser.empty()) + { + results.push_back(fromUser); + results.push_back(toUser); + } + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_BAL_STR]) + { + // query interface has no parallel processing conflict. + // do nothing + } + + return results; +} + +std::shared_ptr DagTransferPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + + // user_name user_balance 2 fields in table, the key of table is user_name field + if (func == name2Selector[DAG_TRANSFER_METHOD_ADD_STR_UINT]) + { // userAdd(string,uint256) + userAddCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_SAV_STR_UINT]) + { // userSave(string,uint256) + userSaveCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_DRAW_STR_UINT]) + { // userDraw(string,uint256) + userDrawCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_TRS_STR2_UINT]) + { // userTransfer(string,string,uint256) + userTransferCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else if (func == name2Selector[DAG_TRANSFER_METHOD_BAL_STR]) + { // userBalance(string user) + userBalanceCall(_executive, data, _callParameters->mutableExecResult()); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC("error func") + << LOG_KV("func", func); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} + +void DagTransferPrecompiled::userAddCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const&, bytes& _out) +{ + // userAdd(string,uint256) + std::string user; + u256 amount; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_data, user, amount); + + int ret; + std::string strErrorMsg; + do + { + if (user.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + auto table = _executive->storage().openTable(DAG_TRANSFER); + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + auto entry = table->getRow(user); + if (entry) + { + strErrorMsg = "user already exist"; + ret = CODE_INVALID_USER_ALREADY_EXIST; + break; + } + + // user not exist, insert user into it. + auto newEntry = table->newEntry(); + newEntry.setField(DAG_TRANSFER_FIELD_BALANCE, amount.str()); + table->setRow(user, newEntry); + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} + +void DagTransferPrecompiled::userSaveCall( + std::shared_ptr _executive, bytesConstRef _data, + std::string const&, bytes& _out) +{ + // userSave(string,uint256) + std::string user; + u256 amount; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_data, user, amount); + + int ret; + u256 balance; + std::string strErrorMsg; + do + { + if (user.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + + // check amount valid + if (0 == amount) + { + strErrorMsg = "invalid save amount"; + ret = CODE_INVALID_AMOUNT; + break; + } + + auto table = _executive->storage().openTable(DAG_TRANSFER); + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + + auto entry = table->getRow(user); + if (!entry) + { + // If user is not exist, insert it. With this strategy, we can also add user by save + // operation. + auto newEntry = table->newEntry(); + newEntry.setField(DAG_TRANSFER_FIELD_BALANCE, amount.str()); + table->setRow(user, newEntry); + } + else + { + balance = u256(entry->getField(DAG_TRANSFER_FIELD_BALANCE)); + + // if overflow + auto new_balance = balance + amount; + if (new_balance < balance) + { + strErrorMsg = "save overflow"; + ret = CODE_INVALID_BALANCE_OVERFLOW; + break; + } + + auto updateEntry = table->newEntry(); + updateEntry.setField(DAG_TRANSFER_FIELD_BALANCE, new_balance.str()); + table->setRow(user, updateEntry); + } + + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} + +void DagTransferPrecompiled::userDrawCall( + std::shared_ptr _executive, bytesConstRef _data, + std::string const&, bytes& _out) +{ + std::string user; + u256 amount; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_data, user, amount); + + u256 balance; + int ret; + std::string strErrorMsg; + do + { + if (user.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + if (amount == 0) + { + strErrorMsg = "draw invalid amount"; + ret = CODE_INVALID_AMOUNT; + break; + } + auto table = _executive->storage().openTable(DAG_TRANSFER); + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + + auto entry = table->getRow(user); + if (!entry) + { + strErrorMsg = "user not exist"; + ret = CODE_INVALID_USER_NOT_EXIST; + break; + } + + // only one record for every user + balance = u256(entry->getField(DAG_TRANSFER_FIELD_BALANCE)); + if (balance < amount) + { + strErrorMsg = "insufficient balance"; + ret = CODE_INVALID_INSUFFICIENT_BALANCE; + break; + } + + auto new_balance = balance - amount; + auto newEntry = table->newEntry(); + newEntry.setField(DAG_TRANSFER_FIELD_BALANCE, new_balance.str()); + table->setRow(user, newEntry); + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} + +void DagTransferPrecompiled::userBalanceCall( + std::shared_ptr _executive, bytesConstRef _data, bytes& _out) +{ + std::string user; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_data, user); + + u256 balance; + int ret; + std::string strErrorMsg; + + do + { + if (user.empty()) + { + strErrorMsg = " invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + + auto table = _executive->storage().openTable(DAG_TRANSFER); + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + + auto entry = table->getRow(user); + if (!entry) + { + strErrorMsg = "user not exist"; + ret = CODE_INVALID_USER_NOT_EXIST; + break; + } + + // only one record for every user + balance = u256(entry->getField(DAG_TRANSFER_FIELD_BALANCE)); + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret), balance); +} + +void DagTransferPrecompiled::userTransferCall( + std::shared_ptr _executive, bytesConstRef _data, + std::string const&, bytes& _out) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + std::string fromUser, toUser; + u256 amount; + codec.decode(_data, fromUser, toUser, amount); + + u256 fromUserBalance, newFromUserBalance; + u256 toUserBalance, newToUserBalance; + + std::string strErrorMsg; + int ret; + do + { + // parameters check + if (fromUser.empty() || toUser.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + if (amount == 0) + { + strErrorMsg = "invalid amount"; + ret = CODE_INVALID_AMOUNT; + break; + } + // transfer self, do nothing + if (fromUser == toUser) + { + ret = 0; + break; + } + auto table = _executive->storage().openTable(DAG_TRANSFER); + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + + auto entry = table->getRow(fromUser); + if (!entry) + { + strErrorMsg = "from user not exist"; + ret = CODE_INVALID_USER_NOT_EXIST; + break; + } + + fromUserBalance = u256(entry->getField(DAG_TRANSFER_FIELD_BALANCE)); + if (fromUserBalance < amount) + { + strErrorMsg = "from user insufficient balance"; + ret = CODE_INVALID_INSUFFICIENT_BALANCE; + break; + } + + entry = table->getRow(toUser); + if (!entry) + { + // If to user not exist, add it first. + auto newEntry = table->newEntry(); + newEntry.setField(DAG_TRANSFER_FIELD_BALANCE, u256(0).str()); + table->setRow(toUser, newEntry); + toUserBalance = 0; + } + else + { + toUserBalance = u256(entry->getField(DAG_TRANSFER_FIELD_BALANCE)); + } + + // overflow check + if (toUserBalance + amount < toUserBalance) + { + strErrorMsg = "to user balance overflow."; + ret = CODE_INVALID_BALANCE_OVERFLOW; + break; + } + + newFromUserBalance = fromUserBalance - amount; + newToUserBalance = toUserBalance + amount; + + // update fromUser balance info. + entry = table->newEntry(); + entry->setField(DAG_TRANSFER_FIELD_BALANCE, newFromUserBalance.str()); + table->setRow(fromUser, *entry); + + // update toUser balance info. + entry = table->newEntry(); + entry->setField(DAG_TRANSFER_FIELD_BALANCE, newToUserBalance.str()); + table->setRow(toUser, *entry); + // end with success + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("DagTransferPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} diff --git a/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.h b/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.h new file mode 100644 index 0000000..04263d0 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/DagTransferPrecompiled.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DagTransferPrecompiled.h + * @author: kyonRay + * @date 2021-05-30 + */ + +#pragma once +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include + +namespace bcos +{ +namespace precompiled +{ +class DagTransferPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + DagTransferPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~DagTransferPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +public: + // is this precompiled need parallel processing, default false. + bool isParallelPrecompiled() override { return true; } + std::vector getParallelTag(bytesConstRef param, bool _isWasm) override; + + static void createDagTable(std::shared_ptr storageInterface) + { + std::string _tableName(ledger::DAG_TRANSFER); + // create table first + std::promise createPromise; + storageInterface->asyncCreateTable(_tableName, SYS_VALUE_FIELDS, + [&createPromise](Error::UniquePtr _e, std::optional) { + createPromise.set_value(std::move(_e)); + }); + Error::UniquePtr _e = createPromise.get_future().get(); + BCOS_LOG(TRACE) << LOG_BADGE("DAG TRANSFER") << "create DAG Transfer table" + << LOG_KV("table", _tableName) + << (_e == nullptr ? "" : " withError: " + _e->errorMessage()); + } + +public: + void userAddCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); + void userSaveCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); + void userDrawCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); + void userBalanceCall(std::shared_ptr _executive, + bytesConstRef _data, bytes& _out); + void userTransferCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); +}; + +} // namespace precompiled + +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.cpp b/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.cpp new file mode 100644 index 0000000..6e50e83 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.cpp @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GroupSigPrecompiled.cpp + * @author: yklu + * @date 2022-04-12 + */ +#include "GroupSigPrecompiled.h" +#include "../../executive/BlockContext.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; + +/* +contract GroupSig +{ + function groupSigVerify(string signature, string message, string gpkInfo, string paramInfo) +public constant returns(int, bool); +} +*/ + +const char* const GROUP_SIG_METHOD_SET_STR = "groupSigVerify(string,string,string,string)"; + +GroupSigPrecompiled::GroupSigPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[GROUP_SIG_METHOD_SET_STR] = getFuncSelector(GROUP_SIG_METHOD_SET_STR, _hashImpl); +} + +std::shared_ptr GroupSigPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + auto blockContext = _executive->blockContext().lock(); + auto codec = + std::make_shared(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + + if (func == name2Selector[GROUP_SIG_METHOD_SET_STR]) + { + // groupSigVerify(string) + std::string signature, message, gpkInfo, paramInfo; + codec->decode(data, signature, message, gpkInfo, paramInfo); + bool result = false; + try + { + result = GroupSigApi::group_verify(signature, message, gpkInfo, paramInfo); + gasPricer->appendOperation(InterfaceOpcode::GroupSigVerify); + } + catch (std::exception& error) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("GroupSigPrecompiled") << LOG_DESC(error.what()) + << LOG_KV("signature", signature) << LOG_KV("message", message) + << LOG_KV("gpkInfo", gpkInfo) << LOG_KV("paramInfo", paramInfo); + result = false; + } + catch (std::string& error) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("GroupSigPrecompiled") << LOG_DESC(error) + << LOG_KV("signature", signature) << LOG_KV("message", message) + << LOG_KV("gpkInfo", gpkInfo) << LOG_KV("paramInfo", paramInfo); + result = false; + } + int32_t retCode = CODE_SUCCESS; + if (!result) + { + retCode = VERIFY_GROUP_SIG_FAILED; + } + _callParameters->setExecResult(codec->encode(retCode, result)); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("GroupSigPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + _callParameters->setExecResult(codec->encode((int32_t)CODE_UNKNOW_FUNCTION_CALL, false)); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.h b/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.h new file mode 100644 index 0000000..167f1bf --- /dev/null +++ b/bcos-executor/src/precompiled/extension/GroupSigPrecompiled.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GroupSigPrecompiled.h + * @author: yklu + * @date 2022-04-12 + */ +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" + +namespace bcos +{ +namespace precompiled +{ +class GroupSigPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + GroupSigPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~GroupSigPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; +}; +} // namespace precompiled +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.cpp b/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.cpp new file mode 100644 index 0000000..85664e1 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.cpp @@ -0,0 +1,128 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HelloWorldPrecompiled.cpp + * @author: kyonRay + * @date 2021-05-30 + */ + +#include "HelloWorldPrecompiled.h" +#include "../../executive/BlockContext.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; + +/* +contract HelloWorld { + function get() public constant returns(string); + function set(string _m) public; +} +*/ + +// HelloWorldPrecompiled table name +const std::string HELLO_WORLD_TABLE_NAME = "hello_world"; +// key field +const std::string HELLO_WORLD_KEY_FIELD = "key"; +const std::string HELLO_WORLD_KEY_FIELD_NAME = "hello_key"; +// value field +const std::string HELLO_WORLD_VALUE_FIELD = "value"; + +// get interface +const char* const HELLO_WORLD_METHOD_GET = "get()"; +// set interface +const char* const HELLO_WORLD_METHOD_SET = "set(string)"; + +HelloWorldPrecompiled::HelloWorldPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[HELLO_WORLD_METHOD_GET] = getFuncSelector(HELLO_WORLD_METHOD_GET, _hashImpl); + name2Selector[HELLO_WORLD_METHOD_SET] = getFuncSelector(HELLO_WORLD_METHOD_SET, _hashImpl); +} + +std::shared_ptr HelloWorldPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + PRECOMPILED_LOG(TRACE) << LOG_BADGE("HelloWorldPrecompiled") << LOG_DESC("call") + << LOG_KV("param", toHexString(_callParameters->input())); + + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(_callParameters->input().size()); + + auto table = _executive->storage().openTable(precompiled::getTableName(HELLO_WORLD_TABLE_NAME)); + gasPricer->appendOperation(InterfaceOpcode::OpenTable); + if (!table) + { + // table is not exist, create it. + table = _executive->storage().createTable( + precompiled::getTableName(HELLO_WORLD_TABLE_NAME), HELLO_WORLD_VALUE_FIELD); + gasPricer->appendOperation(InterfaceOpcode::CreateTable); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("HelloWorldPrecompiled") << LOG_DESC("set") + << LOG_DESC("open table failed."); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_NO_AUTHORIZED, codec); + return _callParameters; + } + } + if (func == name2Selector[HELLO_WORLD_METHOD_GET]) + { // get() function call + // default retMsg + std::string retValue = "Hello World!"; + + auto entry = table->getRow(HELLO_WORLD_KEY_FIELD_NAME); + if (!entry) + { + gasPricer->updateMemUsed(entry->size()); + gasPricer->appendOperation(InterfaceOpcode::Select, 1); + + retValue = entry->getField(0); + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("HelloWorldPrecompiled") << LOG_DESC("get") + << LOG_KV("value", retValue); + } + _callParameters->setExecResult(codec.encode(retValue)); + } + else if (func == name2Selector[HELLO_WORLD_METHOD_SET]) + { // set(string) function call + std::string strValue; + codec.decode(data, strValue); + auto entry = table->getRow(HELLO_WORLD_KEY_FIELD_NAME); + gasPricer->updateMemUsed(entry->size()); + gasPricer->appendOperation(InterfaceOpcode::Select, 1); + entry->setField(0, strValue); + + table->setRow(HELLO_WORLD_KEY_FIELD_NAME, *entry); + gasPricer->appendOperation(InterfaceOpcode::Update, 1); + gasPricer->updateMemUsed(entry->size()); + getErrorCodeOut(_callParameters->mutableExecResult(), 1, codec); + } + else + { // unknown function call + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("HelloWorldPrecompiled") + << LOG_DESC(" unknown function ") << LOG_KV("func", func); + _callParameters->setExecResult(codec.encode(u256((int)CODE_UNKNOW_FUNCTION_CALL))); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} diff --git a/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.h b/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.h new file mode 100644 index 0000000..62c290f --- /dev/null +++ b/bcos-executor/src/precompiled/extension/HelloWorldPrecompiled.h @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HelloWorldPrecompiled.h + * @author: kyonRay + * @date 2021-05-30 + */ + +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" + +namespace bcos +{ +namespace precompiled +{ +class HelloWorldPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + HelloWorldPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~HelloWorldPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; +}; +} // namespace precompiled +} // namespace bcos diff --git a/bcos-executor/src/precompiled/extension/PermissionPrecompiledInterface.h b/bcos-executor/src/precompiled/extension/PermissionPrecompiledInterface.h new file mode 100644 index 0000000..9043e75 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/PermissionPrecompiledInterface.h @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PermissionPrecompiledInterface.h + * @author: kyonRay + * @date 2021-09-08 + */ + +#pragma once +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" + +namespace bcos::precompiled +{ +const char* const PER_METHOD_LOGIN = "login(string,string[])"; +const char* const PER_METHOD_LOGOUT = "logout(string,string[])"; +const char* const PER_METHOD_CREATE = "create(string,string,string,bytes)"; +const char* const PER_METHOD_CALL = "call(string,string,string,bytes)"; +const char* const PER_METHOD_SEND = "sendTransaction(string,string,string,bytes)"; +struct PermissionRet +{ + using Ptr = std::shared_ptr; + s256 code; + std::string message; + std::string path; + PermissionRet(s256&& _code, std::string&& _msg) : code(_code), message(_msg) {} + PermissionRet(s256&& _code, std::string&& _msg, std::string&& _path) + : code(_code), message(_msg), path(_path) + {} +}; +class PermissionPrecompiledInterface : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + PermissionPrecompiledInterface(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl){}; + virtual ~PermissionPrecompiledInterface(){}; + + std::shared_ptr call( + std::shared_ptr, PrecompiledExecResult::Ptr) override + { + return nullptr; + } + + virtual PermissionRet::Ptr login( + const std::string& nonce, const std::vector& params) = 0; + + virtual PermissionRet::Ptr logout( + const std::string& path, const std::vector& params) = 0; + + virtual PermissionRet::Ptr create(const std::string& userPath, const std::string& origin, + const std::string& to, bytesConstRef params) = 0; + + virtual PermissionRet::Ptr call(const std::string& userPath, const std::string& origin, + const std::string& to, bytesConstRef params) = 0; + + virtual PermissionRet::Ptr sendTransaction(const std::string& userPath, + const std::string& origin, const std::string& to, bytesConstRef params) = 0; +}; +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/extension/RingSigPrecompiled.cpp b/bcos-executor/src/precompiled/extension/RingSigPrecompiled.cpp new file mode 100644 index 0000000..e4d1514 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/RingSigPrecompiled.cpp @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RingSigPrecompiled.cpp + * @author: yklu + * @date 2022-04-12 + */ +#include "RingSigPrecompiled.h" +#include "../../executive/BlockContext.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; + +/* +contract RingSig +{ + function ringSigVerify(string signature, string message, string paramInfo) public constant +returns(int, bool); +} +*/ + +const char* const RING_SIG_METHOD_SET_STR = "ringSigVerify(string,string,string)"; + +RingSigPrecompiled::RingSigPrecompiled(crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + name2Selector[RING_SIG_METHOD_SET_STR] = getFuncSelector(RING_SIG_METHOD_SET_STR, _hashImpl); +} + +std::shared_ptr RingSigPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + auto blockContext = _executive->blockContext().lock(); + auto codec = + std::make_shared(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + + if (func == name2Selector[RING_SIG_METHOD_SET_STR]) + { + // ringSigVerify(string,string,string) + std::string signature, message, paramInfo; + codec->decode(data, signature, message, paramInfo); + bool result = false; + try + { + result = RingSigApi::LinkableRingSig::ring_verify(signature, message, paramInfo); + gasPricer->appendOperation(InterfaceOpcode::GroupSigVerify); + } + catch (std::exception& error) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("RingSigPrecompiled") << LOG_DESC(error.what()) + << LOG_KV("signature", signature) << LOG_KV("message", message) + << LOG_KV("paramInfo", paramInfo); + result = false; + } + catch (std::string& error) + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("RingSigPrecompiled") << LOG_DESC(error) + << LOG_KV("signature", signature) << LOG_KV("message", message) + << LOG_KV("paramInfo", paramInfo); + result = false; + } + int32_t retCode = CODE_SUCCESS; + if (!result) + { + retCode = VERIFY_RING_SIG_FAILED; + } + _callParameters->setExecResult(codec->encode(retCode, result)); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("RingSigPrecompiled") + << LOG_DESC("call undefined function") << LOG_KV("func", func); + _callParameters->setExecResult(codec->encode((int32_t)CODE_UNKNOW_FUNCTION_CALL, false)); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/RingSigPrecompiled.h b/bcos-executor/src/precompiled/extension/RingSigPrecompiled.h new file mode 100644 index 0000000..0c66902 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/RingSigPrecompiled.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RingSigPrecompiled.h + * @author: yklu + * @date 2022-04-12 + */ +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" + +namespace bcos +{ +namespace precompiled +{ +class RingSigPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + RingSigPrecompiled(crypto::Hash::Ptr _hashImpl); + virtual ~RingSigPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; +}; +} // namespace precompiled +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.cpp b/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.cpp new file mode 100644 index 0000000..8d2fd2a --- /dev/null +++ b/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.cpp @@ -0,0 +1,300 @@ +/** + * copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CpuHeavyPrecompiled.cpp + * @author: wenlinli + * @date 2021-03-17 + */ + +#include "SmallBankPrecompiled.h" +#include "../../executive/BlockContext.h" +#include "../TableManagerPrecompiled.h" +#include "DagTransferPrecompiled.h" +#include "bcos-executor/src/precompiled/common/PrecompiledResult.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include + + +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::ledger; + + +const char* const SMALL_BANK_METHOD_ADD_STR_UINT = "updateBalance(string,uint256)"; +const char* const SMALL_BANK_METHOD_TRS_STR2_UINT = "sendPayment(string,string,uint256)"; +const size_t SMALLBANK_TRANSFER_FIELD_BALANCE = 0; + +SmallBankPrecompiled::SmallBankPrecompiled(crypto::Hash::Ptr _hashImpl, std::string _tableName) + : Precompiled(_hashImpl), m_tableName(_tableName) +{ + name2Selector[SMALL_BANK_METHOD_ADD_STR_UINT] = + getFuncSelector(SMALL_BANK_METHOD_ADD_STR_UINT, _hashImpl); + name2Selector[SMALL_BANK_METHOD_TRS_STR2_UINT] = + getFuncSelector(SMALL_BANK_METHOD_TRS_STR2_UINT, _hashImpl); +} + + +std::vector SmallBankPrecompiled::getParallelTag(bytesConstRef _param, bool _isWasm) +{ + // parse function name + uint32_t func = getParamFunc(_param); + bytesConstRef data = getParamData(_param); + std::vector results; + auto codec = CodecWrapper(m_hashImpl, _isWasm); + + // user_name user_balance 2 fields in table, the key of table is user_name field + if (func == name2Selector[SMALL_BANK_METHOD_ADD_STR_UINT]) + { // updateBalance(string,uint256) + std::string user; + u256 amount; + codec.decode(data, user, amount); + // if params is invalid , parallel process can be done + if (!user.empty()) + { + results.push_back(user); + } + } + + else if (func == name2Selector[SMALL_BANK_METHOD_TRS_STR2_UINT]) + { + // sendPayment(string,string,uint256) + std::string fromUser, toUser; + u256 amount; + codec.decode(data, fromUser, toUser, amount); + // if params is invalid , parallel process can be done + if (!fromUser.empty() && !toUser.empty()) + { + results.push_back(fromUser); + results.push_back(toUser); + } + } + // std::cout << "SmallBank getParallelTag done." << std::endl; + return results; +} + +std::shared_ptr SmallBankPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + PRECOMPILED_LOG(TRACE) << LOG_BADGE("SmallBankPrecompiled") << LOG_DESC("call") + << LOG_KV("param", toHexString(_callParameters->input())); + // parse function name + uint32_t func = getParamFunc(_callParameters->input()); + bytesConstRef data = _callParameters->params(); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + + auto table = _executive->storage().openTable(m_tableName); + gasPricer->appendOperation(InterfaceOpcode::OpenTable); + if (!table) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("SmallBankPrecompiled") << LOG_DESC("call") + << LOG_DESC("open table failed.") + << LOG_KV("tableName", m_tableName); + auto blockContext = _executive->blockContext().lock(); + getErrorCodeOut(_callParameters->mutableExecResult(), CODE_TABLE_OPEN_ERROR, + CodecWrapper(blockContext->hashHandler(), blockContext->isWasm())); + return _callParameters; + } + + // user_name user_balance 2 fields in table, the key of table is user_name field + if (func == name2Selector[SMALL_BANK_METHOD_ADD_STR_UINT]) + { // updateBalance(string,uint256) + updateBalanceCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else if (func == name2Selector[SMALL_BANK_METHOD_TRS_STR2_UINT]) + { // sendPayment(string,string,uint256) + sendPaymentCall( + _executive, data, _callParameters->m_origin, _callParameters->mutableExecResult()); + } + else + { + PRECOMPILED_LOG(INFO) << LOG_BADGE("SmallBankPrecompiled") << LOG_DESC("error func") + << LOG_KV("func", func); + } + + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + _callParameters->setExecResult(bytes()); + // std::cout << "SmallBank Precompiled call done." << std::endl; + return _callParameters; +} + +void SmallBankPrecompiled::updateBalanceCall( + std::shared_ptr _executive, bytesConstRef _data, + std::string const&, bytes& _out) +{ + // userAdd(string,uint256) + std::string user; + u256 amount; + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + codec.decode(_data, user, amount); + + int ret; + std::string strErrorMsg; + do + { + if (user.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + auto table = _executive->storage().openTable(m_tableName); + // std::cout << "SmallBank ---------- updateBalancecall tableName is " << m_tableName << + // std::endl; + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + auto entry = table->getRow(user); + if (entry) + { + strErrorMsg = "user already exist"; + ret = CODE_INVALID_USER_ALREADY_EXIST; + break; + } + + // user not exist, insert user into it. + auto newEntry = table->newEntry(); + newEntry.setField(SMALLBANK_TRANSFER_FIELD_BALANCE, amount.str()); + // std::cout << "SmallBank ---------- user message has insert tableName: " << m_tableName + // << ", userName is" << user << ", balance is " << amount.str() << std::endl; + table->setRow(user, newEntry); + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("SmallBankPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} + +void SmallBankPrecompiled::sendPaymentCall( + std::shared_ptr _executive, bytesConstRef _data, + std::string const&, bytes& _out) +{ + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + std::string fromUser, toUser; + u256 amount; + codec.decode(_data, fromUser, toUser, amount); + + u256 fromUserBalance, newFromUserBalance; + u256 toUserBalance, newToUserBalance; + + std::string strErrorMsg; + int ret; + do + { + // parameters check + if (fromUser.empty() || toUser.empty()) + { + strErrorMsg = "invalid user name"; + ret = CODE_INVALID_USER_NAME; + break; + } + if (amount == 0) + { + strErrorMsg = "invalid amount"; + ret = CODE_INVALID_AMOUNT; + break; + } + // transfer self, do nothing + if (fromUser == toUser) + { + ret = 0; + break; + } + auto table = _executive->storage().openTable(m_tableName); + // std::cout << "SmallBank ---------- sendPaymentCall tableName is " << m_tableName << + // std::endl; + if (!table) + { + strErrorMsg = "openTable failed."; + ret = CODE_INVALID_OPENTABLE_FAILED; + break; + } + + auto entry = table->getRow(fromUser); + if (!entry) + { + strErrorMsg = "from user not exist"; + ret = CODE_INVALID_USER_NOT_EXIST; + break; + } + + fromUserBalance = u256(entry->getField(SMALLBANK_TRANSFER_FIELD_BALANCE)); + if (fromUserBalance < amount) + { + strErrorMsg = "from user insufficient balance"; + ret = CODE_INVALID_INSUFFICIENT_BALANCE; + break; + } + + entry = table->getRow(toUser); + if (!entry) + { + // If to user not exist, add it first. + auto newEntry = table->newEntry(); + newEntry.setField(SMALLBANK_TRANSFER_FIELD_BALANCE, u256(0).str()); + table->setRow(toUser, newEntry); + toUserBalance = 0; + } + else + { + toUserBalance = u256(entry->getField(SMALLBANK_TRANSFER_FIELD_BALANCE)); + } + + // overflow check + if (toUserBalance + amount < toUserBalance) + { + strErrorMsg = "to user balance overflow."; + ret = CODE_INVALID_BALANCE_OVERFLOW; + break; + } + + newFromUserBalance = fromUserBalance - amount; + newToUserBalance = toUserBalance + amount; + + // std::cout << "SmallBank ---------- user transfer message has insert tableName: " << + // m_tableName << ", fromUser is" << fromUser << ",fromUserBalance is" << fromUserBalance + // <<", newFromUserBalance is "<< newFromUserBalance << ", toUser is" << toUser << ", + // toUserBalance is" << toUserBalance << ", newToUserBalance is "<< newToUserBalance << + // std::endl; update fromUser balance info. + entry = table->newEntry(); + entry->setField(SMALLBANK_TRANSFER_FIELD_BALANCE, newFromUserBalance.str()); + table->setRow(fromUser, *entry); + + // update toUser balance info. + entry = table->newEntry(); + entry->setField(SMALLBANK_TRANSFER_FIELD_BALANCE, newToUserBalance.str()); + table->setRow(toUser, *entry); + // end with success + ret = 0; + } while (false); + if (!strErrorMsg.empty()) + { + PRECOMPILED_LOG(DEBUG) << LOG_BADGE("SmallBankPrecompiled") << LOG_DESC(strErrorMsg) + << LOG_KV("code", ret); + } + _out = codec.encode(u256(ret)); +} diff --git a/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.h b/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.h new file mode 100644 index 0000000..ac4e1bc --- /dev/null +++ b/bcos-executor/src/precompiled/extension/SmallBankPrecompiled.h @@ -0,0 +1,109 @@ +/** + * copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SmallBankPrecompiled.h + * @author: wenlinli + * @date 2022-03-17 + */ + +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include + +namespace bcos +{ +namespace precompiled +{ +class SmallBankPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + + SmallBankPrecompiled(crypto::Hash::Ptr _hashImpl, std::string _tableName); + + virtual ~SmallBankPrecompiled(){}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +public: + // is this precompiled need parallel processing, default false. + bool isParallelPrecompiled() override { return true; } + std::vector getParallelTag(bytesConstRef param, bool _isWasm) override; + + static inline std::string getAddress(unsigned int id) + { + u160 address = u160(SMALLBANK_START_ADDRESS); + address += id; + h160 addressBytes = h160(address); + return addressBytes.hex(); + } + + static void createTable(std::shared_ptr storageInterface) + { + for (int id = 0; id < SMALLBANK_CONTRACT_NUM; id++) + { + std::string _tableName = std::to_string(id); + std::string path = std::string{bcos::ledger::SMALLBANK_TRANSFER}; + _tableName = path + _tableName; + // create table first + std::promise createPromise; + storageInterface->asyncCreateTable(_tableName, SYS_VALUE_FIELDS, + [&createPromise](Error::UniquePtr _e, std::optional) { + createPromise.set_value(std::move(_e)); + }); + Error::UniquePtr _e = createPromise.get_future().get(); + + BCOS_LOG(DEBUG) << LOG_BADGE("SmallBank") << "Create SmallBankPrecompiled Table" + << LOG_KV("_tableName", _tableName); + } + } + + static void registerPrecompiled( + std::shared_ptr>> + registeredMap, + crypto::Hash::Ptr _hashImpl) + { + for (int id = 0; id < SMALLBANK_CONTRACT_NUM; id++) + { + std::string _tableName = std::to_string(id); + std::string path = std::string{bcos::ledger::SMALLBANK_TRANSFER}; + _tableName = path + _tableName; + std::string&& address = getAddress(id); + registeredMap->insert({std::move(address), + std::make_shared(_hashImpl, _tableName)}); + } + BCOS_LOG(TRACE) << LOG_BADGE("SmallBank") << "Register SmallBankPrecompiled complete" + << LOG_KV("addressFrom", getAddress(0)) + << LOG_KV("addressTo", getAddress(SMALLBANK_CONTRACT_NUM - 1)) + << LOG_KV("tableNameBase", bcos::ledger::SMALLBANK_TRANSFER); + } + +public: + void updateBalanceCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); + void sendPaymentCall(std::shared_ptr _executive, + bytesConstRef _data, std::string const& _origin, bytes& _out); + +private: + std::string m_tableName; +}; +} // namespace precompiled +} // namespace bcos diff --git a/bcos-executor/src/precompiled/extension/UserPrecompiled.h b/bcos-executor/src/precompiled/extension/UserPrecompiled.h new file mode 100644 index 0000000..7d85930 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/UserPrecompiled.h @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file UserPrecompiled.h + * @author: kyonRay + * @date 2021-05-30 + */ +#pragma once +#include "CpuHeavyPrecompiled.h" +#include "DagTransferPrecompiled.h" +#include "HelloWorldPrecompiled.h" +#include "PermissionPrecompiledInterface.h" +#include "SmallBankPrecompiled.h" + +namespace bcos::precompiled +{ +const char DEFAULT_PERMISSION_ADDRESS[] = "0000000000000000000000000000000000001005"; +// FIXME: 1005 is default, use static configurable address for more powerful permission +} // namespace bcos::precompiled diff --git a/bcos-executor/src/precompiled/extension/ZkpPrecompiled.cpp b/bcos-executor/src/precompiled/extension/ZkpPrecompiled.cpp new file mode 100644 index 0000000..a51ab76 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/ZkpPrecompiled.cpp @@ -0,0 +1,303 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ZkpPrecompiled.cpp + * @author: yujiechen + * @date 2022-07-18 + */ +#include "ZkpPrecompiled.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +// wedpr_verify_either_equality_relationship_proof(c1_point, c2_point, c3_point, proof, c_basepoint, +// blinding_basepoint) +const char* const VERIFY_EITHER_EQUALITY_PROOF_STR = + "verifyEitherEqualityProof(bytes,bytes,bytes,bytes,bytes,bytes)"; +// wedpr_verify_knowledge_proof(c_point, proof, c_basepoint, blinding_basepoint) +const char* const VERIFY_KNOWLEDGE_PROOF_STR = "verifyKnowledgeProof(bytes,bytes,bytes,bytes)"; +// wedpr_verify_format_proof(c1_point, c2_point, proof, c1_basepoint, c2_basepoint, +// blinding_basepoint) +const char* const VERIFY_FORMAT_PROOF = "verifyFormatProof(bytes,bytes,bytes,bytes,bytes,bytes)"; +// wedpr_verify_sum_relationship(c1_point, c2_point, c3_point, proof, value_basepoint, +// blinding_basepoint) +const char* const VERIFY_SUM_PROOF = "verifySumProof(bytes,bytes,bytes,bytes,bytes,bytes)"; +// wedpr_verify_product_relationship(c1_point, c2_point, c3_point, proof, value_basepoint, +// blinding_basepoint) +const char* const VERIFY_PRODUCT_PROOF = + "verifyProductProof(bytes, bytes, bytes, bytes, bytes, bytes)"; +// wedpr_verify_equality_relationship_proof(c1_point, c2_point, proof, basepoint1, basepoint2) +const char* const VERIFY_EQUALITY_PROOF = "verifyEqualityProof(bytes,bytes,bytes,bytes,bytes)"; +// wedpr_aggregate_ristretto_point(*point_sum, *point_share,result); +const char* const AGGREGATE_POINT = "aggregatePoint(bytes,bytes)"; + +ZkpPrecompiled::ZkpPrecompiled(bcos::crypto::Hash::Ptr _hashImpl) : Precompiled(_hashImpl) +{ + m_zkpImpl = std::make_shared(); + + name2Selector[VERIFY_EITHER_EQUALITY_PROOF_STR] = + getFuncSelector(VERIFY_EITHER_EQUALITY_PROOF_STR, _hashImpl); + name2Selector[VERIFY_KNOWLEDGE_PROOF_STR] = + getFuncSelector(VERIFY_KNOWLEDGE_PROOF_STR, _hashImpl); + name2Selector[VERIFY_FORMAT_PROOF] = getFuncSelector(VERIFY_FORMAT_PROOF, _hashImpl); + name2Selector[VERIFY_SUM_PROOF] = getFuncSelector(VERIFY_SUM_PROOF, _hashImpl); + name2Selector[VERIFY_PRODUCT_PROOF] = getFuncSelector(VERIFY_PRODUCT_PROOF, _hashImpl); + name2Selector[VERIFY_EQUALITY_PROOF] = getFuncSelector(VERIFY_EQUALITY_PROOF, _hashImpl); + name2Selector[AGGREGATE_POINT] = getFuncSelector(AGGREGATE_POINT, _hashImpl); +} +std::shared_ptr ZkpPrecompiled::call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) +{ + auto funcSelector = getParamFunc(_callParameters->input()); + auto paramData = _callParameters->params(); + auto blockContext = _executive->blockContext().lock(); + auto codec = CodecWrapper(blockContext->hashHandler(), blockContext->isWasm()); + auto gasPricer = m_precompiledGasFactory->createPrecompiledGas(); + gasPricer->setMemUsed(paramData.size()); + + if (name2Selector[VERIFY_EITHER_EQUALITY_PROOF_STR] == funcSelector) + { + verifyEitherEqualityProof(codec, paramData, _callParameters); + } + else if (name2Selector[VERIFY_KNOWLEDGE_PROOF_STR] == funcSelector) + { + // verifyKnowledgeProof + verifyKnowledgeProof(codec, paramData, _callParameters); + } + else if (name2Selector[VERIFY_FORMAT_PROOF] == funcSelector) + { + // verifyFormatProof + verifyFormatProof(codec, paramData, _callParameters); + } + else if (name2Selector[VERIFY_SUM_PROOF] == funcSelector) + { + // verifySumProof + verifySumProof(codec, paramData, _callParameters); + } + else if (name2Selector[VERIFY_PRODUCT_PROOF] == funcSelector) + { + // verifyProductProof + verifyProductProof(codec, paramData, _callParameters); + } + else if (name2Selector[VERIFY_EQUALITY_PROOF] == funcSelector) + { + // verifyEqualityProof + verifyEqualityProof(codec, paramData, _callParameters); + } + else if (name2Selector[AGGREGATE_POINT] == funcSelector) + { + // aggregateRistrettoPoint + aggregateRistrettoPoint(codec, paramData, _callParameters); + } + else + { + // no defined function + PRECOMPILED_LOG(INFO) << LOG_DESC("ZkpPrecompiled: undefined method") + << LOG_KV("funcSelector", std::to_string(funcSelector)); + BOOST_THROW_EXCEPTION( + bcos::protocol::PrecompiledError("ZkpPrecompiled call undefined function!")); + } + gasPricer->updateMemUsed(_callParameters->m_execResult.size()); + _callParameters->setGasLeft(_callParameters->m_gasLeft - gasPricer->calTotalGas()); + return _callParameters; +} + +// verifyEitherEqualityProof +void ZkpPrecompiled::verifyEitherEqualityProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes c1Point; + bytes c2Point; + bytes c3Point; + bytes equalityProof; + bytes basePoint; + bytes blindingBasePoint; + _codec.decode( + _paramData, c1Point, c2Point, c3Point, equalityProof, basePoint, blindingBasePoint); + verifyResult = m_zkpImpl->verifyEitherEqualityProof( + c1Point, c2Point, c3Point, equalityProof, basePoint, blindingBasePoint); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyEitherEqualityProof") + << LOG_KV("c1", toHex(c1Point)) << LOG_KV("c2", toHex(c2Point)) + << LOG_KV("c3", toHex(c3Point)) + << LOG_KV("proof", toHex(equalityProof)) + << LOG_KV("basePoint", toHex(basePoint)) + << LOG_KV("blindingBasePoint", toHex(blindingBasePoint)); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifyEitherEqualityProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyEitherEqualityProof: ") << verifyResult; +} + +void ZkpPrecompiled::verifyKnowledgeProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes pointData; + bytes knowledgeProof; + bytes basePoint; + bytes blindingBasePoint; + _codec.decode(_paramData, pointData, knowledgeProof, basePoint, blindingBasePoint); + verifyResult = m_zkpImpl->verifyKnowledgeProof( + pointData, knowledgeProof, basePoint, blindingBasePoint); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifyKnowledgeProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyKnowledgeProof: ") << verifyResult; +} + +void ZkpPrecompiled::verifyFormatProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes c1Point; + bytes c2Point; + bytes formatProof; + bytes c1BasePoint; + bytes c2BasePoint; + bytes blindingBasePoint; + _codec.decode( + _paramData, c1Point, c2Point, formatProof, c1BasePoint, c2BasePoint, blindingBasePoint); + verifyResult = m_zkpImpl->verifyFormatProof( + c1Point, c2Point, formatProof, c1BasePoint, c2BasePoint, blindingBasePoint); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyFormatProof") << LOG_KV("c1", toHex(c1Point)) + << LOG_KV("c2", toHex(c2Point)) + << LOG_KV("proof", toHex(formatProof)) + << LOG_KV("c1BasePoint", toHex(c1BasePoint)) + << LOG_KV("c2BasePoint", toHex(c2BasePoint)) + << LOG_KV("blindingBasePoint", toHex(c2BasePoint)); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifyFormatProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyFormatProof: ") << verifyResult; +} + +void ZkpPrecompiled::verifySumProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes c1Point; + bytes c2Point; + bytes c3Point; + bytes arithmeticProof; + bytes valueBasePoint; + bytes blindingBasePoint; + _codec.decode(_paramData, c1Point, c2Point, c3Point, arithmeticProof, valueBasePoint, + blindingBasePoint); + verifyResult = m_zkpImpl->verifySumProof( + c1Point, c2Point, c3Point, arithmeticProof, valueBasePoint, blindingBasePoint); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifySumProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifySumProof: ") << verifyResult; +} + +void ZkpPrecompiled::verifyProductProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes c1Point; + bytes c2Point; + bytes c3Point; + bytes arithmeticProof; + bytes valueBasePoint; + bytes blindingBasePoint; + _codec.decode(_paramData, c1Point, c2Point, c3Point, arithmeticProof, valueBasePoint, + blindingBasePoint); + verifyResult = m_zkpImpl->verifyProductProof( + c1Point, c2Point, c3Point, arithmeticProof, valueBasePoint, blindingBasePoint); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifyProductProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyProductProof: ") << verifyResult; +} + +void ZkpPrecompiled::verifyEqualityProof( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + bool verifyResult = false; + try + { + bytes c1Point; + bytes c2Point; + bytes equalityProof; + bytes basePoint1; + bytes basePoint2; + _codec.decode(_paramData, c1Point, c2Point, equalityProof, basePoint1, basePoint2); + verifyResult = + m_zkpImpl->verifyEqualityProof(c1Point, c2Point, equalityProof, basePoint1, basePoint2); + } + catch (std::exception const& e) + { + PRECOMPILED_LOG(DEBUG) << LOG_DESC("verifyEqualityProof exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(verifyResult)); + PRECOMPILED_LOG(TRACE) << LOG_DESC("verifyEqualityProof: ") << verifyResult; +} + +void ZkpPrecompiled::aggregateRistrettoPoint( + CodecWrapper const& _codec, bytesConstRef _paramData, PrecompiledExecResult::Ptr _callResult) +{ + int retCode = 0; + bytes result; + try + { + bytes sumPoint; + bytes pointShare; + _codec.decode(_paramData, sumPoint, pointShare); + result = m_zkpImpl->aggregateRistrettoPoint(sumPoint, pointShare); + } + catch (std::exception const& e) + { + retCode = -1; + PRECOMPILED_LOG(DEBUG) << LOG_DESC("aggregateRistrettoPoint exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + _callResult->setExecResult(_codec.encode(retCode, result)); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/extension/ZkpPrecompiled.h b/bcos-executor/src/precompiled/extension/ZkpPrecompiled.h new file mode 100644 index 0000000..6a6b991 --- /dev/null +++ b/bcos-executor/src/precompiled/extension/ZkpPrecompiled.h @@ -0,0 +1,82 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ZkpPrecompiled.h + * @author: yujiechen + * @date 2022-07-18 + */ + +#pragma once + +#include "../../vm/Precompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include + +namespace bcos +{ +namespace precompiled +{ +#if 0 +contract ZkpPrecompiled +{ + function verifyEitherEqualityProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory c_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyKnowledgeProof(bytes memory c_point, bytes memory proof, bytes memory c_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyFormatProof(bytes memory c1_point, bytes memory c2_point, bytes memory proof, bytes memory c1_basepoint, bytes memory c2_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifySumProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory value_basepoint, bytes memory blinding_basepoint)public virtual view returns(bool); + function verifyProductProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory value_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyEqualityProof(bytes memory c1_point, bytes memory c2_point, bytes memory proof, bytes memory basepoint1, bytes memory basepoint2)public virtual view returns(bool); + function aggregatePoint(bytes memory point1, bytes memory point2) public virtual view returns(int, bytes memory); +} +#endif + +class ZkpPrecompiled : public bcos::precompiled::Precompiled +{ +public: + using Ptr = std::shared_ptr; + ZkpPrecompiled(bcos::crypto::Hash::Ptr _hashImpl); + ~ZkpPrecompiled() override{}; + + std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) override; + +private: + void verifyEitherEqualityProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + void verifyKnowledgeProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + void verifyFormatProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + void verifySumProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + void verifyProductProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + + void verifyEqualityProof(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + + void aggregateRistrettoPoint(CodecWrapper const& _codec, bytesConstRef _paramData, + PrecompiledExecResult::Ptr _callResult); + +private: + bcos::crypto::DiscreteLogarithmZkp::Ptr m_zkpImpl; +}; +} // namespace precompiled +} // namespace bcos diff --git a/bcos-executor/src/precompiled/solidity/Account.sol b/bcos-executor/src/precompiled/solidity/Account.sol new file mode 100644 index 0000000..7091275 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/Account.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; + +enum AccountStatus{ + normal, + freeze, + abolish +} + +abstract contract AccountManager { + // 设置账户状态,只有治理委员可以调用,0 - normal, others - abnormal, 如果账户不存在会先创建 + function setAccountStatus(address addr, AccountStatus status) public virtual returns (int32); + // 任何用户都可以调用 + function getAccountStatus(address addr) public view virtual returns (AccountStatus); +} + +abstract contract Account { + // 设置账户状态,只有AccountManager可以调用, 0 - normal, others - abnormal + function setAccountStatus(AccountStatus status) public virtual returns (int32); + // 任何用户都可以调用 + function getAccountStatus() public view virtual returns (AccountStatus); +} diff --git a/bcos-executor/src/precompiled/solidity/BfsPrecompiled.sol b/bcos-executor/src/precompiled/solidity/BfsPrecompiled.sol new file mode 100644 index 0000000..a4932e3 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/BfsPrecompiled.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.6.0; +pragma experimental ABIEncoderV2; + + struct BfsInfo { + string file_name; + string file_type; + string[] ext; + } + +abstract contract BfsPrecompiled { + // @return return BfsInfo at most 500, if you want more, try list with paging interface + function list(string memory absolutePath) public view returns (int32, BfsInfo[] memory); + // @return int, >=0 -> BfsInfo left, <0 -> errorCode + function list(string memory absolutePath, uint offset, uint limit) public view returns (int, BfsInfo[] memory); + + function mkdir(string memory absolutePath) public returns (int32); + + function link(string memory absolutePath, address _address, string memory _abi) public returns (int); + // for cns compatibility + function link(string memory name, string memory version, address _address, string memory _abi) public returns (int32); + + function readlink(string memory absolutePath) public view returns (address); + + function touch(string memory absolutePath, string memory fileType) public returns (int32); + + function rebuildBfs() public returns (int); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/solidity/Cast.sol b/bcos-executor/src/precompiled/solidity/Cast.sol new file mode 100644 index 0000000..892ef20 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/Cast.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; + +abstract contract Cast { + function stringToS256(string memory) public virtual view returns (int256); + function stringToS64(string memory) public virtual view returns (int64); + function stringToU256(string memory) public virtual view returns (uint256); + function stringToAddr(string memory) public virtual view returns (address); + function stringToBytes32(string memory) public virtual view returns (bytes32); + + function s256ToString(int256) public virtual view returns (string memory); + function s64ToString(int64) public virtual view returns (string memory); + function u256ToString(uint256) public virtual view returns (string memory); + function addrToString(address) public virtual view returns (string memory); + function bytes32ToString(bytes32) public virtual view returns (string memory); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/solidity/ConsensusPrecompiled.sol b/bcos-executor/src/precompiled/solidity/ConsensusPrecompiled.sol new file mode 100644 index 0000000..a01b9d9 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/ConsensusPrecompiled.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.6.0; + +contract ConsensusPrecompiled { + function addSealer(string memory,uint256) public returns (int32){} + function addObserver(string memory) public returns (int32){} + function remove(string memory) public returns (int32){} + function setWeight(string memory,uint256) public returns (int32){} +} diff --git a/bcos-executor/src/precompiled/solidity/ContractAuthPrecompiled.sol b/bcos-executor/src/precompiled/solidity/ContractAuthPrecompiled.sol new file mode 100644 index 0000000..1fe0a67 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/ContractAuthPrecompiled.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; + +enum Status{ + normal, + freeze, + abolish +} + +abstract contract ContractAuthPrecompiled { + function getAdmin(address path) public view virtual returns (address); + function resetAdmin(address path, address admin) public virtual returns (int256); + function setMethodAuthType(address path, bytes4 func, uint8 authType) public virtual returns (int256); + function openMethodAuth(address path, bytes4 func, address account) public virtual returns (int256); + function closeMethodAuth(address path, bytes4 func, address account) public virtual returns (int256); + function checkMethodAuth(address path, bytes4 func, address account) public view virtual returns (bool); + function getMethodAuth(address path, bytes4 func) public view virtual returns (uint8,string[] memory,string[] memory); + function setContractStatus(address _address, bool isFreeze) public virtual returns(int); + function setContractStatus(address _address, Status _status) public virtual returns(int); + function contractAvailable(address _address) public view virtual returns (bool); + + function deployType() public view virtual returns (uint256); + function setDeployAuthType(uint8 _type) public virtual returns (int256); + function openDeployAuth(address account) public virtual returns (int256); + function closeDeployAuth(address account) public virtual returns (int256); + function hasDeployAuth(address account) public view virtual returns (bool); +} diff --git a/bcos-executor/src/precompiled/solidity/Crypto.sol b/bcos-executor/src/precompiled/solidity/Crypto.sol new file mode 100644 index 0000000..5de8c7b --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/Crypto.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; + +abstract contract Crypto +{ + function sm3(bytes memory data) public view returns(bytes32){} + function keccak256Hash(bytes memory data) public view returns(bytes32){} + function sm2Verify(bytes32 message, bytes memory publicKey, bytes32 r, bytes32 s) public view returns(bool, address){} + function curve25519VRFVerify(bytes memory message, bytes memory publicKey, bytes memory proof) public view returns(bool, uint256){} +} diff --git a/bcos-executor/src/precompiled/solidity/EntryWrapper.sol b/bcos-executor/src/precompiled/solidity/EntryWrapper.sol new file mode 100644 index 0000000..19fac25 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/EntryWrapper.sol @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; +import "./Cast.sol"; + +// 记录,用于select和insert +struct Entry { + string key; + string[] fields; // 考虑2.0的Entry接口,临时Precompiled的问题,考虑加工具类接口 +} + +contract EntryWrapper { + Cast constant cast = Cast(address(0x100f)); + Entry entry; + constructor(Entry memory _entry) public { + entry = _entry; + } + function setEntry(Entry memory _entry) public { + entry = _entry; + } + function getEntry() public view returns(Entry memory) { + return entry; + } + function fieldSize() public view returns (uint256) { + return entry.fields.length; + } + function getInt(uint256 idx) public view returns (int256) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return cast.stringToS256(entry.fields[idx]); + } + function getUInt(uint256 idx) public view returns (uint256) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return cast.stringToU256(entry.fields[idx]); + } + function getAddress(uint256 idx) public view returns (address) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return cast.stringToAddr(entry.fields[idx]); + } + function getBytes64(uint256 idx) public view returns (bytes1[64] memory) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return bytesToBytes64(bytes(entry.fields[idx])); + } + function getBytes32(uint256 idx) public view returns (bytes32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return cast.stringToBytes32(entry.fields[idx]); + } + function getString(uint256 idx) public view returns (string memory) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + return entry.fields[idx]; + } + function set(uint256 idx, int256 value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = cast.s256ToString(value); + return 0; + } + function set(uint256 idx, uint256 value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = cast.u256ToString(value); + return 0; + } + function set(uint256 idx, string memory value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = value; + return 0; + } + function set(uint256 idx, address value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = cast.addrToString(value); + return 0; + } + function set(uint256 idx, bytes32 value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = cast.bytes32ToString(value); + return 0; + } + function set(uint256 idx, bytes1[64] memory value) public returns(int32) { + require(idx >= 0 && idx < fieldSize(), "Index out of range!"); + entry.fields[idx] = string(bytes64ToBytes(value)); + return 0; + } + function setKey(string memory value) public { + entry.key = value; + } + function getKey() public view returns (string memory) { + return entry.key; + } + function bytes64ToBytes(bytes1[64] memory src) private pure returns(bytes memory) { + bytes memory dst = new bytes(64); + for(uint32 i = 0; i < 64; i++) { + dst[i] = src[i][0]; + } + return dst; + } + function bytesToBytes64(bytes memory src) private pure returns(bytes1[64] memory) { + bytes1[64] memory dst; + for(uint32 i = 0; i < 64; i++) { + dst[i] = src[i]; + } + return dst; + } +} diff --git a/bcos-executor/src/precompiled/solidity/GroupSigPrecompiled.sol b/bcos-executor/src/precompiled/solidity/GroupSigPrecompiled.sol new file mode 100644 index 0000000..a80e899 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/GroupSigPrecompiled.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; + +abstract contract GroupSigPrecompiled { + function groupSigVerify(string memory, string memory, string memory, string memory) public view returns (int32,bool); +} diff --git a/bcos-executor/src/precompiled/solidity/RingSigPrecompiled.sol b/bcos-executor/src/precompiled/solidity/RingSigPrecompiled.sol new file mode 100644 index 0000000..a3c1ea9 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/RingSigPrecompiled.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; + +abstract contract RingSigPrecompiled { + function ringSigVerify(string memory, string memory, string memory) public view returns (int32,bool); +} diff --git a/bcos-executor/src/precompiled/solidity/SystemConfigPrecompiled.sol b/bcos-executor/src/precompiled/solidity/SystemConfigPrecompiled.sol new file mode 100644 index 0000000..9168fc7 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/SystemConfigPrecompiled.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.6.0; + +contract SystemConfigPrecompiled +{ + function setValueByKey(string memory key, string memory value) public returns(int32){} + function getValueByKey(string memory key) public view returns(string memory,int256){} +} diff --git a/bcos-executor/src/precompiled/solidity/Table.sol b/bcos-executor/src/precompiled/solidity/Table.sol new file mode 100644 index 0000000..1a8c6c9 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/Table.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; +import "./EntryWrapper.sol"; + +// KeyOrder指定Key的排序规则,字典序和数字序,如果指定为数字序,key只能为数字 +enum KeyOrder {Lexicographic, Numerical} +struct TableInfo { + KeyOrder keyOrder; + string keyColumn; + string[] valueColumns; +} + +// 更新字段,用于update +struct UpdateField { + string columnName; + // 考虑工具类 + string value; +} + +// 筛选条件,大于、大于等于、小于、小于等于 +enum ConditionOP {GT, GE, LT, LE, EQ, NE, STARTS_WITH, ENDS_WITH, CONTAINS} +struct Condition { + ConditionOP op; + string field; + string value; +} + +// 数量限制 +struct Limit { + uint32 offset; + // count limit max is 500 + uint32 count; +} + +// 表管理合约,是静态Precompiled,有固定的合约地址 +abstract contract TableManager { + // 创建表,传入TableInfo + function createTable(string memory path, TableInfo memory tableInfo) public virtual returns (int32); + + // 创建KV表,传入key和value字段名 + function createKVTable(string memory tableName, string memory keyField, string memory valueField) public virtual returns (int32); + + // 只提供给Solidity合约调用时使用 + function openTable(string memory path) public view virtual returns (address); + + // 变更表字段 + // 只能新增字段,不能删除字段,新增的字段默认值为空,不能与原有字段重复 + function appendColumns(string memory path, string[] memory newColumns) public virtual returns (int32); + + // 获取表信息 + function descWithKeyOrder(string memory tableName) public view virtual returns (TableInfo memory); +} + +// 表合约,是动态Precompiled,TableManager创建时指定地址 +abstract contract Table { + // 按key查询entry + function select(string memory key) public virtual view returns (Entry memory); + + // 按条件批量查询entry,condition为空则查询所有记录 + function select(Condition[] memory conditions, Limit memory limit) public virtual view returns (Entry[] memory); + + // 按照条件查询count数据 + function count(Condition[] memory conditions) public virtual view returns (uint32); + + // 插入数据 + function insert(Entry memory entry) public virtual returns (int32); + + // 按key更新entry + function update(string memory key, UpdateField[] memory updateFields) public virtual returns (int32); + + // 按条件批量更新entry,condition为空则更新所有记录 + function update(Condition[] memory conditions, Limit memory limit, UpdateField[] memory updateFields) public virtual returns (int32); + + // 按key删除entry + function remove(string memory key) public virtual returns (int32); + // 按条件批量删除entry,condition为空则删除所有记录 + function remove(Condition[] memory conditions, Limit memory limit) public virtual returns (int32); +} + +abstract contract KVTable { + function get(string memory key) public view virtual returns (bool, string memory); + + function set(string memory key, string memory value) public virtual returns (int32); +} \ No newline at end of file diff --git a/bcos-executor/src/precompiled/solidity/ZkpPrecompiled.sol b/bcos-executor/src/precompiled/solidity/ZkpPrecompiled.sol new file mode 100644 index 0000000..5d3c8e7 --- /dev/null +++ b/bcos-executor/src/precompiled/solidity/ZkpPrecompiled.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; + +abstract contract ZkpPrecompiled +{ + function verifyEitherEqualityProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory c_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyKnowledgeProof(bytes memory c_point, bytes memory proof, bytes memory c_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyFormatProof(bytes memory c1_point, bytes memory c2_point, bytes memory proof, bytes memory c1_basepoint, bytes memory c2_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifySumProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory value_basepoint, bytes memory blinding_basepoint)public virtual view returns(bool); + function verifyProductProof(bytes memory c1_point, bytes memory c2_point, bytes memory c3_point, bytes memory proof, bytes memory value_basepoint, bytes memory blinding_basepoint) public virtual view returns(bool); + function verifyEqualityProof(bytes memory c1_point, bytes memory c2_point, bytes memory proof, bytes memory basepoint1, bytes memory basepoint2)public virtual view returns(bool); + + function aggregatePoint(bytes memory point1, bytes memory point2) public virtual view returns(bool, bytes memory); +} diff --git a/bcos-executor/src/vm/DelegateHostContext.cpp b/bcos-executor/src/vm/DelegateHostContext.cpp new file mode 100644 index 0000000..cbe0f52 --- /dev/null +++ b/bcos-executor/src/vm/DelegateHostContext.cpp @@ -0,0 +1,41 @@ +#include "DelegateHostContext.h" +using namespace bcos; +using namespace bcos::executor; + +DelegateHostContext::DelegateHostContext(CallParameters::UniquePtr callParameters, + std::shared_ptr executive, std::string tableName) + : HostContext(std::move(callParameters), executive, tableName) +{ + if (!getCallParameters()->delegateCall) + { + EXECUTOR_LOG(FATAL) << "Construct a DelegateHostContext using non delegateCall params" + << getCallParameters()->toFullString(); + exit(1); + } + setCode(getCallParameters()->delegateCallCode); + m_delegateCallSender = getCallParameters()->delegateCallSender; +} + +std::optional DelegateHostContext::code() +{ + return m_code; +} + +bool DelegateHostContext::setCode(bytes code) +{ + storage::Entry codeEntry; + codeEntry.importFields({code}); + m_code = codeEntry; + m_codeHash = hashImpl()->hash(code); + return true; +} + +h256 DelegateHostContext::codeHash() +{ + return m_codeHash; +} + +std::string_view DelegateHostContext::caller() const +{ + return m_delegateCallSender; +} \ No newline at end of file diff --git a/bcos-executor/src/vm/DelegateHostContext.h b/bcos-executor/src/vm/DelegateHostContext.h new file mode 100644 index 0000000..c9c700e --- /dev/null +++ b/bcos-executor/src/vm/DelegateHostContext.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief host context for delegateCall + * @file DelegateHostContext.h + * @author: xingqiangbai + * @date: 2022-09-30 + */ +#pragma once +#include "HostContext.h" +#include + +namespace bcos +{ +namespace executor +{ +class DelegateHostContext : public HostContext +{ +public: + DelegateHostContext(CallParameters::UniquePtr callParameters, + std::shared_ptr executive, std::string tableName); + + virtual ~DelegateHostContext() = default; + std::optional code() override; + bool setCode(bytes code) override; + h256 codeHash() override; + + std::string_view caller() const override; + +private: + storage::Entry m_code; + h256 m_codeHash; + std::string m_delegateCallSender; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/vm/EVMHostInterface.cpp b/bcos-executor/src/vm/EVMHostInterface.cpp new file mode 100644 index 0000000..685fd48 --- /dev/null +++ b/bcos-executor/src/vm/EVMHostInterface.cpp @@ -0,0 +1,373 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief host context + * @file EVMHostInterface.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + * @brief host context + * @file EVMHostInterface.cpp + * @author: ancelmo + * @date: 2021-09-13 + */ + +#include "EVMHostInterface.h" +#include "../Common.h" +#include "HostContext.h" +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace bcos +{ +namespace executor +{ +namespace +{ +static_assert(sizeof(Address) == sizeof(evmc_address), "Address types size mismatch"); +static_assert(alignof(Address) == alignof(evmc_address), "Address types alignment mismatch"); +static_assert(sizeof(h256) == sizeof(evmc_bytes32), "Hash types size mismatch"); +static_assert(alignof(h256) == alignof(evmc_bytes32), "Hash types alignment mismatch"); + +bool accountExists(evmc_host_context* _context, const evmc_address* _addr) noexcept +{ + auto& hostContext = static_cast(*_context); + auto addr = fromEvmC(*_addr); + return hostContext.exists(addr); +} + +evmc_bytes32 getStorage( + evmc_host_context* context, [[maybe_unused]] const evmc_address* addr, const evmc_bytes32* key) +{ + auto& hostContext = static_cast(*context); + + // programming assert for debug + assert(fromEvmC(*addr) == boost::algorithm::unhex(std::string(hostContext.myAddress()))); + + return hostContext.store(key); +} + +evmc_storage_status setStorage(evmc_host_context* context, + [[maybe_unused]] const evmc_address* addr, const evmc_bytes32* key, const evmc_bytes32* value) +{ + auto& hostContext = static_cast(*context); + + assert(fromEvmC(*addr) == boost::algorithm::unhex(std::string(hostContext.myAddress()))); + // TODO: use evmc_storage_status 5-8 + auto status = EVMC_STORAGE_MODIFIED; + if (value == 0) // TODO: Should use 32 bytes 0 + { + status = EVMC_STORAGE_DELETED; + hostContext.sub().refunds += hostContext.vmSchedule().sstoreRefundGas; + } + hostContext.setStore(key, value); // Interface uses native endianness + return status; +} + +evmc_bytes32 getBalance(evmc_host_context* _context, const evmc_address* _addr) noexcept +{ + // always return 0 + (void)_context; + (void)_addr; + return toEvmC(h256(0)); +} + +size_t getCodeSize(evmc_host_context* _context, const evmc_address* _addr) +{ + auto& hostContext = static_cast(*_context); + return hostContext.codeSizeAt(fromEvmC(*_addr)); +} + +evmc_bytes32 getCodeHash(evmc_host_context* _context, const evmc_address* _addr) +{ + auto& hostContext = static_cast(*_context); + return toEvmC(hostContext.codeHashAt(fromEvmC(*_addr))); +} + +/** + * @brief : copy code between [_codeOffset, _codeOffset + _bufferSize] to + * bufferData if _codeOffset is larger than code length, then return 0; if + * _codeOffset + _bufferSize is larger than the end of the code, than only copy + * [_codeOffset, _codeEnd] + * @param _context : evm context, including to myAddress, caller, gas, origin, + * value, etc. + * @param _addr: the evmc-address of the code + * @param _codeOffset: the offset begin to copy code + * @param _bufferData : buffer store the copied code + * @param _bufferSize : code size to copy + * @return size_t : return copied code size(in byte) + */ +size_t copyCode(evmc_host_context* _context, const evmc_address*, size_t, uint8_t* _bufferData, + size_t _bufferSize) +{ + auto& hostContext = static_cast(*_context); + + hostContext.setCode(bytes((bcos::byte*)_bufferData, (bcos::byte*)_bufferData + _bufferSize)); + return _bufferSize; +} + + +bool selfdestruct(evmc_host_context* _context, const evmc_address* _addr, + const evmc_address* _beneficiary) noexcept +{ + (void)_addr; + (void)_beneficiary; + auto& hostContext = static_cast(*_context); + + hostContext.suicide(); // FISCO BCOS has no _beneficiary + return false; +} + + +void log(evmc_host_context* _context, const evmc_address* _addr, uint8_t const* _data, + size_t _dataSize, const evmc_bytes32 _topics[], size_t _numTopics) noexcept +{ + (void)_addr; + auto& hostContext = static_cast(*_context); + assert(fromEvmC(*_addr) == boost::algorithm::unhex(std::string(hostContext.myAddress()))); + h256 const* pTopics = reinterpret_cast(_topics); + hostContext.log(h256s{pTopics, pTopics + _numTopics}, bytesConstRef{_data, _dataSize}); +} + +evmc_access_status access_account(evmc_host_context* _context, const evmc_address* _addr) +{ + std::ignore = _context; + std::ignore = _addr; + return EVMC_ACCESS_COLD; +} + + +evmc_access_status access_storage( + evmc_host_context* _context, const evmc_address* _addr, const evmc_bytes32* _key) +{ + std::ignore = _context; + std::ignore = _addr; + std::ignore = _key; + return EVMC_ACCESS_COLD; +} + +evmc_tx_context getTxContext(evmc_host_context* _context) noexcept +{ + auto& hostContext = static_cast(*_context); + evmc_tx_context result; + if (hostContext.isWasm()) + { + result.tx_origin = toEvmC(hostContext.origin()); + } + else + { + auto origin = fromHex(hostContext.origin()); + result.tx_origin = toEvmC(std::string_view((char*)origin.data(), origin.size())); + } + result.block_number = hostContext.blockNumber(); + result.block_timestamp = hostContext.timestamp(); + result.block_gas_limit = hostContext.blockGasLimit(); + + memset(result.tx_gas_price.bytes, 0, 32); + memset(result.block_coinbase.bytes, 0, 20); + memset(result.block_prev_randao.bytes, 0, 32); + memset(result.chain_id.bytes, 0, 32); + return result; +} + +evmc_bytes32 getBlockHash(evmc_host_context* _txContextPtr, int64_t _number) +{ + auto& hostContext = static_cast(*_txContextPtr); + return toEvmC(hostContext.blockHash(_number)); +} + +// evmc_result create(HostContext& _txContext, evmc_message const* _msg) noexcept +// { +// return _txContext.externalRequest(_msg); +// int64_t gas = _msg->gas; +// // u256 value = fromEvmC(_msg->value); +// bytesConstRef init = {_msg->input_data, _msg->input_size}; +// u256 salt = fromEvmC(_msg->create2_salt); +// evmc_opcode opcode = +// _msg->kind == EVMC_CREATE ? evmc_opcode::OP_CREATE : evmc_opcode::OP_CREATE2; + +// // HostContext::create takes the sender address from .myAddress(). +// assert(fromEvmC(_msg->sender) == _txContext.myAddress()); + +// return _txContext.create(gas, init, opcode, salt); +// } + +evmc_result call(evmc_host_context* _context, const evmc_message* _msg) noexcept +{ + // gas maybe smaller than 0 since outside gas is u256 and evmc_message is + // int64_t so gas maybe smaller than 0 in some extreme cases + // * origin code: assert(_msg->gas >= 0) + if (_msg->gas < 0) + { + EXECUTIVE_LOG(INFO) << LOG_DESC("EVM Gas overflow") << LOG_KV("cur gas", _msg->gas); + BOOST_THROW_EXCEPTION(protocol::GasOverflow()); + } + + auto& hostContext = static_cast(*_context); + + return hostContext.externalRequest(_msg); +} + +/// function table +// clang-format off +evmc_host_interface const fnTable = { + accountExists, + getStorage, + setStorage, + getBalance, + getCodeSize, + getCodeHash, + copyCode, + selfdestruct, + call, + getTxContext, + getBlockHash, + log, + access_account, + access_storage, +}; +// clang-format on + +// for wasm + +bool wasmAccountExists( + evmc_host_context* _context, const uint8_t* address, int32_t addressLength) noexcept +{ + auto& hostContext = static_cast(*_context); + return hostContext.exists(string_view((char*)address, addressLength)); +} + +int32_t get(evmc_host_context* _context, const uint8_t* _addr, int32_t _addressLength, + const uint8_t* _key, int32_t _keyLength, uint8_t* _value, int32_t _valueLength) +{ + boost::ignore_unused(_addr, _addressLength); + auto& hostContext = static_cast(*_context); + + // programming assert for debug + assert(string_view((char*)_addr, _addressLength) == hostContext.myAddress()); + auto value = hostContext.get(std::string_view((char*)_key, _keyLength)); + if (value.size() > (size_t)_valueLength) + { + return -1; + } + memcpy(_value, value.data(), value.size()); + return value.size(); +} + +evmc_storage_status set(evmc_host_context* _context, const uint8_t* _addr, int32_t _addressLength, + const uint8_t* _key, int32_t _keyLength, const uint8_t* _value, int32_t _valueLength) +{ + boost::ignore_unused(_addr, _addressLength); + auto& hostContext = static_cast(*_context); + + // IF (!HOSTCONTEXT.ISPERMITTED()) + // { // FIXME: RETURN STATUS INSTEAD OF THROW EXCEPTION + // BOOST_THROW_EXCEPTION(PERMISSIONDENIED()); + // } + assert(string_view((char*)_addr, _addressLength) == hostContext.myAddress()); + string key((char*)_key, _keyLength); + string value((char*)_value, _valueLength); + + auto status = EVMC_STORAGE_MODIFIED; + if (value.empty()) // TODO: should use 32 bytes 0? + { + status = EVMC_STORAGE_DELETED; + hostContext.sub().refunds += hostContext.vmSchedule().sstoreRefundGas; + } + hostContext.set(key, value); // Interface uses native endianness + return status; +} + +size_t wasmGetCodeSize(evmc_host_context* _context, const uint8_t* _addr, int32_t _addressLength) +{ + auto& hostContext = static_cast(*_context); + return hostContext.codeSizeAt(string_view((char*)_addr, _addressLength)); +} + +evmc_bytes32 wasmGetCodeHash( + evmc_host_context* _context, const uint8_t* _addr, int32_t _addressLength) +{ + auto& hostContext = static_cast(*_context); + return toEvmC(hostContext.codeHashAt(string_view((char*)_addr, _addressLength))); +} + +size_t wasmCopyCode(evmc_host_context* _context, const uint8_t*, int32_t, size_t, + uint8_t* _bufferData, size_t _bufferSize) +{ + auto& hostContext = static_cast(*_context); + + hostContext.setCode(bytes((bcos::byte*)_bufferData, (bcos::byte*)_bufferData + _bufferSize)); + return _bufferSize; + + // hostContext.setCode(bcos::bytes(_bufferData, _bufferSize)); + + // auto code = hostContext.codeAt(string_view((char *)_addr, _addressLength)); + + // // Handle "big offset" edge case. + // if (_codeOffset >= code->size()) + // return 0; + + // size_t maxToCopy = code->size() - _codeOffset; + // size_t numToCopy = std::min(maxToCopy, _bufferSize); + // std::copy_n(code->data() + _codeOffset, numToCopy, _bufferData); + // return numToCopy; +} + +void wasmLog(evmc_host_context* _context, const uint8_t* _addr, int32_t _addressLength, + uint8_t const* _data, size_t _dataSize, const evmc_bytes32 _topics[], + size_t _numTopics) noexcept +{ + boost::ignore_unused(_addr, _addressLength); + + auto& hostContext = static_cast(*_context); + assert(string_view((char*)_addr, _addressLength) == hostContext.myAddress()); + h256 const* pTopics = reinterpret_cast(_topics); + hostContext.log(h256s{pTopics, pTopics + _numTopics}, bytesConstRef{_data, _dataSize}); +} + +wasm_host_interface const wasmFnTable = { + wasmAccountExists, + get, + set, + wasmGetCodeSize, + wasmGetCodeHash, + wasmCopyCode, + wasmLog, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, +}; + +} // namespace + +const evmc_host_interface* getHostInterface() +{ + return &fnTable; +} +const wasm_host_interface* getWasmHostInterface() +{ + return &wasmFnTable; +} +} // namespace executor +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/vm/EVMHostInterface.h b/bcos-executor/src/vm/EVMHostInterface.h new file mode 100644 index 0000000..3f4f0f6 --- /dev/null +++ b/bcos-executor/src/vm/EVMHostInterface.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief host context + * @file EVMHostInterface.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once + +#include "../Common.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "evmc/evmc.h" +#include "evmc/instructions.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +const evmc_host_interface* getHostInterface(); +const wasm_host_interface* getWasmHostInterface(); +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/vm/HostContext.cpp b/bcos-executor/src/vm/HostContext.cpp new file mode 100644 index 0000000..26e5096 --- /dev/null +++ b/bcos-executor/src/vm/HostContext.cpp @@ -0,0 +1,580 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief host context + * @file HostContext.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#include "HostContext.h" +#include "../Common.h" +#include "../executive/TransactionExecutive.h" +#include "EVMHostInterface.h" +#include "bcos-framework/bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include "evmc/evmc.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::protocol; + +namespace bcos::executor +{ +namespace +{ +constexpr evmc_gas_metrics ethMetrics{32000, 20000, 5000, 200, 9000, 2300, 25000}; + +evmc_bytes32 evm_hash_fn(const uint8_t* data, size_t size) +{ + return toEvmC(HostContext::hashImpl()->hash(bytesConstRef(data, size))); +} +} // namespace + +HostContext::HostContext(CallParameters::UniquePtr callParameters, + std::shared_ptr executive, std::string tableName) + : evmc_host_context(), + m_callParameters(std::move(callParameters)), + m_executive(std::move(executive)), + m_tableName(std::move(tableName)) +{ + interface = getHostInterface(); + wasm_interface = getWasmHostInterface(); + + hash_fn = evm_hash_fn; + version = m_executive->blockContext().lock()->blockVersion(); + isSMCrypto = false; + + if (hashImpl() && hashImpl()->getHashImplType() == crypto::HashImplType::Sm3Hash) + { + isSMCrypto = true; + } + metrics = ðMetrics; +} + +std::string HostContext::get(const std::string_view& _key) +{ + auto entry = m_executive->storage().getRow(m_tableName, _key); + if (entry) + { + return std::string(entry->getField(0)); + } + return {}; +} + +void HostContext::set(const std::string_view& _key, std::string _value) +{ + auto start = utcTimeUs(); + Entry entry; + entry.importFields({std::move(_value)}); + + m_executive->storage().setRow(m_tableName, _key, std::move(entry)); +} + + +std::string addressBytesStr2String(std::string_view receiveAddressBytes) +{ + std::string strAddress; + strAddress.reserve(receiveAddressBytes.size() * 2); + boost::algorithm::hex_lower( + receiveAddressBytes.begin(), receiveAddressBytes.end(), std::back_inserter(strAddress)); + + return strAddress; +} + +std::string evmAddress2String(const evmc_address& address) +{ + auto receiveAddressBytes = fromEvmC(address); + return addressBytesStr2String(receiveAddressBytes); +} + +evmc_result HostContext::externalRequest(const evmc_message* _msg) +{ + // Convert evmc_message to CallParameters + auto request = std::make_unique(CallParameters::MESSAGE); + + request->senderAddress = myAddress(); + request->origin = origin(); + request->status = 0; + + auto blockContext = m_executive->blockContext().lock(); + + switch (_msg->kind) + { + case EVMC_CREATE2: + request->createSalt = fromEvmC(_msg->create2_salt); + break; + case EVMC_CALL: + if (m_executive->blockContext().lock()->isWasm()) + { + request->receiveAddress.assign((char*)_msg->destination_ptr, _msg->destination_len); + } + else + { + request->receiveAddress = evmAddress2String(_msg->code_address); + } + + request->codeAddress = request->receiveAddress; + request->data.assign(_msg->input_data, _msg->input_data + _msg->input_size); + break; + case EVMC_DELEGATECALL: + case EVMC_CALLCODE: + { + if (!m_executive->blockContext().lock()->isWasm()) + { + if (blockContext->blockVersion() >= + (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + request->delegateCall = true; + request->codeAddress = evmAddress2String(_msg->code_address); + request->delegateCallSender = evmAddress2String(_msg->sender); + request->receiveAddress = codeAddress(); + request->data.assign(_msg->input_data, _msg->input_data + _msg->input_size); + break; + } + } + + // old logic + evmc_result result; + result.status_code = evmc_status_code(EVMC_INVALID_INSTRUCTION); + result.release = nullptr; // no output to release + result.gas_left = 0; + result.gas_refund = 0; + return result; + } + case EVMC_CREATE: + request->data.assign(_msg->input_data, _msg->input_data + _msg->input_size); + request->create = true; + break; + } + if (versionCompareTo(blockContext->blockVersion(), BlockVersion::V3_1_VERSION) >= 0) + { + request->logEntries = std::move(m_callParameters->logEntries); + } + request->gas = _msg->gas; + // if (built in precompiled) then execute locally + + if (m_executive->isBuiltInPrecompiled(request->receiveAddress)) + { + return callBuiltInPrecompiled(request, false); + } + if (!blockContext->isWasm() && m_executive->isEthereumPrecompiled(request->receiveAddress)) + { + return callBuiltInPrecompiled(request, true); + } + + request->staticCall = m_callParameters->staticCall; + + auto response = m_executive->externalCall(std::move(request)); + + // Convert CallParameters to evmc_resultx + evmc_result result{.status_code = toEVMStatus(response, *blockContext), + .gas_left = response->gas, + .gas_refund = 0, + .output_data = response->data.data(), + .output_size = response->data.size(), + .release = nullptr, // TODO: check if the response data need to release + .create_address = toEvmC(boost::algorithm::unhex(response->newEVMContractAddress)), + .padding = {}}; + + // Put response to store in order to avoid data lost + m_responseStore.emplace_back(std::move(response)); + + return result; +} + +evmc_status_code HostContext::toEVMStatus(std::unique_ptr const& response, + const bcos::executor::BlockContext& blockContext) +{ + if (blockContext.blockVersion() >= (uint32_t)(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + return evmc_status_code(response->evmStatus); + } + + return evmc_status_code(response->status); +} + +evmc_result HostContext::callBuiltInPrecompiled( + std::unique_ptr const& _request, bool _isEvmPrecompiled) +{ + auto callResults = std::make_unique(CallParameters::FINISHED); + evmc_result preResult{}; + int32_t resultCode = 0; + bytes resultData; + + if (_isEvmPrecompiled) + { + auto gasUsed = + m_executive->costOfPrecompiled(_request->receiveAddress, ref(_request->data)); + /// NOTE: this assignment is wrong, will cause out of gas, should not use evm precompiled + /// before 3.1.0 + callResults->gas = gasUsed; + if (versionCompareTo(version, BlockVersion::V3_1_VERSION) >= 0) + { + callResults->gas = _request->gas - gasUsed; + } + auto [success, output] = + m_executive->executeOriginPrecompiled(_request->receiveAddress, ref(_request->data)); + resultCode = + (int32_t)(success ? TransactionStatus::None : TransactionStatus::RevertInstruction); + resultData.swap(output); + } + else + { + try + { + auto precompiledCallParams = + std::make_shared(_request); + precompiledCallParams = m_executive->execPrecompiled(precompiledCallParams); + callResults->gas = precompiledCallParams->m_gasLeft; + resultCode = (int32_t)TransactionStatus::None; + resultData = std::move(precompiledCallParams->m_execResult); + } + catch (protocol::PrecompiledError& e) + { + resultCode = (int32_t)TransactionStatus::PrecompiledError; + } + catch (std::exception& e) + { + resultCode = (int32_t)TransactionStatus::Unknown; + } + } + + if (resultCode != (int32_t)TransactionStatus::None) + { + callResults->type = CallParameters::REVERT; + callResults->status = resultCode; + preResult.status_code = EVMC_INTERNAL_ERROR; + preResult.gas_left = 0; + m_responseStore.emplace_back(std::move(callResults)); + return preResult; + } + + preResult.gas_left = callResults->gas; + preResult.gas_refund = 0; + if (preResult.gas_left < 0) + { + callResults->type = CallParameters::REVERT; + callResults->status = (int32_t)TransactionStatus::OutOfGas; + preResult.status_code = EVMC_OUT_OF_GAS; + preResult.gas_left = 0; + return preResult; + } + callResults->status = (int32_t)TransactionStatus::None; + callResults->data.swap(resultData); + preResult.output_size = callResults->data.size(); + preResult.output_data = callResults->data.data(); + preResult.release = nullptr; + m_responseStore.emplace_back(std::move(callResults)); + return preResult; +} + +bool HostContext::setCode(bytes code) +{ + // set code will cause exception when exec revert + // new logic + if (blockVersion() >= uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + auto contractTable = m_executive->storage().openTable(m_tableName); + // set code hash in contract table + auto codeHash = hashImpl()->hash(code); + if (contractTable) + { + Entry codeHashEntry; + codeHashEntry.importFields({codeHash.asBytes()}); + + auto codeEntry = m_executive->storage().getRow( + bcos::ledger::SYS_CODE_BINARY, codeHashEntry.getField(0)); + + if (!codeEntry) + { + codeEntry = std::make_optional(); + codeEntry->importFields({std::move(code)}); + + // set code in code binary table + m_executive->storage().setRow(bcos::ledger::SYS_CODE_BINARY, + codeHashEntry.getField(0), std::move(codeEntry.value())); + } + + // dry code hash in account table + m_executive->storage().setRow(m_tableName, ACCOUNT_CODE_HASH, std::move(codeHashEntry)); + return true; + } + return false; + } + // old logic + auto contractTable = m_executive->storage().openTable(m_tableName); + if (contractTable) + { + Entry codeHashEntry; + auto codeHash = hashImpl()->hash(code); + codeHashEntry.importFields({codeHash.asBytes()}); + m_executive->storage().setRow(m_tableName, ACCOUNT_CODE_HASH, std::move(codeHashEntry)); + + Entry codeEntry; + codeEntry.importFields({std::move(code)}); + m_executive->storage().setRow(m_tableName, ACCOUNT_CODE, std::move(codeEntry)); + return true; + } + return false; +} + +void HostContext::setCodeAndAbi(bytes code, string abi) +{ + EXECUTOR_LOG(TRACE) << LOG_DESC("save code and abi") << LOG_KV("tableName", m_tableName) + << LOG_KV("codeSize", code.size()) << LOG_KV("abiSize", abi.size()); + if (setCode(std::move(code))) + { + // new logic + if (blockVersion() >= uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + // set abi in abi table + auto codeEntry = m_executive->storage().getRow(m_tableName, ACCOUNT_CODE_HASH); + auto codeHash = codeEntry->getField(0); + + EXECUTOR_LOG(TRACE) << LOG_DESC("set abi") << LOG_KV("codeHash", codeHash) + << LOG_KV("abiSize", abi.size()); + + auto abiEntry = m_executive->storage().getRow(bcos::ledger::SYS_CONTRACT_ABI, codeHash); + + if (!abiEntry) + { + abiEntry = std::make_optional(); + abiEntry->importFields({std::move(abi)}); + + m_executive->storage().setRow( + bcos::ledger::SYS_CONTRACT_ABI, codeHash, std::move(abiEntry.value())); + } + + return; + } + // old logic + Entry abiEntry; + abiEntry.importFields({std::move(abi)}); + m_executive->storage().setRow(m_tableName, ACCOUNT_ABI, abiEntry); + } +} + +bcos::bytes HostContext::externalCodeRequest(const std::string_view& address) +{ + auto request = std::make_unique(CallParameters::MESSAGE); + request->gas = gas(); + request->senderAddress = myAddress(); + request->receiveAddress = myAddress(); + request->data = bcos::protocol::GET_CODE_INPUT_BYTES; + request->origin = origin(); + request->status = 0; + request->delegateCall = false; + request->codeAddress = addressBytesStr2String(address); + request->staticCall = staticCall(); + auto response = m_executive->externalCall(std::move(request)); + return std::move(response->data); +} + +size_t HostContext::codeSizeAt(const std::string_view& address) +{ + auto blockContext = m_executive->blockContext().lock(); + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + /* + Note: + evm precompiled(0x1 ~ 0x9): return 0 (Is the same as eth) + FISCO BCOS precompiled: return 1 + + Because evm precompiled is call by build-in opcode, no need to get code size before + called, but FISCO BCOS precompiled is call like contract, so it need to get code size. + */ + + if (m_executive->isPrecompiled(addressBytesStr2String(address))) + { + // Only FISCO BCOS precompile: constant precompiled or build-in precompiled + // evm precompiled address will go down to externalCodeRequest() and get empty code + return 1; + } + auto code = externalCodeRequest(address); + return code.size(); // OPCODE num is bytes.size + } + return 1; +} + +h256 HostContext::codeHashAt(const std::string_view& address) +{ + auto blockContext = m_executive->blockContext().lock(); + if (blockContext->blockVersion() >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + // precompiled return 0 hash; + if (m_executive->isPrecompiled(addressBytesStr2String(address))) + { + return {0}; + } + auto code = externalCodeRequest(address); + auto hash = hashImpl()->hash(code).asBytes(); + return h256(hash); + } + return {0}; +} + +VMSchedule const& HostContext::vmSchedule() const +{ + return m_executive->vmSchedule(); +} + +evmc_bytes32 HostContext::store(const evmc_bytes32* key) +{ + evmc_bytes32 result; + auto keyView = std::string_view((char*)key->bytes, sizeof(key->bytes)); + + auto entry = m_executive->storage().getRow(m_tableName, keyView); + if (entry) + { + auto field = entry->getField(0); + std::uninitialized_copy_n(field.data(), sizeof(result), result.bytes); + } + else + { + std::uninitialized_fill_n(result.bytes, sizeof(result), 0); + } + return result; +} + +void HostContext::setStore(const evmc_bytes32* key, const evmc_bytes32* value) +{ + auto keyView = std::string_view((char*)key->bytes, sizeof(key->bytes)); + bytes valueBytes(value->bytes, value->bytes + sizeof(value->bytes)); + + Entry entry; + entry.importFields({std::move(valueBytes)}); + m_executive->storage().setRow(m_tableName, keyView, std::move(entry)); +} + +void HostContext::log(h256s&& _topics, bytesConstRef _data) +{ + // if (m_isWasm || myAddress().empty()) + // { + // m_sub.logs->push_back( + // protocol::LogEntry(bytes(myAddress().data(), myAddress().data() + + // myAddress().size()), + // std::move(_topics), _data.toBytes())); + // } + // else + // { + // // convert solidity address to hex string + // auto hexAddress = *toHexString(myAddress()); + // boost::algorithm::to_lower(hexAddress); // this is in case of toHexString be modified + // toChecksumAddress(hexAddress, hashImpl()->hash(hexAddress).hex()); + // m_sub.logs->push_back( + // protocol::LogEntry(asBytes(hexAddress), std::move(_topics), _data.toBytes())); + // } + m_callParameters->logEntries.emplace_back( + bytes(myAddress().data(), myAddress().data() + myAddress().size()), std::move(_topics), + _data.toBytes()); +} + +h256 HostContext::blockHash(int64_t _number) const +{ + if (m_executive->blockContext().lock()->blockVersion() >= + (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + if (_number >= blockNumber() || _number < 0) + { + return h256(""); + } + else + { + return m_executive->blockContext().lock()->blockHash(_number); + } + } + else + { + return m_executive->blockContext().lock()->hash(); + } +} + +int64_t HostContext::blockNumber() const +{ + return m_executive->blockContext().lock()->number(); +} + +uint32_t HostContext::blockVersion() const +{ + return m_executive->blockContext().lock()->blockVersion(); +} + +uint64_t HostContext::timestamp() const +{ + return m_executive->blockContext().lock()->timestamp(); +} + +std::string_view HostContext::myAddress() const +{ + return m_executive->contractAddress(); +} + +std::optional HostContext::code() +{ + if (blockVersion() >= uint32_t(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + auto codehash = codeHash(); + + auto key = std::string_view((char*)codehash.data(), codehash.size()); + auto entry = m_executive->storage().getRow(bcos::ledger::SYS_CODE_BINARY, key); + if (entry && !entry->get().empty()) + { + return entry; + } + } + + return m_executive->storage().getRow(m_tableName, ACCOUNT_CODE); +} + +crypto::HashType HostContext::codeHash() +{ + auto entry = m_executive->storage().getRow(m_tableName, ACCOUNT_CODE_HASH); + if (entry) + { + auto code = entry->getField(0); + return crypto::HashType(code, crypto::HashType::StringDataType::FromBinary); + } + + return {}; +} + +bool HostContext::isWasm() +{ + return m_executive->isWasm(); +} + +} // namespace bcos::executor \ No newline at end of file diff --git a/bcos-executor/src/vm/HostContext.h b/bcos-executor/src/vm/HostContext.h new file mode 100644 index 0000000..3db8a4c --- /dev/null +++ b/bcos-executor/src/vm/HostContext.h @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief host context + * @file HostContext.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once + +#include "../Common.h" +#include "../executive/BlockContext.h" +#include "../executive/TransactionExecutive.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/storage/Table.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class TransactionExecutive; + +class HostContext : public evmc_host_context +{ +public: + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + + /// Full constructor. + HostContext(CallParameters::UniquePtr callParameters, + std::shared_ptr executive, std::string tableName); + virtual ~HostContext() noexcept = default; + + HostContext(HostContext const&) = delete; + HostContext& operator=(HostContext const&) = delete; + HostContext(HostContext&&) = delete; + HostContext& operator=(HostContext&&) = delete; + + std::string get(const std::string_view& _key); + + void set(const std::string_view& _key, std::string _value); + + /// Read storage location. + evmc_bytes32 store(const evmc_bytes32* key); + + /// Write a value in storage. + // void setStore(const u256& _n, const u256& _v); + void setStore(const evmc_bytes32* key, const evmc_bytes32* value); + + /// Create a new contract. + evmc_result externalRequest(const evmc_message* _msg); + + evmc_status_code toEVMStatus( + std::unique_ptr const& response, const BlockContext& blockContext); + + evmc_result callBuiltInPrecompiled( + std::unique_ptr const& _request, bool _isEvmPrecompiled); + + virtual bool setCode(bytes code); + + void setCodeAndAbi(bytes code, std::string abi); + + size_t codeSizeAt(const std::string_view& address); + + h256 codeHashAt(const std::string_view& address); + + /// Does the account exist? + bool exists(const std::string_view&) { return true; } + + /// Return the EVM gas-price schedule for this execution context. + VMSchedule const& vmSchedule() const; + + /// Hash of a block if within the last 256 blocks, or h256() otherwise. + h256 blockHash(int64_t _number) const; + int64_t blockNumber() const; + uint32_t blockVersion() const; + uint64_t timestamp() const; + int64_t blockGasLimit() const + { + if (m_executive->blockContext().lock()->blockVersion() >= + (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + // FISCO BCOS only has tx Gas limit. We use it as block gas limit + return m_executive->blockContext().lock()->txGasLimit(); + } + else + { + return 3000000000; // TODO: add config + } + } + + /// Revert any changes made (by any of the other calls). + void log(h256s&& _topics, bytesConstRef _data); + + /// ------ get interfaces related to HostContext------ + std::string_view myAddress() const; + virtual std::string_view caller() const { return m_callParameters->senderAddress; } + std::string_view origin() const { return m_callParameters->origin; } + std::string_view codeAddress() const { return m_callParameters->codeAddress; } + bytes_view data() const + { + return bytes_view(m_callParameters->data.data(), m_callParameters->data.size()); + } + virtual std::optional code(); + bool isCodeHasPrefix(std::string_view _prefix) const; + virtual h256 codeHash(); + u256 salt() const { return m_salt; } + SubState& sub() { return m_sub; } + bool isCreate() const { return m_callParameters->create; } + bool staticCall() const { return m_callParameters->staticCall; } + int64_t gas() const { return m_callParameters->gas; } + void suicide() + { + if (m_executive->blockContext().lock()->blockVersion() >= + (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + m_executive->blockContext().lock()->suicide(m_tableName); + } + } + + CallParameters::UniquePtr&& takeCallParameters() + { + if (m_executive->blockContext().lock()->blockVersion() >= + (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + for (const auto& response : m_responseStore) + { + m_callParameters->logEntries.insert(m_callParameters->logEntries.end(), + std::make_move_iterator(response->logEntries.begin()), + std::make_move_iterator(response->logEntries.end())); + } + } + return std::move(m_callParameters); + } + + static crypto::Hash::Ptr& hashImpl() { return GlobalHashImpl::g_hashImpl; } + + bool isWasm(); + +protected: + const CallParameters::UniquePtr& getCallParameters() const { return m_callParameters; } + virtual bcos::bytes externalCodeRequest(const std::string_view& address); + +private: + void depositFungibleAsset( + const std::string_view& _to, const std::string& _assetName, uint64_t _amount); + void depositNotFungibleAsset(const std::string_view& _to, const std::string& _assetName, + uint64_t _assetID, const std::string& _uri); + + CallParameters::UniquePtr m_callParameters; + std::shared_ptr m_executive; + std::string m_tableName; + + u256 m_salt; ///< Values used in new address construction by CREATE2 + SubState m_sub; ///< Sub-band VM state (suicides, refund counter, logs). + + std::list m_responseStore; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/vm/Precompiled.cpp b/bcos-executor/src/vm/Precompiled.cpp new file mode 100644 index 0000000..fdd687b --- /dev/null +++ b/bcos-executor/src/vm/Precompiled.cpp @@ -0,0 +1,487 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief evm precompiled + * @file Precompiled.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#include "../vm/Precompiled.h" +#include "../Common.h" +#include "wedpr-crypto/WedprBn128.h" +#include "wedpr-crypto/WedprCrypto.h" +#include + +using namespace std; +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos +{ +namespace executor +{ +PrecompiledRegistrar* PrecompiledRegistrar::s_this = nullptr; + +PrecompiledExecutor const& PrecompiledRegistrar::executor(std::string const& _name) +{ + if (!get()->m_execs.count(_name)) + BOOST_THROW_EXCEPTION(ExecutorNotFound()); + return get()->m_execs[_name]; +} + +PrecompiledPricer const& PrecompiledRegistrar::pricer(std::string const& _name) +{ + if (!get()->m_pricers.count(_name)) + BOOST_THROW_EXCEPTION(PricerNotFound()); + return get()->m_pricers[_name]; +} + +} // namespace executor +} // namespace bcos + +namespace +{ +ETH_REGISTER_PRECOMPILED(ecrecover)(bytesConstRef _in) +{ + // When supported_version> = v2.4.0, ecRecover uniformly calls the ECDSA verification function + return bcos::crypto::ecRecover(_in); +} + +ETH_REGISTER_PRECOMPILED(sha256)(bytesConstRef _in) +{ + return {true, bcos::crypto::sha256(_in).asBytes()}; +} + +ETH_REGISTER_PRECOMPILED(ripemd160)(bytesConstRef _in) +{ + return {true, h256(bcos::crypto::ripemd160(_in), h256::AlignRight).asBytes()}; +} + +ETH_REGISTER_PRECOMPILED(identity)(bytesConstRef _in) +{ + return {true, _in.toBytes()}; +} + +// Parse _count bytes of _in starting with _begin offset as big endian int. +// If there's not enough bytes in _in, consider it infinitely right-padded with zeroes. +bigint parseBigEndianRightPadded(bytesConstRef _in, bigint const& _begin, bigint const& _count) +{ + if (_begin > _in.count()) + return 0; + assert(_count <= numeric_limits::max() / 8); // Otherwise, the return value would not + // fit in the memory. + + size_t const begin{_begin}; + size_t const count{_count}; + + // crop _in, not going beyond its size + bytesConstRef cropped = _in.getCroppedData(begin, min(count, _in.count() - begin)); + + bigint ret = fromBigEndian(cropped); + // shift as if we had right-padding zeroes + assert(count - cropped.count() <= numeric_limits::max() / 8); + ret <<= 8 * (count - cropped.count()); + + return ret; +} + +ETH_REGISTER_PRECOMPILED(modexp)(bytesConstRef _in) +{ + // This is a protocol of bignumber modular + // Described here: + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-198.md + bigint const baseLength(parseBigEndianRightPadded(_in, 0, 32)); + bigint const expLength(parseBigEndianRightPadded(_in, 32, 32)); + bigint const modLength(parseBigEndianRightPadded(_in, 64, 32)); + assert(modLength <= numeric_limits::max() / 8); // Otherwise gas should be too + // expensive. + assert(baseLength <= numeric_limits::max() / 8); // Otherwise, gas should be too + // expensive. + if (modLength == 0 && baseLength == 0) + return {true, bytes{}}; // This is a special case where expLength can be very big. + assert(expLength <= numeric_limits::max() / 8); + + bigint const base(parseBigEndianRightPadded(_in, 96, baseLength)); + bigint const exp(parseBigEndianRightPadded(_in, 96 + baseLength, expLength)); + bigint const mod(parseBigEndianRightPadded(_in, 96 + baseLength + expLength, modLength)); + + bigint const result = mod != 0 ? boost::multiprecision::powm(base, exp, mod) : bigint{0}; + + size_t const retLength(modLength); + bytes ret(retLength); + toBigEndian(result, ret); + + return {true, ret}; +} + +namespace +{ +bigint expLengthAdjust(bigint const& _expOffset, bigint const& _expLength, bytesConstRef _in) +{ + if (_expLength <= 32) + { + bigint const exp(parseBigEndianRightPadded(_in, _expOffset, _expLength)); + return exp ? msb(exp) : 0; + } + else + { + bigint const expFirstWord(parseBigEndianRightPadded(_in, _expOffset, 32)); + size_t const highestBit(expFirstWord ? msb(expFirstWord) : 0); + return 8 * (_expLength - 32) + highestBit; + } +} + +bigint multComplexity(bigint const& _x) +{ + if (_x <= 64) + return _x * _x; + if (_x <= 1024) + return (_x * _x) / 4 + 96 * _x - 3072; + else + return (_x * _x) / 16 + 480 * _x - 199680; +} +} // namespace + +ETH_REGISTER_PRECOMPILED_PRICER(modexp)(bytesConstRef _in) +{ + bigint const baseLength(parseBigEndianRightPadded(_in, 0, 32)); + bigint const expLength(parseBigEndianRightPadded(_in, 32, 32)); + bigint const modLength(parseBigEndianRightPadded(_in, 64, 32)); + + bigint const maxLength(max(modLength, baseLength)); + bigint const adjustedExpLength(expLengthAdjust(baseLength + 96, expLength, _in)); + + return multComplexity(maxLength) * max(adjustedExpLength, 1) / 20; +} + +ETH_REGISTER_PRECOMPILED(alt_bn128_G1_add)(bytesConstRef _in) +{ + pair ret{false, bytes(64, 0)}; + CInputBuffer in{(const char*)_in.data(), _in.size()}; + COutputBuffer result{(char*)ret.second.data(), 64}; + if (wedpr_fb_alt_bn128_g1_add(&in, &result) != 0) + { + return ret; + } + ret.first = true; + return ret; +} + +ETH_REGISTER_PRECOMPILED(alt_bn128_G1_mul)(bytesConstRef _in) +{ + pair ret{false, bytes(64, 0)}; + CInputBuffer in{(const char*)_in.data(), _in.size()}; + COutputBuffer result{(char*)ret.second.data(), 64}; + if (wedpr_fb_alt_bn128_g1_mul(&in, &result) != 0) + { + return ret; + } + ret.first = true; + return ret; +} + +ETH_REGISTER_PRECOMPILED(alt_bn128_pairing_product)(bytesConstRef _in) +{ + // Input: list of pairs of G1 and G2 points + // Output: 1 if pairing evaluates to 1, 0 otherwise (left-padded to 32 bytes) + pair ret{false, bytes(32, 0)}; + size_t constexpr pairSize = 2 * 32 + 2 * 64; + size_t const pairs = _in.size() / pairSize; + if (pairs * pairSize != _in.size()) + { + // Invalid length. + return ret; + } + + CInputBuffer in{(const char*)_in.data(), _in.size()}; + COutputBuffer result{(char*)ret.second.data(), 32}; + if (wedpr_fb_alt_bn128_pairing_product(&in, &result) != 0) + { + return ret; + } + ret.first = true; + return ret; +} + +ETH_REGISTER_PRECOMPILED_PRICER(alt_bn128_pairing_product) +(bytesConstRef _in) +{ + auto const k = _in.size() / 192; + return 45000 + k * 34000; +} + +ETH_REGISTER_PRECOMPILED(blake2_compression)(bytesConstRef _in) +{ + static constexpr size_t roundsSize = 4; + static constexpr size_t stateVectorSize = 8 * 8; + static constexpr size_t messageBlockSize = 16 * 8; + static constexpr size_t offsetCounterSize = 8; + static constexpr size_t finalBlockIndicatorSize = 1; + static constexpr size_t totalInputSize = roundsSize + stateVectorSize + messageBlockSize + + 2 * offsetCounterSize + finalBlockIndicatorSize; + + if (_in.size() != totalInputSize) + return {false, {}}; + + auto const rounds = fromBigEndian(_in.getCroppedData(0, roundsSize)); + auto const stateVector = _in.getCroppedData(roundsSize, stateVectorSize); + auto const messageBlockVector = + _in.getCroppedData(roundsSize + stateVectorSize, messageBlockSize); + auto const offsetCounter0 = + _in.getCroppedData(roundsSize + stateVectorSize + messageBlockSize, offsetCounterSize); + auto const offsetCounter1 = _in.getCroppedData( + roundsSize + stateVectorSize + messageBlockSize + offsetCounterSize, offsetCounterSize); + uint8_t const finalBlockIndicator = + _in[roundsSize + stateVectorSize + messageBlockSize + 2 * offsetCounterSize]; + + if (finalBlockIndicator != 0 && finalBlockIndicator != 1) + return {false, {}}; + + return {true, bcos::crypto::blake2FCompression(rounds, stateVector, offsetCounter0, + offsetCounter1, finalBlockIndicator, messageBlockVector)}; +} + +ETH_REGISTER_PRECOMPILED_PRICER(blake2_compression) +(bytesConstRef _in) +{ + auto const rounds = fromBigEndian(_in.getCroppedData(0, 4)); + return rounds; +} + + +} // namespace + +namespace bcos +{ +namespace precompiled +{ +} // namespace precompiled + + +namespace crypto +{ +// add sha2 -- sha256 to this file begin +h256 sha256(bytesConstRef _in) noexcept +{ + h256 ret; + CInputBuffer in{(const char*)_in.data(), _in.size()}; + COutputBuffer result{(char*)ret.data(), h256::SIZE}; + if (wedpr_sha256_hash(&in, &result) != 0) + { // TODO: add some log + return ret; + } + return ret; +} + +h160 ripemd160(bytesConstRef _in) +{ + h160 ret; + CInputBuffer in{(const char*)_in.data(), _in.size()}; + COutputBuffer result{(char*)ret.data(), h160::SIZE}; + if (wedpr_ripemd160_hash(&in, &result) != 0) + { // TODO: add some log + return ret; + } + return ret; +} + +namespace +{ +// The Blake 2 F compression function implemenation is based on the reference implementation, +// see https://github.com/BLAKE2/BLAKE2/blob/master/ref/blake2b-ref.c +// The changes in original code were done mostly to accommodate variable round number and to remove +// unnecessary big endian support. +constexpr size_t BLAKE2B_BLOCKBYTES = 128; + +struct blake2b_state +{ + uint64_t h[8]; + uint64_t t[2]; + uint64_t f[2]; + uint8_t buf[BLAKE2B_BLOCKBYTES]; + size_t buflen; + size_t outlen; + uint8_t last_node; +}; + +// clang-format off +constexpr uint64_t blake2b_IV[8] = +{ + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, + 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, + 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL +}; + +constexpr uint8_t blake2b_sigma[12][16] = +{ + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } , + { 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 } , + { 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 } , + { 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 } , + { 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 } , + { 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 } , + { 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 } , + { 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 } , + { 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 } , + { 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 } , +}; +// clang-format on + +inline uint64_t load64(const void* src) noexcept +{ + uint64_t w; + memcpy(&w, src, sizeof w); + return w; +} + +inline constexpr uint64_t rotr64(uint64_t w, unsigned c) noexcept +{ + return (w >> c) | (w << (64 - c)); +} + +inline void G(uint8_t r, uint8_t i, uint64_t& a, uint64_t& b, uint64_t& c, uint64_t& d, + const uint64_t* m) noexcept +{ + a = a + b + m[blake2b_sigma[r][2 * i + 0]]; + d = rotr64(d ^ a, 32); + c = c + d; + b = rotr64(b ^ c, 24); + a = a + b + m[blake2b_sigma[r][2 * i + 1]]; + d = rotr64(d ^ a, 16); + c = c + d; + b = rotr64(b ^ c, 63); +} + +inline void ROUND(uint32_t round, uint64_t* v, const uint64_t* m) noexcept +{ + uint8_t const r = round % 10; + G(r, 0, v[0], v[4], v[8], v[12], m); + G(r, 1, v[1], v[5], v[9], v[13], m); + G(r, 2, v[2], v[6], v[10], v[14], m); + G(r, 3, v[3], v[7], v[11], v[15], m); + G(r, 4, v[0], v[5], v[10], v[15], m); + G(r, 5, v[1], v[6], v[11], v[12], m); + G(r, 6, v[2], v[7], v[8], v[13], m); + G(r, 7, v[3], v[4], v[9], v[14], m); +} + + +void blake2b_compress( + uint32_t rounds, blake2b_state* S, const uint8_t block[BLAKE2B_BLOCKBYTES]) noexcept +{ + uint64_t m[16]; + uint64_t v[16]; + + for (size_t i = 0; i < 16; ++i) + m[i] = load64(block + i * sizeof(m[i])); + + for (size_t i = 0; i < 8; ++i) + v[i] = S->h[i]; + + v[8] = blake2b_IV[0]; + v[9] = blake2b_IV[1]; + v[10] = blake2b_IV[2]; + v[11] = blake2b_IV[3]; + v[12] = blake2b_IV[4] ^ S->t[0]; + v[13] = blake2b_IV[5] ^ S->t[1]; + v[14] = blake2b_IV[6] ^ S->f[0]; + v[15] = blake2b_IV[7] ^ S->f[1]; + + for (uint32_t r = 0; r < rounds; ++r) + ROUND(r, v, m); + + for (size_t i = 0; i < 8; ++i) + S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; +} + +} // namespace + +bytes blake2FCompression(uint32_t _rounds, bytesConstRef _stateVector, bytesConstRef _t0, + bytesConstRef _t1, bool _lastBlock, bytesConstRef _messageBlockVector) +{ + if (_stateVector.size() != sizeof(blake2b_state::h)) + BOOST_THROW_EXCEPTION(InvalidInputSize()); + + blake2b_state s{}; + std::memcpy(&s.h, _stateVector.data(), _stateVector.size()); + + if (_t0.size() != sizeof(s.t[0]) || _t1.size() != sizeof(s.t[1])) + BOOST_THROW_EXCEPTION(InvalidInputSize()); + + s.t[0] = load64(_t0.data()); + s.t[1] = load64(_t1.data()); + s.f[0] = _lastBlock ? std::numeric_limits::max() : 0; + + if (_messageBlockVector.size() != BLAKE2B_BLOCKBYTES) + BOOST_THROW_EXCEPTION(InvalidInputSize()); + + uint8_t block[BLAKE2B_BLOCKBYTES]; + std::copy(_messageBlockVector.begin(), _messageBlockVector.end(), &block[0]); + + blake2b_compress(_rounds, &s, block); + + bytes result(sizeof(s.h)); + std::memcpy(&result[0], &s.h[0], result.size()); + + return result; +} + +const int RSV_LENGTH = 65; +const int PUBLIC_KEY_LENGTH = 64; +pair ecRecover(bytesConstRef _in) +{ // _in is hash(32),v(32),r(32),s(32), return address + BCOS_LOG(TRACE) << LOG_BADGE("Precompiled") << LOG_DESC("ecRecover: ") << _in.size(); + byte rawRSV[RSV_LENGTH]; + memcpy(rawRSV, _in.data() + 64, RSV_LENGTH - 1); + rawRSV[RSV_LENGTH - 1] = (byte)((int)_in[63] - 27); + CInputBuffer msgHash{(const char*)_in.data(), crypto::HashType::SIZE}; + CInputBuffer rsv{(const char*)rawRSV, RSV_LENGTH}; + + pair ret{true, bytes(crypto::HashType::SIZE, 0)}; + bytes publicKeyBytes(64, 0); + COutputBuffer publicKey{(char*)publicKeyBytes.data(), PUBLIC_KEY_LENGTH}; + + BCOS_LOG(TRACE) << LOG_BADGE("Precompiled") << LOG_DESC("wedpr_secp256k1_recover_public_key") + << LOG_KV("hash", *toHexString(msgHash.data, msgHash.data + msgHash.len)) + << LOG_KV("rsv", *toHexString(rsv.data, rsv.data + rsv.len)) + << LOG_KV("publicKey", + *toHexString(publicKey.data, publicKey.data + publicKey.len)); + auto retCode = wedpr_secp256k1_recover_public_key(&msgHash, &rsv, &publicKey); + if (retCode != 0) + { + BCOS_LOG(TRACE) << LOG_BADGE("Precompiled") << LOG_DESC("ecRecover publicKey failed"); + return {true, {}}; + } + BCOS_LOG(TRACE) << LOG_BADGE("Precompiled") + << LOG_DESC("wedpr_secp256k1_recover_public_key success"); + // keccak256 and set first 12 byte to zero + CInputBuffer pubkeyBuffer{(const char*)publicKeyBytes.data(), PUBLIC_KEY_LENGTH}; + COutputBuffer pubkeyHash{(char*)ret.second.data(), crypto::HashType::SIZE}; + retCode = wedpr_keccak256_hash(&pubkeyBuffer, &pubkeyHash); + if (retCode != 0) + { + return {true, {}}; + } + memset(ret.second.data(), 0, 12); + BCOS_LOG(TRACE) << LOG_BADGE("Precompiled") << LOG_DESC("ecRecover success"); + return ret; +} + + +} // namespace crypto + +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/src/vm/Precompiled.h b/bcos-executor/src/vm/Precompiled.h new file mode 100644 index 0000000..6927bda --- /dev/null +++ b/bcos-executor/src/vm/Precompiled.h @@ -0,0 +1,211 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief evm precompiled + * @file Precompiled.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once +#include "../executive/TransactionExecutive.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-executor/src/precompiled/common/PrecompiledGas.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class BlockContext; +using PrecompiledExecutor = std::function(bytesConstRef _in)>; +using PrecompiledPricer = std::function; + +DERIVE_BCOS_EXCEPTION(ExecutorNotFound); +DERIVE_BCOS_EXCEPTION(PricerNotFound); + +class PrecompiledRegistrar +{ +public: + /// Get the executor object for @a _name function or @throw ExecutorNotFound if not found. + static PrecompiledExecutor const& executor(std::string const& _name); + + /// Get the price calculator object for @a _name function or @throw PricerNotFound if not found. + static PrecompiledPricer const& pricer(std::string const& _name); + + /// Register an executor. In general just use ETH_REGISTER_PRECOMPILED. + static PrecompiledExecutor registerExecutor( + std::string const& _name, PrecompiledExecutor const& _exec) + { + return (get()->m_execs[_name] = _exec); + } + /// Unregister an executor. Shouldn't generally be necessary. + static void unregisterExecutor(std::string const& _name) { get()->m_execs.erase(_name); } + + /// Register a pricer. In general just use ETH_REGISTER_PRECOMPILED_PRICER. + static PrecompiledPricer registerPricer( + std::string const& _name, PrecompiledPricer const& _exec) + { + return (get()->m_pricers[_name] = _exec); + } + /// Unregister a pricer. Shouldn't generally be necessary. + static void unregisterPricer(std::string const& _name) { get()->m_pricers.erase(_name); } + +private: + static PrecompiledRegistrar* get() + { + if (!s_this) + s_this = new PrecompiledRegistrar; + return s_this; + } + + std::unordered_map m_execs; + std::unordered_map m_pricers; + static PrecompiledRegistrar* s_this; +}; + +// TODO: unregister on unload with a static object. +#define ETH_REGISTER_PRECOMPILED(Name) \ + static std::pair __eth_registerPrecompiledFunction##Name(bytesConstRef _in); \ + static bcos::executor::PrecompiledExecutor __eth_registerPrecompiledFactory##Name = \ + ::bcos::executor::PrecompiledRegistrar::registerExecutor( \ + #Name, &__eth_registerPrecompiledFunction##Name); \ + static std::pair __eth_registerPrecompiledFunction##Name +#define ETH_REGISTER_PRECOMPILED_PRICER(Name) \ + static bigint __eth_registerPricerFunction##Name(bytesConstRef _in); \ + static bcos::executor::PrecompiledPricer __eth_registerPricerFactory##Name = \ + ::bcos::executor::PrecompiledRegistrar::registerPricer( \ + #Name, &__eth_registerPricerFunction##Name); \ + static bigint __eth_registerPricerFunction##Name + +class PrecompiledContract +{ +public: + typedef std::shared_ptr Ptr; + PrecompiledContract() = default; + PrecompiledContract(PrecompiledPricer const& _cost, PrecompiledExecutor const& _exec, + u256 const& _startingBlock = 0) + : m_cost(_cost), m_execute(_exec), m_startingBlock(_startingBlock) + {} + + PrecompiledContract(unsigned _base, unsigned _word, PrecompiledExecutor const& _exec, + u256 const& _startingBlock = 0) + : PrecompiledContract( + [=](bytesConstRef _in) -> bigint { + bigint s = _in.size(); + bigint b = _base; + bigint w = _word; + return b + (s + 31) / 32 * w; + }, + _exec, _startingBlock) + {} + + bigint cost(bytesConstRef _in) const { return m_cost(_in); } + std::pair execute(bytesConstRef _in) const { return m_execute(_in); } + + u256 const& startingBlock() const { return m_startingBlock; } + +private: + PrecompiledPricer m_cost; + PrecompiledExecutor m_execute; + u256 m_startingBlock = 0; +}; + +} // namespace executor +namespace precompiled +{ +struct PrecompiledExecResult; +class PrecompiledGasFactory; +class Precompiled : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using PrecompiledParams = + std::function& executive, + PrecompiledExecResult::Ptr const& callParameters)>; + + Precompiled(crypto::Hash::Ptr _hashImpl) : m_hashImpl(std::move(_hashImpl)) + { + assert(m_hashImpl); + m_precompiledGasFactory = std::make_shared(); + assert(m_precompiledGasFactory); + } + virtual ~Precompiled() = default; + + virtual std::shared_ptr call( + std::shared_ptr _executive, + PrecompiledExecResult::Ptr _callParameters) = 0; + virtual bool isParallelPrecompiled() { return false; } + + virtual std::vector getParallelTag(bytesConstRef, bool) { return {}; } + +protected: + std::map name2Selector; + std::unordered_map> + selector2Func; + crypto::Hash::Ptr m_hashImpl; + + void registerFunc(uint32_t _selector, PrecompiledParams _func, + protocol::BlockVersion _minVersion = protocol::BlockVersion::V3_0_VERSION) + { + selector2Func.insert({_selector, {_minVersion, std::move(_func)}}); + } + + template + void registerFuncF(uint32_t _selector, F _func, + protocol::BlockVersion _minVersion = protocol::BlockVersion::V3_0_VERSION) + { + selector2Func.insert( + {_selector, {_minVersion, [this](auto&& _executive, auto&& _callParameters) { + F(std::forward(_executive), + std::forward(_callParameters)); + }}}); + } + +protected: + std::shared_ptr m_precompiledGasFactory; +}; + +} // namespace precompiled + +namespace crypto +{ +// sha2 - sha256 replace Hash.h begin +h256 sha256(bytesConstRef _input) noexcept; + +h160 ripemd160(bytesConstRef _input); + +/// Calculates the compression function F used in the BLAKE2 cryptographic hashing algorithm +/// Throws exception in case input data has incorrect size. +/// @param _rounds the number of rounds +/// @param _stateVector the state vector - 8 unsigned 64-bit little-endian words +/// @param _t0, _t1 offset counters - unsigned 64-bit little-endian words +/// @param _lastBlock the final block indicator flag +/// @param _messageBlock the message block vector - 16 unsigned 64-bit little-endian words +/// @returns updated state vector with unchanged encoding (little-endian) +bytes blake2FCompression(uint32_t _rounds, bytesConstRef _stateVector, bytesConstRef _t0, + bytesConstRef _t1, bool _lastBlock, bytesConstRef _messageBlock); + +std::pair ecRecover(bytesConstRef _in); +} // namespace crypto +} // namespace bcos diff --git a/bcos-executor/src/vm/VMFactory.cpp b/bcos-executor/src/vm/VMFactory.cpp new file mode 100644 index 0000000..66b703a --- /dev/null +++ b/bcos-executor/src/vm/VMFactory.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory of vm + * @file VMFactory.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + + +#include "VMFactory.h" +#include "VMInstance.h" +#ifdef WITH_WASM +#include +#endif +#include + +namespace po = boost::program_options; + +namespace bcos::executor +{ + +/// The pointer to VMInstance create function in DLL VMInstance VM. +/// +/// This variable is only written once when processing command line arguments, +/// so access is thread-safe. + +// evmc_create_fn g_evmcCreateFn; + +VMInstance VMFactory::create(VMKind kind, evmc_revision revision, const crypto::HashType& codeHash, + bytes_view code, bool isCreate) +{ + switch (kind) + { +#ifdef WITH_WASM + case VMKind::BcosWasm: + return VMInstance{evmc_create_bcoswasm(), revision, code}; +#endif + // case VMKind::DLL: + // return VMInstance{g_evmcCreateFn()}; + case VMKind::evmone: + default: + { + if (isCreate) + { + return VMInstance{evmc_create_evmone(), revision, code}; + } + std::shared_ptr analysis{get(codeHash, revision)}; + if (!analysis) + { + analysis = std::make_shared( + evmone::advanced::analyze(revision, code)); + // analysis = std::make_shared( + // evmone::baseline::analyze(revision, code)); + put(codeHash, analysis, revision); + } + return VMInstance{analysis, revision, code}; + } + } +} + +std::shared_ptr VMFactory::get( + const crypto::HashType& key, evmc_revision revision) noexcept +{ + if (revision == m_revision) + { + std::unique_lock lock(m_cacheMutex); + auto analysis = m_cache.get(key); + lock.unlock(); + if (analysis) + { + return analysis.value(); + } + } + return nullptr; +} + +void VMFactory::put(const crypto::HashType& key, + const std::shared_ptr& analysis, + evmc_revision revision) noexcept +{ + if (revision != m_revision) + { + std::unique_lock l(m_cacheMutex); + m_cache.clear(); + } + m_revision = revision; + { + std::unique_lock l(m_cacheMutex); + m_cache.insert(key, analysis); + } +} + +} // namespace bcos::executor diff --git a/bcos-executor/src/vm/VMFactory.h b/bcos-executor/src/vm/VMFactory.h new file mode 100644 index 0000000..ed9f290 --- /dev/null +++ b/bcos-executor/src/vm/VMFactory.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory of vm + * @file VMFactory.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once +#include "../Common.h" +#include "VMInstance.h" +#include "bcos-crypto/interfaces/crypto/CommonType.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::executor +{ +size_t const c_EVMONE_CACHE_SIZE = 1024; + +class VMInstance; +enum class VMKind +{ + evmone, + BcosWasm, + DLL +}; + +class VMFactory +{ +public: + VMFactory(size_t cache_size = c_EVMONE_CACHE_SIZE) : m_cache(cache_size) {} + + /// Creates a VM instance of the kind provided. + VMInstance create(VMKind _kind, evmc_revision revision, const crypto::HashType& codeHash, + bytes_view code, bool isCreate = false); + + /// @brief Gets an anvanced EVM analysis from the cache. if not found return nullptr + std::shared_ptr get( + const crypto::HashType& key, evmc_revision revision) noexcept; + + // TODO: add lock for put + void put(const crypto::HashType& key, const std::shared_ptr& analysis, + evmc_revision revision) noexcept; + +private: + boost::compute::detail::lru_cache> + m_cache; + evmc_revision m_revision = EVMC_PARIS; + std::mutex m_cacheMutex; +}; +} // namespace bcos::executor diff --git a/bcos-executor/src/vm/VMInstance.cpp b/bcos-executor/src/vm/VMInstance.cpp new file mode 100644 index 0000000..ea2e95c --- /dev/null +++ b/bcos-executor/src/vm/VMInstance.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief c++ wrapper of vm + * @file VMInstance.cpp + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#include "VMInstance.h" + +#include "HostContext.h" +#include "evmone/advanced_analysis.hpp" +#include "evmone/advanced_execution.hpp" +#include + +using namespace std; +namespace bcos::executor +{ + +VMInstance::VMInstance(evmc_vm* instance, evmc_revision revision, bytes_view code) noexcept + : m_instance(instance), m_revision(revision), m_code(code) +{ + assert(m_instance != nullptr); + // the abi_version of intepreter is EVMC_ABI_VERSION when callback VMFactory::create() + assert(m_instance->abi_version == EVMC_ABI_VERSION); + + // Set the options. + if (m_instance->set_option) + { // baseline interpreter could not work with precompiled + m_instance->set_option(m_instance, "advanced", ""); // default is baseline interpreter + // m_instance->set_option(m_instance, "trace", ""); + // m_instance->set_option(m_instance, "cgoto", "no"); + } +} + +VMInstance::VMInstance( + std::shared_ptr analysis, evmc_revision revision, bytes_view code) noexcept + : m_analysis(std::move(analysis)), m_revision(revision), m_code(code) +{ + assert(m_analysis != nullptr); +} + +Result VMInstance::execute(HostContext& _hostContext, evmc_message* _msg) +{ + if (m_instance) + { + return Result(m_instance->execute(m_instance, _hostContext.interface, &_hostContext, + m_revision, _msg, m_code.data(), m_code.size())); + } + auto state = std::make_unique( + *_msg, m_revision, *_hostContext.interface, &_hostContext, m_code); + { // baseline + + // auto vm = evmc_create_evmone(); // baseline use the vm to get options + // return Result(evmone::baseline::execute(*static_cast(vm), *state, + // *m_analysis)); + } + // advanced, TODO: state also could be reused + + return Result(evmone::advanced::execute(*state, *m_analysis)); +} + +evmc_revision toRevision(VMSchedule const& _schedule) +{ + if (_schedule.enablePairs) + { + return EVMC_PARIS; + } + return EVMC_LONDON; +} +} // namespace bcos::executor diff --git a/bcos-executor/src/vm/VMInstance.h b/bcos-executor/src/vm/VMInstance.h new file mode 100644 index 0000000..a2c1542 --- /dev/null +++ b/bcos-executor/src/vm/VMInstance.h @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief c++ wrapper of vm + * @file VMInstance.h + * @author: xingqiangbai + * @date: 2021-05-24 + */ + +#pragma once +#include "../Common.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ + +using evmoneCodeAnalysis = evmone::advanced::AdvancedCodeAnalysis; +// using evmoneCodeAnalysis = evmone::baseline::CodeAnalysis; +class HostContext; +class Result : public evmc_result +{ +public: + explicit Result(evmc_result const& _result) : evmc_result(_result) {} + + ~Result() + { + if (release) + release(this); + } + + Result(Result&& _other) noexcept : evmc_result(_other) { _other.release = nullptr; } + + Result& operator=(Result&&) = delete; + Result(Result const&) = delete; + Result& operator=(Result const&) = delete; + + evmc_status_code status() const { return status_code; } + int64_t gasLeft() const { return gas_left; } + bytesConstRef output() const { return {output_data, output_size}; } +}; + + +/// Translate the VMSchedule to VMInstance-C revision. +evmc_revision toRevision(VMSchedule const& _schedule); + +/// The RAII wrapper for an VMInstance-C instance. +class VMInstance +{ +public: + explicit VMInstance(evmc_vm* instance, evmc_revision revision, bytes_view code) noexcept; + explicit VMInstance(std::shared_ptr analysis, evmc_revision revision, + bytes_view code) noexcept; + ~VMInstance() + { + if (m_instance) + { + m_instance->destroy(m_instance); + } + } + + VMInstance(VMInstance const&) = delete; + VMInstance& operator=(VMInstance) = delete; + + Result execute(HostContext& _hostContext, evmc_message* _msg); + Result execute(evmone::VM* vm,HostContext& _hostContext, evmc_message* _msg); + +private: + /// The VM instance created with VMInstance-C _create() function. + evmc_vm* m_instance = nullptr; + std::shared_ptr m_analysis = nullptr; + evmc_revision m_revision; + bytes_view m_code; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/src/vm/gas_meter/GasInjector.cpp b/bcos-executor/src/vm/gas_meter/GasInjector.cpp new file mode 100644 index 0000000..fede7de --- /dev/null +++ b/bcos-executor/src/vm/gas_meter/GasInjector.cpp @@ -0,0 +1,566 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file GasInjector.cpp + * @author xingqiangbai + * @date 20200921 + */ + +#ifdef WITH_WASM +#include "GasInjector.h" +#include "src/binary-reader-ir.h" +#include "src/binary-reader.h" +#include "src/binary-writer.h" +#include "src/cast.h" +#include "src/ir.h" +#include "src/stream.h" +#include +#include + +using namespace std; +using namespace wabt; + +#define METER_LOG(LEVEL) BCOS_LOG(LEVEL) << "[METER]" + +namespace bcos +{ +namespace wasm +{ +const char* const MODULE_NAME = "bcos"; +const char* const OUT_OF_GAS_NAME = "outOfGas"; +const char* const GLOBAL_GAS_NAME = "gas"; + +// write wasm will not use loc, so wrong loc doesn't matter +void GasInjector::InjectMeterExprList(ExprList* exprs, const ImportsInfo& info) +{ + auto insertPoint = exprs->begin(); + int64_t gasCost = 0; + auto subAndCheck = [&](ExprList::iterator loc) { + // sub + auto sub = MakeUnique(Opcode::I64Sub); + exprs->insert(loc, std::move(sub)); + auto set = MakeUnique(Var(info.globalGasIndex)); + exprs->insert(loc, std::move(set)); + // check if gas < 0, then call outOfGas + auto getGas = MakeUnique(Var(info.globalGasIndex)); + exprs->insert(loc, std::move(getGas)); + auto zero = MakeUnique(Const::I64(0)); + exprs->insert(loc, std::move(zero)); + auto i64le = MakeUnique(Opcode::I64LeS); + exprs->insert(loc, std::move(i64le)); + auto ifExpr = MakeUnique(); + ifExpr->true_.decl.has_func_type = false; + ifExpr->true_.decl.sig.param_types.clear(); + // ifExpr->true_.end_loc; + auto voidType = Type(Type::Void); + ifExpr->true_.decl.sig.result_types = voidType.GetInlineVector(); + auto outOfGas = MakeUnique(Var(info.gasFuncIndex)); + ifExpr->true_.exprs.insert(ifExpr->true_.exprs.begin(), std::move(outOfGas)); + exprs->insert(loc, std::move(ifExpr)); + }; + auto insertUseGasLogic = [&](ExprList::iterator loc, int64_t& gas, + ExprList::iterator current) -> ExprList::iterator { + if (gas > 0) + { + auto getGas = MakeUnique(Var(info.globalGasIndex)); + exprs->insert(loc, std::move(getGas)); + auto constGas = MakeUnique(Const::I64(gas)); + exprs->insert(loc, std::move(constGas)); + subAndCheck(loc); + gas = 0; + } + return ++current; + }; + auto isFloatOpcode = [](const Opcode& opcode) -> bool { +#ifdef WASM_FLOAT_ENABLE + return false; +#endif + uint32_t op = opcode.GetCode(); + if ((op >= 0x2A && op <= 0x2B) || (op >= 0x38 && op <= 0x39) || + (op >= 0x43 && op <= 0x44) || (op >= 0x5B && op <= 0x66) || + (op >= 0x8B && op <= 0xA6) || (op >= 0xB2 && op <= 0xBF)) + { + METER_LOG(DEBUG) << LOG_BADGE("float instruction") << LOG_KV("name", opcode.GetName()) + << LOG_KV("instruction", opcode.GetCode()); + return true; + } + return false; + }; + for (auto it = exprs->begin(); it != exprs->end(); ++it) + { + switch (it->type()) + { + case ExprType::Binary: + { // float op throw exception + auto& op = cast(&*it)->opcode; + if (op.HasPrefix()) + { + METER_LOG(WARNING) << LOG_BADGE("instruction has perfix"); + } + if (isFloatOpcode(op)) + { + METER_LOG(WARNING) << LOG_BADGE("invalid Binary instruction") + << LOG_KV("instruction", op.GetName()); + throw InvalidInstruction(op.GetName(), ((Expr*)(&*it))->loc.offset); + } + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::Block: + { + auto& block = cast(&*it)->block; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + InjectMeterExprList(&block.exprs, info); + break; + } + case ExprType::Br: + { + gasCost += m_costTable[Instruction::Enum::Br].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::BrIf: + { + gasCost += m_costTable[Instruction::Enum::BrIf].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::BrTable: + { + gasCost += m_costTable[Instruction::Enum::BrTable].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::Call: + { + auto& var = cast(&*it)->var; + if (var.index() >= info.originSize && !info.foundGasFunction) + { // add outOfGas import, so update call func index + var.set_index(var.index() + 1); + } + + gasCost += m_costTable[Instruction::Enum::Call].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::CallIndirect: + { + gasCost += m_costTable[Instruction::Enum::CallIndirect].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::Compare: + { // float op throw exception + auto& op = cast(&*it)->opcode; + if (isFloatOpcode(op)) + { + METER_LOG(WARNING) << LOG_BADGE("invalid Compare instruction") + << LOG_KV("instruction", op.GetName()); + throw InvalidInstruction(op.GetName(), ((Expr*)(&*it))->loc.offset); + } + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::Const: + { + auto& constValue = cast(&*it)->const_; + if (constValue.type() == Type::I32) + { + gasCost += m_costTable[Instruction::Enum::I32Const].Cost; + } + else if (constValue.type() == Type::I64) + { + gasCost += m_costTable[Instruction::Enum::I64Const].Cost; + } + else + { +#ifndef WASM_FLOAT_ENABLE + METER_LOG(WARNING) << LOG_BADGE("invalid Const instruction"); + throw InvalidInstruction(constValue.type() == Type::F32 ? "f32.const" : "f64.const", + ((Expr*)(&*it))->loc.offset); +#endif + } + + break; + } + case ExprType::Convert: + { // float op throw exception + auto& op = cast(&*it)->opcode; + if (isFloatOpcode(op)) + { + METER_LOG(WARNING) << LOG_BADGE("invalid Convert instruction") + << LOG_KV("instruction", op.GetName()); + throw InvalidInstruction(op.GetName(), ((Expr*)(&*it))->loc.offset); + } + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::Drop: + { + gasCost += m_costTable[Instruction::Enum::Drop].Cost; + break; + } + case ExprType::GlobalGet: + { + auto& var = cast(&*it)->var; + // add globalGas import, so update global index + var.set_index(var.index() + 1); + gasCost += m_costTable[Instruction::Enum::GlobalGet].Cost; + break; + } + case ExprType::GlobalSet: + { + auto& var = cast(&*it)->var; + // add globalGas import, so update global index + var.set_index(var.index() + 1); + gasCost += m_costTable[Instruction::Enum::GlobalSet].Cost; + break; + } + case ExprType::If: + { + auto ifExpr = cast(&*it); + InjectMeterExprList(&ifExpr->true_.exprs, info); + if (!ifExpr->false_.empty()) + { + gasCost += m_costTable[Instruction::Enum::Else].Cost; + InjectMeterExprList(&ifExpr->false_, info); + } + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::Load: + { + auto& op = cast(&*it)->opcode; + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::LocalGet: + { + gasCost += m_costTable[Instruction::Enum::LocalGet].Cost; + break; + } + case ExprType::LocalSet: + { + gasCost += m_costTable[Instruction::Enum::LocalSet].Cost; + break; + } + case ExprType::LocalTee: + { + gasCost += m_costTable[Instruction::Enum::LocalTee].Cost; + break; + } + case ExprType::Loop: + { + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + auto& block = cast(&*it)->block; + InjectMeterExprList(&block.exprs, info); + break; + } + case ExprType::MemoryGrow: + { +#if 0 +// TODO: memoryGrow is not charged for now + auto localTee = MakeUnique(Var(info.tempVarForMemoryGasIndex)); + exprs->insert(it, std::move(localTee)); + auto getGas = MakeUnique(Var(info.globalGasIndex)); + exprs->insert(it, std::move(getGas)); + auto localGet = MakeUnique(Var(info.tempVarForMemoryGasIndex)); + exprs->insert(it, std::move(localGet)); + auto constGas = + MakeUnique(Const::I32(m_costTable[Instruction::Enum::MemoryGrow].Cost)); + exprs->insert(it, std::move(constGas)); + auto mul = MakeUnique(Opcode::I32Mul); + exprs->insert(it, std::move(mul)); + auto i64Convert = MakeUnique(Opcode::I64ExtendI32S); + exprs->insert(it, std::move(i64Convert)); + subAndCheck(it); +#endif + break; + } + case ExprType::MemorySize: + { + gasCost += m_costTable[Instruction::Enum::MemorySize].Cost; + break; + } + case ExprType::Nop: + { + gasCost += m_costTable[Instruction::Enum::Nop].Cost; + break; + } + case ExprType::Return: + { + gasCost += m_costTable[Instruction::Enum::Return].Cost; + insertPoint = insertUseGasLogic(insertPoint, gasCost, it); + break; + } + case ExprType::Select: + { + gasCost += m_costTable[Instruction::Enum::Select].Cost; + break; + } + case ExprType::Store: + { + auto& op = cast(&*it)->opcode; + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::Unary: + { + auto& op = cast(&*it)->opcode; + if (isFloatOpcode(op)) + { + METER_LOG(WARNING) << LOG_BADGE("invalid Unary instruction") + << LOG_KV("instruction", op.GetName()); + throw InvalidInstruction(op.GetName(), ((Expr*)(&*it))->loc.offset); + } + gasCost += m_costTable[op.GetCode()].Cost; + break; + } + case ExprType::Unreachable: + { + gasCost += m_costTable[Instruction::Enum::Unreachable].Cost; + break; + } + case ExprType::AtomicLoad: + case ExprType::AtomicRmw: + case ExprType::AtomicRmwCmpxchg: + case ExprType::AtomicStore: + case ExprType::AtomicNotify: + case ExprType::AtomicFence: + case ExprType::AtomicWait: + case ExprType::MemoryCopy: + case ExprType::DataDrop: + case ExprType::MemoryFill: + case ExprType::MemoryInit: + case ExprType::RefIsNull: + case ExprType::RefFunc: + case ExprType::RefNull: + case ExprType::Rethrow: + case ExprType::ReturnCall: + case ExprType::ReturnCallIndirect: + // case ExprType::SimdLaneOp: + // case ExprType::SimdShuffleOp: + case ExprType::LoadSplat: + case ExprType::TableCopy: + case ExprType::ElemDrop: + case ExprType::TableInit: + case ExprType::TableGet: + case ExprType::TableGrow: + case ExprType::TableSize: + case ExprType::TableSet: + case ExprType::TableFill: + case ExprType::Ternary: // v128.bitselect + case ExprType::Throw: + case ExprType::Try: + default: + { + METER_LOG(WARNING) << LOG_BADGE("unsupported instruction in MVP"); + throw InvalidInstruction( + m_costTable[Instruction::Enum::Unreachable].Name, ((Expr*)(&*it))->loc.offset); + break; + } + } + } + if (gasCost != 0) + { // should not happen + insertUseGasLogic(insertPoint, gasCost, insertPoint); + } +} + +GasInjector::Result GasInjector::InjectMeter(const std::vector& byteCode) +{ + GasInjector::Result injectResult; + // parse wasm use wabt + Errors errors; + Module module; + bool s_read_debug_names = false; + const bool kStopOnFirstError = true; + const bool kFailOnCustomSectionError = true; + ReadBinaryOptions options( + Features(), nullptr, s_read_debug_names, kStopOnFirstError, kFailOnCustomSectionError); + auto result = ReadBinaryIr("", byteCode.data(), byteCode.size(), options, &errors, &module); + if (!Succeeded(result)) + { + injectResult.status = Status::InvalidFormat; + return injectResult; + } +#if 0 + if (Succeeded(result)) { + ValidateOptions options(s_features); + result = ValidateModule(&module, &errors, options); + result |= GenerateNames(&module); + } + + if (Succeeded(result)) { + /* TODO(binji): This shouldn't fail; if a name can't be applied + * (because the index is invalid, say) it should just be skipped. */ + Result dummy_result = ApplyNames(&module); + WABT_USE(dummy_result); + } +#endif + // check if import outOfGas function + Index outOfGasIndex = 0; + bool foundGasFunction = false; + uint32_t originImportSize = module.imports.size(); + for (size_t i = 0; i < module.imports.size(); ++i) + { + const Import* import = module.imports[i]; + if (import->kind() == ExternalKind::Func && import->module_name == MODULE_NAME && + import->field_name == OUT_OF_GAS_NAME) + { + foundGasFunction = true; + outOfGasIndex = i; + } + } + if (!foundGasFunction) + { // import outOfGas + TypeVector params{}; + TypeVector result; + FuncSignature outOfGasSignature{params, result}; + Index sig_index = 0; + bool foundUseGasSignature = false; + for (size_t i = 0; i < module.types.size(); ++i) + { + if (module.types[i]->kind() == TypeEntryKind::Func) + { + const FuncType* func = cast(module.types[i]); + if (func->sig == outOfGasSignature) + { + foundUseGasSignature = true; + sig_index = i; + } + } + } + if (!foundUseGasSignature) + { // insert outOfGas type BinaryReaderIR::OnFuncType + auto field = MakeUnique(); + auto func_type = MakeUnique(); + func_type->sig.param_types = params; + func_type->sig.result_types = result; + field->type = std::move(func_type); + module.AppendField(std::move(field)); + sig_index = module.types.size() - 1; + } + // add outOfGas import + // BinaryReaderIR::OnImportFunc + auto import = MakeUnique(OUT_OF_GAS_NAME); + import->module_name = MODULE_NAME; + import->field_name = OUT_OF_GAS_NAME; + // import->func.decl.has_func_type = false; + import->func.decl.type_var = Var(sig_index); + import->func.decl.sig = outOfGasSignature; + // Module::AppendField, + // module.AppendField(MakeUnique(std::move(import))); + module.func_bindings.emplace(import->func.name, Binding(Location(), module.funcs.size())); + module.funcs.insert(module.funcs.begin(), &import->func); + ++module.num_func_imports; + module.imports.push_back(import.get()); + module.fields.push_back(MakeUnique(std::move(import))); + outOfGasIndex = originImportSize; + for (Export* exportItem : module.exports) + { + if (exportItem->kind == ExternalKind::Func) + { + exportItem->var.set_index(exportItem->var.index() + 1); + } + // cout << "Export:" << exportItem->name << ", type:" << (int)exportItem->kind + // << ", index:" << exportItem->var.index() << endl; + } + for (ElemSegment* elem : module.elem_segments) + { // ElemSegment has func indexes, so update it + for (auto& expr : elem->elem_exprs) + { + if (expr.var.index() >= outOfGasIndex) + { + expr.var.set_index(expr.var.index() + 1); + } + } + } + } + + // add global var gas + auto globalGas = MakeUnique(GLOBAL_GAS_NAME); + globalGas->module_name = MODULE_NAME; + globalGas->field_name = GLOBAL_GAS_NAME; + globalGas->global.name = GLOBAL_GAS_NAME; + globalGas->global.type = wabt::Type::I64; + globalGas->global.mutable_ = true; + auto zero = MakeUnique(Const::I64(0)); + globalGas->global.init_expr.push_back(std::move(zero)); + module.globals.insert(module.globals.begin(), &globalGas->global); + ++module.num_global_imports; + module.imports.push_back(globalGas.get()); + module.fields.push_back(MakeUnique(std::move(globalGas))); + // module.AppendField(MakeUnique(std::move(globalGas))); + + // set memory limit + auto memory = module.memories[0]; + if (memory->page_limits.initial < WASM_MEMORY_PAGES_INIT) + { + memory->page_limits.initial = WASM_MEMORY_PAGES_INIT; + } + memory->page_limits.max = WASM_MEMORY_PAGES_MAX; + memory->page_limits.has_max = true; + try + { + ImportsInfo info{foundGasFunction, outOfGasIndex, 0, 0, originImportSize}; + // FIXME: main and deploy of wasm should charge memory gas first + for (Func* func : module.funcs) + { // scan opcode and add meter logic + if (func->exprs.empty()) + { + continue; + } + Index tempVarIndex = func->GetNumParamsAndLocals(); + func->local_types.AppendDecl(Type::Enum::I32, 1); + info.tempVarForMemoryGasIndex = tempVarIndex; + // cout << "Func:" << func->name << ", type index:" << func->decl.type_var.index() + // << ", expr size:" << func->exprs.size() << ",info.tempVarForMemoryGasIndex:" << + // info.tempVarForMemoryGasIndex + // << "/" << func->local_types.size() << endl; + InjectMeterExprList(&func->exprs, info); + } + } + catch (const InvalidInstruction& e) + { + injectResult.status = Status::ForbiddenOpcode; + METER_LOG(WARNING) << LOG_BADGE("InjectMeter failed, because of invalid instruction") + << LOG_KV("message", e.ErrorMessage()); + return injectResult; + } + + WriteBinaryOptions writeOptions; + writeOptions.relocatable = false; + // writeOptions.canonicalize_lebs = false; +#if FISCO_DEBUG + FileStream log("wasm.log"); + MemoryStream memoryStream(&log); +#else + MemoryStream memoryStream; +#endif + WriteBinaryModule((wabt::Stream*)&memoryStream, &module, writeOptions); + + // return result + injectResult.status = Status::Success; + auto resultBytes = make_shared>(); + resultBytes->swap(memoryStream.output_buffer().data); + injectResult.byteCode = resultBytes; + return injectResult; +} + + +} // namespace wasm +} // namespace bcos +#endif \ No newline at end of file diff --git a/bcos-executor/src/vm/gas_meter/GasInjector.h b/bcos-executor/src/vm/gas_meter/GasInjector.h new file mode 100644 index 0000000..f0db1e4 --- /dev/null +++ b/bcos-executor/src/vm/gas_meter/GasInjector.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file GasInjector.h + * @author xingqiangbai + * @date 20200921 + */ +#ifdef WITH_WASM + +#pragma once +#include "Metric.h" +#include +#include +#include +#include + +namespace wabt +{ +class Expr; +template +class intrusive_list; +using ExprList = intrusive_list; +} // namespace wabt +namespace bcos::wasm +{ +const uint64_t WASM_MEMORY_PAGES_INIT = 16; +const uint64_t WASM_MEMORY_PAGES_MAX = 1024; +class GasInjector +{ +public: + class InvalidInstruction : std::exception + { + public: + InvalidInstruction(const std::string& _opName, uint32_t _loc) + : m_opName(_opName), m_location(_loc){}; + InvalidInstruction(const char* _opName, uint32_t _loc) + : m_opName(_opName), m_location(_loc){}; + std::string ErrorMessage() const noexcept + { + return "Unsupported opcode " + m_opName + ", location:" + std::to_string(m_location); + } + + private: + std::string m_opName; + uint32_t m_location; + }; + enum Status + { + Success = 0, + InvalidFormat = 1, + ForbiddenOpcode = 2, + }; + struct Result + { + Status status; + std::shared_ptr> byteCode; + }; + GasInjector(InstructionTable costTable) : m_costTable(std::move(costTable)) {} + + Result InjectMeter(const std::vector& byteCode); + +private: + struct ImportsInfo + { + bool foundGasFunction = false; + uint32_t gasFuncIndex{}; + uint32_t globalGasIndex{}; + uint32_t tempVarForMemoryGasIndex{}; + uint32_t originSize{}; + }; + void InjectMeterExprList(wabt::ExprList* exprs, const ImportsInfo& info); + const InstructionTable m_costTable; +}; +} // namespace bcos::wasm + +#endif \ No newline at end of file diff --git a/bcos-executor/src/vm/gas_meter/Metric.cpp b/bcos-executor/src/vm/gas_meter/Metric.cpp new file mode 100644 index 0000000..51c586a --- /dev/null +++ b/bcos-executor/src/vm/gas_meter/Metric.cpp @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file Metric.cpp + * @author xingqiangbai + * @date 20200921 + */ +#ifdef WITH_WASM +#include "Metric.h" +#include + +namespace bcos +{ +namespace wasm +{ +InstructionTable GetInstructionTable() +{ + auto defaultInstructionTable = InstructionTable{}; +#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, text, decomp) \ + defaultInstructionTable[Instruction::Enum::Name] = \ + Instruction{text, code, std::numeric_limits::max()}; +#include "src/opcode.def" +#undef WABT_OPCODE + // Only allow instructions in wasm v1.0 standard + // https://www.w3.org/TR/2019/REC-wasm-core-1-20191205/ + // http://webassembly.org.cn/docs/binary-encoding/ + + // Registers + defaultInstructionTable[Instruction::Enum::LocalGet].Cost = 3; + defaultInstructionTable[Instruction::Enum::LocalSet].Cost = 3; + defaultInstructionTable[Instruction::Enum::LocalTee].Cost = 3; + defaultInstructionTable[Instruction::Enum::GlobalGet].Cost = 3; + defaultInstructionTable[Instruction::Enum::GlobalSet].Cost = 3; + + // Memory + defaultInstructionTable[Instruction::Enum::I32Load].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Load8S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Load8U].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Load16S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Load16U].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load8S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load8U].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load16S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load16U].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load32S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Load32U].Cost = 3; + + defaultInstructionTable[Instruction::Enum::I32Store].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Store8].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Store16].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Store].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Store8].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Store16].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Store32].Cost = 3; + + defaultInstructionTable[Instruction::Enum::MemorySize].Cost = 3; + defaultInstructionTable[Instruction::Enum::MemoryGrow].Cost = 5 * 64 * 1024; + + // Flow Control + defaultInstructionTable[Instruction::Enum::Unreachable].Cost = 0; + defaultInstructionTable[Instruction::Enum::Nop].Cost = 0; + defaultInstructionTable[Instruction::Enum::Block].Cost = 0; + defaultInstructionTable[Instruction::Enum::Loop].Cost = 0; + defaultInstructionTable[Instruction::Enum::If].Cost = 0; + defaultInstructionTable[Instruction::Enum::Else].Cost = 2; + // defaultInstructionTable[Instruction::Enum::Try].Cost = 0; + // defaultInstructionTable[Instruction::Enum::Catch].Cost = 0; + // defaultInstructionTable[Instruction::Enum::Throw].Cost = 0; + // defaultInstructionTable[Instruction::Enum::Rethrow].Cost = 0; + // defaultInstructionTable[Instruction::Enum::BrOnExn].Cost = 0; + defaultInstructionTable[Instruction::Enum::End].Cost = 0; + defaultInstructionTable[Instruction::Enum::Br].Cost = 2; + defaultInstructionTable[Instruction::Enum::BrIf].Cost = 3; + defaultInstructionTable[Instruction::Enum::BrTable].Cost = 2; + defaultInstructionTable[Instruction::Enum::Return].Cost = 2; + + // Calls + defaultInstructionTable[Instruction::Enum::Call].Cost = 3; + defaultInstructionTable[Instruction::Enum::CallIndirect].Cost = 2; + // defaultInstructionTable[Instruction::Enum::ReturnCall].Cost = 2; + // defaultInstructionTable[Instruction::Enum::ReturnCallIndirect].Cost = 2; + + // Constants + defaultInstructionTable[Instruction::Enum::I32Const].Cost = 0; + defaultInstructionTable[Instruction::Enum::I64Const].Cost = 0; + + // 32-bit Integer operators + defaultInstructionTable[Instruction::Enum::I32Clz].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32Ctz].Cost = 6; + defaultInstructionTable[Instruction::Enum::I32Popcnt].Cost = 3; + + defaultInstructionTable[Instruction::Enum::I32Add].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Sub].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Mul].Cost = 3; + defaultInstructionTable[Instruction::Enum::I32DivS].Cost = 80; + defaultInstructionTable[Instruction::Enum::I32DivU].Cost = 80; + defaultInstructionTable[Instruction::Enum::I32RemS].Cost = 80; + defaultInstructionTable[Instruction::Enum::I32RemU].Cost = 80; + defaultInstructionTable[Instruction::Enum::I32And].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Or].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Xor].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Shl].Cost = 2; + defaultInstructionTable[Instruction::Enum::I32ShrS].Cost = 2; + defaultInstructionTable[Instruction::Enum::I32ShrU].Cost = 2; + defaultInstructionTable[Instruction::Enum::I32Rotl].Cost = 2; + defaultInstructionTable[Instruction::Enum::I32Rotr].Cost = 2; + defaultInstructionTable[Instruction::Enum::I32Eqz].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Eq].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32Ne].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32LtS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32LtU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32GtS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32GtU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32LeS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32LeU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32GeS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I32GeU].Cost = 1; + + // 64-bit Integer operators + defaultInstructionTable[Instruction::Enum::I64Clz].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64Ctz].Cost = 6; + defaultInstructionTable[Instruction::Enum::I64Popcnt].Cost = 3; + + defaultInstructionTable[Instruction::Enum::I64Add].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Sub].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Mul].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64DivS].Cost = 80; + defaultInstructionTable[Instruction::Enum::I64DivU].Cost = 80; + defaultInstructionTable[Instruction::Enum::I64RemS].Cost = 80; + defaultInstructionTable[Instruction::Enum::I64RemU].Cost = 80; + defaultInstructionTable[Instruction::Enum::I64And].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Or].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Xor].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Shl].Cost = 2; + defaultInstructionTable[Instruction::Enum::I64ShrS].Cost = 2; + defaultInstructionTable[Instruction::Enum::I64ShrU].Cost = 2; + defaultInstructionTable[Instruction::Enum::I64Rotl].Cost = 2; + defaultInstructionTable[Instruction::Enum::I64Rotr].Cost = 2; + defaultInstructionTable[Instruction::Enum::I64Eqz].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Eq].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64Ne].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64LtS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64LtU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64GtS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64GtU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64LeS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64LeU].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64GeS].Cost = 1; + defaultInstructionTable[Instruction::Enum::I64GeU].Cost = 1; + + // Datatype conversions + defaultInstructionTable[Instruction::Enum::I32WrapI64].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64ExtendI32S].Cost = 3; + defaultInstructionTable[Instruction::Enum::I64ExtendI32U].Cost = 3; + +#ifdef WASM_FLOAT_ENABLE + // 32-bit Float operators + // TODO: the price need to reconsider carefully, for now it make no sense + defaultInstructionTable[Instruction::Enum::F32Load].Cost = 3; + defaultInstructionTable[Instruction::Enum::F32Store].Cost = 3; + defaultInstructionTable[Instruction::Enum::F32Const].Cost = 0; + + defaultInstructionTable[Instruction::Enum::F32Eq].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Ne].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Lt].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Gt].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Le].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Ge].Cost = 1; + + defaultInstructionTable[Instruction::Enum::F32Abs].Cost = 3; + defaultInstructionTable[Instruction::Enum::F32Neg].Cost = 6; + defaultInstructionTable[Instruction::Enum::F32Ceil].Cost = 3; + + defaultInstructionTable[Instruction::Enum::F32Floor].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Trunc].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Nearest].Cost = 3; + defaultInstructionTable[Instruction::Enum::F32Sqrt].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32Add].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32Sub].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32Mul].Cost = 3; + defaultInstructionTable[Instruction::Enum::F32Div].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32Min].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32Max].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32Copysign].Cost = 80; + + defaultInstructionTable[Instruction::Enum::F32ConvertI32S].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32ConvertI32U].Cost = 80; + defaultInstructionTable[Instruction::Enum::F32ConvertI64S].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32ConvertI64U].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32DemoteF64].Cost = 1; + defaultInstructionTable[Instruction::Enum::F32ReinterpretI32].Cost = 2; + + // 64-bit Float operators + defaultInstructionTable[Instruction::Enum::F64Load].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Store].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Const].Cost = 0; + + defaultInstructionTable[Instruction::Enum::F64Eq].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Ne].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Lt].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Gt].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Le].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Ge].Cost = 1; + + defaultInstructionTable[Instruction::Enum::F64Abs].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Neg].Cost = 6; + defaultInstructionTable[Instruction::Enum::F64Ceil].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Floor].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Trunc].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Nearest].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Sqrt].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64Add].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64Sub].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64Mul].Cost = 3; + defaultInstructionTable[Instruction::Enum::F64Div].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64Min].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64Max].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64Copysign].Cost = 80; + + defaultInstructionTable[Instruction::Enum::F64ConvertI32S].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64ConvertI32U].Cost = 80; + defaultInstructionTable[Instruction::Enum::F64ConvertI64S].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64ConvertI64U].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64PromoteF32].Cost = 1; + defaultInstructionTable[Instruction::Enum::F64ReinterpretI64].Cost = 2; +#endif + + // Type-parametric operators + defaultInstructionTable[Instruction::Enum::Drop].Cost = 3; + defaultInstructionTable[Instruction::Enum::Select].Cost = 3; + + return defaultInstructionTable; +} + +} // namespace wasm +} // namespace bcos +#endif \ No newline at end of file diff --git a/bcos-executor/src/vm/gas_meter/Metric.h b/bcos-executor/src/vm/gas_meter/Metric.h new file mode 100644 index 0000000..86d3a9a --- /dev/null +++ b/bcos-executor/src/vm/gas_meter/Metric.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file Metric.h + * @author xingqiangbai + * @date 20200921 + */ +#pragma once +#include +#include + +// #define WASM_FLOAT_ENABLE +namespace bcos +{ +namespace wasm +{ +struct Instruction +{ + std::string Name; + uint8_t Opcode; + uint32_t Cost; + // Instruction() = default; + + enum Enum : uint32_t + { +#define WABT_OPCODE(rtype, type1, type2, type3, mem_size, prefix, code, Name, text, decomp) \ + Name = code, +#include "src/opcode.def" +#undef WABT_OPCODE + }; +}; + +using InstructionTable = std::array; + +InstructionTable GetInstructionTable(); + +} // namespace wasm +} // namespace bcos diff --git a/bcos-executor/test/CMakeLists.txt b/bcos-executor/test/CMakeLists.txt new file mode 100644 index 0000000..ee56ed0 --- /dev/null +++ b/bcos-executor/test/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(unittest) \ No newline at end of file diff --git a/bcos-executor/test/flow-graph/CMakeLists.txt b/bcos-executor/test/flow-graph/CMakeLists.txt new file mode 100644 index 0000000..c55fc8b --- /dev/null +++ b/bcos-executor/test/flow-graph/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(flow-graph-test main.cpp) +target_include_directories(flow-graph-test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../src/dag/) +target_link_libraries(flow-graph-test PUBLIC executor TBB::tbb) + diff --git a/bcos-executor/test/flow-graph/main.cpp b/bcos-executor/test/flow-graph/main.cpp new file mode 100644 index 0000000..c567f90 --- /dev/null +++ b/bcos-executor/test/flow-graph/main.cpp @@ -0,0 +1,81 @@ +#include "../../src/dag/CriticalFields.h" +#include "../../src/dag/TxDAG2.h" +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::executor::critical; +using namespace tbb::flow; + +using Critical = vector>; + +CriticalFieldsInterface::Ptr makeCriticals(int _totalTx) +{ + Critical originMap = {{"111"}, {"222"}, {"333"}, {"444"}, {"555"}, {"666"}, {"777"}, {"888"}, + {"999"}, {"101"}, {"102"}, {"103"}, {"104"}, {"105"}, {"106"}, {"107"}, {"108"}, {"109"}, + {"120"}, {"121"}, {"122"}, {"123"}, {"124"}, {"125"}}; + CriticalFields::Ptr criticals = make_shared>(_totalTx); + for (int i = 0; i < _totalTx; i++) + { + int rand1 = random() % originMap.size(); + int rand2 = random() % originMap.size(); + vector> critical = {{originMap[rand1]}, {originMap[rand2]}}; + criticals->put(i, make_shared::CriticalField>(std::move(critical))); + /* + stringstream ss; + ss << i; + res.push_back({string(ss.str())}); + */ + } + return criticals; +} + +void testTxDAG( + CriticalFieldsInterface::Ptr criticals, shared_ptr _txDag, string name) +{ + auto startTime = utcSteadyTime(); + cout << endl << name << " test start" << endl; + _txDag->init(criticals, [&](ID id) { + if (id % 100000 == 0) + { + std::cout << " [" << id << "] "; + } + }); + auto initTime = utcSteadyTime(); + try + { + _txDag->run(8); + } + catch (exception& e) + { + std::cout << "Exception" << boost::diagnostic_information(e) << std::endl; + } + auto endTime = utcSteadyTime(); + cout << endl + << name << " cost(ms): initDAG=" << initTime - startTime << " run=" << endTime - initTime + << " total=" << endTime - startTime << endl; +} + +int main(int argc, const char* argv[]) +{ + (void)argc; + + int _totalTx = stoi(argv[1]); + + auto criticals = makeCriticals(_totalTx); + + shared_ptr txDag = make_shared(); + testTxDAG(criticals, txDag, "TxDAG"); + + shared_ptr txDag2 = make_shared(); + testTxDAG(criticals, txDag2, "flowGraph"); + + shared_ptr txDag3 = make_shared(); + testTxDAG(criticals, txDag3, "TxDAG"); + + shared_ptr txDag4 = make_shared(); + testTxDAG(criticals, txDag4, "flowGraph"); + + return 0; +} \ No newline at end of file diff --git a/bcos-executor/test/liquid/hello_world.h b/bcos-executor/test/liquid/hello_world.h new file mode 100644 index 0000000..a33bf8a --- /dev/null +++ b/bcos-executor/test/liquid/hello_world.h @@ -0,0 +1,894 @@ +#pragma once + +constexpr unsigned char hello_world_wasm[] = { + 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x46, 0x0c, 0x60, + 0x02, 0x7f, 0x7f, 0x00, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, + 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, + 0x7f, 0x7f, 0x7f, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x01, 0x7f, 0x60, + 0x05, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x60, 0x01, 0x7f, 0x01, 0x7f, + 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f, + 0x01, 0x7f, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7e, 0x02, 0x6b, 0x06, 0x04, + 0x62, 0x63, 0x6f, 0x73, 0x06, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x00, + 0x00, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0a, 0x67, 0x65, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x00, 0x03, 0x04, 0x62, 0x63, 0x6f, 0x73, + 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x00, 0x00, 0x04, 0x62, 0x63, + 0x6f, 0x73, 0x0a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x00, 0x04, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0f, 0x67, 0x65, 0x74, + 0x43, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, + 0x00, 0x06, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0b, 0x67, 0x65, 0x74, 0x43, + 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x00, 0x01, 0x03, 0x37, 0x36, + 0x01, 0x01, 0x00, 0x02, 0x02, 0x02, 0x01, 0x00, 0x02, 0x09, 0x02, 0x00, + 0x00, 0x02, 0x04, 0x01, 0x04, 0x04, 0x07, 0x0a, 0x0b, 0x01, 0x00, 0x08, + 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x05, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x02, 0x05, 0x01, 0x00, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, + 0x02, 0x03, 0x01, 0x02, 0x00, 0x03, 0x05, 0x03, 0x01, 0x00, 0x11, 0x06, + 0x09, 0x01, 0x7f, 0x01, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x0b, 0x07, 0x26, + 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x09, 0x68, + 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x00, 0x24, 0x06, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x00, 0x25, 0x04, 0x6d, 0x61, 0x69, 0x6e, + 0x00, 0x2c, 0x0a, 0xc0, 0x4e, 0x36, 0x33, 0x01, 0x01, 0x7f, 0x20, 0x00, + 0x10, 0x07, 0x20, 0x00, 0x41, 0x14, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, + 0x47, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x10, 0x22, 0x01, 0x28, 0x02, + 0x00, 0x04, 0x7f, 0x20, 0x01, 0x10, 0x07, 0x20, 0x00, 0x28, 0x02, 0x10, + 0x05, 0x20, 0x01, 0x0b, 0x41, 0x0c, 0x10, 0x08, 0x0b, 0x0b, 0x26, 0x01, + 0x01, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x00, 0x20, + 0x00, 0x28, 0x02, 0x04, 0x22, 0x00, 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x00, 0x10, 0x08, 0x0b, + 0x0b, 0x85, 0x02, 0x01, 0x03, 0x7f, 0x20, 0x00, 0x04, 0x40, 0x20, 0x01, + 0x20, 0x01, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x4d, 0x41, 0x00, 0x20, 0x03, + 0x41, 0x01, 0x6b, 0x20, 0x03, 0x4d, 0x1b, 0x45, 0x04, 0x40, 0x00, 0x0b, + 0x41, 0xe4, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x21, 0x03, 0x20, 0x00, + 0x41, 0x08, 0x6b, 0x22, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x04, + 0x41, 0x7e, 0x71, 0x36, 0x02, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, + 0x41, 0x7c, 0x71, 0x22, 0x02, 0x20, 0x00, 0x6b, 0x20, 0x02, 0x4d, 0x04, + 0x40, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x6b, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x45, 0x0d, 0x01, + 0x20, 0x02, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x0d, 0x01, 0x20, 0x01, + 0x10, 0x38, 0x20, 0x02, 0x28, 0x02, 0x00, 0x21, 0x00, 0x20, 0x01, 0x2d, + 0x00, 0x00, 0x41, 0x02, 0x71, 0x04, 0x40, 0x20, 0x02, 0x20, 0x00, 0x41, + 0x02, 0x72, 0x22, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x21, 0x01, + 0x20, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x00, 0x20, 0x02, 0x6b, 0x41, 0x08, + 0x6b, 0x20, 0x00, 0x4d, 0x0d, 0x02, 0x0b, 0x00, 0x0b, 0x02, 0x40, 0x20, + 0x04, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, + 0x02, 0x20, 0x04, 0x41, 0x02, 0x71, 0x1b, 0x22, 0x02, 0x45, 0x0d, 0x00, + 0x20, 0x02, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x0d, 0x00, 0x20, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x08, 0x41, 0x7c, 0x71, 0x36, 0x02, 0x00, 0x20, + 0x02, 0x20, 0x01, 0x41, 0x01, 0x72, 0x36, 0x02, 0x08, 0x20, 0x03, 0x21, + 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, + 0x41, 0xe4, 0x82, 0xc0, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x0b, 0x0b, + 0x48, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x20, 0x02, + 0x41, 0x01, 0x6b, 0x22, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x28, 0x02, + 0x08, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x10, 0x1a, 0x20, 0x01, 0x29, 0x03, + 0x00, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x14, 0x22, 0x03, 0x20, 0x02, 0x20, + 0x03, 0x6a, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x14, + 0x0c, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, + 0x0b, 0x46, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, + 0x24, 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x41, 0x00, 0x10, + 0x0b, 0x20, 0x03, 0x28, 0x02, 0x08, 0x21, 0x04, 0x20, 0x00, 0x20, 0x03, + 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, + 0x00, 0x20, 0x04, 0x20, 0x01, 0x20, 0x02, 0x10, 0x39, 0x20, 0x00, 0x20, + 0x02, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, + 0x66, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, + 0x00, 0x02, 0x40, 0x20, 0x01, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x02, 0x7f, + 0x20, 0x02, 0x45, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x01, + 0x10, 0x0d, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x21, 0x02, 0x20, 0x03, 0x28, + 0x02, 0x08, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x01, 0x41, 0x01, 0x10, + 0x0e, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x02, 0x20, 0x03, 0x28, 0x02, + 0x00, 0x0b, 0x22, 0x01, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x20, + 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, + 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x57, 0x01, 0x03, 0x7f, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x08, + 0x6a, 0x41, 0x04, 0x41, 0x00, 0x10, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x08, + 0x21, 0x02, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x21, 0x03, 0x20, 0x00, 0x41, + 0x14, 0x6a, 0x41, 0x02, 0x3a, 0x00, 0x00, 0x20, 0x00, 0x42, 0x04, 0x37, + 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x02, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0xee, 0xc2, 0xb5, 0xab, 0x06, + 0x36, 0x00, 0x00, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x33, + 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, + 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x0e, 0x20, + 0x00, 0x20, 0x02, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x4a, 0x01, 0x01, 0x7f, 0x41, 0x01, 0x21, 0x03, 0x02, + 0x40, 0x20, 0x01, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x01, 0x0c, 0x01, + 0x0b, 0x20, 0x01, 0x41, 0x01, 0x10, 0x0f, 0x21, 0x03, 0x02, 0x40, 0x20, + 0x02, 0x04, 0x40, 0x20, 0x03, 0x45, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, + 0x10, 0x3a, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x0d, 0x01, 0x0b, 0x41, 0x00, + 0x21, 0x03, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, + 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x9c, 0x01, 0x01, 0x02, 0x7f, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x4d, 0x04, 0x40, 0x20, 0x03, + 0x41, 0x01, 0x6b, 0x22, 0x00, 0x20, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x00, + 0x0b, 0x20, 0x00, 0x41, 0x02, 0x76, 0x21, 0x00, 0x20, 0x02, 0x41, 0xe4, + 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0x0c, 0x02, 0x40, 0x20, + 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x10, 0x37, 0x22, 0x03, + 0x0d, 0x00, 0x20, 0x02, 0x20, 0x00, 0x20, 0x01, 0x10, 0x36, 0x41, 0x00, + 0x21, 0x03, 0x20, 0x02, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x20, 0x02, 0x28, + 0x02, 0x04, 0x22, 0x03, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x08, + 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x0c, 0x20, 0x00, 0x20, 0x01, 0x20, + 0x02, 0x41, 0x0c, 0x6a, 0x10, 0x37, 0x21, 0x03, 0x0b, 0x41, 0xe4, 0x82, + 0xc0, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x00, 0x20, 0x02, + 0x41, 0x10, 0x6a, 0x24, 0x00, 0x20, 0x03, 0x0b, 0xd0, 0x01, 0x01, 0x03, + 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, + 0x02, 0x28, 0x02, 0x00, 0x22, 0x04, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, + 0x10, 0x0d, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x04, 0x20, 0x03, 0x28, + 0x02, 0x00, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, + 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x04, 0x22, 0x05, 0x45, 0x04, + 0x40, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x0e, + 0x20, 0x03, 0x28, 0x02, 0x0c, 0x21, 0x04, 0x20, 0x03, 0x28, 0x02, 0x08, + 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x10, 0x0f, 0x22, + 0x02, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, + 0x02, 0x20, 0x04, 0x20, 0x05, 0x10, 0x39, 0x20, 0x04, 0x20, 0x05, 0x10, + 0x08, 0x20, 0x01, 0x21, 0x04, 0x0b, 0x20, 0x00, 0x02, 0x7f, 0x20, 0x02, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x41, 0x00, 0x0c, + 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x41, 0x01, 0x21, + 0x04, 0x41, 0x01, 0x0b, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, + 0x20, 0x04, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0x52, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, 0x21, 0x04, 0x20, 0x02, + 0x41, 0x08, 0x6a, 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, 0x01, 0x41, 0x00, + 0x10, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, + 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x20, 0x03, 0x20, 0x04, 0x20, 0x01, 0x10, 0x39, 0x20, 0x00, + 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x0b, 0xa7, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, 0x00, 0x28, 0x02, 0x04, + 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x04, 0x6b, 0x4b, 0x04, + 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x22, 0x01, 0x20, 0x04, 0x49, 0x0d, + 0x01, 0x20, 0x03, 0x20, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x49, 0x0d, + 0x01, 0x20, 0x04, 0x20, 0x01, 0x20, 0x01, 0x20, 0x04, 0x49, 0x1b, 0x22, + 0x01, 0x41, 0x08, 0x20, 0x01, 0x41, 0x08, 0x4b, 0x1b, 0x21, 0x01, 0x02, + 0x40, 0x20, 0x03, 0x04, 0x40, 0x20, 0x02, 0x41, 0x18, 0x6a, 0x41, 0x01, + 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x14, 0x20, 0x02, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0x10, 0x0c, 0x01, 0x0b, 0x20, + 0x02, 0x41, 0x00, 0x36, 0x02, 0x10, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x20, + 0x02, 0x41, 0x10, 0x6a, 0x10, 0x10, 0x20, 0x02, 0x28, 0x02, 0x00, 0x41, + 0x01, 0x46, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, 0x29, 0x02, 0x04, 0x37, + 0x02, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0f, 0x0b, + 0x00, 0x0b, 0x32, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x02, 0x10, 0x12, + 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x00, + 0x6a, 0x20, 0x01, 0x20, 0x02, 0x10, 0x39, 0x20, 0x03, 0x20, 0x02, 0x20, + 0x03, 0x6a, 0x22, 0x01, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x20, + 0x01, 0x36, 0x02, 0x08, 0x0b, 0x14, 0x00, 0x20, 0x01, 0x20, 0x03, 0x46, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x20, 0x01, 0x10, 0x39, 0x0f, 0x0b, + 0x00, 0x0b, 0xc6, 0x01, 0x01, 0x04, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x0d, + 0x00, 0x20, 0x00, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x45, + 0x0d, 0x00, 0x20, 0x00, 0x45, 0x0d, 0x00, 0x0c, 0x01, 0x0b, 0x41, 0x00, + 0x21, 0x00, 0x0b, 0x03, 0x40, 0x02, 0x40, 0x41, 0x00, 0x20, 0x00, 0x04, + 0x7f, 0x20, 0x00, 0x0d, 0x01, 0x41, 0x00, 0x05, 0x41, 0x00, 0x0b, 0x22, + 0x00, 0x6b, 0x22, 0x02, 0x0d, 0x02, 0x20, 0x02, 0x45, 0x0d, 0x02, 0x20, + 0x00, 0x41, 0x88, 0x80, 0xc0, 0x00, 0x6a, 0x22, 0x00, 0x2c, 0x00, 0x00, + 0x22, 0x03, 0x41, 0x7f, 0x4a, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x02, 0x6a, + 0x22, 0x04, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, + 0x00, 0x2d, 0x00, 0x01, 0x1a, 0x20, 0x00, 0x41, 0x02, 0x6a, 0x21, 0x01, + 0x0b, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xe0, 0x01, 0x49, 0x0d, + 0x02, 0x20, 0x04, 0x22, 0x00, 0x20, 0x01, 0x47, 0x04, 0x7f, 0x20, 0x01, + 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x05, 0x41, + 0x00, 0x0b, 0x1a, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xf0, 0x01, + 0x49, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x04, 0x47, 0x04, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x1a, 0x0b, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x01, + 0x6b, 0x21, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xec, 0x01, + 0x01, 0x06, 0x7f, 0x41, 0x01, 0x21, 0x07, 0x41, 0x01, 0x21, 0x04, 0x03, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x22, 0x06, 0x20, + 0x05, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, + 0x04, 0x4d, 0x0d, 0x01, 0x20, 0x05, 0x20, 0x08, 0x6a, 0x22, 0x09, 0x20, + 0x08, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x09, 0x4d, 0x0d, 0x00, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, + 0x04, 0x20, 0x01, 0x20, 0x09, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x09, 0x4b, + 0x20, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x4f, 0x20, 0x03, + 0x72, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x46, 0x0d, 0x01, 0x20, + 0x06, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x02, 0x41, + 0x01, 0x21, 0x07, 0x41, 0x00, 0x21, 0x05, 0x20, 0x06, 0x21, 0x08, 0x0c, + 0x05, 0x0b, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, + 0x0d, 0x01, 0x20, 0x04, 0x20, 0x06, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, + 0x0d, 0x01, 0x20, 0x04, 0x20, 0x08, 0x6b, 0x22, 0x07, 0x20, 0x04, 0x4b, + 0x0d, 0x01, 0x0c, 0x03, 0x0b, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, + 0x22, 0x05, 0x4b, 0x0d, 0x00, 0x20, 0x06, 0x21, 0x04, 0x20, 0x05, 0x20, + 0x07, 0x47, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x04, 0x20, 0x07, 0x6a, 0x22, + 0x04, 0x4d, 0x0d, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x07, 0x36, + 0x02, 0x04, 0x20, 0x00, 0x20, 0x08, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x41, + 0x00, 0x21, 0x05, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x37, 0x01, 0x01, 0x7f, + 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x04, 0x24, 0x00, 0x20, 0x04, 0x41, + 0x08, 0x6a, 0x41, 0x00, 0x20, 0x03, 0x20, 0x01, 0x20, 0x02, 0x10, 0x18, + 0x20, 0x00, 0x20, 0x04, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x20, 0x04, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x04, 0x41, 0x10, + 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, 0x02, + 0x4d, 0x04, 0x40, 0x20, 0x02, 0x20, 0x04, 0x4d, 0x04, 0x40, 0x20, 0x02, + 0x20, 0x02, 0x20, 0x01, 0x6b, 0x22, 0x04, 0x49, 0x0d, 0x02, 0x20, 0x00, + 0x20, 0x04, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x20, 0x03, 0x6a, + 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xa0, + 0x02, 0x01, 0x07, 0x7f, 0x41, 0x01, 0x21, 0x09, 0x41, 0x01, 0x21, 0x04, + 0x03, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, + 0x22, 0x07, 0x20, 0x05, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x49, 0x0d, 0x00, + 0x20, 0x01, 0x20, 0x04, 0x4d, 0x0d, 0x03, 0x20, 0x07, 0x41, 0x01, 0x6a, + 0x22, 0x04, 0x20, 0x07, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x6a, + 0x22, 0x08, 0x20, 0x04, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x08, 0x6b, + 0x22, 0x08, 0x20, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x08, 0x4d, + 0x0d, 0x00, 0x20, 0x0a, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x0a, 0x49, + 0x0d, 0x00, 0x20, 0x06, 0x20, 0x05, 0x20, 0x06, 0x6a, 0x22, 0x06, 0x4b, + 0x0d, 0x00, 0x20, 0x01, 0x20, 0x06, 0x6b, 0x22, 0x06, 0x20, 0x01, 0x4b, + 0x0d, 0x00, 0x20, 0x01, 0x20, 0x06, 0x4d, 0x0d, 0x00, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x00, 0x20, 0x08, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x08, 0x20, + 0x00, 0x20, 0x06, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x06, 0x4b, 0x20, 0x03, + 0x71, 0x0d, 0x00, 0x20, 0x06, 0x20, 0x08, 0x4d, 0x20, 0x03, 0x72, 0x45, + 0x0d, 0x00, 0x20, 0x06, 0x20, 0x08, 0x46, 0x0d, 0x01, 0x41, 0x01, 0x21, + 0x09, 0x41, 0x00, 0x21, 0x05, 0x20, 0x07, 0x21, 0x0a, 0x0c, 0x04, 0x0b, + 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, 0x01, + 0x20, 0x04, 0x20, 0x07, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x49, 0x0d, 0x01, + 0x20, 0x04, 0x20, 0x0a, 0x6b, 0x22, 0x09, 0x20, 0x04, 0x4b, 0x0d, 0x01, + 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x05, + 0x4b, 0x0d, 0x00, 0x20, 0x05, 0x20, 0x09, 0x47, 0x04, 0x40, 0x20, 0x07, + 0x21, 0x04, 0x0c, 0x03, 0x0b, 0x20, 0x07, 0x20, 0x09, 0x6a, 0x22, 0x04, + 0x20, 0x07, 0x4f, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x41, 0x00, 0x21, 0x05, + 0x0b, 0x20, 0x02, 0x20, 0x09, 0x47, 0x0d, 0x01, 0x0b, 0x0b, 0x20, 0x0a, + 0x0b, 0x2b, 0x01, 0x01, 0x7e, 0x03, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, + 0x01, 0x41, 0x01, 0x6b, 0x21, 0x01, 0x42, 0x01, 0x20, 0x00, 0x31, 0x00, + 0x00, 0x86, 0x20, 0x02, 0x84, 0x21, 0x02, 0x20, 0x00, 0x41, 0x01, 0x6a, + 0x21, 0x00, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x02, 0x0b, 0x2a, 0x01, 0x01, + 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, + 0x20, 0x00, 0x10, 0x1c, 0x20, 0x01, 0x28, 0x02, 0x00, 0x20, 0x01, 0x28, + 0x02, 0x08, 0x10, 0x00, 0x20, 0x01, 0x10, 0x07, 0x20, 0x01, 0x41, 0x10, + 0x6a, 0x24, 0x00, 0x0b, 0xb7, 0x01, 0x02, 0x03, 0x7f, 0x01, 0x7e, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x04, + 0x20, 0x02, 0x4f, 0x04, 0x40, 0x20, 0x01, 0x28, 0x02, 0x00, 0x21, 0x01, + 0x20, 0x03, 0x20, 0x04, 0x41, 0x00, 0x10, 0x0b, 0x20, 0x03, 0x29, 0x03, + 0x00, 0x21, 0x05, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, + 0x20, 0x05, 0x37, 0x02, 0x00, 0x20, 0x02, 0x41, 0x3f, 0x4d, 0x04, 0x40, + 0x20, 0x00, 0x20, 0x02, 0x41, 0x02, 0x74, 0x10, 0x34, 0x0c, 0x03, 0x0b, + 0x20, 0x02, 0x41, 0xff, 0xff, 0x00, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x20, + 0x02, 0x41, 0x02, 0x74, 0x41, 0x01, 0x72, 0x3b, 0x01, 0x0e, 0x20, 0x00, + 0x20, 0x03, 0x41, 0x0e, 0x6a, 0x41, 0x02, 0x10, 0x13, 0x0c, 0x03, 0x0b, + 0x20, 0x02, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4b, 0x0d, 0x01, 0x20, + 0x02, 0x41, 0x02, 0x74, 0x41, 0x02, 0x72, 0x20, 0x00, 0x10, 0x35, 0x0c, + 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x03, 0x10, 0x34, 0x20, 0x02, + 0x20, 0x00, 0x10, 0x35, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, + 0x13, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x26, 0x00, 0x20, + 0x00, 0x10, 0x1e, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x22, 0x00, 0x2d, 0x00, + 0x04, 0x41, 0x02, 0x46, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x28, 0x02, + 0x00, 0x22, 0x00, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x1b, 0x0b, + 0xc7, 0x02, 0x02, 0x05, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x40, 0x6a, + 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x20, 0x00, 0x41, + 0x0c, 0x6a, 0x22, 0x04, 0x10, 0x1f, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, + 0x24, 0x22, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x01, 0x6b, 0x22, + 0x05, 0x20, 0x03, 0x4e, 0x0d, 0x00, 0x20, 0x01, 0x28, 0x02, 0x20, 0x2d, + 0x00, 0x04, 0x20, 0x02, 0x20, 0x05, 0x36, 0x02, 0x00, 0x41, 0x02, 0x46, + 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x03, 0x20, 0x00, 0x28, + 0x02, 0x00, 0x41, 0x00, 0x21, 0x02, 0x20, 0x01, 0x41, 0x18, 0x6a, 0x41, + 0x00, 0x41, 0xe8, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x10, 0x20, 0x20, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x18, 0x10, 0x01, 0x22, 0x00, 0x04, 0x40, + 0x20, 0x00, 0x41, 0x81, 0x80, 0x01, 0x4f, 0x0d, 0x02, 0x41, 0xe8, 0x82, + 0xc0, 0x00, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x10, 0x6a, + 0x20, 0x00, 0x10, 0x21, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x10, 0x21, 0x03, 0x20, 0x00, 0x20, 0x01, 0x28, 0x02, + 0x14, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, + 0x04, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, + 0x29, 0x03, 0x08, 0x37, 0x03, 0x38, 0x20, 0x01, 0x41, 0x28, 0x6a, 0x20, + 0x01, 0x41, 0x38, 0x6a, 0x10, 0x22, 0x20, 0x01, 0x29, 0x02, 0x2c, 0x21, + 0x06, 0x20, 0x01, 0x28, 0x02, 0x28, 0x21, 0x02, 0x0b, 0x20, 0x04, 0x22, + 0x00, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x7f, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x04, 0x20, 0x01, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, 0x28, 0x02, + 0x04, 0x21, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, 0x20, 0x01, 0x20, 0x06, + 0x37, 0x02, 0x2c, 0x20, 0x01, 0x20, 0x02, 0x36, 0x02, 0x28, 0x20, 0x01, + 0x41, 0x28, 0x6a, 0x10, 0x23, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x04, + 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x04, 0x48, 0x0d, 0x01, 0x20, 0x00, + 0x20, 0x02, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x40, 0x6b, 0x24, + 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x2d, 0x01, 0x01, 0x7f, 0x20, 0x01, 0x28, + 0x02, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x41, 0x00, 0x4c, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x01, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x36, + 0x02, 0x00, 0x0b, 0x3d, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x20, + 0x02, 0x4d, 0x04, 0x40, 0x20, 0x02, 0x41, 0x80, 0x80, 0x01, 0x4d, 0x04, + 0x40, 0x20, 0x02, 0x20, 0x02, 0x20, 0x01, 0x6b, 0x22, 0x03, 0x49, 0x0d, + 0x02, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, + 0x41, 0xec, 0x82, 0xc0, 0x00, 0x6a, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, + 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x4b, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, + 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x21, + 0x03, 0x20, 0x01, 0x41, 0x80, 0x80, 0x01, 0x4b, 0x04, 0x40, 0x00, 0x0b, + 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x03, 0x41, 0xec, 0x82, + 0xc0, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x08, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, + 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x8b, 0x09, 0x02, + 0x08, 0x7f, 0x03, 0x7e, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, + 0x00, 0x20, 0x03, 0x41, 0x00, 0x3a, 0x00, 0x08, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x7e, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x41, 0x01, 0x10, 0x31, 0x0d, + 0x00, 0x02, 0x40, 0x20, 0x03, 0x2d, 0x00, 0x08, 0x22, 0x02, 0x41, 0x03, + 0x71, 0x22, 0x04, 0x41, 0x03, 0x47, 0x04, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x04, 0x41, 0x01, 0x6b, 0x0e, 0x02, 0x02, 0x01, 0x00, + 0x0b, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, 0x02, 0x0c, 0x03, 0x0b, 0x20, + 0x03, 0x20, 0x02, 0x3a, 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, 0x00, + 0x0c, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x00, + 0x36, 0x02, 0x1c, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x1c, + 0x6a, 0x41, 0x04, 0x10, 0x33, 0x0d, 0x03, 0x20, 0x03, 0x28, 0x02, 0x1c, + 0x22, 0x02, 0x41, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x03, 0x20, 0x02, 0x41, + 0x02, 0x76, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x20, 0x02, 0x3a, + 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, 0x00, 0x0c, 0x20, 0x03, 0x20, + 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x00, 0x3b, 0x01, 0x1c, 0x20, + 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x1c, 0x6a, 0x41, 0x02, 0x10, + 0x33, 0x0d, 0x02, 0x20, 0x03, 0x2f, 0x01, 0x1c, 0x22, 0x02, 0x41, 0xff, + 0x01, 0x4d, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, 0x02, 0x0c, + 0x01, 0x0b, 0x20, 0x02, 0x41, 0x04, 0x4f, 0x0d, 0x01, 0x20, 0x03, 0x41, + 0x00, 0x36, 0x02, 0x08, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x41, + 0x04, 0x10, 0x31, 0x0d, 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, 0x22, 0x02, + 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x20, 0x01, + 0x28, 0x02, 0x04, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x02, 0x10, 0x30, 0x20, 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, + 0x22, 0x04, 0x20, 0x03, 0x28, 0x02, 0x10, 0x10, 0x31, 0x04, 0x40, 0x20, + 0x03, 0x41, 0x08, 0x6a, 0x10, 0x07, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x20, + 0x03, 0x29, 0x02, 0x0c, 0x22, 0x0c, 0x42, 0x20, 0x88, 0xa7, 0x22, 0x05, + 0x41, 0x07, 0x6b, 0x22, 0x01, 0x20, 0x01, 0x20, 0x05, 0x4b, 0x1b, 0x21, + 0x09, 0x20, 0x04, 0x41, 0x03, 0x6a, 0x41, 0x7c, 0x71, 0x20, 0x04, 0x6b, + 0x21, 0x08, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x01, 0x20, 0x05, + 0x4f, 0x0d, 0x07, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x20, + 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x06, 0x41, 0x18, 0x74, 0x41, 0x18, + 0x75, 0x22, 0x07, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, 0x08, 0x41, 0x7f, + 0x46, 0x0d, 0x03, 0x20, 0x08, 0x20, 0x01, 0x6b, 0x41, 0x03, 0x71, 0x0d, + 0x03, 0x03, 0x40, 0x20, 0x01, 0x20, 0x09, 0x4f, 0x0d, 0x03, 0x20, 0x01, + 0x20, 0x04, 0x6a, 0x22, 0x02, 0x41, 0x04, 0x6a, 0x28, 0x02, 0x00, 0x20, + 0x02, 0x28, 0x02, 0x00, 0x72, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, + 0x0d, 0x03, 0x20, 0x01, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x22, 0x01, 0x4d, + 0x0d, 0x00, 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, + 0x20, 0x21, 0x0a, 0x42, 0x80, 0x80, 0x80, 0x80, 0x10, 0x21, 0x0b, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x06, 0x41, + 0x88, 0x80, 0xc0, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x6b, 0x0e, + 0x03, 0x00, 0x02, 0x01, 0x0e, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, + 0x02, 0x20, 0x05, 0x49, 0x0d, 0x02, 0x42, 0x00, 0x21, 0x0a, 0x0c, 0x0c, + 0x0b, 0x42, 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, + 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, + 0x00, 0x21, 0x02, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, + 0x06, 0x41, 0xf0, 0x01, 0x6b, 0x0e, 0x05, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x0b, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, 0x07, + 0x41, 0x0f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x02, 0x4b, 0x0d, 0x0c, + 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, 0x0d, + 0x0c, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x41, 0xf0, 0x00, 0x6a, 0x41, 0xff, + 0x01, 0x71, 0x41, 0x30, 0x4f, 0x0d, 0x0b, 0x0c, 0x01, 0x0b, 0x20, 0x02, + 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x0a, 0x20, + 0x02, 0x41, 0x8f, 0x01, 0x4b, 0x0d, 0x0a, 0x0b, 0x20, 0x01, 0x41, 0x02, + 0x6a, 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, + 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, + 0x0d, 0x08, 0x42, 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, + 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0c, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, + 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x46, 0x0d, 0x02, + 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0, 0x00, 0x0c, 0x0a, 0x0b, 0x42, + 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x05, + 0x4f, 0x0d, 0x0a, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x21, + 0x02, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x06, 0x41, 0xe0, 0x01, + 0x47, 0x04, 0x40, 0x20, 0x06, 0x41, 0xed, 0x01, 0x46, 0x0d, 0x01, 0x20, + 0x07, 0x41, 0x1f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x0c, 0x49, 0x0d, + 0x02, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, 0x07, 0x41, + 0xfe, 0x01, 0x71, 0x41, 0xee, 0x01, 0x47, 0x0d, 0x0c, 0x20, 0x02, 0x41, + 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, 0x0d, 0x0c, 0x0c, 0x03, + 0x0b, 0x20, 0x02, 0x41, 0xe0, 0x01, 0x71, 0x41, 0xa0, 0x01, 0x47, 0x0d, + 0x0b, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, + 0x41, 0x7f, 0x4a, 0x0d, 0x0a, 0x20, 0x02, 0x41, 0xa0, 0x01, 0x4f, 0x0d, + 0x0a, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, + 0x41, 0x7f, 0x4a, 0x0d, 0x09, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, + 0x09, 0x0b, 0x42, 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x02, 0x6a, 0x22, + 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, + 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, 0x0d, 0x07, + 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, + 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, 0x0d, 0x0a, 0x0b, 0x20, 0x02, + 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x03, 0x0b, 0x00, 0x0b, 0x20, 0x01, + 0x20, 0x05, 0x20, 0x01, 0x20, 0x05, 0x4b, 0x1b, 0x21, 0x02, 0x03, 0x40, + 0x20, 0x01, 0x20, 0x02, 0x46, 0x04, 0x40, 0x20, 0x02, 0x21, 0x01, 0x0c, + 0x03, 0x0b, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2c, 0x00, 0x00, 0x41, 0x00, + 0x48, 0x0d, 0x02, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x00, + 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x00, + 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x06, + 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x00, 0x0c, 0x01, 0x0b, + 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x20, 0x0b, 0x21, 0x0a, 0x42, 0x80, + 0x80, 0x80, 0x80, 0x10, 0x21, 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x00, 0x21, + 0x0b, 0x0b, 0x20, 0x01, 0xad, 0x20, 0x0a, 0x20, 0x0b, 0x84, 0x84, 0x21, + 0x0a, 0x0b, 0x20, 0x01, 0x20, 0x05, 0x4f, 0x04, 0x40, 0x20, 0x00, 0x20, + 0x0c, 0x37, 0x02, 0x04, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x00, 0x0c, + 0x01, 0x0b, 0x20, 0x03, 0x20, 0x0a, 0x37, 0x02, 0x14, 0x20, 0x03, 0x20, + 0x0c, 0x37, 0x02, 0x0c, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x08, 0x20, + 0x03, 0x41, 0x08, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, + 0x00, 0x0b, 0x20, 0x03, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0xa0, 0x01, + 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x46, + 0x04, 0x40, 0x41, 0x0c, 0x41, 0x04, 0x10, 0x0f, 0x22, 0x02, 0x45, 0x0d, + 0x02, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x20, 0x00, 0x20, 0x02, + 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x02, + 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, + 0x02, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x03, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x03, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x28, 0x02, 0x00, 0x04, 0x40, + 0x20, 0x00, 0x10, 0x07, 0x0b, 0x20, 0x00, 0x20, 0x03, 0x29, 0x03, 0x00, + 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x28, 0x02, + 0x00, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x0f, 0x0b, 0x00, 0x0b, 0x04, 0x00, 0x41, 0x00, 0x0b, 0xa7, 0x04, 0x02, + 0x05, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0xa0, 0x01, 0x6b, 0x22, 0x00, + 0x24, 0x00, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, 0x0c, 0x20, 0x00, 0x41, + 0x30, 0x6a, 0x41, 0x00, 0x10, 0x26, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x2d, 0x00, 0x30, 0x45, 0x04, 0x40, 0x20, 0x00, 0x41, 0xd0, + 0x00, 0x6a, 0x20, 0x00, 0x41, 0x3c, 0x6a, 0x29, 0x02, 0x00, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x02, 0x34, 0x37, 0x03, 0x48, 0x20, + 0x00, 0x41, 0xe0, 0x00, 0x6a, 0x20, 0x00, 0x41, 0xd4, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x22, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, + 0x02, 0x4c, 0x22, 0x05, 0x37, 0x03, 0x58, 0x20, 0x00, 0x20, 0x01, 0x36, + 0x02, 0x6c, 0x20, 0x00, 0x20, 0x05, 0x3e, 0x02, 0x68, 0x20, 0x00, 0x41, + 0x90, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe8, 0x00, 0x6a, 0x10, 0x22, 0x20, + 0x00, 0x28, 0x02, 0x90, 0x01, 0x45, 0x0d, 0x02, 0x20, 0x00, 0x41, 0xf8, + 0x00, 0x6a, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x22, + 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0x90, 0x01, + 0x22, 0x05, 0x37, 0x03, 0x70, 0x20, 0x00, 0x41, 0x88, 0x01, 0x6a, 0x20, + 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x05, 0x37, 0x03, 0x80, 0x01, + 0x02, 0x40, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, 0x1d, 0x45, 0x04, 0x40, + 0x20, 0x00, 0x41, 0x10, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, 0x24, 0x6a, + 0x22, 0x01, 0x22, 0x02, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, + 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x02, 0x36, 0x02, + 0x04, 0x20, 0x03, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x28, 0x02, 0x14, 0x21, 0x02, 0x20, 0x00, 0x28, 0x02, 0x10, 0x20, + 0x00, 0x41, 0x98, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xf8, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0x70, + 0x37, 0x03, 0x90, 0x01, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x10, 0x23, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x04, + 0x20, 0x03, 0x48, 0x0d, 0x05, 0x20, 0x02, 0x20, 0x04, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0x08, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, + 0x02, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x02, 0x20, 0x01, 0x41, 0x04, + 0x6a, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x0c, 0x21, 0x01, 0x20, + 0x00, 0x28, 0x02, 0x08, 0x22, 0x02, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x47, + 0x04, 0x40, 0x20, 0x02, 0x41, 0x01, 0x3a, 0x00, 0x04, 0x0b, 0x20, 0x01, + 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x02, + 0x48, 0x0d, 0x05, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0c, 0x01, + 0x0b, 0x20, 0x00, 0x41, 0x80, 0x01, 0x6a, 0x10, 0x07, 0x0b, 0x20, 0x00, + 0x41, 0x18, 0x6a, 0x10, 0x27, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x10, + 0x07, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x41, 0xb5, + 0x82, 0xc0, 0x00, 0x10, 0x28, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, + 0x1b, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x07, 0x0b, 0x20, 0x00, + 0x41, 0x18, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, 0x2c, 0x6a, 0x2d, 0x00, + 0x00, 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x28, 0x22, + 0x01, 0x28, 0x02, 0x00, 0x04, 0x7f, 0x20, 0x01, 0x10, 0x07, 0x20, 0x00, + 0x28, 0x02, 0x28, 0x05, 0x20, 0x01, 0x0b, 0x41, 0x0c, 0x10, 0x08, 0x0b, + 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x20, 0x00, + 0x41, 0xd8, 0x00, 0x6a, 0x10, 0x29, 0x00, 0x0b, 0x00, 0x0b, 0x97, 0x02, + 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x02, 0x24, 0x00, + 0x02, 0x40, 0x02, 0x40, 0x10, 0x04, 0x22, 0x03, 0x41, 0x03, 0x4b, 0x0d, + 0x00, 0x20, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x81, 0x08, 0x3b, + 0x01, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x10, 0x30, 0x20, + 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x10, 0x05, 0x20, 0x00, 0x02, 0x7f, + 0x02, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, 0x02, 0x20, 0x02, 0x28, 0x02, + 0x08, 0x22, 0x01, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, + 0x10, 0x02, 0x40, 0x20, 0x01, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x20, 0x02, + 0x41, 0x00, 0x36, 0x02, 0x1c, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x20, 0x02, + 0x41, 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x31, 0x0d, 0x00, 0x20, 0x02, 0x41, + 0x20, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x14, 0x10, 0x30, 0x20, 0x02, 0x41, + 0x10, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x20, 0x22, 0x01, 0x20, 0x02, 0x28, + 0x02, 0x28, 0x10, 0x31, 0x45, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x20, 0x6a, + 0x10, 0x07, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x01, 0x41, 0x01, + 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, + 0x6a, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, + 0x10, 0x6a, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x1c, 0x21, 0x03, 0x20, + 0x00, 0x41, 0x0c, 0x6a, 0x20, 0x02, 0x29, 0x02, 0x24, 0x37, 0x02, 0x00, + 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x41, 0x00, 0x0b, 0x3a, + 0x00, 0x00, 0x20, 0x02, 0x10, 0x07, 0x0b, 0x20, 0x02, 0x41, 0x30, 0x6a, + 0x24, 0x00, 0x0b, 0xdb, 0x03, 0x01, 0x06, 0x7f, 0x23, 0x00, 0x41, 0x30, + 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x20, 0x6a, 0x20, 0x00, + 0x41, 0x0c, 0x6a, 0x22, 0x04, 0x10, 0x1f, 0x20, 0x02, 0x28, 0x02, 0x24, + 0x22, 0x05, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x01, 0x6b, 0x22, 0x03, + 0x20, 0x01, 0x4e, 0x21, 0x06, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x02, 0x28, 0x02, 0x20, 0x2d, 0x00, 0x04, 0x22, + 0x01, 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x06, 0x0d, 0x05, 0x20, 0x05, + 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x01, 0x45, 0x0d, 0x04, 0x20, 0x02, + 0x41, 0x18, 0x6a, 0x21, 0x01, 0x20, 0x04, 0x28, 0x02, 0x00, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, + 0x04, 0x36, 0x02, 0x04, 0x20, 0x01, 0x20, 0x04, 0x41, 0x04, 0x6a, 0x36, + 0x02, 0x00, 0x20, 0x02, 0x28, 0x02, 0x1c, 0x21, 0x05, 0x20, 0x02, 0x28, + 0x02, 0x18, 0x22, 0x01, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x46, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x00, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x1b, 0x22, 0x03, 0x45, 0x0d, 0x03, 0x41, 0xe8, + 0x82, 0xc0, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x08, 0x21, 0x06, 0x20, 0x00, 0x28, 0x02, 0x00, 0x21, 0x01, 0x20, 0x03, + 0x28, 0x02, 0x00, 0x21, 0x00, 0x20, 0x03, 0x28, 0x02, 0x08, 0x22, 0x03, + 0x41, 0x3f, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x41, 0x02, 0x74, 0x10, 0x2f, + 0x0c, 0x03, 0x0b, 0x20, 0x03, 0x41, 0xff, 0xff, 0x00, 0x4d, 0x04, 0x40, + 0x20, 0x02, 0x20, 0x03, 0x41, 0x02, 0x74, 0x41, 0x01, 0x72, 0x3b, 0x01, + 0x2e, 0x20, 0x02, 0x41, 0x2e, 0x6a, 0x41, 0x02, 0x10, 0x2e, 0x0c, 0x03, + 0x0b, 0x20, 0x03, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4b, 0x0d, 0x01, + 0x20, 0x03, 0x41, 0x02, 0x74, 0x41, 0x02, 0x72, 0x10, 0x2d, 0x0c, 0x02, + 0x0b, 0x20, 0x06, 0x0d, 0x04, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x00, + 0x0c, 0x03, 0x0b, 0x41, 0x03, 0x10, 0x2f, 0x20, 0x03, 0x10, 0x2d, 0x0b, + 0x20, 0x00, 0x20, 0x03, 0x10, 0x2e, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x41, + 0xe8, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x10, 0x21, 0x20, 0x01, 0x20, + 0x06, 0x20, 0x02, 0x28, 0x02, 0x10, 0x20, 0x02, 0x28, 0x02, 0x14, 0x10, + 0x03, 0x0b, 0x20, 0x05, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x01, 0x6a, + 0x22, 0x00, 0x20, 0x01, 0x48, 0x0d, 0x01, 0x20, 0x05, 0x20, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x21, 0x00, 0x20, 0x04, 0x28, + 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x04, + 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x21, + 0x01, 0x20, 0x02, 0x28, 0x02, 0x08, 0x22, 0x00, 0x2d, 0x00, 0x04, 0x41, + 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x0b, + 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, 0x01, 0x6a, 0x22, 0x00, + 0x20, 0x04, 0x48, 0x0d, 0x01, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x00, + 0x0b, 0x20, 0x02, 0x41, 0x30, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, + 0x0a, 0x00, 0x20, 0x00, 0x20, 0x01, 0x41, 0x14, 0x10, 0x0a, 0x0b, 0x57, + 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x01, 0x24, 0x00, + 0x20, 0x01, 0x41, 0x9e, 0x82, 0xc0, 0x00, 0x10, 0x28, 0x20, 0x01, 0x41, + 0x88, 0x82, 0xc0, 0x00, 0x41, 0x04, 0x10, 0x2a, 0x20, 0x01, 0x41, 0xb2, + 0x82, 0xc0, 0x00, 0x41, 0x03, 0x10, 0x2a, 0x20, 0x01, 0x41, 0x10, 0x6a, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x10, 0x2b, + 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x10, 0x20, 0x01, 0x28, 0x02, 0x18, + 0x10, 0x2a, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x10, 0x07, 0x20, 0x01, 0x10, + 0x1b, 0x00, 0x0b, 0x0a, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, + 0x13, 0x0b, 0x89, 0x01, 0x02, 0x02, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, + 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x20, 0x02, 0x20, 0x02, + 0x20, 0x02, 0x6a, 0x22, 0x04, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x04, 0x41, 0x00, 0x10, 0x0b, 0x20, 0x03, 0x29, 0x03, 0x08, + 0x21, 0x05, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, 0x20, + 0x05, 0x37, 0x02, 0x00, 0x03, 0x40, 0x20, 0x02, 0x45, 0x0d, 0x02, 0x20, + 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x41, 0x04, 0x76, 0x41, + 0xd4, 0x82, 0xc0, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x10, 0x32, 0x20, 0x00, + 0x20, 0x04, 0x41, 0x0f, 0x71, 0x41, 0xd4, 0x82, 0xc0, 0x00, 0x6a, 0x2d, + 0x00, 0x00, 0x10, 0x32, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x21, 0x02, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, + 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0xa3, 0x11, 0x02, + 0x08, 0x7f, 0x02, 0x7e, 0x23, 0x00, 0x41, 0xb0, 0x02, 0x6b, 0x22, 0x00, + 0x24, 0x00, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x0c, 0x20, 0x00, + 0x41, 0xe0, 0x01, 0x6a, 0x41, 0x01, 0x10, 0x26, 0x02, 0x40, 0x02, 0x7f, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x2d, 0x00, 0xe0, 0x01, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, + 0x00, 0x41, 0xf0, 0x00, 0x6a, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x28, + 0x02, 0x00, 0x22, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, + 0xe8, 0x01, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, 0x68, 0x20, + 0x00, 0x28, 0x02, 0xe4, 0x01, 0x21, 0x01, 0x20, 0x00, 0x41, 0x80, 0x01, + 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, + 0x78, 0x20, 0x01, 0x41, 0xc4, 0xa5, 0x8a, 0x98, 0x7e, 0x46, 0x0d, 0x03, + 0x20, 0x01, 0x41, 0xed, 0x98, 0x99, 0xe7, 0x03, 0x46, 0x0d, 0x02, 0x20, + 0x01, 0x41, 0xce, 0xa6, 0xa3, 0xf4, 0x05, 0x46, 0x0d, 0x01, 0x20, 0x00, + 0x20, 0x01, 0x36, 0x02, 0xe0, 0x01, 0x20, 0x00, 0x41, 0x30, 0x6a, 0x41, + 0x04, 0x72, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x41, 0x04, 0x10, 0x0a, + 0x41, 0x00, 0x21, 0x02, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x30, 0x20, + 0x00, 0x41, 0xf8, 0x00, 0x6a, 0x10, 0x07, 0x0c, 0x08, 0x0b, 0x20, 0x00, + 0x41, 0x02, 0x36, 0x02, 0x30, 0x41, 0x02, 0x0c, 0x06, 0x0b, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x80, 0x01, 0x36, 0x02, 0x94, 0x01, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x78, 0x36, 0x02, 0x90, 0x01, 0x20, 0x00, 0x41, + 0xa0, 0x02, 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x10, 0x22, 0x20, + 0x00, 0x28, 0x02, 0xa0, 0x02, 0x04, 0x40, 0x20, 0x00, 0x41, 0xe8, 0x01, + 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, 0x37, 0x03, 0xe0, + 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x1e, 0x20, 0x00, 0x41, + 0xe4, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x46, 0x0d, 0x03, 0x20, + 0x00, 0x41, 0x01, 0x3a, 0x00, 0x64, 0x20, 0x00, 0x41, 0xe0, 0x00, 0x6a, + 0x28, 0x02, 0x00, 0x22, 0x01, 0x28, 0x02, 0x00, 0x45, 0x0d, 0x03, 0x20, + 0x01, 0x10, 0x07, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x20, 0x00, 0x41, 0xe8, + 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x00, + 0x29, 0x03, 0xe0, 0x01, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0xd0, 0x00, + 0x6a, 0x10, 0x27, 0x20, 0x00, 0x41, 0x03, 0x36, 0x02, 0x30, 0x0c, 0x05, + 0x0b, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x41, 0x04, 0x72, 0x41, 0x88, + 0x82, 0xc0, 0x00, 0x41, 0x04, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xf0, 0x01, + 0x6a, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0x90, 0x01, 0x20, 0x00, 0x28, + 0x02, 0x94, 0x01, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xc8, 0x01, 0x6a, 0x20, + 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x41, 0xd0, 0x01, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, + 0x22, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x22, + 0x01, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, + 0x22, 0x02, 0x20, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xb8, 0x01, + 0x6a, 0x22, 0x05, 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x28, 0x02, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xe0, 0x01, 0x20, + 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, 0x01, 0x37, 0x03, 0xa0, 0x01, 0x20, + 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x20, 0x05, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x40, 0x6b, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0x38, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, + 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x01, 0x37, + 0x03, 0x30, 0x0c, 0x04, 0x0b, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, + 0x1d, 0x22, 0x01, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, + 0x20, 0x01, 0x10, 0x11, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x20, 0x00, + 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x1c, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x01, + 0x20, 0x00, 0x28, 0x02, 0xe8, 0x01, 0x10, 0x02, 0x20, 0x00, 0x41, 0xe0, + 0x01, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, 0x03, 0x36, 0x02, 0x30, 0x20, + 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x07, 0x0c, 0x03, 0x0b, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x80, 0x01, 0x36, 0x02, 0x8c, 0x01, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x78, 0x36, 0x02, 0x88, 0x01, 0x20, 0x00, 0x41, + 0xa0, 0x02, 0x6a, 0x20, 0x00, 0x41, 0x88, 0x01, 0x6a, 0x10, 0x22, 0x20, + 0x00, 0x28, 0x02, 0xa0, 0x02, 0x04, 0x40, 0x20, 0x00, 0x41, 0x98, 0x01, + 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, 0x22, + 0x08, 0x37, 0x03, 0x90, 0x01, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, 0xa0, 0x01, + 0x20, 0x08, 0xa7, 0x21, 0x06, 0x02, 0x7f, 0x20, 0x03, 0x04, 0x40, 0x20, + 0x00, 0x41, 0x28, 0x6a, 0x20, 0x06, 0x20, 0x03, 0x41, 0x00, 0x10, 0x16, + 0x20, 0x00, 0x28, 0x02, 0x2c, 0x20, 0x00, 0x28, 0x02, 0x28, 0x21, 0x01, + 0x20, 0x00, 0x41, 0x20, 0x6a, 0x20, 0x06, 0x20, 0x03, 0x41, 0x01, 0x10, + 0x16, 0x20, 0x00, 0x28, 0x02, 0x24, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x20, + 0x06, 0x20, 0x03, 0x20, 0x01, 0x20, 0x00, 0x28, 0x02, 0x20, 0x22, 0x04, + 0x20, 0x01, 0x20, 0x04, 0x4b, 0x22, 0x04, 0x1b, 0x22, 0x01, 0x10, 0x17, + 0x20, 0x04, 0x1b, 0x22, 0x04, 0x20, 0x01, 0x6a, 0x22, 0x07, 0x20, 0x04, + 0x49, 0x0d, 0x03, 0x20, 0x00, 0x28, 0x02, 0x1c, 0x21, 0x02, 0x20, 0x00, + 0x28, 0x02, 0x18, 0x21, 0x05, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x20, 0x04, + 0x20, 0x07, 0x20, 0x06, 0x20, 0x03, 0x10, 0x18, 0x02, 0x7f, 0x20, 0x00, + 0x28, 0x02, 0x10, 0x21, 0x07, 0x20, 0x00, 0x28, 0x02, 0x14, 0x20, 0x02, + 0x46, 0x04, 0x7f, 0x20, 0x05, 0x20, 0x07, 0x20, 0x02, 0x10, 0x3b, 0x45, + 0x05, 0x41, 0x00, 0x0b, 0x45, 0x04, 0x40, 0x20, 0x03, 0x20, 0x01, 0x6b, + 0x22, 0x02, 0x20, 0x03, 0x4b, 0x0d, 0x05, 0x20, 0x01, 0x20, 0x02, 0x20, + 0x01, 0x20, 0x02, 0x4b, 0x1b, 0x22, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x04, + 0x20, 0x02, 0x49, 0x0d, 0x05, 0x41, 0x7f, 0x21, 0x05, 0x20, 0x06, 0x20, + 0x03, 0x10, 0x1a, 0x21, 0x08, 0x20, 0x01, 0x21, 0x02, 0x41, 0x7f, 0x0c, + 0x01, 0x0b, 0x41, 0x00, 0x21, 0x05, 0x20, 0x03, 0x20, 0x06, 0x20, 0x03, + 0x20, 0x04, 0x41, 0x00, 0x10, 0x19, 0x22, 0x02, 0x20, 0x06, 0x20, 0x03, + 0x20, 0x04, 0x41, 0x01, 0x10, 0x19, 0x22, 0x07, 0x20, 0x02, 0x20, 0x07, + 0x4b, 0x1b, 0x6b, 0x22, 0x02, 0x20, 0x03, 0x4b, 0x0d, 0x04, 0x20, 0x00, + 0x41, 0x08, 0x6a, 0x20, 0x06, 0x20, 0x03, 0x20, 0x04, 0x10, 0x17, 0x20, + 0x00, 0x28, 0x02, 0x08, 0x20, 0x00, 0x28, 0x02, 0x0c, 0x10, 0x1a, 0x21, + 0x08, 0x20, 0x03, 0x0b, 0x21, 0x07, 0x20, 0x00, 0x41, 0x9c, 0x02, 0x6a, + 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x94, 0x02, 0x6a, 0x41, + 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x88, 0x02, 0x6a, 0x20, 0x07, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x84, 0x02, 0x6a, 0x20, 0x05, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x41, 0xfc, 0x01, 0x6a, 0x42, 0x00, 0x37, 0x02, + 0x00, 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x20, 0x04, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0xf4, 0x01, 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0xe8, 0x01, 0x6a, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, + 0x06, 0x36, 0x02, 0x98, 0x02, 0x20, 0x00, 0x41, 0x88, 0x80, 0xc0, 0x00, + 0x36, 0x02, 0x90, 0x02, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xe0, 0x01, + 0x20, 0x08, 0x42, 0x20, 0x88, 0xa7, 0x21, 0x02, 0x20, 0x03, 0x0c, 0x01, + 0x0b, 0x20, 0x00, 0x41, 0x9c, 0x02, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0x94, 0x02, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0xec, 0x01, 0x6a, 0x41, 0x81, 0x02, 0x3b, 0x01, 0x00, 0x20, + 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x20, 0x06, 0x36, 0x02, 0x98, 0x02, 0x20, 0x00, 0x41, 0x88, 0x80, 0xc0, + 0x00, 0x36, 0x02, 0x90, 0x02, 0x20, 0x00, 0x42, 0x00, 0x37, 0x03, 0xe0, + 0x01, 0x41, 0x01, 0x21, 0x02, 0x41, 0x00, 0x0b, 0x21, 0x01, 0x02, 0x40, + 0x20, 0x03, 0x04, 0x40, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x21, 0x02, + 0x20, 0x00, 0x41, 0x84, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x7f, 0x47, + 0x04, 0x40, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x20, 0x02, 0x20, 0x01, + 0x10, 0x09, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x20, + 0x02, 0x20, 0x01, 0x10, 0x09, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x28, 0x02, + 0xe4, 0x01, 0x22, 0x01, 0x0d, 0x03, 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, + 0x04, 0x40, 0x20, 0x00, 0x41, 0xc8, 0x01, 0x6a, 0x20, 0x01, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0xc4, 0x01, 0x20, 0x00, 0x41, + 0x01, 0x36, 0x02, 0xc0, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x00, + 0x36, 0x02, 0xc0, 0x01, 0x0b, 0x20, 0x00, 0x28, 0x02, 0xc0, 0x01, 0x21, + 0x01, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, + 0x01, 0x41, 0x00, 0x10, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0xe8, + 0x01, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0x00, 0x37, 0x03, 0xe0, 0x01, + 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0xc0, 0x01, 0x20, 0x00, 0x41, 0xe0, + 0x01, 0x6a, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x41, 0x01, 0x10, 0x13, + 0x20, 0x00, 0x28, 0x02, 0xe0, 0x01, 0x20, 0x00, 0x28, 0x02, 0xe8, 0x01, + 0x10, 0x02, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x10, 0x07, 0x20, 0x00, + 0x41, 0x03, 0x36, 0x02, 0x30, 0x0c, 0x03, 0x0b, 0x20, 0x00, 0x41, 0xe0, + 0x01, 0x6a, 0x41, 0x04, 0x72, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x41, 0x05, + 0x10, 0x0a, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x00, + 0x28, 0x02, 0x88, 0x01, 0x20, 0x00, 0x28, 0x02, 0x8c, 0x01, 0x10, 0x0a, + 0x20, 0x00, 0x41, 0xc8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, + 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xd0, + 0x01, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x22, 0x09, 0x37, 0x03, 0x00, + 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x08, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x09, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0xb8, 0x01, 0x6a, 0x22, 0x05, 0x20, 0x00, + 0x41, 0xf8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0x01, 0x36, 0x02, 0xe0, 0x01, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, + 0xe0, 0x01, 0x37, 0x03, 0xa0, 0x01, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, + 0x20, 0x05, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x40, + 0x6b, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, + 0x38, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, + 0x20, 0x00, 0x29, 0x03, 0xa0, 0x01, 0x37, 0x03, 0x30, 0x0c, 0x02, 0x0b, + 0x00, 0x0b, 0x20, 0x01, 0x10, 0x15, 0x00, 0x0b, 0x20, 0x00, 0x41, 0xf8, + 0x00, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x28, 0x02, 0x30, 0x0b, 0x21, 0x02, + 0x0b, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x06, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, 0x03, 0x47, 0x04, 0x40, 0x20, 0x00, + 0x41, 0x30, 0x6a, 0x41, 0x04, 0x72, 0x21, 0x01, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x02, 0x41, 0x01, 0x6b, 0x0e, 0x02, 0x00, 0x01, 0x03, 0x0b, 0x20, + 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x29, 0x02, + 0x00, 0x37, 0x03, 0xa0, 0x02, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x22, + 0x01, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, 0x40, 0x6b, 0x29, 0x03, 0x00, 0x37, + 0x03, 0x50, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x41, 0x9e, 0x82, 0xc0, + 0x00, 0x41, 0x14, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x20, + 0x00, 0x28, 0x02, 0xa0, 0x02, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, 0x13, + 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x41, 0xb2, 0x82, 0xc0, 0x00, 0x41, + 0x03, 0x10, 0x13, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x20, 0x00, 0x28, + 0x02, 0x50, 0x20, 0x01, 0x28, 0x02, 0x00, 0x10, 0x2b, 0x20, 0x00, 0x41, + 0xa0, 0x01, 0x6a, 0x20, 0x00, 0x28, 0x02, 0xc0, 0x01, 0x20, 0x00, 0x28, + 0x02, 0xc8, 0x01, 0x10, 0x13, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, + 0x07, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x01, + 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, + 0x03, 0xa0, 0x01, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0x00, 0x3a, + 0x00, 0xec, 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x07, 0x20, + 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x07, 0x0c, 0x03, 0x0b, 0x20, 0x00, + 0x41, 0xe0, 0x01, 0x6a, 0x41, 0xb5, 0x82, 0xc0, 0x00, 0x41, 0x14, 0x10, + 0x0a, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0xec, 0x01, 0x0c, 0x02, 0x0b, + 0x20, 0x00, 0x42, 0x00, 0x37, 0x02, 0xe4, 0x01, 0x20, 0x00, 0x41, 0x01, + 0x3a, 0x00, 0xec, 0x01, 0x20, 0x00, 0x41, 0xcc, 0x82, 0xc0, 0x00, 0x28, + 0x02, 0x00, 0x36, 0x02, 0xe0, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, + 0xd8, 0x00, 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, 0x02, + 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, + 0x03, 0x50, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x41, 0x8c, 0x82, 0xc0, + 0x00, 0x41, 0x12, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x20, + 0x00, 0x28, 0x02, 0x50, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, 0x2b, 0x20, + 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x20, 0x00, 0x28, 0x02, 0xc0, 0x01, 0x20, + 0x00, 0x28, 0x02, 0xc8, 0x01, 0x10, 0x13, 0x20, 0x00, 0x41, 0xc0, 0x01, + 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x20, 0x00, 0x41, + 0xa8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x29, 0x03, 0xa0, 0x01, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, + 0x00, 0x3a, 0x00, 0xec, 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x10, + 0x07, 0x0b, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe0, + 0x01, 0x6a, 0x10, 0x11, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x1b, + 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x07, 0x0b, 0x20, 0x00, 0x41, + 0xe0, 0x01, 0x6a, 0x10, 0x07, 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x24, + 0x00, 0x0b, 0x24, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x01, 0x24, 0x00, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x0c, 0x20, 0x01, + 0x41, 0x0c, 0x6a, 0x41, 0x04, 0x10, 0x2e, 0x20, 0x01, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x71, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, 0x41, 0xe8, 0x82, 0xc0, + 0x00, 0x28, 0x02, 0x00, 0x22, 0x03, 0x20, 0x01, 0x6a, 0x22, 0x04, 0x20, + 0x03, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x41, 0x80, 0x80, 0x01, 0x4b, 0x0d, + 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x20, 0x04, 0x10, 0x20, + 0x20, 0x02, 0x28, 0x02, 0x08, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x20, 0x00, + 0x20, 0x01, 0x10, 0x14, 0x41, 0xe8, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, + 0x22, 0x00, 0x20, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x00, 0x4f, 0x0d, 0x01, + 0x0b, 0x00, 0x0b, 0x41, 0xe8, 0x82, 0xc0, 0x00, 0x20, 0x01, 0x36, 0x02, + 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x24, 0x01, 0x01, + 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, + 0x20, 0x00, 0x3a, 0x00, 0x0f, 0x20, 0x01, 0x41, 0x0f, 0x6a, 0x41, 0x01, + 0x10, 0x2e, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x02, + 0x01, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, + 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x01, 0x10, 0x0b, + 0x20, 0x02, 0x29, 0x03, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, 0x01, 0x36, + 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, 0x37, 0x02, 0x00, 0x20, 0x02, 0x41, + 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x39, 0x01, 0x02, 0x7f, 0x20, 0x00, 0x28, + 0x02, 0x04, 0x22, 0x03, 0x20, 0x02, 0x49, 0x22, 0x04, 0x45, 0x04, 0x40, + 0x20, 0x01, 0x20, 0x02, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x20, + 0x02, 0x10, 0x14, 0x20, 0x00, 0x20, 0x03, 0x20, 0x02, 0x6b, 0x36, 0x02, + 0x04, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x36, 0x02, 0x00, 0x0b, + 0x20, 0x04, 0x0b, 0x9c, 0x02, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, + 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x00, 0x20, 0x02, 0x41, + 0x0c, 0x6a, 0x02, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0xff, + 0x00, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x03, 0x20, + 0x00, 0x28, 0x02, 0x04, 0x46, 0x04, 0x40, 0x20, 0x00, 0x41, 0x01, 0x10, + 0x12, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x03, 0x0b, 0x20, 0x00, 0x28, + 0x02, 0x00, 0x20, 0x03, 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, 0x03, + 0x41, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x03, 0x49, 0x0d, 0x01, 0x20, 0x00, + 0x20, 0x01, 0x36, 0x02, 0x08, 0x0c, 0x04, 0x0b, 0x20, 0x02, 0x41, 0x00, + 0x36, 0x02, 0x0c, 0x20, 0x01, 0x41, 0x80, 0x10, 0x49, 0x0d, 0x01, 0x20, + 0x01, 0x41, 0x80, 0x80, 0x04, 0x49, 0x04, 0x40, 0x20, 0x02, 0x20, 0x01, + 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0e, 0x20, 0x02, + 0x20, 0x01, 0x41, 0x0c, 0x76, 0x41, 0xe0, 0x01, 0x72, 0x3a, 0x00, 0x0c, + 0x20, 0x02, 0x20, 0x01, 0x41, 0x06, 0x76, 0x41, 0x3f, 0x71, 0x41, 0x80, + 0x01, 0x72, 0x3a, 0x00, 0x0d, 0x41, 0x03, 0x0c, 0x03, 0x0b, 0x20, 0x02, + 0x20, 0x01, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0f, + 0x20, 0x02, 0x20, 0x01, 0x41, 0x12, 0x76, 0x41, 0xf0, 0x01, 0x72, 0x3a, + 0x00, 0x0c, 0x20, 0x02, 0x20, 0x01, 0x41, 0x06, 0x76, 0x41, 0x3f, 0x71, + 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0e, 0x20, 0x02, 0x20, 0x01, 0x41, + 0x0c, 0x76, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0d, + 0x41, 0x04, 0x0c, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x41, + 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0d, 0x20, 0x02, 0x20, + 0x01, 0x41, 0x06, 0x76, 0x41, 0xc0, 0x01, 0x72, 0x3a, 0x00, 0x0c, 0x41, + 0x02, 0x0b, 0x10, 0x13, 0x0b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x0b, 0x42, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x2f, 0x01, 0x04, 0x21, 0x03, + 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x20, 0x03, 0x41, 0x01, 0x71, + 0x45, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x10, 0x31, 0x0f, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x76, 0x3a, + 0x00, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, + 0x20, 0x02, 0x41, 0x01, 0x6b, 0x10, 0x31, 0x0b, 0x26, 0x01, 0x01, 0x7f, + 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x20, + 0x01, 0x3a, 0x00, 0x0f, 0x20, 0x00, 0x20, 0x02, 0x41, 0x0f, 0x6a, 0x41, + 0x01, 0x10, 0x13, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x26, + 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, + 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x0c, 0x20, 0x01, 0x20, 0x02, 0x41, + 0x0c, 0x6a, 0x41, 0x04, 0x10, 0x13, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0xd2, 0x01, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x41, + 0xff, 0xff, 0xff, 0xff, 0x03, 0x71, 0x20, 0x01, 0x47, 0x0d, 0x00, 0x20, + 0x02, 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x03, 0x4b, 0x0d, 0x00, 0x20, + 0x03, 0x41, 0xff, 0xff, 0xff, 0xff, 0x01, 0x71, 0x20, 0x03, 0x47, 0x0d, + 0x00, 0x20, 0x01, 0x41, 0x02, 0x74, 0x22, 0x01, 0x20, 0x03, 0x41, 0x03, + 0x74, 0x22, 0x02, 0x20, 0x01, 0x20, 0x02, 0x4b, 0x1b, 0x22, 0x02, 0x41, + 0x08, 0x6a, 0x22, 0x01, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x02, 0x7f, 0x02, + 0x40, 0x20, 0x01, 0x20, 0x01, 0x41, 0x80, 0x80, 0x04, 0x6a, 0x22, 0x02, + 0x4d, 0x04, 0x40, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x01, 0x20, 0x02, + 0x4d, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x10, 0x76, 0x22, + 0x02, 0x40, 0x00, 0x22, 0x01, 0x41, 0x7f, 0x46, 0x04, 0x40, 0x41, 0x00, + 0x21, 0x01, 0x41, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0xff, 0xff, + 0x03, 0x71, 0x20, 0x01, 0x47, 0x0d, 0x01, 0x20, 0x02, 0x41, 0x10, 0x74, + 0x22, 0x02, 0x41, 0x08, 0x6b, 0x20, 0x02, 0x4b, 0x0d, 0x01, 0x20, 0x01, + 0x41, 0x10, 0x74, 0x22, 0x01, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20, 0x01, + 0x20, 0x01, 0x20, 0x02, 0x6a, 0x41, 0x02, 0x72, 0x36, 0x02, 0x00, 0x41, + 0x00, 0x0b, 0x21, 0x02, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, + 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0xaf, 0x04, + 0x01, 0x0a, 0x7f, 0x20, 0x00, 0x41, 0x02, 0x74, 0x21, 0x06, 0x41, 0x00, + 0x20, 0x01, 0x6b, 0x21, 0x08, 0x20, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, + 0x03, 0x71, 0x20, 0x00, 0x47, 0x21, 0x09, 0x20, 0x01, 0x41, 0x01, 0x6b, + 0x22, 0x0a, 0x20, 0x01, 0x4b, 0x21, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, + 0x21, 0x00, 0x02, 0x40, 0x03, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x01, 0x20, + 0x00, 0x21, 0x01, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, + 0x02, 0x08, 0x22, 0x00, 0x41, 0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x09, + 0x0d, 0x03, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x03, + 0x20, 0x01, 0x41, 0x08, 0x6a, 0x22, 0x05, 0x6b, 0x22, 0x04, 0x20, 0x03, + 0x4b, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x01, 0x20, 0x03, + 0x20, 0x06, 0x6b, 0x22, 0x0c, 0x20, 0x03, 0x4b, 0x0d, 0x03, 0x20, 0x0b, + 0x0d, 0x03, 0x20, 0x05, 0x41, 0x08, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, + 0x0d, 0x03, 0x20, 0x04, 0x20, 0x04, 0x41, 0x40, 0x6b, 0x22, 0x04, 0x4b, + 0x0d, 0x03, 0x02, 0x40, 0x20, 0x04, 0x20, 0x08, 0x20, 0x0c, 0x71, 0x22, + 0x04, 0x4b, 0x04, 0x40, 0x20, 0x05, 0x20, 0x0a, 0x71, 0x0d, 0x03, 0x20, + 0x02, 0x20, 0x00, 0x41, 0x7c, 0x71, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x41, 0x01, 0x72, 0x36, 0x02, 0x00, 0x20, 0x01, + 0x21, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x04, 0x41, 0x08, 0x6b, 0x22, 0x00, + 0x20, 0x04, 0x4b, 0x0d, 0x04, 0x20, 0x03, 0x20, 0x00, 0x6b, 0x22, 0x02, + 0x20, 0x03, 0x4b, 0x0d, 0x04, 0x20, 0x02, 0x41, 0x08, 0x6b, 0x20, 0x02, + 0x4b, 0x0d, 0x04, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, + 0x42, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x41, 0x7c, 0x71, 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, + 0x00, 0x22, 0x02, 0x41, 0x7c, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x41, + 0x00, 0x20, 0x03, 0x20, 0x02, 0x41, 0x02, 0x71, 0x1b, 0x22, 0x02, 0x45, + 0x0d, 0x00, 0x20, 0x02, 0x20, 0x02, 0x28, 0x02, 0x04, 0x41, 0x03, 0x71, + 0x20, 0x00, 0x72, 0x36, 0x02, 0x04, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, + 0x02, 0x04, 0x41, 0x03, 0x71, 0x20, 0x01, 0x72, 0x36, 0x02, 0x04, 0x20, + 0x01, 0x20, 0x01, 0x28, 0x02, 0x08, 0x41, 0x7e, 0x71, 0x36, 0x02, 0x08, + 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x03, 0x71, + 0x20, 0x00, 0x72, 0x22, 0x03, 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x02, + 0x41, 0x02, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x21, + 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x7d, 0x71, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, + 0x22, 0x01, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, + 0x72, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x21, 0x07, + 0x0c, 0x05, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x41, 0x7e, 0x71, 0x36, 0x02, + 0x08, 0x02, 0x7f, 0x41, 0x00, 0x20, 0x01, 0x28, 0x02, 0x04, 0x41, 0x7c, + 0x71, 0x22, 0x00, 0x45, 0x0d, 0x00, 0x1a, 0x41, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x1b, 0x0b, 0x21, 0x00, 0x20, + 0x01, 0x10, 0x38, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x71, 0x04, + 0x40, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, 0x36, + 0x02, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x01, 0x20, 0x00, 0x6b, 0x41, + 0x08, 0x6b, 0x20, 0x01, 0x4b, 0x0d, 0x02, 0x20, 0x00, 0x21, 0x01, 0x0c, + 0x01, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, + 0x0b, 0x0b, 0x00, 0x0b, 0x20, 0x07, 0x0b, 0x7d, 0x01, 0x02, 0x7f, 0x02, + 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x7c, 0x71, 0x22, + 0x02, 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, 0x02, 0x20, 0x01, 0x41, 0x02, + 0x71, 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x04, 0x41, 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, 0x04, 0x41, 0x7c, + 0x71, 0x72, 0x36, 0x02, 0x04, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x04, 0x22, 0x01, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x04, 0x7f, 0x20, 0x02, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, + 0x00, 0x41, 0x7c, 0x71, 0x72, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x04, 0x05, 0x20, 0x01, 0x0b, 0x41, 0x03, 0x71, 0x36, 0x02, 0x04, 0x20, + 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x36, 0x02, 0x00, + 0x0b, 0x28, 0x01, 0x01, 0x7f, 0x03, 0x40, 0x20, 0x02, 0x20, 0x03, 0x47, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x03, 0x6a, 0x20, 0x01, 0x20, 0x03, 0x6a, + 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, + 0x03, 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x22, 0x01, 0x01, 0x7f, 0x03, 0x40, + 0x20, 0x01, 0x20, 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x6a, + 0x41, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, 0x02, + 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x3f, 0x01, 0x02, 0x7f, 0x03, 0x40, 0x20, + 0x02, 0x45, 0x04, 0x40, 0x41, 0x00, 0x0f, 0x0b, 0x20, 0x02, 0x41, 0x01, + 0x6b, 0x21, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x03, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x21, 0x04, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x20, 0x04, 0x46, + 0x0d, 0x00, 0x0b, 0x20, 0x04, 0x20, 0x03, 0x6b, 0x0b, 0x0b, 0xb1, 0x02, + 0x03, 0x00, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x0b, 0x88, 0x01, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x41, 0xca, 0x81, 0xc0, 0x00, 0x0b, 0x33, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x00, 0x41, 0x88, 0x82, 0xc0, 0x00, 0x0b, 0x5c, 0x6e, 0x61, 0x6d, + 0x65, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x3a, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x60, 0x60, 0x3a, 0x20, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x69, 0x6e, 0x70, + 0x75, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, + 0x62, 0x63, 0x64, 0x65, 0x66 +}; +constexpr unsigned int hello_world_wasm_len = 10661; diff --git a/bcos-executor/test/liquid/hello_world.rs b/bcos-executor/test/liquid/hello_world.rs new file mode 100644 index 0000000..be2989f --- /dev/null +++ b/bcos-executor/test/liquid/hello_world.rs @@ -0,0 +1,29 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +use liquid::{storage}; +use liquid_lang as liquid; + +#[liquid::contract] +mod hello_world { + use super::*; + + #[liquid(storage)] + struct HelloWorld { + name: storage::Value, + } + + #[liquid(methods)] + impl HelloWorld { + pub fn new(&mut self, name: String) { + self.name.initialize(name); + } + + pub fn set(&mut self, name: String) { + *self.name = name; + } + + pub fn get(&self) -> String { + self.name.clone() + } + } +} diff --git a/bcos-executor/test/liquid/hello_world.wasm b/bcos-executor/test/liquid/hello_world.wasm new file mode 100644 index 0000000000000000000000000000000000000000..856862402cfa2fdca0ebc43c328a861e350e3130 GIT binary patch literal 10661 zcmd6tUyL2sUB}NkGxyKlx$B)I3%GXLo;x+}rnM70Np}+m$c`aS+^yq^K9mO}vW+*5 z@Abc3J0?NY>r??5T8TVVB1jQhse)8Oh=5eV8!J>ngisY#eL&)6A0m;5w8}#t`hYN> z@9)gqU7OG+Bv>bRX3n4A`ThO=e&@`%)vFi1bIzX{J{LAO-E*G*vrXOU*KaLDvef^=`Ag@o zzS#C(-R;ktx>D)1C2~zP@>L+ZDaTdH3Sl#mgJ71UK{I>eUy2>)I<< z*4&})xwR`7F2CY_F~7Ka{*pT~*nW2L5$`vnD|^w^^W&q=)#2%UIl6^VR(>J4d^37= z^4y8OsE1|0C=N3x*dSLs_2rd2Sox=BdC-rCAj5ty_zc>R^U>G&xXR8jJgfaAW@ipQ zl`p%Ze(&qs%y*-V_4|{Gfjm`tePewwxUkGBdHuWVRfuj9!x?c_J9@a}6GmF!Q?ot> zvF_Ko^W|ePh$MWNJnPJ2ejPR{O)X+JfvDX^6)(WgluW=lwR<*S4x2Gxl0?>*vqozKH_(<~nItXu={Zl$uBiNM;?E>a%j8h7 zWxkB@(=r}zJ>1s0aVycGz-4G=pC8xZghR0>^Cc8%8k7j|%uoH}fB5cSbQkIOiLM+r z(GAcI(gG5|84pm_B)c<3gf!>#%&Gk-3rLHQwM)j5M03^}B)R+uG0PLffV_ytxJ)L+ zj;381;Y~la0_#JN<&tlk@~|%goN4q@hwHduXuW(f3~d5dsfXiosmkP8TA*CiTIRQE zQbgGkLiFVl%+#=E9$X~{V<026f>a)};$1)0IzAGX^-t=-z(%~v8yU^MIZlH;-3Y$q zW%5@pSW5n;HshqT>ldbId0Co?9pxLQN8-dZYc0f1?BIF&?MFY#AukVu4Y);}wM)?= z)z?&H#Yn7CGpz?fWi=K5&{+gtb-yG$+sFM zMPkuR=o5xPKqT|Y3T*laVDWR>6qb!ERHb{xl$yc28p-PZ%E6IG$(b}WDGt2>gd}TlJLpCeDmOhre4?C#Y&k50dP00Ri&{H10q#)I zEV%U)Kd!!YbK8w8cf`3Wt2aNdwiwXNNCJ7w8%Lc#z{oHj2{Y>3e!brDrx{6#hzuc} z)P77*2%ELUfo9Z)HVVvY$hZSVk$t)XR#qbV zVkh>;)lBTCrkOL1)L2eQj=?_8*xk%Z%+{Hg$CYPtVFH^Vnlf$~x$c&tJ zZFN(3cS3tJwA)(9VK`YxiJ)tD-Nr&)=rtDN77H1(vPy3>7=kc&T16TbgR;tCf-jg= zz_h(q>BJfNTW^%hUOjw5lg=7^%MgmznWuRy;-L7f_cyZT=$XLUlaW8^qdV^0@5k^O z2@U+ju?Z(86`z?J&kMFFi0(J=(oesng`%oSXn*TNw&`!|Ny%tk!>XXf0@|I`ib6i+ zr`!-Pqh>&ICrpv5IzR_O_@tFc+=Of8qY^39w{JT&f)+GVtUTeBDzkbYX}7$u9drA3 zhSR1oVFPwQNAy|gk(H041R4xuaK8JPY#IJAXi$>8gT+5l zuqOGIK~!l2fMeDW*~(8QSr1hpw@?Ky?ZoU^xza+25M}KSUTU-r1%>mB#X2g!09;qU zpNhybDm)g#{?b>fI$izhO@DSaSbtPXGnK>ih@1X66(OZ14yMf~AVpTihaor@5U7n0?zxFbN=u_-eNbU+4J9$%oaWt@-a>OpG z{YM71is7gud?))d7yLde7UkpQ&T!HJ+`~c_h??uewJ_KC9fduVKE&$md!0)q(%+Le zhNPjnvDFwsPn2I058-BqR=n09y3~CPs_;4;LG3c&;g29P5Jwa-aI|OXdYi)Krhj_2 z4|5tp0caywB{A2GIE56ZfgLv-+${-f+$jkf*|9pQTmQ()zFz&w#Nkl!80uE6|77_e zv;18`8KCdbw?&`TN3G0_L|fq9;4VpL8oD!L?`KOZPiuLessIfIr8bo`!XpwW|KoVU z97doYgZ0v$kEsr8_YBg=qBN_zxZ|E~0Atu~TxVM;v+<&0*NxN&yG;GdIEck-uZ?6W zj3i)>!zIHl?Q+F(76(gVo(t^?f7%uPiX9MG%Q42v>SAkm|JLk~;xu>FLxOcq8-B2{ z2BUVjp@Mvua;$AQ`wESAb;X0^Z5!dhhG)Pc!34SUL|s@8Ls zF5b%9q`9RnC0Wyv>&hXQW2C(Da0(6aeoWglSHH`~z}3Gr7N1%;x(C9eOW89t?pW6k zop`Q*#-{fRRc9&t4Mx&*flKFC!i$W4-HXusPKgfoU*}v$>iDSmYY5-(+JNWPyCh2Ag(?HbXc;t+zsCvi zJ1LF_j<8}7b&$F-z5^z3GYl(PKh5P|(VPX6tKR{CzDs5;7ij09JlI^@@jaf8sLGul zyDi*x?6$yS>DY~-Ti$$xJ1z2nLhFx1%GAf2&1_gMIXkGS=CG@FGgLwSC%lCTd5bKQ zRK;-~J92EKau(>3;OInqRzxe+QCmqLQWjM%M<13&$)$dqi_{!RF^S){=oFWSs*Z(&N>1YS*-Qpz|U0PKV)@JTi#=}w!D83_8wGm|6n_!Dei4V*eH)mv0cPSA~CAY%7^fcqXti< z2$bV#RXxJnyOP1qE9Og*P^&rW{^(V#;!ILbP_)_B^bWmDx14+QqG*F=zu7t1uHPWH zi8d>RnJDVssJE6CMh@^H9CW@M6kkp|ElNvody79!@#gDW+<@nwVcg&7HnUqiOo}xn zm!E|+wkY+pzvnXbyDjVAy)7e4ri@}|9u%|r z_4seoG8HUd8ia9GJM? z{ihtUL;NKbQxXw$A0`;r4g&^2dp{-yD>gc0fQ9g$AE9$0n{7fELeI-6@_T>whi}|a z(dg?Rz40gio>BgA`~5%v_D?$L6pOIj(NvOD&Nh;AM`ibbs?<{IVmL-4NDe~wg_&@0 ztPT_dVq+oPWd669ultu5$vq6&3gTEWZ~15|Sh|B_TE7$S$O&6vDYNCJl26e8o@trQ zBP=_C`8h76LyLTV2t2Hf#brWM1C18uq)$jCxDmBa(+vO|)A3Iu)<)}M16t51=m*>4 zc>y6xwZ3Cq?rK-MewQ{K`ByWRr|a+7Ocbonx2+0pdj5`w4vjxGYniQdyeJ79_OdPR zm02t#(}?9s0#u{-SX!&C2pGSV9n)cn6%6Ia_0~otw#8I=4|iBBJ#%7#AUpIfg!g?Z z`_X3=l@!qo>Ir1bUb5Xc8Ljcy?v}_V+ugd$b}64H+f|0DCeK!o1DegzNrGGRye%L5 zZ-LL7cFO9s5$}R`uKanebwoc4BP~ZtQio3+hiKVvEs;*8r<|L7rOG+HEq@_$pI4(V{jH?Z{=V^mTFXPYTd98 zCw=`4jb2uWx%y3lC26$&R+#44TeNb>h?eWuxYdCQxBubCC!0zX4{PhCpKzOSK|bA7 zbOH!r0MlZ3F}xvX(B6&^)opUhzV@bQFjGlxtTg#-FDoAa2(JbT5=KC@8SxQBVT}N+ zr6*U6d|)%&2EJhlf)K0qW`Z^OFDfr*QkAj$C{_e$ysM&i(`M1AyfYO|5`GW=kPzGH z9iEulP7}8i5^gn)PtN89-)X@6%uy5?o7@5}+aj|AWs4`=@II}*L+eLIkVTHh1C{pT zw(b~cOrb;}v_MS#e}(zVpGC{(;VJ? zYcz;(=ROLp+ID73PDaTqgcaH~AdUVx95WMqkz0&ZEBmV~NRMKLxzrg>wy+UREuhD3 znQ9??(aJE20UMx}ZBzU^W-fxQTy(aHe8WZ<_Q5u=Xh|5^c2Mbk=w919$rsv!Q`NX_<8(Hb+mWN~ zH-J7cl0#mVjrti%8|D0T9#7^W&GEfXg%f;*wBmnb>x7$w8;+3tE?bL%&nTM1_&qO} zy`<_H>miA&>yn#Fm>pF|P@HZ_pgLQal2}932;L zHXArz>$fkI^>#SbaIlw-@1aBaZ!6f#Jy=dJ1?>$ri|{f>5X4mphi!x2d?Z$t?t>sp zMz~q3LnpcUX?T=#J*lIvjT3I4Jq@p8W}bA?cM$)ESmn6syQuahZ0YQ~gc zyTWXpvgpSUf{kk0~NNTC}_#6mCbN{;S zEv*?P7`Bwh?Q50va>eW^EzO~skPLrcyVBvQ)23lbU-X*WPKW)#GcI6Uc3$kO)_JKZ z?_}IE`$+A&dF#oaUyqr3*g;;CIqK}1BDtvvbbuOl_?x!ijKUs-x}DGiiRx`WA|PC@ zS78}1;?97-`V6j1$m?4cPC`9hJbJ;4DjvGo4)T=>CvTlTBQ1HlwVX}i4nA^fm&vvkwnpnk9g-0 z1*NEX*!>zvO5oIeJv!D@HEofp1~FkuM;G=LlimY}J*e4uD|lH!W57kO$_OqCfGf|Gyje{bh3W17}3i|QF`Of zno7aqR^*K$dX(O*2?CI{kD@pmr^h%`ylMJ9sj& zladl|dsT%uYZ_&AO3$X7fhvgYmY}pI_Z}#Up%5_%r^pyZ&Cl_}p_R;`5hZx^OODx_m8e ktgW77)RmV^4X8qY$BsYz$fKWITzc&B)vr8%ZtaEt0{fWKGynhq literal 0 HcmV?d00001 diff --git a/bcos-executor/test/liquid/hello_world_caller.h b/bcos-executor/test/liquid/hello_world_caller.h new file mode 100644 index 0000000..e109b22 --- /dev/null +++ b/bcos-executor/test/liquid/hello_world_caller.h @@ -0,0 +1,820 @@ +#pragma once + +constexpr unsigned char hello_world_caller_wasm[] = { + 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x46, 0x0c, 0x60, + 0x02, 0x7f, 0x7f, 0x00, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, + 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, + 0x7f, 0x7f, 0x7f, 0x00, 0x60, 0x00, 0x01, 0x7f, 0x60, 0x00, 0x00, 0x60, + 0x04, 0x7f, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x05, 0x7f, 0x7f, 0x7f, + 0x7f, 0x7f, 0x00, 0x60, 0x01, 0x7f, 0x01, 0x7f, 0x60, 0x02, 0x7f, 0x7f, + 0x01, 0x7f, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7e, 0x02, 0xa5, 0x01, 0x09, + 0x04, 0x62, 0x63, 0x6f, 0x73, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x07, + 0x04, 0x62, 0x63, 0x6f, 0x73, 0x11, 0x67, 0x65, 0x74, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x00, + 0x05, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0d, 0x67, 0x65, 0x74, 0x52, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x00, 0x01, 0x04, 0x62, + 0x63, 0x6f, 0x73, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x00, 0x00, + 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x00, 0x04, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x06, + 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x00, 0x00, 0x04, 0x62, 0x63, 0x6f, + 0x73, 0x0a, 0x67, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x00, 0x03, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0f, 0x67, 0x65, 0x74, 0x43, + 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x00, + 0x05, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0b, 0x67, 0x65, 0x74, 0x43, 0x61, + 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x00, 0x01, 0x03, 0x32, 0x31, 0x01, + 0x01, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x0a, 0x02, 0x00, 0x02, 0x02, + 0x04, 0x01, 0x04, 0x04, 0x08, 0x07, 0x0b, 0x05, 0x06, 0x00, 0x00, 0x09, + 0x00, 0x01, 0x01, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x02, 0x00, 0x03, 0x03, 0x00, 0x00, 0x02, 0x03, 0x01, 0x02, 0x00, 0x03, + 0x05, 0x03, 0x01, 0x00, 0x11, 0x06, 0x09, 0x01, 0x7f, 0x01, 0x41, 0x80, + 0x80, 0xc0, 0x00, 0x0b, 0x07, 0x26, 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x02, 0x00, 0x09, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x00, 0x1d, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x00, + 0x1e, 0x04, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x25, 0x0a, 0xb5, 0x47, 0x31, + 0x33, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x10, 0x0a, 0x20, 0x00, 0x41, 0x14, + 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x28, + 0x02, 0x10, 0x22, 0x01, 0x28, 0x02, 0x00, 0x04, 0x7f, 0x20, 0x01, 0x10, + 0x0a, 0x20, 0x00, 0x28, 0x02, 0x10, 0x05, 0x20, 0x01, 0x0b, 0x41, 0x0c, + 0x10, 0x0b, 0x0b, 0x0b, 0x26, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x00, + 0x28, 0x02, 0x00, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, 0x22, 0x00, + 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x45, 0x0d, 0x00, 0x20, + 0x01, 0x20, 0x00, 0x10, 0x0b, 0x0b, 0x0b, 0x85, 0x02, 0x01, 0x03, 0x7f, + 0x20, 0x00, 0x04, 0x40, 0x20, 0x01, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x22, + 0x03, 0x4d, 0x41, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6b, 0x20, 0x03, 0x4d, + 0x1b, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x41, 0xc0, 0x82, 0xc0, 0x00, 0x28, + 0x02, 0x00, 0x21, 0x03, 0x20, 0x00, 0x41, 0x08, 0x6b, 0x22, 0x01, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, 0x7e, 0x71, 0x36, 0x02, 0x00, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x20, + 0x00, 0x6b, 0x20, 0x02, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x41, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x41, 0x04, 0x6b, 0x28, 0x02, 0x00, 0x41, 0x7c, + 0x71, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02, 0x2d, 0x00, 0x00, 0x41, + 0x01, 0x71, 0x0d, 0x01, 0x20, 0x01, 0x10, 0x36, 0x20, 0x02, 0x28, 0x02, + 0x00, 0x21, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x71, 0x04, + 0x40, 0x20, 0x02, 0x20, 0x00, 0x41, 0x02, 0x72, 0x22, 0x00, 0x36, 0x02, + 0x00, 0x0b, 0x20, 0x03, 0x21, 0x01, 0x20, 0x00, 0x41, 0x7c, 0x71, 0x22, + 0x00, 0x20, 0x02, 0x6b, 0x41, 0x08, 0x6b, 0x20, 0x00, 0x4d, 0x0d, 0x02, + 0x0b, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x04, 0x41, 0x7c, 0x71, 0x22, 0x02, + 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, 0x02, 0x20, 0x04, 0x41, 0x02, 0x71, + 0x1b, 0x22, 0x02, 0x45, 0x0d, 0x00, 0x20, 0x02, 0x2d, 0x00, 0x00, 0x41, + 0x01, 0x71, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x08, 0x41, + 0x7c, 0x71, 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x41, 0x01, 0x72, + 0x36, 0x02, 0x08, 0x20, 0x03, 0x21, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x00, + 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x41, 0xc0, 0x82, 0xc0, 0x00, 0x20, + 0x01, 0x36, 0x02, 0x00, 0x0b, 0x0b, 0x48, 0x01, 0x01, 0x7f, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x02, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x02, 0x49, + 0x0d, 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, 0x1a, 0x20, 0x01, 0x28, 0x02, + 0x10, 0x1a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x1a, 0x20, 0x01, 0x28, 0x02, + 0x14, 0x22, 0x03, 0x20, 0x02, 0x20, 0x03, 0x6a, 0x4b, 0x0d, 0x00, 0x20, + 0x01, 0x41, 0x00, 0x36, 0x02, 0x14, 0x0c, 0x01, 0x0b, 0x00, 0x0b, 0x20, + 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x67, 0x01, 0x03, 0x7f, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x08, + 0x6a, 0x41, 0x0b, 0x41, 0x00, 0x10, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x0c, + 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, 0x02, 0x41, 0x80, 0x80, + 0xc0, 0x00, 0x29, 0x00, 0x00, 0x37, 0x00, 0x00, 0x20, 0x02, 0x41, 0x07, + 0x6a, 0x41, 0x87, 0x80, 0xc0, 0x00, 0x28, 0x00, 0x00, 0x36, 0x00, 0x00, + 0x20, 0x00, 0x41, 0x14, 0x6a, 0x41, 0x02, 0x3a, 0x00, 0x00, 0x20, 0x00, + 0x42, 0x0b, 0x37, 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x04, + 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x66, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x20, 0x01, 0x41, 0x00, 0x4e, 0x04, + 0x40, 0x02, 0x7f, 0x20, 0x02, 0x45, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x01, 0x10, 0x0f, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x21, 0x02, + 0x20, 0x03, 0x28, 0x02, 0x08, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x01, + 0x41, 0x01, 0x10, 0x10, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x02, 0x20, + 0x03, 0x28, 0x02, 0x00, 0x0b, 0x22, 0x01, 0x0d, 0x01, 0x0b, 0x00, 0x0b, + 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x36, + 0x02, 0x04, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x33, 0x01, + 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, + 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x10, 0x20, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, + 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0x4a, 0x01, 0x01, 0x7f, 0x41, 0x01, 0x21, 0x03, 0x02, 0x40, + 0x20, 0x01, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x01, 0x0c, 0x01, 0x0b, + 0x20, 0x01, 0x41, 0x01, 0x10, 0x11, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, + 0x04, 0x40, 0x20, 0x03, 0x45, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, 0x10, + 0x38, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x0d, 0x01, 0x0b, 0x41, 0x00, 0x21, + 0x03, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x0b, 0x9c, 0x01, 0x01, 0x02, 0x7f, 0x23, 0x00, + 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x41, + 0x01, 0x6b, 0x22, 0x00, 0x20, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x00, 0x0b, + 0x20, 0x00, 0x41, 0x02, 0x76, 0x21, 0x00, 0x20, 0x02, 0x41, 0xc0, 0x82, + 0xc0, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0x0c, 0x02, 0x40, 0x20, 0x00, + 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x10, 0x35, 0x22, 0x03, 0x0d, + 0x00, 0x20, 0x02, 0x20, 0x00, 0x20, 0x01, 0x10, 0x34, 0x41, 0x00, 0x21, + 0x03, 0x20, 0x02, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x20, 0x02, 0x28, 0x02, + 0x04, 0x22, 0x03, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x08, 0x20, + 0x02, 0x20, 0x03, 0x36, 0x02, 0x0c, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x41, 0x0c, 0x6a, 0x10, 0x35, 0x21, 0x03, 0x0b, 0x41, 0xc0, 0x82, 0xc0, + 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, + 0x10, 0x6a, 0x24, 0x00, 0x20, 0x03, 0x0b, 0xd0, 0x01, 0x01, 0x03, 0x7f, + 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, 0x02, + 0x28, 0x02, 0x00, 0x22, 0x04, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, 0x10, + 0x0f, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x04, 0x20, 0x03, 0x28, 0x02, + 0x00, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0c, + 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x04, 0x22, 0x05, 0x45, 0x04, 0x40, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x10, 0x20, + 0x03, 0x28, 0x02, 0x0c, 0x21, 0x04, 0x20, 0x03, 0x28, 0x02, 0x08, 0x21, + 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x10, 0x11, 0x22, 0x02, + 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x02, + 0x20, 0x04, 0x20, 0x05, 0x10, 0x37, 0x20, 0x04, 0x20, 0x05, 0x10, 0x0b, + 0x20, 0x01, 0x21, 0x04, 0x0b, 0x20, 0x00, 0x02, 0x7f, 0x20, 0x02, 0x04, + 0x40, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x41, 0x00, 0x0c, 0x01, + 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x41, 0x01, 0x21, 0x04, + 0x41, 0x01, 0x0b, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, + 0x04, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x0b, 0xa7, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, 0x00, 0x28, 0x02, 0x04, + 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x04, 0x6b, 0x4b, 0x04, + 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x22, 0x01, 0x20, 0x04, 0x49, 0x0d, + 0x01, 0x20, 0x03, 0x20, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x49, 0x0d, + 0x01, 0x20, 0x04, 0x20, 0x01, 0x20, 0x01, 0x20, 0x04, 0x49, 0x1b, 0x22, + 0x01, 0x41, 0x08, 0x20, 0x01, 0x41, 0x08, 0x4b, 0x1b, 0x21, 0x01, 0x02, + 0x40, 0x20, 0x03, 0x04, 0x40, 0x20, 0x02, 0x41, 0x18, 0x6a, 0x41, 0x01, + 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x14, 0x20, 0x02, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0x10, 0x0c, 0x01, 0x0b, 0x20, + 0x02, 0x41, 0x00, 0x36, 0x02, 0x10, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x20, + 0x02, 0x41, 0x10, 0x6a, 0x10, 0x12, 0x20, 0x02, 0x28, 0x02, 0x00, 0x41, + 0x01, 0x46, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, 0x29, 0x02, 0x04, 0x37, + 0x02, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0f, 0x0b, + 0x00, 0x0b, 0x32, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x02, 0x10, 0x13, + 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x00, + 0x6a, 0x20, 0x01, 0x20, 0x02, 0x10, 0x37, 0x20, 0x03, 0x20, 0x02, 0x20, + 0x03, 0x6a, 0x22, 0x01, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x20, + 0x01, 0x36, 0x02, 0x08, 0x0b, 0x46, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, + 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, + 0x02, 0x41, 0x00, 0x10, 0x0e, 0x20, 0x03, 0x28, 0x02, 0x08, 0x21, 0x04, + 0x20, 0x00, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x00, + 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x01, 0x20, 0x02, 0x10, + 0x37, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x10, + 0x6a, 0x24, 0x00, 0x0b, 0x14, 0x00, 0x20, 0x01, 0x20, 0x03, 0x46, 0x04, + 0x40, 0x20, 0x00, 0x20, 0x02, 0x20, 0x01, 0x10, 0x37, 0x0f, 0x0b, 0x00, + 0x0b, 0xc6, 0x01, 0x01, 0x04, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x0d, 0x00, + 0x20, 0x00, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x45, 0x0d, + 0x00, 0x20, 0x00, 0x45, 0x0d, 0x00, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x21, + 0x00, 0x0b, 0x03, 0x40, 0x02, 0x40, 0x41, 0x00, 0x20, 0x00, 0x04, 0x7f, + 0x20, 0x00, 0x0d, 0x01, 0x41, 0x00, 0x05, 0x41, 0x00, 0x0b, 0x22, 0x00, + 0x6b, 0x22, 0x02, 0x0d, 0x02, 0x20, 0x02, 0x45, 0x0d, 0x02, 0x20, 0x00, + 0x41, 0xc0, 0x82, 0xc0, 0x00, 0x6a, 0x22, 0x00, 0x2c, 0x00, 0x00, 0x22, + 0x03, 0x41, 0x7f, 0x4a, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x22, + 0x04, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x01, 0x1a, 0x20, 0x00, 0x41, 0x02, 0x6a, 0x21, 0x01, 0x0b, + 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xe0, 0x01, 0x49, 0x0d, 0x02, + 0x20, 0x04, 0x22, 0x00, 0x20, 0x01, 0x47, 0x04, 0x7f, 0x20, 0x01, 0x41, + 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x05, 0x41, 0x00, + 0x0b, 0x1a, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xf0, 0x01, 0x49, + 0x0d, 0x02, 0x20, 0x00, 0x20, 0x04, 0x47, 0x04, 0x40, 0x20, 0x00, 0x2d, + 0x00, 0x00, 0x1a, 0x0b, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x6b, + 0x21, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xec, 0x01, 0x01, + 0x06, 0x7f, 0x41, 0x01, 0x21, 0x07, 0x41, 0x01, 0x21, 0x04, 0x03, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x22, 0x06, 0x20, 0x05, + 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x04, + 0x4d, 0x0d, 0x01, 0x20, 0x05, 0x20, 0x08, 0x6a, 0x22, 0x09, 0x20, 0x08, + 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x09, 0x4d, 0x0d, 0x00, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x04, + 0x20, 0x01, 0x20, 0x09, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x09, 0x4b, 0x20, + 0x03, 0x71, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x4f, 0x20, 0x03, 0x72, + 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x46, 0x0d, 0x01, 0x20, 0x06, + 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x02, 0x41, 0x01, + 0x21, 0x07, 0x41, 0x00, 0x21, 0x05, 0x20, 0x06, 0x21, 0x08, 0x0c, 0x05, + 0x0b, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, + 0x01, 0x20, 0x04, 0x20, 0x06, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, + 0x01, 0x20, 0x04, 0x20, 0x08, 0x6b, 0x22, 0x07, 0x20, 0x04, 0x4b, 0x0d, + 0x01, 0x0c, 0x03, 0x0b, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, + 0x05, 0x4b, 0x0d, 0x00, 0x20, 0x06, 0x21, 0x04, 0x20, 0x05, 0x20, 0x07, + 0x47, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x04, 0x20, 0x07, 0x6a, 0x22, 0x04, + 0x4d, 0x0d, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x07, 0x36, 0x02, + 0x04, 0x20, 0x00, 0x20, 0x08, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x41, 0x00, + 0x21, 0x05, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x37, 0x01, 0x01, 0x7f, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x04, 0x24, 0x00, 0x20, 0x04, 0x41, 0x08, + 0x6a, 0x41, 0x00, 0x20, 0x03, 0x20, 0x01, 0x20, 0x02, 0x10, 0x1a, 0x20, + 0x00, 0x20, 0x04, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x04, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x04, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x36, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, 0x02, 0x4d, + 0x04, 0x40, 0x20, 0x02, 0x20, 0x04, 0x4d, 0x04, 0x40, 0x20, 0x02, 0x20, + 0x02, 0x20, 0x01, 0x6b, 0x22, 0x04, 0x49, 0x0d, 0x02, 0x20, 0x00, 0x20, + 0x04, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x36, + 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xa0, 0x02, + 0x01, 0x07, 0x7f, 0x41, 0x01, 0x21, 0x09, 0x41, 0x01, 0x21, 0x04, 0x03, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x22, + 0x07, 0x20, 0x05, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x49, 0x0d, 0x00, 0x20, + 0x01, 0x20, 0x04, 0x4d, 0x0d, 0x03, 0x20, 0x07, 0x41, 0x01, 0x6a, 0x22, + 0x04, 0x20, 0x07, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x6a, 0x22, + 0x08, 0x20, 0x04, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x08, 0x6b, 0x22, + 0x08, 0x20, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x08, 0x4d, 0x0d, + 0x00, 0x20, 0x0a, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x0a, 0x49, 0x0d, + 0x00, 0x20, 0x06, 0x20, 0x05, 0x20, 0x06, 0x6a, 0x22, 0x06, 0x4b, 0x0d, + 0x00, 0x20, 0x01, 0x20, 0x06, 0x6b, 0x22, 0x06, 0x20, 0x01, 0x4b, 0x0d, + 0x00, 0x20, 0x01, 0x20, 0x06, 0x4d, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x20, 0x08, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x08, 0x20, 0x00, + 0x20, 0x06, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x06, 0x4b, 0x20, 0x03, 0x71, + 0x0d, 0x00, 0x20, 0x06, 0x20, 0x08, 0x4d, 0x20, 0x03, 0x72, 0x45, 0x0d, + 0x00, 0x20, 0x06, 0x20, 0x08, 0x46, 0x0d, 0x01, 0x41, 0x01, 0x21, 0x09, + 0x41, 0x00, 0x21, 0x05, 0x20, 0x07, 0x21, 0x0a, 0x0c, 0x04, 0x0b, 0x20, + 0x05, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, 0x01, 0x20, + 0x04, 0x20, 0x07, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x49, 0x0d, 0x01, 0x20, + 0x04, 0x20, 0x0a, 0x6b, 0x22, 0x09, 0x20, 0x04, 0x4b, 0x0d, 0x01, 0x0c, + 0x02, 0x0b, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x4b, + 0x0d, 0x00, 0x20, 0x05, 0x20, 0x09, 0x47, 0x04, 0x40, 0x20, 0x07, 0x21, + 0x04, 0x0c, 0x03, 0x0b, 0x20, 0x07, 0x20, 0x09, 0x6a, 0x22, 0x04, 0x20, + 0x07, 0x4f, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x41, 0x00, 0x21, 0x05, 0x0b, + 0x20, 0x02, 0x20, 0x09, 0x47, 0x0d, 0x01, 0x0b, 0x0b, 0x20, 0x0a, 0x0b, + 0x2b, 0x01, 0x01, 0x7e, 0x03, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, 0x01, + 0x41, 0x01, 0x6b, 0x21, 0x01, 0x42, 0x01, 0x20, 0x00, 0x31, 0x00, 0x00, + 0x86, 0x20, 0x02, 0x84, 0x21, 0x02, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, + 0x00, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x02, 0x0b, 0x04, 0x00, 0x41, 0x00, + 0x0b, 0xbd, 0x04, 0x02, 0x05, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0xa0, + 0x01, 0x6b, 0x22, 0x00, 0x24, 0x00, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, + 0x0d, 0x20, 0x00, 0x41, 0x30, 0x6a, 0x41, 0x00, 0x10, 0x1f, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x30, 0x45, 0x04, 0x40, + 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x20, 0x00, 0x41, 0x3c, 0x6a, 0x29, + 0x02, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x02, 0x34, + 0x37, 0x03, 0x48, 0x20, 0x00, 0x41, 0xe0, 0x00, 0x6a, 0x20, 0x00, 0x41, + 0xd4, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x01, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x29, 0x02, 0x4c, 0x22, 0x05, 0x37, 0x03, 0x58, 0x20, + 0x00, 0x20, 0x01, 0x36, 0x02, 0x6c, 0x20, 0x00, 0x20, 0x05, 0x3e, 0x02, + 0x68, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe8, 0x00, + 0x6a, 0x10, 0x20, 0x20, 0x00, 0x28, 0x02, 0x90, 0x01, 0x45, 0x0d, 0x02, + 0x20, 0x00, 0x41, 0xf8, 0x00, 0x6a, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, + 0x28, 0x02, 0x00, 0x22, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x29, 0x03, 0x90, 0x01, 0x22, 0x05, 0x37, 0x03, 0x70, 0x20, 0x00, 0x41, + 0x88, 0x01, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x05, + 0x37, 0x03, 0x80, 0x01, 0x02, 0x40, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, + 0x21, 0x45, 0x04, 0x40, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x21, 0x03, 0x20, + 0x00, 0x41, 0x24, 0x6a, 0x22, 0x01, 0x22, 0x02, 0x28, 0x02, 0x00, 0x04, + 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x03, + 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, 0x03, 0x20, 0x02, 0x41, 0x04, 0x6a, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x14, 0x21, 0x02, 0x20, 0x00, + 0x28, 0x02, 0x10, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x20, 0x00, 0x41, + 0xf8, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x29, 0x03, 0x70, 0x37, 0x03, 0x90, 0x01, 0x20, 0x00, 0x41, 0x90, + 0x01, 0x6a, 0x10, 0x22, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, + 0x01, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x48, 0x0d, 0x05, 0x20, 0x02, 0x20, + 0x04, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x7f, + 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x02, + 0x20, 0x01, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x0c, 0x21, 0x01, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x02, 0x2d, 0x00, + 0x04, 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x02, 0x41, 0x01, 0x3a, 0x00, + 0x04, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, 0x6a, + 0x22, 0x03, 0x20, 0x02, 0x48, 0x0d, 0x05, 0x20, 0x01, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x80, 0x01, 0x6a, 0x10, + 0x0a, 0x0b, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, 0x23, 0x20, 0x00, 0x41, + 0xd8, 0x00, 0x6a, 0x10, 0x0a, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0xc8, + 0x00, 0x6a, 0x41, 0xa9, 0x82, 0xc0, 0x00, 0x41, 0x14, 0x10, 0x15, 0x20, + 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x24, 0x20, 0x00, 0x41, 0xc8, 0x00, + 0x6a, 0x10, 0x0a, 0x0b, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, 0x0a, 0x20, + 0x00, 0x41, 0x2c, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x47, 0x04, 0x40, + 0x20, 0x00, 0x28, 0x02, 0x28, 0x22, 0x01, 0x28, 0x02, 0x00, 0x04, 0x7f, + 0x20, 0x01, 0x10, 0x0a, 0x20, 0x00, 0x28, 0x02, 0x28, 0x05, 0x20, 0x01, + 0x0b, 0x41, 0x0c, 0x10, 0x0b, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, + 0x24, 0x00, 0x0f, 0x0b, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x01, 0x24, + 0x00, 0x20, 0x01, 0x41, 0x9b, 0x82, 0xc0, 0x00, 0x41, 0x0e, 0x10, 0x15, + 0x20, 0x01, 0x10, 0x24, 0x20, 0x01, 0x10, 0x0a, 0x00, 0x0b, 0x00, 0x0b, + 0x97, 0x02, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x02, + 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, 0x10, 0x07, 0x22, 0x03, 0x41, 0x03, + 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x81, + 0x08, 0x3b, 0x01, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x10, + 0x2b, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x10, 0x08, 0x20, 0x00, + 0x02, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, 0x02, 0x20, 0x02, + 0x28, 0x02, 0x08, 0x22, 0x01, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x03, + 0x36, 0x02, 0x10, 0x02, 0x40, 0x20, 0x01, 0x41, 0x04, 0x49, 0x0d, 0x00, + 0x20, 0x02, 0x41, 0x00, 0x36, 0x02, 0x1c, 0x20, 0x02, 0x41, 0x10, 0x6a, + 0x20, 0x02, 0x41, 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x30, 0x0d, 0x00, 0x20, + 0x02, 0x41, 0x20, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x14, 0x10, 0x2b, 0x20, + 0x02, 0x41, 0x10, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x20, 0x22, 0x01, 0x20, + 0x02, 0x28, 0x02, 0x28, 0x10, 0x30, 0x45, 0x0d, 0x02, 0x20, 0x02, 0x41, + 0x20, 0x6a, 0x10, 0x0a, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x01, + 0x41, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0x08, 0x6a, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x10, 0x6a, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, + 0x36, 0x02, 0x00, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x1c, 0x21, + 0x03, 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x20, 0x02, 0x29, 0x02, 0x24, 0x37, + 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x41, 0x00, + 0x0b, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x10, 0x0a, 0x0b, 0x20, 0x02, 0x41, + 0x30, 0x6a, 0x24, 0x00, 0x0b, 0x62, 0x02, 0x01, 0x7f, 0x01, 0x7e, 0x23, + 0x00, 0x41, 0x20, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x10, + 0x6a, 0x20, 0x01, 0x10, 0x26, 0x02, 0x40, 0x20, 0x02, 0x28, 0x02, 0x10, + 0x04, 0x40, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x41, 0x18, 0x6a, + 0x28, 0x02, 0x00, 0x22, 0x01, 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x02, + 0x29, 0x03, 0x10, 0x22, 0x03, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0x08, + 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x03, 0x37, 0x02, + 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0b, + 0x20, 0x02, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0x26, 0x00, 0x20, 0x00, + 0x10, 0x27, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x22, 0x00, 0x2d, 0x00, 0x04, + 0x41, 0x02, 0x46, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x00, + 0x22, 0x00, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x1b, 0x0b, 0xa0, + 0x01, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, + 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x04, 0x41, 0x02, + 0x46, 0x04, 0x40, 0x41, 0x0c, 0x41, 0x04, 0x10, 0x11, 0x22, 0x02, 0x45, + 0x0d, 0x02, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x20, 0x00, 0x20, + 0x02, 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, + 0x02, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x08, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x41, + 0x08, 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x28, 0x02, 0x00, 0x04, + 0x40, 0x20, 0x00, 0x10, 0x0a, 0x0b, 0x20, 0x00, 0x20, 0x03, 0x29, 0x03, + 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x28, + 0x02, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0xdc, 0x03, 0x01, 0x08, 0x7f, 0x23, 0x00, + 0x41, 0x40, 0x6a, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x28, 0x6a, + 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x22, 0x03, 0x10, 0x2d, 0x20, 0x01, 0x28, + 0x02, 0x2c, 0x22, 0x04, 0x28, 0x02, 0x00, 0x22, 0x05, 0x41, 0x01, 0x6b, + 0x22, 0x02, 0x20, 0x05, 0x4e, 0x21, 0x05, 0x02, 0x40, 0x02, 0x40, 0x20, + 0x01, 0x28, 0x02, 0x28, 0x2d, 0x00, 0x04, 0x22, 0x06, 0x41, 0x02, 0x47, + 0x04, 0x40, 0x20, 0x05, 0x0d, 0x02, 0x20, 0x04, 0x20, 0x02, 0x36, 0x02, + 0x00, 0x20, 0x06, 0x45, 0x0d, 0x01, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x21, + 0x04, 0x20, 0x03, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x03, + 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x03, 0x36, 0x02, 0x04, + 0x20, 0x04, 0x20, 0x03, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, + 0x28, 0x02, 0x24, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x20, 0x22, 0x02, + 0x2d, 0x00, 0x04, 0x41, 0x02, 0x46, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, + 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, + 0x1b, 0x22, 0x02, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x06, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x41, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x30, 0x6a, 0x20, 0x02, 0x10, 0x29, + 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x20, 0x01, + 0x28, 0x02, 0x38, 0x22, 0x02, 0x6a, 0x22, 0x05, 0x20, 0x00, 0x49, 0x0d, + 0x03, 0x20, 0x05, 0x41, 0x80, 0x80, 0x01, 0x4b, 0x0d, 0x03, 0x20, 0x01, + 0x28, 0x02, 0x30, 0x21, 0x08, 0x20, 0x01, 0x41, 0x18, 0x6a, 0x20, 0x00, + 0x20, 0x05, 0x10, 0x2e, 0x20, 0x01, 0x28, 0x02, 0x18, 0x20, 0x01, 0x28, + 0x02, 0x1c, 0x20, 0x08, 0x20, 0x02, 0x10, 0x16, 0x41, 0xc4, 0x82, 0xc0, + 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x20, 0x02, 0x6a, 0x22, 0x02, 0x20, + 0x00, 0x49, 0x0d, 0x03, 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x20, 0x02, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x41, 0x30, 0x6a, 0x10, 0x0a, 0x20, 0x01, 0x41, + 0x10, 0x6a, 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x10, 0x2f, + 0x20, 0x06, 0x20, 0x01, 0x28, 0x02, 0x10, 0x20, 0x01, 0x28, 0x02, 0x14, + 0x10, 0x04, 0x0b, 0x20, 0x04, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x01, + 0x6a, 0x22, 0x02, 0x20, 0x00, 0x48, 0x0d, 0x02, 0x20, 0x04, 0x20, 0x02, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x21, 0x00, 0x20, 0x03, + 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x7f, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x03, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, 0x28, 0x02, 0x0c, + 0x21, 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, 0x03, 0x2d, 0x00, 0x04, + 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x03, 0x41, 0x00, 0x3a, 0x00, 0x04, + 0x0b, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, + 0x04, 0x20, 0x03, 0x48, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, + 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x05, 0x0d, 0x01, 0x20, 0x04, 0x20, 0x02, + 0x36, 0x02, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x40, 0x6b, 0x24, 0x00, 0x0f, + 0x0b, 0x00, 0x0b, 0x2a, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x20, 0x00, 0x10, 0x29, 0x20, 0x01, + 0x28, 0x02, 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, 0x10, 0x05, 0x20, 0x01, + 0x10, 0x0a, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x9e, 0x0e, + 0x02, 0x08, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x80, 0x02, 0x6b, 0x22, + 0x00, 0x24, 0x00, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x0d, 0x20, + 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x41, 0x01, 0x10, 0x1f, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x2d, 0x00, 0xa8, + 0x01, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, 0x00, 0x41, 0xe8, 0x00, 0x6a, + 0x20, 0x00, 0x41, 0xb8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x01, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, 0x29, 0x03, + 0x00, 0x22, 0x08, 0x37, 0x03, 0x60, 0x20, 0x00, 0x28, 0x02, 0xac, 0x01, + 0x21, 0x02, 0x20, 0x00, 0x41, 0xf8, 0x00, 0x6a, 0x20, 0x01, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, 0x70, 0x02, 0x7f, 0x02, 0x40, + 0x20, 0x02, 0x41, 0xc4, 0xa5, 0x8a, 0x98, 0x7e, 0x47, 0x04, 0x40, 0x02, + 0x40, 0x20, 0x02, 0x41, 0xed, 0x98, 0x99, 0xe7, 0x03, 0x47, 0x04, 0x40, + 0x20, 0x02, 0x41, 0xce, 0xa6, 0xa3, 0xf4, 0x05, 0x47, 0x0d, 0x01, 0x20, + 0x00, 0x20, 0x00, 0x28, 0x02, 0x78, 0x36, 0x02, 0x84, 0x01, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x70, 0x36, 0x02, 0x80, 0x01, 0x20, 0x00, 0x41, + 0xf0, 0x01, 0x6a, 0x20, 0x00, 0x41, 0x80, 0x01, 0x6a, 0x10, 0x26, 0x20, + 0x00, 0x28, 0x02, 0xf0, 0x01, 0x45, 0x0d, 0x03, 0x20, 0x00, 0x41, 0x90, + 0x01, 0x6a, 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xf0, 0x01, 0x37, 0x03, + 0x88, 0x01, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x27, 0x20, 0x00, + 0x41, 0xdc, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x46, 0x0d, 0x09, + 0x20, 0x00, 0x41, 0x01, 0x3a, 0x00, 0x5c, 0x20, 0x00, 0x41, 0xd8, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x22, 0x02, 0x28, 0x02, 0x00, 0x45, 0x0d, 0x09, + 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, + 0x88, 0x01, 0x37, 0x03, 0xf0, 0x01, 0x20, 0x00, 0x41, 0xce, 0xa6, 0xa3, + 0xf4, 0x05, 0x36, 0x02, 0xa8, 0x01, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, + 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x10, 0x28, 0x20, 0x00, 0x41, 0xa8, + 0x01, 0x6a, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x10, 0x29, 0x20, 0x00, + 0x28, 0x02, 0xac, 0x01, 0x21, 0x06, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, + 0x21, 0x01, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x20, 0x00, 0x28, 0x02, + 0xb0, 0x01, 0x22, 0x04, 0x10, 0x13, 0x20, 0x00, 0x28, 0x02, 0x98, 0x01, + 0x22, 0x05, 0x20, 0x00, 0x28, 0x02, 0xa0, 0x01, 0x22, 0x03, 0x6a, 0x20, + 0x01, 0x20, 0x04, 0x10, 0x37, 0x20, 0x03, 0x20, 0x04, 0x6a, 0x22, 0x04, + 0x20, 0x03, 0x49, 0x0d, 0x09, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0xa0, + 0x01, 0x20, 0x00, 0x20, 0x06, 0x36, 0x02, 0xec, 0x01, 0x20, 0x00, 0x20, + 0x01, 0x36, 0x02, 0xe8, 0x01, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x10, + 0x0a, 0x20, 0x02, 0x28, 0x02, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x28, + 0x02, 0x00, 0x20, 0x05, 0x20, 0x04, 0x10, 0x00, 0x45, 0x04, 0x40, 0x41, + 0xc4, 0x82, 0xc0, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, + 0x08, 0x6a, 0x41, 0x00, 0x10, 0x2a, 0x0b, 0x20, 0x00, 0x41, 0x98, 0x01, + 0x6a, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x10, 0x0a, 0x20, + 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x23, 0x41, 0x03, 0x0c, 0x04, 0x0b, + 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x21, 0x22, 0x01, 0x45, 0x0d, + 0x08, 0x20, 0x00, 0x41, 0xed, 0x98, 0x99, 0xe7, 0x03, 0x36, 0x02, 0xa8, + 0x01, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x01, + 0x6a, 0x10, 0x28, 0x02, 0x7f, 0x41, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x20, 0x01, 0x28, 0x02, 0x08, 0x20, 0x00, 0x28, 0x02, 0xf0, 0x01, 0x20, + 0x00, 0x28, 0x02, 0xf8, 0x01, 0x10, 0x00, 0x0d, 0x00, 0x1a, 0x02, 0x40, + 0x10, 0x01, 0x22, 0x01, 0x41, 0x81, 0x80, 0x01, 0x4f, 0x04, 0x40, 0x20, + 0x00, 0x41, 0x98, 0x01, 0x6a, 0x20, 0x01, 0x10, 0x2b, 0x20, 0x00, 0x28, + 0x02, 0x98, 0x01, 0x22, 0x02, 0x10, 0x02, 0x20, 0x00, 0x20, 0x00, 0x28, + 0x02, 0xa0, 0x01, 0x36, 0x02, 0x8c, 0x01, 0x20, 0x00, 0x20, 0x02, 0x36, + 0x02, 0x88, 0x01, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x20, 0x00, 0x41, + 0x88, 0x01, 0x6a, 0x10, 0x26, 0x20, 0x00, 0x29, 0x02, 0xac, 0x01, 0x21, + 0x08, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x21, 0x01, 0x20, 0x00, 0x41, + 0x98, 0x01, 0x6a, 0x10, 0x0a, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x21, 0x02, + 0x20, 0x01, 0x04, 0x40, 0x10, 0x2c, 0x10, 0x02, 0x20, 0x01, 0x21, 0x02, + 0x0b, 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x10, 0x6a, 0x20, 0x02, 0x10, 0x2a, 0x20, 0x00, 0x20, 0x00, + 0x29, 0x03, 0x10, 0x37, 0x03, 0x98, 0x01, 0x20, 0x00, 0x41, 0xa8, 0x01, + 0x6a, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x10, 0x26, 0x20, 0x00, 0x29, + 0x02, 0xac, 0x01, 0x21, 0x08, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x21, + 0x01, 0x0b, 0x20, 0x01, 0x45, 0x0b, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, + 0x10, 0x0a, 0x0d, 0x08, 0x20, 0x01, 0x45, 0x0d, 0x08, 0x20, 0x00, 0x20, + 0x08, 0x37, 0x02, 0x9c, 0x01, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x98, + 0x01, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0x98, 0x01, + 0x6a, 0x10, 0x29, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x20, 0x00, 0x28, + 0x02, 0xb0, 0x01, 0x10, 0x03, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x10, + 0x0a, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x10, 0x0a, 0x41, 0x03, 0x0c, + 0x03, 0x0b, 0x20, 0x00, 0x41, 0xf0, 0x00, 0x6a, 0x10, 0x0a, 0x20, 0x00, + 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x09, 0x41, 0x8b, 0x82, 0xc0, 0x00, 0x21, + 0x01, 0x41, 0x10, 0x21, 0x02, 0x0c, 0x05, 0x0b, 0x20, 0x00, 0x20, 0x00, + 0x28, 0x02, 0x78, 0x36, 0x02, 0xec, 0x01, 0x20, 0x00, 0x20, 0x00, 0x28, + 0x02, 0x70, 0x36, 0x02, 0xe8, 0x01, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, + 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x10, 0x26, 0x20, 0x00, 0x28, 0x02, + 0xf0, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x20, + 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x22, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xf0, 0x01, 0x22, + 0x08, 0x37, 0x03, 0x88, 0x01, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, 0xf0, 0x01, 0x20, 0x08, 0xa7, 0x21, + 0x06, 0x02, 0x7f, 0x20, 0x03, 0x04, 0x40, 0x20, 0x00, 0x41, 0x40, 0x6b, + 0x20, 0x06, 0x20, 0x03, 0x41, 0x00, 0x10, 0x18, 0x20, 0x00, 0x28, 0x02, + 0x44, 0x20, 0x00, 0x28, 0x02, 0x40, 0x21, 0x02, 0x20, 0x00, 0x41, 0x38, + 0x6a, 0x20, 0x06, 0x20, 0x03, 0x41, 0x01, 0x10, 0x18, 0x20, 0x00, 0x28, + 0x02, 0x3c, 0x20, 0x00, 0x41, 0x30, 0x6a, 0x20, 0x06, 0x20, 0x03, 0x20, + 0x02, 0x20, 0x00, 0x28, 0x02, 0x38, 0x22, 0x05, 0x20, 0x02, 0x20, 0x05, + 0x4b, 0x22, 0x05, 0x1b, 0x22, 0x02, 0x10, 0x19, 0x20, 0x05, 0x1b, 0x22, + 0x05, 0x20, 0x02, 0x6a, 0x22, 0x07, 0x20, 0x05, 0x49, 0x0d, 0x08, 0x20, + 0x00, 0x28, 0x02, 0x34, 0x21, 0x01, 0x20, 0x00, 0x28, 0x02, 0x30, 0x21, + 0x04, 0x20, 0x00, 0x41, 0x28, 0x6a, 0x20, 0x05, 0x20, 0x07, 0x20, 0x06, + 0x20, 0x03, 0x10, 0x1a, 0x02, 0x7f, 0x20, 0x00, 0x28, 0x02, 0x28, 0x21, + 0x07, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x20, 0x01, 0x46, 0x04, 0x7f, 0x20, + 0x04, 0x20, 0x07, 0x20, 0x01, 0x10, 0x39, 0x45, 0x05, 0x41, 0x00, 0x0b, + 0x45, 0x04, 0x40, 0x20, 0x03, 0x20, 0x02, 0x6b, 0x22, 0x01, 0x20, 0x03, + 0x4b, 0x0d, 0x0a, 0x20, 0x02, 0x20, 0x01, 0x20, 0x01, 0x20, 0x02, 0x49, + 0x1b, 0x22, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x20, 0x01, 0x49, 0x0d, + 0x0a, 0x41, 0x7f, 0x21, 0x04, 0x20, 0x06, 0x20, 0x03, 0x10, 0x1c, 0x21, + 0x08, 0x20, 0x02, 0x21, 0x01, 0x41, 0x7f, 0x0c, 0x01, 0x0b, 0x41, 0x00, + 0x21, 0x04, 0x20, 0x03, 0x20, 0x06, 0x20, 0x03, 0x20, 0x05, 0x41, 0x00, + 0x10, 0x1b, 0x22, 0x01, 0x20, 0x06, 0x20, 0x03, 0x20, 0x05, 0x41, 0x01, + 0x10, 0x1b, 0x22, 0x07, 0x20, 0x01, 0x20, 0x07, 0x4b, 0x1b, 0x6b, 0x22, + 0x01, 0x20, 0x03, 0x4b, 0x0d, 0x09, 0x20, 0x00, 0x41, 0x20, 0x6a, 0x20, + 0x06, 0x20, 0x03, 0x20, 0x05, 0x10, 0x19, 0x20, 0x00, 0x28, 0x02, 0x20, + 0x20, 0x00, 0x28, 0x02, 0x24, 0x10, 0x1c, 0x21, 0x08, 0x20, 0x03, 0x0b, + 0x21, 0x07, 0x20, 0x00, 0x41, 0xe4, 0x01, 0x6a, 0x20, 0x03, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x41, 0xdc, 0x01, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0xd0, 0x01, 0x6a, 0x20, 0x07, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0xcc, 0x01, 0x6a, 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0xc4, 0x01, 0x6a, 0x42, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, + 0xc0, 0x01, 0x6a, 0x20, 0x05, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xbc, + 0x01, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xb8, 0x01, + 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, + 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x06, 0x36, 0x02, 0xe0, + 0x01, 0x20, 0x00, 0x41, 0xc0, 0x82, 0xc0, 0x00, 0x36, 0x02, 0xd8, 0x01, + 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xa8, 0x01, 0x20, 0x08, 0x42, 0x20, + 0x88, 0xa7, 0x21, 0x01, 0x20, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, + 0xe4, 0x01, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xdc, + 0x01, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xb4, 0x01, + 0x6a, 0x41, 0x81, 0x02, 0x3b, 0x01, 0x00, 0x20, 0x00, 0x41, 0xb0, 0x01, + 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x06, 0x36, 0x02, + 0xe0, 0x01, 0x20, 0x00, 0x41, 0xc0, 0x82, 0xc0, 0x00, 0x36, 0x02, 0xd8, + 0x01, 0x20, 0x00, 0x42, 0x00, 0x37, 0x03, 0xa8, 0x01, 0x41, 0x01, 0x21, + 0x01, 0x41, 0x00, 0x0b, 0x21, 0x02, 0x02, 0x40, 0x20, 0x03, 0x04, 0x40, + 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x41, 0xcc, + 0x01, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x7f, 0x47, 0x04, 0x40, 0x20, 0x00, + 0x41, 0x98, 0x01, 0x6a, 0x20, 0x01, 0x20, 0x02, 0x10, 0x0c, 0x0c, 0x02, + 0x0b, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x20, 0x01, 0x20, 0x02, 0x10, + 0x0c, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x28, 0x02, 0xac, 0x01, 0x22, 0x02, + 0x0d, 0x08, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x04, 0x40, 0x20, 0x00, + 0x41, 0xa0, 0x01, 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x02, 0x36, 0x02, 0x9c, 0x01, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0x98, + 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x98, 0x01, + 0x0b, 0x20, 0x00, 0x28, 0x02, 0x98, 0x01, 0x21, 0x02, 0x20, 0x00, 0x41, + 0xf0, 0x01, 0x6a, 0x10, 0x0a, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x41, 0x01, + 0x41, 0x00, 0x10, 0x0e, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0xb0, 0x01, + 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0x18, 0x37, 0x03, 0xa8, 0x01, 0x20, + 0x00, 0x20, 0x02, 0x3a, 0x00, 0x98, 0x01, 0x20, 0x00, 0x41, 0xa8, 0x01, + 0x6a, 0x20, 0x00, 0x41, 0x98, 0x01, 0x6a, 0x41, 0x01, 0x10, 0x14, 0x20, + 0x00, 0x28, 0x02, 0xa8, 0x01, 0x20, 0x00, 0x28, 0x02, 0xb0, 0x01, 0x10, + 0x03, 0x20, 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x10, 0x0a, 0x41, 0x03, 0x0c, + 0x01, 0x0b, 0x41, 0x01, 0x0b, 0x21, 0x04, 0x20, 0x00, 0x41, 0xf0, 0x00, + 0x6a, 0x10, 0x0a, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x09, 0x41, + 0x8b, 0x82, 0xc0, 0x00, 0x21, 0x01, 0x41, 0x10, 0x21, 0x02, 0x02, 0x40, + 0x20, 0x04, 0x41, 0x01, 0x6b, 0x0e, 0x03, 0x00, 0x02, 0x04, 0x03, 0x0b, + 0x41, 0x9b, 0x82, 0xc0, 0x00, 0x21, 0x01, 0x41, 0x0e, 0x21, 0x02, 0x0c, + 0x02, 0x0b, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x09, 0x0b, 0x41, + 0xa9, 0x82, 0xc0, 0x00, 0x21, 0x01, 0x41, 0x14, 0x21, 0x02, 0x0b, 0x20, + 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x20, 0x01, 0x20, 0x02, 0x10, 0x15, 0x20, + 0x00, 0x41, 0xa8, 0x01, 0x6a, 0x10, 0x24, 0x20, 0x00, 0x41, 0xa8, 0x01, + 0x6a, 0x10, 0x0a, 0x0b, 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, 0x24, 0x00, + 0x0f, 0x0b, 0x00, 0x0b, 0x20, 0x02, 0x10, 0x17, 0x00, 0x0b, 0x8b, 0x09, + 0x02, 0x08, 0x7f, 0x03, 0x7e, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x03, + 0x24, 0x00, 0x20, 0x03, 0x41, 0x00, 0x3a, 0x00, 0x08, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x7e, 0x02, 0x40, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x41, 0x01, 0x10, 0x30, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x03, 0x2d, 0x00, 0x08, 0x22, 0x02, 0x41, + 0x03, 0x71, 0x22, 0x04, 0x41, 0x03, 0x47, 0x04, 0x40, 0x02, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x01, 0x6b, 0x0e, 0x02, 0x02, 0x01, + 0x00, 0x0b, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, 0x02, 0x0c, 0x03, 0x0b, + 0x20, 0x03, 0x20, 0x02, 0x3a, 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, + 0x00, 0x0c, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, + 0x00, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, + 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x31, 0x0d, 0x03, 0x20, 0x03, 0x28, 0x02, + 0x1c, 0x22, 0x02, 0x41, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x03, 0x20, 0x02, + 0x41, 0x02, 0x76, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x20, 0x02, + 0x3a, 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, 0x00, 0x0c, 0x20, 0x03, + 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x00, 0x3b, 0x01, 0x1c, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x1c, 0x6a, 0x41, 0x02, + 0x10, 0x31, 0x0d, 0x02, 0x20, 0x03, 0x2f, 0x01, 0x1c, 0x22, 0x02, 0x41, + 0xff, 0x01, 0x4d, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, 0x02, + 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x04, 0x4f, 0x0d, 0x01, 0x20, 0x03, + 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x6a, + 0x41, 0x04, 0x10, 0x30, 0x0d, 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, 0x22, + 0x02, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x20, + 0x01, 0x28, 0x02, 0x04, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x03, 0x41, + 0x08, 0x6a, 0x20, 0x02, 0x10, 0x2b, 0x20, 0x01, 0x20, 0x03, 0x28, 0x02, + 0x08, 0x22, 0x04, 0x20, 0x03, 0x28, 0x02, 0x10, 0x10, 0x30, 0x04, 0x40, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x10, 0x0a, 0x0c, 0x01, 0x0b, 0x41, 0x00, + 0x20, 0x03, 0x29, 0x02, 0x0c, 0x22, 0x0c, 0x42, 0x20, 0x88, 0xa7, 0x22, + 0x05, 0x41, 0x07, 0x6b, 0x22, 0x01, 0x20, 0x01, 0x20, 0x05, 0x4b, 0x1b, + 0x21, 0x09, 0x20, 0x04, 0x41, 0x03, 0x6a, 0x41, 0x7c, 0x71, 0x20, 0x04, + 0x6b, 0x21, 0x08, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x01, 0x20, + 0x05, 0x4f, 0x0d, 0x07, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, + 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x06, 0x41, 0x18, 0x74, 0x41, + 0x18, 0x75, 0x22, 0x07, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, 0x08, 0x41, + 0x7f, 0x46, 0x0d, 0x03, 0x20, 0x08, 0x20, 0x01, 0x6b, 0x41, 0x03, 0x71, + 0x0d, 0x03, 0x03, 0x40, 0x20, 0x01, 0x20, 0x09, 0x4f, 0x0d, 0x03, 0x20, + 0x01, 0x20, 0x04, 0x6a, 0x22, 0x02, 0x41, 0x04, 0x6a, 0x28, 0x02, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x72, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, + 0x71, 0x0d, 0x03, 0x20, 0x01, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x22, 0x01, + 0x4d, 0x0d, 0x00, 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, + 0x80, 0x20, 0x21, 0x0a, 0x42, 0x80, 0x80, 0x80, 0x80, 0x10, 0x21, 0x0b, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x06, + 0x41, 0x8b, 0x80, 0xc0, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x6b, + 0x0e, 0x03, 0x00, 0x02, 0x01, 0x0e, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, + 0x22, 0x02, 0x20, 0x05, 0x49, 0x0d, 0x02, 0x42, 0x00, 0x21, 0x0a, 0x0c, + 0x0c, 0x0b, 0x42, 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, + 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, + 0x00, 0x00, 0x21, 0x02, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x06, 0x41, 0xf0, 0x01, 0x6b, 0x0e, 0x05, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x0b, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, + 0x07, 0x41, 0x0f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x02, 0x4b, 0x0d, + 0x0c, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, + 0x0d, 0x0c, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x41, 0xf0, 0x00, 0x6a, 0x41, + 0xff, 0x01, 0x71, 0x41, 0x30, 0x4f, 0x0d, 0x0b, 0x0c, 0x01, 0x0b, 0x20, + 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x0a, + 0x20, 0x02, 0x41, 0x8f, 0x01, 0x4b, 0x0d, 0x0a, 0x0b, 0x20, 0x01, 0x41, + 0x02, 0x6a, 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, + 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, + 0x47, 0x0d, 0x08, 0x42, 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x03, 0x6a, + 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0c, 0x20, 0x02, 0x20, 0x04, 0x6a, + 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x46, 0x0d, + 0x02, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0, 0x00, 0x0c, 0x0a, 0x0b, + 0x42, 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, + 0x05, 0x4f, 0x0d, 0x0a, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, + 0x21, 0x02, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x06, 0x41, 0xe0, + 0x01, 0x47, 0x04, 0x40, 0x20, 0x06, 0x41, 0xed, 0x01, 0x46, 0x0d, 0x01, + 0x20, 0x07, 0x41, 0x1f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x0c, 0x49, + 0x0d, 0x02, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, 0x07, + 0x41, 0xfe, 0x01, 0x71, 0x41, 0xee, 0x01, 0x47, 0x0d, 0x0c, 0x20, 0x02, + 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, 0x0d, 0x0c, 0x0c, + 0x03, 0x0b, 0x20, 0x02, 0x41, 0xe0, 0x01, 0x71, 0x41, 0xa0, 0x01, 0x47, + 0x0d, 0x0b, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, + 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x0a, 0x20, 0x02, 0x41, 0xa0, 0x01, 0x4f, + 0x0d, 0x0a, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, + 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x09, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, + 0x0d, 0x09, 0x0b, 0x42, 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x02, 0x6a, + 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, + 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, 0x0d, + 0x07, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, + 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, 0x0d, 0x0a, 0x0b, 0x20, + 0x02, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x03, 0x0b, 0x00, 0x0b, 0x20, + 0x01, 0x20, 0x05, 0x20, 0x01, 0x20, 0x05, 0x4b, 0x1b, 0x21, 0x02, 0x03, + 0x40, 0x20, 0x01, 0x20, 0x02, 0x46, 0x04, 0x40, 0x20, 0x02, 0x21, 0x01, + 0x0c, 0x03, 0x0b, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2c, 0x00, 0x00, 0x41, + 0x00, 0x48, 0x0d, 0x02, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, + 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, + 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0c, + 0x06, 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x00, 0x0c, 0x01, + 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x20, 0x0b, 0x21, 0x0a, 0x42, + 0x80, 0x80, 0x80, 0x80, 0x10, 0x21, 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x00, + 0x21, 0x0b, 0x0b, 0x20, 0x01, 0xad, 0x20, 0x0a, 0x20, 0x0b, 0x84, 0x84, + 0x21, 0x0a, 0x0b, 0x20, 0x01, 0x20, 0x05, 0x4f, 0x04, 0x40, 0x20, 0x00, + 0x20, 0x0c, 0x37, 0x02, 0x04, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x00, + 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x0a, 0x37, 0x02, 0x14, 0x20, 0x03, + 0x20, 0x0c, 0x37, 0x02, 0x0c, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x08, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x10, 0x0a, 0x20, 0x00, 0x41, 0x00, 0x36, + 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0x90, + 0x02, 0x02, 0x05, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, + 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x20, 0x00, 0x41, 0x0c, + 0x6a, 0x22, 0x02, 0x10, 0x2d, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x14, + 0x22, 0x03, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, 0x01, 0x6b, 0x22, 0x05, + 0x20, 0x04, 0x4e, 0x0d, 0x00, 0x20, 0x01, 0x28, 0x02, 0x10, 0x2d, 0x00, + 0x04, 0x20, 0x03, 0x20, 0x05, 0x36, 0x02, 0x00, 0x41, 0x02, 0x46, 0x04, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x00, + 0x28, 0x02, 0x08, 0x10, 0x2c, 0x10, 0x06, 0x22, 0x00, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x41, 0x81, 0x80, 0x01, 0x4f, 0x0d, 0x03, 0x41, 0xc4, 0x82, + 0xc0, 0x00, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x08, 0x6a, + 0x20, 0x00, 0x10, 0x2a, 0x20, 0x01, 0x20, 0x01, 0x29, 0x03, 0x08, 0x37, + 0x03, 0x18, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x20, 0x01, 0x41, 0x18, 0x6a, + 0x10, 0x20, 0x20, 0x01, 0x28, 0x02, 0x20, 0x22, 0x00, 0x45, 0x0d, 0x00, + 0x20, 0x01, 0x29, 0x02, 0x24, 0x21, 0x06, 0x0c, 0x01, 0x0b, 0x41, 0x00, + 0x21, 0x00, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, + 0x20, 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, 0x36, + 0x02, 0x04, 0x20, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, + 0x20, 0x01, 0x28, 0x02, 0x04, 0x21, 0x02, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x20, 0x01, 0x20, 0x06, 0x37, 0x02, 0x24, 0x20, 0x01, 0x20, 0x00, 0x36, + 0x02, 0x20, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x10, 0x22, 0x20, 0x02, 0x28, + 0x02, 0x00, 0x22, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x00, 0x48, + 0x0d, 0x01, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x01, + 0x41, 0x30, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x48, 0x01, 0x02, + 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, + 0x41, 0x08, 0x6a, 0x41, 0x04, 0x41, 0x00, 0x10, 0x0e, 0x20, 0x02, 0x28, + 0x02, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, + 0x02, 0x04, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, + 0x01, 0x28, 0x00, 0x00, 0x36, 0x00, 0x00, 0x20, 0x00, 0x41, 0x04, 0x36, + 0x02, 0x08, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0xb7, 0x01, + 0x02, 0x03, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, + 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, + 0x02, 0x41, 0x04, 0x6a, 0x22, 0x04, 0x20, 0x02, 0x4f, 0x04, 0x40, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x21, 0x01, 0x20, 0x03, 0x20, 0x04, 0x41, 0x00, + 0x10, 0x0e, 0x20, 0x03, 0x29, 0x03, 0x00, 0x21, 0x05, 0x20, 0x00, 0x41, + 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, 0x20, 0x05, 0x37, 0x02, 0x00, 0x20, + 0x02, 0x41, 0x3f, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x41, 0x02, + 0x74, 0x10, 0x32, 0x0c, 0x03, 0x0b, 0x20, 0x02, 0x41, 0xff, 0xff, 0x00, + 0x4d, 0x04, 0x40, 0x20, 0x03, 0x20, 0x02, 0x41, 0x02, 0x74, 0x41, 0x01, + 0x72, 0x3b, 0x01, 0x0e, 0x20, 0x00, 0x20, 0x03, 0x41, 0x0e, 0x6a, 0x41, + 0x02, 0x10, 0x14, 0x0c, 0x03, 0x0b, 0x20, 0x02, 0x41, 0xff, 0xff, 0xff, + 0xff, 0x03, 0x4b, 0x0d, 0x01, 0x20, 0x02, 0x41, 0x02, 0x74, 0x41, 0x02, + 0x72, 0x20, 0x00, 0x10, 0x33, 0x0c, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, + 0x41, 0x03, 0x10, 0x32, 0x20, 0x02, 0x20, 0x00, 0x10, 0x33, 0x0b, 0x20, + 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, 0x14, 0x20, 0x03, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x58, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x41, 0xc4, 0x82, + 0xc0, 0x00, 0x28, 0x02, 0x00, 0x10, 0x2f, 0x20, 0x02, 0x28, 0x02, 0x08, + 0x21, 0x03, 0x20, 0x01, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x4b, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x02, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x04, 0x36, 0x02, 0x04, + 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x02, 0x01, 0x7f, + 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, + 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x01, 0x10, 0x0e, 0x20, 0x02, + 0x29, 0x03, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x08, + 0x20, 0x00, 0x20, 0x03, 0x37, 0x02, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0x2a, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x00, 0x24, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x00, 0x41, + 0xc4, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x10, 0x2e, 0x20, 0x00, 0x28, + 0x02, 0x08, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x2d, 0x01, + 0x01, 0x7f, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x02, + 0x41, 0x00, 0x4c, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x20, 0x02, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x01, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x0b, 0x3d, 0x01, 0x01, 0x7f, + 0x02, 0x40, 0x20, 0x01, 0x20, 0x02, 0x4d, 0x04, 0x40, 0x20, 0x02, 0x41, + 0x80, 0x80, 0x01, 0x4d, 0x04, 0x40, 0x20, 0x02, 0x20, 0x02, 0x20, 0x01, + 0x6b, 0x22, 0x03, 0x49, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, + 0x04, 0x20, 0x00, 0x20, 0x01, 0x41, 0xc8, 0x82, 0xc0, 0x00, 0x6a, 0x36, + 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x4b, 0x01, + 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, + 0x02, 0x41, 0x08, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x80, 0x80, 0x01, + 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x04, + 0x20, 0x03, 0x41, 0xc8, 0x82, 0xc0, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, + 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0x39, 0x01, 0x02, 0x7f, 0x20, 0x00, 0x28, 0x02, 0x04, 0x22, + 0x03, 0x20, 0x02, 0x49, 0x22, 0x04, 0x45, 0x04, 0x40, 0x20, 0x01, 0x20, + 0x02, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x20, 0x02, 0x10, 0x16, + 0x20, 0x00, 0x20, 0x03, 0x20, 0x02, 0x6b, 0x36, 0x02, 0x04, 0x20, 0x00, + 0x20, 0x01, 0x20, 0x02, 0x6a, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x04, 0x0b, + 0x42, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x2f, 0x01, 0x04, 0x21, 0x03, 0x20, + 0x00, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x20, 0x03, 0x41, 0x01, 0x71, 0x45, + 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, + 0x30, 0x0f, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x76, 0x3a, 0x00, + 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x20, + 0x02, 0x41, 0x01, 0x6b, 0x10, 0x30, 0x0b, 0x26, 0x01, 0x01, 0x7f, 0x23, + 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x20, 0x01, + 0x3a, 0x00, 0x0f, 0x20, 0x00, 0x20, 0x02, 0x41, 0x0f, 0x6a, 0x41, 0x01, + 0x10, 0x14, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x26, 0x01, + 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, + 0x02, 0x20, 0x00, 0x36, 0x02, 0x0c, 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, + 0x6a, 0x41, 0x04, 0x10, 0x14, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x0b, 0xd2, 0x01, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x41, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x71, 0x20, 0x01, 0x47, 0x0d, 0x00, 0x20, 0x02, + 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x03, 0x4b, 0x0d, 0x00, 0x20, 0x03, + 0x41, 0xff, 0xff, 0xff, 0xff, 0x01, 0x71, 0x20, 0x03, 0x47, 0x0d, 0x00, + 0x20, 0x01, 0x41, 0x02, 0x74, 0x22, 0x01, 0x20, 0x03, 0x41, 0x03, 0x74, + 0x22, 0x02, 0x20, 0x01, 0x20, 0x02, 0x4b, 0x1b, 0x22, 0x02, 0x41, 0x08, + 0x6a, 0x22, 0x01, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x02, 0x7f, 0x02, 0x40, + 0x20, 0x01, 0x20, 0x01, 0x41, 0x80, 0x80, 0x04, 0x6a, 0x22, 0x02, 0x4d, + 0x04, 0x40, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x01, 0x20, 0x02, 0x4d, + 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x10, 0x76, 0x22, 0x02, + 0x40, 0x00, 0x22, 0x01, 0x41, 0x7f, 0x46, 0x04, 0x40, 0x41, 0x00, 0x21, + 0x01, 0x41, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0xff, 0xff, 0x03, + 0x71, 0x20, 0x01, 0x47, 0x0d, 0x01, 0x20, 0x02, 0x41, 0x10, 0x74, 0x22, + 0x02, 0x41, 0x08, 0x6b, 0x20, 0x02, 0x4b, 0x0d, 0x01, 0x20, 0x01, 0x41, + 0x10, 0x74, 0x22, 0x01, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20, 0x01, 0x20, + 0x01, 0x20, 0x02, 0x6a, 0x41, 0x02, 0x72, 0x36, 0x02, 0x00, 0x41, 0x00, + 0x0b, 0x21, 0x02, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, + 0x20, 0x02, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0xaf, 0x04, 0x01, + 0x0a, 0x7f, 0x20, 0x00, 0x41, 0x02, 0x74, 0x21, 0x06, 0x41, 0x00, 0x20, + 0x01, 0x6b, 0x21, 0x08, 0x20, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x71, 0x20, 0x00, 0x47, 0x21, 0x09, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x22, + 0x0a, 0x20, 0x01, 0x4b, 0x21, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, 0x21, + 0x00, 0x02, 0x40, 0x03, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x01, 0x20, 0x00, + 0x21, 0x01, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, + 0x08, 0x22, 0x00, 0x41, 0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x09, 0x0d, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x03, 0x20, + 0x01, 0x41, 0x08, 0x6a, 0x22, 0x05, 0x6b, 0x22, 0x04, 0x20, 0x03, 0x4b, + 0x0d, 0x03, 0x20, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x01, 0x20, 0x03, 0x20, + 0x06, 0x6b, 0x22, 0x0c, 0x20, 0x03, 0x4b, 0x0d, 0x03, 0x20, 0x0b, 0x0d, + 0x03, 0x20, 0x05, 0x41, 0x08, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, + 0x03, 0x20, 0x04, 0x20, 0x04, 0x41, 0x40, 0x6b, 0x22, 0x04, 0x4b, 0x0d, + 0x03, 0x02, 0x40, 0x20, 0x04, 0x20, 0x08, 0x20, 0x0c, 0x71, 0x22, 0x04, + 0x4b, 0x04, 0x40, 0x20, 0x05, 0x20, 0x0a, 0x71, 0x0d, 0x03, 0x20, 0x02, + 0x20, 0x00, 0x41, 0x7c, 0x71, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x00, 0x41, 0x01, 0x72, 0x36, 0x02, 0x00, 0x20, 0x01, 0x21, + 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x04, 0x41, 0x08, 0x6b, 0x22, 0x00, 0x20, + 0x04, 0x4b, 0x0d, 0x04, 0x20, 0x03, 0x20, 0x00, 0x6b, 0x22, 0x02, 0x20, + 0x03, 0x4b, 0x0d, 0x04, 0x20, 0x02, 0x41, 0x08, 0x6b, 0x20, 0x02, 0x4b, + 0x0d, 0x04, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, 0x42, + 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, + 0x7c, 0x71, 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x22, 0x02, 0x41, 0x7c, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x41, 0x00, + 0x20, 0x03, 0x20, 0x02, 0x41, 0x02, 0x71, 0x1b, 0x22, 0x02, 0x45, 0x0d, + 0x00, 0x20, 0x02, 0x20, 0x02, 0x28, 0x02, 0x04, 0x41, 0x03, 0x71, 0x20, + 0x00, 0x72, 0x36, 0x02, 0x04, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x04, 0x41, 0x03, 0x71, 0x20, 0x01, 0x72, 0x36, 0x02, 0x04, 0x20, 0x01, + 0x20, 0x01, 0x28, 0x02, 0x08, 0x41, 0x7e, 0x71, 0x36, 0x02, 0x08, 0x20, + 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x03, 0x71, 0x20, + 0x00, 0x72, 0x22, 0x03, 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x02, 0x41, + 0x02, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x21, 0x01, + 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x7d, 0x71, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, 0x22, + 0x01, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, 0x72, + 0x36, 0x02, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x21, 0x07, 0x0c, + 0x05, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x41, 0x7e, 0x71, 0x36, 0x02, 0x08, + 0x02, 0x7f, 0x41, 0x00, 0x20, 0x01, 0x28, 0x02, 0x04, 0x41, 0x7c, 0x71, + 0x22, 0x00, 0x45, 0x0d, 0x00, 0x1a, 0x41, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x1b, 0x0b, 0x21, 0x00, 0x20, 0x01, + 0x10, 0x36, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x71, 0x04, 0x40, + 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, 0x36, 0x02, + 0x00, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, + 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x01, 0x20, 0x00, 0x6b, 0x41, 0x08, + 0x6b, 0x20, 0x01, 0x4b, 0x0d, 0x02, 0x20, 0x00, 0x21, 0x01, 0x0c, 0x01, + 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, + 0x0b, 0x00, 0x0b, 0x20, 0x07, 0x0b, 0x7d, 0x01, 0x02, 0x7f, 0x02, 0x40, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x41, 0x7c, 0x71, 0x22, 0x02, + 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, 0x02, 0x20, 0x01, 0x41, 0x02, 0x71, + 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, + 0x04, 0x41, 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, 0x04, 0x41, 0x7c, 0x71, + 0x72, 0x36, 0x02, 0x04, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, + 0x22, 0x01, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x04, 0x7f, 0x20, 0x02, 0x20, + 0x02, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, 0x00, + 0x41, 0x7c, 0x71, 0x72, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, + 0x05, 0x20, 0x01, 0x0b, 0x41, 0x03, 0x71, 0x36, 0x02, 0x04, 0x20, 0x00, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x36, 0x02, 0x00, 0x0b, + 0x28, 0x01, 0x01, 0x7f, 0x03, 0x40, 0x20, 0x02, 0x20, 0x03, 0x47, 0x04, + 0x40, 0x20, 0x00, 0x20, 0x03, 0x6a, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, + 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x22, 0x01, 0x01, 0x7f, 0x03, 0x40, 0x20, + 0x01, 0x20, 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x41, + 0x00, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, 0x02, 0x0c, + 0x01, 0x0b, 0x0b, 0x0b, 0x3f, 0x01, 0x02, 0x7f, 0x03, 0x40, 0x20, 0x02, + 0x45, 0x04, 0x40, 0x41, 0x00, 0x0f, 0x0b, 0x20, 0x02, 0x41, 0x01, 0x6b, + 0x21, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x03, 0x20, 0x00, 0x2d, + 0x00, 0x00, 0x21, 0x04, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x20, 0x04, 0x46, 0x0d, + 0x00, 0x0b, 0x20, 0x04, 0x20, 0x03, 0x6b, 0x0b, 0x0b, 0x8a, 0x02, 0x03, + 0x00, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x0b, 0x8b, 0x01, 0x68, 0x65, 0x6c, + 0x6c, 0x6f, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x00, 0x41, 0xcd, 0x81, 0xc0, 0x00, 0x0b, 0x33, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x00, 0x41, 0x8b, 0x82, 0xc0, 0x00, 0x0b, 0x32, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, 0x20, 0x69, 0x6e, 0x70, 0x75, + 0x74 +}; +constexpr unsigned int hello_world_caller_wasm_len = 9769; diff --git a/bcos-executor/test/liquid/hello_world_caller.rs b/bcos-executor/test/liquid/hello_world_caller.rs new file mode 100644 index 0000000..066b23d --- /dev/null +++ b/bcos-executor/test/liquid/hello_world_caller.rs @@ -0,0 +1,38 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +use liquid::storage; +use liquid_lang as liquid; + +#[liquid::interface(name = auto)] +mod hello_world { + extern "liquid" { + fn set(&mut self, name: String); + fn get(&self) -> String; + } +} + +#[liquid::contract] +mod hello_world_caller { + use super::*; + use hello_world::HelloWorld; + + #[liquid(storage)] + struct HelloWorldCaller { + hello_world: storage::Value, + } + + #[liquid(methods)] + impl HelloWorldCaller { + pub fn new(&mut self, addr: Address) { + self.hello_world.initialize(HelloWorld::at(addr)); + } + + pub fn set(&mut self, name: String) { + (*self.hello_world).set(name); + } + + pub fn get(&self) -> String { + (*self.hello_world).get().unwrap() + } + } +} diff --git a/bcos-executor/test/liquid/hello_world_caller.wasm b/bcos-executor/test/liquid/hello_world_caller.wasm new file mode 100644 index 0000000000000000000000000000000000000000..9c6fe981dc2b9e237ec85472892333d19192cc91 GIT binary patch literal 9769 zcmc(lON?FjUB~~Ab00J3j(q|{F}9)qdoq}DYB!SyGig%jJ*Iwj>R6(iE|8jOGEIEP zu|4BS+92wgQ~|68iR>_nU%PzS_3Zhf7uUCcbA9`jtt+2j+g|(9rQcq69h;cDZ^C&S z?0)Uil}p!Oa?ajnudi=^Y5VHd+KcP1$n#t4udZ)xPv!wJnU6Mqkdfa2`2)DheZ$Vj z#~<_F1s`0P<$oxAQS^Idr|aB|^S$Tu!URt~U(pR=$ySDCrvHQaMwaZsubH7x)ymsk|`{micIs4cX-tQz=%_i5( zk54++gtNscxy4Y`elfUWCwWcs-bub}231*>$Ji5Wk!zghirO8i{pmSgbnyUW+3yA) zfekpHd{d0;c!A}y@f#^#IC8oexw5(Yt-I`Z!wCNVM$JOr>Y}-^xeWIsuoTVjY}O&U zjTA13vc@sPt=M3t&7Gd}DTs8x$&;^^QxHh#Fn%`K#r`I2)!JI7ID|m$bSZ3rHMt9O zp>*XG89YE}0Cm_rQU|d#fe&Uu@3UQG1Q_#M%b_oz179*5g~RwtUXSHDlNP{33h-Ws z^AZs-4(nQRJszDs&)1PfalEPp;&UF55DYbf^djPX*fkYmTF`?2xG5V~9T1oS5){lj zm#x6HeA+=Qp~bgEo|Y9qJc7Q~Hjs_}v=zXrh>Ph3C;BIVg) z6n0WTXXvj#M#u+K6jsOut2hULjMSJ!Q7pXB(%*zvv8OOG*X1y<4cJ{X7+1eqN0|r^eD$PonE`4@u3>L5(U)%7 zsb%dxsLGbYLRJWa*i5l}&rg+YN-$T*iZI}H(eh||D27N?HV<7g7a1Nm3`B;bF{7lj zr#}<4Y0!4|*@+HKju^a2)<$rG)TvhN%KWeZyet73K`r8JTsC`&wqd^UD*t4D?&6-4%g=Fm8E zZ1SC#B9O&$s6<(i2rBL-^lDuFjLEO@X8;Qe$3w9qDnpZy{6XC9acoR8)z4H>$@n=9iej0jl@*KQ6o=`=W>L(+2uozq;L+1a>uC!DKe zv-1UwrGS8k@YQ$=`X`+~%*rqx%AcE${buulKhH|ydtwQ>pz&iIL4j2$4!5iB*(%s- z!MMX^Yls^|H*j#_${&)vIRy>SVj>w##H=B%od@ zR_FYHXwk_FI|{~Kbl6F~vvZMEMe4C9rwnA+%P~dq>Y$X-F@9I3!L7g|3UfupBy0!~ zr(zo5c(MRjWD{6+VWd?`b&`hNu-%OspODHhA6XH0GB%7^xVMAvNw_oop9&X91q_*Z zdzN%0-k8vUn6@GK8rOX}oM0jVyvx#0>Ld0vtEJsEt7#OKkXAQOcQ+Vsmv$!_awtw3 zQex@aQ@7Pn7kI6Pctk@+thCY_&JKtw_iIHG7J<^r>;|@AS|N_@*GebN$liLxLi*}q z6WVmqLbenkr=K~?Ynf)tPkDbMj*@2sxHpFWluzz4=YB7RH%M2+Obi=$VpCZ-Z2KRI z(An`f$WXVH3(%q?&{T8WmWZp>CtC}4C*6|bs%zdONVw*+<>Ah-PeK;m0o zP_D7yCi`08jO_X_Vi1~#nZ9alW!3`Gt0o^%m|5K0Q9vTB$*{PQ12q8NdC7$e1t1{J z1Xy5Y7V6`*6>u{QxmBIBQp~0m&&_pYz6J=}2N1G`kQmtGoxV4|DqglAFy_-*@BYFQ_q_`ReDG;k8<5 z?~@&~yq}P}hD1tbXt7$7A!$VxmwVdb3prBrESid3GVnx|7br|gj=UI-z6?)7 z&-KJnv!;QTg@wFKm0{L-F*g0+M}ixKFW@&+mtPH>Q{+~;5XeOO>KL3sV`VxQZj>pV z8$5_U9;-TOf<#`B4LD!08ELIMVSb|Z)r4@@MO){5kdNQb(KZys1oeL~-;8O7rrveto z8O)?$Qtp30`o3z^5iV<%wkS6o-~`o4xx|T@^xwH^tW1=ev(tw&}ticowJ0r0^2Nc^bI>6%=dcjXPz z2Z)wnt2%B&+QiUec&euC=p=WZRMg?LLJ~npi(zS~%I**xQgMD-BZqW3nkbyBPwa!i zc9g<)8_SFd73Wl)U?wZ8M@d-#sC1dH2qGpdMSAT&wgKy^nQUbl9TN|fecs& zxPBd{Au5`AwAQs306}2^Q1;oeL?#WW#vX0tLi3SnjbO^fD2@wuMxf(%%Mcd*rw2km zd(Cc`BqPN#WurTu@^_MsO#fK%9UR+=F{Kd}{oVapqj|@VvAw##5}%XSzUM6mD#Ns{ z#mqH}L!o*1yWhTb17HCUZGLp?kN-2~$o#K={%8N)A-}>XAil92-e@1MEr(qmn|qcu z6rGQ0#Xa&^WH_g{kBlOj3IC4AdwwO})F!bd-+kZZn0#h#hBvanZ*e2C%Z_Atr)?Z4 z3x9kx52vGzPApVg{Il*AxZ z9Ty``cM0U-CaOrvFGICjNE2BXEqhtk#$KQj+%u#sd0jv96$gmJVN`jJQLpd%i}G9( zj3-;L0yar8Qixbx4u2p{Fx#8rB#Z1O)S=DeG8t%CM7R@?SKBK{Sl>I8tWs&b!` z<~&k8A_TUx50Kt@bhdC*)lCeo5lA=i! zDXI_9+(V=j(atn)60n9u4$i>TjK)01Y+3{k#%zkr0{$?QnT?sHd&X==S*s|??A`P7 zE+l7(TZ6n}mHoGeT~5$Cxf0knh*1QP>X1nOye=d2#HYqK;q%02SxP8nDbQH+6xK+* zU#&ZY-|80T66T*@XpAA`qI$PVT!=Pq*aoE%CMDk}i)loGQY(8^Z zM>>^?U{NcMS_R8Z*is61@+NQ+mCn!2Haox-xTDxWKz2JsIW(^VQbYo%;;7y}d!9j% zdaFlTurm-vnPN*JA4-xg3kENiBCh!lJTyzQd7lWEy}NmjQBGWlv-xKp+Y0ktKR(q~ zDt8&}qP$MLuZ)2=dhrJdo6cTn<0bBkS*=qf_bT+ek3x;sR18`1g_W z*Nna%DB;)!(00ZD0Tj}r;xTe^p^XF4g@T@!3TC8nVA8Krh?^;`P-mEPhn!ULMuJe? zE-zka?^d_(2CKqV^Ho3Z$~R}okFl*PBc+lh<$f5o|8C?v@YKG98A@g8;iOZ?G;Y#y zR#IzM8L1(7t0?LG1w{><;%PU>ep1nZH-xOl4Z=HWK)F~E{unuqO5!MRKmM2oBKsPH z0aHH-#xs6Dj8HvBZ4w{#2E)^7n1Dc&oX{%!)$p>GVuHF)XLoDb z27-LM3P+_ds+Q#J2&9eN)T3cg4`lq*ls!2s%@|s3oWGkmrstiCjbR^0_i?1Di*voH zU~_M#+Z@_%4!u&-aiM3N`pwQ6BmkisNO>;Wwwa3zshNX_3MFn!k6X>|>)(3g8!Tc@ z6nODMx!@Q0g`vzBq>% zb1zBW*mBS%%WNFzc;{R`O8g^*>40X*!LfD1g5Eflh&`B_Gye=qB{sbTR7H!)3OZ~A z&*l#Sg2DR6idFH4!4={zL2Ow;6&OHl9I_kANw;bK}7w7D7 zy>EP`g*zkiemb{36ViPQo|S|GI-{8%IrX4_(u^5iFoV(YEsivnaWxHAaGt#qKBn0fPT^7G za(^<9++V&!ToO7R-0b-IR+w~-IQ)A%w{d>9b6coRVzfGs)Ht9%ba8T{9()!bWwhc@ z0c_>3Moh~z6>ps`eM+isom;JAsw}q=fD|Ba2%eLV|AjUjRf$N_i`Lv z7E!Z9&P5so5ljM5bTFmM85L1TqmWlJ|Ukpl6bWYpDu8GT$c1N2c`T&Za&UO%KkW zHgkg?TY8dXs)^L1YU93W<^r)&6l~@*a@)o$e~r}v6|^mEo$vQGvH6&Td?x2=-+Uh# z?C)c*PRW|^f_3PtcKf}B7om%`G2@r;rcY)=t*v|pSYpJ!z@4uPRko0&A=*kP=M$oY zQnzJ*0vb4U3CdIA*gfhCnPzVOL_RKC7nRMX*`pqo*Bbu( zW{R32-E6}m?Z$0#3h-7rCs<0gav=8?O|DA9rXK|&7PcQeISsv9hY@ljf#>h6GzwKx zfF~M$QCR_AAJEB-o+)0v>Trb*rg0iRjUzycUU+W}MP{Rz@K=SOMaob*>^96&Sny`W z%Vu(CsX4IXjheK*N=lLa4_z3M4~T$1;oo`*BUxs@Cj6LsW>h_}RA2Xb63ZPvo#-e- zG|)#Tq>}h{K?v7S$^VX4@f}3{DB52VDPJ2Rp!p({2GoZ7GTBM9DotRd{qzruLZq+% zP;cK3*vuCca>nYM!nnS_35|R;3rUADR1Bl-ab-d*FfuFjHjH*U#0bR#(ex(>5(0G? z(gCNs0WxJ95D_MHWMMy@P-Q6cfM)CMTnYw)-PDXpoKh%O@=g0KgMmXITh?>62$s21 zWTQdW)9KjrtlwtzX)?gJ@au;Zkb9VS{+)Ev#gTHzEWgCimqKtNz$timMW0F`?GOL} zYrn*xT4Kg1o2-FI1=n8rP5c=avil0FewYDLl>z#l2F(F*W}3uwrft8dux4%J#Ea`l zd3l*MYFgA5Dvy%!9211gUR=3|2Sx;lgBdf{28wD?$^Qutd|VN!Wt|sd|9K&9U`v9Q z=$m?3ehy9qOFbZb0j*&DumLbd9NlCotcM}pWVFQ@s$onrZj|M>Lv#eiyBvJ{OY4^} zU;WD0uWns_fhh6+`sbQ|c^#Ub2tV~NKJZuQ&si6yeEgLw8&|G={YtvNetG?QeqD9x o%ByRaFTIeit!=HneEs>WuUvj1UAelQw$|5PNSCf$du9870TxC`NB{r; literal 0 HcmV?d00001 diff --git a/bcos-executor/test/liquid/transfer.h b/bcos-executor/test/liquid/transfer.h new file mode 100644 index 0000000..8341b58 --- /dev/null +++ b/bcos-executor/test/liquid/transfer.h @@ -0,0 +1,1071 @@ +#pragma once + +constexpr unsigned char transfer_wasm[] = {0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x4f, 0x0d, + 0x60, 0x02, 0x7f, 0x7f, 0x00, 0x60, 0x03, 0x7f, 0x7f, 0x7f, 0x00, 0x60, 0x01, 0x7f, 0x00, 0x60, + 0x03, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x60, 0x00, 0x01, + 0x7f, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x05, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x60, + 0x00, 0x00, 0x60, 0x01, 0x7f, 0x01, 0x7f, 0x60, 0x04, 0x7f, 0x7f, 0x7f, 0x7f, 0x01, 0x7f, 0x60, + 0x02, 0x7f, 0x7f, 0x01, 0x7e, 0x60, 0x06, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x02, 0x6b, + 0x06, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0f, 0x67, 0x65, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x05, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0b, 0x67, 0x65, + 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x00, 0x02, 0x04, 0x62, 0x63, 0x6f, 0x73, + 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x00, 0x00, 0x04, 0x62, 0x63, 0x6f, 0x73, 0x0a, 0x67, + 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x00, 0x03, 0x04, 0x62, 0x63, 0x6f, 0x73, + 0x0a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x00, 0x04, 0x04, 0x62, 0x63, + 0x6f, 0x73, 0x06, 0x72, 0x65, 0x76, 0x65, 0x72, 0x74, 0x00, 0x00, 0x03, 0x4b, 0x4a, 0x00, 0x01, + 0x02, 0x01, 0x00, 0x04, 0x07, 0x00, 0x04, 0x07, 0x05, 0x09, 0x05, 0x01, 0x00, 0x01, 0x06, 0x01, + 0x02, 0x00, 0x00, 0x01, 0x01, 0x04, 0x02, 0x04, 0x04, 0x07, 0x0a, 0x0b, 0x00, 0x00, 0x03, 0x01, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x0a, 0x05, 0x08, + 0x09, 0x01, 0x01, 0x02, 0x02, 0x08, 0x06, 0x06, 0x02, 0x0b, 0x01, 0x06, 0x03, 0x01, 0x00, 0x0c, + 0x02, 0x01, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x05, 0x03, 0x01, 0x00, 0x11, 0x06, 0x09, 0x01, + 0x7f, 0x01, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x0b, 0x07, 0x26, 0x04, 0x06, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x02, 0x00, 0x09, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x00, 0x36, + 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x00, 0x37, 0x04, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x3d, + 0x0a, 0x88, 0x80, 0x01, 0x4a, 0x51, 0x01, 0x03, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x22, 0x02, 0x20, 0x01, 0x28, 0x02, 0x04, 0x46, 0x04, 0x40, 0x41, 0x00, 0x21, 0x02, 0x0c, 0x01, + 0x0b, 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, + 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x4f, 0x04, 0x40, 0x20, 0x01, 0x20, 0x04, + 0x36, 0x02, 0x08, 0x0c, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, + 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0xb3, 0x01, 0x01, 0x04, 0x7f, 0x23, 0x00, 0x41, 0x20, + 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x01, 0x2f, 0x01, 0xe2, 0x01, 0x21, 0x04, 0x20, 0x03, 0x41, + 0x00, 0x3a, 0x00, 0x18, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x14, 0x20, 0x03, 0x41, 0x00, 0x36, + 0x02, 0x10, 0x20, 0x03, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x22, 0x04, 0x29, 0x02, 0x00, 0x37, 0x02, + 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x03, 0x2d, 0x00, 0x08, 0x21, 0x06, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x05, 0x20, + 0x03, 0x28, 0x02, 0x00, 0x21, 0x04, 0x03, 0x40, 0x02, 0x40, 0x20, 0x06, 0x0d, 0x00, 0x20, 0x04, + 0x20, 0x05, 0x4b, 0x0d, 0x00, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x14, 0x20, 0x03, 0x20, 0x02, + 0x36, 0x02, 0x10, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x18, 0x20, 0x04, 0x20, 0x05, 0x4f, 0x21, + 0x06, 0x20, 0x04, 0x20, 0x04, 0x20, 0x05, 0x49, 0x6a, 0x21, 0x04, 0x20, 0x03, 0x41, 0x10, 0x6a, + 0x10, 0x08, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x02, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0x5e, 0x01, 0x04, 0x7f, + 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x22, 0x02, + 0x28, 0x02, 0x00, 0x21, 0x03, 0x20, 0x00, 0x28, 0x02, 0x04, 0x21, 0x04, 0x20, 0x01, 0x41, 0x18, + 0x6a, 0x20, 0x02, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x00, 0x29, 0x02, 0x00, + 0x37, 0x03, 0x10, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x10, 0x0d, 0x20, + 0x01, 0x28, 0x02, 0x0c, 0x22, 0x00, 0x20, 0x03, 0x3b, 0x01, 0xe0, 0x01, 0x20, 0x00, 0x20, 0x04, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0x58, 0x01, 0x02, 0x7f, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x04, 0x40, 0x20, 0x01, 0x41, 0x01, + 0x6a, 0x22, 0x04, 0x20, 0x01, 0x49, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x04, 0x20, + 0x00, 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x2f, 0x01, 0xe0, 0x01, 0x36, 0x02, + 0x08, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x04, 0x0b, 0x41, 0x94, 0x02, 0x41, + 0xe4, 0x01, 0x20, 0x01, 0x1b, 0x22, 0x00, 0x04, 0x40, 0x20, 0x02, 0x20, 0x00, 0x10, 0x0a, 0x0b, + 0x0f, 0x0b, 0x00, 0x0b, 0x85, 0x02, 0x01, 0x03, 0x7f, 0x20, 0x00, 0x04, 0x40, 0x20, 0x01, 0x20, + 0x01, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x4d, 0x41, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6b, 0x20, 0x03, + 0x4d, 0x1b, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x41, 0x8c, 0x83, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x21, + 0x03, 0x20, 0x00, 0x41, 0x08, 0x6b, 0x22, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, + 0x7e, 0x71, 0x36, 0x02, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x7c, 0x71, 0x22, 0x02, + 0x20, 0x00, 0x6b, 0x20, 0x02, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x6b, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, + 0x02, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x0d, 0x01, 0x20, 0x01, 0x10, 0x4b, 0x20, 0x02, 0x28, + 0x02, 0x00, 0x21, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x71, 0x04, 0x40, 0x20, 0x02, + 0x20, 0x00, 0x41, 0x02, 0x72, 0x22, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x21, 0x01, 0x20, + 0x00, 0x41, 0x7c, 0x71, 0x22, 0x00, 0x20, 0x02, 0x6b, 0x41, 0x08, 0x6b, 0x20, 0x00, 0x4d, 0x0d, + 0x02, 0x0b, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x04, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x45, 0x0d, 0x00, + 0x41, 0x00, 0x20, 0x02, 0x20, 0x04, 0x41, 0x02, 0x71, 0x1b, 0x22, 0x02, 0x45, 0x0d, 0x00, 0x20, + 0x02, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x08, + 0x41, 0x7c, 0x71, 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x01, 0x41, 0x01, 0x72, 0x36, 0x02, 0x08, + 0x20, 0x03, 0x21, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x41, + 0x8c, 0x83, 0xc0, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x0b, 0x0b, 0x6e, 0x01, 0x01, 0x7f, 0x02, + 0x40, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x20, + 0x04, 0x4b, 0x04, 0x40, 0x20, 0x01, 0x20, 0x01, 0x20, 0x02, 0x6b, 0x22, 0x01, 0x49, 0x0d, 0x01, + 0x20, 0x01, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x22, 0x01, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x04, + 0x41, 0x0c, 0x6c, 0x6a, 0x20, 0x00, 0x20, 0x02, 0x41, 0x0c, 0x6c, 0x6a, 0x20, 0x01, 0x41, 0x0c, + 0x6c, 0x10, 0x4d, 0x0b, 0x20, 0x00, 0x20, 0x02, 0x41, 0x0c, 0x6c, 0x6a, 0x22, 0x00, 0x20, 0x03, + 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x08, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x62, 0x01, 0x01, 0x7f, 0x02, 0x40, + 0x20, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x05, + 0x4b, 0x04, 0x40, 0x20, 0x01, 0x20, 0x01, 0x20, 0x02, 0x6b, 0x22, 0x01, 0x49, 0x0d, 0x01, 0x20, + 0x01, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x22, 0x01, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x05, 0x41, + 0x03, 0x74, 0x6a, 0x20, 0x00, 0x20, 0x02, 0x41, 0x03, 0x74, 0x6a, 0x20, 0x01, 0x41, 0x03, 0x74, + 0x10, 0x4d, 0x0b, 0x20, 0x00, 0x20, 0x02, 0x41, 0x03, 0x74, 0x6a, 0x22, 0x00, 0x20, 0x04, 0x3a, + 0x00, 0x04, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x39, 0x01, 0x02, + 0x7f, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x03, 0x20, 0x02, 0x4d, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x28, 0x02, 0x04, + 0x20, 0x01, 0x28, 0x02, 0x08, 0x41, 0x02, 0x74, 0x6a, 0x41, 0xe4, 0x01, 0x6a, 0x28, 0x02, 0x00, + 0x36, 0x02, 0x04, 0x0f, 0x0b, 0x00, 0x0b, 0x6c, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, + 0x22, 0x04, 0x24, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x05, 0x20, 0x00, 0x28, 0x02, 0x04, + 0x22, 0x00, 0x2f, 0x01, 0xe2, 0x01, 0x21, 0x06, 0x20, 0x04, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, + 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x20, 0x06, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x05, + 0x20, 0x04, 0x10, 0x0b, 0x20, 0x00, 0x41, 0x88, 0x01, 0x6a, 0x20, 0x01, 0x20, 0x05, 0x20, 0x02, + 0x20, 0x03, 0x10, 0x0c, 0x20, 0x00, 0x20, 0x01, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x04, 0x41, 0x10, + 0x6a, 0x24, 0x00, 0x0b, 0x9c, 0x02, 0x01, 0x05, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x06, + 0x24, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x05, 0x20, 0x00, 0x28, 0x02, 0x04, 0x22, 0x07, + 0x2f, 0x01, 0xe2, 0x01, 0x21, 0x08, 0x20, 0x06, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x08, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x06, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x03, 0x00, + 0x20, 0x07, 0x41, 0x04, 0x6a, 0x20, 0x08, 0x41, 0x01, 0x6a, 0x22, 0x09, 0x20, 0x05, 0x20, 0x06, + 0x10, 0x0b, 0x20, 0x07, 0x41, 0x88, 0x01, 0x6a, 0x20, 0x09, 0x20, 0x05, 0x20, 0x02, 0x20, 0x03, + 0x10, 0x0c, 0x02, 0x40, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x05, 0x49, 0x0d, 0x00, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x01, 0x49, 0x0d, 0x00, 0x20, 0x08, 0x41, 0x02, + 0x6a, 0x22, 0x02, 0x20, 0x03, 0x4b, 0x04, 0x40, 0x20, 0x02, 0x20, 0x01, 0x6b, 0x22, 0x05, 0x20, + 0x02, 0x4b, 0x0d, 0x01, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6b, 0x22, 0x05, 0x49, 0x0d, 0x01, + 0x20, 0x07, 0x41, 0xe4, 0x01, 0x6a, 0x22, 0x08, 0x20, 0x03, 0x41, 0x02, 0x74, 0x6a, 0x20, 0x08, + 0x20, 0x01, 0x41, 0x02, 0x74, 0x6a, 0x20, 0x05, 0x41, 0x02, 0x74, 0x10, 0x4d, 0x0b, 0x20, 0x07, + 0x20, 0x01, 0x41, 0x02, 0x74, 0x6a, 0x41, 0xe4, 0x01, 0x6a, 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, + 0x07, 0x20, 0x09, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x01, 0x20, 0x02, 0x20, 0x01, 0x20, 0x02, 0x4b, + 0x1b, 0x21, 0x02, 0x20, 0x00, 0x28, 0x02, 0x00, 0x21, 0x00, 0x03, 0x40, 0x20, 0x01, 0x20, 0x02, + 0x47, 0x04, 0x40, 0x20, 0x06, 0x20, 0x07, 0x36, 0x02, 0x04, 0x20, 0x06, 0x20, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x06, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, + 0x06, 0x10, 0x08, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x06, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0f, 0x0b, + 0x00, 0x0b, 0x21, 0x01, 0x01, 0x7f, 0x41, 0xe4, 0x01, 0x10, 0x11, 0x22, 0x00, 0x45, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x0b, 0x08, 0x00, 0x20, 0x00, 0x41, 0x04, 0x10, 0x16, 0x0b, 0x21, 0x01, 0x01, + 0x7f, 0x41, 0x94, 0x02, 0x10, 0x11, 0x22, 0x00, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x41, + 0x00, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x0b, 0x66, + 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x20, 0x01, + 0x41, 0x00, 0x4e, 0x04, 0x40, 0x02, 0x7f, 0x20, 0x02, 0x45, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x01, 0x10, 0x14, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x21, 0x02, 0x20, 0x03, 0x28, 0x02, + 0x08, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x01, 0x41, 0x01, 0x10, 0x15, 0x20, 0x03, 0x28, 0x02, + 0x04, 0x21, 0x02, 0x20, 0x03, 0x28, 0x02, 0x00, 0x0b, 0x22, 0x01, 0x0d, 0x01, 0x0b, 0x00, 0x0b, + 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, 0x03, + 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x33, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x15, 0x20, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, + 0x02, 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x4a, 0x01, 0x01, 0x7f, 0x41, 0x01, + 0x21, 0x03, 0x02, 0x40, 0x20, 0x01, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x01, 0x0c, 0x01, 0x0b, + 0x20, 0x01, 0x41, 0x01, 0x10, 0x16, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, 0x04, 0x40, 0x20, 0x03, + 0x45, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, 0x10, 0x4e, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x0d, 0x01, + 0x0b, 0x41, 0x00, 0x21, 0x03, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x0b, 0x9c, 0x01, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x00, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x4d, 0x04, + 0x40, 0x20, 0x03, 0x41, 0x01, 0x6b, 0x22, 0x00, 0x20, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x00, 0x0b, + 0x20, 0x00, 0x41, 0x02, 0x76, 0x21, 0x00, 0x20, 0x02, 0x41, 0x8c, 0x83, 0xc0, 0x00, 0x28, 0x02, + 0x00, 0x36, 0x02, 0x0c, 0x02, 0x40, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x10, + 0x4a, 0x22, 0x03, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x00, 0x20, 0x01, 0x10, 0x49, 0x41, 0x00, 0x21, + 0x03, 0x20, 0x02, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x20, 0x02, 0x28, 0x02, 0x04, 0x22, 0x03, 0x20, + 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x08, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x0c, 0x20, 0x00, + 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x10, 0x4a, 0x21, 0x03, 0x0b, 0x41, 0x8c, 0x83, 0xc0, + 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x20, 0x03, 0x0b, 0xd1, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, + 0x00, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, 0x02, + 0x28, 0x02, 0x00, 0x22, 0x04, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x01, 0x10, 0x14, 0x20, 0x03, 0x28, + 0x02, 0x04, 0x21, 0x04, 0x20, 0x03, 0x28, 0x02, 0x00, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x00, + 0x41, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0c, + 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x04, 0x22, 0x05, 0x45, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x01, 0x41, 0x00, 0x10, 0x15, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x21, 0x04, 0x20, 0x03, + 0x28, 0x02, 0x08, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x10, 0x16, 0x22, 0x02, + 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x20, 0x05, + 0x10, 0x4c, 0x1a, 0x20, 0x04, 0x20, 0x05, 0x10, 0x0a, 0x20, 0x01, 0x21, 0x04, 0x0b, 0x20, 0x00, + 0x02, 0x7f, 0x20, 0x02, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x41, 0x00, 0x0c, + 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x41, 0x01, 0x21, 0x04, 0x41, 0x01, 0x0b, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, + 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x26, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, + 0x00, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, 0x22, 0x00, 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x00, 0x10, 0x0a, 0x0b, 0x0b, 0x6f, 0x00, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x05, 0x4f, 0x04, 0x40, 0x20, 0x01, 0x41, 0x05, + 0x6b, 0x0e, 0x02, 0x01, 0x02, 0x03, 0x0b, 0x20, 0x00, 0x42, 0x04, 0x37, 0x02, 0x00, 0x20, 0x00, + 0x41, 0x08, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x20, 0x00, 0x42, 0x05, 0x37, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x05, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x20, 0x00, 0x42, + 0x85, 0x80, 0x80, 0x80, 0x10, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x41, 0x00, 0x36, + 0x02, 0x00, 0x0f, 0x0b, 0x20, 0x00, 0x42, 0x86, 0x80, 0x80, 0x80, 0x10, 0x37, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x07, 0x6b, 0x36, 0x02, 0x00, 0x0b, 0xa7, 0x01, 0x01, + 0x03, 0x7f, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, + 0x00, 0x28, 0x02, 0x04, 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x04, 0x6b, 0x4b, 0x04, + 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x22, 0x01, 0x20, 0x04, 0x49, 0x0d, 0x01, 0x20, 0x03, 0x20, + 0x03, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x49, 0x0d, 0x01, 0x20, 0x04, 0x20, 0x01, 0x20, 0x01, 0x20, + 0x04, 0x49, 0x1b, 0x22, 0x01, 0x41, 0x08, 0x20, 0x01, 0x41, 0x08, 0x4b, 0x1b, 0x21, 0x01, 0x02, + 0x40, 0x20, 0x03, 0x04, 0x40, 0x20, 0x02, 0x41, 0x18, 0x6a, 0x41, 0x01, 0x36, 0x02, 0x00, 0x20, + 0x02, 0x20, 0x03, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0x10, + 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x00, 0x36, 0x02, 0x10, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x20, + 0x02, 0x41, 0x10, 0x6a, 0x10, 0x17, 0x20, 0x02, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x0d, 0x01, + 0x20, 0x00, 0x20, 0x02, 0x29, 0x02, 0x04, 0x37, 0x02, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x20, 0x6a, + 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x33, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x20, 0x02, 0x10, 0x1a, + 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, 0x00, 0x6a, 0x20, 0x01, 0x20, + 0x02, 0x10, 0x4c, 0x1a, 0x20, 0x03, 0x20, 0x02, 0x20, 0x03, 0x6a, 0x22, 0x01, 0x4b, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x08, 0x0b, 0x47, 0x01, 0x02, 0x7f, 0x23, 0x00, + 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x41, 0x00, + 0x10, 0x13, 0x20, 0x03, 0x28, 0x02, 0x08, 0x21, 0x04, 0x20, 0x00, 0x20, 0x03, 0x28, 0x02, 0x0c, + 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x01, 0x20, 0x02, + 0x10, 0x4c, 0x1a, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0x15, 0x00, 0x20, 0x01, 0x20, 0x03, 0x46, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x20, + 0x01, 0x10, 0x4c, 0x1a, 0x0f, 0x0b, 0x00, 0x0b, 0xc6, 0x01, 0x01, 0x04, 0x7f, 0x02, 0x40, 0x20, + 0x00, 0x0d, 0x00, 0x20, 0x00, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x45, 0x0d, 0x00, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x21, 0x00, 0x0b, 0x03, 0x40, 0x02, + 0x40, 0x41, 0x00, 0x20, 0x00, 0x04, 0x7f, 0x20, 0x00, 0x0d, 0x01, 0x41, 0x00, 0x05, 0x41, 0x00, + 0x0b, 0x22, 0x00, 0x6b, 0x22, 0x02, 0x0d, 0x02, 0x20, 0x02, 0x45, 0x0d, 0x02, 0x20, 0x00, 0x41, + 0xf0, 0x82, 0xc0, 0x00, 0x6a, 0x22, 0x00, 0x2c, 0x00, 0x00, 0x22, 0x03, 0x41, 0x7f, 0x4a, 0x0d, + 0x02, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x22, 0x04, 0x21, 0x01, 0x20, 0x02, 0x41, 0x01, 0x47, 0x04, + 0x40, 0x20, 0x00, 0x2d, 0x00, 0x01, 0x1a, 0x20, 0x00, 0x41, 0x02, 0x6a, 0x21, 0x01, 0x0b, 0x20, + 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xe0, 0x01, 0x49, 0x0d, 0x02, 0x20, 0x04, 0x22, 0x00, 0x20, + 0x01, 0x47, 0x04, 0x7f, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, + 0x05, 0x41, 0x00, 0x0b, 0x1a, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x41, 0xf0, 0x01, 0x49, 0x0d, + 0x02, 0x20, 0x00, 0x20, 0x04, 0x47, 0x04, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x1a, 0x0b, 0x0c, + 0x02, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x6b, 0x21, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, + 0xec, 0x01, 0x01, 0x06, 0x7f, 0x41, 0x01, 0x21, 0x07, 0x41, 0x01, 0x21, 0x04, 0x03, 0x40, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x22, 0x06, 0x20, 0x05, 0x6a, 0x22, 0x04, 0x20, 0x06, + 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x04, 0x4d, 0x0d, 0x01, 0x20, 0x05, 0x20, 0x08, 0x6a, 0x22, + 0x09, 0x20, 0x08, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x09, 0x4d, 0x0d, 0x00, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x20, 0x01, 0x20, 0x09, 0x6a, + 0x2d, 0x00, 0x00, 0x22, 0x09, 0x4b, 0x20, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x4f, + 0x20, 0x03, 0x72, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x09, 0x46, 0x0d, 0x01, 0x20, 0x06, 0x41, + 0x01, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x02, 0x41, 0x01, 0x21, 0x07, 0x41, 0x00, 0x21, + 0x05, 0x20, 0x06, 0x21, 0x08, 0x0c, 0x05, 0x0b, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, + 0x05, 0x49, 0x0d, 0x01, 0x20, 0x04, 0x20, 0x06, 0x6a, 0x22, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x01, + 0x20, 0x04, 0x20, 0x08, 0x6b, 0x22, 0x07, 0x20, 0x04, 0x4b, 0x0d, 0x01, 0x0c, 0x03, 0x0b, 0x20, + 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x4b, 0x0d, 0x00, 0x20, 0x06, 0x21, 0x04, 0x20, + 0x05, 0x20, 0x07, 0x47, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x04, 0x20, 0x07, 0x6a, 0x22, 0x04, 0x4d, + 0x0d, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x07, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x08, + 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x41, 0x00, 0x21, 0x05, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x37, 0x01, + 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x04, 0x24, 0x00, 0x20, 0x04, 0x41, 0x08, 0x6a, + 0x41, 0x00, 0x20, 0x03, 0x20, 0x01, 0x20, 0x02, 0x10, 0x21, 0x20, 0x00, 0x20, 0x04, 0x28, 0x02, + 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x04, 0x28, 0x02, 0x0c, 0x36, 0x02, 0x04, 0x20, 0x04, + 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x00, 0x02, 0x40, 0x20, 0x01, 0x20, 0x02, 0x4d, 0x04, + 0x40, 0x20, 0x02, 0x20, 0x04, 0x4d, 0x04, 0x40, 0x20, 0x02, 0x20, 0x02, 0x20, 0x01, 0x6b, 0x22, + 0x04, 0x49, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x20, + 0x03, 0x6a, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0xa0, 0x02, 0x01, + 0x07, 0x7f, 0x41, 0x01, 0x21, 0x09, 0x41, 0x01, 0x21, 0x04, 0x03, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x22, 0x07, 0x20, 0x05, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x49, + 0x0d, 0x00, 0x20, 0x01, 0x20, 0x04, 0x4d, 0x0d, 0x03, 0x20, 0x07, 0x41, 0x01, 0x6a, 0x22, 0x04, + 0x20, 0x07, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x6a, 0x22, 0x08, 0x20, 0x04, 0x49, 0x0d, + 0x00, 0x20, 0x01, 0x20, 0x08, 0x6b, 0x22, 0x08, 0x20, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x20, + 0x08, 0x4d, 0x0d, 0x00, 0x20, 0x0a, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x0a, 0x49, 0x0d, 0x00, + 0x20, 0x06, 0x20, 0x05, 0x20, 0x06, 0x6a, 0x22, 0x06, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x06, + 0x6b, 0x22, 0x06, 0x20, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x06, 0x4d, 0x0d, 0x00, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x00, 0x20, 0x08, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x08, 0x20, 0x00, 0x20, + 0x06, 0x6a, 0x2d, 0x00, 0x00, 0x22, 0x06, 0x4b, 0x20, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x06, 0x20, + 0x08, 0x4d, 0x20, 0x03, 0x72, 0x45, 0x0d, 0x00, 0x20, 0x06, 0x20, 0x08, 0x46, 0x0d, 0x01, 0x41, + 0x01, 0x21, 0x09, 0x41, 0x00, 0x21, 0x05, 0x20, 0x07, 0x21, 0x0a, 0x0c, 0x04, 0x0b, 0x20, 0x05, + 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, 0x01, 0x20, 0x04, 0x20, 0x07, 0x6a, 0x22, + 0x04, 0x20, 0x07, 0x49, 0x0d, 0x01, 0x20, 0x04, 0x20, 0x0a, 0x6b, 0x22, 0x09, 0x20, 0x04, 0x4b, + 0x0d, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x4b, 0x0d, + 0x00, 0x20, 0x05, 0x20, 0x09, 0x47, 0x04, 0x40, 0x20, 0x07, 0x21, 0x04, 0x0c, 0x03, 0x0b, 0x20, + 0x07, 0x20, 0x09, 0x6a, 0x22, 0x04, 0x20, 0x07, 0x4f, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x41, 0x00, + 0x21, 0x05, 0x0b, 0x20, 0x02, 0x20, 0x09, 0x47, 0x0d, 0x01, 0x0b, 0x0b, 0x20, 0x0a, 0x0b, 0x2b, + 0x01, 0x01, 0x7e, 0x03, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x21, 0x01, + 0x42, 0x01, 0x20, 0x00, 0x31, 0x00, 0x00, 0x86, 0x20, 0x02, 0x84, 0x21, 0x02, 0x20, 0x00, 0x41, + 0x01, 0x6a, 0x21, 0x00, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x02, 0x0b, 0x97, 0x02, 0x01, 0x02, 0x7f, + 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, 0x10, 0x00, 0x22, + 0x03, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x81, 0x08, + 0x3b, 0x01, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x03, 0x10, 0x25, 0x20, 0x02, 0x28, 0x02, + 0x00, 0x22, 0x03, 0x10, 0x01, 0x20, 0x00, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x04, 0x40, 0x20, + 0x02, 0x20, 0x02, 0x28, 0x02, 0x08, 0x22, 0x01, 0x36, 0x02, 0x14, 0x20, 0x02, 0x20, 0x03, 0x36, + 0x02, 0x10, 0x02, 0x40, 0x20, 0x01, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x41, 0x00, 0x36, + 0x02, 0x1c, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x20, 0x02, 0x41, 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x26, + 0x0d, 0x00, 0x20, 0x02, 0x41, 0x20, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x14, 0x10, 0x25, 0x20, 0x02, + 0x41, 0x10, 0x6a, 0x20, 0x02, 0x28, 0x02, 0x20, 0x22, 0x01, 0x20, 0x02, 0x28, 0x02, 0x28, 0x10, + 0x26, 0x45, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x20, 0x6a, 0x10, 0x18, 0x0b, 0x20, 0x00, 0x41, 0x00, + 0x3a, 0x00, 0x01, 0x41, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x02, + 0x29, 0x03, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x20, 0x02, 0x41, 0x08, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x1c, 0x21, 0x03, + 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x20, 0x02, 0x29, 0x02, 0x24, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, + 0x08, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x20, 0x03, 0x36, 0x02, + 0x00, 0x41, 0x00, 0x0b, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x10, 0x18, 0x0b, 0x20, 0x02, 0x41, 0x30, + 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x02, 0x01, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x01, 0x10, 0x13, 0x20, 0x02, + 0x29, 0x03, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, + 0x37, 0x02, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x39, 0x01, 0x02, 0x7f, 0x20, + 0x00, 0x28, 0x02, 0x04, 0x22, 0x03, 0x20, 0x02, 0x49, 0x22, 0x04, 0x45, 0x04, 0x40, 0x20, 0x01, + 0x20, 0x02, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x01, 0x20, 0x02, 0x10, 0x1d, 0x20, 0x00, 0x20, + 0x03, 0x20, 0x02, 0x6b, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x36, 0x02, + 0x00, 0x0b, 0x20, 0x04, 0x0b, 0x89, 0x01, 0x02, 0x02, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, + 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x6a, 0x22, 0x04, + 0x4d, 0x04, 0x40, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x41, 0x00, 0x10, 0x13, 0x20, 0x03, + 0x29, 0x03, 0x08, 0x21, 0x05, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, 0x00, 0x20, 0x05, + 0x37, 0x02, 0x00, 0x03, 0x40, 0x20, 0x02, 0x45, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, + 0x00, 0x22, 0x04, 0x41, 0x04, 0x76, 0x41, 0xb4, 0x82, 0xc0, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x10, + 0x28, 0x20, 0x00, 0x20, 0x04, 0x41, 0x0f, 0x71, 0x41, 0xb4, 0x82, 0xc0, 0x00, 0x6a, 0x2d, 0x00, + 0x00, 0x10, 0x28, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x21, 0x02, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, + 0x01, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, + 0x9c, 0x02, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x02, 0x40, + 0x20, 0x00, 0x20, 0x02, 0x41, 0x0c, 0x6a, 0x02, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, + 0xff, 0x00, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x03, 0x20, 0x00, 0x28, 0x02, + 0x04, 0x46, 0x04, 0x40, 0x20, 0x00, 0x41, 0x01, 0x10, 0x1a, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, + 0x03, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x03, 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, + 0x03, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x03, 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x01, 0x36, + 0x02, 0x08, 0x0c, 0x04, 0x0b, 0x20, 0x02, 0x41, 0x00, 0x36, 0x02, 0x0c, 0x20, 0x01, 0x41, 0x80, + 0x10, 0x49, 0x0d, 0x01, 0x20, 0x01, 0x41, 0x80, 0x80, 0x04, 0x49, 0x04, 0x40, 0x20, 0x02, 0x20, + 0x01, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0e, 0x20, 0x02, 0x20, 0x01, 0x41, + 0x0c, 0x76, 0x41, 0xe0, 0x01, 0x72, 0x3a, 0x00, 0x0c, 0x20, 0x02, 0x20, 0x01, 0x41, 0x06, 0x76, + 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0d, 0x41, 0x03, 0x0c, 0x03, 0x0b, 0x20, + 0x02, 0x20, 0x01, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0f, 0x20, 0x02, 0x20, + 0x01, 0x41, 0x12, 0x76, 0x41, 0xf0, 0x01, 0x72, 0x3a, 0x00, 0x0c, 0x20, 0x02, 0x20, 0x01, 0x41, + 0x06, 0x76, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0e, 0x20, 0x02, 0x20, 0x01, + 0x41, 0x0c, 0x76, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, 0x00, 0x0d, 0x41, 0x04, 0x0c, + 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x41, 0x3f, 0x71, 0x41, 0x80, 0x01, 0x72, 0x3a, + 0x00, 0x0d, 0x20, 0x02, 0x20, 0x01, 0x41, 0x06, 0x76, 0x41, 0xc0, 0x01, 0x72, 0x3a, 0x00, 0x0c, + 0x41, 0x02, 0x0b, 0x10, 0x1b, 0x0b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x83, 0x09, + 0x02, 0x08, 0x7f, 0x03, 0x7e, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x20, 0x03, + 0x41, 0x00, 0x3a, 0x00, 0x08, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x7e, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x41, 0x01, 0x10, 0x26, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x03, 0x2d, 0x00, 0x08, 0x22, 0x02, 0x41, 0x03, 0x71, 0x22, 0x04, + 0x41, 0x03, 0x47, 0x04, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x01, 0x6b, + 0x0e, 0x02, 0x02, 0x01, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, 0x02, 0x0c, 0x03, 0x0b, + 0x20, 0x03, 0x20, 0x02, 0x3a, 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, 0x00, 0x0c, 0x20, 0x03, + 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x00, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x20, 0x03, 0x41, 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x2a, 0x0d, 0x03, 0x20, 0x03, 0x28, 0x02, + 0x1c, 0x22, 0x02, 0x41, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x03, 0x20, 0x02, 0x41, 0x02, 0x76, 0x21, + 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x20, 0x02, 0x3a, 0x00, 0x0d, 0x20, 0x03, 0x41, 0x01, 0x3a, + 0x00, 0x0c, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x00, 0x3b, 0x01, 0x1c, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x1c, 0x6a, 0x41, 0x02, 0x10, 0x2a, 0x0d, 0x02, + 0x20, 0x03, 0x2f, 0x01, 0x1c, 0x22, 0x02, 0x41, 0xff, 0x01, 0x4d, 0x0d, 0x02, 0x20, 0x02, 0x41, + 0x02, 0x76, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x04, 0x4f, 0x0d, 0x01, 0x20, 0x03, + 0x20, 0x01, 0x10, 0x2b, 0x20, 0x03, 0x28, 0x02, 0x00, 0x0d, 0x01, 0x20, 0x03, 0x28, 0x02, 0x04, + 0x22, 0x02, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4d, 0x0d, 0x01, 0x0b, 0x20, 0x01, 0x28, 0x02, + 0x04, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x10, 0x25, 0x20, + 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, 0x22, 0x04, 0x20, 0x03, 0x28, 0x02, 0x10, 0x10, 0x26, 0x04, + 0x40, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x10, 0x18, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x20, 0x03, 0x29, + 0x02, 0x0c, 0x22, 0x0c, 0x42, 0x20, 0x88, 0xa7, 0x22, 0x05, 0x41, 0x07, 0x6b, 0x22, 0x01, 0x20, + 0x01, 0x20, 0x05, 0x4b, 0x1b, 0x21, 0x09, 0x20, 0x04, 0x41, 0x03, 0x6a, 0x41, 0x7c, 0x71, 0x20, + 0x04, 0x6b, 0x21, 0x08, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x01, 0x20, 0x05, 0x4f, 0x0d, + 0x07, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x22, + 0x06, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x22, 0x07, 0x41, 0x00, 0x4e, 0x04, 0x40, 0x20, 0x08, + 0x41, 0x7f, 0x46, 0x0d, 0x03, 0x20, 0x08, 0x20, 0x01, 0x6b, 0x41, 0x03, 0x71, 0x0d, 0x03, 0x03, + 0x40, 0x20, 0x01, 0x20, 0x09, 0x4f, 0x0d, 0x03, 0x20, 0x01, 0x20, 0x04, 0x6a, 0x22, 0x02, 0x41, + 0x04, 0x6a, 0x28, 0x02, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, 0x72, 0x41, 0x80, 0x81, 0x82, 0x84, + 0x78, 0x71, 0x0d, 0x03, 0x20, 0x01, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x22, 0x01, 0x4d, 0x0d, 0x00, + 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x20, 0x21, 0x0a, 0x42, 0x80, 0x80, + 0x80, 0x80, 0x10, 0x21, 0x0b, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, + 0x06, 0x41, 0x80, 0x80, 0x40, 0x6b, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x6b, 0x0e, 0x03, 0x00, 0x02, + 0x01, 0x0e, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x05, 0x49, 0x0d, 0x02, 0x42, + 0x00, 0x21, 0x0a, 0x0c, 0x0c, 0x0b, 0x42, 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, + 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x21, 0x02, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x06, 0x41, 0xf0, 0x01, 0x6b, 0x0e, 0x05, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0b, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, + 0x07, 0x41, 0x0f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x02, 0x4b, 0x0d, 0x0c, 0x20, 0x02, 0x41, + 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, 0x0d, 0x0c, 0x0c, 0x02, 0x0b, 0x20, 0x02, 0x41, + 0xf0, 0x00, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x30, 0x4f, 0x0d, 0x0b, 0x0c, 0x01, 0x0b, 0x20, + 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x0a, 0x20, 0x02, 0x41, 0x8f, + 0x01, 0x4b, 0x0d, 0x0a, 0x0b, 0x20, 0x01, 0x41, 0x02, 0x6a, 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, + 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, + 0x47, 0x0d, 0x08, 0x42, 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, 0x02, 0x20, 0x05, + 0x4f, 0x0d, 0x0c, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, + 0x80, 0x01, 0x46, 0x0d, 0x02, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0, 0x00, 0x0c, 0x0a, 0x0b, + 0x42, 0x00, 0x21, 0x0a, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0a, + 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x21, 0x02, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x06, 0x41, 0xe0, 0x01, 0x47, 0x04, 0x40, 0x20, 0x06, 0x41, 0xed, 0x01, 0x46, 0x0d, 0x01, + 0x20, 0x07, 0x41, 0x1f, 0x6a, 0x41, 0xff, 0x01, 0x71, 0x41, 0x0c, 0x49, 0x0d, 0x02, 0x20, 0x02, + 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x0c, 0x20, 0x07, 0x41, 0xfe, 0x01, 0x71, 0x41, 0xee, 0x01, 0x47, + 0x0d, 0x0c, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x00, 0x4e, 0x0d, 0x0c, 0x0c, + 0x03, 0x0b, 0x20, 0x02, 0x41, 0xe0, 0x01, 0x71, 0x41, 0xa0, 0x01, 0x47, 0x0d, 0x0b, 0x0c, 0x02, + 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x0a, 0x20, 0x02, + 0x41, 0xa0, 0x01, 0x4f, 0x0d, 0x0a, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x18, 0x74, 0x41, 0x18, + 0x75, 0x41, 0x7f, 0x4a, 0x0d, 0x09, 0x20, 0x02, 0x41, 0xbf, 0x01, 0x4b, 0x0d, 0x09, 0x0b, 0x42, + 0x00, 0x21, 0x0b, 0x20, 0x01, 0x41, 0x02, 0x6a, 0x22, 0x02, 0x20, 0x05, 0x4f, 0x0d, 0x0b, 0x20, + 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, 0x41, 0x80, 0x01, 0x47, 0x0d, + 0x07, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x20, 0x04, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xc0, 0x01, 0x71, + 0x41, 0x80, 0x01, 0x47, 0x0d, 0x0a, 0x0b, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x03, + 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x20, 0x05, 0x20, 0x01, 0x20, 0x05, 0x4b, 0x1b, 0x21, 0x02, 0x03, + 0x40, 0x20, 0x01, 0x20, 0x02, 0x46, 0x04, 0x40, 0x20, 0x02, 0x21, 0x01, 0x0c, 0x03, 0x0b, 0x20, + 0x01, 0x20, 0x04, 0x6a, 0x2c, 0x00, 0x00, 0x41, 0x00, 0x48, 0x0d, 0x02, 0x20, 0x01, 0x41, 0x01, + 0x6a, 0x21, 0x01, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, + 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x06, 0x0b, 0x42, 0x80, + 0x80, 0x80, 0x80, 0x80, 0xc0, 0x00, 0x0c, 0x01, 0x0b, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x20, + 0x0b, 0x21, 0x0a, 0x42, 0x80, 0x80, 0x80, 0x80, 0x10, 0x21, 0x0b, 0x0c, 0x01, 0x0b, 0x42, 0x00, + 0x21, 0x0b, 0x0b, 0x20, 0x01, 0xad, 0x20, 0x0a, 0x20, 0x0b, 0x84, 0x84, 0x21, 0x0a, 0x0b, 0x20, + 0x01, 0x20, 0x05, 0x4f, 0x04, 0x40, 0x20, 0x00, 0x20, 0x0c, 0x37, 0x02, 0x04, 0x20, 0x00, 0x20, + 0x04, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x0a, 0x37, 0x02, 0x14, 0x20, 0x03, + 0x20, 0x0c, 0x37, 0x02, 0x0c, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x08, 0x20, 0x03, 0x41, 0x08, + 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x20, 0x6a, + 0x24, 0x00, 0x0b, 0x42, 0x01, 0x01, 0x7f, 0x20, 0x00, 0x2f, 0x01, 0x04, 0x21, 0x03, 0x20, 0x00, + 0x41, 0x00, 0x3a, 0x00, 0x04, 0x20, 0x03, 0x41, 0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x00, 0x28, + 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, 0x10, 0x26, 0x0f, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x08, + 0x76, 0x3a, 0x00, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x20, 0x02, + 0x41, 0x01, 0x6b, 0x10, 0x26, 0x0b, 0x48, 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x00, 0x36, 0x02, 0x0c, 0x02, 0x40, 0x20, 0x01, 0x20, 0x02, + 0x41, 0x0c, 0x6a, 0x41, 0x04, 0x10, 0x26, 0x45, 0x04, 0x40, 0x20, 0x02, 0x28, 0x02, 0x0c, 0x21, + 0x01, 0x0c, 0x01, 0x0b, 0x41, 0x01, 0x21, 0x03, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, + 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x4b, + 0x01, 0x02, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, + 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x80, 0x80, 0x01, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x03, + 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x03, 0x41, 0x94, 0x83, 0xc0, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x20, 0x02, 0x28, 0x02, 0x08, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x0c, + 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x9e, 0x01, 0x01, 0x03, 0x7f, + 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, + 0x02, 0x08, 0x22, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x04, 0x20, 0x02, 0x4f, 0x04, 0x40, 0x20, 0x01, + 0x28, 0x02, 0x00, 0x21, 0x01, 0x20, 0x00, 0x20, 0x04, 0x10, 0x2e, 0x20, 0x02, 0x41, 0x3f, 0x4d, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x41, 0x02, 0x74, 0x10, 0x2f, 0x0c, 0x03, 0x0b, 0x20, 0x02, + 0x41, 0xff, 0xff, 0x00, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x20, 0x02, 0x41, 0x02, 0x74, 0x41, 0x01, + 0x72, 0x3b, 0x01, 0x0e, 0x20, 0x00, 0x20, 0x03, 0x41, 0x0e, 0x6a, 0x41, 0x02, 0x10, 0x1b, 0x0c, + 0x03, 0x0b, 0x20, 0x02, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x4b, 0x0d, 0x01, 0x20, 0x02, 0x41, + 0x02, 0x74, 0x41, 0x02, 0x72, 0x20, 0x00, 0x10, 0x30, 0x0c, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x00, + 0x41, 0x03, 0x10, 0x2f, 0x20, 0x02, 0x20, 0x00, 0x10, 0x30, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x20, + 0x02, 0x10, 0x1b, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x36, 0x02, 0x01, 0x7f, 0x01, + 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, + 0x01, 0x41, 0x00, 0x10, 0x13, 0x20, 0x02, 0x29, 0x03, 0x08, 0x21, 0x03, 0x20, 0x00, 0x41, 0x00, + 0x36, 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, 0x37, 0x02, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, + 0x00, 0x0b, 0x26, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, + 0x02, 0x20, 0x01, 0x3a, 0x00, 0x0f, 0x20, 0x00, 0x20, 0x02, 0x41, 0x0f, 0x6a, 0x41, 0x01, 0x10, + 0x1b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, 0x26, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, + 0x10, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x0c, 0x20, 0x01, 0x20, + 0x02, 0x41, 0x0c, 0x6a, 0x41, 0x04, 0x10, 0x1b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0b, + 0x8f, 0x02, 0x02, 0x03, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x01, 0x24, 0x00, + 0x20, 0x01, 0x41, 0x08, 0x6a, 0x41, 0x08, 0x41, 0x00, 0x10, 0x13, 0x20, 0x01, 0x28, 0x02, 0x08, + 0x21, 0x02, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x21, 0x03, 0x20, 0x00, 0x41, 0x14, 0x6a, 0x41, 0x02, + 0x3a, 0x00, 0x00, 0x20, 0x00, 0x42, 0x08, 0x37, 0x02, 0x08, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, + 0x04, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x02, 0x42, 0xe1, 0xc6, 0x8d, 0xfb, 0xd6, + 0xce, 0x9b, 0xba, 0xf3, 0x00, 0x37, 0x00, 0x00, 0x20, 0x01, 0x41, 0x09, 0x41, 0x00, 0x10, 0x13, + 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x28, 0x20, 0x01, 0x20, 0x01, 0x29, 0x03, 0x00, 0x37, 0x03, + 0x20, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x41, 0xc4, 0x82, 0xc0, 0x00, 0x41, 0x08, 0x10, 0x1b, 0x20, + 0x01, 0x28, 0x02, 0x28, 0x22, 0x02, 0x20, 0x01, 0x28, 0x02, 0x24, 0x46, 0x04, 0x40, 0x20, 0x01, + 0x41, 0x20, 0x6a, 0x41, 0x01, 0x10, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x28, 0x21, 0x02, 0x0b, 0x20, + 0x01, 0x28, 0x02, 0x20, 0x20, 0x02, 0x6a, 0x41, 0x24, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x20, 0x02, + 0x41, 0x01, 0x6a, 0x22, 0x03, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x18, 0x6a, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, 0x29, 0x03, 0x20, 0x22, 0x04, 0x37, 0x03, 0x10, + 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x18, 0x20, 0x00, 0x41, 0x1c, 0x6a, 0x20, 0x04, 0x37, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x24, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x28, 0x6a, + 0x41, 0x09, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x34, 0x6a, 0x42, 0x00, 0x37, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x2c, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x30, 0x6a, 0x24, 0x00, + 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x10, 0x18, 0x20, 0x00, 0x41, 0x14, 0x6a, 0x2d, 0x00, 0x00, 0x41, + 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x08, 0x10, 0x0a, + 0x0b, 0x20, 0x00, 0x41, 0x1c, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0x30, 0x6a, 0x10, 0x33, 0x0b, + 0x9b, 0x03, 0x01, 0x06, 0x7f, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x00, + 0x28, 0x02, 0x04, 0x21, 0x03, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x04, 0x02, 0x40, 0x20, 0x03, + 0x45, 0x0d, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x04, 0x40, + 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x28, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x24, 0x20, 0x01, + 0x20, 0x02, 0x36, 0x02, 0x20, 0x20, 0x01, 0x41, 0x18, 0x6a, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x10, + 0x0d, 0x20, 0x01, 0x28, 0x02, 0x1c, 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x18, 0x21, 0x02, 0x0c, + 0x01, 0x0b, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x08, 0x21, 0x06, 0x03, 0x40, 0x20, 0x06, 0x45, 0x04, + 0x40, 0x41, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x20, 0x02, 0x20, 0x03, + 0x10, 0x09, 0x20, 0x01, 0x28, 0x02, 0x24, 0x22, 0x03, 0x45, 0x0d, 0x03, 0x20, 0x01, 0x28, 0x02, + 0x20, 0x21, 0x02, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x06, 0x41, 0x01, 0x6b, 0x21, 0x06, 0x41, + 0x00, 0x21, 0x04, 0x20, 0x05, 0x21, 0x00, 0x20, 0x03, 0x21, 0x02, 0x03, 0x40, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x02, 0x2f, 0x01, 0xe2, 0x01, 0x20, 0x00, 0x4b, 0x04, 0x40, 0x20, 0x00, 0x41, 0x01, + 0x6a, 0x21, 0x05, 0x20, 0x04, 0x45, 0x04, 0x40, 0x20, 0x02, 0x21, 0x03, 0x0c, 0x02, 0x0b, 0x20, + 0x01, 0x20, 0x05, 0x36, 0x02, 0x28, 0x20, 0x01, 0x20, 0x02, 0x36, 0x02, 0x24, 0x20, 0x01, 0x20, + 0x04, 0x36, 0x02, 0x20, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x10, 0x0d, + 0x20, 0x01, 0x28, 0x02, 0x14, 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x10, 0x21, 0x04, 0x03, 0x40, + 0x20, 0x04, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x05, 0x0c, 0x03, 0x0b, 0x20, 0x01, 0x41, 0x00, + 0x36, 0x02, 0x28, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x24, 0x20, 0x01, 0x20, 0x04, 0x36, 0x02, + 0x20, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x10, 0x0d, 0x20, 0x01, 0x28, + 0x02, 0x0c, 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x08, 0x21, 0x04, 0x0c, 0x00, 0x0b, 0x00, 0x0b, + 0x20, 0x01, 0x41, 0x20, 0x6a, 0x20, 0x04, 0x20, 0x02, 0x10, 0x09, 0x20, 0x01, 0x28, 0x02, 0x24, + 0x22, 0x03, 0x0d, 0x01, 0x41, 0x00, 0x21, 0x03, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x41, 0x0c, 0x6c, + 0x6a, 0x41, 0x04, 0x6a, 0x10, 0x18, 0x20, 0x02, 0x20, 0x00, 0x41, 0x03, 0x74, 0x6a, 0x41, 0x88, + 0x01, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x08, 0x10, 0x0a, 0x0c, 0x02, 0x0b, 0x20, 0x01, 0x28, 0x02, + 0x28, 0x21, 0x00, 0x20, 0x01, 0x28, 0x02, 0x20, 0x21, 0x04, 0x20, 0x03, 0x21, 0x02, 0x0c, 0x00, + 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x30, 0x6a, 0x24, 0x00, 0x0b, 0x48, 0x01, 0x01, + 0x7f, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x02, 0x49, 0x0d, + 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x10, 0x1a, 0x20, 0x01, 0x29, + 0x03, 0x00, 0x1a, 0x20, 0x01, 0x28, 0x02, 0x14, 0x22, 0x03, 0x20, 0x02, 0x20, 0x03, 0x6a, 0x4b, + 0x0d, 0x00, 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x14, 0x0c, 0x01, 0x0b, 0x00, 0x0b, 0x20, 0x00, + 0x41, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x30, 0x00, 0x20, 0x00, 0x20, 0x02, 0x20, 0x03, 0x20, 0x01, + 0x20, 0x01, 0x20, 0x03, 0x4b, 0x1b, 0x10, 0x4f, 0x22, 0x00, 0x45, 0x04, 0x40, 0x41, 0x7f, 0x20, + 0x01, 0x20, 0x03, 0x47, 0x20, 0x01, 0x20, 0x03, 0x49, 0x1b, 0x0f, 0x0b, 0x41, 0x7f, 0x41, 0x01, + 0x20, 0x00, 0x41, 0x00, 0x48, 0x1b, 0x0b, 0x04, 0x00, 0x41, 0x00, 0x0b, 0x8b, 0x04, 0x01, 0x05, + 0x7f, 0x23, 0x00, 0x41, 0xa0, 0x01, 0x6b, 0x22, 0x00, 0x24, 0x00, 0x20, 0x00, 0x41, 0x18, 0x6a, + 0x10, 0x31, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x41, 0x00, 0x10, 0x24, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x2d, 0x00, 0x58, 0x45, 0x04, 0x40, 0x20, 0x00, 0x41, 0xf8, 0x00, 0x6a, 0x20, 0x00, + 0x41, 0xe4, 0x00, 0x6a, 0x29, 0x02, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x02, + 0x5c, 0x37, 0x03, 0x70, 0x20, 0x00, 0x41, 0x88, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xfc, 0x00, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x02, 0x74, 0x37, 0x03, 0x80, + 0x01, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x10, 0x38, 0x45, 0x04, 0x40, 0x20, 0x00, 0x41, 0x10, 0x6a, + 0x21, 0x03, 0x20, 0x00, 0x41, 0x24, 0x6a, 0x22, 0x02, 0x22, 0x01, 0x28, 0x02, 0x00, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x01, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x01, 0x36, 0x02, 0x04, + 0x20, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x14, 0x21, + 0x01, 0x20, 0x00, 0x28, 0x02, 0x10, 0x41, 0x01, 0x41, 0x00, 0x10, 0x39, 0x20, 0x01, 0x28, 0x02, + 0x00, 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x48, 0x0d, 0x03, 0x20, 0x01, 0x20, + 0x04, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x28, 0x02, 0x00, + 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, 0x36, + 0x02, 0x04, 0x20, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x0c, 0x21, 0x02, 0x20, 0x00, 0x28, 0x02, 0x08, 0x22, 0x01, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x47, + 0x04, 0x40, 0x20, 0x01, 0x41, 0x01, 0x3a, 0x00, 0x04, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, + 0x01, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x01, 0x48, 0x0d, 0x03, 0x20, 0x02, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0xcc, 0x82, 0xc0, 0x00, 0x41, 0x05, + 0x10, 0x1c, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0x7f, 0x10, + 0x3a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0xd1, 0x82, 0xc0, 0x00, 0x41, 0x03, 0x10, 0x1c, + 0x20, 0x00, 0x41, 0x18, 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0x00, 0x10, 0x3a, 0x20, + 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0xd4, 0x82, 0xc0, 0x00, 0x41, 0x07, 0x10, 0x1c, 0x20, 0x00, + 0x41, 0x18, 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0x7f, 0x10, 0x3a, 0x20, 0x00, 0x41, + 0x90, 0x01, 0x6a, 0x41, 0xdb, 0x82, 0xc0, 0x00, 0x41, 0x05, 0x10, 0x1c, 0x20, 0x00, 0x41, 0x18, + 0x6a, 0x20, 0x00, 0x41, 0x90, 0x01, 0x6a, 0x41, 0x00, 0x10, 0x3a, 0x20, 0x00, 0x41, 0x18, 0x6a, + 0x10, 0x3b, 0x20, 0x00, 0x41, 0x80, 0x01, 0x6a, 0x10, 0x18, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, + 0xf0, 0x00, 0x6a, 0x41, 0xf5, 0x82, 0xc0, 0x00, 0x41, 0x14, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xf0, + 0x00, 0x6a, 0x10, 0x3c, 0x20, 0x00, 0x41, 0xf0, 0x00, 0x6a, 0x10, 0x18, 0x0b, 0x20, 0x00, 0x41, + 0x18, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0x2c, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x47, 0x04, + 0x40, 0x20, 0x00, 0x41, 0x28, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x08, 0x10, 0x0a, 0x0b, 0x20, 0x00, + 0x41, 0x34, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x10, 0x33, 0x20, 0x00, 0x41, + 0xa0, 0x01, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x2c, 0x00, 0x20, 0x00, 0x10, 0x48, 0x20, + 0x00, 0x41, 0x10, 0x6a, 0x22, 0x00, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x46, 0x04, 0x40, 0x00, 0x0b, + 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x04, 0x6a, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, + 0x00, 0x41, 0x01, 0x46, 0x1b, 0x0b, 0x37, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x04, 0x41, 0x02, 0x46, + 0x04, 0x40, 0x20, 0x01, 0x20, 0x02, 0x10, 0x43, 0x21, 0x01, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, + 0x04, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x0f, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, + 0x00, 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x0b, 0xbe, 0x02, + 0x01, 0x06, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x06, 0x24, 0x00, 0x20, 0x00, 0x10, 0x38, + 0x22, 0x03, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x28, 0x02, 0x00, 0x41, 0x7f, + 0x46, 0x0d, 0x00, 0x20, 0x06, 0x20, 0x01, 0x10, 0x2d, 0x02, 0x40, 0x20, 0x00, 0x41, 0x18, 0x6a, + 0x22, 0x03, 0x20, 0x06, 0x28, 0x02, 0x00, 0x22, 0x07, 0x20, 0x06, 0x28, 0x02, 0x08, 0x22, 0x08, + 0x10, 0x44, 0x22, 0x04, 0x04, 0x40, 0x20, 0x04, 0x41, 0x01, 0x3a, 0x00, 0x04, 0x20, 0x04, 0x28, + 0x02, 0x00, 0x22, 0x05, 0x28, 0x02, 0x00, 0x21, 0x04, 0x20, 0x05, 0x41, 0x00, 0x36, 0x02, 0x00, + 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x07, 0x20, 0x08, 0x10, 0x45, 0x20, 0x03, 0x20, 0x07, 0x20, + 0x08, 0x10, 0x44, 0x22, 0x04, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x04, 0x0c, 0x01, 0x0b, 0x20, + 0x04, 0x41, 0x01, 0x3a, 0x00, 0x04, 0x20, 0x04, 0x28, 0x02, 0x00, 0x22, 0x05, 0x28, 0x02, 0x00, + 0x21, 0x04, 0x20, 0x05, 0x41, 0x00, 0x36, 0x02, 0x00, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x20, 0x07, + 0x20, 0x08, 0x10, 0x44, 0x22, 0x05, 0x04, 0x40, 0x20, 0x05, 0x28, 0x02, 0x00, 0x22, 0x03, 0x20, + 0x02, 0x36, 0x02, 0x04, 0x20, 0x03, 0x41, 0x01, 0x36, 0x02, 0x00, 0x20, 0x05, 0x41, 0x01, 0x3a, + 0x00, 0x04, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x20, 0x07, 0x20, 0x08, 0x41, 0x01, 0x20, 0x02, 0x41, + 0x01, 0x10, 0x47, 0x0b, 0x20, 0x04, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, 0x00, 0x10, 0x48, 0x20, + 0x00, 0x41, 0x14, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x46, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x01, + 0x3a, 0x00, 0x14, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x04, 0x6a, + 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, 0x22, 0x00, 0x45, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x02, + 0x49, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x06, 0x10, 0x18, 0x20, + 0x01, 0x10, 0x18, 0x20, 0x06, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0xa8, 0x09, + 0x01, 0x08, 0x7f, 0x23, 0x00, 0x41, 0x80, 0x01, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, + 0xc8, 0x00, 0x6a, 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x22, 0x02, 0x10, 0x46, 0x20, 0x01, 0x28, 0x02, + 0x4c, 0x22, 0x03, 0x28, 0x02, 0x00, 0x22, 0x05, 0x41, 0x01, 0x6b, 0x22, 0x04, 0x20, 0x05, 0x4e, + 0x21, 0x05, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x48, 0x2d, 0x00, 0x04, 0x22, 0x06, + 0x41, 0x02, 0x47, 0x04, 0x40, 0x20, 0x05, 0x0d, 0x02, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x00, + 0x20, 0x06, 0x45, 0x0d, 0x01, 0x20, 0x01, 0x41, 0x40, 0x6b, 0x21, 0x04, 0x20, 0x02, 0x28, 0x02, + 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x02, + 0x36, 0x02, 0x04, 0x20, 0x04, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, 0x28, + 0x02, 0x44, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x40, 0x22, 0x03, 0x2d, 0x00, 0x04, 0x41, 0x02, + 0x46, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x03, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x04, 0x6a, 0x41, + 0x00, 0x20, 0x03, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, 0x22, 0x03, 0x04, 0x40, 0x20, 0x00, + 0x28, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x20, 0x03, 0x10, 0x42, 0x0b, 0x20, 0x04, 0x28, + 0x02, 0x00, 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x20, 0x03, 0x48, 0x0d, 0x02, 0x20, 0x04, + 0x20, 0x05, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x38, 0x6a, 0x21, 0x04, 0x20, 0x02, 0x28, 0x02, + 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x04, 0x20, 0x02, + 0x36, 0x02, 0x04, 0x20, 0x04, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, 0x28, + 0x02, 0x3c, 0x21, 0x02, 0x20, 0x01, 0x28, 0x02, 0x38, 0x22, 0x04, 0x2d, 0x00, 0x04, 0x41, 0x02, + 0x47, 0x04, 0x40, 0x20, 0x04, 0x41, 0x00, 0x3a, 0x00, 0x04, 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, + 0x22, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x03, 0x48, 0x0d, 0x02, 0x20, 0x02, 0x20, 0x04, + 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x05, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, + 0x00, 0x0b, 0x41, 0x00, 0x21, 0x05, 0x02, 0x40, 0x20, 0x00, 0x41, 0x2c, 0x6a, 0x28, 0x02, 0x00, + 0x41, 0x01, 0x6a, 0x22, 0x02, 0x41, 0x00, 0x4a, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, + 0x2c, 0x20, 0x00, 0x41, 0x34, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x45, 0x04, 0x40, 0x41, 0x00, + 0x21, 0x03, 0x41, 0x00, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x03, 0x21, 0x05, 0x20, 0x00, 0x41, + 0x30, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x02, 0x21, 0x04, 0x03, 0x40, 0x20, 0x03, 0x2f, 0x01, 0xe2, + 0x01, 0x21, 0x06, 0x20, 0x04, 0x45, 0x04, 0x40, 0x20, 0x02, 0x0d, 0x04, 0x20, 0x00, 0x41, 0x38, + 0x6a, 0x28, 0x02, 0x00, 0x21, 0x02, 0x0c, 0x03, 0x0b, 0x20, 0x02, 0x45, 0x0d, 0x03, 0x20, 0x01, + 0x41, 0x00, 0x36, 0x02, 0x58, 0x20, 0x01, 0x20, 0x05, 0x36, 0x02, 0x54, 0x20, 0x01, 0x20, 0x04, + 0x36, 0x02, 0x50, 0x20, 0x01, 0x41, 0x30, 0x6a, 0x20, 0x01, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x0d, + 0x20, 0x01, 0x28, 0x02, 0x34, 0x21, 0x05, 0x20, 0x01, 0x28, 0x02, 0x30, 0x21, 0x04, 0x20, 0x01, + 0x20, 0x06, 0x36, 0x02, 0x58, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x54, 0x20, 0x01, 0x20, 0x02, + 0x36, 0x02, 0x50, 0x20, 0x01, 0x41, 0x28, 0x6a, 0x20, 0x01, 0x41, 0xd0, 0x00, 0x6a, 0x10, 0x0d, + 0x20, 0x01, 0x28, 0x02, 0x2c, 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x28, 0x21, 0x02, 0x0c, 0x00, + 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x21, 0x08, 0x20, 0x01, 0x41, 0xe4, + 0x00, 0x6a, 0x20, 0x06, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0xe0, 0x00, 0x6a, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x42, 0x00, 0x37, 0x03, 0x58, 0x20, 0x01, 0x20, 0x05, 0x36, 0x02, 0x54, + 0x20, 0x01, 0x20, 0x04, 0x36, 0x02, 0x50, 0x03, 0x40, 0x02, 0x40, 0x20, 0x02, 0x04, 0x40, 0x20, + 0x01, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x36, 0x02, 0x68, 0x20, 0x01, 0x41, 0xd0, 0x00, 0x6a, 0x41, + 0x00, 0x20, 0x01, 0x28, 0x02, 0x54, 0x1b, 0x22, 0x07, 0x28, 0x02, 0x00, 0x21, 0x03, 0x20, 0x07, + 0x28, 0x02, 0x08, 0x21, 0x05, 0x20, 0x07, 0x28, 0x02, 0x04, 0x21, 0x02, 0x03, 0x40, 0x02, 0x40, + 0x20, 0x05, 0x20, 0x02, 0x2f, 0x01, 0xe2, 0x01, 0x49, 0x0d, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, + 0x22, 0x04, 0x45, 0x0d, 0x00, 0x20, 0x03, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x4b, 0x0d, + 0x05, 0x20, 0x02, 0x2f, 0x01, 0xe0, 0x01, 0x21, 0x05, 0x20, 0x04, 0x21, 0x02, 0x0c, 0x01, 0x0b, + 0x0b, 0x20, 0x05, 0x41, 0x01, 0x6a, 0x21, 0x06, 0x20, 0x03, 0x45, 0x04, 0x40, 0x20, 0x02, 0x21, + 0x04, 0x0c, 0x02, 0x0b, 0x20, 0x01, 0x20, 0x06, 0x36, 0x02, 0x78, 0x20, 0x01, 0x20, 0x02, 0x36, + 0x02, 0x74, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x70, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x20, 0x01, + 0x41, 0xf0, 0x00, 0x6a, 0x10, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x24, 0x21, 0x04, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x21, 0x03, 0x03, 0x40, 0x20, 0x03, 0x45, 0x04, 0x40, 0x41, 0x00, 0x21, 0x06, 0x0c, + 0x03, 0x0b, 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x78, 0x20, 0x01, 0x20, 0x04, 0x36, 0x02, 0x74, + 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x70, 0x20, 0x01, 0x41, 0x18, 0x6a, 0x20, 0x01, 0x41, 0xf0, + 0x00, 0x6a, 0x10, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x1c, 0x21, 0x04, 0x20, 0x01, 0x28, 0x02, 0x18, + 0x21, 0x03, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x2c, 0x22, 0x02, 0x41, 0x01, + 0x6b, 0x22, 0x04, 0x20, 0x02, 0x4e, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x04, 0x36, 0x02, 0x2c, 0x20, + 0x01, 0x41, 0x80, 0x01, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x20, 0x07, 0x20, 0x04, 0x36, 0x02, 0x04, + 0x20, 0x07, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x07, 0x20, 0x06, 0x36, 0x02, 0x08, 0x02, 0x40, + 0x20, 0x02, 0x20, 0x05, 0x41, 0x03, 0x74, 0x6a, 0x22, 0x04, 0x41, 0x8c, 0x01, 0x6a, 0x2d, 0x00, + 0x00, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x41, 0x88, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x06, 0x28, + 0x02, 0x00, 0x41, 0x01, 0x47, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x21, 0x03, 0x20, 0x08, + 0x22, 0x04, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x04, 0x41, 0x7f, 0x36, 0x02, 0x00, + 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x04, 0x20, 0x03, 0x20, 0x04, 0x41, 0x04, 0x6a, 0x36, 0x02, + 0x00, 0x20, 0x01, 0x28, 0x02, 0x14, 0x21, 0x03, 0x20, 0x01, 0x28, 0x02, 0x10, 0x20, 0x02, 0x20, + 0x05, 0x41, 0x0c, 0x6c, 0x6a, 0x22, 0x02, 0x41, 0x04, 0x6a, 0x28, 0x02, 0x00, 0x20, 0x02, 0x41, + 0x0c, 0x6a, 0x28, 0x02, 0x00, 0x10, 0x1b, 0x20, 0x03, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, + 0x6a, 0x22, 0x05, 0x20, 0x02, 0x48, 0x0d, 0x02, 0x20, 0x03, 0x20, 0x05, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x10, 0x46, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x21, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x08, 0x22, 0x03, 0x28, 0x02, 0x00, 0x20, 0x03, 0x28, 0x02, 0x08, 0x20, 0x06, + 0x41, 0x04, 0x6a, 0x10, 0x42, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x01, 0x6b, 0x22, + 0x05, 0x20, 0x03, 0x4e, 0x0d, 0x02, 0x20, 0x02, 0x20, 0x05, 0x36, 0x02, 0x00, 0x20, 0x04, 0x28, + 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x08, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, + 0x08, 0x36, 0x02, 0x04, 0x20, 0x01, 0x20, 0x08, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, + 0x28, 0x02, 0x04, 0x21, 0x02, 0x20, 0x00, 0x28, 0x02, 0x28, 0x22, 0x04, 0x20, 0x01, 0x28, 0x02, + 0x00, 0x22, 0x03, 0x28, 0x02, 0x08, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x08, + 0x0b, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x04, 0x48, + 0x0d, 0x02, 0x20, 0x02, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x68, 0x21, + 0x02, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x2a, 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x10, + 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x20, 0x00, 0x10, 0x2d, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x20, 0x01, 0x28, 0x02, 0x08, 0x10, 0x05, 0x20, 0x01, 0x10, 0x18, 0x20, 0x01, 0x41, 0x10, 0x6a, + 0x24, 0x00, 0x0b, 0xd0, 0x17, 0x02, 0x08, 0x7f, 0x02, 0x7e, 0x23, 0x00, 0x41, 0xf0, 0x02, 0x6b, + 0x22, 0x00, 0x24, 0x00, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x10, 0x31, 0x20, 0x00, 0x41, 0xa0, + 0x02, 0x6a, 0x41, 0x01, 0x10, 0x24, 0x02, 0x40, 0x02, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x2d, 0x00, + 0xa0, 0x02, 0x41, 0x01, 0x47, 0x04, 0x40, 0x20, 0x00, 0x41, 0xa0, 0x01, 0x6a, 0x20, 0x00, 0x41, + 0xb0, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, + 0xa8, 0x02, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, 0x98, 0x01, 0x20, 0x00, 0x28, 0x02, + 0xa4, 0x02, 0x21, 0x01, 0x20, 0x00, 0x41, 0xb0, 0x01, 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x20, 0x08, 0x37, 0x03, 0xa8, 0x01, 0x20, 0x01, 0x41, 0xa8, 0x88, 0xdb, 0xb6, 0x7a, 0x46, + 0x0d, 0x01, 0x20, 0x01, 0x41, 0xc4, 0xa5, 0x8a, 0x98, 0x7e, 0x46, 0x0d, 0x03, 0x20, 0x01, 0x41, + 0xfc, 0xcc, 0xe4, 0xc8, 0x02, 0x46, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0xa0, 0x02, + 0x20, 0x00, 0x41, 0x38, 0x6a, 0x41, 0x04, 0x72, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, + 0x10, 0x1c, 0x41, 0x00, 0x21, 0x02, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x38, 0x20, 0x00, 0x41, + 0xa8, 0x01, 0x6a, 0x10, 0x18, 0x0c, 0x0b, 0x0b, 0x20, 0x00, 0x41, 0x02, 0x36, 0x02, 0x38, 0x41, + 0x02, 0x0c, 0x09, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0xb0, 0x01, 0x36, 0x02, 0xbc, 0x01, + 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x36, 0x02, 0xb8, 0x01, 0x20, 0x00, 0x41, 0xe0, + 0x02, 0x6a, 0x20, 0x00, 0x41, 0xb8, 0x01, 0x6a, 0x10, 0x29, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x02, + 0x45, 0x0d, 0x02, 0x20, 0x00, 0x41, 0xc8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe8, 0x02, 0x6a, 0x22, + 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, 0x02, 0x37, + 0x03, 0xc0, 0x01, 0x20, 0x00, 0x41, 0xe0, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xb8, 0x01, 0x6a, 0x10, + 0x29, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x02, 0x45, 0x0d, 0x03, 0x20, 0x00, 0x41, 0xd8, 0x01, 0x6a, + 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, 0x02, + 0x37, 0x03, 0xd0, 0x01, 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x00, 0x41, 0xb8, 0x01, 0x6a, 0x10, + 0x2b, 0x20, 0x00, 0x28, 0x02, 0x08, 0x45, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x0c, 0x21, 0x01, + 0x20, 0x00, 0x41, 0x88, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xc8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xc0, 0x01, 0x37, 0x03, 0x80, 0x02, 0x20, 0x00, + 0x41, 0xa8, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xd8, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xd0, 0x01, 0x37, 0x03, 0xa0, 0x02, 0x20, 0x01, 0x20, 0x00, + 0x41, 0xd8, 0x00, 0x6a, 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, 0x10, 0x3e, 0x28, 0x02, 0x00, 0x22, + 0x02, 0x4d, 0x04, 0x40, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, + 0x10, 0x3f, 0x22, 0x04, 0x28, 0x02, 0x00, 0x22, 0x03, 0x20, 0x01, 0x6b, 0x22, 0x05, 0x20, 0x03, + 0x4b, 0x0d, 0x06, 0x20, 0x04, 0x20, 0x05, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, + 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x3f, 0x22, 0x04, 0x28, 0x02, 0x00, 0x22, 0x03, 0x20, + 0x01, 0x6a, 0x22, 0x05, 0x20, 0x03, 0x49, 0x0d, 0x06, 0x20, 0x04, 0x20, 0x05, 0x36, 0x02, 0x00, + 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, 0x10, + 0x18, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x4d, 0x3a, 0x00, 0xe0, 0x01, 0x20, 0x00, 0x41, 0xd8, + 0x00, 0x6a, 0x10, 0x3b, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x10, 0x40, 0x20, 0x00, 0x41, 0x03, + 0x36, 0x02, 0x38, 0x0c, 0x08, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, 0x72, 0x41, + 0xe6, 0x82, 0xc0, 0x00, 0x41, 0x06, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x20, 0x00, + 0x28, 0x02, 0xb8, 0x01, 0x20, 0x00, 0x28, 0x02, 0xbc, 0x01, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xc4, + 0x00, 0x6a, 0x20, 0x00, 0x41, 0xac, 0x02, 0x6a, 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, + 0x41, 0xcc, 0x00, 0x6a, 0x20, 0x00, 0x41, 0xb4, 0x02, 0x6a, 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, + 0x20, 0x00, 0x20, 0x00, 0x29, 0x02, 0xa4, 0x02, 0x22, 0x08, 0x37, 0x03, 0x80, 0x02, 0x20, 0x00, + 0x41, 0x01, 0x36, 0x02, 0x38, 0x20, 0x00, 0x20, 0x08, 0x37, 0x02, 0x3c, 0x20, 0x00, 0x41, 0xd0, + 0x01, 0x6a, 0x10, 0x18, 0x0c, 0x06, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0xb0, 0x01, 0x36, + 0x02, 0xc4, 0x01, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x36, 0x02, 0xc0, 0x01, 0x20, + 0x00, 0x41, 0xe0, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x29, 0x20, 0x00, 0x28, + 0x02, 0xe0, 0x02, 0x04, 0x40, 0x20, 0x00, 0x41, 0xd8, 0x01, 0x6a, 0x20, 0x00, 0x41, 0xe8, 0x02, + 0x6a, 0x28, 0x02, 0x00, 0x22, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, + 0x02, 0x22, 0x08, 0x37, 0x03, 0xd0, 0x01, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x20, 0x01, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, 0xa0, 0x02, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, + 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x3e, 0x28, 0x02, 0x00, 0x20, 0x00, 0x41, 0xa0, 0x02, + 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, 0x10, 0x2e, 0x20, 0x00, 0x41, + 0xa0, 0x02, 0x6a, 0x10, 0x30, 0x20, 0x00, 0x28, 0x02, 0xa0, 0x02, 0x20, 0x00, 0x28, 0x02, 0xa8, + 0x02, 0x10, 0x02, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0x03, 0x36, + 0x02, 0x38, 0x0c, 0x07, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, 0x72, 0x41, 0xec, + 0x82, 0xc0, 0x00, 0x41, 0x04, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x22, 0x01, 0x20, + 0x00, 0x28, 0x02, 0xc0, 0x01, 0x20, 0x00, 0x28, 0x02, 0xc4, 0x01, 0x10, 0x1c, 0x20, 0x00, 0x41, + 0x88, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x41, 0x90, 0x02, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x22, 0x09, 0x37, 0x03, + 0x00, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, + 0x41, 0xf0, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xf8, 0x01, + 0x6a, 0x22, 0x04, 0x20, 0x00, 0x41, 0xb8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0x01, 0x36, 0x02, 0xa0, 0x02, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, 0x37, + 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x20, 0x04, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, + 0x00, 0x41, 0x40, 0x6b, 0x20, 0x01, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x29, 0x03, 0xe0, 0x01, 0x37, 0x03, 0x38, 0x0c, 0x06, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, + 0xb0, 0x01, 0x36, 0x02, 0xc4, 0x01, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x01, 0x36, 0x02, + 0xc0, 0x01, 0x20, 0x00, 0x41, 0xe0, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x29, + 0x20, 0x00, 0x28, 0x02, 0xe0, 0x02, 0x04, 0x40, 0x20, 0x00, 0x41, 0xd8, 0x01, 0x6a, 0x20, 0x00, + 0x41, 0xe8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x29, 0x03, 0xe0, 0x02, 0x22, 0x08, 0x37, 0x03, 0xd0, 0x01, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, + 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x08, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x08, 0xa7, + 0x21, 0x05, 0x02, 0x7f, 0x20, 0x03, 0x04, 0x40, 0x20, 0x00, 0x41, 0x30, 0x6a, 0x20, 0x05, 0x20, + 0x03, 0x41, 0x00, 0x10, 0x1f, 0x20, 0x00, 0x28, 0x02, 0x34, 0x20, 0x00, 0x28, 0x02, 0x30, 0x21, + 0x01, 0x20, 0x00, 0x41, 0x28, 0x6a, 0x20, 0x05, 0x20, 0x03, 0x41, 0x01, 0x10, 0x1f, 0x20, 0x00, + 0x28, 0x02, 0x2c, 0x20, 0x00, 0x41, 0x20, 0x6a, 0x20, 0x05, 0x20, 0x03, 0x20, 0x01, 0x20, 0x00, + 0x28, 0x02, 0x28, 0x22, 0x06, 0x20, 0x01, 0x20, 0x06, 0x4b, 0x22, 0x06, 0x1b, 0x22, 0x01, 0x10, + 0x20, 0x20, 0x06, 0x1b, 0x22, 0x06, 0x20, 0x01, 0x6a, 0x22, 0x07, 0x20, 0x06, 0x49, 0x0d, 0x05, + 0x20, 0x00, 0x28, 0x02, 0x24, 0x21, 0x02, 0x20, 0x00, 0x28, 0x02, 0x20, 0x21, 0x04, 0x20, 0x00, + 0x41, 0x18, 0x6a, 0x20, 0x06, 0x20, 0x07, 0x20, 0x05, 0x20, 0x03, 0x10, 0x21, 0x02, 0x7f, 0x20, + 0x00, 0x28, 0x02, 0x18, 0x21, 0x07, 0x20, 0x00, 0x28, 0x02, 0x1c, 0x20, 0x02, 0x46, 0x04, 0x7f, + 0x20, 0x04, 0x20, 0x07, 0x20, 0x02, 0x10, 0x4f, 0x45, 0x05, 0x41, 0x00, 0x0b, 0x45, 0x04, 0x40, + 0x20, 0x03, 0x20, 0x01, 0x6b, 0x22, 0x02, 0x20, 0x03, 0x4b, 0x0d, 0x07, 0x20, 0x01, 0x20, 0x02, + 0x20, 0x01, 0x20, 0x02, 0x4b, 0x1b, 0x22, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x02, 0x49, + 0x0d, 0x07, 0x41, 0x7f, 0x21, 0x04, 0x20, 0x05, 0x20, 0x03, 0x10, 0x23, 0x21, 0x08, 0x20, 0x01, + 0x21, 0x02, 0x41, 0x7f, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x21, 0x04, 0x20, 0x03, 0x20, 0x05, 0x20, + 0x03, 0x20, 0x06, 0x41, 0x00, 0x10, 0x22, 0x22, 0x02, 0x20, 0x05, 0x20, 0x03, 0x20, 0x06, 0x41, + 0x01, 0x10, 0x22, 0x22, 0x07, 0x20, 0x02, 0x20, 0x07, 0x4b, 0x1b, 0x6b, 0x22, 0x02, 0x20, 0x03, + 0x4b, 0x0d, 0x06, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x20, 0x05, 0x20, 0x03, 0x20, 0x06, 0x10, 0x20, + 0x20, 0x00, 0x28, 0x02, 0x10, 0x20, 0x00, 0x28, 0x02, 0x14, 0x10, 0x23, 0x21, 0x08, 0x20, 0x03, + 0x0b, 0x21, 0x07, 0x20, 0x00, 0x41, 0xdc, 0x02, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x41, 0xd4, 0x02, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xc8, 0x02, 0x6a, 0x20, + 0x07, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xc4, 0x02, 0x6a, 0x20, 0x04, 0x36, 0x02, 0x00, 0x20, + 0x00, 0x41, 0xbc, 0x02, 0x6a, 0x42, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x41, 0xb8, 0x02, 0x6a, + 0x20, 0x06, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xb4, 0x02, 0x6a, 0x20, 0x02, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xa8, 0x02, + 0x6a, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x05, 0x36, 0x02, 0xd8, 0x02, 0x20, 0x00, + 0x41, 0xf0, 0x82, 0xc0, 0x00, 0x36, 0x02, 0xd0, 0x02, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xa0, + 0x02, 0x20, 0x08, 0x42, 0x20, 0x88, 0xa7, 0x21, 0x02, 0x20, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x00, + 0x41, 0xdc, 0x02, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xd4, 0x02, 0x6a, 0x41, + 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xac, 0x02, 0x6a, 0x41, 0x81, 0x02, 0x3b, 0x01, 0x00, + 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x41, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x05, 0x36, + 0x02, 0xd8, 0x02, 0x20, 0x00, 0x41, 0xf0, 0x82, 0xc0, 0x00, 0x36, 0x02, 0xd0, 0x02, 0x20, 0x00, + 0x42, 0x00, 0x37, 0x03, 0xa0, 0x02, 0x41, 0x01, 0x21, 0x02, 0x41, 0x00, 0x0b, 0x21, 0x01, 0x02, + 0x40, 0x20, 0x03, 0x04, 0x40, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x21, 0x02, 0x20, 0x00, 0x41, + 0xc4, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x41, 0x7f, 0x47, 0x04, 0x40, 0x20, 0x00, 0x41, 0x80, 0x02, + 0x6a, 0x20, 0x02, 0x20, 0x01, 0x10, 0x34, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, + 0x20, 0x02, 0x20, 0x01, 0x10, 0x34, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x28, 0x02, 0xa4, 0x02, 0x22, + 0x01, 0x0d, 0x05, 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, 0x04, 0x40, 0x20, 0x00, 0x41, 0x88, 0x02, + 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x84, 0x02, 0x20, 0x00, + 0x41, 0x01, 0x36, 0x02, 0x80, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x80, + 0x02, 0x0b, 0x20, 0x00, 0x28, 0x02, 0x80, 0x02, 0x21, 0x01, 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, + 0x10, 0x18, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0xa0, 0x02, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, + 0x10, 0x40, 0x20, 0x00, 0x41, 0x03, 0x36, 0x02, 0x38, 0x0c, 0x06, 0x0b, 0x20, 0x00, 0x41, 0xa0, + 0x02, 0x6a, 0x41, 0x04, 0x72, 0x41, 0xf0, 0x82, 0xc0, 0x00, 0x41, 0x05, 0x10, 0x1c, 0x20, 0x00, + 0x41, 0xb0, 0x02, 0x6a, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0xc0, 0x01, 0x20, 0x00, 0x28, 0x02, + 0xc4, 0x01, 0x10, 0x1c, 0x20, 0x00, 0x41, 0x88, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, + 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0x90, 0x02, 0x6a, 0x20, 0x01, + 0x29, 0x03, 0x00, 0x22, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x22, 0x01, + 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x09, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x22, 0x04, 0x20, 0x00, 0x41, 0xb8, 0x02, 0x6a, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xa0, 0x02, 0x20, 0x00, + 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, + 0x20, 0x04, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x20, 0x02, + 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0x40, 0x6b, 0x20, 0x01, 0x29, 0x03, 0x00, + 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, 0x01, 0x37, 0x03, 0x38, 0x0c, 0x05, + 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, 0x72, 0x41, 0xe0, 0x82, 0xc0, 0x00, 0x41, + 0x04, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x22, 0x01, 0x20, 0x00, 0x28, 0x02, 0xb8, + 0x01, 0x20, 0x00, 0x28, 0x02, 0xbc, 0x01, 0x10, 0x1c, 0x20, 0x00, 0x41, 0x88, 0x02, 0x6a, 0x20, + 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, + 0x90, 0x02, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x22, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, + 0xe8, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xf0, 0x01, 0x6a, + 0x22, 0x02, 0x20, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xf8, 0x01, 0x6a, 0x22, 0x04, 0x20, + 0x00, 0x41, 0xb8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, 0x01, 0x36, + 0x02, 0xa0, 0x02, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, 0x37, 0x03, 0xe0, 0x01, 0x20, + 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x20, 0x04, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x41, + 0xc8, 0x00, 0x6a, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0x40, 0x6b, + 0x20, 0x01, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xe0, 0x01, + 0x37, 0x03, 0x38, 0x0c, 0x04, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0x04, 0x72, 0x41, + 0xe4, 0x82, 0xc0, 0x00, 0x41, 0x02, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xb0, 0x02, 0x6a, 0x22, 0x01, + 0x20, 0x00, 0x28, 0x02, 0xb8, 0x01, 0x20, 0x00, 0x28, 0x02, 0xbc, 0x01, 0x10, 0x1c, 0x20, 0x00, + 0x41, 0x88, 0x02, 0x6a, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x29, 0x03, 0x00, 0x22, 0x08, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0x90, 0x02, 0x6a, 0x20, 0x01, 0x29, 0x03, 0x00, 0x22, 0x09, 0x37, + 0x03, 0x00, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x22, 0x01, 0x20, 0x08, 0x37, 0x03, 0x00, 0x20, + 0x00, 0x41, 0xf0, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x09, 0x37, 0x03, 0x00, 0x20, 0x00, 0x41, 0xf8, + 0x01, 0x6a, 0x22, 0x04, 0x20, 0x00, 0x41, 0xb8, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x00, 0x41, 0x01, 0x36, 0x02, 0xa0, 0x02, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, 0xa0, 0x02, + 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x20, 0x04, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x20, 0x02, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, + 0x20, 0x00, 0x41, 0x40, 0x6b, 0x20, 0x01, 0x29, 0x03, 0x00, 0x37, 0x03, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x29, 0x03, 0xe0, 0x01, 0x37, 0x03, 0x38, 0x0c, 0x02, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x10, + 0x1e, 0x00, 0x0b, 0x20, 0x00, 0x41, 0xc0, 0x01, 0x6a, 0x10, 0x18, 0x0b, 0x20, 0x00, 0x41, 0xa8, + 0x01, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x28, 0x02, 0x38, 0x0b, 0x21, 0x02, 0x0b, 0x20, 0x00, 0x41, + 0xd8, 0x00, 0x6a, 0x10, 0x32, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, 0x03, 0x47, + 0x04, 0x40, 0x20, 0x00, 0x41, 0x38, 0x6a, 0x41, 0x04, 0x72, 0x21, 0x01, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x02, 0x41, 0x01, 0x6b, 0x0e, 0x02, 0x00, 0x01, 0x03, 0x0b, 0x20, 0x00, 0x41, 0xe8, 0x02, + 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, + 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x03, 0xe0, 0x02, 0x20, 0x00, 0x41, 0xe8, 0x01, 0x6a, 0x22, + 0x01, 0x20, 0x00, 0x41, 0xd0, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x41, 0xc8, 0x00, 0x6a, 0x29, 0x03, 0x00, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0x80, + 0x02, 0x6a, 0x41, 0x92, 0x82, 0xc0, 0x00, 0x41, 0x14, 0x10, 0x1c, 0x20, 0x00, 0x41, 0x80, 0x02, + 0x6a, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x02, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, 0x1b, 0x20, 0x00, + 0x41, 0x80, 0x02, 0x6a, 0x41, 0xa6, 0x82, 0xc0, 0x00, 0x41, 0x03, 0x10, 0x1b, 0x20, 0x00, 0x41, + 0xd8, 0x00, 0x6a, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x10, 0x27, + 0x20, 0x00, 0x41, 0x80, 0x02, 0x6a, 0x20, 0x00, 0x28, 0x02, 0x58, 0x20, 0x00, 0x28, 0x02, 0x60, + 0x10, 0x1b, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, + 0x20, 0x00, 0x41, 0x88, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x29, 0x03, 0x80, 0x02, 0x37, 0x03, 0xa0, 0x02, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0xac, 0x02, + 0x20, 0x00, 0x41, 0xe0, 0x01, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xe0, 0x02, 0x6a, 0x10, 0x18, + 0x0c, 0x03, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x41, 0xf5, 0x82, 0xc0, 0x00, 0x41, 0x14, + 0x10, 0x1c, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0xac, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x42, + 0x00, 0x37, 0x02, 0xa4, 0x02, 0x20, 0x00, 0x41, 0x01, 0x3a, 0x00, 0xac, 0x02, 0x20, 0x00, 0x41, + 0xac, 0x82, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x36, 0x02, 0xa0, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x00, + 0x41, 0xe8, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, + 0x00, 0x20, 0x00, 0x20, 0x01, 0x29, 0x02, 0x00, 0x37, 0x03, 0xe0, 0x01, 0x20, 0x00, 0x41, 0x80, + 0x02, 0x6a, 0x41, 0x80, 0x82, 0xc0, 0x00, 0x41, 0x12, 0x10, 0x1c, 0x20, 0x00, 0x41, 0xd8, 0x00, + 0x6a, 0x20, 0x00, 0x28, 0x02, 0xe0, 0x01, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, 0x27, 0x20, 0x00, + 0x41, 0x80, 0x02, 0x6a, 0x20, 0x00, 0x28, 0x02, 0x58, 0x20, 0x00, 0x28, 0x02, 0x60, 0x10, 0x1b, + 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xa8, 0x02, 0x6a, 0x20, 0x00, + 0x41, 0x88, 0x02, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x29, 0x03, + 0x80, 0x02, 0x37, 0x03, 0xa0, 0x02, 0x20, 0x00, 0x41, 0x00, 0x3a, 0x00, 0xac, 0x02, 0x20, 0x00, + 0x41, 0xe0, 0x01, 0x6a, 0x10, 0x18, 0x0b, 0x20, 0x00, 0x28, 0x02, 0xa0, 0x02, 0x21, 0x02, 0x20, + 0x00, 0x20, 0x00, 0x28, 0x02, 0xa8, 0x02, 0x22, 0x01, 0x41, 0x00, 0x10, 0x13, 0x20, 0x00, 0x20, + 0x00, 0x28, 0x02, 0x04, 0x36, 0x02, 0x5c, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x04, + 0x36, 0x02, 0x58, 0x20, 0x04, 0x20, 0x02, 0x20, 0x01, 0x10, 0x4c, 0x1a, 0x20, 0x00, 0x20, 0x01, + 0x36, 0x02, 0x60, 0x20, 0x00, 0x41, 0xd8, 0x00, 0x6a, 0x10, 0x3c, 0x20, 0x00, 0x41, 0xd8, 0x00, + 0x6a, 0x10, 0x18, 0x0b, 0x20, 0x00, 0x41, 0xa0, 0x02, 0x6a, 0x10, 0x18, 0x20, 0x00, 0x41, 0xf0, + 0x02, 0x6a, 0x24, 0x00, 0x0b, 0x8c, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x02, 0x24, 0x00, 0x20, 0x02, 0x20, 0x01, 0x10, 0x2d, 0x02, 0x7f, 0x20, 0x00, 0x41, 0x18, 0x6a, + 0x22, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x01, 0x20, 0x02, 0x28, 0x02, 0x08, 0x22, 0x03, + 0x10, 0x44, 0x22, 0x04, 0x04, 0x40, 0x20, 0x04, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x04, 0x6a, + 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, 0x0c, 0x01, 0x0b, 0x20, 0x00, + 0x20, 0x01, 0x20, 0x03, 0x10, 0x45, 0x41, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x03, 0x10, 0x44, + 0x22, 0x00, 0x45, 0x0d, 0x00, 0x1a, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x04, 0x6a, + 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, 0x0b, 0x21, 0x00, 0x20, 0x02, + 0x10, 0x18, 0x20, 0x00, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, + 0x20, 0x00, 0x0b, 0x9a, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x02, 0x24, + 0x00, 0x20, 0x02, 0x20, 0x01, 0x10, 0x2d, 0x02, 0x7f, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x22, 0x00, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x22, 0x01, 0x20, 0x02, 0x28, 0x02, 0x08, 0x22, 0x03, 0x10, 0x44, + 0x22, 0x04, 0x04, 0x40, 0x20, 0x04, 0x41, 0x01, 0x3a, 0x00, 0x04, 0x20, 0x04, 0x28, 0x02, 0x00, + 0x22, 0x00, 0x41, 0x04, 0x6a, 0x41, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, + 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x20, 0x03, 0x10, 0x45, 0x41, 0x00, 0x20, 0x00, 0x20, + 0x01, 0x20, 0x03, 0x10, 0x44, 0x22, 0x00, 0x45, 0x0d, 0x00, 0x1a, 0x20, 0x00, 0x41, 0x01, 0x3a, + 0x00, 0x04, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, 0x00, 0x41, 0x04, 0x6a, 0x41, 0x00, 0x20, 0x00, + 0x28, 0x02, 0x00, 0x41, 0x01, 0x46, 0x1b, 0x0b, 0x21, 0x00, 0x20, 0x02, 0x10, 0x18, 0x20, 0x00, + 0x45, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x20, 0x00, 0x0b, 0x5b, + 0x01, 0x01, 0x7f, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x08, + 0x6a, 0x41, 0x01, 0x41, 0x00, 0x10, 0x13, 0x20, 0x01, 0x41, 0x00, 0x36, 0x02, 0x18, 0x20, 0x01, + 0x20, 0x01, 0x29, 0x03, 0x08, 0x37, 0x03, 0x10, 0x20, 0x01, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x1f, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x20, 0x01, 0x41, 0x1f, 0x6a, 0x41, 0x01, 0x10, 0x1b, + 0x20, 0x01, 0x28, 0x02, 0x10, 0x20, 0x01, 0x28, 0x02, 0x18, 0x10, 0x02, 0x20, 0x01, 0x41, 0x10, + 0x6a, 0x10, 0x18, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0xce, 0x01, 0x02, 0x03, 0x7f, + 0x01, 0x7e, 0x23, 0x00, 0x41, 0x30, 0x6b, 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x41, 0x20, 0x6a, + 0x21, 0x03, 0x02, 0x40, 0x41, 0x90, 0x83, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, 0x80, + 0x80, 0x01, 0x4d, 0x04, 0x40, 0x20, 0x03, 0x20, 0x04, 0x36, 0x02, 0x04, 0x20, 0x03, 0x41, 0x94, + 0x83, 0xc0, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x00, 0x0b, 0x02, 0x40, 0x02, 0x7e, 0x42, + 0x81, 0x06, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x28, 0x02, 0x20, 0x10, 0x03, 0x22, 0x00, 0x45, + 0x0d, 0x00, 0x1a, 0x20, 0x00, 0x41, 0x81, 0x80, 0x01, 0x4f, 0x0d, 0x01, 0x41, 0x90, 0x83, 0xc0, + 0x00, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x18, 0x6a, 0x20, 0x00, 0x10, 0x2c, 0x20, + 0x02, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x28, 0x02, 0x18, 0x21, 0x03, 0x20, 0x00, 0x20, + 0x02, 0x28, 0x02, 0x1c, 0x4b, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x04, + 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x20, 0x02, 0x29, 0x03, 0x10, 0x37, 0x03, + 0x28, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x41, 0x28, 0x6a, 0x10, 0x2b, 0x20, 0x02, 0x28, + 0x02, 0x08, 0x41, 0x00, 0x47, 0xad, 0x20, 0x02, 0x35, 0x02, 0x0c, 0x42, 0x20, 0x86, 0x84, 0x0b, + 0x20, 0x02, 0x41, 0x30, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x8a, 0x01, 0x01, 0x02, 0x7f, + 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x41, 0x90, 0x83, 0xc0, 0x00, 0x41, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x02, 0x28, 0x02, 0x00, 0x36, 0x02, 0x1c, 0x20, 0x03, 0x41, + 0x10, 0x6a, 0x22, 0x02, 0x41, 0x04, 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x94, 0x83, 0xc0, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x03, 0x28, 0x02, 0x10, 0x20, 0x03, 0x28, 0x02, 0x14, 0x20, 0x03, 0x41, + 0x1c, 0x6a, 0x41, 0x04, 0x10, 0x1d, 0x41, 0x90, 0x83, 0xc0, 0x00, 0x28, 0x02, 0x00, 0x22, 0x04, + 0x41, 0x04, 0x6a, 0x22, 0x02, 0x20, 0x04, 0x49, 0x04, 0x40, 0x00, 0x0b, 0x41, 0x90, 0x83, 0xc0, + 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x02, 0x10, 0x2c, 0x20, + 0x00, 0x20, 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, 0x20, 0x03, 0x28, 0x02, 0x0c, 0x10, 0x04, 0x20, + 0x03, 0x41, 0x20, 0x6a, 0x24, 0x00, 0x0b, 0x21, 0x01, 0x01, 0x7f, 0x41, 0x08, 0x41, 0x04, 0x10, + 0x16, 0x22, 0x02, 0x45, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, + 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x0b, 0xe7, 0x01, 0x01, 0x05, 0x7f, 0x23, 0x00, + 0x41, 0x20, 0x6b, 0x22, 0x03, 0x24, 0x00, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x41, 0x1c, 0x6a, + 0x28, 0x02, 0x00, 0x22, 0x04, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x18, 0x6a, 0x28, 0x02, 0x00, + 0x21, 0x06, 0x03, 0x40, 0x20, 0x04, 0x2f, 0x01, 0xe2, 0x01, 0x21, 0x00, 0x20, 0x03, 0x41, 0x00, + 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x04, 0x41, 0x04, 0x6a, 0x22, 0x05, 0x36, 0x02, 0x10, 0x20, + 0x03, 0x20, 0x05, 0x20, 0x00, 0x41, 0x0c, 0x6c, 0x6a, 0x36, 0x02, 0x14, 0x02, 0x40, 0x02, 0x40, + 0x03, 0x40, 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x03, 0x41, 0x10, 0x6a, 0x10, 0x06, 0x20, 0x03, + 0x28, 0x02, 0x0c, 0x22, 0x07, 0x45, 0x0d, 0x01, 0x20, 0x03, 0x28, 0x02, 0x08, 0x21, 0x05, 0x02, + 0x40, 0x20, 0x01, 0x20, 0x02, 0x20, 0x07, 0x28, 0x02, 0x00, 0x20, 0x07, 0x28, 0x02, 0x08, 0x10, + 0x35, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x0e, 0x02, 0x03, 0x01, 0x00, 0x0b, 0x0b, 0x20, 0x05, + 0x21, 0x00, 0x0b, 0x20, 0x06, 0x45, 0x0d, 0x02, 0x20, 0x03, 0x20, 0x00, 0x36, 0x02, 0x18, 0x20, + 0x03, 0x20, 0x04, 0x36, 0x02, 0x14, 0x20, 0x03, 0x20, 0x06, 0x36, 0x02, 0x10, 0x20, 0x03, 0x20, + 0x03, 0x41, 0x10, 0x6a, 0x10, 0x0d, 0x20, 0x03, 0x28, 0x02, 0x04, 0x21, 0x04, 0x20, 0x03, 0x28, + 0x02, 0x00, 0x21, 0x06, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x04, 0x20, 0x05, 0x41, 0x03, 0x74, 0x6a, + 0x41, 0x88, 0x01, 0x6a, 0x0c, 0x01, 0x0b, 0x41, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x20, 0x6a, 0x24, + 0x00, 0x0b, 0xa4, 0x02, 0x02, 0x04, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x20, 0x6b, 0x22, 0x04, + 0x24, 0x00, 0x20, 0x04, 0x41, 0x18, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x28, 0x02, 0x00, 0x04, 0x40, + 0x00, 0x0b, 0x20, 0x00, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x00, 0x36, 0x02, 0x04, + 0x20, 0x03, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x04, 0x28, 0x02, 0x1c, 0x21, + 0x03, 0x20, 0x04, 0x28, 0x02, 0x18, 0x20, 0x01, 0x20, 0x02, 0x10, 0x1b, 0x02, 0x40, 0x20, 0x03, + 0x28, 0x02, 0x00, 0x22, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x05, 0x48, 0x0d, 0x00, 0x20, + 0x03, 0x20, 0x06, 0x36, 0x02, 0x00, 0x20, 0x04, 0x41, 0x10, 0x6a, 0x20, 0x00, 0x10, 0x46, 0x20, + 0x04, 0x28, 0x02, 0x14, 0x21, 0x03, 0x20, 0x04, 0x28, 0x02, 0x10, 0x22, 0x05, 0x28, 0x02, 0x00, + 0x20, 0x05, 0x28, 0x02, 0x08, 0x10, 0x41, 0x21, 0x07, 0x20, 0x03, 0x28, 0x02, 0x00, 0x22, 0x05, + 0x41, 0x01, 0x6b, 0x22, 0x06, 0x20, 0x05, 0x4e, 0x0d, 0x00, 0x20, 0x03, 0x20, 0x06, 0x36, 0x02, + 0x00, 0x20, 0x04, 0x41, 0x08, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x28, 0x02, 0x00, 0x04, 0x40, 0x00, + 0x0b, 0x20, 0x00, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x00, 0x36, 0x02, 0x04, 0x20, + 0x03, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x04, 0x28, 0x02, 0x0c, 0x21, 0x03, + 0x20, 0x00, 0x28, 0x02, 0x10, 0x22, 0x05, 0x20, 0x04, 0x28, 0x02, 0x08, 0x22, 0x06, 0x28, 0x02, + 0x08, 0x4d, 0x04, 0x40, 0x20, 0x06, 0x20, 0x05, 0x36, 0x02, 0x08, 0x0b, 0x20, 0x03, 0x28, 0x02, + 0x00, 0x22, 0x05, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x20, 0x05, 0x48, 0x0d, 0x00, 0x20, 0x03, 0x20, + 0x06, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0x20, 0x07, 0xa7, 0x41, 0x7f, 0x73, + 0x41, 0x01, 0x71, 0x20, 0x07, 0x42, 0x20, 0x88, 0xa7, 0x41, 0x00, 0x10, 0x47, 0x20, 0x04, 0x41, + 0x20, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0x2d, 0x01, 0x01, 0x7f, 0x20, 0x01, 0x28, 0x02, + 0x00, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x41, 0x00, 0x4c, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x01, 0x20, + 0x02, 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x01, 0x41, + 0x04, 0x6a, 0x36, 0x02, 0x00, 0x0b, 0xdb, 0x0d, 0x02, 0x0f, 0x7f, 0x02, 0x7e, 0x23, 0x00, 0x41, + 0x80, 0x01, 0x6b, 0x22, 0x06, 0x24, 0x00, 0x20, 0x03, 0x20, 0x04, 0x10, 0x43, 0x21, 0x0b, 0x02, + 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x14, 0x45, 0x04, + 0x40, 0x20, 0x00, 0x41, 0x7f, 0x36, 0x02, 0x14, 0x20, 0x06, 0x41, 0xc8, 0x00, 0x6a, 0x20, 0x02, + 0x41, 0x00, 0x10, 0x13, 0x20, 0x06, 0x28, 0x02, 0x4c, 0x21, 0x0d, 0x20, 0x06, 0x28, 0x02, 0x48, + 0x20, 0x01, 0x20, 0x02, 0x10, 0x4c, 0x21, 0x09, 0x20, 0x06, 0x20, 0x02, 0x36, 0x02, 0x68, 0x20, + 0x06, 0x20, 0x0d, 0x36, 0x02, 0x64, 0x20, 0x06, 0x20, 0x09, 0x36, 0x02, 0x60, 0x02, 0x40, 0x20, + 0x00, 0x41, 0x1c, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x04, 0x40, 0x20, 0x00, 0x28, 0x02, 0x18, + 0x21, 0x07, 0x0c, 0x01, 0x0b, 0x20, 0x00, 0x10, 0x10, 0x22, 0x03, 0x36, 0x02, 0x1c, 0x20, 0x00, + 0x41, 0x00, 0x36, 0x02, 0x18, 0x0b, 0x02, 0x40, 0x03, 0x40, 0x20, 0x03, 0x2f, 0x01, 0xe2, 0x01, + 0x21, 0x01, 0x20, 0x06, 0x41, 0x00, 0x36, 0x02, 0x78, 0x20, 0x06, 0x20, 0x03, 0x41, 0x04, 0x6a, + 0x22, 0x04, 0x36, 0x02, 0x70, 0x20, 0x06, 0x20, 0x04, 0x20, 0x01, 0x41, 0x0c, 0x6c, 0x6a, 0x36, + 0x02, 0x74, 0x02, 0x40, 0x03, 0x40, 0x20, 0x06, 0x41, 0x40, 0x6b, 0x20, 0x06, 0x41, 0xf0, 0x00, + 0x6a, 0x10, 0x06, 0x20, 0x06, 0x28, 0x02, 0x44, 0x22, 0x0a, 0x45, 0x0d, 0x01, 0x20, 0x06, 0x28, + 0x02, 0x40, 0x21, 0x04, 0x02, 0x40, 0x20, 0x09, 0x20, 0x02, 0x20, 0x0a, 0x28, 0x02, 0x00, 0x20, + 0x0a, 0x28, 0x02, 0x08, 0x10, 0x35, 0x41, 0x18, 0x74, 0x41, 0x18, 0x75, 0x0e, 0x02, 0x04, 0x01, + 0x00, 0x0b, 0x0b, 0x20, 0x04, 0x21, 0x01, 0x0b, 0x20, 0x07, 0x04, 0x40, 0x20, 0x06, 0x20, 0x01, + 0x36, 0x02, 0x78, 0x20, 0x06, 0x20, 0x03, 0x36, 0x02, 0x74, 0x20, 0x06, 0x20, 0x07, 0x36, 0x02, + 0x70, 0x20, 0x06, 0x41, 0x38, 0x6a, 0x20, 0x06, 0x41, 0xf0, 0x00, 0x6a, 0x10, 0x0d, 0x20, 0x06, + 0x28, 0x02, 0x3c, 0x21, 0x03, 0x20, 0x06, 0x28, 0x02, 0x38, 0x21, 0x07, 0x0c, 0x01, 0x0b, 0x0b, + 0x20, 0x06, 0x41, 0x00, 0x36, 0x02, 0x50, 0x20, 0x06, 0x20, 0x03, 0xad, 0x20, 0x01, 0xad, 0x42, + 0x20, 0x86, 0x84, 0x37, 0x02, 0x54, 0x02, 0x40, 0x20, 0x03, 0x2f, 0x01, 0xe2, 0x01, 0x41, 0x0b, + 0x4f, 0x04, 0x40, 0x20, 0x06, 0x41, 0xf0, 0x00, 0x6a, 0x20, 0x01, 0x10, 0x19, 0x20, 0x06, 0x41, + 0xf8, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x11, 0x20, 0x06, 0x28, 0x02, 0x74, 0x21, 0x12, 0x20, + 0x06, 0x28, 0x02, 0x70, 0x21, 0x04, 0x10, 0x10, 0x21, 0x0a, 0x20, 0x03, 0x2f, 0x01, 0xe2, 0x01, + 0x22, 0x0c, 0x20, 0x04, 0x6b, 0x22, 0x01, 0x20, 0x0c, 0x4b, 0x0d, 0x08, 0x20, 0x01, 0x20, 0x01, + 0x41, 0x01, 0x6b, 0x22, 0x01, 0x49, 0x0d, 0x08, 0x20, 0x0a, 0x20, 0x01, 0x3b, 0x01, 0xe2, 0x01, + 0x20, 0x04, 0x41, 0x01, 0x6a, 0x22, 0x07, 0x20, 0x04, 0x49, 0x0d, 0x08, 0x20, 0x0c, 0x20, 0x0c, + 0x20, 0x07, 0x6b, 0x22, 0x0e, 0x49, 0x0d, 0x08, 0x20, 0x03, 0x20, 0x04, 0x41, 0x03, 0x74, 0x6a, + 0x22, 0x0f, 0x41, 0x88, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x0c, 0x20, 0x0f, 0x41, 0x8c, 0x01, + 0x6a, 0x2d, 0x00, 0x00, 0x20, 0x03, 0x20, 0x04, 0x41, 0x0c, 0x6c, 0x6a, 0x22, 0x08, 0x41, 0x04, + 0x6a, 0x28, 0x02, 0x00, 0x21, 0x0f, 0x20, 0x08, 0x41, 0x08, 0x6a, 0x29, 0x02, 0x00, 0x21, 0x15, + 0x20, 0x06, 0x41, 0x30, 0x6a, 0x21, 0x08, 0x20, 0x0a, 0x41, 0x04, 0x6a, 0x21, 0x10, 0x20, 0x01, + 0x41, 0x0c, 0x4f, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x08, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x08, + 0x20, 0x10, 0x36, 0x02, 0x00, 0x20, 0x0e, 0x20, 0x06, 0x28, 0x02, 0x34, 0x47, 0x0d, 0x08, 0x20, + 0x06, 0x28, 0x02, 0x30, 0x20, 0x03, 0x20, 0x07, 0x41, 0x0c, 0x6c, 0x6a, 0x41, 0x04, 0x6a, 0x20, + 0x0e, 0x41, 0x0c, 0x6c, 0x10, 0x4c, 0x1a, 0x20, 0x06, 0x41, 0x28, 0x6a, 0x21, 0x08, 0x20, 0x0a, + 0x41, 0x88, 0x01, 0x6a, 0x21, 0x10, 0x20, 0x01, 0x41, 0x0c, 0x4f, 0x04, 0x40, 0x00, 0x0b, 0x20, + 0x08, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x08, 0x20, 0x10, 0x36, 0x02, 0x00, 0x20, 0x0e, 0x20, + 0x06, 0x28, 0x02, 0x2c, 0x47, 0x0d, 0x08, 0x20, 0x06, 0x28, 0x02, 0x28, 0x20, 0x03, 0x20, 0x07, + 0x41, 0x03, 0x74, 0x6a, 0x41, 0x88, 0x01, 0x6a, 0x20, 0x0e, 0x41, 0x03, 0x74, 0x10, 0x4c, 0x1a, + 0x20, 0x03, 0x20, 0x04, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x06, 0x20, 0x11, 0x36, 0x02, 0x68, 0x20, + 0x06, 0x20, 0x0a, 0x20, 0x03, 0x20, 0x12, 0x1b, 0x36, 0x02, 0x64, 0x41, 0x00, 0x21, 0x01, 0x20, + 0x06, 0x41, 0x00, 0x36, 0x02, 0x60, 0x20, 0x06, 0x20, 0x02, 0x36, 0x02, 0x78, 0x20, 0x06, 0x20, + 0x0d, 0x36, 0x02, 0x74, 0x20, 0x06, 0x20, 0x09, 0x36, 0x02, 0x70, 0x20, 0x06, 0x41, 0xe0, 0x00, + 0x6a, 0x20, 0x06, 0x41, 0xf0, 0x00, 0x6a, 0x20, 0x0b, 0x20, 0x05, 0x10, 0x0e, 0x41, 0x01, 0x71, + 0x21, 0x07, 0x41, 0x00, 0x21, 0x02, 0x03, 0x40, 0x20, 0x03, 0x28, 0x02, 0x00, 0x22, 0x04, 0x45, + 0x0d, 0x02, 0x20, 0x01, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x4b, 0x0d, 0x09, 0x20, 0x06, + 0x20, 0x03, 0x2f, 0x01, 0xe0, 0x01, 0x22, 0x03, 0x36, 0x02, 0x58, 0x20, 0x06, 0x20, 0x04, 0x36, + 0x02, 0x54, 0x20, 0x06, 0x20, 0x01, 0x36, 0x02, 0x50, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x20, 0x02, + 0x47, 0x0d, 0x09, 0x20, 0x07, 0x41, 0x01, 0x71, 0x21, 0x0d, 0x20, 0x04, 0x2f, 0x01, 0xe2, 0x01, + 0x41, 0x0b, 0x49, 0x0d, 0x06, 0x20, 0x06, 0x41, 0xf0, 0x00, 0x6a, 0x20, 0x03, 0x10, 0x19, 0x20, + 0x06, 0x28, 0x02, 0x78, 0x21, 0x11, 0x20, 0x06, 0x28, 0x02, 0x74, 0x21, 0x12, 0x20, 0x06, 0x28, + 0x02, 0x70, 0x21, 0x03, 0x20, 0x04, 0x2f, 0x01, 0xe2, 0x01, 0x10, 0x12, 0x21, 0x05, 0x20, 0x04, + 0x2f, 0x01, 0xe2, 0x01, 0x22, 0x09, 0x20, 0x03, 0x6b, 0x22, 0x02, 0x20, 0x09, 0x4b, 0x0d, 0x09, + 0x20, 0x02, 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x02, 0x49, 0x0d, 0x09, 0x20, 0x05, 0x20, 0x02, + 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x22, 0x07, 0x20, 0x03, 0x49, 0x0d, 0x09, + 0x20, 0x09, 0x20, 0x09, 0x20, 0x07, 0x6b, 0x22, 0x0b, 0x49, 0x0d, 0x09, 0x20, 0x04, 0x20, 0x03, + 0x41, 0x0c, 0x6c, 0x6a, 0x22, 0x09, 0x41, 0x08, 0x6a, 0x29, 0x02, 0x00, 0x21, 0x16, 0x20, 0x09, + 0x41, 0x04, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x09, 0x20, 0x04, 0x20, 0x03, 0x41, 0x03, 0x74, 0x6a, + 0x22, 0x08, 0x41, 0x88, 0x01, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x0e, 0x20, 0x08, 0x41, 0x8c, 0x01, + 0x6a, 0x2d, 0x00, 0x00, 0x21, 0x10, 0x20, 0x06, 0x41, 0x20, 0x6a, 0x21, 0x08, 0x20, 0x05, 0x41, + 0x04, 0x6a, 0x21, 0x14, 0x20, 0x02, 0x41, 0x0c, 0x4f, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x08, 0x20, + 0x02, 0x36, 0x02, 0x04, 0x20, 0x08, 0x20, 0x14, 0x36, 0x02, 0x00, 0x20, 0x0b, 0x20, 0x06, 0x28, + 0x02, 0x24, 0x47, 0x0d, 0x09, 0x20, 0x06, 0x28, 0x02, 0x20, 0x20, 0x04, 0x20, 0x07, 0x41, 0x0c, + 0x6c, 0x6a, 0x41, 0x04, 0x6a, 0x20, 0x0b, 0x41, 0x0c, 0x6c, 0x10, 0x4c, 0x1a, 0x20, 0x06, 0x41, + 0x18, 0x6a, 0x21, 0x08, 0x20, 0x05, 0x41, 0x88, 0x01, 0x6a, 0x21, 0x14, 0x20, 0x02, 0x41, 0x0c, + 0x4f, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x08, 0x20, 0x02, 0x36, 0x02, 0x04, 0x20, 0x08, 0x20, 0x14, + 0x36, 0x02, 0x00, 0x20, 0x0b, 0x20, 0x06, 0x28, 0x02, 0x1c, 0x47, 0x0d, 0x09, 0x20, 0x06, 0x28, + 0x02, 0x18, 0x20, 0x04, 0x20, 0x07, 0x41, 0x03, 0x74, 0x6a, 0x41, 0x88, 0x01, 0x6a, 0x20, 0x0b, + 0x41, 0x03, 0x74, 0x10, 0x4c, 0x1a, 0x20, 0x04, 0x20, 0x03, 0x3b, 0x01, 0xe2, 0x01, 0x41, 0x01, + 0x6a, 0x22, 0x03, 0x20, 0x07, 0x6b, 0x22, 0x02, 0x20, 0x03, 0x4b, 0x0d, 0x09, 0x20, 0x05, 0x2f, + 0x01, 0xe2, 0x01, 0x22, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x0b, 0x20, 0x03, 0x41, 0x0c, 0x4f, 0x0d, + 0x05, 0x20, 0x02, 0x20, 0x0b, 0x47, 0x0d, 0x09, 0x20, 0x05, 0x41, 0xe4, 0x01, 0x6a, 0x20, 0x04, + 0x20, 0x07, 0x41, 0x02, 0x74, 0x6a, 0x41, 0xe4, 0x01, 0x6a, 0x20, 0x02, 0x41, 0x02, 0x74, 0x10, + 0x4c, 0x1a, 0x20, 0x06, 0x41, 0x10, 0x6a, 0x20, 0x05, 0x20, 0x01, 0x10, 0x07, 0x20, 0x06, 0x28, + 0x02, 0x14, 0x21, 0x05, 0x20, 0x06, 0x28, 0x02, 0x10, 0x21, 0x02, 0x20, 0x01, 0x21, 0x03, 0x20, + 0x10, 0x41, 0x01, 0x71, 0x21, 0x07, 0x20, 0x06, 0x20, 0x11, 0x36, 0x02, 0x68, 0x20, 0x06, 0x20, + 0x12, 0x04, 0x7f, 0x20, 0x02, 0x21, 0x03, 0x20, 0x05, 0x05, 0x20, 0x04, 0x0b, 0x36, 0x02, 0x64, + 0x20, 0x06, 0x20, 0x03, 0x36, 0x02, 0x60, 0x20, 0x06, 0x20, 0x15, 0x37, 0x02, 0x74, 0x20, 0x06, + 0x20, 0x0f, 0x36, 0x02, 0x70, 0x20, 0x06, 0x41, 0xe0, 0x00, 0x6a, 0x20, 0x06, 0x41, 0xf0, 0x00, + 0x6a, 0x20, 0x0c, 0x20, 0x0d, 0x20, 0x0a, 0x10, 0x0f, 0x20, 0x09, 0x21, 0x0f, 0x20, 0x16, 0x21, + 0x15, 0x20, 0x05, 0x21, 0x0a, 0x20, 0x0e, 0x21, 0x0c, 0x20, 0x04, 0x21, 0x03, 0x0c, 0x00, 0x0b, + 0x00, 0x0b, 0x20, 0x06, 0x20, 0x02, 0x36, 0x02, 0x78, 0x20, 0x06, 0x20, 0x0d, 0x36, 0x02, 0x74, + 0x20, 0x06, 0x20, 0x09, 0x36, 0x02, 0x70, 0x20, 0x06, 0x41, 0xd0, 0x00, 0x6a, 0x20, 0x06, 0x41, + 0xf0, 0x00, 0x6a, 0x20, 0x0b, 0x20, 0x05, 0x10, 0x0e, 0x0c, 0x05, 0x0b, 0x20, 0x00, 0x41, 0x1c, + 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x06, 0x20, 0x00, 0x28, 0x02, 0x18, 0x21, 0x01, + 0x10, 0x12, 0x22, 0x04, 0x20, 0x03, 0x36, 0x02, 0xe4, 0x01, 0x20, 0x01, 0x20, 0x01, 0x41, 0x01, + 0x6a, 0x22, 0x03, 0x4b, 0x0d, 0x06, 0x20, 0x06, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x20, 0x03, 0x10, + 0x07, 0x20, 0x06, 0x28, 0x02, 0x08, 0x21, 0x03, 0x20, 0x00, 0x20, 0x06, 0x28, 0x02, 0x0c, 0x22, + 0x01, 0x36, 0x02, 0x1c, 0x20, 0x00, 0x20, 0x03, 0x36, 0x02, 0x18, 0x20, 0x03, 0x41, 0x01, 0x6b, + 0x22, 0x04, 0x20, 0x03, 0x4b, 0x0d, 0x06, 0x20, 0x02, 0x20, 0x04, 0x47, 0x0d, 0x06, 0x20, 0x01, + 0x2f, 0x01, 0xe2, 0x01, 0x22, 0x02, 0x41, 0x0a, 0x4b, 0x0d, 0x06, 0x20, 0x01, 0x20, 0x02, 0x41, + 0x01, 0x6a, 0x22, 0x04, 0x3b, 0x01, 0xe2, 0x01, 0x20, 0x01, 0x20, 0x02, 0x41, 0x0c, 0x6c, 0x6a, + 0x22, 0x05, 0x41, 0x08, 0x6a, 0x20, 0x15, 0x37, 0x02, 0x00, 0x20, 0x05, 0x41, 0x04, 0x6a, 0x20, + 0x0f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x02, 0x41, 0x03, 0x74, 0x6a, 0x22, 0x02, 0x41, 0x8c, + 0x01, 0x6a, 0x20, 0x07, 0x41, 0x01, 0x71, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x88, 0x01, 0x6a, + 0x20, 0x0c, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, 0x04, 0x41, 0x02, 0x74, 0x6a, 0x41, 0xe4, 0x01, + 0x6a, 0x20, 0x0a, 0x36, 0x02, 0x00, 0x20, 0x06, 0x20, 0x04, 0x36, 0x02, 0x78, 0x20, 0x06, 0x20, + 0x01, 0x36, 0x02, 0x74, 0x20, 0x06, 0x20, 0x03, 0x36, 0x02, 0x70, 0x20, 0x06, 0x41, 0xf0, 0x00, + 0x6a, 0x10, 0x08, 0x0c, 0x04, 0x0b, 0x20, 0x06, 0x41, 0xe0, 0x00, 0x6a, 0x10, 0x18, 0x20, 0x03, + 0x20, 0x04, 0x41, 0x03, 0x74, 0x6a, 0x22, 0x01, 0x41, 0x8c, 0x01, 0x6a, 0x20, 0x05, 0x3a, 0x00, + 0x00, 0x20, 0x01, 0x41, 0x88, 0x01, 0x6a, 0x22, 0x01, 0x28, 0x02, 0x00, 0x20, 0x01, 0x20, 0x0b, + 0x36, 0x02, 0x00, 0x41, 0x08, 0x10, 0x0a, 0x0c, 0x04, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x06, + 0x20, 0x15, 0x37, 0x02, 0x74, 0x20, 0x06, 0x20, 0x0f, 0x36, 0x02, 0x70, 0x20, 0x06, 0x41, 0xd0, + 0x00, 0x6a, 0x20, 0x06, 0x41, 0xf0, 0x00, 0x6a, 0x20, 0x0c, 0x20, 0x0d, 0x20, 0x0a, 0x10, 0x0f, + 0x0b, 0x20, 0x00, 0x41, 0x20, 0x6a, 0x22, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x01, 0x6a, + 0x22, 0x03, 0x20, 0x02, 0x49, 0x0d, 0x01, 0x20, 0x01, 0x20, 0x03, 0x36, 0x02, 0x00, 0x0b, 0x20, + 0x00, 0x28, 0x02, 0x14, 0x22, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x02, 0x20, 0x01, 0x48, 0x0d, 0x00, + 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x14, 0x20, 0x06, 0x41, 0x80, 0x01, 0x6a, 0x24, 0x00, 0x0f, + 0x0b, 0x00, 0x0b, 0xba, 0x01, 0x02, 0x05, 0x7f, 0x01, 0x7e, 0x23, 0x00, 0x41, 0x10, 0x6b, 0x22, + 0x01, 0x24, 0x00, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x22, 0x02, 0x10, + 0x46, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x22, 0x03, 0x28, 0x02, 0x00, 0x22, 0x04, 0x41, + 0x01, 0x6b, 0x22, 0x05, 0x20, 0x04, 0x4e, 0x0d, 0x00, 0x20, 0x01, 0x28, 0x02, 0x08, 0x2d, 0x00, + 0x04, 0x20, 0x03, 0x20, 0x05, 0x36, 0x02, 0x00, 0x41, 0x02, 0x46, 0x04, 0x40, 0x20, 0x00, 0x28, + 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x10, 0x41, 0x21, 0x06, 0x20, 0x02, 0x22, 0x00, 0x28, + 0x02, 0x00, 0x04, 0x40, 0x00, 0x0b, 0x20, 0x00, 0x41, 0x7f, 0x36, 0x02, 0x00, 0x20, 0x01, 0x20, + 0x00, 0x36, 0x02, 0x04, 0x20, 0x01, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x36, 0x02, 0x00, 0x20, 0x01, + 0x28, 0x02, 0x04, 0x21, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, 0x20, 0x06, 0xa7, 0x41, 0x7f, 0x73, + 0x41, 0x01, 0x71, 0x20, 0x06, 0x42, 0x20, 0x88, 0xa7, 0x10, 0x39, 0x20, 0x00, 0x28, 0x02, 0x00, + 0x22, 0x02, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x20, 0x02, 0x48, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x03, + 0x36, 0x02, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x10, 0x6a, 0x24, 0x00, 0x0f, 0x0b, 0x00, 0x0b, 0xd2, + 0x01, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, 0x01, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x71, 0x20, + 0x01, 0x47, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x02, 0x41, 0x40, 0x6b, 0x22, 0x03, 0x4b, 0x0d, 0x00, + 0x20, 0x03, 0x41, 0xff, 0xff, 0xff, 0xff, 0x01, 0x71, 0x20, 0x03, 0x47, 0x0d, 0x00, 0x20, 0x01, + 0x41, 0x02, 0x74, 0x22, 0x01, 0x20, 0x03, 0x41, 0x03, 0x74, 0x22, 0x02, 0x20, 0x01, 0x20, 0x02, + 0x4b, 0x1b, 0x22, 0x02, 0x41, 0x08, 0x6a, 0x22, 0x01, 0x20, 0x02, 0x49, 0x0d, 0x00, 0x02, 0x7f, + 0x02, 0x40, 0x20, 0x01, 0x20, 0x01, 0x41, 0x80, 0x80, 0x04, 0x6a, 0x22, 0x02, 0x4d, 0x04, 0x40, + 0x20, 0x02, 0x41, 0x01, 0x6b, 0x22, 0x01, 0x20, 0x02, 0x4d, 0x0d, 0x01, 0x0b, 0x00, 0x0b, 0x20, + 0x01, 0x41, 0x10, 0x76, 0x22, 0x02, 0x40, 0x00, 0x22, 0x01, 0x41, 0x7f, 0x46, 0x04, 0x40, 0x41, + 0x00, 0x21, 0x01, 0x41, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x41, 0xff, 0xff, 0x03, 0x71, 0x20, + 0x01, 0x47, 0x0d, 0x01, 0x20, 0x02, 0x41, 0x10, 0x74, 0x22, 0x02, 0x41, 0x08, 0x6b, 0x20, 0x02, + 0x4b, 0x0d, 0x01, 0x20, 0x01, 0x41, 0x10, 0x74, 0x22, 0x01, 0x42, 0x00, 0x37, 0x02, 0x04, 0x20, + 0x01, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x41, 0x02, 0x72, 0x36, 0x02, 0x00, 0x41, 0x00, 0x0b, 0x21, + 0x02, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x02, 0x36, 0x02, 0x00, 0x0f, + 0x0b, 0x00, 0x0b, 0xaf, 0x04, 0x01, 0x0a, 0x7f, 0x20, 0x00, 0x41, 0x02, 0x74, 0x21, 0x06, 0x41, + 0x00, 0x20, 0x01, 0x6b, 0x21, 0x08, 0x20, 0x00, 0x41, 0xff, 0xff, 0xff, 0xff, 0x03, 0x71, 0x20, + 0x00, 0x47, 0x21, 0x09, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x22, 0x0a, 0x20, 0x01, 0x4b, 0x21, 0x0b, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x21, 0x00, 0x02, 0x40, 0x03, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x01, + 0x20, 0x00, 0x21, 0x01, 0x02, 0x40, 0x03, 0x40, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x08, 0x22, + 0x00, 0x41, 0x01, 0x71, 0x45, 0x04, 0x40, 0x20, 0x09, 0x0d, 0x03, 0x20, 0x01, 0x28, 0x02, 0x00, + 0x41, 0x7c, 0x71, 0x22, 0x03, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x22, 0x05, 0x6b, 0x22, 0x04, 0x20, + 0x03, 0x4b, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x06, 0x49, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x06, 0x6b, + 0x22, 0x0c, 0x20, 0x03, 0x4b, 0x0d, 0x03, 0x20, 0x0b, 0x0d, 0x03, 0x20, 0x05, 0x41, 0x08, 0x6a, + 0x22, 0x04, 0x20, 0x05, 0x49, 0x0d, 0x03, 0x20, 0x04, 0x20, 0x04, 0x41, 0x40, 0x6b, 0x22, 0x04, + 0x4b, 0x0d, 0x03, 0x02, 0x40, 0x20, 0x04, 0x20, 0x08, 0x20, 0x0c, 0x71, 0x22, 0x04, 0x4b, 0x04, + 0x40, 0x20, 0x05, 0x20, 0x0a, 0x71, 0x0d, 0x03, 0x20, 0x02, 0x20, 0x00, 0x41, 0x7c, 0x71, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, 0x01, 0x72, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x21, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x04, 0x41, 0x08, 0x6b, 0x22, 0x00, 0x20, 0x04, 0x4b, + 0x0d, 0x04, 0x20, 0x03, 0x20, 0x00, 0x6b, 0x22, 0x02, 0x20, 0x03, 0x4b, 0x0d, 0x04, 0x20, 0x02, + 0x41, 0x08, 0x6b, 0x20, 0x02, 0x4b, 0x0d, 0x04, 0x20, 0x00, 0x41, 0x00, 0x36, 0x02, 0x08, 0x20, + 0x00, 0x42, 0x00, 0x37, 0x02, 0x00, 0x20, 0x00, 0x20, 0x01, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, + 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x7c, 0x71, 0x22, + 0x03, 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, 0x03, 0x20, 0x02, 0x41, 0x02, 0x71, 0x1b, 0x22, 0x02, + 0x45, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x02, 0x28, 0x02, 0x04, 0x41, 0x03, 0x71, 0x20, 0x00, 0x72, + 0x36, 0x02, 0x04, 0x0b, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, 0x41, 0x03, 0x71, 0x20, 0x01, + 0x72, 0x36, 0x02, 0x04, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x08, 0x41, 0x7e, 0x71, 0x36, 0x02, + 0x08, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x00, 0x22, 0x02, 0x41, 0x03, 0x71, 0x20, 0x00, 0x72, + 0x22, 0x03, 0x36, 0x02, 0x00, 0x02, 0x40, 0x20, 0x02, 0x41, 0x02, 0x71, 0x45, 0x04, 0x40, 0x20, + 0x00, 0x28, 0x02, 0x00, 0x21, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x20, 0x03, 0x41, 0x7d, 0x71, + 0x36, 0x02, 0x00, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, 0x22, 0x01, 0x36, + 0x02, 0x00, 0x0b, 0x20, 0x00, 0x20, 0x01, 0x41, 0x01, 0x72, 0x36, 0x02, 0x00, 0x0b, 0x20, 0x00, + 0x41, 0x08, 0x6a, 0x21, 0x07, 0x0c, 0x05, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x41, 0x7e, 0x71, 0x36, + 0x02, 0x08, 0x02, 0x7f, 0x41, 0x00, 0x20, 0x01, 0x28, 0x02, 0x04, 0x41, 0x7c, 0x71, 0x22, 0x00, + 0x45, 0x0d, 0x00, 0x1a, 0x41, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x41, 0x01, 0x71, + 0x1b, 0x0b, 0x21, 0x00, 0x20, 0x01, 0x10, 0x4b, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x71, + 0x04, 0x40, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x02, 0x72, 0x36, 0x02, 0x00, 0x0b, + 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x7c, 0x71, 0x22, + 0x01, 0x20, 0x00, 0x6b, 0x41, 0x08, 0x6b, 0x20, 0x01, 0x4b, 0x0d, 0x02, 0x20, 0x00, 0x21, 0x01, + 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x02, 0x20, 0x00, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x0b, 0x00, + 0x0b, 0x20, 0x07, 0x0b, 0x7d, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x28, 0x02, 0x00, 0x22, + 0x01, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x45, 0x0d, 0x00, 0x41, 0x00, 0x20, 0x02, 0x20, 0x01, 0x41, + 0x02, 0x71, 0x1b, 0x22, 0x01, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x20, 0x01, 0x28, 0x02, 0x04, 0x41, + 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, 0x04, 0x41, 0x7c, 0x71, 0x72, 0x36, 0x02, 0x04, 0x0b, 0x20, + 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, 0x22, 0x01, 0x41, 0x7c, 0x71, 0x22, 0x02, 0x04, 0x7f, 0x20, + 0x02, 0x20, 0x02, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x7c, + 0x71, 0x72, 0x36, 0x02, 0x00, 0x20, 0x00, 0x28, 0x02, 0x04, 0x05, 0x20, 0x01, 0x0b, 0x41, 0x03, + 0x71, 0x36, 0x02, 0x04, 0x20, 0x00, 0x20, 0x00, 0x28, 0x02, 0x00, 0x41, 0x03, 0x71, 0x36, 0x02, + 0x00, 0x0b, 0x2b, 0x01, 0x01, 0x7f, 0x03, 0x40, 0x20, 0x02, 0x20, 0x03, 0x46, 0x45, 0x04, 0x40, + 0x20, 0x00, 0x20, 0x03, 0x6a, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0x6a, 0x00, + 0x02, 0x40, 0x20, 0x02, 0x20, 0x00, 0x20, 0x01, 0x6b, 0x4d, 0x04, 0x40, 0x03, 0x40, 0x20, 0x02, + 0x45, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, + 0x01, 0x6b, 0x21, 0x02, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6a, + 0x21, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x20, 0x01, 0x41, 0x01, 0x6b, 0x21, 0x01, 0x20, 0x00, + 0x41, 0x01, 0x6b, 0x21, 0x00, 0x03, 0x40, 0x20, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x02, + 0x6a, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x01, + 0x6b, 0x21, 0x02, 0x0c, 0x00, 0x0b, 0x00, 0x0b, 0x0b, 0x22, 0x01, 0x01, 0x7f, 0x03, 0x40, 0x20, + 0x01, 0x20, 0x02, 0x47, 0x04, 0x40, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x41, 0x00, 0x3a, 0x00, 0x00, + 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x3f, 0x01, 0x02, 0x7f, + 0x03, 0x40, 0x20, 0x02, 0x45, 0x04, 0x40, 0x41, 0x00, 0x0f, 0x0b, 0x20, 0x02, 0x41, 0x01, 0x6b, + 0x21, 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x03, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x21, 0x04, + 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x03, + 0x20, 0x04, 0x46, 0x0d, 0x00, 0x0b, 0x20, 0x04, 0x20, 0x03, 0x6b, 0x0b, 0x0b, 0xd7, 0x02, 0x03, + 0x00, 0x41, 0x80, 0x80, 0xc0, 0x00, 0x0b, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x41, 0xc2, 0x81, 0xc0, 0x00, 0x0b, + 0x33, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x00, 0x41, 0x80, 0x82, 0xc0, 0x00, 0x0b, 0x89, 0x01, 0x75, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x3a, 0x20, 0x69, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x60, 0x60, 0x3a, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x61, 0x6c, 0x69, 0x63, 0x65, 0x62, 0x6f, + 0x62, 0x63, 0x68, 0x61, 0x72, 0x6c, 0x69, 0x65, 0x64, 0x61, 0x76, 0x69, 0x64, 0x66, 0x72, 0x6f, + 0x6d, 0x74, 0x6f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x63, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x61, 0x64, + 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74}; +constexpr unsigned int transfer_wasm_len = 17073; diff --git a/bcos-executor/test/liquid/transfer.rs b/bcos-executor/test/liquid/transfer.rs new file mode 100644 index 0000000..331b0a6 --- /dev/null +++ b/bcos-executor/test/liquid/transfer.rs @@ -0,0 +1,39 @@ +#![cfg_attr(not(feature = "std"), no_std)] + +use liquid::storage; +use liquid_lang as liquid; + +#[liquid::contract] +mod transfer { + use super::*; + + #[liquid(storage)] + struct Transfer { + accounts: storage::Mapping, + } + + #[liquid(methods)] + impl Transfer { + pub fn new(&mut self) { + self.accounts.initialize(); + self.accounts.insert(String::from("alice"), u32::MAX); + self.accounts.insert(String::from("bob"), 0); + self.accounts.insert(String::from("charlie"), u32::MAX); + self.accounts.insert(String::from("david"), 0); + } + + pub fn transfer(&mut self, from: String ,to: String, amount: u32) -> bool { + if self.accounts[&from] < amount { + false + } else { + self.accounts[&from] -= amount; + self.accounts[&to] += amount; + true + } + } + + pub fn query(&self, name: String) -> u32 { + self.accounts[&name] + } + } +} \ No newline at end of file diff --git a/bcos-executor/test/liquid/transfer.wasm b/bcos-executor/test/liquid/transfer.wasm new file mode 100644 index 0000000000000000000000000000000000000000..5c66724c0f210b2f274a7973588b51acb6d8b6b4 GIT binary patch literal 17073 zcmdU%ZH!$ypXi+otE=v0v8rER-}%*(B@H|| zZt1{pLk((Cw^4`s?UN^)_IA~UVY7Vrkqei%e(?0ldl%21y=QS{@%?8$eA+dvxiiu1 zf;BZCJ#+rd<;R?}r)fI8f91mR;s;N=BDY-LXeslE<m%D)hTpKi3Lybqz>Y=(|+^0pg%5x5o&er{?`L0ei|yY4!z z+so#;)8{TMe<--A#}+R?_PZ+|x_H{{Z=O1R@$7{Uxw-P(;+gaAH>RIi^Y{IhFIK~R z^s~VYf-dFZaz43!==x6dF{JL&{^0bYJt&f28kDg(Q8FNw`$L;ft`l7h`$Ng4pljzZ zA!79{F2&)X*vZH{{11GeQOO;2+hd_|+w``oH*jV6FL~j6vg8%}4yWX8(V5ys9OE!D8R0&;S%K%}^08JT} zcDl~*jB)nh>_A}pzwdv|XSUD)GX@|U>t)q+vdhd?!kOBtyYmIq=`Cl-BJppj5BWY*}8_X7CB zf;`#1J!XNBlEE{Bz~dM`GYfi~;bI|Lnfx;B5Kw8Qv8$#_vUHu!dGDpgAu}}`0~!jt zkl6wT1NaQuf>htb?9@HGq^a!c`K^wdF6$Y*i&`nA45pdzg2}}7hbN|M#Cp2M>rdB6 z#Y&z|SI^UEI-Z%XJm^Lyq$%Ew#$-W36qZy=#!L*P5g|G$CWVzHG$UI~sgY;V2+Xe< z4oayqeXt#A@xYlWVis9x$7Tj3Q)d(TQf!KgJ~m=m!H@Ke2VI^*EUK=iz6*l}MkTxX zV(^W6w&teUS~go7aAqRo*_z|oS}1I6YqlxiH<_(vv+2oZL!^xw8561Qv3K1=I3^kk zF&zyV4j8h4j2jxkljPkJV+QDrm=xPEUDpP`Vtp$=t4}t(R-7`@&~yk63p0I8LWbjt zc{Lnis%C7-RGZQK0HjDSWy|P$vvx2|V~s@7M^AuX-867!ig44}6kMg+uG2Q2SGVS_ zp9`drr%#%TdT&+*_YDu6O+v_vo#cY&()kJi^zHa9$9Q$ z+JkbKy)6+BUnFBEm9XSQ_c%2E%45)xWS(to*@L?RZy=CoNtoQXNkPoBS7KO@XmCX4 z0bo$|Mw4suhXD&`cLmX^eo7l;J4VKC=G43fz>&I2r_UcTzNFJ)mtQ9f9{dL`^UG zM{&b077;NEIX|pj8ik@Llb3?%?`rTZF?Wjp#>@p$2|>o*mPK5#w;+%j1FQ+U6jK2% zm@ohXQy$JeY>(6G+KkhBjiAJ>W`5lq(q4CMjwA#dOfGFOY}#G3mQWLTwS>4uLWZoQ z(&|rl@pm^$MI4SGD5*>j(FKzVE_PBXjW{KJYxPUXi+FE?PFOUNAY}JbM|kYS>CW4{ zf3ld5o&n4~?E6DLx_3DDi5Q+%W?+hqIWeg7$9O_XZ*T3b!h9v8DU5P+rRk~mU98#U zV#uR@Ek}!@0;E<3HVcL)2ZD!?Qz9l+dXbFNL4Iimc2}_qNjsKOS=|nY18zv8wh5xW zn+*|`Fj7a&G0NBKFttNVA)=~W z;Lec~x9r>CSYCzJ=CpgD&^*9A34+MNB?{yrQV zl!}m0Wv*4^Rc~S(u9Z-cbvsD6JF)D1k~Q*p#+)d@gebq2GYG}M>}xeYnXys~5k50fLd+SAQf(#x+pVhnIJLobymiUQ-rw7t1O_1$mk>^YG1tAwZ%9Xix6n*h z7(@^Xa?tg}HxZ35m7tkMmSm-dB3sg1ad8CP9l(9%6_QKFC4-?n^)+DJaEyX zafde;9#=mCVL3&Ki_!em+cXdHR+rMIvkB>B3p!g#8fF25wqB$<>ReT~BU8Pqwp$3- z^0YhX9*WOAH)xPEp%{cg@*F&0DwbF~$8y+jVVZ)|Q(4;U5vZWT8=D3#A+EX8U`UyJmP9=~5B)blX9U_@qTZ{c^ zyQ%st_(y+4*tNC!;T}i6Fx*nO;I}}wbUG-shC>d&-tFizZa&eIMj5*OFahXgq)pMx zxtxpr4Pm8Al-jyv$ps5RbUafBZN0Afu=KLaulEAg9C6)))MlFQp8?3UFtUXu{2EW4 zu9MfS`6InH$f*Yj9XOxREE&1F$6=^22CTd8^kzz!<3>tg$hxIb&GfI9U$)YlGlpG7 z?vO@g{TI{!8`EzhN+t`0OX(`_EPWc$TvK$FBI)!dN~dbLQ$p|cscqTN8wfli4h2O% zWjq+0Qm?Fc!Sp4_hXs2}d$~mNnA}mQnedP|-18dG-EG#Ib6p{_R-(>^7O4?*neWSS zI(D9Zx-Ur~0%miuJ7-Zq%Nn6v#OXPe7}YMbr(I?*)4{!JI{FY62~USCdB4M#7Txea zs#E$)3OD#=oGhW{cGffIgsxc7v}QOUHVmuVJ4Yv-JdN_k_$fx>>lLO2jCkC&HF08< zOfa5Y^3u^9;=(3C?In2n{yE+T-Ud|`Yyxgh`3pIWC{vB-=VhZ1ZB z2PJ(El(Kp|INWW)h#RUScUU;U8Crxgcep|g?k>ND?nTVpSU;Y9goA{u6y*(O^mMo&Wiq zti2tbG8@^Zd?#7KOW7cb0>W6FAX|sMOVyp7FBGiLa?&gAVKB8B!J0s@vb)5dwdb(E~4`hu;u-WWyWiZOiCY zS~J;TW@*S0Hq%xQw$kT_HmMS{wOM``o<<1PI3`33aruV;dK96FxNut!l!#Rstp#Do zN=cmQh^kCA>82Wc<=Kv6Dw$>}4$Bf-uQ9plm$VF>wEJx;g^^_1T167th7$#lX_M>h zMY4JiL-2wNGt~(zW+s;Qu{ffiV>4SjiM6Cg9G&TuTsnVH=DP4z73`!OC~Wl(F5e>v zyK1MQM)}|&bG7Nmj?#E~$t~^Dwu)wCgXIHr#YI|Ge|G67E|<9LcPn$nnkEG5fefOO zyL4$Mp?Lt4U2P|;(s__K*NK!$+s;C*w)GiLVwK=|^=>gzD>h6FZXV4^Pc|3)FseF& z7?MGxMG(1cKvdaP`Z}Q4!M280nnXQf3IY{$%XL6S&|xUh#pKWWrSvVighsW)2&&sw ztAq93cl5Tn@vR%b{jT1&ZhX5j_WQ2_Igf>NcQL`5&lx4R%8&j-{kIu39;^4{=DdJp zgq+LnN#`&-(n*oBFL!u>fp_wF)uV{2H|$1e)lpj5>OH!UA z5L6kR>13`&Qp{k|oV@@!NwIu&#DH3f%=lOPWvfMMz&7Klpl#yfc)vmKa^Q$~02o>8 zT@z7y{@d8AxHje6^5$z;Yz~IV5%^sUsyZzDxPKr%vf7{rJb9qs2=lO#H%AfJpqW*^ zp@oo@nDN=n=+pcV7H&2mT0}mV+JFFa5B<2z4~mfjpd>bDL8k=n%r7Oe9aQOn*&C7I z5R4LTX29$eE8_%3gvR^_v;q9{%>SMo@ed42n_qk{P4Q|2-f$0O=SHFg)_}-NuqvzY z1g7mav(VBex%&Wv2i+fb^J1S~m}1hm;6K|MD69^#*WLvSEi5H};I)G-=N5XXK4dVI z{)!J4@uZXwVIq+EAQvLe`=EBO!qtnIplwL+12Qb#E6&Dd?vLkDe=t)2*&F)r&LN8Y zV^qwLrSw%q$2$vxIJ(Yl&OXQ_icL5a^RU3ey>yrg&0`rMNokP^8d-4%wzKm5fh&IaQHc)^UCy*F=?_CZ!+ZlA$2<_vNjvUI8K_uF7 zEkrF;NGrz3QAaQ>QGr`p*WN%5xyfQ@VHCiz1K?U!PW)-tR)!muYc7S^C`{7(v9U_N zb-W5NKSgZWW8e(o3VoMvgJ)zxFTRl?Q&5rVWex#2OGL;(EEBm(YV9o(u|!F}Y~xQc z=qfxi->XQ50e&T90~K}rrE6h{9BR;>D?aZ<*0Zd8)lF-|+=o}!Jh)tY=KFv3VR>zz zp8vB?ef~++S$z7*w_bW7P%;1*5$q~gY&?}Lp^|Vbs~z$WJYnYtxLmVPjoP~e`~xX; zr?}V5Ut#<=m|OSPxc{2)SPw$_YYf_@_Vs#K=LMtXhZH#^f|{0H#d?@4uD`}Gp;%PW+fMj>f{rYNMAFp6cnSml&xIN@_F-SEdce54!bwcFT~~ z;UFX>JjsDBN?J>2IsLP8rKaUdsD_9Z-)E78wLNdxe+eZari z1x==TnX6)lcny>hXSkw@Z?9YSYJLp>3-%`_`Wbs#6YTks*n<+&2lfn%HNtu}Jf9hq zl>=OAE7Gi=6=r&#vSmQ}A-=%F5v>WRMdQw5{pQC!C@g->=rk&oN(nbndlh|NXEudG z^G&&javIy{Fo5&JdTGuOV-dP{fLc^$v#jcW!g7m@8QuoVAtZ-P$yb=QpCeaTwJmA( zjX0J@iU3x9rsnnbeoGfNmJYL5ON1idK5?)1f@Q{LSh(PYUW;jDlN^f4k)x?} zvXxeWD{ya7hR|niL|DdYDJIcO$Z*v_rBb{1+%rLJEzGbU6$RA6(D9w>9&<5hqvS5i!YPdXYD zV6fRMgUroC2&R`-bIe&2*2J=X%4*C()sI3&!G=>jjmVCL*WtVDYHOS3@^nqanw{fx zLTXKLX1Vmy9qPul!#hZv<5}h|FlNTG0JRW|j4Acn^q0$w+07jjvHmK)=mux~4BVcK z=#HoV559=n!I+4bL`1mJq5e`35mZj{)vsE;L($6iqpxKRoDBy$eN%BIX79`?7<#SE zJ!rR#NXCM>U^{H`InN5n;+u-6q#qcKnLoaqNL#E+opanU?>~O+65gNKQU?YMEd7yK zn#&!sH_U_4T6>Tto6V&^SC7ITEkx48TOw5bdhVe?59#ORsFNiW7&Y%vtBvV*5#{S> zOEu$5LbJBQw663+3y>`Ai7JfsG#4Px_N5+j*J9?z(5)V|yD}68vhL z05#?WgdJknY6nGoGrg?Z%{HXAQ^@x@;ZBx7qNg`7z>|LUG4vySC=XYdaEx(Y6&-swNknJoFUdA1n}7tcnry(^G5gT6%+%583L#9&5ba#`V7S zXX(vQ2JWc0L)4QsWlj{Z;9W&ESIjbk#YrHEV&h#pk=&6l$MCMew)rQXmKaqkSB3IZ zK5xF|qX;&6j^kA6%*3?WPxX?;v?dB8Vze^mqXSYF-rK31H%)LryXG8}lFDRyY*|?E z?~}_3VX)Fqw-Sqtw|(TsE>u|``INfJHe@O0=R)USd@inMZ0-Dzc4nlvRx*(>@L>BU zr4^D`!e^o9TET#fN8d^`up4Rwl>8CMd_h7YhKbV3zPjiRT6Sm`B(1Oo^Hr~LR=cU* zmG{rL=pz&rWBQ;<$&YkNh;Dr9p*(E#sR#8Js2v}SZK4g7?s6SOl@Fdtjz+9_HiRHLiV@mK;vzj~<1s*+_+y90IG1+RDoa+*(m6Wx z>#%yOdcvg|G(;so?JALlj)v+4TjPPrp|(l;^Ppqfhz3~`v{l}*(gy&o^f8)3hvz1- zGYg5W=hEtBHl|}s87cns2&|B{NO||5Fcy+jI0?z!Z>)jrIx0$cuD-)**z7kjsn#@n*V+&FmO-|wkne$+U7KL<`&45-T2jJ^Hg6c_dx zPr~q#PFj|0YYp>oRW%^V)Ur@o!nD#m(^4J6r0oensNkyzaglorJ8S8R^=(p6rlX2^ zP2q9RU|LGb-F&}fT245`X^D@Y_J)#{rlcHR<=`Kg1?!}GCRO_ESU+=-Zq%TS#P^^M zz&+5{Q3&lTg5CRs-IqCtARjUp9%M$tK6SLIZg>%seucXq+m==TCV^P#->l2Uepyxh z={#c4<%rI}$L>Op)e}S_501sQIpHw+#=_Qe8~|*`E`OZz*`j*{rX9h-*1A^M@5Zfl z3DMrE?5C<5Oz3Z={?=9rqJIl0?Nupvnpb@sd+LHQ#>V7Qk#?-4Fk6J@KF+%6x)*q@ zdMh$+;YLTAn>bVhgT4L?IJ;{&vj(T$#RL!^zu4L6(!Pdh#+$PKz?gXR3`)crvQ~zZ zup8}?PM}?q6xt<8t+SHP+{X1(TQCkgv>T*NvUEHlep6hfg0Rq&mLjKhFXelP2bAkU zE|9J&xF7O;2c0#Q;&rH8R^+s-3Y^tvulm^remj;DwK%QT*ZYv zTj|39V~@!1%fEL|X!RO90@cXh-~g-sm<9&u@|SSt#Jx7xfKIxV47R7CeAU`Ckb9% z_f%7w&^?_IA3M8yRn?HULn{XGVt;takMz(=9`-#HFEUN}2rN`}RjR`)Y6P)UibE&W zNXQ|MaIp_5@$b`W!@G;Y*?#mO-DxO#Lo1OBWr&b#(ZhTNAIVUGl6u=|5=lAQw=L{- zjM+Y|5oQ{)H}H|YfsgD>{!?W z#ULieJRC9sMDk@vT7?3BN>M3qq9cC=a8ke=p4LV?&0qJSF+Tk}N_zp@B`{Wpan)qA z-Mo#-HiNb>N`-S;+idwklB&na4zVeyYf5DR$Y7vnbC-3_;YT^=DCYo3**945a1^hb ziq{-3(C9HyM+sLZXNbxh6$;~j=ZWJ&k#kp^sk#(x^G7~pp6~y3I)hIq_(v8{=>UO?jwNahR%j6Y9^WnEJ{f%BWbf0pG6Xri=`%iQTk~u&WL{mPwMnIDmS9f z9U*s+>m3mA7Vrv6wfoM3JWDYjK}Zi-Y;D$L`DETyKJH_mmlgnkHV8Ox@!Ijg*Iuz81(>l{iqFsM`3W?xkpPzy~U#7qv zKFwe&N#7SpVO;Itv?$0-Ql*tV0Yb$lX{o`mk6AM*(gZ$@)d4A(!h93oz={b(_e;^i zR#ktbI@X|XV2$bMq#xWL_Y7RU3j+sDplHcQ?PFR4hdh>TV?f{$fCMPx zBbjZV7;7$jaQft9wSa+qQ)LXaqxbwkpWIua;H6qH%<3!|s~PWy*p@~q z;o!0E98hcpDvc3Cx#SO<)HKXZ!@kP{>3}Ik+0zZfEedr887PW8u@e z8@?GR*)a!XMzaHrh$w+kl+Q?vP{I&65u?>tG3<2yAruZ*aou&+{Qvbom;UxC5V@28 z--FlrS8V!M>K`?OkDni&zwmqKx$x7SE}}`Neam7ccYw_CWWur{ehwD{=Ys;wfgl`1s0y14vda A)&Kwi literal 0 HcmV?d00001 diff --git a/bcos-executor/test/old/EVMPrecompiledTest.cpp b/bcos-executor/test/old/EVMPrecompiledTest.cpp new file mode 100644 index 0000000..8192194 --- /dev/null +++ b/bcos-executor/test/old/EVMPrecompiledTest.cpp @@ -0,0 +1,1743 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EVMPrecompiledTest.cpp + * @author: xingqiangbai + * @date 2021-06-02 + */ + +#include "bcosutilities/DataConvertUtility.h" +#include "vm/Precompiled.h" +#include "wedpr-crypto/WedprCrypto.h" +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::executor; +namespace ut = boost::unit_test; + +namespace bcos +{ +namespace test +{ +struct EVMPrecompiledTestFixture +{ + EVMPrecompiledTestFixture() {} +}; + +BOOST_FIXTURE_TEST_SUITE(EVMPrecompiledTest, EVMPrecompiledTestFixture) + +/// test ecRecover +BOOST_AUTO_TEST_CASE(testECRecover) +{ + std::pair keyPair; + std::pair KeyPairR; + bytes rlpBytes = *fromHexString( + "f8ef9f65f0d06e39dc3c08e32ac10a5070858962bc6c0f5760baca823f2d5582d03f85174876e7ff" + "8609184e729fff82020394d6f1a71052366dbae2f7ab2d5d5845e77965cf0d80b86448f85bce000000" + "000000000000000000000000000000000000000000000000000000001bf5bd8a9e7ba8b936ea704292" + "ff4aaa5797bf671fdc8526dcd159f23c1f5a05f44e9fa862834dc7cb4541558f2b4961dc39eaaf0af7" + "f7395028658d0e01b86a371ca00b2b3fabd8598fefdda4efdb54f626367fc68e1735a8047f0f1c4f84" + "0255ca1ea0512500bc29f4cfe18ee1c88683006d73e56c934100b8abf4d2334560e1d2f75e"); + + bytes rlpBytesRight = *fromHexString( + "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e" + "000000000000000000000000000000000000000000000000000000000000001b" + "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e" + "789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"); + + h256 ret("000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d"); + bytesConstRef _in(ref(rlpBytes)); + keyPair = ecRecover(_in); + BOOST_CHECK(keyPair.first == true); + BOOST_CHECK(keyPair.second != ret.asBytes()); + KeyPairR = ecRecover(ref(rlpBytesRight)); + cout << toHexStringWithPrefix(KeyPairR.second) << endl; + cout << toHexStringWithPrefix(ret.asBytes()) << endl; + BOOST_CHECK(KeyPairR.second == ret.asBytes()); +} + +// test sha2 +BOOST_AUTO_TEST_CASE(testSha256) +{ + const std::string plainText = "123456ABC+"; + h256 cipherText("0x2218be4abd327ca929399fc73314f3d0cdd03cfc98927fabe7cd40f2059efd01"); + bytes bs; + for (size_t i = 0; i < plainText.length(); i++) + { + bs.push_back((byte)plainText[i]); + } + bytesConstRef bsConst(&bs); + BOOST_CHECK(sha256(bsConst) == cipherText); +} + +BOOST_AUTO_TEST_CASE(testRipemd160) +{ + const std::string plainText = "123456ABC+"; + h160 cipherText("0x74204bedd818292adc1127f9bb24bafd75468b62"); + bytes bs; + for (size_t i = 0; i < plainText.length(); i++) + { + bs.push_back((byte)plainText[i]); + } + bytesConstRef bsConst(&bs); + BOOST_CHECK( + ripemd160(bsConst).hexPrefixed() == string("0x74204bedd818292adc1127f9bb24bafd75468b62")); +} + +BOOST_AUTO_TEST_CASE(modexpFermatTheorem) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000001"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpZeroBase) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000000"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpExtraByteIgnored) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000002" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "ffff" + "8000000000000000000000000000000000000000000000000000000000000000" + "07"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpRightPadding) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000002" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "ffff" + "80"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("3b01b01ac41f2d6e917c6d6a221ce793802469026d9ab7578fa2e79e4da6aaab"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpMissingValues) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000002" + "0000000000000000000000000000000000000000000000000000000000000020" + "03"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000000"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpEmptyValue) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "8000000000000000000000000000000000000000000000000000000000000000"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000001"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpZeroPowerZero) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000020" + "00" + "00" + "80"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000001"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpZeroPowerZeroModZero) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000020" + "00" + "00" + "00"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + bytes expected = + *fromHexString("0000000000000000000000000000000000000000000000000000000000000000"); + BOOST_REQUIRE_EQUAL_COLLECTIONS( + res.second.begin(), res.second.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(modexpModLengthZero) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000000" + "01" + "01"); + auto res = exec(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE(res.first); + BOOST_REQUIRE(res.second.empty()); +} + +BOOST_AUTO_TEST_CASE(modexpCostFermatTheorem) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_EQUAL(static_cast(res), 13056); +} + +BOOST_AUTO_TEST_CASE(modexpCostTooLarge) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000000" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "0000000000000000000000000000000000000000000000000000000000000020" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE( + res == + bigint{ + "47428439751604713645494675459558567056699385719046375030561826409641217900517324"}, + "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostEmptyExponent) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000008" // length of B + "0000000000000000000000000000000000000000000000000000000000000000" // length of E + "0000000000000000000000000000000000000000000000000000000000000010" // length of M + "998877665544332211" // B + "" // E + "998877665544332211998877665544332211" // M + "9978" // Garbage that should be ignored + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE(res == bigint{"12"}, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostZeroExponent) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000000" // length of B + "0000000000000000000000000000000000000000000000000000000000000003" // length of E + "000000000000000000000000000000000000000000000000000000000000000a" // length of M + "" // B + "000000" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE(res == bigint{"5"}, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostApproximated) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000003" // length of B + "0000000000000000000000000000000000000000000000000000000000000021" // length of E + "000000000000000000000000000000000000000000000000000000000000000a" // length of M + "111111" // B + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE(res == bigint{"1315"}, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostApproximatedPartialByte) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000003" // length of B + "0000000000000000000000000000000000000000000000000000000000000021" // length of E + "000000000000000000000000000000000000000000000000000000000000000a" // length of M + "111111" // B + "02ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE(res == bigint{"1285"}, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostApproximatedGhost) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000003" // length of B + "0000000000000000000000000000000000000000000000000000000000000021" // length of E + "000000000000000000000000000000000000000000000000000000000000000a" // length of M + "111111" // B + "000000000000000000000000000000000000000000000000000000000000000000" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE(res == bigint{"40"}, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostMidRange) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000003" // length of B + "0000000000000000000000000000000000000000000000000000000000000021" // length of E + "000000000000000000000000000000000000000000000000000000000000004a" // length of M = 74 + "111111" // B + "000000000000000000000000000000000000000000000000000000000000000000" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE( + res == ((74 * 74 / 4 + 96 * 74 - 3072) * 8) / 20, "Got: " + toString(res)); +} + +BOOST_AUTO_TEST_CASE(modexpCostHighRange) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("modexp"); + + bytes in = *fromHexString( + "0000000000000000000000000000000000000000000000000000000000000003" // length of B + "0000000000000000000000000000000000000000000000000000000000000021" // length of E + "0000000000000000000000000000000000000000000000000000000000000401" // length of M = 1025 + "111111" // B + "000000000000000000000000000000000000000000000000000000000000000000" // E + "112233445566778899aa" // M + ); + auto res = cost(bytesConstRef(in.data(), in.size())); + + BOOST_REQUIRE_MESSAGE( + res == ((1025 * 1025 / 16 + 480 * 1025 - 199680) * 8) / 20, "Got: " + toString(res)); +} + +/// @defgroup PrecompiledTests Test cases for precompiled contracts. +/// +/// These test cases are used for testing and benchmarking precompiled contracts. +/// They are ported from go-ethereum, so formatting is not perfect. +/// https://github.com/ethereum/go-ethereum/blob/master/core/vm/contracts_test.go. +/// @{ + +struct PrecompiledTest +{ + const char* input; + const char* expected; + const char* name; +}; + +constexpr PrecompiledTest ecrecoverTests[] = { + {"38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e00000000000000000000000000000" + "0000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed" + "98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02", + "000000000000000000000000ceaccac640adf55b2028469bd36ba501f28b699d", ""}}; + +constexpr PrecompiledTest modexpTests[] = { + { + "0000000000000000000000000000000000000000000000000000000000000001" + "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + "03" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "0000000000000000000000000000000000000000000000000000000000000001", + "eip_example1", + }, + { + "0000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000020" + "0000000000000000000000000000000000000000000000000000000000000020" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e" + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + "0000000000000000000000000000000000000000000000000000000000000000", + "eip_example2", + }, + { + "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f" + "39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb502fc9e1f6beb81516545975218075ec2af118cd8" + "798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6" + "b", + "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb" + "13cfb3d8f7f2a3c014122ebb3ed41b02783adc", + "nagydani-1-square", + }, + { + "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f" + "39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb503fc9e1f6beb81516545975218075ec2af118cd8" + "798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6" + "b", + "4834a46ba565db27903b1c720c9d593e84e4cbd6ad2e64b31885d944f68cd801f92225a8961c952ddf2797fa47" + "01b330c85c4b363798100b921a1a22a46a7fec", + "nagydani-1-qube", + }, + { + "000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000" + "000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000" + "000000000040e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f" + "39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5010001fc9e1f6beb81516545975218075ec2af11" + "8cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a24" + "8c6b", + "c36d804180c35d4426b57b50c5bfcca5c01856d104564cd513b461d3c8b8409128a5573e416d0ebe38f5f73676" + "6d9dc27143e4da981dfa4d67f7dc474cbee6d2", + "nagydani-1-pow0x10001", + }, + { + "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34" + "167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b98" + "22a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5102" + "e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af185" + "3f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4" + "e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f" + "14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576d" + "a4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70", + "nagydani-2-square", + }, + { + "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34" + "167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b98" + "22a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5103" + "e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af185" + "3f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4" + "e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "d89ceb68c32da4f6364978d62aaa40d7b09b59ec61eb3c0159c87ec3a91037f7dc6967594e530a69d049b64adf" + "a39c8fa208ea970cfe4b7bcd359d345744405afe1cbf761647e32b3184c7fbe87cee8c6c7ff3b378faba6c68b8" + "3b6889cb40f1603ee68c56b4c03d48c595c826c041112dc941878f8c5be828154afd4a16311f", + "nagydani-2-qube", + }, + { + "000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000" + "000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000" + "000000000080cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34" + "167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b98" + "22a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf5101" + "0001e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33a" + "f1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7" + "efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087", + "ad85e8ef13fd1dd46eae44af8b91ad1ccae5b7a1c92944f92a19f21b0b658139e0cabe9c1f679507c2de354bf2" + "c91ebd965d1e633978a830d517d2f6f8dd5fd58065d58559de7e2334a878f8ec6992d9b9e77430d4764e863d77" + "c0f87beede8f2f7f2ab2e7222f85cc9d98b8467f4bb72e87ef2882423ebdb6daf02dddac6db2", + "nagydani-2-pow0x10001", + }, + { + "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf39186" + "05a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d9" + "4c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd5" + "58a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757df" + "f0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f549" + "80241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb02d7a85909174757" + "835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558" + "fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa2" + "9b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4" + "a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec16" + "8b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e0379" + "5ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "affc7507ea6d84751ec6b3f0d7b99dbcc263f33330e450d1b3ff0bc3d0874320bf4edd57debd58730698815795" + "8cb3cfd369cc0c9c198706f635c9e0f15d047df5cb44d03e2727f26b083c4ad8485080e1293f171c1ed52aef59" + "93a5815c35108e848c951cf1e334490b4a539a139e57b68f44fee583306f5b85ffa57206b3ee5660458858534e" + "5386b9584af3c7f67806e84c189d695e5eb96e1272d06ec2df5dc5fabc6e94b793718c60c36be0a4d031fc84cd" + "658aa72294b2e16fc240aef70cb9e591248e38bd49c5a554d1afa01f38dab72733092f7555334bbef6c8c43011" + "9840492380aa95fa025dcf699f0a39669d812b0c6946b6091e6e235337b6f8", + "nagydani-3-square", + }, + { + "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf39186" + "05a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d9" + "4c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd5" + "58a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757df" + "f0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f549" + "80241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb03d7a85909174757" + "835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558" + "fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa2" + "9b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4" + "a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec16" + "8b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e0379" + "5ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "1b280ecd6a6bf906b806d527c2a831e23b238f89da48449003a88ac3ac7150d6a5e9e6b3be4054c7da11dd1e47" + "0ec29a606f5115801b5bf53bc1900271d7c3ff3cd5ed790d1c219a9800437a689f2388ba1a11d68f6a8e5b74e9" + "a3b1fac6ee85fc6afbac599f93c391f5dc82a759e3c6c0ab45ce3f5d25d9b0c1bf94cf701ea6466fc9a478dacc" + "5754e593172b5111eeba88557048bceae401337cd4c1182ad9f700852bc8c99933a193f0b94cf1aedbefc48be3" + "bc93ef5cb276d7c2d5462ac8bb0c8fe8923a1db2afe1c6b90d59c534994a6a633f0ead1d638fdc293486bb634f" + "f2c8ec9e7297c04241a61c37e3ae95b11d53343d4ba2b4cc33d2cfa7eb705e", + "nagydani-3-qube", + }, + { + "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000" + "000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000" + "000000000100c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf39186" + "05a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d9" + "4c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd5" + "58a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757df" + "f0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f549" + "80241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb010001d7a8590917" + "4757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b" + "1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa" + "1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea2" + "28d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938" + "ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e" + "03795ed758220312d101e1e3d87d5313a6d052aebde75110363d", + "37843d7c67920b5f177372fa56e2a09117df585f81df8b300fba245b1175f488c99476019857198ed459ed8d97" + "99c377330e49f4180c4bf8e8f66240c64f65ede93d601f957b95b83efdee1e1bfde74169ff77002eaf078c7181" + "5a9220c80b2e3b3ff22c2f358111d816ebf83c2999026b6de50bfc711ff68705d2f40b753424aefc9f70f08d90" + "8b5a20276ad613b4ab4309a3ea72f0c17ea9df6b3367d44fb3acab11c333909e02e81ea2ed404a712d3ea96bba" + "87461720e2d98723e7acd0520ac1a5212dbedcd8dc0c1abf61d4719e319ff4758a774790b8d463cdfe131d1b2d" + "cfee52d002694e98e720cb6ae7ccea353bc503269ba35f0f63bf8d7b672a76", + "nagydani-3-pow0x10001", + }, + { + "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e47128" + "39917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e4" + "2e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f" + "6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264" + "dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a" + "2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497" + "c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693" + "892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d77202" + "5791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e83684" + "5e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3" + "bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70" + "f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8102df3143a0057457d75e8c708b6337a6f5a4fd1a0672" + "7acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040" + "ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d24" + "8bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f94" + "45cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490" + "c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a9" + "3cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea" + "6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253" + "bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb4" + "3f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c3" + "45e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcd" + "ae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "8a5aea5f50dcc03dc7a7a272b5aeebc040554dbc1ffe36753c4fc75f7ed5f6c2cc0de3a922bf96c78bf0643a73" + "025ad21f45a4a5cadd717612c511ab2bff1190fe5f1ae05ba9f8fe3624de1de2a817da6072ddcdb933b5021681" + "1dbe6a9ca79d3a3c6b3a476b079fd0d05f04fb154e2dd3e5cb83b148a006f2bcbf0042efb2ae7b916ea81b27aa" + "c25c3bf9a8b6d35440062ad8eae34a83f3ffa2cc7b40346b62174a4422584f72f95316f6b2bee9ff232ba97393" + "01c97c99a9ded26c45d72676eb856ad6ecc81d36a6de36d7f9dafafee11baa43a4b0d5e4ecffa7b9b7dcefd58c" + "397dd373e6db4acd2b2c02717712e6289bed7c813b670c4a0c6735aa7f3b0f1ce556eae9fcc94b501b2c8781ba" + "50a8c6220e8246371c3c7359fe4ef9da786ca7d98256754ca4e496be0a9174bedbecb384bdf470779186d6a833" + "f068d2838a88d90ef3ad48ff963b67c39cc5a3ee123baf7bf3125f64e77af7f30e105d72c4b9b5b237ed251e4c" + "122c6d8c1405e736299c3afd6db16a28c6a9cfa68241e53de4cd388271fe534a6a9b0dbea6171d170db1b89858" + "468885d08fecbd54c8e471c3e25d48e97ba450b96d0d87e00ac732aaa0d3ce4309c1064bd8a4c0808a97e0143e" + "43a24cfa847635125cd41c13e0574487963e9d725c01375db99c31da67b4cf65eff555f0c0ac416c727ff8d438" + "ad7c42030551d68c2e7adda0abb1ca7c10", + "nagydani-4-square", + }, + { + "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e47128" + "39917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e4" + "2e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f" + "6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264" + "dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a" + "2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497" + "c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693" + "892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d77202" + "5791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e83684" + "5e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3" + "bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70" + "f9f7a823536e2a8f4b3e12e94d9b53a934353451094b8103df3143a0057457d75e8c708b6337a6f5a4fd1a0672" + "7acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040" + "ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d24" + "8bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f94" + "45cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490" + "c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a9" + "3cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea" + "6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253" + "bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb4" + "3f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c3" + "45e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcd" + "ae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "5a2664252aba2d6e19d9600da582cdd1f09d7a890ac48e6b8da15ae7c6ff1856fc67a841ac2314d283ffa3ca81" + "a0ecf7c27d89ef91a5a893297928f5da0245c99645676b481b7e20a566ee6a4f2481942bee191deec5544600bb" + "2441fd0fb19e2ee7d801ad8911c6b7750affec367a4b29a22942c0f5f4744a4e77a8b654da2a82571037099e9c" + "6d930794efe5cdca73c7b6c0844e386bdca8ea01b3d7807146bb81365e2cdc6475f8c23e0ff84463126189dc97" + "89f72bbce2e3d2d114d728a272f1345122de23df54c922ec7a16e5c2a8f84da8871482bd258c20a7c09bbcd64c" + "7a96a51029bbfe848736a6ba7bf9d931a9b7de0bcaf3635034d4958b20ae9ab3a95a147b0421dd5f7ebff46c97" + "1010ebfc4adbbe0ad94d5498c853e7142c450d8c71de4b2f84edbf8acd2e16d00c8115b150b1c30e553dbb8263" + "5e781379fe2a56360420ff7e9f70cc64c00aba7e26ed13c7c19622865ae07248daced36416080f35f8cc157a85" + "7ed70ea4f347f17d1bee80fa038abd6e39b1ba06b97264388b21364f7c56e192d4b62d9b161405f32ab1e2594e" + "86243e56fcf2cb30d21adef15b9940f91af681da24328c883d892670c6aa47940867a81830a82b82716895db81" + "0df1b834640abefb7db2092dd92912cb9a735175bc447be40a503cf22dfe565b4ed7a3293ca0dfd63a507430b3" + "23ee248ec82e843b673c97ad730728cebc", + "nagydani-4-qube", + }, + { + "000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000" + "000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000" + "000000000200db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e47128" + "39917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e4" + "2e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f" + "6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264" + "dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a" + "2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497" + "c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693" + "892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d77202" + "5791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e83684" + "5e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3" + "bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70" + "f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81010001df3143a0057457d75e8c708b6337a6f5a4fd1a" + "06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9" + "e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f99" + "4d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d0" + "4f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa5" + "6490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a" + "42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a2" + "24ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed0711" + "7253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd87" + "7fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501c" + "c2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a624" + "5fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f", + "bed8b970c4a34849fc6926b08e40e20b21c15ed68d18f228904878d4370b56322d0da5789da0318768a374758e" + "6375bfe4641fca5285ec7171828922160f48f5ca7efbfee4d5148612c38ad683ae4e3c3a053d2b7c098cf2b34f" + "2cb19146eadd53c86b2d7ccf3d83b2c370bfb840913ee3879b1057a6b4e07e110b6bcd5e958bc71a14798c91d5" + "18cc70abee264b0d25a4110962a764b364ac0b0dd1ee8abc8426d775ec0f22b7e47b32576afaf1b5a48f64573e" + "d1c5c29f50ab412188d9685307323d990802b81dacc06c6e05a1e901830ba9fcc67688dc29c5e27bde0a6e845c" + "a925f5454b6fb3747edfaa2a5820838fb759eadf57f7cb5cec57fc213ddd8a4298fa079c3c0f472b07fb15aa6a" + "7f0a3780bd296ff6a62e58ef443870b02260bd4fd2bbc98255674b8e1f1f9f8d33c7170b0ebbea4523b695911a" + "bbf26e41885344823bd0587115fdd83b721a4e8457a31c9a84b3d3520a07e0e35df7f48e5a9d534d0ec7feef1f" + "f74de6a11e7f93eab95175b6ce22c68d78a642ad642837897ec11349205d8593ac19300207572c38d29ca5dfa0" + "3bc14cdbc32153c80e5cc3e739403d34c75915e49beb43094cc6dcafb3665b305ddec9286934ae66ec6b777ca5" + "28728c851318eb0f207b39f1caaf96db6eeead6b55ed08f451939314577d42bcc9f97c0b52d0234f88fd07e4c1" + "d7780fdebc025cfffcb572cb27a8c33963", + "nagydani-4-pow0x10001", + }, + { + "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e2022" + "5beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7d" + "ee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f" + "024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78" + "ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c" + "7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a8368" + "45109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859" + "268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec21" + "6ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752a" + "d89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772" + "c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb" + "27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbcc" + "ff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c" + "5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600" + "cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6" + "144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece39" + "86a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0" + "a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da" + "54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a" + "0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4" + "c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f1" + "34168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac" + "9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf02e3004920" + "1ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe2" + "57217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf2" + "9ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568" + "ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2" + "d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682ae" + "eb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473" + "460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d9" + "4ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5" + "b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb052" + "65fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e" + "581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd6" + "1cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87" + "667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d" + "2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501" + "b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23" + "a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff" + "47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898" + "676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b9" + "9d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da5" + "5f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea2" + "6c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6" + "320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e" + "10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "d61fe4e3f32ac260915b5b03b78a86d11bfc41d973fce5b0cc59035cf8289a8a2e3878ea15fa46565b0d806e2f" + "85b53873ea20ed653869b688adf83f3ef444535bf91598ff7e80f334fb782539b92f39f55310cc4b35349ab7b2" + "78346eda9bc37c0d8acd3557fae38197f412f8d9e57ce6a76b7205c23564cab06e5615be7c6f05c3d05ec690cb" + "a91da5e89d55b152ff8dd2157dc5458190025cf94b1ad98f7cbe64e9482faba95e6b33844afc640892872b44a9" + "932096508f4a782a4805323808f23e54b6ff9b841dbfa87db3505ae4f687972c18ea0f0d0af89d36c1c2a5b145" + "60c153c3fee406f5cf15cfd1c0bb45d767426d465f2f14c158495069d0c5955a00150707862ecaae30624ebacd" + "d8ac33e4e6aab3ff90b6ba445a84689386b9e945d01823a65874444316e83767290fcff630d2477f49d5d8ffdd" + "200e08ee1274270f86ed14c687895f6caf5ce528bd970c20d2408a9ba66216324c6a011ac4999098362dbd98a0" + "38129a2d40c8da6ab88318aa3046cb660327cc44236d9e5d2163bd0959062195c51ed93d0088b6f92051fc9905" + "0ece2538749165976233697ab4b610385366e5ce0b02ad6b61c168ecfbedcdf74278a38de340fd7a5fead8e588" + "e294795f9b011e2e60377a89e25c90e145397cdeabc60fd32444a6b7642a611a83c464d8b8976666351b4865c3" + "7b02e6dc21dbcdf5f930341707b618cc0f03c3122646b3385c9df9f2ec730eec9d49e7dfc9153b6e6289da8c4f" + "0ebea9ccc1b751948e3bb7171c9e4d57423b0eeeb79095c030cb52677b3f7e0b45c30f645391f3f9c957afa549" + "c4e0b2465b03c67993cd200b1af01035962edbc4c9e89b31c82ac121987d6529dafdeef67a132dc04b6dc68e77" + "f22862040b75e2ceb9ff16da0fca534e6db7bd12fa7b7f51b6c08c1e23dfcdb7acbd2da0b51c87ffbced065a61" + "2e9b1c8bba9b7e2d8d7a2f04fcc4aaf355b60d764879a76b5e16762d5f2f55d585d0c8e82df6940960cddfb72c" + "91dfa71f6b4e1c6ca25dfc39a878e998a663c04fe29d5e83b9586d047b4d7ff70a9f0d44f127e7d741685ca75f" + "11629128d916a0ffef4be586a30c4b70389cc746e84ebf177c01ee8a4511cfbb9d1ecf7f7b33c7dd8177896e10" + "bbc82f838dcd6db7ac67de62bf46b6a640fb580c5d1d2708f3862e3d2b645d0d18e49ef088053e3a220adc0e03" + "3c2afcfe61c90e32151152eb3caaf746c5e377d541cafc6cbb0cc0fa48b5caf1728f2e1957f5addfc234f1a9d8" + "9e40d49356c9172d0561a695fce6dab1d412321bbf407f63766ffd7b6b3d79bcfa07991c5a9709849c1008689e" + "3b47c50d613980bec239fb64185249d055b30375ccb4354d71fe4d05648fbf6c80634dfc3575f2f24abb714c1e" + "4c95e8896763bf4316e954c7ad19e5780ab7a040ca6fb9271f90a8b22ae738daf6cb", + "nagydani-5-square", + }, + { + "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000" + "000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000" + "000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e2022" + "5beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7d" + "ee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f" + "024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78" + "ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c" + "7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a8368" + "45109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859" + "268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec21" + "6ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752a" + "d89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772" + "c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb" + "27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbcc" + "ff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c" + "5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600" + "cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6" + "144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece39" + "86a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0" + "a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da" + "54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a" + "0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4" + "c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f1" + "34168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac" + "9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf03e3004920" + "1ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe2" + "57217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf2" + "9ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568" + "ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2" + "d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682ae" + "eb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473" + "460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d9" + "4ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5" + "b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb052" + "65fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e" + "581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd6" + "1cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87" + "667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d" + "2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501" + "b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23" + "a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff" + "47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898" + "676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b9" + "9d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da5" + "5f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea2" + "6c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6" + "320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e" + "10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "5f9c70ec884926a89461056ad20ac4c30155e817f807e4d3f5bb743d789c83386762435c3627773fa77da51444" + "51f2a8aad8adba88e0b669f5377c5e9bad70e45c86fe952b613f015a9953b8a5de5eaee4566acf98d41e327d93" + "a35bd5cef4607d025e58951167957df4ff9b1627649d3943805472e5e293d3efb687cfd1e503faafeb2840a3e3" + "b3f85d016051a58e1c9498aab72e63b748d834b31eb05d85dcde65e27834e266b85c75cc4ec0135135e0601cb9" + "3eeeb6e0010c8ceb65c4c319623c5e573a2c8c9fbbf7df68a930beb412d3f4dfd146175484f45d7afaa0d2e606" + "84af9b34730f7c8438465ad3e1d0c3237336722f2aa51095bd5759f4b8ab4dda111b684aa3dac62a761722e7ae" + "43495b7709933512c81c4e3c9133a51f7ce9f2b51fcec064f65779666960b4e45df3900f54311f5613e8012dd1" + "b8efd359eda31a778264c72aa8bb419d862734d769076bce2810011989a45374e5c5d8729fec21427f0bf397ea" + "cbb4220f603cf463a4b0c94efd858ffd9768cd60d6ce68d755e0fbad007ce5c2223d70c7018345a102e4ab3c60" + "a13a9e7794303156d4c2063e919f2153c13961fb324c80b240742f47773a7a8e25b3e3fb19b00ce839346c6eb3" + "c732fbc6b888df0b1fe0a3d07b053a2e9402c267b2d62f794d8a2840526e3ade15ce2264496ccd7519571dfde4" + "7f7a4bb16292241c20b2be59f3f8fb4f6383f232d838c5a22d8c95b6834d9d2ca493f5a505ebe8899503b0e8f9" + "b19e6e2dd81c1628b80016d02097e0134de51054c4e7674824d4d758760fc52377d2cad145e259aa2ffaf54139" + "e1a66b1e0c1c191e32ac59474c6b526f5b3ba07d3e5ec286eddf531fcd5292869be58c9f22ef91026159f7cf9d" + "05ef66b4299f4da48cc1635bf2243051d342d378a22c83390553e873713c0454ce5f3234397111ac3fe3207b86" + "f0ed9fc025c81903e1748103692074f83824fda6341be4f95ff00b0a9a208c267e12fa01825054cc0513629bf3" + "dbb56dc5b90d4316f87654a8be18227978ea0a8a522760cad620d0d14fd38920fb7321314062914275a5f99f67" + "7145a6979b156bd82ecd36f23f8e1273cc2759ecc0b2c69d94dad5211d1bed939dd87ed9e07b91d49713a6e16a" + "de0a98aea789f04994e318e4ff2c8a188cd8d43aeb52c6daa3bc29b4af50ea82a247c5cd67b573b34cbadcc0a3" + "76d3bbd530d50367b42705d870f2e27a8197ef46070528bfe408360faa2ebb8bf76e9f388572842bcb119f4d84" + "ee34ae31f5cc594f23705a49197b181fb78ed1ec99499c690f843a4d0cf2e226d118e9372271054fbabdcc5c92" + "ae9fefaef0589cd0e722eaf30c1703ec4289c7fd81beaa8a455ccee5298e31e2080c10c366a6fcf56f7d13582a" + "d0bcad037c612b710fc595b70fbefaaca23623b60c6c39b11beb8e5843b6b3dac60f", + "nagydani-5-qube", + }, + { + "000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000" + "000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000" + "000000000400c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e2022" + "5beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7d" + "ee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f" + "024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78" + "ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c" + "7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a8368" + "45109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859" + "268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec21" + "6ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752a" + "d89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772" + "c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb" + "27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbcc" + "ff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c" + "5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600" + "cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6" + "144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece39" + "86a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0" + "a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da" + "54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a" + "0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4" + "c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f1" + "34168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac" + "9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf010001e300" + "49201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc8357" + "0fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa35" + "1bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc051" + "4568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099" + "f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e886" + "82aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd0" + "2473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f" + "31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb" + "17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66c" + "b05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc" + "4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd5" + "7bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb" + "1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460" + "ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050e" + "c501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c" + "9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f" + "40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b5295784" + "7898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9a" + "b1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd301" + "6da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce" + "1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f7" + "81c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436a" + "a10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad", + "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f867804" + "28982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b" + "71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6" + "a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1" + "b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9" + "586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402" + "de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871" + "e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44" + "607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037" + "184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254" + "f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca" + "34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6" + "d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930" + "bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980" + "565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c14" + "4a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b6" + "01fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c6808" + "44dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70" + "a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33" + "acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870" + "068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f" + "4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9" + "cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500", + "nagydani-5-pow0x10001", + }}; + +constexpr PrecompiledTest bn256AddTests[] = { + {"18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9063c909c4720840cb5134cb9f59fa" + "749755796819658d32efc0d288198f3726607c2b7f58a84bd6145f00c9c2bc0bb1a187f20ff2c92963a88019e7c6a" + "014eed06614e20c147e940f2d70da3f74c9a17df361706a4485c742bd6788478fa17d7", + "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35" + "964723180eed7532537db9ae5e7d48f195c915", + "chfast1"}, + { + "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703301d1d33be6da8e509df21cc35" + "964723180eed7532537db9ae5e7d48f195c91518b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b" + "74034e093dc9063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266", + "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d7030" + "0909ce2e49dfad4a4619c8390cae66cefdb204", + "chfast2", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio1", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio2", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio3", + }, + { + "", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio4", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio5", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000010000000000000000000000000000000000000000000000000000000000000002", + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "cdetrio6", + }, + { + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "cdetrio7", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "cdetrio8", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000" + "0000000000000000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "cdetrio9", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002", + "cdetrio10", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000" + "0000000000010000000000000000000000000000000000000000000000000000000000000002", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2" + "ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", + "cdetrio11", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000" + "000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd315ed738c0e0a7c92e7845f96b2" + "ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4", + "cdetrio12", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f" + "18c43b43b869073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98", + "15bf2bb17880144b5d1cd2b1f46eff9d617bffd1ca57c37fb5a49bd84e53cf66049c797f9ce0d17083deb32b5e" + "36f2ea2a212ee036598dd7624c168993d1355f", + "cdetrio13", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c17c139df0efee0f766bc0204762b774362e4ded88953a39ce849" + "a8a7fa163fa92e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb00000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000000", + "cdetrio14", + }}; + +constexpr PrecompiledTest bn256ScalarMulTests[] = { + { + "2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb721611ce0a6af85915e2f1d7030" + "0909ce2e49dfad4a4619c8390cae66cefdb2040000000000000000000000000000000000000000000000001113" + "8ce750fa15c2", + "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cd" + "d5b0f01943074bf4f0f315690ec3cec6981afc", + "chfast1", + }, + { + "070a8d6a982153cae4be29d434e8faef8a47b274a053f5a4ee2a6c9c13c31e5c031b8ce914eba3a9ffb989f9cd" + "d5b0f01943074bf4f0f315690ec3cec6981afc30644e72e131a029b85045b68181585d97816a916871ca8d3c20" + "8c16d87cfd46", + "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a13" + "3a996eb6300b44da664d64251d05381bb8a02e", + "chfast2", + }, + { + "025a6f4181d2b4ea8b724290ffb40156eb0adb514c688556eb79cdea0752c2bb2eff3f31dea215f1eb86023a13" + "3a996eb6300b44da664d64251d05381bb8a02e183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10" + "460b6c3e7ea3", + "14789d0d4a730b354403b5fac948113739e276c23e0258d8596ee72f9cd9d3230af18a63153e0ec25ff9f2951d" + "d3fa90ed0197bfef6e2a1a62b5095b9d2b4a27", + "chfast3", + }, + { + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f6ffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffff", + "2cde5879ba6f13c0b5aa4ef627f159a3347df9722efce88a9afbb20b763b4c411aa7e43076f6aee272755a7f9b" + "84832e71559ba0d2e0b17d5f9f01755e5b0d11", + "cdetrio1", + }, + { + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f630644e72e131a029b85045b68181585d2833e84879b9709143e1" + "f593f0000000", + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3163511ddc1c3f25d3967453882" + "00081287b3fd1472d8339d5fecb2eae0830451", + "cdetrio2", + }, + { + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000100000000000000000000" + "000000000000", + "1051acb0700ec6d42a88215852d582efbaef31529b6fcbc3277b5c1b300f5cf0135b2394bb45ab04b8bd7611bd" + "2dfe1de6a4e6e2ccea1ea1955f577cd66af85b", + "cdetrio3", + }, + { + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000" + "000000000009", + "1dbad7d39dbc56379f78fac1bca147dc8e66de1b9d183c7b167351bfe0aeab742cd757d51289cd8dbd0acf9e67" + "3ad67d0f0a89f912af47ed1be53664f5692575", + "cdetrio4", + }, + { + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f60000000000000000000000000000000000000000000000000000" + "000000000001", + "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe31a2f3c951f6dadcc7ee9007dff" + "81504b0fcd6d7cf59996efdc33d92bf7f9f8f6", + "cdetrio5", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7cffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffff", + "29e587aadd7c06722aabba753017c093f70ba7eb1f1c0104ec0564e7e3e21f6022b1143f6a41008e7755c71c3d" + "00b6b915d386de21783ef590486d8afa8453b1", + "cdetrio6", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c30644e72e131a029b85045b68181585d2833e84879b9709143e1" + "f593f0000000", + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa92e83f8d734803fc370eba25ed1" + "f6b8768bd6d83887b87165fc2434fe11a830cb", + "cdetrio7", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000100000000000000000000" + "000000000000", + "221a3577763877920d0d14a91cd59b9479f83b87a653bb41f82a3f6f120cea7c2752c7f64cdd7f0e494bff7b60" + "419f242210f2026ed2ec70f89f78a4c56a1f15", + "cdetrio8", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000" + "000000000009", + "228e687a379ba154554040f8821f4e41ee2be287c201aa9c3bc02c9dd12f1e691e0fd6ee672d04cfd924ed8fdc" + "7ba5f2d06c53c1edc30f65f2af5a5b97f0a76a", + "cdetrio9", + }, + { + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c0000000000000000000000000000000000000000000000000000" + "000000000001", + "17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa901e0559bacb160664764a357af" + "8a9fe70baa9258e0b959273ffc5718c6d4cc7c", + "cdetrio10", + }, + { + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d98ffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffff", + "00a1a234d08efaa2616607e31eca1980128b00b415c845ff25bba3afcb81dc00242077290ed33906aeb8e42fd9" + "8c41bcb9057ba03421af3f2d08cfc441186024", + "cdetrio11", + }, + { + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d9830644e72e131a029b85045b68181585d2833e84879b9709143e1" + "f593f0000000", + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b8692929ee761a352600f54921df9b" + "f472e66217e7bb0cee9032e00acc86b3c8bfaf", + "cdetrio12", + }, + { + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000100000000000000000000" + "000000000000", + "1071b63011e8c222c5a771dfa03c2e11aac9666dd097f2c620852c3951a4376a2f46fe2f73e1cf310a168d56ba" + "a5575a8319389d7bfa6b29ee2d908305791434", + "cdetrio13", + }, + { + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000" + "000000000009", + "19f75b9dd68c080a688774a6213f131e3052bd353a304a189d7a2ee367e3c2582612f545fb9fc89fde80fd81c6" + "8fc7dcb27fea5fc124eeda69433cf5c46d2d7f", + "cdetrio14", + }, + { + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d980000000000000000000000000000000000000000000000000000" + "000000000001", + "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869073a5ffcc6fc7a28c30723d6e5" + "8ce577356982d65b833a5a5c15bf9024b43d98", + "cdetrio15", + }}; + +// bn256PairingTests are the test and benchmark data for the bn256 pairing check +// precompiled contract. +constexpr PrecompiledTest bn256PairingTests[] = { + { + "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c" + "678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a" + "452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc9" + "3537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f" + "0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c20" + "32c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "jeff1", + }, + { + "2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc0203d3260361bb8451de5ff5ecd1" + "7f010ff22f5c31cdf184e9020b06fa5997db841213d2149b006137fcfb23036606f848d638d576a120ca981b5b" + "1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426" + "322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a" + "823ef1cd4debe12b6552ea5f06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db922" + "160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "jeff2", + }, + { + "0f25929bcb43d5a57391564615c9e70a992b10eafa4db109709649cf48c50dd216da2f5cb6be7a0aa72c440c53" + "c9bbdfec6c36c7d515536431b3a865468acbba2e89718ad33c8bed92e210e81d1853435399a271913a6520736a" + "4729cf0d51eb01a9e2ffa2e92599b68e44de5bcf354fa2642bd4f26b259daa6f7ce3ed57aeb314a9a87b789a58" + "af499b314e13c3d65bede56c07ea2d418d6874857b70763713178fb49a2d6cd347dc58973ff49613a20757d0fc" + "c22079f9abd10c3baee245901b9e027bd5cfc2cb5db82d4dc9677ac795ec500ecd47deee3b5da006d6d049b811" + "d7511c78158de484232fc68daf8a45cf217d1c2fae693ff5871e8752d73b21198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "jeff3", + }, + { + "2f2ea0b3da1e8ef11914acf8b2e1b32d99df51f5f4f206fc6b947eae860eddb6068134ddb33dc888ef446b648d" + "72338684d678d2eb2371c61a50734d78da4b7225f83c8b6ab9de74e7da488ef02645c5a16a6652c3c71a15dc37" + "fe3a5dcb7cb122acdedd6308e3bb230d226d16a105295f523a8a02bfc5e8bd2da135ac4c245d065bbad92e7c4e" + "31bf3757f1fe7362a63fbfee50e7dc68da116e67d600d9bf6806d302580dc0661002994e7cd3a7f224e7ddc278" + "02777486bf80f40e4ca3cfdb186bac5188a98c45e6016873d107f5cd131f3a3e339d0375e58bd6219347b00812" + "2ae2b09e539e152ec5364e7e2204b03d11d3caa038bfc7cd499f8176aacbee1f39e4e4afc4bc74790a4a028aff" + "2c3d2538731fb755edefd8cb48d6ea589b5e283f150794b6736f670d6a1033f9b46c6f5204f50813eb85c8dc4b" + "59db1c5d39140d97ee4d2b36d99bc49974d18ecca3e7ad51011956051b464d9e27d46cc25e0764bb98575bd466" + "d32db7b15f582b2d5c452b36aa394b789366e5e3ca5aabd415794ab061441e51d01e94640b7e3084a07e02c78c" + "f3103c542bc5b298669f211b88da1679b0b64a63b7e0e7bfe52aae524f73a55be7fe70c7e9bfc94b4cf0da1213" + "d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee2276cf730cf493cd95d64677bbb75f" + "c42db72513a4c1e387b476d056f80aa75f21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b53" + "7e986237096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f", + "0000000000000000000000000000000000000000000000000000000000000001", + "jeff4", + }, + { + "20a754d2071d4d53903e3b31a7e98ad6882d58aec240ef981fdf0a9d22c5926a29c853fcea789887315916bbeb" + "89ca37edb355b4f980c9a12a94f30deeed30211213d2149b006137fcfb23036606f848d638d576a120ca981b5b" + "1a5f9300b3ee2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f21ee6226d31426" + "322afcda621464d0611d226783262e21bb3bc86b537e986237096df1f82dff337dd5972e32a8ad43e28a78a96a" + "823ef1cd4debe12b6552ea5f1abb4a25eb9379ae96c84fff9f0540abcfc0a0d11aeda02d4f37e4baf74cb0c110" + "73b3ff2cdbb38755f8691ea59e9606696b3ff278acfc098fa8226470d03869217cee0a9ad79a4493b5253e2e4e" + "3a39fc2df38419f230d341f60cb064a0ac290a3d76f140db8418ba512272381446eb73958670f00cf46f1d9e64" + "cba057b53c26f64a8ec70387a13e41430ed3ee4a7db2059cc5fc13c067194bcc0cb49a98552fd72bd9edb65734" + "6127da132e5b82ab908f5816c826acb499e22f2412d1a2d70f25929bcb43d5a57391564615c9e70a992b10eafa" + "4db109709649cf48c50dd2198a1f162a73261f112401aa2db79c7dab1533c9935c77290a6ce3b191f2318d198e" + "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c44" + "79674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadc" + "d122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "jeff5", + }, + { + "1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee2811c" + "678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a" + "452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cfc9" + "3537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f" + "0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c10" + "3188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000000", + "jeff6", + }, + { + // ecpairing_empty_data_insufficient_gas + "", + "0000000000000000000000000000000000000000000000000000000000000001", + "empty_data", + }, + { + // ecpairing_one_point_insufficient_gas + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e4" + "85b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff0" + "75ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e769" + "0c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000000", + "one_point", + }, + { + // ecpairing_two_point_match_2 + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e4" + "85b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff0" + "75ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e769" + "0c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000100" + "00000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e" + "6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", + "0000000000000000000000000000000000000000000000000000000000000001", + "two_point_match_2", + }, + { + // ecpairing_two_point_match_3 + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957" + "ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b78274" + "63722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4f" + "e6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a" + "76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "two_point_match_3", + }, + { + // ecpairing_two_point_match_4 + "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c5" + "1bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3" + "ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c" + "4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e" + "256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100" + "000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef" + "56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e600" + "71f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b" + "4a106054688728c9972c8512e9789e9567aae23e302ccd75", + "0000000000000000000000000000000000000000000000000000000000000001", + "two_point_match_4", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e4" + "85b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff0" + "75ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e769" + "0c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000100" + "00000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e" + "6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d000000000000000000000000000000000000000000" + "00000000000000000000010000000000000000000000000000000000000000000000000000000000000002198e" + "9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c44" + "79674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadc" + "d122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000" + "000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000" + "00000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800de" + "ef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7" + "db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571" + "827f9d000000000000000000000000000000000000000000000000000000000000000100000000000000000000" + "00000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e7" + "1297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0" + "585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3" + "d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000000000" + "00010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a7260bf" + "b731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd" + "46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9befcd05" + "a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d000000000000000000000000000000000000" + "000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000" + "02198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a0066" + "5e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355" + "acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000" + "000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000" + "00000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac0918" + "7524c7db36395df7be3b99e673b13a075a65ec1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39" + "c01571827f9d000000000000000000000000000000000000000000000000000000000000000100000000000000" + "00000000000000000000000000000000000000000000000002198e9393920d483a7260bfb731fb5d25f1aa4933" + "35a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed09" + "0689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb" + "408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000000000000000" + "00000000010000000000000000000000000000000000000000000000000000000000000002198e9393920d483a" + "7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f7" + "5edadd46debd5cd992f6ed275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec1d9b" + "efcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d", + "0000000000000000000000000000000000000000000000000000000000000001", + "ten_point_match_1", + }, + { + "000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000" + "00000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835849957" + "ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b78274" + "63722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4f" + "e6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a" + "76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb" + "5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46debd" + "5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb" + "4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000000000" + "00000000000000000000010000000000000000000000000000000000000000000000000000000000000002203e" + "205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f" + "149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0" + "509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b" + "85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e" + "3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800de" + "ef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395" + "bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166" + "fa7daa000000000000000000000000000000000000000000000000000000000000000100000000000000000000" + "00000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431c6d835" + "849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5" + "b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4830944" + "a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87" + "cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a7260bf" + "b731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd" + "46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db" + "8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa000000000000000000000000000000000000" + "000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000" + "02203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c5927" + "7c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9195e8aa5b7827463722b8c153931579d3505566b4edf48d498" + "e185f0509de15204bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e13" + "1a029b85045b68181585d97816a916871ca8d3c208c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac6" + "47851e3ac53ce1cc9c7e645a83198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2" + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed090689d0585ff075ec9e99ad69" + "0c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6" + "cc0166fa7daa000000000000000000000000000000000000000000000000000000000000000100000000000000" + "00000000000000000000000000000000000000000000000002203e205db4f19b37b60121b83a7333706db86431" + "c6d835849957ed8c3928ad7927dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b919" + "5e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de15204bb53b8977e5f92a0bc372742c4" + "830944a59b4fe6b1c0466e2a6dad122b5d2e030644e72e131a029b85045b68181585d97816a916871ca8d3c208" + "c16d87cfd31a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83198e9393920d483a" + "7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f7" + "5edadd46debd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c8" + "5ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "ten_point_match_2", + }, + { + // ecpairing_two_point_match_4 + "105456a333e6d636854f987ea7bb713dfd0ae8371a72aea313ae0c32c0bf10160cf031d41b41557f3e7e3ba0c5" + "1bebe5da8e6ecd855ec50fc87efcdeac168bcc0476be093a6d2b4bbf907172049874af11e1b6267606e00804d3" + "ff0037ec57fd3010c68cb50161b7d1d96bb71edfec9880171954e56871abf3d93cc94d745fa114c059d74e5b6c" + "4ec14ae5864ebe23a71781d86c29fb8fb6cce94f70d3de7a2101b33461f39d9e887dbb100f170a2345dde3c07e" + "256d1dfa2b657ba5cd030427000000000000000000000000000000000000000000000000000000000000000100" + "000000000000000000000000000000000000000000000000000000000000021a2c3013d2ea92e13c800cde68ef" + "56a294b883f6ac35d25f587c09b1b3c635f7290158a80cd3d66530f74dc94c94adb88f5cdb481acca997b6e600" + "71f08a115f2f997f3dbd66a7afe07fe7862ce239edba9e05c5afff7f8a1259c9733b2dfbb929d1691530ca701b" + "4a106054688728c9972c8512e9789e9567aae23e302ccd75", + "0000000000000000000000000000000000000000000000000000000000000001", + "ten_point_match_3", + }, +}; + +namespace +{ +void benchmarkPrecompiled(char const name[], RefDataContainer tests, int n) +{ + // FIXME: add option for this benchmark + bool benchmark = true; + if (benchmark) + { + std::cout << "Skipping benchmark test because --all option is not specified.\n"; + return; + } + + PrecompiledExecutor exec = PrecompiledRegistrar::executor(name); + + auto start = std::chrono::high_resolution_clock::now(); + for (auto&& test : tests) + { + bytes input = *fromHexString(test.input); + bytesConstRef inputRef = &input; + + auto res = exec(inputRef); + BOOST_REQUIRE_MESSAGE(res.first, test.name); + BOOST_REQUIRE_EQUAL(*toHexString(res.second), test.expected); + + start = std::chrono::high_resolution_clock::now(); + for (int i = 0; i < n; ++i) + exec(inputRef); + auto d = (std::chrono::high_resolution_clock::now() - start) / n; + + auto t = std::chrono::duration_cast(d).count(); + std::cout << ut::framework::current_test_case().p_name << "/" << test.name << ": " << t + << " ns\n"; + } +} +} // namespace + +/// @} + +BOOST_AUTO_TEST_CASE(bench_ecrecover, *ut::label("bench")) +{ + RefDataContainer tests{ + ecrecoverTests, sizeof(ecrecoverTests) / sizeof(ecrecoverTests[0])}; + benchmarkPrecompiled("ecrecover", tests, 100000); +} + +BOOST_AUTO_TEST_CASE(bench_modexp, *ut::label("bench")) +{ + RefDataContainer tests{ + modexpTests, sizeof(modexpTests) / sizeof(modexpTests[0])}; + benchmarkPrecompiled("modexp", tests, 10000); +} + + +BOOST_AUTO_TEST_CASE(bench_bn256Add, *ut::label("bench")) +{ + RefDataContainer tests{ + bn256AddTests, sizeof(bn256AddTests) / sizeof(bn256AddTests[0])}; + benchmarkPrecompiled("alt_bn128_G1_add", tests, 1000000); +} + +BOOST_AUTO_TEST_CASE(bench_bn256ScalarMul, *ut::label("bench")) +{ + RefDataContainer tests{ + bn256ScalarMulTests, sizeof(bn256ScalarMulTests) / sizeof(bn256ScalarMulTests[0])}; + benchmarkPrecompiled("alt_bn128_G1_mul", tests, 10000); +} + +BOOST_AUTO_TEST_CASE(bench_bn256Pairing, *ut::label("bench")) +{ + RefDataContainer tests{ + bn256PairingTests, sizeof(bn256PairingTests) / sizeof(bn256PairingTests[0])}; + benchmarkPrecompiled("alt_bn128_pairing_product", tests, 1000); +} + +BOOST_AUTO_TEST_CASE(ecpairingCost) +{ + PrecompiledPricer cost = PrecompiledRegistrar::pricer("alt_bn128_pairing_product"); + + bytes in{*fromHexString( + "0x1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f593034dd2920f673e204fee281" + "1c678745fc819b55d3e9d294e45c9b03a76aef41209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b" + "4a452003a35bf704bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a416782bb8324af6cf" + "c93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d120a2a4cf30c1bf9845f20c6fe39e07ea2cce6" + "1f0c9bb048165fe5e4de877550111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c" + "2032c61a830e3c17286de9462bf242fca2883585b93870a73853face6a6bf411198e9393920d483a7260bfb731" + "fb5d25f1aa493335a9e71297e485b7aef312c21800deef121f1e76426a00665e5c4479674322d4f75edadd46de" + "bd5cd992f6ed090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b12c85ea5db8c6d" + "eb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa")}; + + auto costGas = cost(ref(in)); + BOOST_CHECK_EQUAL(static_cast(costGas), in.size() / 192 * 34000 + 45000); +} + +constexpr PrecompiledTest blake2FCompressionFailTests[] = { + {"00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2" + "b8c68059b6bbd41fbabd9831f79217e1319cde05b6162630000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000000300000000000000000000000000000001", + "", "test1"}, + { + "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e51" + "1f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b616263000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000000000300000000000000000000000000000001", + "", + "test2", + }, + { + "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000002", + "", + "test3", + }}; + +constexpr PrecompiledTest blake2FCompressionTests[] = { + {"0000000048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3" + "e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000300000000000000000000000000000001", + "08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d282e6ad7f520e511f6c3e2b8c" + "68059b9442be0454267ce079217e1319cde05b", + "test4"}, + { + "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000001", + "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de45" + "33cc9518d38aa8dbf1925ab92386edd4009923", + "test5", + }, + { + "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000000", + "75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d2875298743e7f6d5ea2f2d3e8d22603" + "9cd31b4e426ac4f2d3d666a610c2116fde4735", + "test6", + }, + { + "0000000148c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000001", + "b63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fba551b3a8333bcdf5f2f7e08993" + "d53923de3d64fcc68c034e717b9293fed7a421", + "test7", + }, + { + "000004b048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000001", + "bedc7f4e18165dc34600826ea6857a373d9afa25d7b6f2c7365f5e9e7f7b654ca2486da7248a6a3f1fd2fc4b00" + "233e6144a130296edf049b605d8c52b6463f70", + "test_1200rounds", + }}; + +constexpr PrecompiledTest blake2FCompressionLargeTests[] = {{ + "ffffffff48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f" + "6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000300000000000000000000000000000001", + "fc59093aafa9ab43daae0e914c57635c5402d8e3d2130eb9b3cc181de7f0ecf9b22bf99a7815ce16419e200e01" + "846e6b5df8cc7703041bbceb571de6631d2615", + "test8", +}}; + +namespace +{ +void testPrecompiled(char const name[], RefDataContainer tests) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor(name); + + for (auto&& test : tests) + { + bytes input = *fromHexString(test.input); + bytesConstRef inputRef = &input; + + auto res = exec(inputRef); + BOOST_REQUIRE_MESSAGE(res.first, test.name); + BOOST_REQUIRE_EQUAL(*toHexString(res.second), test.expected); + + std::cout << ut::framework::current_test_case().p_name << "/" << test.name << " PASSED\n"; + } +} + +void testPrecompiledFail(char const name[], RefDataContainer tests) +{ + PrecompiledExecutor exec = PrecompiledRegistrar::executor(name); + + for (auto&& test : tests) + { + bytes input = *fromHexString(test.input); + bytesConstRef inputRef = &input; + + auto res = exec(inputRef); + BOOST_REQUIRE_MESSAGE(!res.first, test.name); + + std::cout << ut::framework::current_test_case().p_name << "/" << test.name << " PASSED\n"; + } +} +} // namespace + +BOOST_AUTO_TEST_CASE(blake2compression) +{ + RefDataContainer tests{blake2FCompressionTests, + sizeof(blake2FCompressionTests) / sizeof(blake2FCompressionTests[0])}; + testPrecompiled("blake2_compression", tests); +} + +BOOST_AUTO_TEST_CASE(blake2compressionFail) +{ + RefDataContainer tests{blake2FCompressionFailTests, + sizeof(blake2FCompressionFailTests) / sizeof(blake2FCompressionFailTests[0])}; + testPrecompiledFail("blake2_compression", tests); +} + +BOOST_AUTO_TEST_CASE(bench_blake2compression, *ut::label("bench")) +{ + RefDataContainer tests{blake2FCompressionTests, + sizeof(blake2FCompressionTests) / sizeof(blake2FCompressionTests[0])}; + benchmarkPrecompiled("blake2_compression", tests, 100000); +} + +BOOST_AUTO_TEST_CASE(bench_blake2compression_maxrounds, *ut::label("bench")) +{ + RefDataContainer tests{blake2FCompressionLargeTests, + sizeof(blake2FCompressionLargeTests) / sizeof(blake2FCompressionLargeTests[0])}; + benchmarkPrecompiled("blake2_compression", tests, 1); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/test/old/MemoryStorage.h b/bcos-executor/test/old/MemoryStorage.h new file mode 100644 index 0000000..771b3cd --- /dev/null +++ b/bcos-executor/test/old/MemoryStorage.h @@ -0,0 +1,183 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the StorageInterface implement in memory + * @file MemoryStorage.h + */ +#pragma once +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include +#include + +namespace bcos +{ +namespace storage +{ +class MemoryStorage : public StorageInterface +{ +public: + MemoryStorage() = default; + virtual ~MemoryStorage() = default; + + std::vector getPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition) const override + { + std::vector ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& kv : data.at(_tableInfo->name)) + { + if (!_condition || _condition->isValid(kv.first)) + { + ret.emplace_back(kv.first); + } + } + } + return ret; + } + Entry::Ptr getRow( + const std::shared_ptr& _tableInfo, const std::string_view& _key) override + { + Entry::Ptr ret = nullptr; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + if (data[_tableInfo->name].count(std::string(_key))) + { + if (data[_tableInfo->name][std::string(_key)]->getStatus() == Entry::Status::NORMAL) + { + return data[_tableInfo->name][std::string(_key)]; + } + } + } + return ret; + } + std::map getRows(const std::shared_ptr& _tableInfo, + const std::vector& _keys) override + { + std::map ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& key : _keys) + { + if (data[_tableInfo->name].count(std::string(key))) + { + if (data[_tableInfo->name][key]->getStatus() == Entry::Status::NORMAL) + { // this if is unnecessary + ret[key] = data[_tableInfo->name][key]; + } + } + } + } + return ret; + } + std::pair commitBlock(protocol::BlockNumber, + const std::vector>& _tableInfos, + const std::vector>>& _tableDatas) override + { + size_t total = 0; + if (_tableInfos.size() != _tableDatas.size()) + { + return {0, nullptr}; + } + std::lock_guard lock(m_mutex); + for (size_t i = 0; i < _tableInfos.size(); ++i) + { + for (auto& item : *_tableDatas[i]) + { + if (item.second->getStatus() == Entry::Status::NORMAL) + { + data[_tableInfos[i]->name][item.first] = item.second; + ++total; + } + } + } + return {total, nullptr}; + } + + void asyncGetPrimaryKeys(const std::shared_ptr&, const Condition::Ptr&, + std::function&)>) override + {} + void asyncGetRow(const std::shared_ptr&, const std::string_view&, + std::function) override + {} + void asyncGetRows(const std::shared_ptr&, + const std::shared_ptr>&, + std::function&)>) override + {} + + void asyncCommitBlock(protocol::BlockNumber, + const std::shared_ptr>>&, + const std::shared_ptr>>>&, + std::function) override + {} + + // cache StateStorage + void asyncAddStateCache(protocol::BlockNumber, const std::shared_ptr&, + std::function) override + {} + void asyncDropStateCache(protocol::BlockNumber, std::function) override + {} + void asyncGetStateCache(protocol::BlockNumber, + std::function&)>) + override + {} + std::shared_ptr getStateCache(protocol::BlockNumber) override + { + return nullptr; + } + void dropStateCache(protocol::BlockNumber) override {} + void addStateCache( + protocol::BlockNumber, const std::shared_ptr&) override + {} + // KV store in split database, used to store data off-chain + Error::Ptr put( + const std::string_view&, const std::string_view&, const std::string_view&) override + { + return nullptr; + } + std::pair get( + const std::string_view&, const std::string_view&) override + { + return {"", nullptr}; + } + Error::Ptr remove(const std::string_view&, const std::string_view&) override { return nullptr; } + void asyncPut(const std::string_view&, const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncGet(const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncRemove(const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncGetBatch(const std::string_view&, const std::shared_ptr>&, + std::function>&)>) + override + {} + +private: + std::map> data; + mutable std::mutex m_mutex; +}; + + +} // namespace storage + +} // namespace bcos diff --git a/bcos-executor/test/old/StateTest.cpp b/bcos-executor/test/old/StateTest.cpp new file mode 100644 index 0000000..0d66053 --- /dev/null +++ b/bcos-executor/test/old/StateTest.cpp @@ -0,0 +1,225 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the test of State + * @file StateTest.cpp + */ + +#include "state/State.h" +#include "MemoryStorage.h" +#include "bcos-protocol/protobuf/PBBlock.h" +#include "bcos-protocol/protobuf/PBBlockFactory.h" +#include "bcos-protocol/protobuf/PBBlockHeaderFactory.h" +#include "bcos-protocol/protobuf/PBTransactionFactory.h" +#include "bcos-protocol/protobuf/PBTransactionReceiptFactory.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +namespace test_StorageState +{ +struct StorageStateFixture +{ + StorageStateFixture() + { + hashImpl = std::make_shared(); + memoryStorage = make_shared(); + tableFactory = make_shared(memoryStorage, hashImpl, m_blockNumber); + state = make_shared(tableFactory, hashImpl, false); + } + + std::shared_ptr hashImpl = nullptr; + std::shared_ptr memoryStorage = nullptr; + protocol::BlockNumber m_blockNumber = 0; + std::shared_ptr tableFactory = nullptr; + std::shared_ptr state = nullptr; +}; + +BOOST_FIXTURE_TEST_SUITE(StorageState, StorageStateFixture) + +BOOST_AUTO_TEST_CASE(Balance) +{ + string addr1("0x100001"); + string addr2("0x100002"); + BOOST_TEST(state->balance(addr1) == u256(0)); + state->addBalance(addr1, u256(10)); + BOOST_TEST(state->balance(addr1) == u256(10)); + state->addBalance(addr1, u256(15)); + BOOST_TEST(state->balance(addr1) == u256(25)); + state->subBalance(addr1, u256(3)); + BOOST_TEST(state->balance(addr1) == u256(22)); + state->setBalance(addr1, u256(25)); + BOOST_TEST(state->balance(addr1) == u256(25)); + state->setBalance(addr2, u256(100)); + BOOST_TEST(state->balance(addr2) == u256(100)); + state->transferBalance(addr2, addr1, u256(55)); + BOOST_TEST(state->balance(addr2) == u256(45)); + BOOST_TEST(state->balance(addr1) == u256(80)); +} + +BOOST_AUTO_TEST_CASE(Account) +{ + string addr1("0x100001"); + auto isUse = state->addressInUse(addr1); + BOOST_TEST(isUse == false); + state->checkAuthority(addr1, addr1); + state->createContract(addr1); + isUse = state->addressInUse(addr1); + BOOST_TEST(isUse == true); + auto balance = state->balance(addr1); + BOOST_TEST(balance == u256(0)); + auto nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(0)); + auto hash = state->codeHash(addr1); + BOOST_TEST(hash == hashImpl->emptyHash()); + auto sign = state->accountNonemptyAndExisting(addr1); + BOOST_TEST(sign == false); + state->kill(addr1); + state->rootHash(); + nonce = state->accountStartNonce(); + BOOST_TEST(nonce == u256(0)); + state->checkAuthority(addr1, addr1); +} + +BOOST_AUTO_TEST_CASE(Storage) +{ + string addr1("0x100001"); + state->addBalance(addr1, u256(10)); + state->storageRoot(addr1); + auto value = state->storage(addr1, "123"); + BOOST_TEST(value == ""); + state->setStorage(addr1, "123", "456"); + value = state->storage(addr1, "123"); + BOOST_TEST(value == "456"); + state->setStorage(addr1, "123", "567"); + state->clearStorage(addr1); +} + +BOOST_AUTO_TEST_CASE(Code) +{ + string addr1("0x100001"); + auto hasCode = state->addressHasCode(addr1); + BOOST_TEST(hasCode == false); + auto code = state->code(addr1); + BOOST_TEST(code == nullptr); + auto hash = state->codeHash(addr1); + BOOST_TEST(hash == hashImpl->emptyHash()); + state->addBalance(addr1, u256(10)); + code = state->code(addr1); + BOOST_TEST(code == nullptr); + std::string codeString("aaaaaaaaaaaaa"); + auto codeBytes = bytes(codeString.begin(), codeString.end()); + state->setCode(addr1, bytesConstRef(codeBytes.data(), codeBytes.size())); + auto code2 = state->code(addr1); + BOOST_TEST(codeBytes == *code2); + hash = state->codeHash(addr1); + BOOST_TEST(hash == hashImpl->hash(codeBytes)); + auto size = state->codeSize(addr1); + BOOST_TEST(codeBytes.size() == size); + hasCode = state->addressHasCode(addr1); + BOOST_TEST(hasCode == true); +} + +BOOST_AUTO_TEST_CASE(Nonce) +{ + string addr1("0x100001"); + state->addBalance(addr1, u256(10)); + auto nonce = state->getNonce(addr1); + BOOST_TEST(nonce == state->accountStartNonce()); + state->setNonce(addr1, u256(5)); + nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(5)); + state->incNonce(addr1); + nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(6)); + state->incNonce(addr1); + nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(7)); + state->incNonce(addr1); + nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(8)); + state->incNonce(addr1); + nonce = state->getNonce(addr1); + BOOST_TEST(nonce == u256(9)); + + string addr2("0x100002"); + state->incNonce(addr2); + nonce = state->getNonce(addr2); + BOOST_TEST(nonce == state->accountStartNonce() + 1); + state->incNonce(addr2); + nonce = state->getNonce(addr2); + BOOST_TEST(nonce == state->accountStartNonce() + 2); + state->incNonce(addr2); + nonce = state->getNonce(addr2); + BOOST_TEST(nonce == state->accountStartNonce() + 3); + state->incNonce(addr2); + nonce = state->getNonce(addr2); + BOOST_TEST(nonce == state->accountStartNonce() + 4); + + string addr3("0x100003"); + state->setNonce(addr3, nonce); + nonce = state->getNonce(addr3); + BOOST_TEST(nonce == state->accountStartNonce() + 4); +} + +BOOST_AUTO_TEST_CASE(Operate) +{ + string addr1("0x100001"); + auto savepoint0 = state->savepoint(); + BOOST_TEST(state->balance(addr1) == u256(0)); + state->addBalance(addr1, u256(10)); + BOOST_TEST(state->balance(addr1) == u256(10)); + auto sign = state->accountNonemptyAndExisting(addr1); + BOOST_TEST(sign == true); + auto savepoint1 = state->savepoint(); + state->addBalance(addr1, u256(10)); + BOOST_TEST(state->balance(addr1) == u256(20)); + auto savepoint2 = state->savepoint(); + BOOST_TEST(savepoint1 < savepoint2); + + state->addBalance(addr1, u256(10)); + BOOST_TEST(state->balance(addr1) == u256(30)); + state->rollback(savepoint2); + BOOST_TEST(state->balance(addr1) == u256(20)); + state->rollback(savepoint1); + BOOST_TEST(state->balance(addr1) == u256(10)); + + state->rollback(savepoint0); + // BOOST_TEST(state->addressInUse(addr1) == false); + state->commit(); + state->clear(); + + state->commit(); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test_StorageState + +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/old/libexecutor/DAGTest.cpp b/bcos-executor/test/old/libexecutor/DAGTest.cpp new file mode 100644 index 0000000..0dd9688 --- /dev/null +++ b/bcos-executor/test/old/libexecutor/DAGTest.cpp @@ -0,0 +1,180 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for DAG(Directed Acyclic Graph) basic implement + * @author: jimmyshi + * @date: 2019-1-9 + */ + +#include "executor/DAG.h" +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +struct DAGFixture +{ + DAGFixture() {} +}; +BOOST_FIXTURE_TEST_SUITE(DAGTest, DAGFixture) + +bool have(set& _set, ID _id) +{ + return _set.find(_id) != _set.end(); +} + +void consumeAndPush(DAG& _dag, ID _id, set& _topSet) +{ + ID top = _dag.consume(_id); + if (top != INVALID_ID) + _topSet.insert(top); +} + +BOOST_AUTO_TEST_CASE(DAGPopConsumeTest) +{ + DAG dag; + dag.init(9); + dag.addEdge(0, 1); + dag.addEdge(1, 2); + dag.addEdge(4, 5); + dag.addEdge(2, 4); + dag.addEdge(3, 4); + dag.addEdge(0, 3); + dag.addEdge(6, 7); + // single 8 vertex + + // BOOST_CHECK(dag.isQueueEmpty()); + + dag.generate(); + // BOOST_CHECK(!dag.isQueueEmpty()); + + set topSet; + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 3); + BOOST_CHECK(have(topSet, 0)); + BOOST_CHECK(have(topSet, 6)); + BOOST_CHECK(have(topSet, 8)); + topSet.clear(); + consumeAndPush(dag, 0, topSet); + std::cout << "consume " << 0 << std::endl; + consumeAndPush(dag, 6, topSet); + std::cout << "consume " << 6 << std::endl; + consumeAndPush(dag, 8, topSet); + std::cout << "consume " << 8 << std::endl; + + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 3); + BOOST_CHECK(have(topSet, 1)); + BOOST_CHECK(have(topSet, 3)); + BOOST_CHECK(have(topSet, 7)); + topSet.clear(); + consumeAndPush(dag, 1, topSet); + std::cout << "consume " << 1 << std::endl; + consumeAndPush(dag, 3, topSet); + std::cout << "consume " << 3 << std::endl; + consumeAndPush(dag, 7, topSet); + std::cout << "consume " << 7 << std::endl; + + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 1); + BOOST_CHECK(have(topSet, 2)); + topSet.clear(); + consumeAndPush(dag, 2, topSet); + std::cout << "consume " << 2 << std::endl; + + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 1); + BOOST_CHECK(have(topSet, 4)); + topSet.clear(); + consumeAndPush(dag, 4, topSet); + std::cout << "consume " << 4 << std::endl; + + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 1); + BOOST_CHECK(have(topSet, 5)); + topSet.clear(); + consumeAndPush(dag, 5, topSet); + std::cout << "consume " << 5 << std::endl; + + for (int i = 0; i < 9; i++) + { + auto id = dag.waitPop(false); + std::cout << "pop " << id << std::endl; + if (id == INVALID_ID) + { + break; + } + topSet.insert(id); + } + BOOST_CHECK_EQUAL(topSet.size(), 0); +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/old/libexecutor/ExecutorTest.cpp b/bcos-executor/test/old/libexecutor/ExecutorTest.cpp new file mode 100644 index 0000000..4631673 --- /dev/null +++ b/bcos-executor/test/old/libexecutor/ExecutorTest.cpp @@ -0,0 +1,325 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for executor implement + * @author: xingqiangbai + * @date: 2021-06-09 + */ + +#include "bcos-executor/Executor.h" +#include "../MemoryStorage.h" +#include "../mock/MockDispatcher.h" +#include "../mock/MockLedger.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-protocol/testutils/protocol/FakeBlock.h" +#include "bcos-protocol/testutils/protocol/FakeBlockHeader.h" +#include "libprecompiled/Common.h" +#include "vm/BlockContext.h" +#include "vm/TransactionExecutive.h" +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +struct ExecutorFixture +{ + ExecutorFixture() + { + auto hashImpl = std::make_shared(); + assert(hashImpl); + auto signatureImpl = std::make_shared(); + assert(signatureImpl); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + assert(cryptoSuite); + blockFactory = createBlockFactory(cryptoSuite); + auto header = blockFactory->blockHeaderFactory()->createBlockHeader(1); + header->setNumber(1); + ledger = make_shared(header, blockFactory); + storage = make_shared(); + dispatcher = make_shared(); + executor = make_shared(blockFactory, dispatcher, ledger, storage, false); + // create sys table + auto tableFactory = std::make_shared(storage, hashImpl, 0); + tableFactory->createTable(ledger::SYS_CONFIG, SYS_KEY, "value,enable_number"); + auto table = tableFactory->openTable(ledger::SYS_CONFIG); + auto entry = table->newEntry(); + entry->setField(SYS_VALUE, "3000000"); + entry->setField(SYS_CONFIG_ENABLE_BLOCK_NUMBER, "0"); + table->setRow(SYSTEM_KEY_TX_GAS_LIMIT, entry); + tableFactory->commit(); + executiveContext = executor->createExecutiveContext(header, tableFactory); + } + CryptoSuite::Ptr cryptoSuite = nullptr; + protocol::BlockFactory::Ptr blockFactory; + MockLedger::Ptr ledger; + MemoryStorage::Ptr storage; + MockDispatcher::Ptr dispatcher; + Executor::Ptr executor; + BlockContext::Ptr executiveContext = nullptr; + string helloBin = + "0x60806040526040805190810160405280600181526020017f3100000000000000000000000000000000000000" + "0000000000000000000000008152506001908051906020019061004f9291906100ae565b5034801561005c5760" + "0080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c64210000000000000000" + "0000000000000000000000815250600090805190602001906100a89291906100ae565b50610153565b82805460" + "0181600116156101000203166002900490600052602060002090601f016020900481019282601f106100ef5780" + "5160ff191683800117855561011d565b8280016001018555821561011d579182015b8281111561011c57825182" + "5591602001919060010190610101565b5b50905061012a919061012e565b5090565b61015091905b8082111561" + "014c576000816000905550600101610134565b5090565b90565b6104ac806101626000396000f3006080604052" + "60043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ff" + "ffffff1680634ed3885e1461005c57806354fd4d50146100c55780636d4ce63c14610155575b600080fd5b3480" + "1561006857600080fd5b506100c3600480360381019080803590602001908201803590602001908080601f0160" + "208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192" + "9192905050506101e5565b005b3480156100d157600080fd5b506100da61029b565b6040518080602001828103" + "825283818151815260200191508051906020019080838360005b8381101561011a578082015181840152602081" + "0190506100ff565b50505050905090810190601f1680156101475780820380516001836020036101000a031916" + "815260200191505b509250505060405180910390f35b34801561016157600080fd5b5061016a610339565b6040" + "518080602001828103825283818151815260200191508051906020019080838360005b838110156101aa578082" + "01518184015260208101905061018f565b50505050905090810190601f1680156101d757808203805160018360" + "20036101000a031916815260200191505b509250505060405180910390f35b80600090805190602001906101fb" + "9291906103db565b507f93a093529f9c8a0c300db4c55fcd27c068c4f5e0e8410bc288c7e76f3d71083e816040" + "518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082" + "015181840152602081019050610243565b50505050905090810190601f16801561028b57808203805160018360" + "20036101000a031916815260200191505b509250505060405180910390a150565b600180546001816001161561" + "01000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460" + "0181600116156101000203166002900480156103315780601f1061030657610100808354040283529160200191" + "610331565b820191906000526020600020905b81548152906001019060200180831161031457829003601f1682" + "01915b505050505081565b606060008054600181600116156101000203166002900480601f0160208091040260" + "200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103" + "d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b81" + "54815290600101906020018083116103b457829003601f168201915b5050505050905090565b82805460018160" + "0116156101000203166002900490600052602060002090601f016020900481019282601f1061041c57805160ff" + "191683800117855561044a565b8280016001018555821561044a579182015b8281111561044957825182559160" + "200191906001019061042e565b5b509050610457919061045b565b5090565b61047d91905b8082111561047957" + "6000816000905550600101610461565b5090565b905600a165627a7a723058204736027ad6b97d7cd2685379ac" + "b35b386dcb18799934be8283f1e08cd1f0c6ec0029"; +}; +BOOST_FIXTURE_TEST_SUITE(ExecutorTest, ExecutorFixture) + +BOOST_AUTO_TEST_CASE(construct) +{ + auto tmp = make_shared(blockFactory, dispatcher, ledger, storage, true); +} + +BOOST_AUTO_TEST_CASE(executeTransaction_DeployHelloWorld) +{ + auto keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e")->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString("ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + cout << keyPair->secretKey()->hex() << endl << keyPair->publicKey()->hex() << endl; + auto to = keyPair->address(cryptoSuite->hashImpl()).asBytes(); + auto helloworld = string(helloBin); + + auto input = *fromHexString(helloworld); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = string_view((char*)tx->sender().data(), tx->sender().size()); + auto executive = std::make_shared(executiveContext); + auto receipt = executor->dmcExecuteTransaction(tx, executive); + BOOST_TEST(receipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(receipt->gasUsed() == 430575); + // std::cout << "##### hash:" << receipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(receipt->hash().hexPrefixed() == + "0x1ea6ad9487c4a45408908d70478ba23e7354ee8beddb7ecae1c4bcb3c02604dd"); + BOOST_TEST(receipt->contractAddress() == "8968B494F66b2508330B24A7d1caFA06a14f6315"); + BOOST_TEST(*toHexString(receipt->output()) == ""); + BOOST_TEST(receipt->blockNumber() == 1); + auto addressbytes = asString(*fromHexString(string(receipt->contractAddress()))); + auto nonce = executiveContext->getState()->getNonce(addressbytes); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce()); + nonce = executiveContext->getState()->getNonce(sender); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce() + 1); + auto newAddress = string(receipt->contractAddress()); + + // call helloworld get + input = *fromHexString("0x6d4ce63c"); + auto getTx = fakeTransaction(cryptoSuite, keyPair, newAddress, input, 101, 100001, "1", "1"); + receipt = executor->dmcExecuteTransaction(getTx, executive); + BOOST_TEST(receipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(receipt->gasUsed() == 22742); + // std::cout << "##### hash:" << receipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(receipt->hash().hexPrefixed() == + "0xeeef9c8a72141a2d3184509fa21fb5496f59acae2596f0c027747a0a9ffbf38b"); + BOOST_TEST(receipt->contractAddress() == ""); + // Hello, World! == 48656c6c6f2c20576f726c6421 + BOOST_TEST(*toHexString(receipt->output()) == + "00000000000000000000000000000000000000000000000000000000000000200000000000000000000" + "00000000000000000000000000000000000000000000d48656c6c6f2c20576f726c6421000000000000" + "00000000000000000000000000"); + BOOST_TEST(receipt->blockNumber() == 1); + nonce = executiveContext->getState()->getNonce(sender); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce() + 1); + + // call helloworld set fisco + input = *fromHexString( + "0x4ed3885e00000000000000000000000000000000000000000000000000000000000000200000000000000000" + "000000000000000000000000000000000000000000000005666973636f00000000000000000000000000000000" + "0000000000000000000000"); + // cout << "##### newAddress: " << newAddress << endl; + auto setTx = fakeTransaction(cryptoSuite, keyPair, newAddress, input, 101, 100001, "1", "1"); + receipt = executor->dmcExecuteTransaction(setTx, executive); + BOOST_TEST(receipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(receipt->gasUsed() == 30791); + // std::cout << "##### hash:" << receipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(receipt->hash().hexPrefixed() == + "0x92f866a0f12010ed7b8a41b82aece81db64ee1eef4d12619fb5cf401e0b8cdff"); + BOOST_TEST(receipt->contractAddress() == ""); + BOOST_TEST(*toHexString(receipt->output()) == ""); + BOOST_TEST(receipt->blockNumber() == 1); + // get + receipt = executor->dmcExecuteTransaction(getTx, executive); + // Hello, World! == 666973636f + BOOST_TEST(*toHexString(receipt->output()) == + "00000000000000000000000000000000000000000000000000000000000000200000000000000000000" + "000000000000000000000000000000000000000000005666973636f0000000000000000000000000000" + "00000000000000000000000000"); + nonce = executiveContext->getState()->getNonce(sender); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce() + 1); + + executor->dmcExecuteTransaction(tx, executive); + nonce = executiveContext->getState()->getNonce(sender); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce() + 2); + executor->dmcExecuteTransaction(tx, executive); + nonce = executiveContext->getState()->getNonce(sender); + BOOST_TEST(nonce == executiveContext->getState()->accountStartNonce() + 3); +} + +BOOST_AUTO_TEST_CASE(executeBlock) +{ + auto block = blockFactory->createBlock(); + auto header = blockFactory->blockHeaderFactory()->createBlockHeader(1); + header->calculateHash(*cryptoSuite->hashImpl()); + block->setBlockHeader(header); + auto keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e")->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString("ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + auto to = keyPair->address(cryptoSuite->hashImpl()).asBytes(); + auto helloworld = string(helloBin); + auto input = *fromHexString(helloworld); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + block->appendTransaction(tx); + tx = fakeTransaction(cryptoSuite, keyPair, "", input, 102, 100002, "1", "1"); + block->appendTransaction(tx); + auto getTx = + fakeTransaction(cryptoSuite, keyPair, string("8968B494F66b2508330B24A7d1caFA06a14f6315"), + *fromHexString("0x6d4ce63c"), 101, 100001, "1", "1"); + block->appendTransaction(getTx); + block->setBlockType(BlockType::CompleteBlock); + block->blockHeader()->setParentInfo({ParentInfo{100, crypto::HashType()}}); + auto txsRoot = block->blockHeader()->txsRoot(); + auto receiptsRoot = block->blockHeader()->receiptsRoot(); + auto stateRoot = block->blockHeader()->stateRoot(); + BOOST_TEST(block->blockHeader()->gasUsed() == 0); + + // asyncExecuteTransaction should has no affect on state + promise prom; + executor->asyncdmcExecuteTransaction( + tx, [&prom](const Error::Ptr& err, const protocol::TransactionReceipt::ConstPtr&) { + prom.set_value(err); + }); + prom.get_future().get(); + + // execute block + auto parentHeader = blockFactory->blockHeaderFactory()->createBlockHeader(0); + auto result = executor->executeBlock(block); + auto deployReceipt = block->receipt(0); + BOOST_TEST(deployReceipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(deployReceipt->gasUsed() == 430575); + // std::cout << "##### hash:" << deployReceipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(deployReceipt->hash().hexPrefixed() == + "0x1ea6ad9487c4a45408908d70478ba23e7354ee8beddb7ecae1c4bcb3c02604dd"); + BOOST_TEST(deployReceipt->contractAddress() == "8968B494F66b2508330B24A7d1caFA06a14f6315"); + BOOST_TEST(*toHexString(deployReceipt->output()) == ""); + BOOST_TEST(deployReceipt->blockNumber() == 1); + + deployReceipt = block->receipt(1); + BOOST_TEST(deployReceipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(deployReceipt->gasUsed() == 430575); + // std::cout << "##### hash:" << deployReceipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(deployReceipt->hash().hexPrefixed() == + "0xadbaadfd1f16d7f44248cff9a09add0b1cbbf83e2265094a7d79f444941ffb88"); + BOOST_TEST(deployReceipt->contractAddress() == "21f7F2c888221d771e103CB2E56A7Da15a2d898e"); + BOOST_TEST(*toHexString(deployReceipt->output()) == ""); + BOOST_TEST(deployReceipt->blockNumber() == 1); + + auto getReceipt = block->receipt(2); + BOOST_TEST(getReceipt->status() == (int32_t)TransactionStatus::None); + BOOST_TEST(getReceipt->gasUsed() == 22742); + + // std::cout << "##### hash:" << getReceipt->hash().hexPrefixed() << std::endl; + BOOST_TEST(getReceipt->hash().hexPrefixed() == + "0xeeef9c8a72141a2d3184509fa21fb5496f59acae2596f0c027747a0a9ffbf38b"); + BOOST_TEST(getReceipt->contractAddress() == ""); + // Hello, World! == 48656c6c6f2c20576f726c6421 + BOOST_TEST(*toHexString(getReceipt->output()) == + "00000000000000000000000000000000000000000000000000000000000000200000000000000000000" + "00000000000000000000000000000000000000000000d48656c6c6f2c20576f726c6421000000000000" + "00000000000000000000000000"); + BOOST_TEST(getReceipt->blockNumber() == 1); + + // TODO: check block + BOOST_TEST(block->blockType() == BlockType::CompleteBlock); + BOOST_TEST(block->blockHeader()->gasUsed() == 883892); + BOOST_TEST(txsRoot == block->blockHeader()->txsRoot()); + BOOST_TEST(receiptsRoot != block->blockHeader()->receiptsRoot()); + BOOST_TEST(block->blockHeader()->stateRoot() != stateRoot); + + // std::cout << "##### receiptsRoot:" << block->blockHeader()->receiptsRoot().hexPrefixed() << + // std::endl; std::cout << "##### stateRoot:" << block->blockHeader()->stateRoot().hexPrefixed() + // << std::endl; + + BOOST_TEST(block->blockHeader()->receiptsRoot().hexPrefixed() == + "0x07e51cac5e5869abc628c8f95db66a54a8917152e5ea6b48b75f9c381426bcb7"); + BOOST_TEST(block->blockHeader()->stateRoot().hexPrefixed() == + "0x21dab5dd8587fc014a29aaa96aa6ba93911fe84f05b1c7c4402c54303e73941b"); + BOOST_TEST(block->blockHeader()->stateRoot().hexPrefixed() == + result->getTableFactory()->hash().hexPrefixed()); +} + + +BOOST_AUTO_TEST_CASE(start_stop) +{ + executor = make_shared(blockFactory, dispatcher, ledger, storage, true); + executor->start(); + executor->stop(); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/old/mock/MemoryStorage.h b/bcos-executor/test/old/mock/MemoryStorage.h new file mode 100644 index 0000000..010a3b4 --- /dev/null +++ b/bcos-executor/test/old/mock/MemoryStorage.h @@ -0,0 +1,307 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief the storage implement in memory + * @file MemoryStorage.h + * @author: xingqiangbai + * @date: 2021-06-09 + */ + +#pragma once + +#include "bcos-framework/storage/StorageInterface.h" +#include +#include + +namespace bcos +{ +namespace storage +{ +class MemoryStorage : public StorageInterface +{ +public: + typedef std::shared_ptr Ptr; + MemoryStorage() { data[storage::SYS_TABLE] = std::map(); } + virtual ~MemoryStorage() = default; + + std::vector getPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition) const override + { + std::vector ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& kv : data.at(_tableInfo->name)) + { + if (!_condition || _condition->isValid(kv.first)) + { + ret.emplace_back(kv.first); + } + } + } + return ret; + } + std::shared_ptr getRow( + const std::shared_ptr& _tableInfo, const std::string_view& _key) override + { + std::shared_ptr ret = nullptr; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + if (data[_tableInfo->name].count(std::string(_key))) + { + return data[_tableInfo->name][std::string(_key)]; + } + } + return ret; + } + std::map> getRows( + const std::shared_ptr& _tableInfo, + const std::vector& _keys) override + { + std::map> ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& key : _keys) + { + if (data[_tableInfo->name].count(std::string(key))) + { + ret[key] = data[_tableInfo->name][key]; + } + } + } + return ret; + } + std::pair commitBlock(protocol::BlockNumber _number, + const std::vector>& _tableInfos, + const std::vector>>& _tableDatas) override + { + size_t total = 0; + if (_tableInfos.size() != _tableDatas.size()) + { + auto error = std::make_shared(-1, ""); + return {0, error}; + } + std::shared_ptr stateTableFactory = nullptr; + if (_number != 0) + { + if (m_number2TableFactory.count(_number)) + { + stateTableFactory = m_number2TableFactory[_number]; + } + else + { + return {0, std::make_shared(StorageErrorCode::StateCacheNotFound, + std::to_string(_number) + "state cache not found")}; + } + auto stateData = stateTableFactory->exportData(); + stateData.first.insert(stateData.first.end(), _tableInfos.begin(), _tableInfos.end()); + stateData.second.insert(stateData.second.end(), _tableDatas.begin(), _tableDatas.end()); + std::lock_guard lock(m_mutex); + for (size_t i = 0; i < stateData.first.size(); ++i) + { + for (auto& item : *stateData.second[i]) + { + if (item.second->getStatus() == Entry::Status::NORMAL) + { + data[stateData.first[i]->name][item.first] = item.second; + ++total; + } + } + } + } + else + { + std::lock_guard lock(m_mutex); + for (size_t i = 0; i < _tableInfos.size(); ++i) + { + for (auto& item : *_tableDatas[i]) + { + if (item.second->getStatus() == Entry::Status::NORMAL) + { + data[_tableInfos[i]->name][item.first] = item.second; + ++total; + } + } + } + } + return {total, nullptr}; + } + + void asyncGetPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition, + std::function&)> _callback) override + { + auto keyList = getPrimaryKeys(_tableInfo, _condition); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, keyList); + } + + void asyncGetRow(const TableInfo::Ptr& _tableInfo, const std::string_view& _key, + std::function _callback) override + { + auto entry = getRow(_tableInfo, _key); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, entry); + } + void asyncGetRows(const std::shared_ptr& _tableInfo, + const std::shared_ptr>& _keyList, + std::function&)> _callback) + override + { + auto rowMap = getRows(_tableInfo, *_keyList); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, rowMap); + } + + void asyncCommitBlock(protocol::BlockNumber _number, + const std::shared_ptr>>& _tableInfo, + const std::shared_ptr>>>& + _tableMap, + std::function _callback) override + { + auto retPair = commitBlock(_number, *_tableInfo, *_tableMap); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, retPair.first); + } + + // cache StateStorage + void asyncAddStateCache(protocol::BlockNumber _number, + const std::shared_ptr& _table, + std::function _callback) override + { + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + addStateCache(_number, _table); + _callback(nullptr); + } + void asyncDropStateCache(protocol::BlockNumber, std::function) override + {} + void asyncGetStateCache(protocol::BlockNumber _blockNumber, + std::function&)> + _callback) override + { + auto tableFactory = getStateCache(_blockNumber); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, tableFactory); + } + + std::shared_ptr getStateCache( + protocol::BlockNumber _blockNumber) override + { + if (m_number2TableFactory.count(_blockNumber)) + { + return m_number2TableFactory[_blockNumber]; + } + return nullptr; + } + + void dropStateCache(protocol::BlockNumber) override {} + void addStateCache(protocol::BlockNumber _blockNumber, + const std::shared_ptr& _tableFactory) override + { + m_number2TableFactory[_blockNumber] = _tableFactory; + } + // KV store in split database, used to store data off-chain + Error::Ptr put( + const std::string_view&, const std::string_view&, const std::string_view&) override + { + return nullptr; + } + std::pair get( + const std::string_view&, const std::string_view&) override + { + return {"", nullptr}; + } + Error::Ptr remove(const std::string_view&, const std::string_view&) override { return nullptr; } + + void asyncPut(const std::string_view& _columnFamily, const std::string_view& _key, + const std::string_view& _value, std::function _callback) override + { + auto key = getKey(_columnFamily, _key); + m_key2Data[key] = _value; + _callback(nullptr); + } + + void asyncRemove(const std::string_view& _columnFamily, const std::string_view& _key, + std::function _callback) override + { + auto key = getKey(_columnFamily, _key); + if (!m_key2Data.count(key)) + { + _callback(std::make_shared(StorageErrorCode::NotFound, "key NotFound")); + return; + } + m_key2Data.erase(key); + _callback(nullptr); + } + + void asyncGet(const std::string_view& _columnFamily, const std::string_view& _key, + std::function _callback) override + { + auto key = getKey(_columnFamily, _key); + if (!m_key2Data.count(key)) + { + _callback(std::make_shared(StorageErrorCode::NotFound, "key NotFound"), ""); + return; + } + _callback(nullptr, m_key2Data[key]); + } + + void asyncGetBatch(const std::string_view& _columnFamily, + const std::shared_ptr>& _keys, + std::function>&)> + callback) override + { + auto result = std::make_shared>(); + for (auto const& _key : *_keys) + { + auto key = getKey(_columnFamily, _key); + if (!m_key2Data.count(key)) + { + result->push_back(""); + continue; + } + result->push_back(m_key2Data[key]); + } + callback(nullptr, result); + } + + +protected: + std::string getKey(const std::string_view& _columnFamily, const std::string_view& _key) + { + std::string columnFamily(_columnFamily.data(), _columnFamily.size()); + std::string key(_key.data(), _key.size()); + return columnFamily + "_" + key; + } + + std::map m_key2Data; + +private: + std::map> data; + mutable std::mutex m_mutex; + std::map m_number2TableFactory; +}; + +} // namespace storage + +} // namespace bcos diff --git a/bcos-executor/test/old/mock/MockDispatcher.h b/bcos-executor/test/old/mock/MockDispatcher.h new file mode 100644 index 0000000..b3e3e2a --- /dev/null +++ b/bcos-executor/test/old/mock/MockDispatcher.h @@ -0,0 +1,94 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief mock the Dispatcher + * @file MockDispatcher.h + * @author: xingqiangbai + * @date 2021-06-09 + + */ +#pragma once +#include "bcos-framework/dispatcher/DispatcherInterface.h" +#include + +using namespace bcos; +using namespace bcos::dispatcher; +using namespace bcos::protocol; + +namespace bcos +{ +namespace test +{ +class MockDispatcher : public DispatcherInterface +{ +public: + using Ptr = std::shared_ptr; + MockDispatcher() = default; + ~MockDispatcher() override {} + + void asyncExecuteBlock(const Block::Ptr& _block, bool, + std::function _callback, ssize_t) override + { + if (m_blocks.empty()) + { + m_blocks.push_back(_block); + _callback(nullptr, _block->blockHeader()); + return; + } + auto latestBlock = m_blocks[m_blocks.size() - 1]; + if (_block->blockHeader()->number() != latestBlock->blockHeader()->number() + 1) + { + _callback(std::make_shared(-1, "invalid block for not consistent"), nullptr); + return; + } + std::vector parentList; + if (_block->blockHeader()->parentInfo().size() == 0) + { + parentList.push_back(ParentInfo{ + latestBlock->blockHeader()->number(), latestBlock->blockHeader()->hash()}); + _block->blockHeader()->setParentInfo(parentList); + } + m_blocks.push_back(_block); + _callback(nullptr, _block->blockHeader()); + } + + void asyncGetLatestBlock( + std::function _callback) override + { + if (m_blocks.empty()) + { + _callback(std::make_shared(-1, "no new block"), nullptr); + } + _callback(nullptr, m_blocks.front()); + } + + void asyncNotifyExecutionResult(const Error::Ptr&, bcos::crypto::HashType const&, + const std::shared_ptr& _header, + std::function) override + { + // the process it in order + m_blockHeaders[_header->number()] = _header; + m_blocks.erase(m_blocks.begin()); + } + + void stop() override {} + void start() override {} + +private: + std::vector m_blocks; + std::map m_blockHeaders; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/test/old/mock/MockLedger.h b/bcos-executor/test/old/mock/MockLedger.h new file mode 100644 index 0000000..19077a9 --- /dev/null +++ b/bcos-executor/test/old/mock/MockLedger.h @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief mock ledger + * @file MockLedger.h + * @author: xingqiangbai + * @date: 2021-06-09 + */ + +#pragma once + +#include "bcos-framework/testutils/faker/FakeLedger.h" +#include +#include + +namespace bcos +{ +namespace test +{ +class MockLedger : public FakeLedger +{ +public: + typedef std::shared_ptr Ptr; + MockLedger(protocol::BlockHeader::Ptr _header, protocol::BlockFactory::Ptr _blockFactory) + : m_number(_header->number()), m_blockHeader(_header), blockFactory(_blockFactory) + {} + virtual ~MockLedger() = default; + + // maybe sync module or rpc module need this interface to return header/txs/receipts + + void asyncGetBlockDataByNumber(BlockNumber _number, int32_t, + std::function _callback) override + { + if (_number < 1000) + { + auto block = blockFactory->createBlock(); + auto header = blockFactory->blockHeaderFactory()->createBlockHeader(_number); + header->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + block->setBlockHeader(header); + _callback(nullptr, block); + } + else + { + _callback(std::make_shared(-1, "failed"), nullptr); + } + } + + void asyncGetBlockNumber(std::function _onGetBlock) override + { + _onGetBlock(nullptr, m_number); + } + +protected: + protocol::BlockNumber m_number; + BlockHeader::Ptr m_blockHeader; + protocol::BlockFactory::Ptr blockFactory; +}; + +} // namespace test + +} // namespace bcos diff --git a/bcos-executor/test/solidity/ParallelOk.sol b/bcos-executor/test/solidity/ParallelOk.sol new file mode 100644 index 0000000..5d97052 --- /dev/null +++ b/bcos-executor/test/solidity/ParallelOk.sol @@ -0,0 +1,31 @@ +pragma solidity ^0.4.25; + +contract ParallelOk +{ + mapping (string => uint256) _balance; + + // Just an example, overflow is ok, use 'SafeMath' if needed + function transfer(string from, string to, uint256 num) public + { + _balance[from] -= num; + _balance[to] += num; + } + + // Just for testing whether the parallel revert function is working well, no practical use + function transferWithRevert(string from, string to, uint256 num) public + { + _balance[from] -= num; + _balance[to] += num; + require(num <= 100); + } + + function set(string name, uint256 num) public + { + _balance[name] = num; + } + + function balanceOf(string name) public view returns (uint256) + { + return _balance[name]; + } +} \ No newline at end of file diff --git a/bcos-executor/test/solidity/TestEvmPrecompiled.sol b/bcos-executor/test/solidity/TestEvmPrecompiled.sol new file mode 100644 index 0000000..cc717af --- /dev/null +++ b/bcos-executor/test/solidity/TestEvmPrecompiled.sol @@ -0,0 +1,282 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; + +contract TestEvmPrecompiled { + event callGasUsed(uint256); + + function keccak256Test(bytes memory b) public returns (bytes32 result) { + uint256 gasLeft1 = gasleft(); + result = keccak256(b); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed > 0, "gasleft check error"); + } + + // 0x01 + function ecRecoverTest( + bytes32 _hash, + uint8 _v, + bytes32 _r, + bytes32 _s + ) public returns (address pub) { + uint256 gasLeft1 = gasleft(); + pub = ecrecover(_hash, _v, _r, _s); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 3000, "gasleft check error"); + } + + // 0x02 + function sha256Test(bytes memory b) public returns (bytes32 result) { + uint256 gasLeft1 = gasleft(); + result = sha256(b); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 60, "gasleft check error"); + } + + // 0x03 + function ripemd160Test(bytes memory b) public returns (bytes32 result) { + uint256 gasLeft1 = gasleft(); + result = ripemd160(b); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 600, "gasleft check error"); + } + + // 0x04 + function callDatacopy(bytes memory data) public returns (bytes memory) { + bytes memory ret = new bytes(data.length); + uint256 gasLeft1 = gasleft(); + assembly { + let len := mload(data) + if iszero( + call(gas(), 0x04, 0, add(data, 0x20), len, add(ret, 0x20), len) + ) { + invalid() + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 15, "gasleft check error"); + return ret; + } + + // 0x05 + function callBigModExp( + bytes32 base, + bytes32 exponent, + bytes32 modulus + ) public returns (bytes32 result) { + uint256 gasLeft1 = gasleft(); + assembly { + // free memory pointer + let memPtr := mload(0x40) + + // length of base, exponent, modulus + mstore(memPtr, 0x20) + mstore(add(memPtr, 0x20), 0x20) + mstore(add(memPtr, 0x40), 0x20) + + // assign base, exponent, modulus + mstore(add(memPtr, 0x60), base) + mstore(add(memPtr, 0x80), exponent) + mstore(add(memPtr, 0xa0), modulus) + + // call the precompiled contract BigModExp (0x05) + let success := call(gas(), 0x05, 0x0, memPtr, 0xc0, memPtr, 0x20) + switch success + case 0 { + revert(0x0, 0x0) + } + default { + result := mload(memPtr) + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 100000, "gasleft check error"); + } + + // 0x06 + function callBn256Add( + bytes32 ax, + bytes32 ay, + bytes32 bx, + bytes32 by + ) public returns (bytes32[2] memory result) { + bytes32[4] memory input; + input[0] = ax; + input[1] = ay; + input[2] = bx; + input[3] = by; + uint256 gasLeft1 = gasleft(); + assembly { + let success := call(gas(), 0x06, 0, input, 0x80, result, 0x40) + switch success + case 0 { + revert(0, 0) + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 150, "gasleft check error"); + } + + // 0x07 + function callBn256ScalarMul( + bytes32 x, + bytes32 y, + bytes32 scalar + ) public returns (bytes32[2] memory result) { + bytes32[3] memory input; + input[0] = x; + input[1] = y; + input[2] = scalar; + uint256 gasLeft1 = gasleft(); + assembly { + let success := call(gas(), 0x07, 0, input, 0x60, result, 0x40) + switch success + case 0 { + revert(0, 0) + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 6000, "gasleft check error"); + } + + // 0x08 + function callBn256Pairing(bytes memory input) + public + returns (bytes32 result) + { + // input is a serialized bytes stream of (a1, b1, a2, b2, ..., ak, bk) from (G_1 x G_2)^k + uint256 len = input.length; + require(len % 192 == 0); + uint256 gasLeft1 = gasleft(); + assembly { + let memPtr := mload(0x40) + let success := call( + gas(), + 0x08, + 0, + add(input, 0x20), + len, + memPtr, + 0x20 + ) + switch success + case 0 { + revert(0, 0) + } + default { + result := mload(memPtr) + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 100000, "gasleft check error"); + } + + // 0x09 + function callBlake2F( + uint32 rounds, + bytes32[2] memory h, + bytes32[4] memory m, + bytes8[2] memory t, + bool f + ) public returns (bytes32[2] memory) { + bytes32[2] memory output; + + bytes memory args = abi.encodePacked( + rounds, + h[0], + h[1], + m[0], + m[1], + m[2], + m[3], + t[0], + t[1], + f + ); + uint256 gasLeft1 = gasleft(); + assembly { + if iszero( + staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40) + ) { + revert(0, 0) + } + } + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 100000, "gasleft check error"); + return output; + } + + function addmodTest( + uint256 x, + uint256 y, + uint256 k + ) public returns (uint256) { + uint256 gasLeft1 = gasleft(); + uint256 result = addmod(x, y, k); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + emit callGasUsed(gasUsed); + require(gasUsed <= 10000 && gasUsed >= 0, "gasleft check error"); + return result; + } + + function mulmodTest( + uint256 x, + uint256 y, + uint256 k + ) public view returns (uint256) { + uint256 gasLeft1 = gasleft(); + uint256 result = mulmod(x, y, k); + uint256 gasLeft2 = gasleft(); + uint256 gasUsed = gasLeft1 - gasLeft2; + require(gasUsed <= 10000 && gasUsed >= 0, "gasleft check error"); + return result; + } + + function gasLimitTest() public view returns (uint256) { + return block.gaslimit; + } + + function numberTest() public view returns (uint256) { + return block.number; + } + + function timeStampTest() public view returns (uint256) { + return block.timestamp; + } + + function callDataTest() public view returns (bytes memory) { + return msg.data; + } + + function senderTest() public returns (address) { + return msg.sender; + } + + function originTest() public returns (address) { + return tx.origin; + } + + function blockHashTest(uint256 blockNumber) public view returns (bytes32) { + return blockhash(blockNumber); + } +} diff --git a/bcos-executor/test/solidity/precompiled/ConsensusPrecompiled.sol b/bcos-executor/test/solidity/precompiled/ConsensusPrecompiled.sol new file mode 100644 index 0000000..a01b9d9 --- /dev/null +++ b/bcos-executor/test/solidity/precompiled/ConsensusPrecompiled.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.6.0; + +contract ConsensusPrecompiled { + function addSealer(string memory,uint256) public returns (int32){} + function addObserver(string memory) public returns (int32){} + function remove(string memory) public returns (int32){} + function setWeight(string memory,uint256) public returns (int32){} +} diff --git a/bcos-executor/test/solidity/precompiled/Crypto.sol b/bcos-executor/test/solidity/precompiled/Crypto.sol new file mode 100644 index 0000000..45f5e2d --- /dev/null +++ b/bcos-executor/test/solidity/precompiled/Crypto.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.6.10 <0.8.20; +pragma experimental ABIEncoderV2; + +abstract contract Crypto +{ + function sm3(bytes memory data) public view returns(bytes32){} + function keccak256Hash(bytes memory data) public view returns(bytes32){} + function sm2Verify(bytes32 message, bytes memory publicKey, bytes32 r, bytes32 s) public view returns(bool, address){} + function curve25519VRFVerify(bytes memory message, bytes memory publicKey, bytes memory proof) public view returns(bool, uint256){} +} \ No newline at end of file diff --git a/bcos-executor/test/solidity/precompiled/SystemConfigPrecompiled.sol b/bcos-executor/test/solidity/precompiled/SystemConfigPrecompiled.sol new file mode 100644 index 0000000..9168fc7 --- /dev/null +++ b/bcos-executor/test/solidity/precompiled/SystemConfigPrecompiled.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.6.0; + +contract SystemConfigPrecompiled +{ + function setValueByKey(string memory key, string memory value) public returns(int32){} + function getValueByKey(string memory key) public view returns(string memory,int256){} +} diff --git a/bcos-executor/test/solidity/test_config.sol b/bcos-executor/test/solidity/test_config.sol new file mode 100644 index 0000000..f1c0603 --- /dev/null +++ b/bcos-executor/test/solidity/test_config.sol @@ -0,0 +1,56 @@ +pragma solidity ^0.4.25; + +import "./precompiled/ConsensusPrecompiled.sol"; +import "./precompiled/SystemConfigPrecompiled.sol"; +import "./precompiled/ParallelConfigPrecompiled.sol"; + +contract TestConsensusPrecompiled { + ConsensusPrecompiled consensus; + constructor () public { + consensus = ConsensusPrecompiled(0x1003); + } + + function addSealerTest(string nodeId, uint256 weight) returns (int256){ + return consensus.addSealer(nodeId, weight); + } + + function addObserverTest(string nodeId) returns (int256){ + return consensus.addObserver(nodeId); + } + + function removeTest(string nodeId) returns (int256){ + return consensus.remove(nodeId); + } + + function setWeightTest(string nodeId, uint256 weight) returns (int256){ + return consensus.setWeight(nodeId, weight); + } +} + +contract TestSysConfig { + SystemConfigPrecompiled sys; + constructor () public { + sys = SystemConfigPrecompiled(0x1000); + } + function setValueByKeyTest(string key, string value) public returns (int256){ + return sys.setValueByKey(key, value); + } + + function getValueByKeyTest(string key) public returns (string, int256){ + return sys.getValueByKey(key); + } +} + +contract TestParaConfig { + ParallelConfigPrecompiled parallel; + constructor() public { + parallel = ParallelConfigPrecompiled(0x1006); + } + function registerParallelFunctionInternal(address selector, string func, uint256 size) public returns (int256){ + return parallel.registerParallelFunctionInternal(selector, func, size); + } + + function unregisterParallelFunctionInternal(address selector, string func) public returns (int256){ + return parallel.unregisterParallelFunctionInternal(selector, func); + } +} \ No newline at end of file diff --git a/bcos-executor/test/solidity/test_crypto.sol b/bcos-executor/test/solidity/test_crypto.sol new file mode 100644 index 0000000..cfb1bc0 --- /dev/null +++ b/bcos-executor/test/solidity/test_crypto.sol @@ -0,0 +1,31 @@ +pragma solidity ^0.6.0; + +import "./precompiled/Crypto.sol"; + +contract TestCrypto { + Crypto crypto; + constructor () public { + crypto = Crypto(0x100a); + } + function sm3(bytes memory data) public view returns (bytes32){ + return crypto.sm3(data); + } + + function keccak256Hash(bytes memory data) public view returns (bytes32){ + return crypto.keccak256Hash(data); + } + + function sm2Verify(bytes32 message, bytes memory publicKey, bytes32 r, bytes32 s) public view returns (bool, address){ + return crypto.sm2Verify(message, publicKey, r, s); + } + + function getSha256(bytes memory _memory) public returns(bytes32 result) + { + return sha256(_memory); + } + + function getKeccak256(bytes memory _memory) public returns(bytes32 result) + { + return keccak256(_memory); + } +} \ No newline at end of file diff --git a/bcos-executor/test/solidity/test_external_call.sol b/bcos-executor/test/solidity/test_external_call.sol new file mode 100644 index 0000000..a8954d8 --- /dev/null +++ b/bcos-executor/test/solidity/test_external_call.sol @@ -0,0 +1,33 @@ + +pragma solidity ^0.6.0; + +contract B { + + event LogCreateB(int value); + event LogIncrement(int value); + constructor(int value) public { + m_value = value; + emit LogCreateB(value); + } + + function value() public view returns(int) { + return m_value; + } + + function incValue() public { + ++m_value; + emit LogIncrement(m_value); + } + + int m_value; +} + +contract A { + B b; + event LogCallB(int value); + function createAndCallB (int amount) public returns(int) { + b = new B(amount); + emit LogCallB(amount); + return b.value(); + } +} diff --git a/bcos-executor/test/trie-test/CMakeLists.txt b/bcos-executor/test/trie-test/CMakeLists.txt new file mode 100644 index 0000000..baadbdd --- /dev/null +++ b/bcos-executor/test/trie-test/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable(trie-test main.cpp) +target_include_directories(trie-test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../src/dag/) +# target_link_libraries(trie-test PUBLIC executor TBB::tbb) + diff --git a/bcos-executor/test/trie-test/main.cpp b/bcos-executor/test/trie-test/main.cpp new file mode 100644 index 0000000..5340482 --- /dev/null +++ b/bcos-executor/test/trie-test/main.cpp @@ -0,0 +1,80 @@ +#include "../../src/dag/TrieSet.h" +#include +#include +#include + +using namespace std; +using namespace bcos::executor; + +int main() { + TrieSet trie; + + vector root = {"1", "2"}; + //vector root = {"1", "2", "8"}; + + vector path1 = {"1", "2","4"}; + trie.set(path1, 4); + + vector path2 = {"1", "2", "5"}; + trie.set(path2, 5); + + vector path3 = {"1", "3", "6"}; + trie.set(path3, 6); + + vector path4 = {"1", "2", "5", "7"}; + trie.set(path4, 7); + + for(auto v : trie.get(root)) { + cout << v << " "; + } + return 0; +} + +int main1() { + TrieSet trie; + + vector root = {"1", "2"}; + + vector path1 = {"1", "2","4"}; + trie.set(path1, 4); + + vector path2 = {"1", "2", "5"}; + trie.set(path2, 5); + + vector path3 = {"1", "3", "6"}; + trie.set(path3, 6); + + vector path4 = {"1", "2", "5", "7"}; + trie.set(path4, 7); + + for(auto v : trie.get(root)) { + cout << v << " "; + } + return 0; +} + +int main2() { + TrieSet trie; + + vector root = {}; + + for (int i = 0; i < 100; i++) { + vector path = {i / 10, i % 10}; + trie.set(path, i); + } + + for(auto v : trie.get(root)) { + cout << v << " "; + } + cout << endl; + + vector path = {2}; + trie.set(path, 666); + + for(auto v : trie.get(root)) { + cout << v << " "; + } + cout << endl; + + return 0; +} \ No newline at end of file diff --git a/bcos-executor/test/unittest/CMakeLists.txt b/bcos-executor/test/unittest/CMakeLists.txt new file mode 100644 index 0000000..e273c82 --- /dev/null +++ b/bcos-executor/test/unittest/CMakeLists.txt @@ -0,0 +1,26 @@ +if(WITH_WASM) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libvm/WasmPath.h.in ${CMAKE_CURRENT_SOURCE_DIR}/libvm/WasmPath.h @ONLY) +endif() +file(GLOB_RECURSE SOURCES "*.cpp" "*.h") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-executor) + +add_executable(${TEST_BINARY_NAME} ${SOURCES} libprecompiled/PrecompiledCallTest.cpp) +target_include_directories(${TEST_BINARY_NAME} PRIVATE ./ ../../src ../../include) + +find_package(Boost REQUIRED unit_test_framework) +find_package(TBB CONFIG REQUIRED) +include(SearchTestCases) + +target_link_libraries(${TEST_BINARY_NAME} ${EXECUTOR_TARGET} ${CRYPTO_TARGET} ${TARS_PROTOCOL_TARGET} ${PROTOCOL_TARGET} bcos-framework Boost::serialization Boost::unit_test_framework) +target_compile_options(${TEST_BINARY_NAME} PRIVATE -fno-var-tracking -Wno-unused-parameter) +#add_test(NAME test-executor WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND $) +config_test_cases("" "${SOURCES}" ${TEST_BINARY_NAME} "") + + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("executor-coverage" "'/usr*' 'boost/**' 'deps/**'") +endif () diff --git a/bcos-executor/test/unittest/container/TestHashMap.cpp b/bcos-executor/test/unittest/container/TestHashMap.cpp new file mode 100644 index 0000000..d1b9240 --- /dev/null +++ b/bcos-executor/test/unittest/container/TestHashMap.cpp @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::test +{ +struct HashMapFixture +{ + HashMapFixture() + { + keys.resize(count); + for (size_t i = 0; i < count; ++i) + { + keys[i] = boost::lexical_cast(i); + } + } + + std::vector keys; + size_t count = 100 * 1000; +}; + +struct KeyType +{ + KeyType(std::string_view key) : m_key(std::move(key)) {} + KeyType(std::string key) : m_key(std::move(key)) {} + + std::string_view key() const + { + std::string_view view; + std::visit([&view](auto&& key) { view = std::string_view(key); }, m_key); + + return view; + } + + bool operator==(const KeyType& rhs) const { return key() == rhs.key(); } + + std::variant m_key; +}; + +struct KeyTypeHasher +{ + size_t hash(const KeyType& key) const { return hasher(key.key()); } + bool equal(const KeyType& lhs, const KeyType& rhs) const { return lhs.key() == rhs.key(); } + + std::hash hasher; +}; + +struct KeyTypeHasherForUnordered +{ + size_t operator()(const KeyType& key) const { return hasher(key.key()); } + + std::hash hasher; +}; + +BOOST_FIXTURE_TEST_SUITE(TestHashMap, HashMapFixture) + +BOOST_AUTO_TEST_CASE(hashmap) +{ + tbb::concurrent_hash_map map; + + auto now = std::chrono::system_clock::now(); + for (auto& it : keys) + { + map.emplace(std::move(it), 0); + } + + auto elapsed = std::chrono::duration_cast( + std::chrono::system_clock::now() - now); + std::cout << "hashmap elapsed: " << elapsed.count() << std::endl; +} + +BOOST_AUTO_TEST_CASE(unorderedmap) +{ + tbb::concurrent_unordered_map map; + + auto now = std::chrono::system_clock::now(); + for (auto& it : keys) + { + map.emplace(std::move(it), 0); + } + + auto elapsed = std::chrono::duration_cast( + std::chrono::system_clock::now() - now); + std::cout << "unorderedmap elapsed: " << elapsed.count() << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libexecutor/TestAbiReader.cpp b/bcos-executor/test/unittest/libexecutor/TestAbiReader.cpp new file mode 100644 index 0000000..078eb15 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestAbiReader.cpp @@ -0,0 +1,246 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for abi reader + * @author: catli + * @date: 2021-09-26 + */ + +#include "../src/dag/Abi.h" +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +struct AbiReaderFixture +{ + AbiReaderFixture() { hashImpl = std::make_shared(); } + + Hash::Ptr hashImpl; +}; + +BOOST_FIXTURE_TEST_SUITE(TestAbiReader, AbiReaderFixture) + +BOOST_AUTO_TEST_CASE(NormalCase) +{ + auto abiStr = R"( + [ + { + "inputs":[ + { + "components":[ + { + "internalType":"string", + "name":"name", + "type":"string" + }, + { + "internalType":"uint32", + "name":"price", + "type":"uint32" + }, + { + "internalType":"uint128", + "name":"count", + "type":"uint128" + } + ], + "internalType":"struct.Product[]", + "name":"init_products", + "type":"tuple[]" + } + ], + "type":"constructor" + }, + { + "conflictFields":[ + { + "kind":0, + "value":[ + + ], + "read_only":true, + "slot":0 + }, + { + "kind":4, + "value":[ + 0, 1, 2 + ], + "read_only":false, + "slot":1 + } + ], + "constant":false, + "inputs":[ + { + "components":[ + { + "internalType":"string", + "name":"name", + "type":"string" + }, + { + "internalType":"uint32", + "name":"price", + "type":"uint32" + }, + { + "internalType":"uint128", + "name":"count", + "type":"uint128" + } + ], + "internalType":"struct.Product[]", + "name":"prods", + "type":"tuple[]" + } + ], + "selector": [352741043,0], + "name":"add_prod_batch", + "outputs":[ + + ], + "type":"function" + }, + { + "constant":true, + "inputs":[ + + ], + "name":"admin", + "outputs":[ + { + "internalType":"string", + "type":"string" + } + ], + "selector": [352741043,0], + "type":"function" + } + ] + )"sv; + + auto result = FunctionAbi::deserialize(abiStr, *fromHexString("150666b3"), false); + BOOST_CHECK(result.get() != nullptr); + BOOST_CHECK_EQUAL(result->inputs.size(), 1); + + auto& input = result->inputs[0]; + BOOST_CHECK_EQUAL(input.type, "tuple[]"); + BOOST_CHECK_EQUAL(input.components.size(), 3); + BOOST_CHECK_EQUAL(input.components[0].type, "string"); + BOOST_CHECK_EQUAL(input.components[1].type, "uint32"); + BOOST_CHECK_EQUAL(input.components[2].type, "uint128"); + + auto& conflictFields = result->conflictFields; + BOOST_CHECK_EQUAL(conflictFields.size(), 2); + BOOST_CHECK_EQUAL(conflictFields[0].kind, 0); + + auto accessPath = vector{}; + BOOST_CHECK(std::equal(accessPath.begin(), accessPath.end(), conflictFields[0].value.begin())); + BOOST_CHECK_EQUAL(conflictFields[0].slot.value(), 0); + + accessPath = vector{0, 1, 2}; + cout << conflictFields[1].value.size() << endl; + BOOST_CHECK(std::equal(accessPath.begin(), accessPath.end(), conflictFields[1].value.begin())); + BOOST_CHECK_EQUAL(conflictFields[1].slot.value(), 1); +} + +BOOST_AUTO_TEST_CASE(InvalidAbi) +{ + auto abiStr = "vita"sv; + auto result = FunctionAbi::deserialize(abiStr, *fromHexString("150666b3"), false); + BOOST_CHECK(!result); +} + +BOOST_AUTO_TEST_CASE(InvalidSelector) +{ + auto abiStr = R"( + [ + { + "conflictFields":[ + { + "kind":0, + "value":[ + + ], + "read_only":false, + "slot":0 + } + ], + "constant":false, + "inputs":[ + { + "internalType":"string", + "name":"name", + "type":"string" + } + ], + "name":"set", + "outputs":[ + + ], + "selector": [1322485854,0], + "type":"function" + } + ] + )"sv; + + auto result = FunctionAbi::deserialize(abiStr, *fromHexString("150666b3"), false); + BOOST_CHECK(!result); +} + +BOOST_AUTO_TEST_CASE(EmptyConflictFields) +{ + auto abiStr = R"( + [ + { + "constant":false, + "inputs":[ + { + "internalType":"string", + "name":"name", + "type":"string" + } + ], + "name":"set", + "outputs":[ + + ], + "selector": [1322485854,0], + "type":"function" + } + ] + )"sv; + + auto result = FunctionAbi::deserialize(abiStr, *fromHexString("4ed3885e"), false); + BOOST_CHECK(result.get() != nullptr); + BOOST_CHECK(result->conflictFields.empty()); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/test/unittest/libexecutor/TestBlockContext.cpp b/bcos-executor/test/unittest/libexecutor/TestBlockContext.cpp new file mode 100644 index 0000000..8c70754 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestBlockContext.cpp @@ -0,0 +1,75 @@ +#include "../../../src/executive/BlockContext.h" +#include "../../../src/executive/ExecutiveFactory.h" +#include "../../../src/executive/ExecutiveFlowInterface.h" +#include "../mock/MockExecutiveFlow.h" +#include "../mock/MockLedger.h" +#include "bcos-table/src/StateStorage.h" +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +BOOST_AUTO_TEST_SUITE(TestBlockContext) + +BOOST_AUTO_TEST_CASE(BlockContextTest) +{ + auto codeAddressArr = std::vector{ + "addr0", "addr1", "addr2", "addr3", "addr4", "addr5", "addr6", "addr7", "addr8", "addr9"}; + auto executiveFlowName = std::vector{ + "flow0", "flow1", "flow2", "flow3", "flow4", "flow5", "flow6", "flow7", "flow8", "flow9"}; + + LedgerCache::Ptr ledgerCache = std::make_shared(std::make_shared()); + + BlockContext::Ptr blockContext = std::make_shared( + nullptr, ledgerCache, nullptr, 0, h256(), 0, 0, FiscoBcosSchedule, false, false); + + h256 blockhash = blockContext->hash(); + EXECUTOR_LOG(DEBUG) << blockhash; + BOOST_CHECK(blockContext->storage() == nullptr); + // BOOST_CHECK(blockContext->lastStorage() == nullptr); + BOOST_CHECK(!blockContext->isWasm()); + BOOST_CHECK(!blockContext->isAuthCheck()); + // BOOST_CHECK(blockContext->hash() != nullptr); + BOOST_CHECK_EQUAL(blockContext->number(), 0); + BOOST_CHECK_EQUAL(blockContext->timestamp(), 0); + BOOST_CHECK_EQUAL(blockContext->blockVersion(), 0); + + + for (int i = 0; i < 10; ++i) + { + MockExecutiveFlow::Ptr executiveFlow = + std::make_shared(executiveFlowName[i]); + blockContext->setExecutiveFlow(codeAddressArr[i], executiveFlow); + } + int count = 0; + for (int i = 0; i < 10; ++i) + { + auto executiveFlow = std::dynamic_pointer_cast( + blockContext->getExecutiveFlow(codeAddressArr[i])); + if (executiveFlow->name() == executiveFlowName[i]) + ++count; + } + BOOST_CHECK_EQUAL(count, 10); + blockContext->clear(); + // int count1 = 0; + // for (int i = 0; i < 10; ++i) + // { + // auto executiveFlow = std::dynamic_pointer_cast( + // blockContext->getExecutiveFlow(codeAddressArr[i])); + // if (executiveFlow->name() == executiveFlowName[i]) + // ++count1; + // } + BOOST_CHECK(blockContext->getExecutiveFlow(codeAddressArr[0]) == nullptr); + blockContext->stop(); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestClockCache.cpp b/bcos-executor/test/unittest/libexecutor/TestClockCache.cpp new file mode 100644 index 0000000..a6d6323 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestClockCache.cpp @@ -0,0 +1,155 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for clock tinyCache implementation + * @author: catli + * @date: 2021-09-26 + */ + +#include "../src/dag/ClockCache.h" +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +struct ClockCacheFixture +{ + ClockCacheFixture() + { + // The capacity of this tinyCache is 1. + // The num of shard of this tinyCache is 1. + tinyCache = make_shared>(1, 0); + + bigCache = make_shared>(64, 6); + } + + shared_ptr> tinyCache; + shared_ptr> bigCache; +}; + + +BOOST_FIXTURE_TEST_SUITE(TestClockCache, ClockCacheFixture) + +BOOST_AUTO_TEST_CASE(InsertSameKey) +{ + BOOST_CHECK_EQUAL(tinyCache->insert(1, new int(1)), true); + BOOST_CHECK_EQUAL(tinyCache->insert(1, new int(2)), true); + auto handle = tinyCache->lookup(1); + BOOST_CHECK(handle.isValid()); + BOOST_CHECK_EQUAL(handle.value(), 2); +} + +BOOST_AUTO_TEST_CASE(HitAndMiss) +{ + auto handle = tinyCache->lookup(100); + BOOST_CHECK(!handle.isValid()); + + BOOST_CHECK_EQUAL(tinyCache->insert(100, new int(101)), true); + handle = tinyCache->lookup(100); + BOOST_CHECK(handle.isValid()); + BOOST_CHECK_EQUAL(handle.value(), 101); + handle = tinyCache->lookup(200); + BOOST_CHECK(!handle.isValid()); + handle = tinyCache->lookup(300); + BOOST_CHECK(!handle.isValid()); + + handle = tinyCache->lookup(100); + BOOST_CHECK(handle.isValid()); + // For now, the tinyCache is full and the item in it cannot be + // replaced due to `handle` reference to it. + BOOST_CHECK_EQUAL(tinyCache->insert(200, new int(201)), false); + // Releases tinyCache handle manually, now tinyCache has enough space + // to insert a new entry. + handle.release(); + BOOST_CHECK_EQUAL(tinyCache->insert(200, new int(201)), true); + handle = tinyCache->lookup(100); + BOOST_CHECK(!handle.isValid()); + handle = tinyCache->lookup(200); + BOOST_CHECK(handle.isValid()); + BOOST_CHECK_EQUAL(handle.value(), 201); + handle = tinyCache->lookup(300); + BOOST_CHECK(!handle.isValid()); + + // Pair (200, 201) still exists in tinyCache, but it isn't referenced + // by any handle, so we can insert new entry to replace it. + BOOST_CHECK_EQUAL(tinyCache->insert(100, new int(102)), true); + handle = tinyCache->lookup(100); + BOOST_CHECK(handle.isValid()); + BOOST_CHECK_EQUAL(handle.value(), 102); + handle = tinyCache->lookup(200); + BOOST_CHECK(!handle.isValid()); + handle = tinyCache->lookup(300); + BOOST_CHECK(!handle.isValid()); +} + +BOOST_AUTO_TEST_CASE(EvictionPolicy) +{ + BOOST_CHECK(bigCache->insert(100, new int(101))); + BOOST_CHECK(bigCache->insert(101, new int(102))); + BOOST_CHECK(bigCache->insert(102, new int(103))); + BOOST_CHECK(bigCache->insert(103, new int(104))); + + BOOST_CHECK(bigCache->insert(200, new int(201))); + BOOST_CHECK(bigCache->insert(201, new int(202))); + BOOST_CHECK(bigCache->insert(202, new int(203))); + BOOST_CHECK(bigCache->insert(203, new int(204))); + + auto h200 = bigCache->lookup(200); + auto h201 = bigCache->lookup(201); + auto h202 = bigCache->lookup(202); + auto h203 = bigCache->lookup(203); + + BOOST_CHECK(bigCache->insert(300, new int(301))); + BOOST_CHECK(bigCache->insert(301, new int(302))); + BOOST_CHECK(bigCache->insert(302, new int(303))); + BOOST_CHECK(bigCache->insert(303, new int(304))); + + // Insert entries much more than cache capacity. + bool insertResult = true; + for (auto i = 0; i < 10000; ++i) + { + insertResult = insertResult && bigCache->insert(1000 + i, new int(2000 + i)); + } + BOOST_CHECK(insertResult); + + // Check whether the entries inserted in the beginning + // are evicted. Ones without extra ref are evicted and + // those with are not. + BOOST_CHECK(!bigCache->lookup(100).isValid()); + BOOST_CHECK(!bigCache->lookup(101).isValid()); + BOOST_CHECK(!bigCache->lookup(102).isValid()); + BOOST_CHECK(!bigCache->lookup(103).isValid()); + + BOOST_CHECK(!bigCache->lookup(300).isValid()); + BOOST_CHECK(!bigCache->lookup(301).isValid()); + BOOST_CHECK(!bigCache->lookup(302).isValid()); + BOOST_CHECK(!bigCache->lookup(303).isValid()); + + BOOST_CHECK(bigCache->lookup(200).value() == 201); + BOOST_CHECK(bigCache->lookup(201).value() == 202); + BOOST_CHECK(bigCache->lookup(202).value() == 203); + BOOST_CHECK(bigCache->lookup(203).value() == 204); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestDagExecutor.cpp b/bcos-executor/test/unittest/libexecutor/TestDagExecutor.cpp new file mode 100644 index 0000000..2787dcb --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestDagExecutor.cpp @@ -0,0 +1,1148 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for DAG executor implementation + * @author: catli + * @date: 2021-10-27 + */ +#include "bcos-tars-protocol/protocol/BlockHeaderImpl.h" +#include "bcos-tars-protocol/tars/Block.h" + +// if wasm ut crash on aarch64 linux check https://github.com/bytecodealliance/wasmtime/issues/4972 +// #if !defined(__aarch64__) && !defined(__linux__) + +#include "../liquid/hello_world.h" +#include "../liquid/transfer.h" +#include "../mock/MockLedger.h" +#include "../mock/MockTransactionalStorage.h" +#include "../mock/MockTxPool.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "executor/TransactionExecutor.h" +#include "executor/TransactionExecutorFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::precompiled; + +namespace bcos +{ +namespace test +{ +struct DagExecutorFixture +{ + DagExecutorFixture() + { + boost::log::core::get()->set_logging_enabled(false); + hashImpl = std::make_shared(); + assert(hashImpl); + auto signatureImpl = std::make_shared(); + assert(signatureImpl); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + txpool = std::make_shared(); + backend = std::make_shared(hashImpl); + ledger = std::make_shared(); + + keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e") + ->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString( + "ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + createSysTable(); + } + ~DagExecutorFixture() { boost::log::core::get()->set_logging_enabled(true); } + + void createSysTable() + { + // create / table + { + std::promise> promise2; + backend->asyncCreateTable( + "/", "value", [&](Error::UniquePtr&& _error, std::optional&& _table) { + BOOST_CHECK(!_error); + promise2.set_value(std::move(_table)); + }); + auto rootTable = promise2.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + newSubMap.insert(std::make_pair("apps", FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("/", FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("tables", FS_TYPE_DIR)); + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + rootTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + rootTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + rootTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + rootTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + rootTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + rootTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /tables table + { + std::promise> promise3; + backend->asyncCreateTable( + "/tables", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise3.set_value(std::move(_table)); + }); + auto tablesTable = promise3.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + tablesTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + tablesTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + tablesTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + tablesTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + tablesTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + tablesTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /apps table + { + std::promise> promise4; + backend->asyncCreateTable( + "/apps", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise4.set_value(std::move(_table)); + }); + auto appsTable = promise4.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + appsTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + appsTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + appsTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + appsTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + appsTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + appsTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + } + CryptoSuite::Ptr cryptoSuite; + std::shared_ptr txpool; + std::shared_ptr backend; + std::shared_ptr ledger; + std::shared_ptr hashImpl; + + KeyPairInterface::Ptr keyPair; + int64_t gas = 3000000000; +}; +BOOST_FIXTURE_TEST_SUITE(TestDagExecutor, DagExecutorFixture) + +#ifdef WITH_WASM +BOOST_AUTO_TEST_CASE(callWasmConcurrentlyTransfer) +{ + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(0); + auto executor = bcos::executor::TransactionExecutorFactory::build( + ledger, txpool, nullptr, backend, executionResultFactory, stateStorageFactory, hashImpl, true, false); + + auto codec = std::make_unique(hashImpl, true); + + bytes transferBin(transfer_wasm, transfer_wasm + transfer_wasm_len); + transferBin = codec->encode(transferBin); + auto transferAbi = string( + R"([{"inputs":[],"type":"constructor"},{"conflictFields":[{"kind":3,"value":[0],"read_only":false,"slot":0},{"kind":3,"value":[1],"read_only":false,"slot":0}],"constant":false,"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"transfer","selector":[683988646,0],"outputs":[{"internalType":"bool","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"query","outputs":[{"internalType":"uint32","type":"uint32"}],"type":"function"}])"); + + bytes input; + input.insert(input.end(), transferBin.begin(), transferBin.end()); + input.push_back(0); + + string transferAddress = "usr/alice/transfer"; + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", transferAbi); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + params->setTo(transferAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + std::vector parentInfos{{0, h256(0)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract transfer + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result3->to(), sender); + + BOOST_CHECK(result3->message().empty()); + BOOST_CHECK(!result3->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + auto address = result3->newEVMContractAddress(); + + bcos::protocol::TwoPCParams commitParams; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = std::string("/apps/") + string(address); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable(tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + entry = table.getRow("abi"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + std::vector requests; + auto cases = vector>(); + + cases.push_back(make_tuple("alice", "bob", 1000)); + cases.push_back(make_tuple("charlie", "david", 2000)); + cases.push_back(make_tuple("bob", "david", 200)); + cases.push_back(make_tuple("david", "alice", 400)); + + for (size_t i = 0; i < cases.size(); ++i) + { + std::string from = std::get<0>(cases[i]); + std::string to = std::get<1>(cases[i]); + uint32_t amount = std::get<2>(cases[i]); + bytes input; + auto encodedParams = + codec->encodeWithSig("transfer(string,string,uint32)", from, to, amount); + input.insert(input.end(), encodedParams.begin(), encodedParams.end()); + + auto tx = fakeTransaction(cryptoSuite, keyPair, address, input, 101 + i, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setTransactionHash(hash); + params->setCreate(false); + + requests.emplace_back(std::move(params)); + } + + executor->dagExecuteTransactions( + requests, [&](bcos::Error::UniquePtr error, + std::vector results) { + BOOST_CHECK(!error); + + vector> expected; + expected.push_back({"alice", numeric_limits::max() - 1000 + 400}); + expected.push_back({"bob", 1000 - 200}); + expected.push_back({"charlie", numeric_limits::max() - 2000}); + expected.push_back({"david", 2000 + 200 - 400}); + + for (size_t i = 0; i < results.size(); ++i) + { + auto& result = results[i]; + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK(result->message().empty()); + bool flag; + codec->decode(result->data(), flag); + BOOST_CHECK(flag); + } + + for (size_t i = 0; i < expected.size(); ++i) + { + bytes queryBytes; + auto encodedParams = + codec->encodeWithSig("query(string)", std::get<0>(expected[i])); + queryBytes.insert(queryBytes.end(), encodedParams.begin(), encodedParams.end()); + + auto params = std::make_unique(); + params->setContextID(888 + i); + params->setSeq(999); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(transferAddress); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(std::move(queryBytes)); + params->setType(ExecutionMessage::MESSAGE); + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&executePromise](bcos::Error::UniquePtr&& error, + ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + result = executePromise.get_future().get(); + + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->message(), ""); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result->gasAvailable(), gas); + + uint32_t dept; + codec->decode(result->data(), dept); + BOOST_CHECK_EQUAL(dept, std::get<1>(expected[i])); + } + }); +} // namespace test + +BOOST_AUTO_TEST_CASE(callWasmConcurrentlyHelloWorld) +{ + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(8192); + auto executor = bcos::executor::TransactionExecutorFactory::build( + ledger, txpool, nullptr, backend, executionResultFactory, stateStorageFactory, hashImpl, true, false); + + auto codec = std::make_unique(hashImpl, true); + + bytes helloWorldBin(hello_world_wasm, hello_world_wasm + hello_world_wasm_len); + helloWorldBin = codec->encode(helloWorldBin); + auto helloWorldAbi = string( + R"([{"inputs":[{"internalType":"string","name":"name","type":"string"}],"type":"constructor"},{"conflictFields":[{"kind":0,"value":[],"read_only":false,"slot":0}],"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"set","selector":[1322485854,0],"outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"internalType":"string","type":"string"}],"type":"function"}])"); + + bytes input; + input.insert(input.end(), helloWorldBin.begin(), helloWorldBin.end()); + + bytes constructorParam = codec->encode(string("alice")); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + string helloWorldAddress = "usr/alice/hello_world"; + + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", helloWorldAbi); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + params->setTo(helloWorldAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{{0, h256(0)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract hello world + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result3->to(), sender); + + BOOST_CHECK(result3->message().empty()); + BOOST_CHECK(!result3->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + auto address = result3->newEVMContractAddress(); + + bcos::protocol::TwoPCParams commitParams; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = std::string("/apps/") + string(address); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable(tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + entry = table.getRow("abi"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + std::vector requests; + auto cases = vector(); + + cases.push_back("alice"); + cases.push_back("charlie"); + cases.push_back("bob"); + cases.push_back("david"); + + for (size_t i = 0; i < cases.size(); ++i) + { + std::string name = cases[i]; + bytes input; + + auto encodedParams = codec->encodeWithSig("set(string)", name); + input.insert(input.end(), encodedParams.begin(), encodedParams.end()); + + auto tx = fakeTransaction(cryptoSuite, keyPair, address, input, 101 + i, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setTransactionHash(hash); + params->setCreate(false); + + requests.emplace_back(std::move(params)); + } + + executor->dagExecuteTransactions( + requests, [&](bcos::Error::UniquePtr error, + std::vector results) { + BOOST_CHECK(!error); + + for (size_t i = 0; i < results.size(); ++i) + { + auto& result = results[i]; + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK(result->message().empty()); + BOOST_CHECK(result->type() == ExecutionMessage::SEND_BACK); + } + + bytes getBytes; + + auto encodedParams = codec->encodeWithSig("get()"); + getBytes.insert(getBytes.end(), encodedParams.begin(), encodedParams.end()); + + auto params = std::make_unique(); + params->setContextID(888); + params->setSeq(999); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(helloWorldAddress); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(std::move(getBytes)); + params->setType(ExecutionMessage::MESSAGE); + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&executePromise](bcos::Error::UniquePtr&& error, + ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + result = executePromise.get_future().get(); + + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->message(), ""); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result->gasAvailable(), gas); + + string name; + codec->decode(result->data(), name); + BOOST_CHECK_EQUAL(name, "alice"); + }); +} +#endif + +BOOST_AUTO_TEST_CASE(callEvmConcurrentlyTransfer) +{ + size_t count = 100; + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(8192); + auto executor = bcos::executor::TransactionExecutorFactory::build( + ledger, txpool, nullptr, backend, executionResultFactory, stateStorageFactory, hashImpl, false, false); + + auto codec = std::make_unique(hashImpl, false); + + std::string bin = + "608060405234801561001057600080fd5b506105db806100206000396000f30060806040526004361061006257" + "6000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806335ee" + "5f87146100675780638a42ebe9146100e45780639b80b05014610157578063fad42f8714610210575b600080fd" + "5b34801561007357600080fd5b506100ce60048036038101908080359060200190820180359060200190808060" + "1f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050" + "5091929192905050506102c9565b6040518082815260200191505060405180910390f35b3480156100f0576000" + "80fd5b50610155600480360381019080803590602001908201803590602001908080601f016020809104026020" + "016040519081016040528093929190818152602001838380828437820191505050505050919291929080359060" + "20019092919050505061033d565b005b34801561016357600080fd5b5061020e60048036038101908080359060" + "2001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020" + "018383808284378201915050505050509192919290803590602001908201803590602001908080601f01602080" + "910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192" + "90803590602001909291905050506103b1565b005b34801561021c57600080fd5b506102c76004803603810190" + "80803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190" + "818152602001838380828437820191505050505050919291929080359060200190820180359060200190808060" + "1f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050" + "509192919290803590602001909291905050506104a8565b005b60008082604051808280519060200190808383" + "5b60208310151561030257805182526020820191506020810190506020830392506102dd565b60018360200361" + "01000a038019825116818451168082178552505050505050905001915050908152602001604051809103902054" + "9050919050565b806000836040518082805190602001908083835b602083101515610376578051825260208201" + "9150602081019050602083039250610351565b6001836020036101000a03801982511681845116808217855250" + "50505050509050019150509081526020016040518091039020819055505050565b806000846040518082805190" + "602001908083835b6020831015156103ea57805182526020820191506020810190506020830392506103c5565b" + "6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040" + "51809103902060008282540392505081905550806000836040518082805190602001908083835b602083101515" + "610463578051825260208201915060208101905060208303925061043e565b6001836020036101000a03801982" + "511681845116808217855250505050505090500191505090815260200160405180910390206000828254019250" + "5081905550505050565b806000846040518082805190602001908083835b6020831015156104e1578051825260" + "20820191506020810190506020830392506104bc565b6001836020036101000a03801982511681845116808217" + "855250505050505090500191505090815260200160405180910390206000828254039250508190555080600083" + "6040518082805190602001908083835b60208310151561055a5780518252602082019150602081019050602083" + "039250610535565b6001836020036101000a038019825116818451168082178552505050505050905001915050" + "908152602001604051809103902060008282540192505081905550606481111515156105aa57600080fd5b5050" + "505600a165627a7a723058205669c1a68cebcef35822edcec77a15792da5c32a8aa127803290253b3d5f627200" + "29"; + + std::string abi = + R"([{"conflictFields":[{"kind":3,"slot":0,"value":[0]}],"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"selector":[904814471,0],"stateMutability":"view","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]}],"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"set","outputs":[],"selector":[2319641577,0],"stateMutability":"nonpayable","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]},{"kind":3,"slot":0,"value":[1]}],"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"transfer","outputs":[],"selector":[2608902224,0],"stateMutability":"nonpayable","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]},{"kind":3,"slot":0,"value":[1]}],"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"transferWithRevert","outputs":[],"selector":[4208209799,0],"stateMutability":"nonpayable","type":"function"}])"; + + bytes input; + boost::algorithm::unhex(bin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", abi); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + // toChecksumAddress(addressString, hashImpl); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{{0, h256(0)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::cout << "Block hash is: " << blockHeader->hash() << std::endl; + + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract ParallelOk + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + auto address = result->newEVMContractAddress(); + + // Set user + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(5000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string user = "user" + boost::lexical_cast(i); + bcos::u256 value(1000000); + params->setData(codec->encodeWithSig("set(string,uint256)", user, value)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // BOOST_CHECK_EQUAL(result->status(), 0); + } + + std::vector requests; + requests.reserve(count); + // Transfer + for (size_t i = 0; i < count; ++i) + { + std::string from = "user" + boost::lexical_cast(i); + std::string to = "user" + boost::lexical_cast(count - 1); + bcos::u256 value(10); + + auto input = codec->encodeWithSig("transfer(string,string,uint256)", from, to, value); + auto tx = fakeTransaction(cryptoSuite, keyPair, address, input, 101 + i, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + params = std::make_unique(); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + + requests.emplace_back(std::move(params)); + } + + std::promise> tablePromise; + backend->asyncCreateTable("cp_ff6f30856ad3bae00b1169808488502786a13e3c", + "functionName,criticalSize", [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + Entry entry = table->newEntry(); + auto selector = getFuncSelector("transfer(string,string,uint256)", hashImpl); + table->setRow(to_string(selector), entry); + + executor->dagExecuteTransactions( + requests, [&](bcos::Error::UniquePtr error, + std::vector results) { + BOOST_CHECK(!error); + + for (size_t i = 0; i < results.size(); ++i) + { + auto& result = results[i]; + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK(result->message().empty()); + } + + // Check result + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(7000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string account = "user" + boost::lexical_cast(i); + params->setData(codec->encodeWithSig("balanceOf(string)", account)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise> outputPromise; + executor->dmcExecuteTransaction( + std::move(params), [&outputPromise](bcos::Error::UniquePtr&& error, + NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + // BOOST_CHECK(!error); + outputPromise.set_value(std::move(result)); + }); + ExecutionMessage::UniquePtr balanceResult = + std::move(*outputPromise.get_future().get()); + + bcos::u256 value(0); + codec->decode(balanceResult->data(), value); + + if (i < count - 1) + { + BOOST_CHECK_EQUAL(value, u256(1000000 - 10)); + } + else + { + BOOST_CHECK_EQUAL(value, u256(1000000 + 10 * (count - 1))); + } + } + }); +} + +BOOST_AUTO_TEST_CASE(callEvmConcurrentlyTransferByMessage) +{ + size_t count = 100; + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(8192); + auto executor = bcos::executor::TransactionExecutorFactory::build( + ledger, txpool, nullptr, backend, executionResultFactory, stateStorageFactory, hashImpl, false, false); + + auto codec = std::make_unique(hashImpl, false); + + std::string bin = + "608060405234801561001057600080fd5b50610519806100206000396000f30060806040526004361061006157" + "63ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166335ee5f87" + "81146100665780638a42ebe9146100d15780639b80b0501461012e578063fad42f87146101c7575b600080fd5b" + "34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484" + "526100bf9436949293602493928401919081908401838280828437509497506102609650505050505050565b60" + "408051918252519081900360200190f35b3480156100dd57600080fd5b50604080516020600480358082013560" + "1f810184900484028501840190955284845261012c943694929360249392840191908190840183828082843750" + "94975050933594506102c79350505050565b005b34801561013a57600080fd5b50604080516020600480358082" + "0135601f810184900484028501840190955284845261012c943694929360249392840191908190840183828082" + "84375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196" + "5091820194509250829150840183828082843750949750509335945061032f9350505050565b3480156101d357" + "600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261012c943694" + "92936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284" + "018301909452808352979a99988101979196509182019450925082915084018382808284375094975050933594" + "506104079350505050565b600080826040518082805190602001908083835b602083106102935780518252601f" + "199092019160209182019101610274565b51815160209384036101000a60001901801990921691161790529201" + "94855250604051938490030190922054949350505050565b806000836040518082805190602001908083835b60" + "2083106102fa5780518252601f1990920191602091820191016102db565b51815160209384036101000a600019" + "018019909216911617905292019485525060405193849003019092209290925550505050565b80600084604051" + "8082805190602001908083835b602083106103625780518252601f199092019160209182019101610343565b51" + "815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805495" + "909503909455505083518392600092869290918291908401908083835b602083106103cc5780518252601f1990" + "920191602091820191016103ad565b51815160209384036101000a600019018019909216911617905292019485" + "525060405193849003019092208054939093019092555050505050565b80600084604051808280519060200190" + "8083835b6020831061043a5780518252601f19909201916020918201910161041b565b51815160209384036101" + "000a60001901801990921691161790529201948552506040519384900381018420805495909503909455505083" + "518392600092869290918291908401908083835b602083106104a45780518252601f1990920191602091820191" + "01610485565b51815160209384036101000a600019018019909216911617905292019485525060405193849003" + "01909220805493909301909255505060648111156104e857600080fd5b5050505600a165627a7a72305820ac1d" + "5088b99f786303e96862fc6a312862e1edd4c8e070e1f4fd52e469ab5d240029"; + std::string abi = + R"([{"conflictFields":[{"kind":3,"slot":0,"value":[0]}],"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"selector":[904814471,0],"stateMutability":"view","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]}],"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"set","outputs":[],"selector":[2319641577,0],"stateMutability":"nonpayable","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]},{"kind":3,"slot":0,"value":[1]}],"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"transfer","outputs":[],"selector":[2608902224,0],"stateMutability":"nonpayable","type":"function"},{"conflictFields":[{"kind":3,"slot":0,"value":[0]},{"kind":3,"slot":0,"value":[1]}],"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"transferWithRevert","outputs":[],"selector":[4208209799,0],"stateMutability":"nonpayable","type":"function"}])"; + + bytes input; + boost::algorithm::unhex(bin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", abi); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + // toChecksumAddress(addressString, hashImpl); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{{0, h256(0)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract ParallelOk + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + auto address = result->newEVMContractAddress(); + + // Set user + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(5000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string user = "user" + boost::lexical_cast(i); + bcos::u256 value(1000000); + params->setData(codec->encodeWithSig("set(string,uint256)", user, value)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // BOOST_CHECK_EQUAL(result->status(), 0); + } + + std::vector requests; + requests.reserve(count); + // Transfer + for (size_t i = 0; i < count; ++i) + { + std::string from = "user" + boost::lexical_cast(i); + std::string to = "user" + boost::lexical_cast(count - 1); + bcos::u256 value(10); + + auto input = codec->encodeWithSig("transfer(string,string,uint256)", from, to, value); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + params = std::make_unique(); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + params->setType(NativeExecutionMessage::MESSAGE); + params->setData(std::move(input)); + params->setFrom(sender); + + requests.emplace_back(std::move(params)); + } + + std::promise> tablePromise; + backend->asyncCreateTable("cp_ff6f30856ad3bae00b1169808488502786a13e3c", + "functionName,criticalSize", [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + Entry entry = table->newEntry(); + auto selector = getFuncSelector("transfer(string,string,uint256)", hashImpl); + table->setRow(to_string(selector), entry); + + executor->dagExecuteTransactions( + requests, [&](bcos::Error::UniquePtr error, + std::vector results) { + BOOST_CHECK(!error); + + for (size_t i = 0; i < results.size(); ++i) + { + auto& result = results[i]; + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK(result->message().empty()); + } + + // Check result + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(7000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string account = "user" + boost::lexical_cast(i); + params->setData(codec->encodeWithSig("balanceOf(string)", account)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise> outputPromise; + executor->dmcExecuteTransaction( + std::move(params), [&outputPromise](bcos::Error::UniquePtr&& error, + NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + // BOOST_CHECK(!error); + outputPromise.set_value(std::move(result)); + }); + ExecutionMessage::UniquePtr balanceResult = + std::move(*outputPromise.get_future().get()); + + bcos::u256 value(0); + codec->decode(balanceResult->data(), value); + + if (i < count - 1) + { + BOOST_CHECK_EQUAL(value, u256(1000000 - 10)); + } + else + { + BOOST_CHECK_EQUAL(value, u256(1000000 + 10 * (count - 1))); + } + } + }); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos +// #endif diff --git a/bcos-executor/test/unittest/libexecutor/TestEVMExecutor.cpp b/bcos-executor/test/unittest/libexecutor/TestEVMExecutor.cpp new file mode 100644 index 0000000..4dba71a --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestEVMExecutor.cpp @@ -0,0 +1,1809 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for executor implement + * @author: ancelmo + * @date: 2021-09-14 + */ + +#include "../mock/MockLedger.h" +#include "../mock/MockTransactionalStorage.h" +#include "../mock/MockTxPool.h" +// #include "Common.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "bcos-tars-protocol/testutil/FakeBlockHeader.h" +#include "evmc/evmc.h" +#include "executor/TransactionExecutorFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::crypto; +using namespace bcos::protocol; + +namespace bcos +{ +namespace test +{ +struct TransactionExecutorFixture +{ + TransactionExecutorFixture() + { + boost::log::core::get()->set_logging_enabled(false); + hashImpl = std::make_shared(); + assert(hashImpl); + auto signatureImpl = std::make_shared(); + assert(signatureImpl); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + txpool = std::make_shared(); + backend = std::make_shared(hashImpl); + ledger = std::make_shared(); + auto executionResultFactory = std::make_shared(); + + auto lruStorage = std::make_shared(backend); + auto stateStorageFactory = std::make_shared(0); + executor = bcos::executor::TransactionExecutorFactory::build(ledger, txpool, lruStorage, + backend, executionResultFactory, stateStorageFactory, hashImpl, false, false); + + + keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e") + ->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString( + "ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + + codec = std::make_unique(hashImpl, false); + } + ~TransactionExecutorFixture() { boost::log::core::get()->set_logging_enabled(true); } + + TransactionExecutor::Ptr executor; + CryptoSuite::Ptr cryptoSuite; + std::shared_ptr txpool; + std::shared_ptr backend; + std::shared_ptr ledger; + std::shared_ptr hashImpl; + + KeyPairInterface::Ptr keyPair; + int64_t gas = 3000000; + std::unique_ptr codec; + + string helloBin = + "60806040526040805190810160405280600181526020017f3100000000000000000000000000000000000000" + "0000000000000000000000008152506001908051906020019061004f9291906100ae565b5034801561005c5760" + "0080fd5b506040805190810160405280600d81526020017f48656c6c6f2c20576f726c64210000000000000000" + "0000000000000000000000815250600090805190602001906100a89291906100ae565b50610153565b82805460" + "0181600116156101000203166002900490600052602060002090601f016020900481019282601f106100ef5780" + "5160ff191683800117855561011d565b8280016001018555821561011d579182015b8281111561011c57825182" + "5591602001919060010190610101565b5b50905061012a919061012e565b5090565b61015091905b8082111561" + "014c576000816000905550600101610134565b5090565b90565b6104ac806101626000396000f3006080604052" + "60043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ff" + "ffffff1680634ed3885e1461005c57806354fd4d50146100c55780636d4ce63c14610155575b600080fd5b3480" + "1561006857600080fd5b506100c3600480360381019080803590602001908201803590602001908080601f0160" + "208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192" + "9192905050506101e5565b005b3480156100d157600080fd5b506100da61029b565b6040518080602001828103" + "825283818151815260200191508051906020019080838360005b8381101561011a578082015181840152602081" + "0190506100ff565b50505050905090810190601f1680156101475780820380516001836020036101000a031916" + "815260200191505b509250505060405180910390f35b34801561016157600080fd5b5061016a610339565b6040" + "518080602001828103825283818151815260200191508051906020019080838360005b838110156101aa578082" + "01518184015260208101905061018f565b50505050905090810190601f1680156101d757808203805160018360" + "20036101000a031916815260200191505b509250505060405180910390f35b80600090805190602001906101fb" + "9291906103db565b507f93a093529f9c8a0c300db4c55fcd27c068c4f5e0e8410bc288c7e76f3d71083e816040" + "518080602001828103825283818151815260200191508051906020019080838360005b8381101561025e578082" + "015181840152602081019050610243565b50505050905090810190601f16801561028b57808203805160018360" + "20036101000a031916815260200191505b509250505060405180910390a150565b600180546001816001161561" + "01000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460" + "0181600116156101000203166002900480156103315780601f1061030657610100808354040283529160200191" + "610331565b820191906000526020600020905b81548152906001019060200180831161031457829003601f1682" + "01915b505050505081565b606060008054600181600116156101000203166002900480601f0160208091040260" + "200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103" + "d15780601f106103a6576101008083540402835291602001916103d1565b820191906000526020600020905b81" + "54815290600101906020018083116103b457829003601f168201915b5050505050905090565b82805460018160" + "0116156101000203166002900490600052602060002090601f016020900481019282601f1061041c57805160ff" + "191683800117855561044a565b8280016001018555821561044a579182015b8281111561044957825182559160" + "200191906001019061042e565b5b509050610457919061045b565b5090565b61047d91905b8082111561047957" + "6000816000905550600101610461565b5090565b905600a165627a7a723058204736027ad6b97d7cd2685379ac" + "b35b386dcb18799934be8283f1e08cd1f0c6ec0029"; +}; +BOOST_FIXTURE_TEST_SUITE(TestTransactionExecutor, TransactionExecutorFixture) + +BOOST_AUTO_TEST_CASE(deployAndCall) +{ + auto helloworld = string(helloBin); + + bytes input; + boost::algorithm::unhex(helloworld, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = *toHexString(string_view((char*)tx->sender().data(), tx->sender().size())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + // params->setData(input); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->evmStatus(), 0); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result->to(), sender); + + BOOST_CHECK(result->message().empty()); + BOOST_CHECK(!result->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result->gasAvailable(), gas); + + auto address = result->newEVMContractAddress(); + + bcos::protocol::TwoPCParams commitParams{}; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + ledger->setBlockHeader(blockHeader); + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = + std::string("/apps/") + + std::string(result->newEVMContractAddress()); // TODO: ensure the contract// address is hex + + + // test getCode() + executor->getCode(address, [](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(!code.empty()); + BOOST_CHECK_GT(code.size(), 0); + }); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable(tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + // start new block + auto blockHeader2 = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader2->setNumber(2); + + parentInfos = {{{blockHeader2->number() - 1, h256(blockHeader2->number() - 1)}}}; + blockHeader2->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader2->number() - 1); + blockHeader2->calculateHash(*cryptoSuite->hashImpl()); + + std::promise nextPromise2; + executor->nextBlockHeader(0, std::move(blockHeader2), [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + + nextPromise2.set_value(); + }); + + nextPromise2.get_future().get(); + + // set "fisco bcos" + bytes txInput; + char inputBytes[] = + "4ed3885e0000000000000000000000000000000000000000000000000000000000000020000000000000000000" + "0000000000000000000000000000000000000000000005666973636f0000000000000000000000000000000000" + "00000000000000000000"; + boost::algorithm::unhex( + &inputBytes[0], inputBytes + sizeof(inputBytes) - 1, std::back_inserter(txInput)); + auto params2 = std::make_unique(); + params2->setContextID(101); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(std::string(sender)); + params2->setTo(std::string(address)); + params2->setOrigin(std::string(sender)); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(txInput)); + params2->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + BOOST_CHECK(result2); + BOOST_CHECK_EQUAL(result2->status(), 0); + BOOST_CHECK_EQUAL(result2->evmStatus(), 0); + BOOST_CHECK_EQUAL(result2->message(), ""); + BOOST_CHECK_EQUAL(result2->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result2->gasAvailable(), gas); + ledger->setBlockHeader(blockHeader2); + + // read "fisco bcos" + bytes queryBytes; + char inputBytes2[] = "6d4ce63c"; + boost::algorithm::unhex( + &inputBytes2[0], inputBytes2 + sizeof(inputBytes2) - 1, std::back_inserter(queryBytes)); + + auto params3 = std::make_unique(); + params3->setContextID(102); + params3->setSeq(1000); + params3->setDepth(0); + params3->setFrom(std::string(sender)); + params3->setTo(std::string(address)); + params3->setOrigin(std::string(sender)); + params3->setStaticCall(false); + params3->setGasAvailable(gas); + params3->setData(std::move(queryBytes)); + params3->setType(ExecutionMessage::MESSAGE); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(params3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK(result3); + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->evmStatus(), 0); + BOOST_CHECK_EQUAL(result3->message(), ""); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + std::string output; + boost::algorithm::hex_lower( + result3->data().begin(), result3->data().end(), std::back_inserter(output)); + BOOST_CHECK_EQUAL(output, + "00000000000000000000000000000000000000000000000000000000000000200000000000000000000" + "000000000000000000000000000000000000000000005666973636f0000000000000000000000000000" + "00000000000000000000000000"); +} + + +BOOST_AUTO_TEST_CASE(externalCall) +{ + // Solidity source code from test_external_call.sol, using remix + // 0.6.10+commit.00c0fcaf + + std::string ABin = + "608060405234801561001057600080fd5b5061037f806100206000396000f3fe60806040523480156100105760" + "0080fd5b506004361061002b5760003560e01c80635b975a7314610030575b600080fd5b61005c600480360360" + "2081101561004657600080fd5b8101908080359060200190929190505050610072565b60405180828152602001" + "91505060405180910390f35b600081604051610081906101c7565b808281526020019150506040518091039060" + "00f0801580156100a7573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffff" + "ffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd8e189e965" + "f1ff506594c5c65110ea4132cee975b58710da78ea19bc094414ae826040518082815260200191505060405180" + "910390a16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff" + "ffffffffffffffffffffffffffff16633fa4f2456040518163ffffffff1660e01b815260040160206040518083" + "038186803b15801561018557600080fd5b505afa158015610199573d6000803e3d6000fd5b505050506040513d" + "60208110156101af57600080fd5b81019080805190602001909291905050509050919050565b610175806101d5" + "8339019056fe608060405234801561001057600080fd5b50604051610175380380610175833981810160405260" + "2081101561003357600080fd5b8101908080519060200190929190505050806000819055507fdc509bfccbee28" + "6f248e0904323788ad0c0e04e04de65c04b482b056acb1a0658160405180828152602001915050604051809103" + "90a15060e4806100916000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e0" + "1c80633fa4f245146037578063a16fe09b146053575b600080fd5b603d605b565b604051808281526020019150" + "5060405180910390f35b60596064565b005b60008054905090565b6000808154600101919050819055507f052f" + "6b9dfac9e4e1257cb5b806b7673421c54730f663c8ab02561743bb23622d600054604051808281526020019150" + "5060405180910390a156fea264697066735822122006eea3bbe24f3d859a9cb90efc318f26898aeb4dffb31cac" + "e105776a6c272f8464736f6c634300060a0033a2646970667358221220b441da8ba792a40e444d0ed767a4417e" + "944c55578d1c8d0ca4ad4ec050e05a9364736f6c634300060a0033"; + + std::string BBin = + "608060405234801561001057600080fd5b50604051610175380380610175833981810160405260208110156100" + "3357600080fd5b8101908080519060200190929190505050806000819055507fdc509bfccbee286f248e090432" + "3788ad0c0e04e04de65c04b482b056acb1a065816040518082815260200191505060405180910390a15060e480" + "6100916000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80633fa4f2" + "45146037578063a16fe09b146053575b600080fd5b603d605b565b604051808281526020019150506040518091" + "0390f35b60596064565b005b60008054905090565b6000808154600101919050819055507f052f6b9dfac9e4e1" + "257cb5b806b7673421c54730f663c8ab02561743bb23622d600054604051808281526020019150506040518091" + "0390a156fea264697066735822122006eea3bbe24f3d859a9cb90efc318f26898aeb4dffb31cace105776a6c27" + "2f8464736f6c634300060a0033"; + + bytes input; + boost::algorithm::unhex(ABin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract A + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + auto address = result->newEVMContractAddress(); + BOOST_CHECK_EQUAL(result->type(), NativeExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->evmStatus(), 0); + BOOST_CHECK_GT(address.size(), 0); + BOOST_CHECK(result->keyLocks().empty()); + + // -------------------------------- + // Call A createAndCallB(int256) + // -------------------------------- + auto params2 = std::make_unique(); + params2->setContextID(101); + params2->setSeq(1001); + params2->setDepth(0); + params2->setFrom(std::string(sender)); + params2->setTo(std::string(address)); + params2->setOrigin(std::string(sender)); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setCreate(false); + + bcos::u256 value(1000); + params2->setData(codec->encodeWithSig("createAndCallB(int256)", value)); + params2->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, NativeExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + BOOST_CHECK(result2); + BOOST_CHECK_EQUAL(result2->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK(result2->data().size() > 0); + BOOST_CHECK_EQUAL(result2->contextID(), 101); + BOOST_CHECK_EQUAL(result2->seq(), 1001); + BOOST_CHECK_EQUAL(result2->create(), true); + BOOST_CHECK_EQUAL(result2->newEVMContractAddress(), ""); + BOOST_CHECK_EQUAL(result2->origin(), std::string(sender)); + BOOST_CHECK_EQUAL(result2->from(), std::string(address)); + BOOST_CHECK(result2->to().empty()); + BOOST_CHECK_LT(result2->gasAvailable(), gas); + BOOST_CHECK_EQUAL(result2->keyLocks().size(), 2); // code,codeHash + BOOST_CHECK_EQUAL(result2->keyLocks()[0], "code"); + + // -------------------------------- + // Message 1: Create contract B, set new seq 1002 + // A -> B + // -------------------------------- + result2->setSeq(1002); + + // Clear the key lock to avoid effect + result2->setKeyLocks({}); + + h256 addressCreate2( + "ee6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); // ee6f30856ad3bae00b1169808488502786a13e3c + std::string addressString2 = addressCreate2.hex().substr(0, 40); + result2->setTo(addressString2); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + BOOST_CHECK(result3); + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->data().size(), 0); + BOOST_CHECK_EQUAL(result3->contextID(), 101); + BOOST_CHECK_EQUAL(result3->seq(), 1002); + BOOST_CHECK_EQUAL(result3->origin(), std::string(sender)); + BOOST_CHECK_EQUAL(result3->from(), addressString2); + BOOST_CHECK_EQUAL(result3->to(), std::string(address)); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), addressString2); + BOOST_CHECK_EQUAL(result3->create(), false); + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->evmStatus(), 0); + BOOST_CHECK(result3->logEntries().size() == 0); + BOOST_CHECK(result3->keyLocks().empty()); + + // -------------------------------- + // Message 2: Create contract B success return, set previous seq 1001 + // B -> A + // -------------------------------- + result3->setSeq(1001); + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + BOOST_CHECK(result4); + BOOST_CHECK_EQUAL(result4->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_GT(result4->data().size(), 0); + auto param = codec->encodeWithSig("value()"); + BOOST_CHECK(result4->data().toBytes() == param); + BOOST_CHECK_EQUAL(result4->contextID(), 101); + BOOST_CHECK_EQUAL(result4->seq(), 1001); + BOOST_CHECK_EQUAL(result4->from(), std::string(address)); + BOOST_CHECK_EQUAL(result4->to(), std::string(addressString2)); + BOOST_CHECK_EQUAL(result4->keyLocks().size(), 1); + BOOST_CHECK_EQUAL(toHex(result4->keyLocks()[0]), h256(0).hex()); // first member + + // Request message without status + // BOOST_CHECK_EQUAL(result4->status(), 0); + BOOST_CHECK(result4->message().empty()); + BOOST_CHECK(result4->newEVMContractAddress().empty()); + BOOST_CHECK_GT(result4->keyLocks().size(), 0); + + // -------------------------------- + // Message 3: A call B's value(), set new seq 1003 + // A -> B + // -------------------------------- + result4->setSeq(1003); + // Clear the keylock + result4->setKeyLocks({}); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + BOOST_CHECK(result5); + BOOST_CHECK_EQUAL(result5->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_GT(result5->data().size(), 0); + param = codec->encode(s256(1000)); + BOOST_CHECK(result5->data().toBytes() == param); + BOOST_CHECK_EQUAL(result5->contextID(), 101); + BOOST_CHECK_EQUAL(result5->seq(), 1003); + BOOST_CHECK_EQUAL(result5->from(), std::string(addressString2)); + BOOST_CHECK_EQUAL(result5->to(), std::string(address)); + BOOST_CHECK_EQUAL(result5->status(), 0); + BOOST_CHECK_EQUAL(result5->evmStatus(), 0); + BOOST_CHECK(result5->message().empty()); + BOOST_CHECK_EQUAL(result5->keyLocks().size(), 0); + + // -------------------------------- + // Message 4: A call B's success return, set previous seq 1001 + // B -> A + // -------------------------------- + result5->setSeq(1001); + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + BOOST_CHECK(result6); + BOOST_CHECK_EQUAL(result6->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_GT(result6->data().size(), 0); + BOOST_CHECK(result6->data().toBytes() == param); + BOOST_CHECK_EQUAL(result6->contextID(), 101); + BOOST_CHECK_EQUAL(result6->seq(), 1001); + BOOST_CHECK_EQUAL(result6->from(), std::string(address)); + BOOST_CHECK_EQUAL(result6->to(), std::string(sender)); + BOOST_CHECK_EQUAL(result6->origin(), std::string(sender)); + BOOST_CHECK_EQUAL(result6->status(), 0); + BOOST_CHECK_EQUAL(result6->evmStatus(), 0); + BOOST_CHECK(result6->message().empty()); + BOOST_CHECK(result6->logEntries().size() == 1); + BOOST_CHECK_EQUAL(result6->keyLocks().size(), 0); + + executor->getHash(1, [&](bcos::Error::UniquePtr&& error, crypto::HashType&& hash) { + BOOST_CHECK(!error); + BOOST_CHECK_NE(hash.hex(), h256().hex()); + }); + + // commit the state + TwoPCParams commitParams; + commitParams.number = 1; + + executor->prepare(commitParams, [](bcos::Error::Ptr error) { BOOST_CHECK(!error); }); + ledger->setBlockHeader(blockHeader); + executor->commit(commitParams, [](bcos::Error::Ptr error) { BOOST_CHECK(!error); }); + + + // execute a call request + auto callParam = std::make_unique(); + callParam->setType(executor::NativeExecutionMessage::MESSAGE); + callParam->setContextID(500); + callParam->setSeq(7778); + callParam->setDepth(0); + callParam->setFrom(std::string(sender)); + callParam->setTo(std::string(addressString2)); + callParam->setData(codec->encodeWithSig("value()")); + callParam->setOrigin(std::string(sender)); + callParam->setStaticCall(true); + callParam->setGasAvailable(gas); + callParam->setCreate(false); + + std::promise callResultPromise; + executor->dmcCall(std::move(callParam), + [&](bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr response) { + BOOST_CHECK(!error); + callResultPromise.set_value(std::move(response)); + }); + + bcos::protocol::ExecutionMessage::UniquePtr callResult = callResultPromise.get_future().get(); + + + BOOST_CHECK_EQUAL(callResult->type(), protocol::ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(callResult->status(), 0); + BOOST_CHECK_EQUAL(callResult->evmStatus(), 0); + + auto expectResult = codec->encode(s256(1000)); + BOOST_CHECK(callResult->data().toBytes() == expectResult); + + // commit the state, and call + // bcos::protocol::TwoPCParams commitParams; + // commitParams.number = 1; + // executor->prepare(commitParams, [&](bcos::Error::Ptr error) { BOOST_CHECK(!error); }); + // executor->commit(commitParams, [&](bcos::Error::Ptr error) { BOOST_CHECK(!error); }); + + auto callParam2 = std::make_unique(); + callParam2->setType(executor::NativeExecutionMessage::MESSAGE); + callParam2->setContextID(501); + callParam2->setSeq(7779); + callParam2->setDepth(0); + callParam2->setFrom(std::string(sender)); + callParam2->setTo(std::string(addressString2)); + callParam2->setData(codec->encodeWithSig("value()")); + callParam2->setOrigin(std::string(sender)); + callParam2->setStaticCall(true); + callParam2->setGasAvailable(gas); + callParam2->setCreate(false); + + std::promise callResult2Promise; + executor->dmcCall(std::move(callParam2), + [&](bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr response) { + BOOST_CHECK(!error); + callResult2Promise.set_value(std::move(response)); + }); + + bcos::protocol::ExecutionMessage::UniquePtr callResult2 = callResult2Promise.get_future().get(); + + + BOOST_CHECK_EQUAL(callResult2->type(), protocol::ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(callResult2->status(), 0); + BOOST_CHECK_EQUAL(callResult2->evmStatus(), 0); + + auto expectResult2 = codec->encode(s256(1000)); + BOOST_CHECK(callResult2->data().toBytes() == expectResult); +} + +BOOST_AUTO_TEST_CASE(performance) +{ + size_t count = 10 * 100; + + bcos::crypto::HashType hash; + for (size_t blockNumber = 1; blockNumber < 10; ++blockNumber) + { + std::string bin = + "608060405234801561001057600080fd5b506105db806100206000396000f3006080604052600436106100" + "6257" + "6000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063" + "35ee" + "5f87146100675780638a42ebe9146100e45780639b80b05014610157578063fad42f8714610210575b6000" + "80fd" + "5b34801561007357600080fd5b506100ce6004803603810190808035906020019082018035906020019080" + "8060" + "1f016020809104026020016040519081016040528093929190818152602001838380828437820191505050" + "5050" + "5091929192905050506102c9565b6040518082815260200191505060405180910390f35b3480156100f057" + "6000" + "80fd5b50610155600480360381019080803590602001908201803590602001908080601f01602080910402" + "6020" + "01604051908101604052809392919081815260200183838082843782019150505050505091929192908035" + "9060" + "20019092919050505061033d565b005b34801561016357600080fd5b5061020e6004803603810190808035" + "9060" + "2001908201803590602001908080601f016020809104026020016040519081016040528093929190818152" + "6020" + "018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160" + "2080" + "91040260200160405190810160405280939291908181526020018383808284378201915050505050509192" + "9192" + "90803590602001909291905050506103b1565b005b34801561021c57600080fd5b506102c7600480360381" + "0190" + "80803590602001908201803590602001908080601f01602080910402602001604051908101604052809392" + "9190" + "81815260200183838082843782019150505050505091929192908035906020019082018035906020019080" + "8060" + "1f016020809104026020016040519081016040528093929190818152602001838380828437820191505050" + "5050" + "509192919290803590602001909291905050506104a8565b005b6000808260405180828051906020019080" + "8383" + "5b60208310151561030257805182526020820191506020810190506020830392506102dd565b6001836020" + "0361" + "01000a03801982511681845116808217855250505050505090500191505090815260200160405180910390" + "2054" + "9050919050565b806000836040518082805190602001908083835b60208310151561037657805182526020" + "8201" + "9150602081019050602083039250610351565b6001836020036101000a0380198251168184511680821785" + "5250" + "50505050509050019150509081526020016040518091039020819055505050565b80600084604051808280" + "5190" + "602001908083835b6020831015156103ea57805182526020820191506020810190506020830392506103c5" + "565b" + "6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001" + "6040" + "51809103902060008282540392505081905550806000836040518082805190602001908083835b60208310" + "1515" + "610463578051825260208201915060208101905060208303925061043e565b6001836020036101000a0380" + "1982" + "51168184511680821785525050505050509050019150509081526020016040518091039020600082825401" + "9250" + "5081905550505050565b806000846040518082805190602001908083835b6020831015156104e157805182" + "5260" + "20820191506020810190506020830392506104bc565b6001836020036101000a0380198251168184511680" + "8217" + "85525050505050509050019150509081526020016040518091039020600082825403925050819055508060" + "0083" + "6040518082805190602001908083835b60208310151561055a578051825260208201915060208101905060" + "2083" + "039250610535565b6001836020036101000a03801982511681845116808217855250505050505090500191" + "5050" + "908152602001604051809103902060008282540192505081905550606481111515156105aa57600080fd5b" + "5050" + "505600a165627a7a723058205669c1a68cebcef35822edcec77a15792da5c32a8aa127803290253b3d5f62" + "7200" + "29"; + + bytes input; + boost::algorithm::unhex(bin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + std::string addressSeed = "address" + boost::lexical_cast(blockNumber); + h256 addressCreate(hashImpl->hash(addressSeed)); + // h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + // toChecksumAddress(addressString, hashImpl); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(blockNumber); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract ParallelOk + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + auto address = result->newEVMContractAddress(); + + // Set user + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(5000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string user = "user" + boost::lexical_cast(i); + bcos::u256 value(1000000); + params->setData(codec->encodeWithSig("set(string,uint256)", user, value)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // BOOST_CHECK_EQUAL(result->status(), 0); + } + + std::vector requests; + requests.reserve(count); + // Transfer + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string from = "user" + boost::lexical_cast(i); + std::string to = "user" + boost::lexical_cast(count - 1); + bcos::u256 value(10); + params->setData( + codec->encodeWithSig("transfer(string,string,uint256)", from, to, value)); + params->setType(NativeExecutionMessage::MESSAGE); + + requests.emplace_back(std::move(params)); + } + + auto now = std::chrono::system_clock::now(); + + for (auto& it : requests) + { + std::promise> outputPromise; + + executor->dmcExecuteTransaction( + std::move(it), [&outputPromise](bcos::Error::UniquePtr&& error, + NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + // BOOST_CHECK(!error); + outputPromise.set_value(std::move(result)); + }); + ExecutionMessage::UniquePtr transResult = std::move(*outputPromise.get_future().get()); + if (transResult->status() != 0) + { + std::cout << "Error: " << transResult->status() << std::endl; + } + } + + std::cout << "Execute elapsed: " + << (std::chrono::system_clock::now() - now).count() / 1000 / 1000 << std::endl; + + now = std::chrono::system_clock::now(); + // Check the result + std::vector values = {}; + values.reserve(count); + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(7000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string account = "user" + boost::lexical_cast(i); + params->setData(codec->encodeWithSig("balanceOf(string)", account)); + params->setType(NativeExecutionMessage::MESSAGE); + + std::promise> outputPromise; + executor->dmcExecuteTransaction( + std::move(params), [&outputPromise](bcos::Error::UniquePtr&& error, + NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + // BOOST_CHECK(!error); + outputPromise.set_value(std::move(result)); + }); + + + ExecutionMessage::UniquePtr balanceResult = + std::move(*outputPromise.get_future().get()); + + bcos::u256 value(0); + codec->decode(balanceResult->data(), value); + values.push_back(value); + // + // if (i < count - 1) + // { + // BOOST_CHECK_EQUAL(value, u256(1000000 - 10)); + // } + // else + // { + // BOOST_CHECK_EQUAL(value, u256(1000000 + 10 * (count - 1))); + // } + } + size_t c = std::count(values.begin(), values.end(), u256(1000000 - 10)); + BOOST_CHECK(c == count - 1); + BOOST_CHECK_EQUAL(values.at(values.size() - 1), u256(1000000 + 10 * (count - 1))); + + std::cout << "Check elapsed: " + << (std::chrono::system_clock::now() - now).count() / 1000 / 1000 << std::endl; + + executor->getHash( + blockNumber, [&hash](bcos::Error::UniquePtr error, crypto::HashType resultHash) { + BOOST_CHECK(!error); + BOOST_CHECK_NE(resultHash, h256()); + hash = resultHash; + }); + } +} + +BOOST_AUTO_TEST_CASE(multiDeploy) +{ + size_t count = 100; + std::vector paramsList; + + for (size_t i = 0; i < count; ++i) + { + auto helloworld = string(helloBin); + bytes input; + boost::algorithm::unhex(helloworld, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 100 + i, 100001, "1", "1"); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100 + i); + params->setSeq(1000); + params->setDepth(0); + auto sender = *toHexString(string_view((char*)tx->sender().data(), tx->sender().size())); + + auto addressCreate = + cryptoSuite->hashImpl()->hash("i am a address" + boost::lexical_cast(i)); + std::string addressString = addressCreate.hex().substr(0, 40); + params->setTo(std::move(addressString)); + + params->setStaticCall(false); + params->setGasAvailable(gas); + // params->setData(input); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + paramsList.emplace_back(std::move(params)); + } + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + + std::vector> + responses(count); + for (size_t i = 0; i < paramsList.size(); ++i) + { + // not support multi-thread executeTransaction + boost::latch latch(1); + executor->dmcExecuteTransaction(std::move(std::move(paramsList[i])), + [&](bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr result) { + responses[i] = std::make_tuple(std::move(error), std::move(result)); + latch.count_down(); + }); + latch.wait(); + } + + + for (auto& it : responses) + { + auto& [error, result] = it; + + BOOST_CHECK(!error); + if (error) + { + std::cout << boost::diagnostic_information(*error) << std::endl; + } + + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->evmStatus(), 0); + BOOST_CHECK(result->message().empty()); + BOOST_CHECK(!result->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result->gasAvailable(), gas); + } +} + +BOOST_AUTO_TEST_CASE(keyLock) {} + +BOOST_AUTO_TEST_CASE(deployErrorCode) +{ + // an infinity-loop constructor + { + std::string errorBin = + "608060405234801561001057600080fd5b505b60011561006a576040518060400160405280600381526020" + "017f" + "31323300000000000000000000000000000000000000000000000000000000008152506000908051906020" + "0190" + "61006492919061006f565b50610012565b610114565b828054600181600116156101000203166002900490" + "6000" + "52602060002090601f016020900481019282601f106100b057805160ff19168380011785556100de565b82" + "8001" + "600101855582156100de579182015b828111156100dd5782518255916020019190600101906100c2565b5b" + "5090" + "506100eb91906100ef565b5090565b61011191905b8082111561010d5760008160009055506001016100f5" + "565b" + "5090565b90565b6101f8806101236000396000f3fe608060405234801561001057600080fd5b5060043610" + "6100" + "365760003560e01c806344733ae11461003b5780638e397a0314610059575b600080fd5b61004361006356" + "5b60" + "40516100509190610140565b60405180910390f35b610061610105565b005b606060008054600181600116" + "1561" + "01000203166002900480601f01602080910402602001604051908101604052809291908181526020018280" + "5460" + "0181600116156101000203166002900480156100fb5780601f106100d05761010080835404028352916020" + "0191" + "6100fb565b820191906000526020600020905b8154815290600101906020018083116100de57829003601f" + "1682" + "01915b5050505050905090565b565b600061011282610162565b61011c818561016d565b935061012c8185" + "6020" + "860161017e565b610135816101b1565b840191505092915050565b60006020820190508181036000830152" + "6101" + "5a8184610107565b905092915050565b600081519050919050565b60008282526020820190509291505056" + "5b60" + "005b8381101561019c578082015181840152602081019050610181565b838111156101ab57600084840152" + "5b50" + "505050565b6000601f19601f830116905091905056fea2646970667358221220e4e19dff46d31f82111f92" + "61d8" + "687c52312c9221962991e27bbddc409dfbd7c564736f6c634300060a0033"; + bytes input; + boost::algorithm::unhex(errorBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(addressString); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::REVERT); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::OutOfGas); + BOOST_CHECK_EQUAL(result->evmStatus(), (int32_t)evmc_status_code::EVMC_OUT_OF_GAS); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), ""); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), addressString); + BOOST_CHECK(result->to() == sender); + + TwoPCParams commitParams{}; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + } + + // wasm code in evm + { + std::string errorBin = + "0061736d01000000018b011660037f7f7f017f60027f7f017f60047f7f7f7f017f6000017f60017f006002" + "7f7f0060047f7f7f7f0060077f7f7f7f7f7f7f0060037f7e7e0060037e7f7f0060057f7f7f7f7f017f6003" + "7f7f7f0060017f017f60057f7f7f7e7e0060000060037e7e7f0060057f7f7f7f7f0060027f7f017e60027f" + "7e0060057f7e7e7e7e0060027e7e017e60017e017f02b0010a0462636f730463616c6c00020462636f7311" + "67657452657475726e4461746153697a6500030462636f730d67657452657475726e446174610004046263" + "6f730666696e69736800050462636f730a73657453746f7261676500060462636f73036c6f670007046263" + "6f730672657665727400050462636f730a67657453746f7261676500000462636f730f67657443616c6c44" + "61746153697a6500030462636f730b67657443616c6c44617461000403a601a4010808090a040404040507" + "01050b0005060b050605040b0b01040b0b0c0505050505050305040504040d0c0506040b06010201000400" + "01010b05050505030e0505050404040e0505050f050505040404060610021102060b120504050c05050505" + "0b050506050505050b050505040005040b05050b0b0b04050505010b01020602050b0605040b1005050505" + "0505000b010c0004131313000000001413151514140811121204050170010a0a05030100110609017f0141" + "8080c0000b072604066d656d6f7279020009686173685f747970650046066465706c6f790047046d61696e" + "004e0910010041010b0984010f17143b3d3e3f400a91fd01a401f90201027f23004180016b220324002000" + "4200370204200041002802908540360200200341cc006a418080c000360200200341033a00502003428080" + "808080043703302003200036024820034100360240200341003602382003412736027c200341186a200120" + "02100b200341206a2903002101200329031821022003290328200341d5006a200341fc006a100c02400240" + "02402002200184500d00200328027c2200416c6a220420004e0d01200341d5006a41146a4130200410a201" + "1a2003411436027c200320022001100b200341086a2903002102200329030021012003290310200341d500" + "6a200341fc006a100c2001200284500d00200328027c2200417f6a220420004e0d01200341d6006a413020" + "0410a2011a2003410036027c2001a741ff017141306a220041ff01712000470d01200320003a00550b4127" + "200328027c22006b220441284f0d00200341306a41d082c0004100200341d5006a20006a2004100d0d0120" + "034180016a24000f0b00000b4137100e000bfd0202017f047e230041d0006b220324000240024020024280" + "8020540d00200341206a2001420042d2e1aadaeda7c987f6004200109d01200341106a2001420042f3b2d8" + "c19e9ebdcc957f4200109d01200341c0006a2002420042d2e1aadaeda7c987f6004200109d01200341306a" + "2002420042f3b2d8c19e9ebdcc957f4200109d01200341c0006a41086a290300200341206a41086a290300" + "200341106a41086a290300220420032903207c2205200454ad7c220620032903407c2204200654ad7c2004" + "200341306a41086a290300200520032903307c200554ad7c7c2206200454ad7c2204423e8821052006423e" + "8820044202868421040c010b20014213882002422d868442bda282a38eab04802104420021050b20032004" + "2005428080a0cfc8e0c8e38a7f4200109d0102402001200329030022067d22072001562002200341086a29" + "03007d2001200654ad7d220120025620012002511b0d002000200437030020002007370310200020053703" + "08200341d0006a24000f0b00000bf00503027f017e017f0240200228020022034114480d00024002402000" + "42ffff83fea6dee111580d002002200341706a2204360200200320016a2203417e6a200042808084fea6de" + "e11182220542e40082a7410174418881c0006a2f00003b00002003417c6a200542e4008042e40082a74101" + "74418881c0006a2f00003b00002003417a6a20054290ce008042e40082a7410174418881c0006a2f00003b" + "0000200341786a200542c0843d8042e40082a7410174418881c0006a2f00003b0000200341766a20054280" + "c2d72f80a741e40070410174418881c0006a2f00003b0000200341746a20054280c8afa02580a741e40070" + "410174418881c0006a2f00003b0000200341726a20054280a094a58d1d80a741e40070410174418881c000" + "6a2f00003b0000200120046a2005428080e983b1de1680a741e40070410174418881c0006a2f00003b0000" + "200042808084fea6dee1118021000c010b024020004280c2d72f5a0d00200321040c010b2002200341786a" + "2204360200200320016a2206417e6a20004280c2d72f82a7220341e40070410174418881c0006a2f00003b" + "00002006417c6a200341e4006e41e40070410174418881c0006a2f00003b00002006417a6a20034190ce00" + "6e41e40070410174418881c0006a2f00003b0000200120046a200341c0843d6e41e40070410174418881c0" + "006a2f00003b000020004280c2d72f8021000b02402000a722034190ce00490d00200420016a417e6a2003" + "4190ce0070220641e40070410174418881c0006a2f00003b000020012004417c6a22046a200641e4006e41" + "0174418881c0006a2f00003b000020034190ce006e21030b0240200341ffff0371220641e400490d002001" + "2004417e6a22046a200641e40070410174418881c0006a2f00003b0000200641e4006e21030b0240200341" + "ffff037141094b0d0020022004417f6a2204360200200120046a200341306a3a00000f0b20022004417e6a" + "2204360200200120046a200341ffff0371410174418881c0006a2f00003b00000f0b00000bfa0301077f23" + "0041106b22052400418080c40021062004210702400240024020002802002208410171450d00200441016a" + "22072004490d01412b21060b0240024020084104710d0041002101200721090c010b20072001200120026a" + "1086016a22092007490d010b41012107024020002802084101460d0020002006200120021087010d022000" + "280218200320042000411c6a28020028020c11000021070c020b0240024020092000410c6a280200220a4f" + "0d0020084108710d01200a20096b2208200a4b0d0241012107200520002008410110880120052802002208" + "418080c400460d032005280204210920002006200120021087010d0320002802182201200320042000411c" + "6a280200220028020c1100000d03200820092001200010890121070c030b20002006200120021087010d02" + "2000280218200320042000411c6a28020028020c11000021070c020b200028020421082000413036020420" + "002d0020210b41012107200041013a002020002006200120021087010d01200a20096b2201200a4b0d0041" + "012107200541086a20002001410110880120052802082201418080c400460d01200528020c210220002802" + "182206200320042000411c6a280200220928020c1100000d0120012002200620091089010d012000200b3a" + "002020002008360204410021070c010b00000b200541106a240020070b040000000b0600200010100b2601" + "017f024020002802004100200028020422001b2201450d002000450d002001200010120b0b3901017f2000" + "10100240200041146a2d00004102460d00024020002802102201280200450d002001101020002802102101" + "0b2001410c10120b0bf90101037f02402000450d002001109a011a41002802a888402102200041786a2201" + "20012802002203417e713602000240024002402003417c71220420006b20044b0d00200041003602002000" + "417c6a280200417c712204450d0120042d00004101710d012001109c0120042802002100024020012d0000" + "410271450d002004200041027222003602000b200221012000417c71220020046b41786a20004d0d020b00" + "000b02402003417c712204450d004100200420034102711b2203450d0020032d00004101710d0020002003" + "280208417c7136020020032001410172360208200221010c010b200020023602000b410020013602a88840" + "0b0b990403077f017e067f024002402005417f6a220720054b0d0020012802082208417f6a210920052001" + "280210220a6b220b20054b210c2001280214210d2001290300210e0340200d20076a220f200d490d010240" + "200f2003490d00200120033602144100210f0c030b0240200e2002200f6a310000423f8388420183500d00" + "20082008200128021c221020061b200820104b1b220f2005200f20054b1b2111034002402011200f470d00" + "4100201020061b21112009210f034002402011200f41016a490d00200d20056a220f200d490d062001200f" + "360214024020060d002001410036021c0b2000200d360204200041086a200f3602004101210f0c070b200f" + "20054f0d05200d200f6a2212200d490d05201220034f0d052004200f6a2113200f417f6a210f20132d0000" + "41ff0171200220126a2d0000460d000b200d200a6a220f200d490d042001200f360214200f210d20060d03" + "200c0d042001200b36021c200f210d0c030b200d200f6a2212200d490d03201220034f0d032004200f6a21" + "13200f41016a2214210f20132d000041ff0171200220126a2d0000460d000b2014417f6a221220086b220f" + "20124b0d02200f41016a2212200f490d02200d20126a220f200d490d022001200f360214200f210d20060d" + "012001410036021c200f210d0c010b200d20056a220f200d490d012001200f360214200f210d20060d0020" + "01410036021c200f210d0c000b0b00000b2000200f3602000bad0201027f230041106b2202240002400240" + "024002400240200141ff004b0d000240200028020822032000280204470d00200041011015200028020821" + "030b200028020020036a20013a0000200341016a22012003490d01200020013602080c040b200241003602" + "0c2001418010490d0102402001418080044f0d0020022001413f71418001723a000e20022001410c7641e0" + "01723a000c20022001410676413f71418001723a000d410321010c030b20022001413f71418001723a000f" + "2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f714180" + "01723a000d410421010c020b00000b20022001413f71418001723a000d2002200141067641c001723a000c" + "410221010b20002002410c6a200110160b200241106a240041000bb20101037f230041206b220224000240" + "024020002802042203200028020822046b20014f0d00200420016a22012004490d01200320036a22042003" + "490d0120042001200420014b1b22014108200141084b1b2101024002402003450d00200241106a41086a41" + "0136020020022003360214200220002802003602100c010b200241003602100b200220014101200241106a" + "101c20022802004101460d01200020022902043702000b200241206a24000f0b00000b3701017f20002002" + "10152000280200200028020822036a2001200210a0011a0240200320026a220220034f0d0000000b200020" + "023602080b0c00200020012002101641000bb00201047f230041306b220224000240024002402000280208" + "22032000280204470d0020"; + bytes input; + boost::algorithm::unhex(errorBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string addressString = addressCreate.hex().substr(0, 40); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(addressString); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(2); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::REVERT); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::Unknown); + BOOST_CHECK_EQUAL(result->evmStatus(), (int32_t)evmc_status_code::EVMC_SUCCESS); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), ""); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), addressString); + BOOST_CHECK(result->to() == sender); + + TwoPCParams commitParams{}; + commitParams.number = 2; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + } +} + +BOOST_AUTO_TEST_CASE(delegateCall) +{ + /* +pragma solidity>=0.6.10 <0.8.20; + +contract DelegateCallTest { + int public value = 0; + address public sender; + + function add() public returns(bytes memory) { + value += 1; + return "1"; + } + + function testFailed() public { + address addr = address(0x1001); + + dCall(addr, "add()"); + } + + function testSuccess() public { + address addr = address(this); + dCall(addr, "add()"); + } + + function dCall(address addr, string memory func) private returns(bytes memory) { + bool success; + bytes memory ret; + (success, ret) = addr.delegatecall(abi.encodeWithSignature(func)); + require(success, "delegatecall failed"); + + return ret; + } +} + +{ + "4f2be91f": "add()", + "67e404ce": "sender()", + "0ddbcc82": "testFailed()", + "713d3e3e": "testSuccess()", + "3fa4f245": "value()" +} + + */ + + std::string codeBin = + "60806040526000805534801561001457600080fd5b50610361806100246000396000f3fe608060405234801561" + "001057600080fd5b50600436106100575760003560e01c80630ddbcc821461005c5780633fa4f2451461006657" + "80634f2be91f1461008257806367e404ce14610097578063713d3e3e146100c2575b600080fd5b6100646100ca" + "565b005b61006f60005481565b6040519081526020015b60405180910390f35b61008a6100fc565b6040516100" + "799190610285565b6001546100aa906001600160a01b031681565b6040516001600160a01b0390911681526020" + "01610079565b610064610132565b600061100190506100f8816040518060400160405280600581526020016461" + "6464282960d81b81525061015a565b5050565b6060600160008082825461011091906102ce565b909155505060" + "40805180820190915260018152603160f81b6020820152919050565b60003090506100f8816040518060400160" + "4052806005815260200164616464282960d81b8152505b60408051600481526024810191829052606091600091" + "83916001600160a01b038716919061018990879061030f565b6040805191829003909120602083018051600160" + "0160e01b03166001600160e01b0319909216919091179052516101c0919061030f565b60006040518083038185" + "5af49150503d80600081146101fb576040519150601f19603f3d011682016040523d82523d6000602084013e61" + "0200565b606091505b5090925090508161024d5760405162461bcd60e51b815260206004820152601360248201" + "527219195b1959d85d1958d85b1b0819985a5b1959606a1b604482015260640160405180910390fd5b94935050" + "5050565b60005b83811015610270578181015183820152602001610258565b8381111561027f57600084840152" + "5b50505050565b60208152600082518060208401526102a4816040850160208701610255565b601f01601f1916" + "9190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b60008082128015600160" + "0160ff1b03849003851316156102f0576102f06102b8565b600160ff1b83900384128116156103095761030961" + "02b8565b50500190565b60008251610321818460208701610255565b919091019291505056fea2646970667358" + "22122064d7211bf906a8ecf7041b98d7e2d2c243d6d8b7a79b19bb1e0968091916398e64736f6c634300080b00" + "33"; + + + bytes input; + boost::algorithm::unhex(codeBin, std::back_inserter(input)); + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + std::string address = addressCreate.hex().substr(0, 40); + params->setTo(address); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::MESSAGE); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setVersion((uint32_t)bcos::protocol::BlockVersion::MAX_VERSION); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {{blockHeader->number() - 1, h256(blockHeader->number() - 1)}}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Deploy + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + BOOST_CHECK_EQUAL(result->type(), NativeExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->evmStatus(), 0); + + + // -------------------------------- + // Get code + // -------------------------------- + std::promise executePromise1; + executor->getCode(address, [&](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(!code.empty()); + BOOST_CHECK_GT(code.size(), 0); + executePromise1.set_value(code); + }); + auto code = executePromise1.get_future().get(); + + // -------------------------------- + // DelegateCall + // -------------------------------- + std::string testFailedSelector = "0ddbcc82"; + input = bcos::bytes(); + boost::algorithm::unhex(testFailedSelector, std::back_inserter(input)); + + tx = fakeTransaction(cryptoSuite, keyPair, "", input, 102, 100002, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + params = std::make_unique(); + params->setContextID(101); + params->setSeq(1001); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + // The contract address + params->setTo(address); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::MESSAGE); + params->setTransactionHash(hash); + params->setCreate(false); + params->setDelegateCall(true); + params->setDelegateCallCode(code); + params->setDelegateCallSender(sender); + params->setDelegateCallAddress(address); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + result = executePromise2.get_future().get(); + + BOOST_CHECK_EQUAL(result->delegateCall(), true); + BOOST_CHECK_EQUAL(result->delegateCallAddress(), "0000000000000000000000000000000000001001"); + BOOST_CHECK_EQUAL(result->delegateCallSender(), sender); + BOOST_CHECK_EQUAL(result->keyLocks().size(), 0); // no need to access codeHash flag +} + +BOOST_AUTO_TEST_CASE(selfdestruct) +{ + // test-bcos-executor -t TestTransactionExecutor/selfdestruct + + /* + pragma solidity>=0.6.10 <0.8.20; + +contract HelloWorld { + string name; + + constructor() public { + name = "Hello, World!"; + } + + function get() public view returns (string memory) { + return name; + } + + function set(string memory n) public { + name = n; + } + + function selfdestructTest() public { + selfdestruct(payable(address(0))); + } +} + +{ + "6d4ce63c": "get()", + "fa967e1f": "selfdestructTest()", + "4ed3885e": "set(string)" +} + */ + + std::string codeBin = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c2057" + "6f726c6421000000000000000000000000000000000000008152506000908051906020019061005c9291906100" + "62565b50610166565b82805461006e90610105565b90600052602060002090601f016020900481019282610090" + "57600085556100d7565b82601f106100a957805160ff19168380011785556100d7565b82800160010185558215" + "6100d7579182015b828111156100d65782518255916020019190600101906100bb565b5b5090506100e4919061" + "00e8565b5090565b5b808211156101015760008160009055506001016100e9565b5090565b6000600282049050" + "600182168061011d57607f821691505b6020821081141561013157610130610137565b5b50919050565b7f4e48" + "7b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61" + "04d7806101756000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c" + "80634ed3885e146100465780636d4ce63c14610062578063fa967e1f14610080575b600080fd5b610060600480" + "360381019061005b9190610263565b61008a565b005b61006a6100a4565b60405161007791906102e5565b6040" + "5180910390f35b610088610136565b005b80600090805190602001906100a0929190610150565b5050565b6060" + "600080546100b3906103bb565b80601f0160208091040260200160405190810160405280929190818152602001" + "8280546100df906103bb565b801561012c5780601f106101015761010080835404028352916020019161012c56" + "5b820191906000526020600020905b81548152906001019060200180831161010f57829003601f168201915b50" + "50505050905090565b600073ffffffffffffffffffffffffffffffffffffffff16ff5b82805461015c906103bb" + "565b90600052602060002090601f01602090048101928261017e57600085556101c5565b82601f106101975780" + "5160ff19168380011785556101c5565b828001600101855582156101c5579182015b828111156101c457825182" + "55916020019190600101906101a9565b5b5090506101d291906101d6565b5090565b5b808211156101ef576000" + "8160009055506001016101d7565b5090565b60006102066102018461032c565b610307565b9050828152602081" + "0184848401111561022257610221610481565b5b61022d848285610379565b509392505050565b600082601f83" + "011261024a5761024961047c565b5b813561025a8482602086016101f3565b91505092915050565b6000602082" + "840312156102795761027861048b565b5b600082013567ffffffffffffffff8111156102975761029661048656" + "5b5b6102a384828501610235565b91505092915050565b60006102b78261035d565b6102c18185610368565b93" + "506102d1818560208601610388565b6102da81610490565b840191505092915050565b60006020820190508181" + "0360008301526102ff81846102ac565b905092915050565b6000610311610322565b905061031d82826103ed56" + "5b919050565b6000604051905090565b600067ffffffffffffffff8211156103475761034661044d565b5b6103" + "5082610490565b9050602081019050919050565b600081519050919050565b6000828252602082019050929150" + "50565b82818337600083830152505050565b60005b838110156103a65780820151818401526020810190506103" + "8b565b838111156103b5576000848401525b50505050565b600060028204905060018216806103d357607f8216" + "91505b602082108114156103e7576103e661041e565b5b50919050565b6103f682610490565b810181811067ff" + "ffffffffffffff821117156104155761041461044d565b5b80604052505050565b7f4e487b7100000000000000" + "000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b710000000000" + "0000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080" + "fd5b600080fd5b600080fd5b6000601f19601f830116905091905056fea2646970667358221220b86cdade4230" + "cd8c479fc0822250b79a3f731a0e6d2dd04df1f043536198e02464736f6c63430008070033"; + + + bytes input; + boost::algorithm::unhex(codeBin, std::back_inserter(input)); + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + + // The contract address + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310f"); + std::string address = addressCreate.hex().substr(0, 40); + params->setTo(address); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::MESSAGE); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setVersion((uint32_t)bcos::protocol::BlockVersion::MAX_VERSION); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + ledger->setBlockNumber(blockHeader->number() - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Deploy + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + BOOST_CHECK_EQUAL(result->type(), NativeExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->status(), 0); + BOOST_CHECK_EQUAL(result->evmStatus(), 0); + + + // -------------------------------- + // Get code + // -------------------------------- + std::promise executePromise1; + executor->getCode(address, [&](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(!code.empty()); + BOOST_CHECK_GT(code.size(), 0); + executePromise1.set_value(code); + }); + auto code = executePromise1.get_future().get(); + + // -------------------------------- + // selfdestruct + // -------------------------------- + std::string testFailedSelector = "fa967e1f"; + input = bcos::bytes(); + boost::algorithm::unhex(testFailedSelector, std::back_inserter(input)); + + tx = fakeTransaction(cryptoSuite, keyPair, "", input, 102, 100002, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + params = std::make_unique(); + params->setContextID(101); + params->setSeq(1001); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + // The contract address + params->setTo(address); + + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::MESSAGE); + params->setTransactionHash(hash); + params->setCreate(false); + params->setDelegateCall(false); + params->setDelegateCallCode(code); + params->setDelegateCallSender(sender); + params->setDelegateCallAddress(address); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + executePromise2.get_future().get(); + + // -------------------------------- + // Get code again(should not get) + // -------------------------------- + std::promise executePromise3; + executor->getHash(1, [&](bcos::Error::UniquePtr, crypto::HashType) { + executor->getCode(address, [&](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(code.empty()); + BOOST_CHECK_EQUAL(code.size(), 0); + executePromise3.set_value(code); + }); + }); + + executePromise3.get_future().get(); +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestExecutiveStackFlow.cpp b/bcos-executor/test/unittest/libexecutor/TestExecutiveStackFlow.cpp new file mode 100644 index 0000000..cacd529 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestExecutiveStackFlow.cpp @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "../../../src/CallParameters.h" +#include "../../../src/Common.h" +#include "../../../src/executive/BlockContext.h" +#include "../../../src/executive/ExecutiveFlowInterface.h" +#include "../../../src/executive/ExecutiveStackFlow.h" +#include "../../../src/executive/ExecutiveState.h" +#include "../mock/MockExecutiveFactory.h" +#include "../mock/MockLedger.h" +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +struct ExecutiveStackFlowFixture +{ + ExecutiveStackFlowFixture() + { + for (int i = 1; i <= 20; ++i) + { + if ( i == 1){ + auto input = std::make_unique(CallParameters::Type::MESSAGE); + input->contextID = i; + input->seq = 0; + txInputs->push_back(std::move(input)); + } + else if (i <= 5) + { + auto input = std::make_unique(CallParameters::Type::KEY_LOCK); + input->contextID = i; + input->seq = 1; + txInputs->push_back(std::move(input)); + } + else if (i <= 10) + { + auto input = std::make_unique(CallParameters::Type::MESSAGE); + input->contextID = i; + input->seq = 1; + txInputs->push_back(std::move(input)); + } + else if (i <= 15) + { + auto input = std::make_unique(CallParameters::Type::FINISHED); + input->contextID = i; + input->seq = 1; + txInputs->push_back(std::move(input)); + } + else + { + auto input = std::make_unique(CallParameters::Type::REVERT); + input->contextID = i; + input->seq = 1; + txInputs->push_back(std::move(input)); + } + } + + LedgerCache::Ptr ledgerCache = + std::make_shared(std::make_shared()); + std::shared_ptr blockContext = std::make_shared( + nullptr, ledgerCache, nullptr, 0, h256(), 0, 0, FiscoBcosSchedule, false, false); + + executiveFactory = std::make_shared( + blockContext, nullptr, nullptr, nullptr, nullptr); + } + std::shared_ptr executiveStackFlow; + std::shared_ptr executiveFactory; + std::shared_ptr executiveState; + std::shared_ptr> txInputs = + make_shared>(); +}; + +BOOST_FIXTURE_TEST_SUITE(TestExecutiveStackFlow, ExecutiveStackFlowFixture) +BOOST_AUTO_TEST_CASE(RunTest) +{ + + EXECUTOR_LOG(DEBUG) << "RunTest begin"; + // std::shared_ptr> sequence = make_shared>(); + auto sequence = std::make_shared>(); + ExecutiveStackFlow::Ptr executiveStackFlow = + std::make_shared(executiveFactory); + BOOST_CHECK(executiveStackFlow != nullptr); + + executiveStackFlow->submit(txInputs); + EXECUTOR_LOG(DEBUG) << "submit 20 transaction success!"; + + std::promise finish1; + std::promise finish2; + + executiveStackFlow->asyncRun( + // onTxReturn + [sequence](CallParameters::UniquePtr output) { + EXECUTOR_LOG(DEBUG) << "one transaction perform success! the seq is :" << output->seq + << ",the conntextID is:" << output->contextID; + sequence->push_back(output->contextID); + }, + // onFinished + [sequence,&finish1](bcos::Error::UniquePtr error) { + if (error != nullptr) + { + EXECUTOR_LOG(ERROR) + << "ExecutiveFlow asyncRun error: " << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + EXECUTOR_LOG(ERROR) << "all transaction perform error, sequence clear!"; + sequence->clear(); + // callback(std::move(error), std::vector()); + } + else + { + EXECUTOR_LOG(DEBUG) << "all transaction perform end."; + BOOST_CHECK_EQUAL(sequence->size(), 19); + } + finish1.set_value(); + }); + + executiveStackFlow->asyncRun( + // onTxReturn + [sequence](CallParameters::UniquePtr output) { + EXECUTOR_LOG(DEBUG) << "one transaction perform success! the seq is :" << output->seq + << ",the conntextID is:" << output->contextID; + sequence->push_back(output->contextID); + }, + // onFinished + [sequence,&finish2](bcos::Error::UniquePtr error) { + if (error != nullptr) + { + EXECUTOR_LOG(ERROR) + << "ExecutiveFlow asyncRun error: " << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + EXECUTOR_LOG(ERROR) << "all transaction perform error, sequence clear!"; + sequence->clear(); + // callback(std::move(error), std::vector()); + } + else + { + EXECUTOR_LOG(DEBUG) << "all transaction perform end."; + } + finish2.set_value(); + }); + + finish1.get_future().get(); + finish2.get_future().get(); + + EXECUTOR_LOG(DEBUG) << "asyncRun end. " << LOG_KV("the sequence size is :", sequence->size()); + bool flag = true; + for (int64_t i = 0u; i < (int64_t)sequence->size(); ++i) + { + if (sequence->at(i) != 20 - i) + { + flag = false; + break; + } + } + BOOST_CHECK(flag); + + //clear pausedPool + std::promise finish3; + auto input1 = std::make_unique(CallParameters::Type::REVERT); + input1->contextID = 1; + input1->seq = 1; + executiveStackFlow->submit(std::move(input1)); + EXECUTOR_LOG(DEBUG) << "submit 1 transaction success!"; + + executiveStackFlow->asyncRun( + // onTxReturn + [sequence](CallParameters::UniquePtr output) { + EXECUTOR_LOG(DEBUG) << "one transaction perform success! the seq is :" << output->seq + << ",the conntextID is:" << output->contextID; + sequence->push_back(output->contextID); + }, + // onFinished + [sequence,&finish3](bcos::Error::UniquePtr error) { + if (error != nullptr) + { + EXECUTOR_LOG(ERROR) + << "ExecutiveFlow asyncRun error: " << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + EXECUTOR_LOG(ERROR) << "all transaction perform error, sequence clear!"; + sequence->clear(); + // callback(std::move(error), std::vector()); + } + else + { + EXECUTOR_LOG(DEBUG) << "all transaction perform end."; + } + finish3.set_value(); + }); + + finish3.get_future().get(); + + EXECUTOR_LOG(DEBUG) << "asyncRun end. " << LOG_KV("the sequence size is :", sequence->size()); + bool flag1 = true; + for (int64_t i = 0u; i < (int64_t)sequence->size(); ++i) + { + if (sequence->at(i) != 20 - i) + { + flag1 = false; + break; + } + } + BOOST_CHECK(sequence->size()==20); + BOOST_CHECK(flag1); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestExecutiveState.cpp b/bcos-executor/test/unittest/libexecutor/TestExecutiveState.cpp new file mode 100644 index 0000000..c3b288b --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestExecutiveState.cpp @@ -0,0 +1,153 @@ +#include "../../../src/CallParameters.h" +#include "../../../src/executive/BlockContext.h" +#include "../../../src/executive/ExecutiveFactory.h" +#include "../../../src/executive/ExecutiveState.h" +#include "../../../src/executive/TransactionExecutive.h" +#include "../mock/MockExecutiveFactory.h" +#include "../mock/MockLedger.h" +#include "../mock/MockTransactionExecutive.h" +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + + +namespace bcos +{ +namespace test +{ +struct ExecutiveStateFixture +{ + ExecutiveStateFixture() + { + ledgerCache = std::make_shared(std::make_shared()); + auto input = std::make_unique(CallParameters::Type::KEY_LOCK); + input->staticCall = false; + input->codeAddress = "aabbccddee"; + input->contextID = 1; + input->seq = 1; + std::shared_ptr blockContext = std::make_shared( + nullptr, ledgerCache, nullptr, 0, h256(), 0, 0, FiscoBcosSchedule, false, false); + + executiveFactory = std::make_shared( + blockContext, nullptr, nullptr, nullptr, nullptr); + } + LedgerCache::Ptr ledgerCache; + std::shared_ptr executive; + std::shared_ptr executiveFactory; + std::shared_ptr executiveState; + CallParameters::UniquePtr input; +}; + +BOOST_FIXTURE_TEST_SUITE(TestExecutiveState, ExecutiveStateFixture) + +BOOST_AUTO_TEST_CASE(goTest) +{ + CallParameters::UniquePtr output; + for (int8_t i = 0; i < 2; ++i) + { + EXECUTOR_LOG(DEBUG) << "goTest begin"; + if (i == 0) + { + EXECUTOR_LOG(DEBUG) << "i == 0 begin"; + auto callParameters = std::make_unique(CallParameters::MESSAGE); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = i; + callParameters->seq = i; + auto executiveState = + std::make_shared(executiveFactory, std::move(callParameters)); + // EXECUTOR_LOG(DEBUG) << executiveState->getStatus(); + auto output = executiveState->go(); + BOOST_CHECK(executiveState->getStatus() == ExecutiveState::PAUSED); + executiveState->setResumeParam(std::move(input)); + EXECUTOR_LOG(DEBUG) << "goTest: " << executiveState->getStatus(); + BOOST_CHECK(executiveState->getStatus() == ExecutiveState::NEED_RESUME); + executiveState->go(); + EXECUTOR_LOG(DEBUG) << "i == 0 end!"; + } + else if (i == 1) + { + EXECUTOR_LOG(DEBUG) << "i == 1 begin"; + auto callParameters = std::make_unique(CallParameters::FINISHED); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = i; + callParameters->seq = i; + auto executiveState = + std::make_shared(executiveFactory, std::move(callParameters)); + EXECUTOR_LOG(DEBUG) << "goTest: " << executiveState->getStatus(); + executiveState->go(); + EXECUTOR_LOG(DEBUG) << "goTest: " << executiveState->getStatus(); + BOOST_CHECK(executiveState->getStatus() == ExecutiveState::FINISHED); + // executiveState->go(); + EXECUTOR_LOG(DEBUG) << "goTest: " << executiveState->getStatus(); + EXECUTOR_LOG(DEBUG) << "i == 1 end!"; + } + } +} + +BOOST_AUTO_TEST_CASE(appendKeyLocksTest) +{ + EXECUTOR_LOG(DEBUG) << "appendKeyLocks begin"; + std::vector keyLocks{"123", "134", "125"}; + for (int i = 0; i < 3; ++i) + { + if (i == 0) + { + auto callParameters = std::make_unique(CallParameters::MESSAGE); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = i; + callParameters->seq = i; + callParameters->keyLocks = {"987"}; + auto executiveState = + std::make_shared(executiveFactory, std::move(callParameters)); + BOOST_CHECK(executiveState->getStatus() == ExecutiveState::NEED_RUN); + executiveState->appendKeyLocks(keyLocks); + EXECUTOR_LOG(DEBUG) << "i == 1 end ! status is :" << executiveState->getStatus(); + } + else if (i == 1) + { + EXECUTOR_LOG(DEBUG) << "i == 2 begin"; + auto callParameters = std::make_unique(CallParameters::MESSAGE); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = i; + callParameters->seq = i; + auto executiveState = + std::make_shared(executiveFactory, std::move(callParameters)); + executiveState->go(); + auto input1 = std::make_unique(CallParameters::MESSAGE); + input1->staticCall = false; + input1->codeAddress = "aabbccddee"; + input1->contextID = i; + input1->seq = i; + input1->keyLocks = {"987"}; + executiveState->setResumeParam(std::move(input1)); + executiveState->appendKeyLocks(keyLocks); + EXECUTOR_LOG(DEBUG) << "i == 2 end ! status is :" << executiveState->getStatus(); + } + else + { + EXECUTOR_LOG(DEBUG) << "i == 3 begin"; + auto callParameters = std::make_unique(CallParameters::REVERT); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = i; + callParameters->seq = i; + auto executiveState = + std::make_shared(executiveFactory, std::move(callParameters)); + executiveState->go(); + BOOST_CHECK(executiveState->getStatus() == ExecutiveState::FINISHED); + executiveState->appendKeyLocks(keyLocks); + EXECUTOR_LOG(DEBUG) << "i == 3 end ! status is :" << executiveState->getStatus(); + } + } +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestLedgerCache.cpp b/bcos-executor/test/unittest/libexecutor/TestLedgerCache.cpp new file mode 100644 index 0000000..88c0d12 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestLedgerCache.cpp @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for LedgerCache + * @author: jimmyshi + * @date: 2022-11-08 + */ + +#include "../mock/MockLedger.h" +#include "bcos-executor/src/executive/LedgerCache.h" +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +struct LedgerCacheFixture +{ + LedgerCacheFixture() + { + mockLedger = std::make_shared(); + ledgerCache = std::make_shared(mockLedger); + } + + MockLedger::Ptr mockLedger; + LedgerCache::Ptr ledgerCache; +}; + +BOOST_FIXTURE_TEST_SUITE(LedgerCacheTest, LedgerCacheFixture) + +BOOST_AUTO_TEST_CASE(fetchBlockHashTest) +{ + for (int i = 1; i < 10; i++) + { + ledgerCache->setBlockNumber2Hash(i, h256(100 + i)); + } + + BOOST_CHECK_EQUAL(h256(0), ledgerCache->fetchBlockHash(0)); + + for (int i = 1; i < 10; i++) + { + BOOST_CHECK_EQUAL(h256(100 + i), ledgerCache->fetchBlockHash(i)); + } + + ledgerCache->clearCacheByNumber(5); + + for (int i = 0; i < 5; i++) + { + BOOST_CHECK_EQUAL(h256(i), ledgerCache->fetchBlockHash(i)); + } + + for (int i = 5; i < 10; i++) + { + BOOST_CHECK_EQUAL(h256(100 + i), ledgerCache->fetchBlockHash(i)); + } +} + +BOOST_AUTO_TEST_CASE(fetchGasLimitTest) +{ + auto gasLimit = MockLedger::TX_GAS_LIMIT; + BOOST_CHECK_EQUAL(gasLimit, ledgerCache->fetchTxGasLimit()); +} + + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestScaleUtils.cpp b/bcos-executor/test/unittest/libexecutor/TestScaleUtils.cpp new file mode 100644 index 0000000..3743d24 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestScaleUtils.cpp @@ -0,0 +1,129 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for SCALE utils + * @author: catli + * @date: 2021-09-26 + */ + +#include "../src/dag/Abi.h" +#include "../src/dag/ScaleUtils.h" +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +BOOST_AUTO_TEST_SUITE(TestScaleUtils) + +BOOST_AUTO_TEST_CASE(DecodeCompactInteger) +{ + auto testCases = + vector>{{0, {0}}, {1, {4}}, {63, {252}}, {64, {1, 1}}, {255, {253, 3}}, + {511, {253, 7}}, {16383, {253, 255}}, {16384, {2, 0, 1, 0}}, {65535, {254, 255, 3, 0}}, + {1073741823ul, {254, 255, 255, 255}}, {1073741824, {3, 0, 0, 0, 64}}}; + + for (auto& testCase : testCases) + { + auto value = testCase.first; + auto& encodedBytes = testCase.second; + auto result = decodeCompactInteger(encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), value); + } + + auto badCase = bytes{255, 255, 255, 255}; + auto result = decodeCompactInteger(badCase, 0); + BOOST_CHECK(!result.has_value()); +} + +BOOST_AUTO_TEST_CASE(CalculateEncodingLength) +{ + // Encoding of string "Alice" + auto encodedBytes = fromHexString("14616c696365"); + auto paramAbi = ParameterAbi("string"); + + auto result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 6); + + // Encoding of uint32 number 20210926 + encodedBytes = fromHexString("ee643401"); + paramAbi.type = "uint32"; + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 4); + + // Encoding of int128 number 20180710 + encodedBytes = fromHexString("e6ee3301000000000000000000000000"); + paramAbi.type = "int128"; + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 16); + + // Encoding of vector of string ["Alice", "Bob"] + encodedBytes = fromHexString("0814416c6963650c426f62"); + paramAbi.type = "string[]"; + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 11); + + // Encoding of static array of string ["Alice", "Bob"] + encodedBytes = fromHexString("14416c6963650c426f62"); + paramAbi.type = "string[2]"; + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 10); + + // Encoding of tuple("Alice", [0, 0, ...], [0, 0, 0], false) + encodedBytes = fromHexString( + "14416c69636500000000000000000000000000000000000000000000000000000000000000000c00000000"); + paramAbi.type = "tuple"; + paramAbi.components.push_back(ParameterAbi("string")); + paramAbi.components.push_back(ParameterAbi("bytes32")); + paramAbi.components.push_back(ParameterAbi("bytes")); + paramAbi.components.push_back(ParameterAbi("bool")); + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 43); + + // Encoding of tuple>("Alice", ([0, 1], "Dwell not negative + // signs")) + encodedBytes = fromHexString( + "14416c696365080000000001000000604477656c6c206e6f74206e65676174697665207369676e73"); + paramAbi.type = "tuple"; + paramAbi.components.clear(); + paramAbi.components.push_back(ParameterAbi("string")); + paramAbi.components.push_back(ParameterAbi("tuple", vector{ + ParameterAbi("uint32[]"), + ParameterAbi("string"), + })); + result = scaleEncodingLength(paramAbi, *encodedBytes, 0); + BOOST_CHECK(result.has_value()); + BOOST_CHECK_EQUAL(result.value(), 40); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestTxDAG.cpp b/bcos-executor/test/unittest/libexecutor/TestTxDAG.cpp new file mode 100644 index 0000000..ae2e563 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestTxDAG.cpp @@ -0,0 +1,245 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unitest for TxDAG + * @author: jimmyshi + * @date: 2022-01-19 + */ + +#include "../../../src/dag/TxDAG2.h" +#include "TxDAG.h" +#include "bcos-utilities/Common.h" +#include "bcos-utilities/DataConvertUtility.h" +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::executor::critical; + +namespace bcos +{ +namespace test +{ +BOOST_AUTO_TEST_SUITE(TestTxDAG) + +CriticalFieldsInterface::Ptr makeCriticals( + int _totalTx, std::function(ID)> _id2CriticalFunc) +{ + CriticalFields::Ptr criticals = make_shared(_totalTx); + for (int i = 0; i < _totalTx; i++) + { + criticals->put(i, make_shared(_id2CriticalFunc(i))); + } + return criticals; +} + +void testTxDAG( + CriticalFieldsInterface::Ptr criticals, shared_ptr _txDag, string name) +{ + auto startTime = utcSteadyTime(); + cout << endl << name << " test start" << endl; + _txDag->init(criticals, [&](ID id) { + if (id % 100000 == 0) + { + std::cout << " [" << id << "] "; + } + }); + auto initTime = utcSteadyTime(); + try + { + _txDag->run(8); + } + catch (exception& e) + { + std::cout << "Exception" << boost::diagnostic_information(e) << std::endl; + } + auto endTime = utcSteadyTime(); + cout << endl + << name << " cost(ms): initDAG=" << initTime - startTime << " run=" << endTime - initTime + << " total=" << endTime - startTime << endl; +} + + +void runDagTest(shared_ptr _txDag, int _total, + std::function(ID)> _id2CriticalFunc, std::function _beforeRunCheck, + std::function _afterRunCheck) +{ + // ./test-bcos-executor --run_test=TestTxDAG/TestRun + CriticalFieldsInterface::Ptr criticals = makeCriticals(_total, _id2CriticalFunc); + + _txDag->init(criticals, [&](ID id) { + _beforeRunCheck(id); + if (id % 1000 == 0) + { + std::cout << " [" << id << "] "; + } + _afterRunCheck(id); + }); + + try + { + _txDag->run(8); + } + catch (exception& e) + { + std::cout << "Exception" << boost::diagnostic_information(e) << std::endl; + } +} + +void txDagTest(shared_ptr txDag) +{ + int total = 100; + ID criticalNum = 6; + vector runnings(criticalNum, -1); + + std::mutex testMutex; + auto id2CriticalFun = [&](ID id) -> vector { + return {bytes{static_cast(id % criticalNum)}}; + }; + auto beforeRunCheck = [&](ID id) { + std::unique_lock lock(testMutex); + BOOST_CHECK_MESSAGE(runnings[id % criticalNum] == -1, + "conflict at beginning: " << id << "-" << id % criticalNum << "-" + << runnings[id % criticalNum]); + runnings[id % criticalNum] = id; + }; + auto afterRunCheck = [&](ID id) { + std::unique_lock lock(testMutex); + BOOST_CHECK_MESSAGE(runnings[id % criticalNum] != -1, + "conflict at ending: " << id << "-" << id % criticalNum << "-" + << runnings[id % criticalNum]); + runnings[id % criticalNum] = -1; + }; + + runDagTest(txDag, total, id2CriticalFun, beforeRunCheck, afterRunCheck); +} + +void txDagDeepTreeTest(shared_ptr txDag) +{ + int total = 100; + ID slotNum = 2; + ID valueNum = 3; // values num under a slot + map runnings; + + auto id2CriticalFun = [&](ID id) -> vector { + ID slot = id % slotNum; + ID value = id % (slotNum * valueNum); + + if (value / slotNum == 0) + { + // return only slot + return {bytes{static_cast(slot)}}; + } + else + { + return {bytes{static_cast(slot), static_cast(value)}}; + } + }; + + auto beforeRunCheck = [&](ID id) { + if (id == 0) + { + return; + } + + auto critical = id2CriticalFun(id); + if (critical[0].size() == 1) + { + // only has slot + ID slot = critical[0][0]; + for (ID i = 0; i < valueNum; i++) + { + ID conflictValue = i * slotNum + slot; + ID unfinishedId = runnings[conflictValue]; + BOOST_CHECK_MESSAGE(unfinishedId == 0, + "conflict at beginning, id: " << id << " unfinishedId: " << unfinishedId); + runnings[conflictValue] = id; // update to my id + } + } + else + { + ID slot = critical[0][0]; + ID unfinishedId = runnings[slot]; + BOOST_CHECK_MESSAGE(unfinishedId == 0, + "parent conflict at beginning, id: " << id << " unfinishedId: " << unfinishedId); + + ID value = critical[0][1]; + unfinishedId = runnings[value]; + BOOST_CHECK_MESSAGE(unfinishedId == 0, + "myself conflict at beginning, id: " << id << " unfinishedId: " << unfinishedId); + runnings[value] = id; // update to my id + } + }; + std::mutex testMutex; + auto afterRunCheck = [&](ID id) { + if (id == 0) + { + return; + } + + auto critical = id2CriticalFun(id); + if (critical[0].size() == 1) + { + // only has slot + ID slot = critical[0][0]; + for (ID i = 0; i < valueNum; i++) + { + ID conflictValue = i * slotNum + slot; + ID unfinishedId = runnings[conflictValue]; + std::unique_lock lock(testMutex); + BOOST_CHECK_MESSAGE(unfinishedId == id, + "conflict at ending, id: " << id << " unfinishedId: " << unfinishedId); + runnings[conflictValue] = 0; // update to 0 + } + } + else + { + ID slot = critical[0][0]; + ID unfinishedId = runnings[slot]; + std::unique_lock lock(testMutex); + BOOST_CHECK_MESSAGE(unfinishedId == 0, + "parent conflict at ending, id: " << id << " unfinishedId: " << unfinishedId); + + ID value = critical[0][1]; + unfinishedId = runnings[value]; + BOOST_CHECK_MESSAGE(unfinishedId == id, + "myself conflict at ending, id: " << id << " unfinishedId: " << unfinishedId); + runnings[value] = 0; // update to my id + } + }; + + runDagTest(txDag, total, id2CriticalFun, beforeRunCheck, afterRunCheck); +} + +BOOST_AUTO_TEST_CASE(TestRun2) +{ + shared_ptr txDag = make_shared(); + txDagTest(txDag); +} + +BOOST_AUTO_TEST_CASE(TestRun4) +{ + shared_ptr txDag = make_shared(); + // FIXME + // txDagDeepTreeTest(txDag); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-executor/test/unittest/libexecutor/TestWasmExecutor.cpp b/bcos-executor/test/unittest/libexecutor/TestWasmExecutor.cpp new file mode 100644 index 0000000..29139fd --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TestWasmExecutor.cpp @@ -0,0 +1,1325 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : unittest for Wasm executor implementation + * @author: catli + * @date: 2021-10-19 + */ + +// if wasm ut crash on aarch64 linux check https://github.com/bytecodealliance/wasmtime/issues/4972 +// #if !defined(__aarch64__) && !defined(__linux__) + +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#ifdef WITH_WASM + +#include "../liquid/hello_world.h" +#include "../liquid/hello_world_caller.h" +#include "../liquid/transfer.h" +#include "../mock/MockLedger.h" +#include "../mock/MockTransactionalStorage.h" +#include "../mock/MockTxPool.h" +// #include "Common.h" +#include "bcos-codec/wrapper/CodecWrapper.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "executor/TransactionExecutor.h" +#include "executor/TransactionExecutorFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +struct WasmExecutorFixture +{ + WasmExecutorFixture() + { + boost::log::core::get()->set_logging_enabled(false); + hashImpl = std::make_shared(); + assert(hashImpl); + auto signatureImpl = std::make_shared(); + assert(signatureImpl); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + txpool = std::make_shared(); + backend = std::make_shared(hashImpl); + ledger = std::make_shared(); + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(8192); + executor = bcos::executor::TransactionExecutorFactory::build( + ledger, txpool, nullptr, backend, executionResultFactory, stateStorageFactory, hashImpl, true, false); + + + keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e") + ->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString( + "ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + + codec = std::make_unique(hashImpl, true); + + helloWorldBin.assign(hello_world_wasm, hello_world_wasm + hello_world_wasm_len); + helloWorldBin = codec->encode(helloWorldBin); + helloWorldAbi = string( + R"([{"inputs":[{"internalType":"string","name":"name","type":"string"}],"type":"constructor"},{"conflictFields":[{"kind":0,"path":[],"read_only":false,"slot":0}],"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"set","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"internalType":"string","type":"string"}],"type":"function"}])"); + + helloWorldCallerBin.assign( + hello_world_caller_wasm, hello_world_caller_wasm + hello_world_caller_wasm_len); + helloWorldCallerBin = codec->encode(helloWorldCallerBin); + helloWorldCallerAbi = string( + R"([{"inputs":[{"internalType":"string","name":"addr","type":"string"}],"type":"constructor"},{"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"set","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"internalType":"string","type":"string"}],"type":"function"}])"); + + transferBin.assign(transfer_wasm, transfer_wasm + transfer_wasm_len); + transferBin = codec->encode(transferBin); + transferAbi = string( + R"([{"inputs":[],"type":"constructor"},{"conflictFields":[{"kind":3,"path":[0],"read_only":false,"slot":0},{"kind":3,"path":[1],"read_only":false,"slot":0}],"constant":false,"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"},{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"transfer","outputs":[{"internalType":"bool","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"name","type":"string"}],"name":"query","outputs":[{"internalType":"uint32","type":"uint32"}],"type":"function"}])"); + createSysTable(); + } + ~WasmExecutorFixture() { boost::log::core::get()->set_logging_enabled(true); } + + void createSysTable() + { + // create / table + { + std::promise> promise2; + backend->asyncCreateTable( + "/", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise2.set_value(std::move(_table)); + }); + auto rootTable = promise2.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + newSubMap.insert(std::make_pair("apps", FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("/", FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("tables", FS_TYPE_DIR)); + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + rootTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + rootTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + rootTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + rootTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + rootTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + rootTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /tables table + { + std::promise> promise3; + backend->asyncCreateTable( + "/tables", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise3.set_value(std::move(_table)); + }); + auto tablesTable = promise3.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + tablesTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + tablesTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + tablesTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + tablesTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + tablesTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + tablesTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /apps table + { + std::promise> promise4; + backend->asyncCreateTable( + "/apps", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise4.set_value(std::move(_table)); + }); + auto appsTable = promise4.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + appsTable->setRow(FS_KEY_TYPE, std::move(tEntry)); + appsTable->setRow(FS_KEY_SUB, std::move(newSubEntry)); + appsTable->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + appsTable->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + appsTable->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + appsTable->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + } + } + + TransactionExecutor::Ptr executor; + CryptoSuite::Ptr cryptoSuite; + std::shared_ptr txpool; + std::shared_ptr backend; + std::shared_ptr ledger; + std::shared_ptr hashImpl; + + KeyPairInterface::Ptr keyPair; + int64_t gas = 3000000000; + std::unique_ptr codec; + + bytes helloWorldBin; + std::string helloWorldAbi; + + bytes helloWorldCallerBin; + std::string helloWorldCallerAbi; + + bytes transferBin; + std::string transferAbi; +}; +BOOST_FIXTURE_TEST_SUITE(TestWasmExecutor, WasmExecutorFixture) + +BOOST_AUTO_TEST_CASE(deployAndCall) +{ + bytes input; + + input.insert(input.end(), helloWorldBin.begin(), helloWorldBin.end()); + + bytes constructorParam = codec->encode(string("alice")); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + string selfAddress = "usr/alice/hello_world"; + + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", helloWorldAbi); + auto sender = *toHexString(string_view((char*)tx->sender().data(), tx->sender().size())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + params->setTo(selfAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result3->to(), sender); + + BOOST_CHECK(result3->message().empty()); + BOOST_CHECK(!result3->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + auto address = result3->newEVMContractAddress(); + + TwoPCParams commitParams; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = std::string("/apps/") + std::string(result3->newEVMContractAddress()); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable(tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + // start new block + auto blockHeader2 = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader2->setNumber(2); + + parentInfos = {{blockHeader2->number() - 1, h256(blockHeader2->number() - 1)}}; + blockHeader2->setParentInfo(parentInfos); + blockHeader2->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader2->number() - 1); + std::promise nextPromise2; + executor->nextBlockHeader(0, std::move(blockHeader2), [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + + nextPromise2.set_value(); + }); + + nextPromise2.get_future().get(); + + // set "fisco bcos" + bytes txInput; + char inputBytes[] = "4ed3885e28666973636f2062636f73"; + boost::algorithm::unhex( + &inputBytes[0], inputBytes + sizeof(inputBytes) - 1, std::back_inserter(txInput)); + auto params2 = std::make_unique(); + params2->setContextID(101); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(std::string(sender)); + params2->setTo(std::string(address)); + params2->setOrigin(std::string(sender)); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(txInput)); + params2->setType(NativeExecutionMessage::MESSAGE); + + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + BOOST_CHECK(result4); + BOOST_CHECK_EQUAL(result4->status(), 0); + BOOST_CHECK_EQUAL(result4->message(), ""); + BOOST_CHECK_EQUAL(result4->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result4->gasAvailable(), gas); + + // read "fisco bcos" + bytes queryBytes; + char inputBytes2[] = "6d4ce63c"; + boost::algorithm::unhex( + &inputBytes2[0], inputBytes2 + sizeof(inputBytes2) - 1, std::back_inserter(queryBytes)); + + auto params3 = std::make_unique(); + params3->setContextID(102); + params3->setSeq(1000); + params3->setDepth(0); + params3->setFrom(std::string(sender)); + params3->setTo(std::string(address)); + params3->setOrigin(std::string(sender)); + params3->setStaticCall(true); + params3->setGasAvailable(gas); + params3->setData(std::move(queryBytes)); + params3->setType(ExecutionMessage::MESSAGE); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(params3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + BOOST_CHECK(result5); + BOOST_CHECK_EQUAL(result5->status(), 0); + BOOST_CHECK_EQUAL(result5->message(), ""); + BOOST_CHECK_EQUAL(result5->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result5->gasAvailable(), gas); + + std::string output; + codec->decode(result5->data(), output); + BOOST_CHECK_EQUAL(output, "fisco bcos"); +} + +BOOST_AUTO_TEST_CASE(deployError) +{ + bytes input; + + input.insert(input.end(), helloWorldBin.begin(), helloWorldBin.end()); + + bytes constructorParam = codec->encode(string("alice")); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + string selfAddress = "usr/alice/hello_world"; + + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", helloWorldAbi); + auto sender = *toHexString(string_view((char*)tx->sender().data(), tx->sender().size())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + { + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + params->setTo(selfAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result3->to(), sender); + + BOOST_CHECK(result3->message().empty()); + BOOST_CHECK(!result3->newEVMContractAddress().empty()); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + TwoPCParams commitParams; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = std::string("/apps/") + std::string(result3->newEVMContractAddress()); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable( + tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + } + + string errorAddress = "usr/alice/hello_world/hello_world"; + + { + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + // error address + params->setTo(errorAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(2); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise p1; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + p1.set_value(); + }); + p1.get_future().get(); + + std::promise p2; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + p2.set_value(std::move(result)); + }); + + auto r2 = p2.get_future().get(); + r2->setSeq(1001); + + std::promise p3; + executor->dmcExecuteTransaction( + std::move(r2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + p3.set_value(std::move(result)); + }); + + auto r3 = p3.get_future().get(); + r3->setSeq(1000); + + BOOST_CHECK_EQUAL(r3->status(), 15); + + std::promise p4; + executor->dmcExecuteTransaction( + std::move(r3), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + p4.set_value(std::move(result)); + }); + + auto r4 = p4.get_future().get(); + + BOOST_CHECK_EQUAL(r4->status(), 16); + BOOST_CHECK_EQUAL(r4->origin(), sender); + BOOST_CHECK_EQUAL(r4->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(r4->to(), sender); + + BOOST_CHECK(r4->message() == "Error occurs in build BFS dir"); + BOOST_CHECK_LT(r4->gasAvailable(), gas); + } +} + +BOOST_AUTO_TEST_CASE(deployAndCall_100) +{ + bytes input; + + input.insert(input.end(), helloWorldBin.begin(), helloWorldBin.end()); + + bytes constructorParam = codec->encode(string("alice")); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + string selfAddress = "usr/alice/hello_world"; + + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", helloWorldAbi); + auto sender = *toHexString(string_view((char*)tx->sender().data(), tx->sender().size())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setType(bcos::protocol::ExecutionMessage::TXHASH); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + params->setTo(selfAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(ExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), paramsBak.to()); + BOOST_CHECK_EQUAL(result3->to(), sender); + + BOOST_CHECK(result3->message().empty()); + BOOST_CHECK(!result3->newEVMContractAddress().empty()); + BOOST_CHECK_EQUAL(result3->gasAvailable(), 2999552552); + + auto address = result3->newEVMContractAddress(); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), selfAddress); + TwoPCParams commitParams; + commitParams.number = 1; + + std::promise preparePromise; + executor->prepare(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + preparePromise.set_value(); + }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit(commitParams, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + commitPromise.set_value(); + }); + commitPromise.get_future().get(); + auto tableName = std::string("/apps/") + std::string(result3->newEVMContractAddress()); + + EXECUTOR_LOG(TRACE) << "Checking table: " << tableName; + std::promise
tablePromise; + backend->asyncOpenTable(tableName, [&](Error::UniquePtr&& error, std::optional
&& table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + tablePromise.set_value(std::move(*table)); + }); + auto table = tablePromise.get_future().get(); + + auto entry = table.getRow("code"); + BOOST_CHECK(entry); + BOOST_CHECK_GT(entry->getField(0).size(), 0); + + // start new block + auto blockHeader2 = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader2->setNumber(2); + + parentInfos = {{blockHeader2->number() - 1, h256(blockHeader2->number() - 1)}}; + blockHeader2->setParentInfo(parentInfos); + blockHeader2->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader2->number() - 1); + std::promise nextPromise2; + executor->nextBlockHeader(0, std::move(blockHeader2), [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + + nextPromise2.set_value(); + }); + + nextPromise2.get_future().get(); + char inputBytes[] = "4ed3885e28666973636f2062636f73"; + + auto helloSet = [&](size_t i) -> int64_t { + // set "fisco bcos" + bytes txInput; + boost::algorithm::unhex( + &inputBytes[0], inputBytes + sizeof(inputBytes) - 1, std::back_inserter(txInput)); + auto params2 = std::make_unique(); + params2->setContextID(i); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(std::string(sender)); + params2->setTo(std::string(address)); + params2->setOrigin(std::string(sender)); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(txInput)); + params2->setType(NativeExecutionMessage::MESSAGE); + cout << ">>>>>>>>>>>>Executing set id=" << i << endl; + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + BOOST_CHECK(result2); + BOOST_CHECK_EQUAL(result2->status(), 0); + BOOST_CHECK_EQUAL(result2->message(), ""); + BOOST_CHECK_EQUAL(result2->newEVMContractAddress(), ""); + return result2->gasAvailable(); + }; + + auto helloGet = [&](size_t i, const string& ret = string("fisco bcos")) -> int64_t { + // read "fisco bcos" + bytes queryBytes; + + char inputBytes2[] = "6d4ce63c"; + boost::algorithm::unhex( + &inputBytes2[0], inputBytes2 + sizeof(inputBytes2) - 1, std::back_inserter(queryBytes)); + + auto params3 = std::make_unique(); + params3->setContextID(i); + params3->setSeq(1000); + params3->setDepth(0); + params3->setFrom(std::string(sender)); + params3->setTo(std::string(address)); + params3->setOrigin(std::string(sender)); + params3->setStaticCall(false); + params3->setGasAvailable(gas); + params3->setData(std::move(queryBytes)); + params3->setType(ExecutionMessage::MESSAGE); + cout << ">>>>>>>>>>>>Executing get id=" << i << endl; + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(params3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK(result3); + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(result3->message(), ""); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), ""); + std::string output; + codec->decode(result3->data(), output); + BOOST_CHECK_EQUAL(output, "fisco bcos"); + return result3->gasAvailable(); + }; + int64_t getGas = 2999989808; + int64_t setGas = 2999982821; + size_t id = 101; + BOOST_CHECK_EQUAL(helloSet(id++), 2999983105); + BOOST_CHECK_EQUAL(helloSet(id++), setGas); + BOOST_CHECK_EQUAL(helloGet(id++), getGas); + BOOST_CHECK_EQUAL(helloSet(id++), setGas); + BOOST_CHECK_EQUAL(helloSet(id++), setGas); + + for (size_t i = 899; i < 1001; ++i) + { + if (i % 3 == 0) + { + BOOST_CHECK_EQUAL(helloSet(i), setGas); + } + else if (i % 3 == 1) + { + BOOST_CHECK_EQUAL(helloGet(i), getGas); + } + else + { + BOOST_CHECK_EQUAL(helloSet(i), setGas); + } + } + BOOST_CHECK_EQUAL(helloGet(id++), getGas); +} + +BOOST_AUTO_TEST_CASE(externalCall) +{ + string aliceAddress = "usr/alice/hello_world"; + string bobAddress = "/usr/bob/hello_world_caller"; + string sender; + // -------------------------------- + // Create contract HelloWorld + // -------------------------------- + { + bytes input; + + input.insert(input.end(), helloWorldBin.begin(), helloWorldBin.end()); + + bytes constructorParam = codec->encode(string("alice")); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", helloWorldAbi); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(100); + params->setSeq(1000); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + params->setTo(aliceAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + auto address = result3->newEVMContractAddress(); + BOOST_CHECK_EQUAL(result3->type(), NativeExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(address, aliceAddress); + } + + // -------------------------------- + // Create contract HelloWorldCaller + // -------------------------------- + { + bytes input; + + input.insert(input.end(), helloWorldCallerBin.begin(), helloWorldCallerBin.end()); + + bytes constructorParam = codec->encode(aliceAddress); + constructorParam = codec->encode(constructorParam); + input.insert(input.end(), constructorParam.begin(), constructorParam.end()); + + auto tx = fakeTransaction( + cryptoSuite, keyPair, "", input, 102, 100001, "1", "1", helloWorldCallerAbi); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(200); + params->setSeq(1002); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + params->setTo(bobAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(2); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + result->setSeq(1003); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1002); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + auto address = result3->newEVMContractAddress(); + BOOST_CHECK_EQUAL(result3->type(), NativeExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->status(), 0); + BOOST_CHECK_EQUAL(address, bobAddress); + } + + // -------------------------------- + // HelloWorldCaller calls `set` of HelloWorld + // -------------------------------- + { + auto params = std::make_unique(); + params->setContextID(300); + params->setSeq(1003); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(bobAddress)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + bytes data; + auto encodedParams = codec->encodeWithSig("set(string)", string("fisco bcos")); + data.insert(data.end(), encodedParams.begin(), encodedParams.end()); + + params->setData(data); + params->setType(NativeExecutionMessage::MESSAGE); + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(3); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, NativeExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(result->data().size(), 15); + BOOST_CHECK_EQUAL(result->contextID(), 300); + BOOST_CHECK_EQUAL(result->seq(), 1003); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), ""); + BOOST_CHECK_EQUAL(result->origin(), std::string(sender)); + BOOST_CHECK_EQUAL(result->from(), std::string(bobAddress)); + BOOST_CHECK_EQUAL(result->to(), aliceAddress); + BOOST_CHECK_LT(result->gasAvailable(), gas); + BOOST_CHECK_GT(result->keyLocks().size(), 0); + + result->setSeq(1004); + + // clear the keylock + result->setKeyLocks({}); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + BOOST_CHECK(result2); + BOOST_CHECK_EQUAL(result2->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result2->data().size(), 0); + BOOST_CHECK_EQUAL(result2->contextID(), 300); + BOOST_CHECK_EQUAL(result2->seq(), 1004); + BOOST_CHECK_EQUAL(result2->origin(), std::string(sender)); + BOOST_CHECK_EQUAL(result2->from(), aliceAddress); + BOOST_CHECK_EQUAL(result2->to(), bobAddress); + BOOST_CHECK_EQUAL(result2->create(), false); + BOOST_CHECK_EQUAL(result2->status(), 0); + } +} + +BOOST_AUTO_TEST_CASE(performance) +{ + size_t count = 10 * 1000; + + bytes input; + input.insert(input.end(), transferBin.begin(), transferBin.end()); + + input.push_back(0); + + string transferAddress = "usr/alice/transfer"; + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1", transferAbi); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + { + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + params->setOrigin(std::string(sender)); + params->setFrom(std::string(sender)); + params->setTo(transferAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(1); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + ledger->setBlockNumber(blockHeader->number() - 1); + std::promise nextPromise; + executor->nextBlockHeader(0, blockHeader, [&](bcos::Error::Ptr&& error) { + BOOST_CHECK(!error); + nextPromise.set_value(); + }); + nextPromise.get_future().get(); + + // -------------------------------- + // Create contract transfer + // -------------------------------- + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + auto address = result3->newEVMContractAddress(); + + std::vector requests; + requests.reserve(count); + // Transfer + for (size_t i = 0; i < count; ++i) + { + params = std::make_unique(); + params->setContextID(i); + params->setSeq(6000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(address)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setCreate(false); + + std::string from = "alice"; + std::string to = "bob"; + uint32_t amount = 1; + bytes data; + auto encodedParams = + codec->encodeWithSig("transfer(string,string,uint32)", from, to, amount); + data.insert(data.end(), encodedParams.begin(), encodedParams.end()); + params->setData(data); + params->setType(NativeExecutionMessage::MESSAGE); + + requests.emplace_back(std::move(params)); + } + + auto now = std::chrono::system_clock::now(); + + for (auto& it : requests) + { + std::promise> outputPromise; + executor->dmcExecuteTransaction( + std::move(it), [&outputPromise](bcos::Error::UniquePtr&& error, + NativeExecutionMessage::UniquePtr&& result) { + if (error) + { + std::cout << "Error!" << boost::diagnostic_information(*error); + } + // BOOST_CHECK(!error); + outputPromise.set_value(std::move(result)); + }); + ExecutionMessage::UniquePtr result4 = std::move(*outputPromise.get_future().get()); + if (result4->status() != 0) + { + std::cout << "Error: " << result->status() << std::endl; + } + } + + std::cout << "Execute elapsed: " + << std::chrono::duration_cast( + std::chrono::system_clock::now() - now) + .count() + << std::endl; + } + + { + bytes queryBytes; + + auto encodedParams = codec->encodeWithSig("query(string)", string("alice")); + queryBytes.insert(queryBytes.end(), encodedParams.begin(), encodedParams.end()); + + auto params = std::make_unique(); + params->setContextID(102); + params->setSeq(1000); + params->setDepth(0); + params->setFrom(std::string(sender)); + params->setTo(std::string(transferAddress)); + params->setOrigin(std::string(sender)); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(std::move(queryBytes)); + params->setType(ExecutionMessage::MESSAGE); + + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result5 = executePromise.get_future().get(); + + BOOST_CHECK(result5); + BOOST_CHECK_EQUAL(result5->status(), 0); + BOOST_CHECK_EQUAL(result5->message(), ""); + BOOST_CHECK_EQUAL(result5->newEVMContractAddress(), ""); + BOOST_CHECK_LT(result5->gasAvailable(), gas); + + uint32_t dept; + codec->decode(result5->data(), dept); + BOOST_CHECK_EQUAL(dept, numeric_limits::max() - count); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos +// #endif + +#endif \ No newline at end of file diff --git a/bcos-executor/test/unittest/libexecutor/TxDAG.cpp b/bcos-executor/test/unittest/libexecutor/TxDAG.cpp new file mode 100644 index 0000000..35712d2 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TxDAG.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Generate transaction DAG for parallel execution + * @author: jimmyshi + * @date: 2019-1-8 + */ + +#include "TxDAG.h" +#include "bcos-executor/src/dag/CriticalFields.h" +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::executor::critical; + +#define DAG_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("EXECUTOR") + +// Generate DAG according with given transactions +void TxDAG::init(critical::CriticalFieldsInterface::Ptr _txsCriticals, ExecuteTxFunc const& _f) +{ + auto txsSize = _txsCriticals->size(); + DAG_LOG(DEBUG) << LOG_DESC("Begin init transaction DAG") << LOG_KV("transactionNum", txsSize); + + f_executeTx = _f; + m_totalParaTxs = _txsCriticals->size(); + + // init DAG + m_dag.init(txsSize); + + // define conflict handler + auto onConflictHandler = [&](ID pId, ID id) { m_dag.addEdge(pId, id); }; + auto onFirstConflictHandler = [&](ID id) { + // do nothing + (void)id; + }; + auto onEmptyConflictHandler = [&](ID id) { + // do nothing + (void)id; + }; + auto onAllConflictHandler = [&](ID id) { + // do nothing + // ignore normal tx, only handle DAG tx, normal tx has been sent back to be executed by DMT + (void)id; + }; + + // parse criticals + _txsCriticals->traverseDag( + onConflictHandler, onFirstConflictHandler, onEmptyConflictHandler, onAllConflictHandler); + + // Generate DAG + m_dag.generate(); + + DAG_LOG(TRACE) << LOG_DESC("End init transaction DAG"); +} + +void TxDAG::run(unsigned int threadNum) +{ + auto parallelTimeOut = utcSteadyTime() + 30000; // 30 timeout + + std::atomic isWarnedTimeout(false); + tbb::parallel_for(tbb::blocked_range(0, threadNum), + [&](const tbb::blocked_range& _r) { + (void)_r; + + while (!hasFinished()) + { + if (!isWarnedTimeout.load() && utcSteadyTime() >= parallelTimeOut) + { + isWarnedTimeout.store(true); + EXECUTOR_LOG(WARNING) + << LOG_BADGE("executeBlock") << LOG_DESC("Para execute block timeout") + << LOG_KV("txNum", m_totalParaTxs); + } + executeUnit(); + } + }); +} + +int TxDAG::executeUnit() +{ + int exeCnt = 0; + ID id = m_dag.waitPop(); + while (id != INVALID_ID) + { + do + { + exeCnt += 1; + f_executeTx(id); + id = m_dag.consume(id); + } while (id != INVALID_ID); + id = m_dag.waitPop(); + } + if (exeCnt > 0) + { + Guard l(x_exeCnt); + m_exeCnt += exeCnt; + } + return exeCnt; +} diff --git a/bcos-executor/test/unittest/libexecutor/TxDAG.h b/bcos-executor/test/unittest/libexecutor/TxDAG.h new file mode 100644 index 0000000..0436339 --- /dev/null +++ b/bcos-executor/test/unittest/libexecutor/TxDAG.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Generate transaction DAG for parallel execution + * @author: jimmyshi + * @date: 2019-1-8 + */ + +#pragma once +#include +#include +#include +#include "bcos-executor/src/dag/TxDAGInterface.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executive/TransactionExecutive.h" +#include "bcos-executor/src/executor/TransactionExecutor.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/Transaction.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace executor +{ +class TransactionExecutive; + +class TxDAG : public virtual TxDAGInterface +{ +public: + TxDAG() : m_dag() {} + virtual ~TxDAG() {} + + // Generate DAG according with given transactions + void init( + critical::CriticalFieldsInterface::Ptr _txsCriticals, ExecuteTxFunc const& _f) override; + + void run(unsigned int threadNum) override; + + // Called by thread + // Has the DAG reach the end? + // process-exit related: + // if the m_stop is true(may be the storage has exceptioned), return true + // directly + bool hasFinished() { return (m_exeCnt >= m_totalParaTxs) || (m_stop.load()); } + + // Called by thread + // Execute a unit in DAG + // This function can be parallel + int executeUnit(); + + ID paraTxsNumber() { return m_totalParaTxs; } + + ID haveExecuteNumber() { return m_exeCnt; } + void stop() { m_stop.store(true); } + +private: + ExecuteTxFunc f_executeTx; + bcos::protocol::TransactionsPtr m_transactions; + DAG m_dag; + + ID m_exeCnt = 0; + ID m_totalParaTxs = 0; + + mutable std::mutex x_exeCnt; + std::atomic_bool m_stop = {false}; +}; + +} // namespace executor +} // namespace bcos diff --git a/bcos-executor/test/unittest/libprecompiled/AccountPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/AccountPrecompiledTest.cpp new file mode 100644 index 0000000..96cdc37 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/AccountPrecompiledTest.cpp @@ -0,0 +1,875 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AccountPrecompiledTest.cpp + * @author: kyonRay + * @date 2021-11-15 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/extension/AccountManagerPrecompiled.h" +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::crypto; +using namespace bcos::codec; + +namespace bcos::test +{ +class AccountPrecompiledFixture : public PrecompiledFixture +{ +public: + AccountPrecompiledFixture() + { + codec = std::make_shared(hashImpl, false); + helloAddress = Address("0x1234654b49838bd3e9466c85a4cc3428c9601234").hex(); + setIsWasm(false, true); + } + + ~AccountPrecompiledFixture() override = default; + + ExecutionMessage::UniquePtr deployHelloInAuthCheck(std::string newAddress, BlockNumber _number, + Address _address = Address(), bool _errorInFrozen = false) + { + bytes input; + boost::algorithm::unhex(helloBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + helloAddress = newAddress; + + // toChecksumAddress(addressString, hashImpl); + params->setTo(newAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(_number, m_blockVersion); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + if (_errorInFrozen) + { + commitBlock(_number); + return result; + } + + /// call Auth manager to check deploy auth + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + + /// callback to create context + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), newAddress); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + BOOST_CHECK_EQUAL(result3->contextID(), 99); + BOOST_CHECK_EQUAL(result3->seq(), 1000); + BOOST_CHECK_EQUAL(result3->create(), false); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), newAddress); + BOOST_CHECK(result3->to() == sender); + + commitBlock(_number); + + return result3; + } + + ExecutionMessage::UniquePtr helloGet( + protocol::BlockNumber _number, int _errorCode = 0, Address _address = Address()) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("get()"); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_number); + params2->setSeq(1001); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(helloAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + + return result2; + }; + + ExecutionMessage::UniquePtr helloSet(protocol::BlockNumber _number, const std::string& _value, + int _errorCode = 0, Address _address = Address()) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("set(string)", _value); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_number); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(helloAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + + return result2; + }; + + ExecutionMessage::UniquePtr setAccountStatus(protocol::BlockNumber _number, Address account, + uint8_t status, int _errorCode = 0, bool exist = false, bool errorInAccountManager = false, + std::string _sender = "1111654b49838bd3e9466c85a4cc3428c9601111") + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("setAccountStatus(address,uint8)", account, status); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address(_sender); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_number); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::ACCOUNT_MGR_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call account manager + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + result2->takeKeyLocks(); + + // call committee manager to get _committee + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK(result3->status() == 0); + BOOST_CHECK(result3->to() == ACCOUNT_MGR_ADDRESS); + BOOST_CHECK(result3->from() == AUTH_COMMITTEE_ADDRESS); + BOOST_CHECK(result3->type() == ExecutionMessage::FINISHED); + + result3->setSeq(1000); + + /// committee manager call back to account manager + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + BOOST_CHECK(result4->status() == 0); + BOOST_CHECK(result4->from() == ACCOUNT_MGR_ADDRESS); + BOOST_CHECK(result4->type() == ExecutionMessage::MESSAGE); + + result4->setSeq(1002); + + /// account manager call to committee, get committee info + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + BOOST_CHECK(result5->status() == 0); + BOOST_CHECK(result5->to() == ACCOUNT_MGR_ADDRESS); + BOOST_CHECK(result5->type() == ExecutionMessage::FINISHED); + + result5->setSeq(1000); + + /// committee call back to account manager + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + + if (errorInAccountManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result6->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + commitBlock(_number); + return result6; + } + + result6->setSeq(1003); + + // external create + std::promise executePromise7; + executor->dmcExecuteTransaction(std::move(result6), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise7.set_value(std::move(result)); + }); + auto result7 = executePromise7.get_future().get(); + + if (exist) + { + // if account exist, just callback + result7->setSeq(1000); + std::promise executePromise8; + executor->dmcExecuteTransaction(std::move(result7), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise8.set_value(std::move(result)); + }); + auto result8 = executePromise8.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result8->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result8; + } + + result7->setSeq(1004); + + // external get deploy auth + std::promise executePromise8; + executor->dmcExecuteTransaction(std::move(result7), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise8.set_value(std::move(result)); + }); + auto result8 = executePromise8.get_future().get(); + + result8->setSeq(1003); + + // get deploy auth + std::promise executePromise9; + executor->dmcExecuteTransaction(std::move(result8), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise9.set_value(std::move(result)); + }); + auto result9 = executePromise9.get_future().get(); + + result9->setSeq(1005); + + // external call bfs + std::promise executePromise10; + executor->dmcExecuteTransaction(std::move(result9), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise10.set_value(std::move(result)); + }); + auto result10 = executePromise10.get_future().get(); + + // call bfs success, callback to create + result10->setSeq(1003); + + std::promise executePromise11; + executor->dmcExecuteTransaction(std::move(result10), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise11.set_value(std::move(result)); + }); + auto result11 = executePromise11.get_future().get(); + + // create success, callback to precompiled + result11->setSeq(1000); + + std::promise executePromise12; + executor->dmcExecuteTransaction(std::move(result11), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise12.set_value(std::move(result)); + }); + auto result12 = executePromise12.get_future().get(); + + // external call, set account status + result12->setSeq(1006); + std::promise executePromise13; + executor->dmcExecuteTransaction(std::move(result12), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise13.set_value(std::move(result)); + }); + auto result13 = executePromise13.get_future().get(); + + // external call back + result13->setSeq(1000); + std::promise executePromise14; + executor->dmcExecuteTransaction(std::move(result13), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise14.set_value(std::move(result)); + }); + auto result14 = executePromise14.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result14->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result14; + }; + + ExecutionMessage::UniquePtr getAccountStatusByManager(protocol::BlockNumber _number, + Address account, int _errorCode = 0, bool errorInAccountManager = false, + bool noExist = true) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("getAccountStatus(address)", account); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_number); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::ACCOUNT_MGR_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (errorInAccountManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + commitBlock(_number); + return result2; + } + + result2->setSeq(1001); + result2->takeKeyLocks(); + + // external call + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + result3->takeKeyLocks(); + + // external call callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result4->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result4; + }; + + ExecutionMessage::UniquePtr getAccountStatus( + protocol::BlockNumber _number, Address account, int _errorCode = 0) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("getAccountStatus()"); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_number); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(account.hex()); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + std::string sender; + std::string helloAddress; + + // clang-format off + std::string helloBin = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610235565b5050565b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561022b5780601f106102005761010080835404028352916020019161022b565b820191906000526020600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027657805160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760008160009055506001016102bb565b5090565b9056fea2646970667358221220bf4a4547462412a2d27d205b50ba5d4dba42f506f9ea3628eb3d0299c9c28d5664736f6c634300060a0033"; + // clang-format on +}; + +BOOST_FIXTURE_TEST_SUITE(AccountPrecompiledTest, AccountPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(createAccountTest) +{ + Address newAccount = Address("27505f128bd4d00c2698441b1f54ef843b837215"); + Address errorAccount = Address("17505f128bd4d00c2698441b1f54ef843b837211"); + BlockNumber number = 2; + { + auto response = setAccountStatus(number++, newAccount, 0); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + } + + // check create + { + auto response2 = list(number++, "/usr"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "27505f128bd4d00c2698441b1f54ef843b837215"); + BOOST_CHECK(std::get<1>(fileInfo) == bcos::executor::FS_TYPE_LINK); + + auto response3 = list(number++, "/usr/27505f128bd4d00c2698441b1f54ef843b837215"); + int32_t ret2; + std::vector bfsInfos2; + codec->decode(response3->data(), ret2, bfsInfos2); + BOOST_CHECK(ret2 == 0); + BOOST_CHECK(bfsInfos2.size() == 1); + BOOST_CHECK(std::get<0>(bfsInfos2[0]) == "27505f128bd4d00c2698441b1f54ef843b837215"); + } + + // setAccount exist again + { + setAccountStatus(number++, newAccount, 0, 0, true); + } + + // check status is 0 + { + auto response = getAccountStatusByManager(number++, newAccount); + BOOST_CHECK(response->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(response->data(), status); + BOOST_CHECK(status == 0); + + // not exist account in chain, return 0 by default + auto response2 = getAccountStatusByManager(number++, errorAccount); + BOOST_CHECK(response2->status() == 0); + uint8_t status2 = UINT8_MAX; + codec->decode(response2->data(), status2); + BOOST_CHECK(status2 == 0); + } + + // check status by account contract + { + auto response = getAccountStatus(number++, newAccount); + BOOST_CHECK(response->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(response->data(), status); + BOOST_CHECK(status == 0); + auto response2 = getAccountStatus(number++, errorAccount); + BOOST_CHECK(response2->status() == (int32_t)TransactionStatus::CallAddressError); + } +} + +BOOST_AUTO_TEST_CASE(setAccountStatusTest) +{ + Address newAccount = Address("27505f128bd4d00c2698441b1f54ef843b837215"); + Address errorAccount = Address("17505f128bd4d00c2698441b1f54ef843b837211"); + Address h1 = Address("12305f128bd4d00c2698441b1f54ef843b837123"); + BlockNumber number = 2; + + // setAccountStatus account not exist + { + auto response = setAccountStatus(number++, newAccount, 0); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + } + + // use account to deploy + { + auto response1 = deployHelloInAuthCheck(helloAddress, number++, newAccount); + BOOST_CHECK(response1->status() == 0); + auto response2 = helloSet(number++, "test1", 0, newAccount); + BOOST_CHECK(response2->status() == 0); + auto response3 = helloGet(number++, 0, newAccount); + std::string hello; + codec->decode(response3->data(), hello); + BOOST_CHECK(hello == "test1"); + } + + // setAccountStatus account exist + { + auto response = setAccountStatus(number++, newAccount, 1, 0, true); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + + auto rsp2 = getAccountStatus(number++, newAccount); + BOOST_CHECK(rsp2->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(rsp2->data(), status); + BOOST_CHECK(status == 1); + } + + // use freeze account to use + { + auto response1 = deployHelloInAuthCheck(h1.hex(), number++, newAccount, true); + BOOST_CHECK(response1->status() == (uint32_t)TransactionStatus::AccountFrozen); + auto response2 = helloSet(number++, "test2", 0, newAccount); + BOOST_CHECK(response2->status() == (uint32_t)TransactionStatus::AccountFrozen); + + auto response3 = helloGet(number++, 0); + BOOST_CHECK(response3->status() == (uint32_t)TransactionStatus::CallAddressError); + } + + // use error account to setAccountStatus + { + auto response = + setAccountStatus(number++, newAccount, 1, 0, true, true, errorAccount.hex()); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == CODE_NO_AUTHORIZED); + } +} + +BOOST_AUTO_TEST_CASE(setAccountStatusErrorTest) +{ + Address newAccount = Address("27505f128bd4d00c2698441b1f54ef843b837215"); + Address errorAccount = Address("17505f128bd4d00c2698441b1f54ef843b837211"); + BlockNumber number = 2; + + // setAccountStatus account not exist + { + auto response = setAccountStatus(number++, newAccount, 0); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + } + + // use not governor account set + { + auto response = setAccountStatus( + number++, newAccount, 1, CODE_NO_AUTHORIZED, false, true, errorAccount.hex()); + BOOST_CHECK(response->status() == 0); + } + + // set governor account status + { + auto response = setAccountStatus(number++, Address(admin), 1, 0, false, true); + BOOST_CHECK(response->status() == 15); + BOOST_CHECK(response->message() == "Should not set governor's status."); + } +} + +BOOST_AUTO_TEST_CASE(abolishTest) +{ + Address newAccount = Address("27505f128bd4d00c2698441b1f54ef843b837215"); + Address h1 = Address("12305f128bd4d00c2698441b1f54ef843b837123"); + BlockNumber number = 2; + + // setAccountStatus account not exist + { + auto response = setAccountStatus(number++, newAccount, 0); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + } + + // use account to deploy + { + auto response1 = deployHelloInAuthCheck(helloAddress, number++, newAccount); + BOOST_CHECK(response1->status() == 0); + auto response2 = helloSet(number++, "test1", 0, newAccount); + BOOST_CHECK(response2->status() == 0); + auto response3 = helloGet(number++, 0, newAccount); + std::string hello; + codec->decode(response3->data(), hello); + BOOST_CHECK(hello == "test1"); + } + + // setAccountStatus account exist, abolish account + { + auto response = setAccountStatus(number++, newAccount, 2, 0, true); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + + auto rsp2 = getAccountStatus(number++, newAccount); + BOOST_CHECK(rsp2->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(rsp2->data(), status); + BOOST_CHECK(status == 2); + } + + // use abolish account to use + { + auto response1 = deployHelloInAuthCheck(h1.hex(), number++, newAccount, true); + BOOST_CHECK(response1->status() == (uint32_t)TransactionStatus::AccountAbolished); + auto response2 = helloSet(number++, "test2", 0, newAccount); + BOOST_CHECK(response2->status() == (uint32_t)TransactionStatus::AccountAbolished); + } + + // freeze/unfreeze abolish account status + { + auto response = setAccountStatus(number++, newAccount, 1, 0, true); + BOOST_CHECK(response->status() == (uint32_t)TransactionStatus::PrecompiledError); + + auto response2 = setAccountStatus(number++, newAccount, 0, 0, true); + BOOST_CHECK(response2->status() == (uint32_t)TransactionStatus::PrecompiledError); + } + + // abolish account again, success + { + auto response = setAccountStatus(number++, newAccount, 2, 0, true); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + + auto rsp2 = getAccountStatus(number++, newAccount); + BOOST_CHECK(rsp2->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(rsp2->data(), status); + BOOST_CHECK(status == 2); + } +} + +BOOST_AUTO_TEST_CASE(parallelSetTest) +{ + Address newAccount = Address("27505f128bd4d00c2698441b1f54ef843b837215"); + BlockNumber number = 2; + + // setAccountStatus account not exist + { + auto response = setAccountStatus(number++, newAccount, 0); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + } + + // use account to deploy + { + auto response1 = deployHelloInAuthCheck(helloAddress, number++, newAccount); + BOOST_CHECK(response1->status() == 0); + auto response2 = helloSet(number++, "test1", 0, newAccount); + BOOST_CHECK(response2->status() == 0); + auto response3 = helloGet(number++, 0, newAccount); + std::string hello; + codec->decode(response3->data(), hello); + BOOST_CHECK(hello == "test1"); + } + + // setAccountStatus account exist, freeze account, in the same block, still can call + { + auto num = number++; + nextBlock(num); + auto response = setAccountStatus(-1, newAccount, 1, 0, true); + BOOST_CHECK(response->status() == 0); + int32_t result = -1; + codec->decode(response->data(), result); + BOOST_CHECK(result == 0); + + // get last status + auto rsp2 = getAccountStatus(-1, newAccount); + BOOST_CHECK(rsp2->status() == 0); + uint8_t status = UINT8_MAX; + codec->decode(rsp2->data(), status); + BOOST_CHECK(status == 0); + + auto response2 = helloSet(-1, "test2", 0, newAccount); + BOOST_CHECK(response2->status() == 0); + auto response3 = helloGet(-1, 0, newAccount); + std::string hello; + codec->decode(response3->data(), hello); + BOOST_CHECK(hello == "test2"); + commitBlock(num); + } + + // next block will be frozen + { + auto response2 = helloSet(number++, "test2", 0, newAccount); + BOOST_CHECK(response2->status() == (uint32_t)TransactionStatus::AccountFrozen); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/AuthPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/AuthPrecompiledTest.cpp new file mode 100644 index 0000000..f11ccac --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/AuthPrecompiledTest.cpp @@ -0,0 +1,2055 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AuthPrecompiledTest.cpp + * @author: kyonRay + * @date 2021-11-15 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/extension/AuthManagerPrecompiled.h" +#include "precompiled/extension/ContractAuthMgrPrecompiled.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::crypto; +using namespace bcos::codec; + +namespace bcos::test +{ +class PermissionPrecompiledFixture : public PrecompiledFixture +{ +public: + PermissionPrecompiledFixture() + { + codec = std::make_shared(hashImpl, false); + setIsWasm(false, true); + helloAddress = Address("0x1234654b49838bd3e9466c85a4cc3428c9601234").hex(); + hello2Address = Address("0x0987654b49838bd3e9466c85a4cc3428c9601234").hex(); + } + + ~PermissionPrecompiledFixture() override {} + + void deployHello() + { + bytes input; + boost::algorithm::unhex(helloBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + params->setTo(helloAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(2); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + /// call Auth manager to check deploy auth + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + + /// callback to create context + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->contextID(), 99); + BOOST_CHECK_EQUAL(result3->seq(), 1000); + BOOST_CHECK_EQUAL(result3->create(), false); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), helloAddress); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), helloAddress); + BOOST_CHECK(result3->to() == sender); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + + commitBlock(2); + } + + ExecutionMessage::UniquePtr deployHelloInAuthCheck(std::string newAddress, BlockNumber _number, + Address _address = Address(), bool _noAuth = false) + { + bytes input; + boost::algorithm::unhex(helloBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(newAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(_number); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + /// call Auth manager to check deploy auth + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + + /// callback to create context + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + if (_noAuth) + { + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::REVERT); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), ""); + } + else + { + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result3->newEVMContractAddress(), newAddress); + BOOST_CHECK_LT(result3->gasAvailable(), gas); + } + BOOST_CHECK_EQUAL(result3->contextID(), 99); + BOOST_CHECK_EQUAL(result3->seq(), 1000); + BOOST_CHECK_EQUAL(result3->create(), false); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), newAddress); + BOOST_CHECK(result3->to() == sender); + + commitBlock(_number); + + return result3; + } + + ExecutionMessage::UniquePtr deployHello2InAuthCheck( + std::string newAddress, BlockNumber _number, Address _address = Address()) + { + bytes input; + boost::algorithm::unhex(h2, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(newAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + nextBlock(_number); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + + /// call Auth manager to check deploy auth + result->setSeq(1001); + + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + + /// callback to create context + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + result3->setType(NativeExecutionMessage::MESSAGE); + result3->setTransactionHash(hash); + result3->setKeyLocks({}); + result3->setNewEVMContractAddress(hello2Address); + result3->setTo(hello2Address); + + /// create new hello + std::promise executePromise4; + executor->dmcExecuteTransaction( + std::move(result3), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1003); + /// call to check deploy auth + std::promise executePromise5; + executor->dmcExecuteTransaction( + std::move(result4), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + + auto result5 = executePromise5.get_future().get(); + + result5->setSeq(1002); + /// callback to deploy hello2 context + std::promise executePromise6; + executor->dmcExecuteTransaction( + std::move(result5), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + + auto result6 = executePromise6.get_future().get(); + + commitBlock(_number); + + return result6; + } + + ExecutionMessage::UniquePtr helloGet(protocol::BlockNumber _number, int _contextId, + int _errorCode = 0, Address _address = Address()) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("get()"); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(helloAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + + return result2; + }; + + ExecutionMessage::UniquePtr helloSet(protocol::BlockNumber _number, int _contextId, + const std::string& _value, int _errorCode = 0, Address _address = Address()) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("set(string)", _value); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + if (_address != Address()) + { + tx->forceSender(_address.asBytes()); + } + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(helloAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + + return result2; + }; + + ExecutionMessage::UniquePtr setMethodType(protocol::BlockNumber _number, int _contextId, + Address const& _path, std::string const& helloMethod, precompiled::AuthType _type, + int _errorCode = 0) + { + nextBlock(_number); + bytes func = codec->encodeWithSig(helloMethod); + auto fun = toString32(h256(func, FixedBytes<32>::AlignLeft)); + uint8_t type = (_type == AuthType::WHITE_LIST_MODE) ? 1 : 2; + auto t = toString32(h256(type)); + bytes in = codec->encodeWithSig("setMethodAuthType(address,bytes4,uint8)", _path, fun, t); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(_contextId); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + /// internal call get admin + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + /// callback to precompiled + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + + /// internal call set contract auth type + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1000); + + /// callback to precompiled + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result5->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result5; + }; + + ExecutionMessage::UniquePtr modifyMethodAuth(protocol::BlockNumber _number, int _contextId, + std::string const& authMethod, Address const& _path, std::string const& helloMethod, + Address const& _account, int _errorCode = 0) + { + nextBlock(_number); + bytes fun = codec->encodeWithSig(helloMethod); + auto func = toString32(h256(fun, FixedBytes<32>::AlignLeft)); + bytes in = codec->encodeWithSig(authMethod, _path, func, _account); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(_contextId); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + /// internal call get admin + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + /// callback to precompiled + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + + /// internal call set contract auth type + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1000); + + /// callback to precompiled + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + // call precompiled + if (_errorCode != 0) + { + BOOST_CHECK(result5->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + + return result5; + }; + + ExecutionMessage::UniquePtr getMethodAuth(protocol::BlockNumber _number, Address const& _path, + std::string const& helloMethod, int _errorCode = 0) + { + nextBlock(_number); + bytes fun = codec->encodeWithSig(helloMethod); + auto func = toString32(h256(fun, FixedBytes<32>::AlignLeft)); + bytes in = codec->encodeWithSig("getMethodAuth(address,bytes4)", _path, func); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(1000); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result1 = executePromise.get_future().get(); + + result1->setSeq(1001); + + /// internal call + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + /// internal callback + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result3->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result3; + }; + + ExecutionMessage::UniquePtr checkMethodAuth(protocol::BlockNumber _number, Address const& _path, + std::string const& helloMethod, Address const& _account, int _errorCode = 0) + { + nextBlock(_number); + bytes fun = codec->encodeWithSig(helloMethod); + auto func = toString32(h256(fun, FixedBytes<32>::AlignLeft)); + bytes in = codec->encodeWithSig("checkMethodAuth(address,bytes4,address)", _path, func); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(1000); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result1 = executePromise.get_future().get(); + + result1->setSeq(1001); + + /// internal call + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + /// internal callback + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result3->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result3; + }; + + ExecutionMessage::UniquePtr resetAdmin(protocol::BlockNumber _number, int _contextId, + Address const& _path, Address const& _newAdmin, int _errorCode = 0, + bool _useWrongSender = false) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("resetAdmin(address,address)", _path, _newAdmin); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + auto wrongSender = Address("0000000000000000000000000000000000011111"); + tx->forceSender(_useWrongSender ? wrongSender.asBytes() : newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(_contextId); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result1 = executePromise.get_future().get(); + + if (_useWrongSender) + { + commitBlock(_number); + return result1; + } + + result1->setSeq(1001); + + /// internal call + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1000); + /// internal callback + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result3->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result3; + }; + + ExecutionMessage::UniquePtr setContractStatus( + protocol::BlockNumber _number, Address const& _path, bool _isFreeze, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("setContractStatus(address,bool)", _path, _isFreeze); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(1000); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + /// internal call get admin + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + /// callback to precompiled + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + + /// internal call set contract status + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1000); + + /// callback to precompiled + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result5->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result5; + }; + + ExecutionMessage::UniquePtr setContractStatus32(protocol::BlockNumber _number, + Address const& _path, ContractStatus status, int _errorCode = 0) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig( + "setContractStatus(address,uint8)", _path, static_cast(status)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(1000); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + /// internal call get admin + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + /// callback to precompiled + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + + /// internal call set contract status + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1000); + + /// callback to precompiled + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result5->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result5; + }; + + ExecutionMessage::UniquePtr contractAvailable( + protocol::BlockNumber _number, Address const& _path, int _errorCode = 0) + { + nextBlock(_number, m_blockVersion); + bytes in = codec->encodeWithSig("contractAvailable(address)", _path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(1000); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result = executePromise.get_future().get(); + + result->setSeq(1001); + + /// internal call get contract status + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1000); + + /// callback to precompiled + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result5->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result5; + }; + + ExecutionMessage::UniquePtr getAdmin( + protocol::BlockNumber _number, int _contextId, Address const& _path, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("getAdmin(address)", _path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params1 = std::make_unique(); + params1->setTransactionHash(hash); + params1->setContextID(_contextId); + params1->setSeq(1000); + params1->setDepth(0); + params1->setFrom(sender); + params1->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params1->setOrigin(sender); + params1->setStaticCall(false); + params1->setGasAvailable(gas); + params1->setData(std::move(in)); + params1->setType(NativeExecutionMessage::TXHASH); + + /// call precompiled + std::promise executePromise; + executor->dmcExecuteTransaction(std::move(params1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + auto result1 = executePromise.get_future().get(); + + result1->setSeq(1001); + + /// internal call + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(result1), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + /// internal callback + result2->setSeq(1000); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result3->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result3; + }; + + ExecutionMessage::UniquePtr setDeployType( + protocol::BlockNumber _number, int _contextId, AuthType _authType, int _errorCode = 0) + { + nextBlock(_number); + uint8_t type = (_authType == AuthType::WHITE_LIST_MODE) ? 1 : 2; + auto t = toString32(h256(type)); + bytes in = codec->encodeWithSig("setDeployAuthType(uint8)", t); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // call precompiled + result2->setSeq(1001); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr getDeployType( + protocol::BlockNumber _number, int _contextId, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("deployType()"); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // call precompiled + result2->setSeq(1001); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr openDeployAuth( + protocol::BlockNumber _number, int _contextId, Address const& _address, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("openDeployAuth(address)", _address); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // call precompiled + result2->setSeq(1001); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr closeDeployAuth( + protocol::BlockNumber _number, int _contextId, Address const& _address, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("closeDeployAuth(address)", _address); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // call precompiled + result2->setSeq(1001); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr hasDeployAuth( + protocol::BlockNumber _number, int _contextId, Address const& _address, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("hasDeployAuth(address)", _address); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto newSender = Address("0000000000000000000000000000000000010001"); + tx->forceSender(newSender.asBytes()); + auto hash = tx->hash(); + txpool->hash2Transaction[hash] = tx; + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + // call precompiled + result2->setSeq(1001); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + + std::string sender; + std::string helloAddress; + std::string hello2Address; + + // clang-format off + std::string helloBin = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610235565b5050565b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561022b5780601f106102005761010080835404028352916020019161022b565b820191906000526020600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027657805160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760008160009055506001016102bb565b5090565b9056fea2646970667358221220bf4a4547462412a2d27d205b50ba5d4dba42f506f9ea3628eb3d0299c9c28d5664736f6c634300060a0033"; + std::string h2 = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c9291906100cb565b506040516100699061014b565b604051809103906000f080158015610085573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610175565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010c57805160ff191683800117855561013a565b8280016001018555821561013a579182015b8281111561013957825182559160200191906001019061011e565b5b5090506101479190610158565b5090565b6104168061060f83390190565b5b80821115610171576000816000905550600101610159565b5090565b61048b806101846000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a7ef43291461003b578063d2178b081461006f575b600080fd5b61004361015e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610077610188565b604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156100bb5780820151818401526020810190506100a0565b50505050905090810190601f1680156100e85780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015610121578082015181840152602081019050610106565b50505050905090810190601f16801561014e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160006040518083038186803b1580156101f357600080fd5b505afa158015610207573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561023157600080fd5b810190808051604051939291908464010000000082111561025157600080fd5b8382019150602082018581111561026757600080fd5b825186600182028301116401000000008211171561028457600080fd5b8083526020830192505050908051906020019080838360005b838110156102b857808201518184015260208101905061029d565b50505050905090810190601f1680156102e55780820380516001836020036101000a031916815260200191505b50604052505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d4ce63c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561035457600080fd5b505afa158015610368573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561039257600080fd5b81019080805160405193929190846401000000008211156103b257600080fd5b838201915060208201858111156103c857600080fd5b82518660018202830111640100000000821117156103e557600080fd5b8083526020830192505050908051906020019080838360005b838110156104195780820151818401526020810190506103fe565b50505050905090810190601f1680156104465780820380516001836020036101000a031916815260200191505b5060405250505091509150909156fea2646970667358221220004a7724bbd7d9ee1d4c00b949283850a69ddc538be408fa1c79fce561994b0a64736f6c634300060c0033608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b506100ff565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b5b808211156100fb5760008160009055506001016100e3565b5090565b6103088061010e6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610235565b5050565b606060008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561022b5780601f106102005761010080835404028352916020019161022b565b820191906000526020600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027657805160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591602001919060010190610288565b5b5090506102b191906102b5565b5090565b5b808211156102ce5760008160009055506001016102b6565b509056fea26469706673582212200374a2bdb89cd0187ff6b1f551739ca53a44f456bd10ea4052e069475292e45b64736f6c634300060c0033"; + // clang-format on +}; + +BOOST_FIXTURE_TEST_SUITE(precompiledPermissionTest, PermissionPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(testMethodWhiteList) +{ + deployHello(); + BlockNumber number = 2; + // simple get + { + auto result = helloGet(number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + } + + // add method acl type + { + BlockNumber _number = 3; + + // not found + auto r1 = getMethodAuth(number++, Address(helloAddress), "set(string)"); + BOOST_CHECK( + r1->data().toBytes() == codec->encode((uint8_t)(0), std::vector({}), + std::vector({}))); + + auto r2 = getMethodAuth(number++, Address(helloAddress), "get()"); + BOOST_CHECK( + r2->data().toBytes() == codec->encode((uint8_t)(0), std::vector({}), + std::vector({}))); + + // set method acl type + { + auto result = setMethodType( + _number++, 1000, Address(helloAddress), "get()", AuthType::WHITE_LIST_MODE); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + + // row not found + auto result2 = getMethodAuth(number++, Address(helloAddress), "get()"); + BOOST_CHECK(result2->data().toBytes() == codec->encode((uint8_t)(1), + std::vector({}), + std::vector({}))); + } + + // can't get now, even if not set any acl + { + auto result = helloGet(_number++, 1000, 0); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + + // can still set + { + auto result = helloSet(_number++, 1000, "test1"); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + + // open white list, only 0x1234567890123456789012345678901234567890 address can use + { + auto result4 = modifyMethodAuth(_number++, 1000, + "openMethodAuth(address,bytes4,address)", Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result4->data().toBytes() == codec->encode(u256(0))); + + auto result2 = getMethodAuth(number++, Address(helloAddress), "get()"); + BOOST_CHECK(result2->data().toBytes() == + codec->encode((uint8_t)(AuthType::WHITE_LIST_MODE), + std::vector({"1234567890123456789012345678901234567890"}), + std::vector({}))); + } + + // get permission denied + { + auto result5 = helloGet(_number++, 1000); + BOOST_CHECK(result5->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result5->type() == ExecutionMessage::REVERT); + } + + // can still set + { + auto result6 = helloSet(_number++, 1000, "test2"); + BOOST_CHECK(result6->status() == (int32_t)TransactionStatus::None); + } + + // use address 0x1234567890123456789012345678901234567890, success get + { + auto result7 = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result7->data().toBytes() == codec->encode(std::string("test2"))); + } + + // close white list, 0x1234567890123456789012345678901234567890 address can not use + { + auto result4 = modifyMethodAuth(_number++, 1000, + "closeMethodAuth(address,bytes4,address)", Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result4->data().toBytes() == codec->encode(u256(0))); + + auto result2 = getMethodAuth(number++, Address(helloAddress), "get()"); + BOOST_CHECK( + result2->data().toBytes() == + codec->encode((uint8_t)(AuthType::WHITE_LIST_MODE), std::vector({}), + std::vector({"1234567890123456789012345678901234567890"}))); + } + + // use address 0x1234567890123456789012345678901234567890 get permission denied + { + auto result5 = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result5->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result5->type() == ExecutionMessage::REVERT); + + auto result2 = checkMethodAuth(number++, Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result2->data().toBytes() == codec->encode(bool(false))); + + auto result3 = checkMethodAuth(number++, Address(helloAddress), "set(string)", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result3->data().toBytes() == codec->encode(bool(true))); + } + + // use address 0x1234567890123456789012345678901234567890 still can set + { + auto result = helloSet( + _number++, 1000, "test2", 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + } +} + +BOOST_AUTO_TEST_CASE(testMethodBlackList) +{ + deployHello(); + // simple get + { + auto result = helloGet(3, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + } + + // add method acl type + { + BlockNumber _number = 4; + // not found + auto r1 = getMethodAuth(_number++, Address(helloAddress), "set(string)"); + BOOST_CHECK( + r1->data().toBytes() == codec->encode((uint8_t)(0), std::vector({}), + std::vector({}))); + + auto r2 = getMethodAuth(_number++, Address(helloAddress), "get()"); + BOOST_CHECK( + r2->data().toBytes() == codec->encode((uint8_t)(0), std::vector({}), + std::vector({}))); + + // set method acl type + { + auto result = setMethodType( + _number++, 1000, Address(helloAddress), "get()", AuthType::BLACK_LIST_MODE); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + + auto result2 = getMethodAuth(_number++, Address(helloAddress), "get()"); + BOOST_CHECK(result2->data().toBytes() == codec->encode((uint8_t)(2), + std::vector({}), + std::vector({}))); + } + + // still can get now, even if not set any acl + { + auto result = helloGet(_number++, 1000, 0); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + } + + // still can set, even if not set any acl + { + auto result = helloSet(_number++, 1000, "test1"); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + + // still can get now, even if not set any acl + { + auto result = helloGet(_number++, 1000, 0); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("test1"))); + } + + // open black list, block 0x1234567890123456789012345678901234567890 address usage + { + auto result = modifyMethodAuth(_number++, 1000, + "openMethodAuth(address,bytes4,address)", Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + + auto result2 = getMethodAuth(_number++, Address(helloAddress), "get()"); + BOOST_CHECK(result2->data().toBytes() == + codec->encode((uint8_t)(AuthType::BLACK_LIST_MODE), + std::vector({"1234567890123456789012345678901234567890"}), + std::vector({}))); + } + + // can still set + { + auto result = helloSet(_number++, 1000, "test2"); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + + // can still get with default address + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("test2"))); + } + + // use address 0x1234567890123456789012345678901234567890, still can get + { + auto result = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("test2"))); + } + + // close black list, 0x1234567890123456789012345678901234567890 address block + { + auto result4 = modifyMethodAuth(_number++, 1000, + "closeMethodAuth(address,bytes4,address)", Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result4->data().toBytes() == codec->encode(u256(0))); + + auto result2 = getMethodAuth(_number++, Address(helloAddress), "get()"); + BOOST_CHECK( + result2->data().toBytes() == + codec->encode((uint8_t)(AuthType::BLACK_LIST_MODE), std::vector({}), + std::vector({"1234567890123456789012345678901234567890"}))); + } + + // use address 0x1234567890123456789012345678901234567890, get success + { + auto result = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + } +} + +BOOST_AUTO_TEST_CASE(testResetAdmin) +{ + deployHello(); + // simple get + { + auto result = helloGet(2, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + } + + // add method acl type + { + BlockNumber _number = 3; + // get admin + { + auto result = getAdmin(_number++, 1000, Address(helloAddress)); + BOOST_CHECK(result->data().toBytes() == + codec->encode(Address("11ac3ca85a307ae2aff614e83949ab691ba019c5"))); + } + // get admin in wrong address + { + auto result = + getAdmin(_number++, 1000, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // set method acl type + { + auto result = setMethodType( + _number++, 1000, Address(helloAddress), "get()", AuthType::BLACK_LIST_MODE); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + } + + // close black list, block 0x1234567890123456789012345678901234567890 address usage + { + auto result = modifyMethodAuth(_number++, 1000, + "closeMethodAuth(address,bytes4,address)", Address(helloAddress), "get()", + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + } + + // can still set + { + auto result = helloSet(_number++, 1000, "test2"); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + + // can still get with default address + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("test2"))); + } + + // use address 0x1234567890123456789012345678901234567890, get permission denied + { + auto result = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + + // reset admin in error contract address + { + auto result = + resetAdmin(_number++, 1000, Address("0x1234567890123456789012345678901234567890"), + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PrecompiledError); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + + // reset admin + { + auto result = resetAdmin(_number++, 1000, Address(helloAddress), + Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(0))); + } + + // reset admin with wrong sender + { + auto result = resetAdmin(_number++, 1000, Address(helloAddress), + Address("0x1234567890123456789012345678901234567890"), 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(CODE_NO_AUTHORIZED))); + } + + // get admin + { + auto result = getAdmin(_number++, 1000, Address(helloAddress)); + BOOST_CHECK(result->data().toBytes() == + codec->encode(Address("0x1234567890123456789012345678901234567890"))); + } + + // use address 0x1234567890123456789012345678901234567890, still permission denied + { + auto result = + helloGet(_number++, 1000, 0, Address("0x1234567890123456789012345678901234567890")); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + } +} + +BOOST_AUTO_TEST_CASE(testDeployWhiteList) +{ + // simple deploy + deployHello(); + Address admin = Address("0x1234567890123456789012345678901234567890"); + + // add deploy acl type + { + BlockNumber _number = 3; + // set deploy acl type + { + auto result = setDeployType(_number++, 1000, AuthType::WHITE_LIST_MODE); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // cannot deploy + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9601235", _number++, admin, true); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + // has auth? no + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(false)); + } + // open deploy auth + { + auto result = openDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // has auth? yes + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(true)); + } + // deploy ok + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9605431", _number++, admin, false); + BOOST_CHECK( + result->newEVMContractAddress() == "1234654b49838bd3e9466c85a4cc3428c9605431"); + } + // close auth + { + auto result = closeDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // has auth? no + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(false)); + } + // cannot deploy + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9605430", _number++, admin, true); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + // get deploy type + { + auto result = getDeployType(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(1))); + } + } +} + +BOOST_AUTO_TEST_CASE(testDeployBlackList) +{ + // simple deploy + deployHello(); + Address admin = Address("0x1234567890123456789012345678901234567890"); + + // add deploy acl type + { + BlockNumber _number = 3; + // set deploy acl type + { + auto result = setDeployType(_number++, 1000, AuthType::BLACK_LIST_MODE); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // can still deploy + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9601235", _number++, admin, false); + BOOST_CHECK( + result->newEVMContractAddress() == "1234654b49838bd3e9466c85a4cc3428c9601235"); + } + // has auth? yes + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(true)); + } + // close deploy auth + { + auto result = closeDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // has auth? no + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(false)); + } + // deploy permission denied + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9605431", _number++, admin, true); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::PermissionDenied); + BOOST_CHECK(result->type() == ExecutionMessage::REVERT); + } + // open auth + { + auto result = openDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256(0))); + } + // has auth? yes + { + auto result = hasDeployAuth(_number++, 1000, admin); + BOOST_CHECK(result->data().toBytes() == codec->encode(true)); + } + // deploy ok + { + auto result = deployHelloInAuthCheck( + "1234654b49838bd3e9466c85a4cc3428c9605430", _number++, admin, false); + BOOST_CHECK( + result->newEVMContractAddress() == "1234654b49838bd3e9466c85a4cc3428c9605430"); + } + // get deploy type + { + auto result = getDeployType(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(u256(2))); + } + } +} + +BOOST_AUTO_TEST_CASE(testDeployCommitteeManagerAndCall) +{ + // call CommitteeManager + { + nextBlock(2); + bytes in = codec->encodeWithSig("createUpdateGovernorProposal(address,uint32,uint256)", + admin, codec::toString32(h256(uint32_t(2))), u256(2)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + + Address _admin(admin); + tx->forceSender(_admin.asBytes()); + + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + // force cover write + txpool->hash2Transaction[hash] = tx; + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(precompiled::AUTH_COMMITTEE_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // proposalManager.create + result2->setSeq(1001); + result2->setKeyLocks({}); + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + // + result3->setSeq(1000); + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + commitBlock(2); + } +} + +BOOST_AUTO_TEST_CASE(testDeployAdmin) +{ + BlockNumber _number = 3; + Address admin = Address("0x1234567890123456789012345678901234567890"); + auto result = + deployHello2InAuthCheck("1234654b49838bd3e9466c85a4cc3428c9601235", _number++, admin); + // test deploy admin + { + auto result1 = + getAdmin(_number++, 1000, Address("1234654b49838bd3e9466c85a4cc3428c9601235")); + BOOST_CHECK(result1->data().toBytes() == codec->encode(admin)); + } + + // test external deploy admin + { + auto result1 = getAdmin(_number++, 1000, Address(hello2Address)); + std::cout << toHexStringWithPrefix(result1->data().toBytes()) << std::endl; + BOOST_CHECK(result1->data().toBytes() == codec->encode(admin)); + } +} + +BOOST_AUTO_TEST_CASE(testContractStatus) +{ + deployHello(); + BlockNumber _number = 3; + // frozen + { + auto r1 = setContractStatus(_number++, Address(helloAddress), true); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(false)); + } + // frozen, revert + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::ContractFrozen); + + auto result2 = helloSet(_number++, 1000, ""); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::ContractFrozen); + } + // switch normal + { + auto r1 = setContractStatus(_number++, Address(helloAddress), false); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(true)); + } + // normal + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + + auto result2 = helloSet(_number++, 1000, "test"); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::None); + + auto result3 = helloGet(_number++, 1000); + BOOST_CHECK(result3->data().toBytes() == codec->encode(std::string("test"))); + } + + // contract address not found + { + auto errorAddress = "123456"; + auto result2 = contractAvailable(_number++, Address(errorAddress)); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(testContractStatusInKeyPage) +{ + setIsWasm(false, true, true); + + deployHello(); + BlockNumber _number = 3; + // frozen + { + auto r1 = setContractStatus(_number++, Address(helloAddress), true); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(false)); + } + // frozen, revert + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::ContractFrozen); + + auto result2 = helloSet(_number++, 1000, ""); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::ContractFrozen); + } + // switch normal + { + auto r1 = setContractStatus(_number++, Address(helloAddress), false); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(true)); + } + // normal + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + + auto result2 = helloSet(_number++, 1000, "test"); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::None); + + auto result3 = helloGet(_number++, 1000); + BOOST_CHECK(result3->data().toBytes() == codec->encode(std::string("test"))); + } + + // contract address not found + { + auto errorAddress = "123456"; + auto result2 = contractAvailable(_number++, Address(errorAddress)); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(testContractAbolish) +{ + setIsWasm(false, true, true, BlockVersion::V3_2_VERSION); + + deployHello(); + BlockNumber _number = 3; + // frozen + { + auto r1 = setContractStatus32(_number++, Address(helloAddress), ContractStatus::Frozen); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(false)); + } + // frozen, revert + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::ContractFrozen); + + auto result2 = helloSet(_number++, 1000, ""); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::ContractFrozen); + } + // switch normal + { + auto r1 = setContractStatus32(_number++, Address(helloAddress), ContractStatus::Available); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(true)); + } + // normal + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->data().toBytes() == codec->encode(std::string("Hello, World!"))); + + auto result2 = helloSet(_number++, 1000, "test"); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::None); + + auto result3 = helloGet(_number++, 1000); + BOOST_CHECK(result3->data().toBytes() == codec->encode(std::string("test"))); + } + + // contract address not found + { + auto errorAddress = "123456"; + auto result2 = contractAvailable(_number++, Address(errorAddress)); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // abolish + { + auto r1 = setContractStatus32(_number++, Address(helloAddress), ContractStatus::Abolish); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(false)); + } + // abolish, revert + { + auto result = helloGet(_number++, 1000); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::ContractAbolished); + + auto result2 = helloSet(_number++, 1000, ""); + BOOST_CHECK(result2->status() == (int32_t)TransactionStatus::ContractAbolished); + } + + // frozen again, return error + { + auto r1 = setContractStatus32(_number++, Address(helloAddress), ContractStatus::Frozen); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = contractAvailable(_number++, Address(helloAddress)); + BOOST_CHECK(r2->data().toBytes() == codec->encode(false)); + + auto r3 = setContractStatus(_number++, Address(helloAddress), true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/ConfigPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/ConfigPrecompiledTest.cpp new file mode 100644 index 0000000..8f0e1e9 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/ConfigPrecompiledTest.cpp @@ -0,0 +1,552 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ConfigPrecompiledTest.cpp + * @author: kyonRay + * @date 2021-06-22 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/ConsensusPrecompiled.h" +#include "precompiled/SystemConfigPrecompiled.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; + +namespace bcos::test +{ +class ConfigPrecompiledFixture : public PrecompiledFixture +{ +public: + ConfigPrecompiledFixture() + { + codec = std::make_shared(hashImpl, false); + setIsWasm(false); + consTestAddress = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2").hex(); + sysTestAddress = Address("0x420f853b41234bd3e9466c85a4cc3428c960dde2").hex(); + paraTestAddress = Address("0x420f853b49838bd3e9412385a4cc3428c960dde2").hex(); + } + + ~ConfigPrecompiledFixture() override = default; + void deployTest(std::string _bin, std::string _address) + { + bytes input; + boost::algorithm::unhex(_bin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(_address); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(1); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), _address); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), _address); + BOOST_CHECK(result->to() == sender); + BOOST_CHECK_LT(result->gasAvailable(), gas); + commitBlock(1); + } + + std::string consTestBin = + "608060405234801561001057600080fd5b506110036000806101000a81548173ffffffffffffffffffffffffff" + "ffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610791806100" + "626000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000" + "000000000000000000900463ffffffff1680631216492d1461006757806325df91e6146100ee578063c0160bb5" + "1461016b578063edd56950146101f2575b600080fd5b34801561007357600080fd5b506100d860048036038101" + "9080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291" + "9081815260200183838082843782019150505050505091929192908035906020019092919050505061026f565b" + "6040518082815260200191505060405180910390f35b3480156100fa57600080fd5b5061015560048036038101" + "9080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291" + "9081815260200183838082843782019150505050505091929192905050506103b1565b60405180828152602001" + "91505060405180910390f35b34801561017757600080fd5b506101dc6004803603810190808035906020019082" + "01803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380" + "8284378201915050505050509192919290803590602001909291905050506104ea565b60405180828152602001" + "91505060405180910390f35b3480156101fe57600080fd5b506102596004803603810190808035906020019082" + "01803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380" + "828437820191505050505050919291929050505061062c565b6040518082815260200191505060405180910390" + "f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff" + "ffffffffffffffffffffffffffff16633591685684846040518363ffffffff167c010000000000000000000000" + "000000000000000000000000000000000002815260040180806020018381526020018281038252848181518152" + "60200191508051906020019080838360005b83811015610321578082015181840152602081019050610306565b" + "50505050905090810190601f16801561034e5780820380516001836020036101000a031916815260200191505b" + "509350505050602060405180830381600087803b15801561036e57600080fd5b505af1158015610382573d6000" + "803e3d6000fd5b505050506040513d602081101561039857600080fd5b81019080805190602001909291905050" + "50905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16" + "73ffffffffffffffffffffffffffffffffffffffff16632800efc0836040518263ffffffff167c010000000000" + "000000000000000000000000000000000000000000000002815260040180806020018281038252838181518152" + "60200191508051906020019080838360005b8381101561045c578082015181840152602081019050610441565b" + "50505050905090810190601f1680156104895780820380516001836020036101000a031916815260200191505b" + "5092505050602060405180830381600087803b1580156104a857600080fd5b505af11580156104bc573d600080" + "3e3d6000fd5b505050506040513d60208110156104d257600080fd5b8101908080519060200190929190505050" + "9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff" + "ffffffffffffffffffffffffffffffffffffff1663ce6fa5c584846040518363ffffffff167c01000000000000" + "000000000000000000000000000000000000000000000281526004018080602001838152602001828103825284" + "818151815260200191508051906020019080838360005b8381101561059c578082015181840152602081019050" + "610581565b50505050905090810190601f1680156105c95780820380516001836020036101000a031916815260" + "200191505b509350505050602060405180830381600087803b1580156105e957600080fd5b505af11580156105" + "fd573d6000803e3d6000fd5b505050506040513d602081101561061357600080fd5b8101908080519060200190" + "929190505050905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffff" + "ffffffff1673ffffffffffffffffffffffffffffffffffffffff166380599e4b836040518263ffffffff167c01" + "000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283" + "818151815260200191508051906020019080838360005b838110156106d7578082015181840152602081019050" + "6106bc565b50505050905090810190601f1680156107045780820380516001836020036101000a031916815260" + "200191505b5092505050602060405180830381600087803b15801561072357600080fd5b505af1158015610737" + "573d6000803e3d6000fd5b505050506040513d602081101561074d57600080fd5b810190808051906020019092" + "919050505090509190505600a165627a7a72305820508188017072d790559725e832a3ef9e1a851ab727e796b1" + "c1341248c03342440029"; + std::string sysTestBin = + "608060405234801561001057600080fd5b506110006000806101000a81548173ffffffffffffffffffffffffff" + "ffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610570806100" + "626000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000" + "000000000000000000900463ffffffff1680632d7fd05314610051578063ec9786001461013a575b600080fd5b" + "34801561005d57600080fd5b506100b8600480360381019080803590602001908201803590602001908080601f" + "016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050" + "91929192905050506101fd565b6040518080602001838152602001828103825284818151815260200191508051" + "906020019080838360005b838110156100fe5780820151818401526020810190506100e3565b50505050905090" + "810190601f16801561012b5780820380516001836020036101000a031916815260200191505b50935050505060" + "405180910390f35b34801561014657600080fd5b506101e7600480360381019080803590602001908201803590" + "602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782" + "01915050505050509192919290803590602001908201803590602001908080601f016020809104026020016040" + "519081016040528093929190818152602001838380828437820191505050505050919291929050505061039d56" + "5b6040518082815260200191505060405180910390f35b606060008060009054906101000a900473ffffffffff" + "ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631258a93a8460" + "40518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401" + "8080602001828103825283818151815260200191508051906020019080838360005b838110156102aa57808201" + "518184015260208101905061028f565b50505050905090810190601f1680156102d75780820380516001836020" + "036101000a031916815260200191505b5092505050600060405180830381600087803b1580156102f657600080" + "fd5b505af115801561030a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201" + "8060405250604081101561033457600080fd5b81019080805164010000000081111561034c57600080fd5b8281" + "019050602081018481111561036257600080fd5b815185600182028301116401000000008211171561037f5760" + "0080fd5b50509291906020018051906020019092919050505091509150915091565b6000806000905490610100" + "0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff" + "ff1663bd291aef84846040518363ffffffff167c01000000000000000000000000000000000000000000000000" + "000000000281526004018080602001806020018381038352858181518152602001915080519060200190808383" + "60005b8381101561044d578082015181840152602081019050610432565b50505050905090810190601f168015" + "61047a5780820380516001836020036101000a031916815260200191505b508381038252848181518152602001" + "91508051906020019080838360005b838110156104b3578082015181840152602081019050610498565b505050" + "50905090810190601f1680156104e05780820380516001836020036101000a031916815260200191505b509450" + "50505050602060405180830381600087803b15801561050157600080fd5b505af1158015610515573d6000803e" + "3d6000fd5b505050506040513d602081101561052b57600080fd5b810190808051906020019092919050505090" + "50929150505600a165627a7a72305820ba33b892d2d03143a7553d42fcb62b0b9067012df1de5ab763424bea55" + "85175e0029"; + std::string paraTestBin = + "608060405234801561001057600080fd5b506110066000806101000a81548173ffffffffffffffffffffffffff" + "ffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104a6806100" + "626000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000" + "000000000000000000900463ffffffff1680630553904e1461005157806311e3f2af146100f8575b600080fd5b" + "34801561005d57600080fd5b506100e2600480360381019080803573ffffffffffffffffffffffffffffffffff" + "ffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051" + "908101604052809392919081815260200183838082843782019150505050505091929192908035906020019092" + "9190505050610195565b6040518082815260200191505060405180910390f35b34801561010457600080fd5b50" + "61017f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080" + "3590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181" + "52602001838380828437820191505050505050919291929050505061030c565b60405180828152602001915050" + "60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16" + "73ffffffffffffffffffffffffffffffffffffffff16630553904e8585856040518463ffffffff167c01000000" + "00000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffff" + "ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200183815260" + "2001828103825284818151815260200191508051906020019080838360005b8381101561027a57808201518184" + "015260208101905061025f565b50505050905090810190601f1680156102a75780820380516001836020036101" + "000a031916815260200191505b50945050505050602060405180830381600087803b1580156102c857600080fd" + "5b505af11580156102dc573d6000803e3d6000fd5b505050506040513d60208110156102f257600080fd5b8101" + "90808051906020019092919050505090509392505050565b60008060009054906101000a900473ffffffffffff" + "ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311e3f2af848460" + "40518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401" + "808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff" + "16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103" + "ea5780820151818401526020810190506103cf565b50505050905090810190601f168015610417578082038051" + "6001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561" + "043757600080fd5b505af115801561044b573d6000803e3d6000fd5b505050506040513d602081101561046157" + "600080fd5b81019080805190602001909291905050509050929150505600a165627a7a72305820fd4857231ba5" + "7cb17d47d43e38f1370285cfd965b622af793ee1bd9a3e490d270029"; + std::string consTestAddress; + std::string sysTestAddress; + std::string paraTestAddress; + std::string sender; + Address contractAddress = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2"); +}; +BOOST_FIXTURE_TEST_SUITE(precompiledConfigTest, ConfigPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(sysConfig_test) +{ + deployTest(sysTestBin, sysTestAddress); + + auto simpleSetFunc = [&](protocol::BlockNumber _number, int _contextId, const std::string& _key, + const std::string& _v, + bcos::protocol::TransactionStatus _errorCode = + bcos::protocol::TransactionStatus::None) { + nextBlock(_number); + bytes in = codec->encodeWithSig("setValueByKeyTest(string,string)", _key, _v); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(_contextId); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(sysTestAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled setValueByKey + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + // BOOST_CHECK(result3->data().toBytes() == codec->encode(s256(_errorCode))); + BOOST_CHECK(result3->status() == (int32_t)_errorCode); + commitBlock(_number); + }; + // simple set SYSTEM_KEY_TX_GAS_LIMIT + { + simpleSetFunc(2, 100, std::string{ledger::SYSTEM_KEY_TX_GAS_LIMIT}, std::string("1000000")); + } + + // simple get SYSTEM_KEY_TX_GAS_LIMIT + { + nextBlock(3); + bytes in = codec->encodeWithSig( + "getValueByKeyTest(string)", std::string(ledger::SYSTEM_KEY_TX_GAS_LIMIT)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(101); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(sysTestAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled setValueByKey + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + BOOST_CHECK(result3->data().toBytes() == codec->encode(std::string("1000000"), u256(3))); + commitBlock(3); + } + + // simple set SYSTEM_KEY_TX_COUNT_LIMIT + { + simpleSetFunc(4, 102, std::string{ledger::SYSTEM_KEY_TX_COUNT_LIMIT}, std::string("1000")); + } + + // set SYSTEM_KEY_TX_COUNT_LIMIT error + { + simpleSetFunc(5, 103, std::string{ledger::SYSTEM_KEY_TX_COUNT_LIMIT}, std::string("error"), + bcos::protocol::TransactionStatus::PrecompiledError); + } + // set error key + { + simpleSetFunc(8, 106, std::string("errorKey"), std::string("1000"), + bcos::protocol::TransactionStatus::PrecompiledError); + } + + // get error key + { + nextBlock(9); + bytes in = codec->encodeWithSig("getValueByKeyTest(string)", std::string("error")); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(107); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(sysTestAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled setValueByKey + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + BOOST_CHECK(result3->data().toBytes() == codec->encode(std::string(""), s256(-1))); + commitBlock(9); + } +} + +BOOST_AUTO_TEST_CASE(consensus_test) +{ + deployTest(consTestBin, consTestAddress); + + int64_t number = 2; + + std::stringstream nodeFactory; + nodeFactory << std::setfill('1') << std::setw(128) << 1; + std::string node1 = nodeFactory.str(); + std::stringstream().swap(nodeFactory); + + nodeFactory << std::setfill('2') << std::setw(128) << 2; + std::string node2 = nodeFactory.str(); + std::stringstream().swap(nodeFactory); + + nodeFactory << std::setfill('3') << std::setw(128) << 3; + std::string node3 = nodeFactory.str(); + std::stringstream().swap(nodeFactory); + + std::string errorNode = node1.substr(0, 127) + "s"; + + auto callFunc = [&](protocol::BlockNumber _number, const std::string& method, + const std::string& _nodeId, int _w = -1, int _errorCode = 0) { + BCOS_LOG(DEBUG) << LOG_BADGE("consensus_test") << LOG_KV("method", method) + << LOG_KV("_nodeId", _nodeId) << LOG_KV("_w", _w) + << LOG_KV("_errorCode", _errorCode); + nextBlock(_number); + bytes in = _w < 0 ? codec->encodeWithSig(method, _nodeId) : + codec->encodeWithSig(method, _nodeId, u256(_w)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(consTestAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result3->data().toBytes() == codec->encode(int32_t(_errorCode))); + if (result3->data().toBytes() != codec->encode(int32_t(_errorCode))) + { + PRECOMPILED_LOG(TRACE) << "Mismatch result: " << toHex(result3->data().toBytes()) + << " expect: " << toHex(codec->encode(int32_t(_errorCode))); + } + } + commitBlock(_number); + return result3; + }; + + // node id too short + { + callFunc(number++, "addSealerTest(string,uint256)", std::string("111111"), 1, + CODE_INVALID_NODE_ID); + + callFunc( + number++, "addObserverTest(string)", std::string("111111"), -1, CODE_INVALID_NODE_ID); + callFunc(number++, "removeTest(string)", std::string("111111"), -1, CODE_INVALID_NODE_ID); + callFunc(number++, "setWeightTest(string,uint256)", std::string("111111"), 11, + CODE_INVALID_NODE_ID); + } + + // add sealer node1 + { + callFunc(number++, "addObserverTest(string)", node1, -1, 0); + callFunc(number++, "addSealerTest(string,uint256)", node1, 1, 0); + } + + // add observer node2 + { + callFunc(number++, "addObserverTest(string)", node2, -1, 0); + } + + // set weigh to observer + { + auto r = callFunc(number++, "setWeightTest(string,uint256)", node2, 123, 0); + BOOST_CHECK(r->status() == 15); + } + + // add errorNode + { + callFunc(number++, "addObserverTest(string)", errorNode, -1, CODE_INVALID_NODE_ID); + } + + // turn last sealer to observer + { + callFunc(number++, "addObserverTest(string)", node1, -1, CODE_LAST_SEALER); + } + + // add sealer node2 + { + callFunc(number++, "addSealerTest(string,uint256)", node2, 1, 0); + // removeTest sealer node2 + callFunc(number++, "removeTest(string)", node2, -1, 0); + // remove not exist sealer + callFunc(number++, "removeTest(string)", node2, -1, CODE_NODE_NOT_EXIST); + + // add observer node2 + callFunc(number++, "addObserverTest(string)", node2, -1, 0); + // add sealer again + callFunc(number++, "addSealerTest(string,uint256)", node2, 1, 0); + // add observer again + callFunc(number++, "addObserverTest(string)", node2, -1, 0); + } + + // removeTest last sealer + { + callFunc(number++, "removeTest(string)", node1, -1, CODE_LAST_SEALER); + } + + // set an invalid weight(0) to node + { + callFunc(number++, "setWeightTest(string,uint256)", node1, 0, CODE_INVALID_WEIGHT); + } + + // set a valid weight(2) to node1 + { + callFunc(number++, "setWeightTest(string,uint256)", node1, 2); + } + + // removeTest observer + { + callFunc(number++, "removeTest(string)", node2, -1, 0); + } + + // removeTest observer not exist + { + callFunc(number++, "removeTest(string)", node2, -1, CODE_NODE_NOT_EXIST); + } + + // set weigh to not exist node2 + { + callFunc(number++, "setWeightTest(string,uint256)", node2, 123, CODE_NODE_NOT_EXIST); + } + + // add node3 to sealer + { + callFunc(number++, "addSealerTest(string,uint256)", node3, 1, + CODE_ADD_SEALER_SHOULD_IN_OBSERVER); + callFunc(number++, "addObserverTest(string)", node3, -1, 0); + callFunc(number++, "addSealerTest(string,uint256)", node3, 1, 0); + } +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/CryptoPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/CryptoPrecompiledTest.cpp new file mode 100644 index 0000000..efd11ea --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/CryptoPrecompiledTest.cpp @@ -0,0 +1,402 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CryptoPrecompiledTest.cpp + * @author: kyonRay + * @date 2021-07-05 + */ +#include "precompiled/CryptoPrecompiled.h" +#include "../mock/MockLedger.h" +#include "bcos-crypto/signature/codec/SignatureDataWithPub.h" +#include "bcos-executor/src/executive/LedgerCache.h" +#include "libprecompiled/PreCompiledFixture.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::crypto; +using namespace bcos::codec; + +namespace bcos::test +{ +class CryptoPrecompiledFixture : public PrecompiledFixture +{ +public: + CryptoPrecompiledFixture() + { + codec = std::make_shared(hashImpl, false); + setIsWasm(false); + cryptoAddress = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2").hex(); + } + + virtual ~CryptoPrecompiledFixture() {} + + void deployTest() + { + bytes input; + boost::algorithm::unhex(cryptoBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(cryptoAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(1); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), cryptoAddress); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), cryptoAddress); + BOOST_CHECK(result->to() == sender); + BOOST_CHECK_LT(result->gasAvailable(), gas); + + // -------------------------------- + // Create contract twice to avoid address used in wasm + // -------------------------------- + + paramsBak.setSeq(1001); + std::promise executePromise2; + executor->dmcExecuteTransaction(std::make_unique(paramsBak), + [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + BOOST_CHECK(result2); + BOOST_CHECK_EQUAL(result2->type(), ExecutionMessage::REVERT); + BOOST_CHECK_EQUAL( + result2->status(), (int32_t)TransactionStatus::ContractAddressAlreadyUsed); + + BOOST_CHECK_EQUAL(result2->contextID(), 99); + commitBlock(1); + } + + std::string sender; + std::string cryptoAddress; + std::string cryptoBin = + "608060405234801561001057600080fd5b5061100a6000806101000a81548173ffffffffffffffffffffffffff" + "ffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061090a806100" + "626000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80638b0537" + "581461005c57806393730bbe1461012b578063cbdb3a67146101fa578063eb90f45914610306578063fb34363c" + "146103d5575b600080fd5b6101156004803603602081101561007257600080fd5b810190808035906020019064" + "010000000081111561008f57600080fd5b8201836020820111156100a157600080fd5b80359060200191846001" + "8302840111640100000000831117156100c357600080fd5b91908080601f016020809104026020016040519081" + "016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050" + "50505091929192905050506104a4565b6040518082815260200191505060405180910390f35b6101e460048036" + "03602081101561014157600080fd5b810190808035906020019064010000000081111561015e57600080fd5b82" + "018360208201111561017057600080fd5b80359060200191846001830284011164010000000083111715610192" + "57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380" + "828437600081840152601f19601f82011690508083019250505050505050919291929050505061054b565b6040" + "518082815260200191505060405180910390f35b6102d16004803603608081101561021057600080fd5b810190" + "80803590602001909291908035906020019064010000000081111561023757600080fd5b820183602082011115" + "61024957600080fd5b8035906020019184600183028401116401000000008311171561026b57600080fd5b9190" + "8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000818401" + "52601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019092" + "919050505061055c565b6040518083151581526020018273ffffffffffffffffffffffffffffffffffffffff16" + "81526020019250505060405180910390f35b6103bf6004803603602081101561031c57600080fd5b8101908080" + "35906020019064010000000081111561033957600080fd5b82018360208201111561034b57600080fd5b803590" + "6020019184600183028401116401000000008311171561036d57600080fd5b91908080601f0160208091040260" + "20016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080" + "83019250505050505050919291929050505061069e565b6040518082815260200191505060405180910390f35b" + "61048e600480360360208110156103eb57600080fd5b8101908080359060200190640100000000811115610408" + "57600080fd5b82018360208201111561041a57600080fd5b803590602001918460018302840111640100000000" + "8311171561043c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181" + "52602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050" + "6107b9565b6040518082815260200191505060405180910390f35b600060028260405180828051906020019080" + "83835b602083106104dc57805182526020820191506020810190506020830392506104b9565b60018360200361" + "01000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015" + "61051e573d6000803e3d6000fd5b5050506040513d602081101561053357600080fd5b81019080805190602001" + "909291905050509050919050565b600081805190602001209050919050565b60008060008054906101000a9004" + "73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663" + "cbdb3a67878787876040518563ffffffff1660e01b815260040180858152602001806020018481526020018381" + "52602001828103825285818151815260200191508051906020019080838360005b838110156106005780820151" + "818401526020810190506105e5565b50505050905090810190601f16801561062d578082038051600183602003" + "6101000a031916815260200191505b5095505050505050604080518083038186803b15801561064c57600080fd" + "5b505afa158015610660573d6000803e3d6000fd5b505050506040513d604081101561067657600080fd5b8101" + "908080519060200190929190805190602001909291905050509150915094509492505050565b60008060009054" + "906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff" + "ffffffffff1663eb90f459836040518263ffffffff1660e01b8152600401808060200182810382528381815181" + "5260200191508051906020019080838360005b8381101561072d57808201518184015260208101905061071256" + "5b50505050905090810190601f16801561075a5780820380516001836020036101000a03191681526020019150" + "5b509250505060206040518083038186803b15801561077757600080fd5b505afa15801561078b573d6000803e" + "3d6000fd5b505050506040513d60208110156107a157600080fd5b810190808051906020019092919050505090" + "50919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff" + "ffffffffffffffffffffffffffffffffffff1663fb34363c836040518263ffffffff1660e01b81526004018080" + "602001828103825283818151815260200191508051906020019080838360005b83811015610848578082015181" + "84015260208101905061082d565b50505050905090810190601f16801561087557808203805160018360200361" + "01000a031916815260200191505b509250505060206040518083038186803b15801561089257600080fd5b505a" + "fa1580156108a6573d6000803e3d6000fd5b505050506040513d60208110156108bc57600080fd5b8101908080" + "519060200190929190505050905091905056fea2646970667358221220f90675a92f4cd30c9fb6c666bc2a0684" + "1325900bb12be808a30992090e509c9564736f6c634300060c0033"; +}; + +BOOST_FIXTURE_TEST_SUITE(precompiledCryptoTest, CryptoPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(testSM3AndKeccak256) +{ + deployTest(); + + // sm3 + { + nextBlock(2); + std::string stringData = "abcd"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("sm3(bytes)", dataRef.toBytes()); + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", encodedData, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto txHash = tx->hash(); + txpool->hash2Transaction.emplace(txHash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(txHash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(cryptoAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(encodedData)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + bytes out = result2->data().toBytes(); + string32 decodedHash; + codec->decode(bytesConstRef(&out), decodedHash); + HashType hash = + HashType("82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e"); + std::cout << "== testHash-sm3: decodedHash: " << codec::fromString32(decodedHash).hex() + << std::endl; + std::cout << "== testHash-sm3: hash:" << hash.hex() << std::endl; + BOOST_CHECK(hash == codec::fromString32(decodedHash)); + + commitBlock(2); + } + // keccak256Hash + { + nextBlock(3); + std::string stringData = "abcd"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("keccak256Hash(bytes)", dataRef.toBytes()); + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", encodedData, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto txHash = tx->hash(); + txpool->hash2Transaction.emplace(txHash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(txHash); + params2->setContextID(101); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(cryptoAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(encodedData)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + bytes out = result2->data().toBytes(); + string32 decodedHash; + codec->decode(bytesConstRef(&out), decodedHash); + HashType hash = + HashType("48bed44d1bcd124a28c27f343a817e5f5243190d3c52bf347daf876de1dbbf77"); + std::cout << "== testHash-keccak256Hash: decodedHash: " + << codec::fromString32(decodedHash).hex() << std::endl; + std::cout << "== testHash-keccak256Hash: hash:" << hash.hex() << std::endl; + BOOST_CHECK(hash == codec::fromString32(decodedHash)); + commitBlock(3); + } +} + +class SM2VerifyPrecompiledFixture +{ +public: + SM2VerifyPrecompiledFixture() + { + clearName2SelectCache(); + m_cryptoSuite = std::make_shared( + std::make_shared(), std::make_shared(), nullptr); + m_cryptoPrecompiled = std::make_shared(m_cryptoSuite->hashImpl()); + m_blockContext = + std::make_shared(nullptr, m_ledgerCache, m_cryptoSuite->hashImpl(), 0, + h256(), utcTime(), (uint32_t)(bcos::protocol::BlockVersion::V3_0_VERSION), + FiscoBcosSchedule, false, false); + std::shared_ptr gasInjector = nullptr; + m_executive = std::make_shared( + std::weak_ptr(m_blockContext), "", 100, 0, gasInjector); + m_abi = std::make_shared(m_cryptoSuite->hashImpl()); + } + + ~SM2VerifyPrecompiledFixture() {} + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + BlockContext::Ptr m_blockContext; + TransactionExecutive::Ptr m_executive; + CryptoPrecompiled::Ptr m_cryptoPrecompiled; + std::string m_sm2VerifyFunction = "sm2Verify(bytes32,bytes,bytes32,bytes32)"; + std::shared_ptr m_abi; + LedgerCache::Ptr m_ledgerCache = std::make_shared(std::make_shared()); +}; + +BOOST_AUTO_TEST_CASE(testSM2Verify) +{ + // case Verify success + h256 fixedSec1("bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto keyFactory = std::make_shared(); + auto secCreated = keyFactory->createKey(fixedSec1.asBytes()); + + auto keyPair = std::make_shared(sec1); + HashType hash = HashType("82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e"); + auto signature = sm2Sign(*keyPair, hash, true); + h256 mismatchHash = h256("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"); + SM2VerifyPrecompiledFixture fixture; + + // verify the signature + auto signatureStruct = std::make_shared(ref(*signature)); + bytes in = fixture.m_abi->abiIn(fixture.m_sm2VerifyFunction, codec::toString32(hash), + *signatureStruct->pub(), codec::toString32(signatureStruct->r()), + codec::toString32(signatureStruct->s())); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = fixture.m_cryptoPrecompiled->call(fixture.m_executive, parameters); + auto out = execResult->execResult(); + bool verifySucc; + Address accountAddress; + fixture.m_abi->abiOut(bytesConstRef(&out), verifySucc, accountAddress); + BOOST_CHECK(verifySucc == true); + BOOST_CHECK(accountAddress.hex() == keyPair->address(smHashImpl).hex()); + + // mismatch case + in = fixture.m_abi->abiIn(fixture.m_sm2VerifyFunction, codec::toString32(mismatchHash), + *signatureStruct->pub(), codec::toString32(signatureStruct->r()), + codec::toString32(signatureStruct->s())); + parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + execResult = fixture.m_cryptoPrecompiled->call(fixture.m_executive, parameters); + out = execResult->execResult(); + fixture.m_abi->abiOut(bytesConstRef(&out), verifySucc, accountAddress); + BOOST_CHECK(verifySucc == false); + BOOST_CHECK(accountAddress.hex() == Address().hex()); +} + +BOOST_AUTO_TEST_CASE(testEVMPrecompiled) +{ + deployTest(); + + // sha256 + { + nextBlock(2); + std::string stringData = "abcd"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("getSha256(bytes)", dataRef.toBytes()); + + auto tx = fakeTransaction(cryptoSuite, keyPair, "", encodedData, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto txHash = tx->hash(); + txpool->hash2Transaction.emplace(txHash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(txHash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(cryptoAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(encodedData)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + auto rData = result2->data().toBytes(); + string32 re; + codec->decode(ref(rData), re); + BOOST_CHECK_EQUAL("0x88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589", + toHexStringWithPrefix(fromString32(re).asBytes())); + BOOST_CHECK_EQUAL(result2->status(), (int32_t)TransactionStatus::None); + commitBlock(2); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/libprecompiled/EVMStateContextTest.cpp b/bcos-executor/test/unittest/libprecompiled/EVMStateContextTest.cpp new file mode 100644 index 0000000..23a58d6 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/EVMStateContextTest.cpp @@ -0,0 +1,467 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EVMStateContextTest.cpp + * @author: kyonGuo + * @date 2022/11/2 + */ +#include "bcos-crypto/signature/codec/SignatureDataWithPub.h" +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/CryptoPrecompiled.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::crypto; +using namespace bcos::codec; + +namespace bcos::test +{ +class EVMStateContextFixture : public PrecompiledFixture +{ +public: + EVMStateContextFixture() + { + codec = std::make_shared(hashImpl, false); + setIsWasm(false, false, true); + testAddress = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2").hex(); + origin = Address("0x1234567890123456789012345678901234567890").hex(); + } + + virtual ~EVMStateContextFixture() {} + + void deployTest() + { + bytes input; + boost::algorithm::unhex(testBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(testAddress); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + NativeExecutionMessage paramsBak = *params; + nextBlock(1); + // -------------------------------- + // Create contract + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), testAddress); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), testAddress); + BOOST_CHECK(result->to() == sender); + BOOST_CHECK_LT(result->gasAvailable(), gas); + commitBlock(1); + } + + ExecutionMessage::UniquePtr callTest( + protocol::BlockNumber _number, bytesConstRef encodedData, std::string _origin = "") + { + nextBlock(_number); + auto tx = + fakeTransaction(cryptoSuite, keyPair, "", encodedData.toBytes(), 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + if (!_origin.empty()) + { + tx->forceSender(Address(_origin).asBytes()); + } + auto txHash = tx->hash(); + txpool->hash2Transaction.emplace(txHash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(txHash); + params2->setContextID(_number); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(testAddress); + params2->setOrigin(_origin.empty() ? sender : _origin); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(encodedData.toBytes()); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + commitBlock(_number); + return result2; + } + + std::string sender; + std::string origin; + std::string testAddress; + // clang-format off + std::string testBin = "608060405234801561001057600080fd5b50611b70806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063b2acd509116100ad578063cbbab99c11610071578063cbbab99c14610914578063da1ce32314610997578063ec8b466a146109b5578063ff0732ec14610a33578063fffd016714610b0257610121565b8063b2acd50914610596578063b815849414610665578063c13be6ea146106bb578063c3e6b0181461078a578063caa26032146107e057610121565b806329470338116100f457806329470338146103e25780634849f27914610424578063653d710c146104ac5780636a4dc7f3146104f657806370a3872f1461054057610121565b8063086ecbfa146101265780630c6daa6e146101f55780631d1f490d146103355780631ecf4f2114610353575b600080fd5b6101df6004803603602081101561013c57600080fd5b810190808035906020019064010000000081111561015957600080fd5b82018360208201111561016b57600080fd5b8035906020019184600183028401116401000000008311171561018d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610b20565b6040518082815260200191505060405180910390f35b6102f7600480360361014081101561020c57600080fd5b81019080803563ffffffff16906020019092919080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f820116905080830192505050505050919291929080608001906004806020026040519081016040528092919082600460200280828437600081840152601f19601f820116905080830192505050505050919291929080604001906002806020026040519081016040528092919082600260200280828437600081840152601f19601f8201169050808301925050505050509192919290803515159060200190929190505050610c8a565b6040518082600260200280838360005b83811015610322578082015181840152602081019050610307565b5050505090500191505060405180910390f35b61033d610efa565b6040518082815260200191505060405180910390f35b6103a06004803603608081101561036957600080fd5b8101908080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610f02565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61040e600480360360208110156103f857600080fd5b8101908080359060200190929190505050611045565b6040518082815260200191505060405180910390f35b61046e6004803603608081101561043a57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611050565b6040518082600260200280838360005b8381101561049957808201518184015260208101905061047e565b5050505090500191505060405180910390f35b6104b46111b6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104fe6111be565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105806004803603606081101561055657600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506111c6565b6040518082815260200191505060405180910390f35b61064f600480360360208110156105ac57600080fd5b81019080803590602001906401000000008111156105c957600080fd5b8201836020820111156105db57600080fd5b803590602001918460018302840111640100000000831117156105fd57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061127a565b6040518082815260200191505060405180910390f35b6106a56004803603606081101561067b57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061138d565b6040518082815260200191505060405180910390f35b610774600480360360208110156106d157600080fd5b81019080803590602001906401000000008111156106ee57600080fd5b82018360208201111561070057600080fd5b8035906020019184600183028401116401000000008311171561072257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611478565b6040518082815260200191505060405180910390f35b6107ca600480360360608110156107a057600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506115ee565b6040518082815260200191505060405180910390f35b610899600480360360208110156107f657600080fd5b810190808035906020019064010000000081111561081357600080fd5b82018360208201111561082557600080fd5b8035906020019184600183028401116401000000008311171561084757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611706565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d95780820151818401526020810190506108be565b50505050905090810190601f1680156109065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61091c611849565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561095c578082015181840152602081019050610941565b50505050905090810190601f1680156109895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61099f611896565b6040518082815260200191505060405180910390f35b6109f5600480360360608110156109cb57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061189e565b6040518082600260200280838360005b83811015610a20578082015181840152602081019050610a05565b5050505090500191505060405180910390f35b610aec60048036036020811015610a4957600080fd5b8101908080359060200190640100000000811115610a6657600080fd5b820183602082011115610a7857600080fd5b80359060200191846001830284011164010000000083111715610a9a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506119ed565b6040518082815260200191505060405180910390f35b610b0a611acc565b6040518082815260200191505060405180910390f35b6000805a90506003836040518082805190602001908083835b60208310610b5c5780518252602082019150602081019050602083039250610b39565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610b9e573d6000803e3d6000fd5b5050506040515160601b6bffffffffffffffffffffffff1916915060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a16127108111158015610c1057506102588110155b610c82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b505050919050565b610c92611ad4565b610c9a611ad4565b60608787600060028110610caa57fe5b602002015188600160028110610cbc57fe5b602002015188600060048110610cce57fe5b602002015189600160048110610ce057fe5b60200201518a600260048110610cf257fe5b60200201518b600360048110610d0457fe5b60200201518b600060028110610d1657fe5b60200201518c600160028110610d2857fe5b60200201518c604051602001808b63ffffffff1663ffffffff1660e01b81526004018a81526020018981526020018881526020018781526020018681526020018581526020018477ffffffffffffffffffffffffffffffffffffffffffffffff191677ffffffffffffffffffffffffffffffffffffffffffffffff191681526008018377ffffffffffffffffffffffffffffffffffffffffffffffff191677ffffffffffffffffffffffffffffffffffffffffffffffff19168152600801821515151560f81b81526001019a5050505050505050505050604051602081830303815290604052905060005a905060408360d5602085016009600019fa610e2d57600080fd5b60005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a1620186a0811115610ee9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b849550505050505095945050505050565b600042905090565b6000805a905060018686868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610f65573d6000803e3d6000fd5b50505060206040510351915060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a16127108111158015610fc85750610bb88110155b61103a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b505050949350505050565b600081409050919050565b611058611ad4565b611060611af6565b858160006004811061106e57fe5b602002018181525050848160016004811061108557fe5b602002018181525050838160026004811061109c57fe5b60200201818152505082816003600481106110b357fe5b60200201818152505060005a9050604083608084600060065af180600081146110db576110e0565b600080fd5b505060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a16127108111158015611138575060968110155b6111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b50505050949350505050565b600032905090565b600033905090565b6000805a9050600083806111d657fe5b858709905060005a90506000818403905061271081111580156111fa575060008110155b61126c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b829450505050509392505050565b60008082519050600060c0828161128d57fe5b061461129857600080fd5b60005a90506040516020818460208801600060085af180600081146112c057825195506112c5565b600080fd5b50505060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a1620186a0811115611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b50505050919050565b6000805a90506000838061139d57fe5b858708905060005a9050600081840390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a161271081111580156113f8575060008110155b61146a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b829450505050509392505050565b6000805a90506002836040518082805190602001908083835b602083106114b45780518252602082019150602081019050602083039250611491565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156114f6573d6000803e3d6000fd5b5050506040513d602081101561150b57600080fd5b8101908080519060200190929190505050915060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a161271081111580156115745750603c8110155b6115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b505050919050565b6000805a905060405160208152602080820152602060408201528560608201528460808201528360a082015260208160c083600060055af18060008114611638578251945061163d565b600080fd5b50505060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a1620186a08111156116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b5050509392505050565b606080825167ffffffffffffffff8111801561172157600080fd5b506040519080825280601f01601f1916602001820160405280156117545781602001600182028036833780820191505090505b50905060005a9050835180602084018260208801600060045af161177457fe5b5060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a161271081111580156117cb5750600f8110155b61183d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b83945050505050919050565b60606000368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905090565b600045905090565b6118a6611ad4565b6118ae611b18565b84816000600381106118bc57fe5b60200201818152505083816001600381106118d357fe5b60200201818152505082816002600381106118ea57fe5b60200201818152505060005a9050604083606084600060075af1806000811461191257611917565b600080fd5b505060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a1612710811115801561197057506117708110155b6119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b505050509392505050565b6000805a90508280519060200120915060005a9050600081830390507fdfa34a4e767d8f6cbaddb2435b6adb60a8c66377dc9885145c3c4ccfaf58d6d2816040518082815260200191505060405180910390a16127108111158015611a525750600081115b611ac4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f6761736c65667420636865636b206572726f720000000000000000000000000081525060200191505060405180910390fd5b505050919050565b600043905090565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b604051806060016040528060039060208202803683378082019150509050509056fea2646970667358221220fcd3862acd2cfe62485e2ed162542e61e370b685319c69893f7b168021fbdd0f64736f6c634300060a0033"; + // clang-format on +}; + +BOOST_FIXTURE_TEST_SUITE(EVMStateContextTest, EVMStateContextFixture) + +BOOST_AUTO_TEST_CASE(testEVMPrecompiled) +{ + deployTest(); + BlockNumber number = 2; + // sha256 + { + std::string stringData = "abcd"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("sha256Test(bytes)", dataRef.toBytes()); + + auto result = callTest(number++, ref(encodedData)); + + string32 re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "sha256 gasUsed: " << gasUsed << std::endl; + + BOOST_CHECK_EQUAL("0x88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589", + toHexStringWithPrefix(fromString32(re).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // keccak256 + { + std::string stringData = "test123"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("keccak256Test(bytes)", dataRef.toBytes()); + + auto result = callTest(number++, ref(encodedData)); + + string32 re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "keccak256 gasUsed: " << gasUsed << std::endl; + + BOOST_CHECK_EQUAL("0xf81b517a242b218999ec8eec0ea6e2ddbef2a367a14e93f4a32a39e260f686ad", + toHexStringWithPrefix(fromString32(re).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // ecRecover + { + std::string stringData = "test_ecRecover"; + HashType hash = hashImpl->hash(asBytes(stringData)); + + h256 fixedSec1("bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto keyFactory = std::make_shared(); + auto secCreated = keyFactory->createKey(fixedSec1.asBytes()); + auto keyPair = std::make_shared(sec1); + auto sign = secp256k1Sign(*keyPair, hash); + auto signWithV = std::make_shared(ref(*sign)); + + auto hash32 = toString32(hash); + string32 r = toString32(signWithV->r()); + string32 s = toString32(signWithV->s()); + uint8_t v = signWithV->v() + 27; + auto p = secp256k1Recover(hash, ref(*sign)); + bytes encodedData = + codec->encodeWithSig("ecRecoverTest(bytes32,uint8,bytes32,bytes32)", hash32, v, r, s); + auto result = callTest(number++, ref(encodedData)); + + Address pub; + codec->decode(result->data(), pub); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "ecRecover gasUsed: " << gasUsed << std::endl; + + BOOST_CHECK_EQUAL(keyPair->address(hashImpl), pub); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // ripemd160Test + { + std::string stringData = "test_ripemd160"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("ripemd160Test(bytes)", dataRef.toBytes()); + + auto result = callTest(number++, ref(encodedData)); + + string32 re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "ripemd160 gasUsed: " << gasUsed << std::endl; + BOOST_CHECK_EQUAL("0x983fcf500b356d411f44fac0c54b9156bac3a22d000000000000000000000000", + toHexStringWithPrefix(fromString32(re).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // identityTest + { + std::string stringData = "test_ripemd160"; + bytesConstRef dataRef(stringData); + bytes encodedData = codec->encodeWithSig("callDatacopy(bytes)", dataRef.toBytes()); + + auto result = callTest(number++, ref(encodedData)); + + bytes re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "identityTest gasUsed: " << gasUsed << std::endl; + + BOOST_CHECK_EQUAL(toHexStringWithPrefix(asBytes(stringData)), toHexStringWithPrefix(re)); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // modexp + { + string32 base = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 exponent = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 modulus = + toString32("0000000000000000000000000000000000000000000000000000000000000009"); + bytes encodedData = + codec->encodeWithSig("callBigModExp(bytes32,bytes32,bytes32)", base, exponent, modulus); + + auto result = callTest(number++, ref(encodedData)); + + string32 re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "modexp gasUsed: " << gasUsed << std::endl; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + toHexStringWithPrefix(fromString32(re).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // alt_bn128_G1_add + /* + { + string32 ax = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 ay = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 bx = + toString32("0000000000000000000000000000000000000000000000000000000000000009"); + string32 by = + toString32("0000000000000000000000000000000000000000000000000000000000000009"); + bytes encodedData = + codec->encodeWithSig("callBn256Add(bytes32,bytes32,bytes32,bytes32)", ax, ay, bx, by); + + auto result = callTest(number++, ref(encodedData)); + + std::vector re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "alt_bn128_G1_add gasUsed: " << gasUsed << std::endl; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + toHexStringWithPrefix(fromString32(re[0]).asBytes())); + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + toHexStringWithPrefix(fromString32(re[1]).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + + // alt_bn128_G1_mul + { + string32 x = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 y = + toString32("0000000000000000000000000000000000000000000000000000000000000003"); + string32 scalar = + toString32("0000000000000000000000000000000000000000000000000000000000000009"); + bytes encodedData = + codec->encodeWithSig("callBn256ScalarMul(bytes32,bytes32,bytes32)", x, y, scalar); + + auto result = callTest(number++, ref(encodedData)); + + std::vector re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "alt_bn128_G1_add gasUsed: " << gasUsed << std::endl; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + toHexStringWithPrefix(fromString32(re[0]).asBytes())); + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + toHexStringWithPrefix(fromString32(re[1]).asBytes())); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + */ + + // alt_bn128_pairing_product + // blake2 + + // addmod + { + u256 x = 100; + u256 y = 89; + u256 k = 99; + bytes encodedData = codec->encodeWithSig("addmodTest(uint256,uint256,uint256)", x, y, k); + + auto result = callTest(number++, ref(encodedData)); + + u256 re; + codec->decode(result->data(), re); + uint64_t gasUsed; + auto logEntry = result->takeLogEntries(); + codec->decode(logEntry.at(0).data(), gasUsed); + std::cout << "addmod gasUsed: " << gasUsed << std::endl; + BOOST_CHECK_EQUAL(re, 90); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // mulmod + { + u256 x = 3; + u256 y = 89; + u256 k = 99; + bytes encodedData = codec->encodeWithSig("mulmodTest(uint256,uint256,uint256)", x, y, k); + + auto result = callTest(number++, ref(encodedData)); + + u256 re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(re, 69); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // gasLimit + { + bytes encodedData = codec->encodeWithSig("gasLimitTest()"); + + auto result = callTest(number++, ref(encodedData)); + + u256 re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(re, gas); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // number + { + bytes encodedData = codec->encodeWithSig("numberTest()"); + + number++; + auto _number = number; + auto result = callTest(_number, ref(encodedData)); + + u256 re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(re, _number); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // timestamp + { + bytes encodedData = codec->encodeWithSig("timeStampTest()"); + + auto result = callTest(number++, ref(encodedData)); + + u256 re; + codec->decode(result->data(), re); + BOOST_CHECK_LT(re, utcTime()); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // callData + { + bytes encodedData = codec->encodeWithSig("callDataTest()"); + + auto result = callTest(number++, ref(encodedData)); + + bytes re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(toHexStringWithPrefix(re), toHexStringWithPrefix(encodedData)); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // sender + { + bytes encodedData = codec->encodeWithSig("senderTest()"); + + auto result = callTest(number++, ref(encodedData)); + + Address re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(re, Address(sender)); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // origin + { + bytes encodedData = codec->encodeWithSig("originTest()"); + + auto result = callTest(number++, ref(encodedData), origin); + + Address re; + codec->decode(result->data(), re); + BOOST_CHECK_EQUAL(re, Address(origin)); + BOOST_CHECK_EQUAL(result->status(), (int32_t)TransactionStatus::None); + } + + // blockHash +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/FileSystemPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/FileSystemPrecompiledTest.cpp new file mode 100644 index 0000000..c7d487c --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/FileSystemPrecompiledTest.cpp @@ -0,0 +1,1814 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FileSystemPrecompiledTest.cpp + * @author: kyonRay + * @date 2021-06-20 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class FileSystemPrecompiledFixture : public PrecompiledFixture +{ +public: + FileSystemPrecompiledFixture() = default; + + ~FileSystemPrecompiledFixture() override = default; + + void init(bool _isWasm, protocol::BlockVersion version = BlockVersion::V3_1_VERSION) + { + setIsWasm(_isWasm, false, true, version); + bfsAddress = _isWasm ? precompiled::BFS_NAME : BFS_ADDRESS; + tableAddress = _isWasm ? precompiled::KV_TABLE_NAME : KV_TABLE_ADDRESS; + tableTestAddress1 = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2").hex(); + tableTestAddress2 = Address("0x420f853b49838bd3e9466c85a4cc3428c9601234").hex(); + + if (_isWasm) + { + auto result1 = creatKVTable(1, "test1", "id", "item1", "/tables/test1"); + BOOST_CHECK(result1->data().toBytes() == codec->encode(int32_t(0))); + auto result2 = creatKVTable(2, "test2", "id", "item1", "/tables/test2"); + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(0))); + } + else + { + auto result1 = creatKVTable(1, "test1", "id", "item1", tableTestAddress1); + BOOST_CHECK(result1->data().toBytes() == codec->encode(int32_t(0))); + auto result2 = creatKVTable(2, "test2", "id", "item1", tableTestAddress2); + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(0))); + } + + h256 addressCreate("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e"); + addressString = addressCreate.hex().substr(0, 40); + } + + void deployHelloContract(protocol::BlockNumber _number, std::string const& address) + { + std::string helloBin = + "608060405234801561001057600080fd5b506040805190810160405280600d81526020017f48656c6c6f2c" + "20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c92" + "9190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090" + "601f016020900481019282601f106100a357805160ff19168380011785556100d1565b8280016001018555" + "82156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100" + "de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b50" + "90565b90565b61047a806101166000396000f300608060405260043610610062576000357c010000000000" + "0000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100675780" + "634ed3885e146100f75780636d4ce63c14610160578063b8368615146101f0575b600080fd5b3480156100" + "7357600080fd5b5061007c610247565b604051808060200182810382528381815181526020019150805190" + "6020019080838360005b838110156100bc5780820151818401526020810190506100a1565b505050509050" + "90810190601f1680156100e95780820380516001836020036101000a031916815260200191505b50925050" + "5060405180910390f35b34801561010357600080fd5b5061015e6004803603810190808035906020019082" + "01803590602001908080601f01602080910402602001604051908101604052809392919081815260200183" + "838082843782019150505050505091929192905050506102e5565b005b34801561016c57600080fd5b5061" + "01756102ff565b604051808060200182810382528381815181526020019150805190602001908083836000" + "5b838110156101b557808201518184015260208101905061019a565b50505050905090810190601f168015" + "6101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f3" + "5b3480156101fc57600080fd5b506102056103a1565b604051808273ffffffffffffffffffffffffffffff" + "ffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390" + "f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160" + "405280929190818152602001828054600181600116156101000203166002900480156102dd5780601f1061" + "02b2576101008083540402835291602001916102dd565b820191906000526020600020905b815481529060" + "0101906020018083116102c057829003601f168201915b505050505081565b806000908051906020019061" + "02fb9291906103a9565b5050565b606060008054600181600116156101000203166002900480601f016020" + "80910402602001604051908101604052809291908181526020018280546001816001161561010002031660" + "02900480156103975780601f1061036c57610100808354040283529160200191610397565b820191906000" + "526020600020905b81548152906001019060200180831161037a57829003601f168201915b505050505090" + "5090565b600030905090565b82805460018160011615610100020316600290049060005260206000209060" + "1f016020900481019282601f106103ea57805160ff1916838001178555610418565b828001600101855582" + "15610418579182015b828111156104175782518255916020019190600101906103fc565b5b509050610425" + "9190610429565b5090565b61044b91905b8082111561044757600081600090555060010161042f565b5090" + "565b905600a165627a7a723058208c7b44898edb531f977931e72d1195b47424ff97a80e0d22932be8fab3" + "6bd9750029"; + bytes input; + boost::algorithm::unhex(helloBin, std::back_inserter(input)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", input, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(address); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::TXHASH); + params->setTransactionHash(hash); + params->setCreate(true); + + nextBlock(_number); + // -------------------------------- + // Create contract HelloWorld + // -------------------------------- + + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + commitBlock(_number); + BOOST_CHECK(result); + BOOST_CHECK_EQUAL(result->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result->contextID(), 99); + BOOST_CHECK_EQUAL(result->seq(), 1000); + BOOST_CHECK_EQUAL(result->create(), false); + BOOST_CHECK_EQUAL(result->newEVMContractAddress(), address); + BOOST_CHECK_EQUAL(result->origin(), sender); + BOOST_CHECK_EQUAL(result->from(), address); + } + + ExecutionMessage::UniquePtr creatKVTable(protocol::BlockNumber _number, + const std::string& tableName, const std::string& key, const std::string& value, + const std::string& solidityAddress, int _errorCode = 0, bool errorInTableManager = false) + { + nextBlock(_number, m_blockVersion); + bytes in = + codec->encodeWithSig("createKVTable(string,string,string)", tableName, key, value); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (errorInTableManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result2; + } + + // set new address + result2->setTo(solidityAddress); + // external create + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + // external call bfs + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call bfs success, callback to create + result4->setSeq(1001); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + // create success, callback to precompiled + result5->setSeq(1000); + + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result6->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result6; + }; + + ExecutionMessage::UniquePtr mkdir(protocol::BlockNumber _number, std::string const& path, + int _errorCode = 0, bool errorInPrecompiled = false) + { + bytes in = codec->encodeWithSig("mkdir(string)", path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(bfsAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (errorInPrecompiled) + { + commitBlock(_number); + return result2; + } + // call precompiled + result2->setSeq(1001); + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + if (_errorCode != 0) + { + if (isWasm && versionCompareTo(m_blockVersion, BlockVersion::V3_2_VERSION) >= 0) + { + BOOST_CHECK(result4->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + else + { + BOOST_CHECK(result4->data().toBytes() == codec->encode(s256(_errorCode))); + } + } + + commitBlock(_number); + return result4; + }; + + ExecutionMessage::UniquePtr link([[maybe_unused]] bool _isWasm, protocol::BlockNumber _number, + std::string const& name, std::string const& version, std::string const& address, + std::string const& abi, int _errorCode = 0, bool _isCover = false) + { + bytes in; + if (version.empty()) + { + in = codec->encodeWithSig("link(string,string,string)", name, address, abi); + } + else + { + in = codec->encodeWithSig( + "link(string,string,string,string)", name, version, address, abi); + } + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(bfsAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // if cover write link, then + // no need to touch new file external call + if (_isCover) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + } + + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result4->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result4; + }; + + ExecutionMessage::UniquePtr readlink( + protocol::BlockNumber _number, std::string const& _path, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("readlink(string)", _path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(bfsAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr rebuildBfs( + protocol::BlockNumber _number, uint32_t from, uint32_t to, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("rebuildBfs(uint256,uint256)", from, to); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + Address newSender = Address(isWasm ? std::string(precompiled::SYS_CONFIG_NAME) : + std::string(precompiled::SYS_CONFIG_ADDRESS)); + tx->forceSender(newSender.asBytes()); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(bfsAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr rebuildBfsBySysConfig( + protocol::BlockNumber _number, std::string version, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("setValueByKey(string,string)", + std::string(ledger::SYSTEM_KEY_COMPATIBILITY_VERSION), version); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + Address newSender = Address(std::string(precompiled::AUTH_COMMITTEE_ADDRESS)); + tx->forceSender(newSender.asBytes()); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? SYS_CONFIG_NAME : SYS_CONFIG_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call to BFS + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + // BFS callback to sys + result3->setSeq(1000); + + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result4->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result4; + }; + + ExecutionMessage::UniquePtr listPage(protocol::BlockNumber _number, std::string const& path, + uint32_t offset, uint32_t count, int _errorCode = 0) + { + bytes in = + codec->encodeWithSig("list(string,uint256,uint256)", path, u256(offset), u256(count)); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? BFS_NAME : BFS_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + std::vector empty; + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode), empty)); + } + + commitBlock(_number); + return result2; + }; + + std::string sender; + std::string addressString; + std::string bfsAddress; + std::string tableAddress; + std::string tableTestAddress1; + std::string tableTestAddress2; +}; +BOOST_FIXTURE_TEST_SUITE(precompiledFileSystemTest, FileSystemPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(lsTest) +{ + init(false); + BlockNumber _number = 3; + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls not exist + { + auto result = list(_number++, "/tables/test3", CODE_FILE_NOT_EXIST); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls invalid path + { + list(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + list(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + list(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 4); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& rootSub : tool::FS_ROOT_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(rootSub.substr(1)))); + } + } + + // ls /sys + { + auto result = list(_number++, "/sys"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == precompiled::BFS_SYS_SUBS_COUNT); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& sysSub : precompiled::BFS_SYS_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(sysSub.substr(tool::FS_SYS_BIN.size() + 1)))); + } + } +} + +BOOST_AUTO_TEST_CASE(lsPageTest) +{ + init(false); + BlockNumber _number = 3; + + // ls dir + { + auto result = listPage(_number++, "/tables", 0, 500); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + + result = listPage(_number++, "/tables", 1, 2); + ls.clear(); + ls.shrink_to_fit(); + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + } + + // ls regular + { + auto result = listPage(_number++, "/tables/test2", 0, 500); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls not exist + { + auto result = listPage(_number++, "/tables/test3", 0, 500, CODE_FILE_NOT_EXIST); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls invalid path + { + listPage(_number++, "", 0, 500, CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + listPage(_number++, "/" + errorPath.str(), 0, 500, CODE_FILE_INVALID_PATH); + listPage(_number++, "/path/level/too/deep/not/over/six/", 0, 500, CODE_FILE_INVALID_PATH); + } + + // ls / + { + auto result = listPage(_number++, "/", 0, 500); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 4); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& rootSub : tool::FS_ROOT_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(rootSub.substr(1)))); + } + } + + // ls /sys + { + auto result = listPage(_number++, "/sys", 0, 500); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == precompiled::BFS_SYS_SUBS_COUNT); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& sysSub : precompiled::BFS_SYS_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(sysSub.substr(tool::FS_SYS_BIN.size() + 1)))); + } + } +} + +BOOST_AUTO_TEST_CASE(lsPagWasmeTest) +{ + init(true); + BlockNumber _number = 3; + + // ls dir + { + auto result = listPage(_number++, "/tables", 0, 500); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + + result = listPage(_number++, "/tables", 1, 2); + ls.clear(); + ls.shrink_to_fit(); + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + } + + // ls regular + { + auto result = listPage(_number++, "/tables/test2", 0, 500); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_CONTRACT); + } + + // ls not exist + { + auto result = listPage(_number++, "/tables/test3", 0, 500, CODE_FILE_NOT_EXIST); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls invalid path + { + listPage(_number++, "", 0, 500, CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + listPage(_number++, "/" + errorPath.str(), 0, 500, CODE_FILE_INVALID_PATH); + listPage(_number++, "/path/level/too/deep/not/over/six/", 0, 500, CODE_FILE_INVALID_PATH); + } + + // ls / + { + auto result = listPage(_number++, "/", 0, 500); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 4); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& rootSub : tool::FS_ROOT_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(rootSub.substr(1)))); + } + } + + // ls /sys + { + auto result = listPage(_number++, "/sys", 0, 500); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == precompiled::BFS_SYS_SUBS_COUNT); + std::set lsSet; + for (const auto& item : ls | RANGES::views::transform([](auto&& bfs) -> std::string { + return std::get<0>(bfs); + })) + { + lsSet.insert(item); + } + + for (auto const& sysSub : precompiled::BFS_SYS_SUBS | RANGES::views::drop(1)) + { + BOOST_CHECK(lsSet.contains(std::string(sysSub.substr(tool::FS_SYS_BIN.size() + 1)))); + } + } +} + +BOOST_AUTO_TEST_CASE(lsTest_3_0) +{ + init(false, BlockVersion::V3_0_VERSION); + m_blockVersion = BlockVersion::V3_0_VERSION; + BlockNumber _number = 3; + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls not exist + { + auto result = list(_number++, "/tables/test3", CODE_FILE_NOT_EXIST); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); // with '/' + } + + // mkdir invalid path + { + list(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + list(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + list(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(lsTestWasm) +{ + init(true); + BlockNumber _number = 3; + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == executor::FS_TYPE_CONTRACT); + } + + // ls not exist + { + auto result = list(_number++, "/tables/test3", CODE_FILE_NOT_EXIST); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 4); // with '/' + } + + // mkdir invalid path + { + list(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + list(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + list(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(lsTestWasm_3_0) +{ + init(true, BlockVersion::V3_0_VERSION); + BlockNumber _number = 3; + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == executor::FS_TYPE_CONTRACT); + } + + // ls not exist + { + auto result = list(_number++, "/tables/test3", CODE_FILE_NOT_EXIST); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == s256((int)CODE_FILE_NOT_EXIST)); + BOOST_CHECK(ls.empty()); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); // with '/' + } + + // mkdir invalid path + { + list(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + list(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + list(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(mkdirTest) +{ + init(false); + BlockNumber _number = 3; + // simple mkdir + { + auto result = mkdir(_number++, "/tables/temp/test"); + s256 m; + codec->decode(result->data(), m); + BOOST_TEST(m == 0u); + + auto lsResult = list(_number++, "/tables"); + std::vector ls; + s256 code; + codec->decode(lsResult->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + + auto lsResult2 = list(_number++, "/tables/temp"); + std::vector ls2; + codec->decode(lsResult2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<0>(ls2[0]) == "test"); + BOOST_CHECK(std::get<1>(ls2[0]) == executor::FS_TYPE_DIR); + } + + // mkdir /tables/test1/test + { + auto result = mkdir(_number++, "/tables/test1/test", CODE_FILE_BUILD_DIR_FAILED); + } + + // mkdir /tables/test1 + { + auto result = mkdir(_number++, "/tables/test1", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256((int)CODE_FILE_ALREADY_EXIST))); + } + + // mkdir /tables + { + auto result = mkdir(_number++, "/tables", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256((int)CODE_FILE_ALREADY_EXIST))); + } + + // mkdir in wrong path + { + auto result = mkdir(_number++, "/sys/test1", CODE_FILE_INVALID_PATH); + auto result2 = mkdir(_number++, "/user/test1", CODE_FILE_INVALID_PATH); + auto result3 = mkdir(_number++, "/test1", CODE_FILE_INVALID_PATH); + } + + // mkdir invalid path + { + mkdir(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + mkdir(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + mkdir(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(mkdirWasmTest) +{ + init(true); + BlockNumber _number = 3; + // simple mkdir + { + auto result = mkdir(_number++, "/tables/temp/test"); + int32_t m; + codec->decode(result->data(), m); + BOOST_TEST(m == 0u); + + auto lsResult = list(_number++, "/tables"); + std::vector ls; + int32_t code; + codec->decode(lsResult->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + + auto lsResult2 = list(_number++, "/tables/temp"); + std::vector ls2; + codec->decode(lsResult2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<0>(ls2[0]) == "test"); + BOOST_CHECK(std::get<1>(ls2[0]) == executor::FS_TYPE_DIR); + } + + // mkdir /tables/test1/test + { + auto result = mkdir(_number++, "/tables/test1/test", CODE_FILE_BUILD_DIR_FAILED); + } + + // mkdir /tables/test1 + { + auto result = mkdir(_number++, "/tables/test1", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode((int32_t)CODE_FILE_ALREADY_EXIST)); + } + + // mkdir /tables + { + auto result = mkdir(_number++, "/tables", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode((int32_t)CODE_FILE_ALREADY_EXIST)); + } + + // mkdir in wrong path + { + auto result = mkdir(_number++, "/sys/test1", CODE_FILE_INVALID_PATH); + auto result2 = mkdir(_number++, "/user/test1", CODE_FILE_INVALID_PATH); + auto result3 = mkdir(_number++, "/test1", CODE_FILE_INVALID_PATH); + } + + // mkdir invalid path + { + mkdir(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + mkdir(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + mkdir(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(mkdirTest_3_0) +{ + init(false, protocol::BlockVersion::V3_0_VERSION); + BlockNumber _number = 3; + // simple mkdir + { + auto result = mkdir(_number++, "/tables/temp/test"); + s256 m; + codec->decode(result->data(), m); + BOOST_TEST(m == 0u); + + auto lsResult = list(_number++, "/tables"); + std::vector ls; + s256 code; + codec->decode(lsResult->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + + auto lsResult2 = list(_number++, "/tables/temp"); + std::vector ls2; + codec->decode(lsResult2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<0>(ls2[0]) == "test"); + BOOST_CHECK(std::get<1>(ls2[0]) == executor::FS_TYPE_DIR); + } + + // mkdir /tables/test1/test + { + auto result = mkdir(_number++, "/tables/test1/test", CODE_FILE_BUILD_DIR_FAILED); + } + + // mkdir /tables/test1 + { + auto result = mkdir(_number++, "/tables/test1", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256((int)CODE_FILE_ALREADY_EXIST))); + } + + // mkdir /tables + { + auto result = mkdir(_number++, "/tables", 0, true); + BOOST_CHECK(result->data().toBytes() == codec->encode(s256((int)CODE_FILE_ALREADY_EXIST))); + } + + // mkdir in wrong path + { + auto result = mkdir(_number++, "/sys/test1", CODE_FILE_INVALID_PATH); + auto result2 = mkdir(_number++, "/user/test1", CODE_FILE_INVALID_PATH); + auto result3 = mkdir(_number++, "/test1", CODE_FILE_INVALID_PATH); + } + + // mkdir invalid path + { + mkdir(_number++, "", CODE_FILE_INVALID_PATH); + std::stringstream errorPath; + errorPath << std::setfill('0') << std::setw(56) << 1; + mkdir(_number++, "/" + errorPath.str(), CODE_FILE_INVALID_PATH); + mkdir(_number++, "/path/level/too/deep/not/over/six/", CODE_FILE_INVALID_PATH); + } +} + +BOOST_AUTO_TEST_CASE(linkTest) +{ + init(false); + BlockNumber number = 3; + deployHelloContract(number++, addressString); + + std::string contractName = "Hello"; + std::string contractVersion = "1.0"; + std::string contractAbi = + "[{\"constant\":false,\"inputs\":[{\"name\":" + "\"num\",\"type\":\"uint256\"}],\"name\":" + "\"trans\",\"outputs\":[],\"payable\":false," + "\"type\":\"function\"},{\"constant\":true," + "\"inputs\":[],\"name\":\"get\",\"outputs\":[{" + "\"name\":\"\",\"type\":\"uint256\"}]," + "\"payable\":false,\"type\":\"function\"},{" + "\"inputs\":[],\"payable\":false,\"type\":" + "\"constructor\"}]"; + + // link overflow + std::string overflowVersion130 = + "012345678901234567890123456789012345678901234567890123456789" + "0123456789012345678901234567890123456789012345678901234567890123456789"; + // simple link + { + link(false, number++, contractName, contractVersion, addressString, contractAbi); + auto result = list(number++, "/apps/Hello"); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + + auto result2 = list(number++, "/apps/Hello/1.0"); + std::vector ls2; + codec->decode(result2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<0>(ls2.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls2.at(0)) == tool::FS_TYPE_LINK); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(0) == addressString); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(1) == contractAbi); + + auto result3 = readlink(number++, "/apps/Hello/1.0"); + Address address; + codec->decode(result3->data(), address); + BOOST_CHECK_EQUAL(address.hex(), addressString); + } + + // overwrite link + { + auto latestVersion = "latest"; + link(false, number++, contractName, latestVersion, addressString, contractAbi); + auto result = list(number++, "/apps/Hello"); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + + auto result2 = list(number++, "/apps/Hello/latest"); + std::vector ls2; + codec->decode(result2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(0) == addressString); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(1) == contractAbi); + + auto resultR1 = readlink(number++, "/apps/Hello/1.0"); + Address address; + codec->decode(resultR1->data(), address); + BOOST_CHECK_EQUAL(address.hex(), addressString); + + // cover write + auto newAddress = "420f853b49838bd3e9466c85a4cc3428c960dde1"; + deployHelloContract(number++, newAddress); + link(false, number++, contractName, latestVersion, newAddress, contractAbi, 0, true); + auto result3 = list(number++, "/apps/Hello/latest"); + std::vector ls3; + codec->decode(result3->data(), code, ls3); + BOOST_CHECK(ls3.size() == 1); + BOOST_CHECK(std::get<2>(ls3.at(0)).at(0) == newAddress); + BOOST_CHECK(std::get<2>(ls3.at(0)).at(1) == contractAbi); + + auto resultR2 = readlink(number++, "/apps/Hello/latest"); + Address address2; + codec->decode(resultR2->data(), address2); + BOOST_CHECK_EQUAL(address2.hex(), newAddress); + } + + // wrong version + { + auto errorVersion = "ver/tion"; + link(false, number++, contractName, errorVersion, addressString, contractAbi, + CODE_ADDRESS_OR_VERSION_ERROR, true); + } + + // wrong address + { + auto wrongAddress = addressString; + std::reverse(wrongAddress.begin(), wrongAddress.end()); + link(false, number++, contractName, contractVersion, wrongAddress, contractAbi, + CODE_ADDRESS_OR_VERSION_ERROR, true); + } + + // overflow version + { + std::stringstream errorVersion; + for (size_t i = 0; i < FS_PATH_MAX_LENGTH - contractName.size(); ++i) + { + errorVersion << "1"; + } + link(false, number++, contractName, errorVersion.str(), addressString, contractAbi, + CODE_FILE_INVALID_PATH, true); + } + + // simple link without version + { + std::string newAbsolutePath = "link_test"; + link(false, number++, newAbsolutePath, "", addressString, contractAbi); + auto result = list(number++, "/apps/link_test"); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "link_test"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + BOOST_CHECK(std::get<2>(ls.at(0)).at(0) == addressString); + BOOST_CHECK(std::get<2>(ls.at(0)).at(1) == contractAbi); + + auto result3 = readlink(number++, "/apps/link_test"); + Address address; + codec->decode(result3->data(), address); + BOOST_CHECK_EQUAL(address.hex(), addressString); + } +} + +BOOST_AUTO_TEST_CASE(linkTest_3_0) +{ + init(false, protocol::BlockVersion::V3_0_VERSION); + BlockNumber number = 3; + deployHelloContract(number++, addressString); + + std::string contractName = "Hello"; + std::string contractVersion = "1.0"; + std::string contractAbi = + "[{\"constant\":false,\"inputs\":[{\"name\":" + "\"num\",\"type\":\"uint256\"}],\"name\":" + "\"trans\",\"outputs\":[],\"payable\":false," + "\"type\":\"function\"},{\"constant\":true," + "\"inputs\":[],\"name\":\"get\",\"outputs\":[{" + "\"name\":\"\",\"type\":\"uint256\"}]," + "\"payable\":false,\"type\":\"function\"},{" + "\"inputs\":[],\"payable\":false,\"type\":" + "\"constructor\"}]"; + + // link overflow + std::string overflowVersion130 = + "012345678901234567890123456789012345678901234567890123456789" + "0123456789012345678901234567890123456789012345678901234567890123456789"; + // simple link + { + link(false, number++, contractName, contractVersion, addressString, contractAbi); + auto result = list(number++, "/apps/Hello"); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + + auto result2 = list(number++, "/apps/Hello/1.0"); + std::vector ls2; + codec->decode(result2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<0>(ls2.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls2.at(0)) == tool::FS_TYPE_LINK); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(0) == addressString); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(1) == contractAbi); + + auto result3 = readlink(number++, "/apps/Hello/1.0"); + Address address; + codec->decode(result3->data(), address); + BOOST_CHECK_EQUAL(address.hex(), addressString); + } + + // overwrite link + { + auto latestVersion = "latest"; + link(false, number++, contractName, latestVersion, addressString, contractAbi); + auto result = list(number++, "/apps/Hello"); + s256 code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == contractVersion); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + + auto result2 = list(number++, "/apps/Hello/latest"); + std::vector ls2; + codec->decode(result2->data(), code, ls2); + BOOST_CHECK(ls2.size() == 1); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(0) == addressString); + BOOST_CHECK(std::get<2>(ls2.at(0)).at(1) == contractAbi); + + auto resultR1 = readlink(number++, "/apps/Hello/1.0"); + Address address; + codec->decode(resultR1->data(), address); + BOOST_CHECK_EQUAL(address.hex(), addressString); + + // cover write + auto newAddress = "420f853b49838bd3e9466c85a4cc3428c960dde1"; + deployHelloContract(number++, newAddress); + link(false, number++, contractName, latestVersion, newAddress, contractAbi, 0, true); + auto result3 = list(number++, "/apps/Hello/latest"); + std::vector ls3; + codec->decode(result3->data(), code, ls3); + BOOST_CHECK(ls3.size() == 1); + BOOST_CHECK(std::get<2>(ls3.at(0)).at(0) == newAddress); + BOOST_CHECK(std::get<2>(ls3.at(0)).at(1) == contractAbi); + + auto resultR2 = readlink(number++, "/apps/Hello/latest"); + Address address2; + codec->decode(resultR2->data(), address2); + BOOST_CHECK_EQUAL(address2.hex(), newAddress); + } + + // wrong version + { + auto errorVersion = "ver/tion"; + link(false, number++, contractName, errorVersion, addressString, contractAbi, + CODE_ADDRESS_OR_VERSION_ERROR, true); + } + + // wrong address + { + auto wrongAddress = addressString; + std::reverse(wrongAddress.begin(), wrongAddress.end()); + link(false, number++, contractName, contractVersion, wrongAddress, contractAbi, + CODE_ADDRESS_OR_VERSION_ERROR, true); + } + + // overflow version + { + std::stringstream errorVersion; + for (size_t i = 0; i < FS_PATH_MAX_LENGTH - contractName.size(); ++i) + { + errorVersion << "1"; + } + link(false, number++, contractName, errorVersion.str(), addressString, contractAbi, + CODE_FILE_INVALID_PATH, true); + } +} + +BOOST_AUTO_TEST_CASE(rebuildBfsTest) +{ + init(false, protocol::BlockVersion::V3_0_VERSION); + BlockNumber _number = 3; + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + } + + const int32_t mkdirCount = 1000; + mkdir(_number++, "/apps/temp/temp2/temp3/temp4"); + + boost::log::core::get()->set_logging_enabled(false); + std::promise>> temp4p; + storage->asyncOpenTable( + "/apps/temp/temp2/temp3/temp4", [&](Error::UniquePtr _e, std::optional
_t) { + temp4p.set_value({std::move(_e), std::move(_t)}); + }); + auto [error, temp4T] = temp4p.get_future().get(); + auto subEntry = temp4T->getRow(tool::FS_KEY_SUB); + std::map bfsInfo; + auto&& out = asBytes(std::string(subEntry->get())); + codec::scale::decode(bfsInfo, gsl::make_span(out)); + for (int i = 0; i < mkdirCount; ++i) + { + bfsInfo.insert({"test" + std::to_string(i), std::string(tool::FS_TYPE_DIR)}); + } + subEntry->importFields({asString(codec::scale::encode(bfsInfo))}); + temp4T->setRow(tool::FS_KEY_SUB, std::move(subEntry.value())); + boost::log::core::get()->set_logging_enabled(true); + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = list(_number++, "/apps/temp/temp2/temp3/temp4"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == mkdirCount); + } + + + // upgrade to v3.1.0 + m_blockVersion = protocol::BlockVersion::V3_1_VERSION; + + boost::log::core::get()->set_logging_enabled(false); + rebuildBfs(_number++, (uint32_t)protocol::BlockVersion::V3_0_VERSION, + (uint32_t)protocol::BlockVersion::V3_1_VERSION); + boost::log::core::get()->set_logging_enabled(true); + + std::promise>> p; + storage->asyncOpenTable(tool::FS_ROOT, [&](Error::UniquePtr _e, std::optional
_t) { + p.set_value({std::move(_e), std::move(_t)}); + }); + auto [e, t] = p.get_future().get(); + BOOST_CHECK(t->getRow(tool::FS_APPS.substr(1)).has_value()); + BOOST_CHECK(t->getRow(tool::FS_USER_TABLE.substr(1)).has_value()); + BOOST_CHECK(t->getRow(tool::FS_SYS_BIN.substr(1)).has_value()); + BOOST_CHECK(!t->getRow(tool::FS_KEY_SUB).has_value()); + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + } + + // ls /sys + { + auto result = list(_number++, "/sys"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == precompiled::BFS_SYS_SUBS_COUNT); + } + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = list(_number++, "/apps/temp/temp2/temp3/temp4"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == USER_TABLE_MAX_LIMIT_COUNT); + } + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = listPage(_number++, "/apps/temp/temp2/temp3/temp4", 0, 10000); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == mkdirCount); + } + + // rebuild again + rebuildBfs(_number++, (uint32_t)protocol::BlockVersion::V3_0_VERSION, + (uint32_t)protocol::BlockVersion::V3_1_VERSION); +} + +BOOST_AUTO_TEST_CASE(rebuildBfsBySysTest) +{ + init(false, protocol::BlockVersion::V3_0_VERSION); + BlockNumber _number = 3; + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + } + + const int32_t mkdirCount = 1000; + mkdir(_number++, "/apps/temp/temp2/temp3/temp4"); + + boost::log::core::get()->set_logging_enabled(false); + std::promise>> temp4p; + storage->asyncOpenTable( + "/apps/temp/temp2/temp3/temp4", [&](Error::UniquePtr _e, std::optional
_t) { + temp4p.set_value({std::move(_e), std::move(_t)}); + }); + auto [error, temp4T] = temp4p.get_future().get(); + auto subEntry = temp4T->getRow(tool::FS_KEY_SUB); + std::map bfsInfo; + auto&& out = asBytes(std::string(subEntry->get())); + codec::scale::decode(bfsInfo, gsl::make_span(out)); + for (int i = 0; i < mkdirCount; ++i) + { + bfsInfo.insert({"test" + std::to_string(i), std::string(tool::FS_TYPE_DIR)}); + } + subEntry->importFields({asString(codec::scale::encode(bfsInfo))}); + temp4T->setRow(tool::FS_KEY_SUB, std::move(subEntry.value())); + boost::log::core::get()->set_logging_enabled(true); + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = list(_number++, "/apps/temp/temp2/temp3/temp4"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == mkdirCount); + } + + // upgrade to v3.1.0 + // boost::log::core::get()->set_logging_enabled(false); + auto updateNumber = _number++; + rebuildBfsBySysConfig(_number++, V3_1_VERSION_STR); + // boost::log::core::get()->set_logging_enabled(true); + + std::promise>> p; + storage->asyncOpenTable(tool::FS_ROOT, [&](Error::UniquePtr _e, std::optional
_t) { + p.set_value({std::move(_e), std::move(_t)}); + }); + auto [e, t] = p.get_future().get(); + BOOST_CHECK(t->getRow(tool::FS_APPS.substr(1)).has_value()); + BOOST_CHECK(t->getRow(tool::FS_USER_TABLE.substr(1)).has_value()); + BOOST_CHECK(t->getRow(tool::FS_SYS_BIN.substr(1)).has_value()); + BOOST_CHECK(!t->getRow(tool::FS_KEY_SUB).has_value()); + + m_blockVersion = BlockVersion::V3_1_VERSION; + + // ls dir + { + auto result = list(_number++, "/tables"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 2); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test1"); + BOOST_CHECK(std::get<0>(ls.at(1)) == "test2"); + } + + // ls regular + { + auto result = list(_number++, "/tables/test2"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 1); + BOOST_CHECK(std::get<0>(ls.at(0)) == "test2"); + BOOST_CHECK(std::get<1>(ls.at(0)) == tool::FS_TYPE_LINK); + } + + // ls / + { + auto result = list(_number++, "/"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == 3); + } + + // ls /sys + { + auto result = list(_number++, "/sys"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == precompiled::BFS_SYS_SUBS_COUNT); + } + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = list(_number++, "/apps/temp/temp2/temp3/temp4"); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == USER_TABLE_MAX_LIMIT_COUNT); + } + + // ls /apps/temp/temp2/temp3/temp4 + { + auto result = listPage(_number++, "/apps/temp/temp2/temp3/temp4", 0, 10000); + int32_t code; + std::vector ls; + codec->decode(result->data(), code, ls); + BOOST_CHECK(code == (int)CODE_SUCCESS); + BOOST_CHECK(ls.size() == mkdirCount); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/libprecompiled/GroupSigPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/GroupSigPrecompiledTest.cpp new file mode 100644 index 0000000..728afaf --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/GroupSigPrecompiledTest.cpp @@ -0,0 +1,255 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "bcos-executor/src/precompiled/extension/GroupSigPrecompiled.h" +#include "../mock/MockLedger.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executive/TransactionExecutive.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +namespace bcos::test +{ +struct GroupSigPrecompiledFixture +{ + GroupSigPrecompiledFixture() + { + m_hashImpl = std::make_shared(); + m_groupSigPrecompiled = std::make_shared(m_hashImpl); + m_ledgerCache = std::make_shared(std::make_shared()); + m_blockContext = std::make_shared(nullptr, m_ledgerCache, m_hashImpl, 0, + h256(), utcTime(), 0, FiscoBcosSchedule, false, false); + std::shared_ptr gasInjector = nullptr; + m_executive = std::make_shared( + std::weak_ptr(m_blockContext), "", 100, 0, gasInjector); + } + + ~GroupSigPrecompiledFixture() {} + + LedgerCache::Ptr m_ledgerCache; + bcos::crypto::Hash::Ptr m_hashImpl; + BlockContext::Ptr m_blockContext; + TransactionExecutive::Ptr m_executive; + GroupSigPrecompiled::Ptr m_groupSigPrecompiled; +}; + +BOOST_FIXTURE_TEST_SUITE(test_GroupSigPrecompiled, GroupSigPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(TestGroupSigVerify) +{ + std::string signature = + "eyJUMSI6ICIxY2ZmMmRiMDUzNGQ3OWJmMjFmMmI1ZWIxZTQ3ZjcxMjgzNTRhYmZjNDNiZDQyZTdiNDUwZTUwZTE1ZT" + "VkOWZmMjNiOWFiNGNiZTQwODhhZGYxZGE3MjFlNTFmMjc5NTFhNjUyYTVmNjQ1MDM2MjBhOThiYjZjYWIxMjg3MWUz" + "Njg1MzdjMjVmZGUyMWRhMTM3ZjM3Zjg1MGZlMWFlMjcwN2RlODZjNGE0MTliOGY4NzFmOWQ5Yzc0NDdhMGMxNDQ3OG" + "E0MThlYWQzMWM3NTYzY2ZlMmM3ZjY0ZGVjODJiY2JjOTUyNTZhOGNmMGY2ZTliN2I4N2RiYmFhNWM0OTU4MWU2MiIs" + "IlQyIjogIjBjZDlhYTAzYjgyYjJkYjcwOGRhYjEzZDcxZDA5YTBmYThkZWRjODA1MGFiMjA0ZGYyNzBmMGU4NTA4YT" + "hlMTg4NTJhYTVmMTUzNjBkYzdiMThjNWNkNjk4MjcyOGVmYzVjMTU3MjBjZTkwZjMzY2JmN2FlYjM2MzRlNWQ1NmQw" + "ZjczMzdjZjllYjM5ZWZiZTIzYWZhMjNjNTU0ODc4MGY2ZDUwMzk1NzhiNjE1YjdmOTBmOTdiNWExZThmN2Y3ZjE3Yz" + "QzNjZiMmRhYWMwODdlZjc4YjY3YmZhOWZjMDBjZGRhMDM0Y2I0OTIzMjEzYmE1NjMyNmUzZWUzOWZhYzM3NWM1Iiwi" + "VDMiOiAiMGEwYjJhNTc5NjNlMWZmMGNiZjZmZjQyMjQ2MDFmMTY4MzA2ZWI1ZmU1MTY1NDMzMmIxYjU5N2UxYjA1ZG" + "QxM2NjZjY2MmJkN2VhMWNjZTNjYmQ1MTM1MzBkNzVhY2ZmMWMwY2JhMzg3ODI2YTk1NDk0MDZlY2FmNjM0M2EwYmY2" + "OTI2MzkyZDUwMGE0NzRhZDQ3NzQwMWNhMjliZmZmODJhYjc5NDJkMjJlNzBkOGJmZTUzMGUxMzQ1MWY4YWRjMThhOT" + "QwOWI5NDIzZTg5NzgzOGZjNjk3MGQyMTYyYTg3OGU2YjkxYTlhZWM5Nzk3MWNlMmQxOTUxYTJiOTgzNzAwZTAiLCJj" + "IjogIjdiMmU3ZDlmYjY5ODBiODhjYjMxY2QxZjQ1N2IxZDVkODI5NTYwNjI3MDU1NDZlMDY5NTc4YTA4YzRjNWJmNz" + "MwMDdiMmU3ZDlmYjY5ODBiODhjYjMxY2QxZjQ1N2IxZDVkODI5NTYwNjI3MDU1NDZlMDY5NTc4YTA4YzRjNWJmIiwi" + "cmFscGhhIjogIjE1ZmUxZmI1NGRhYTBlMTY0YTc0YmE1YWYxOGYzOTdiYjk4NmViYmEzODg0YzI4MzA1Y2I5MmQ3NT" + "M4ODdmYWZmMjFhMWNkNTQ3OGQyMTBjMGU5ZmZkNDU5MDlkMjY1M2E4MjY0ZWM3ODllMjY3ZDk2NzA0MjIzN2I0Y2M4" + "MDBlIiwicmJldGEiOiAiMTE0NDliYzhhYTMxMmIwOTQ2ZmVhNjliOWUxMTljMjBlNDEzYzIwODlmYjVkMmRmZjExND" + "FkMDllMjE4M2UwMmI2YTUzZjY0ODY3ODY3MWQxMWU2ODdjMTk0ZGJkYThmNzM5OWRhMTAyM2I3NzAyNGYzNjlkMzg2" + "YTE1MTZhYjkiLCJyZGVsdGExIjogImY3ZGI5ZWM2ODIwNGJjNDUxMjk3ZjY0NWQ1ZTk5ZDk1NDY1ZWQ3ZjUwYTgwND" + "VmYjcyMDJkN2ZhYTUxMGUyOGFjMDk1NWIwOGZiZTY5ZWU4Yjg3MGY2NjRhNjI3OTMwM2ViZjU3MmM4MzAzOTYwYTkz" + "MjFlZTY3ZTExN2JlNTVkIiwicmRlbHRhMiI6ICJkMzRhNTQ3MGU2ZWI1ZjdjZmRhNjIzYmVmYjVkNjQyYzFlMDY1Nj" + "lhOTAzODI5MDc5ODVkZTQ2NGUzYmUxZWQyMDViMzZmZjllNjY2NGZlMjhiMjBjZjdkMTQxYThmMGIyNTg1YTFiNjUx" + "OGQ3ZmFmODFhZWFlNzAzYmVhMWRiNSIsInJ4IjogIjY2N2NmMDk0NjdmNWY1MTMyZWY1NjUyYmI5ZDRiMDdmN2UxND" + "VkZDdiMDU2OGY2ZjkyMmM4OGZjOGE3Njg0MTA3ZWRlYjVmYTk3ZTA5OTE5ZTc4ZjM3M2NkMDFiY2ZlYmQwZGNhYjZm" + "ZjYzMWQ4OGM5OTBiYmQwMGEzNmFiZTgwIn0="; + std::string message1 = "test groupSigVerify"; + std::string gpkInfo = + "eyJnMSI6ICIxZmNkZWQ1ZGU0Zjc3ZTQ2MWE4N2Q0ZmY4ZmY5YjI1ZDQ5MzkxYjY2Y2MyNGUxN2E2NjYxODRhZDBhYm" + "IzZDcwYTc4MDgwNTNjMjAxODhiZjA0NjBiZTA1YjQ0YzEyYmFhMzVhNjUxM2YwM2ZlZTVjNjU3ZmRlYzA1MDBlNGVj" + "YTY1MTcyYzI2MmNiNzExMGNhZGE5ZDcyZTNmYmFiZTcxYThjOWFjNDZiMTA5MTVjNGIzNGZmZjQyOWVjMGJiNjU0ZD" + "Y3YzVlNjA2NzI3YjIxM2ZhY2JkMDA1N2ZjYjE3ZWYyM2QwOTNkNGY2ZmUxZjk2NmMzYmFjMjk4NjI4ZTJjZGMwMyIs" + "ImcyIjogIjI2MDhlZDNlODU3ZmFlZTllZDRiNjVkZjY5MTQzMzdlOTg5N2Q1Mjc1NGJlODg2ZDc4ZDFiMWFiMGQxMT" + "czZTQyNjBlYWVlOTg5YjY3MjdmZDFhNDdmMGE1Y2M1M2IyNDY3NzBhYTcxOGIyOGI1NmJhODJjZDNhM2M2NzgxMzkw" + "YWQzMjU2NGVhMzU3MDFmZWViOTExZWQzNzA5YjQ1MmI2N2RiMjhiNmUxZmZmZWZiZTE5Y2M2NzBkOTRkN2NhMDZiMm" + "RlNmU5YzVmYWI2ZjMxMjE0Njk2NjRlYWZkNWNkZWNlNmZhMGU3ZTE0MjEyMTY3OTE5MDI1N2JjMWE4MDc5M2VjIiwi" + "aCI6ICIwOGU4M2U0MWM5MDJlNmM5NzQxYTQ3YTg5MzRkOTBjNTgyZDBiZTUyZjBiOTMyZTU0OWJhZDU1MWYzNDdlYz" + "FmYmFlMjkzOGNjOWNiNGI5NzA1NjgzNjI2YmRiYzNlYjBjMDk0NzYxNmI3NTNiOGJiMDRkZjg1ZmI0NmZiZGE5ZDQx" + "MmZkMTc5MjU4ZWVkODllMTRjNTczOGU4ZDIwOTAxOGI2NTQ1N2Q0ZmQ4YzRjZTY1NWJmYzY2MGNiOWI5ZWVmOTgwMT" + "M3MWM0MGY2ZTRlOGYyODUyZWM0MjVlOTlkNDhkNzFmMTA4YWJiMzA0OWE2YjAyODA5NTNmYWNmOWFlNWE2OSIsInBy" + "X2cxX2cyIjogIjM0MjFhN2FlMmUwNjE0MDQ4NGFmMTgzYzQ1MWZiYzAwYWU4ZDhmYzE0ZDBhOTlmMWM1OTI3MmQwOT" + "Y2ZDNiYzdjOTVkZjdjZDI3NTI1YmI0ZTcwNGNjYzM2NGNiNTAwMTdhZjUzOWRhNTgyNzFhZjgyODViZGNhYjc4NTg4" + "NzQ4ODMyYjZhODFlZjEzODEwYWJlMGU0M2ViMmRiN2UyODliODU0MGVjMmEzNmRiZDc3YWQ3OTgyNzc5YTJjZTYyZj" + "M2YWI4MjczMzcxYmQwODJmZTJjNzNiMjYwNjE1MDlkYmVjZDFmMjI0MjA2M2MyZDk1ZDdiZjZmNDRjMzIzODlhNGM1" + "IiwicHJfZzFfZzJfaW52IjogIjM0MjFhN2FlMmUwNjE0MDQ4NGFmMTgzYzQ1MWZiYzAwYWU4ZDhmYzE0ZDBhOTlmMW" + "M1OTI3MmQwOTY2ZDNiYzdjOTVkZjdjZDI3NTI1YmI0ZTcwNGNjYzM2NGNiNTAwMTdhZjUzOWRhNTgyNzFhZjgyODVi" + "ZGNhYjc4NTg4NzQ4ODMxMDk1N2UxMGVjN2VmNTQxZjFiYzE0ZDI0ODFkNzY0N2FiZjEzZDVjOTI0Mjg4NTI4NjdkOD" + "g2NWQzMTlkMGM5NTQ3ZDhjYzhlNDJmN2QwMWQzOGM0ZDlmOWVhZjYyNDEzMmUwZGRiZGY5YzNkMjZhMjg0MDkwYmIw" + "MGRjNzY1Yjc2IiwicHJfaF9nMiI6ICIwZjBjYmJmOTI4ZTI1YTQwODZhMGE3OWMwOTQzOGFiY2Q5NzhiNjkzZmYxNz" + "djMGNmZTYzZWNjM2IzOGQ1OWE0NDc5ZDhjNjc2NGEwZGMyMzdjZjViMTAxMzg0Y2E4NThjNWIzYjk2ZjdhZmYxMWJi" + "MDdlZjM3ZTI0YmExZTMzOGNmMmNkMWY5N2I4YWNjOWJjNTgwMGRlMDc4MmRiZTZhMDQ1MDJiZDMyNjY0NGU0MjJiNj" + "ZmZjFjMTgxODg0MzU1M2UwMzBmZGU1YjIxYzRiMjVlMWZiZjRjODdkOGRmNjI3OGY4NmExZjRjNDFmMTA0YjQ0MzNk" + "NGViYWMzNWI0YTI4YiIsInByX2hfdyI6ICIxOTFlNjFjZDQ1OWZiMWVkMGVjYmRjZTdiMjMwMTc4OTY4Y2IwZmFjZm" + "Y0MzA5Y2NiOGRjYTg2NGEyM2IwOTI4M2Y0NjgxZTQ3MTM3NzFiOTVhMmFkYWRhZWE5Yjc4MTVhNjhjNDk4NmI2MmE2" + "ZGY3YmNkMzI3NzRiYTI0OTJjM2U5MmViOGZhNmVkZDVmNWIxZjY5N2IxZGRmY2Q5OWIxYzg3MDU1MDM4YmJhYjkyYz" + "YwMDMxNGM1MmI5YzRkOGU0OGVjMmIzM2ZjYzk3Y2ViMzg3Mzk2ZWQ0NDA5MzZiYWNlMjFjZDUwYzg0NjllY2U1MDY4" + "NmE1NGFmYjE1M2QxYzIwMCIsInUiOiAiMjYwZDkwNWFmZDQ2ZjRlYzY5YjZhMTYwNDE0OTUzMDM5OTE0NmNkYWVkZW" + "QxNDdkNzY2YjgwZDNiNzBhYzliODlmYTZiM2RmZDM1ZGQxMTEzNTcxYTc2NjIzNjdmYTQxNWQwMjVhNzdlNTVkZTdi" + "YmI2YjhmNzYwN2E4ZDhlNGI0MjA2ZmY0YzM5MjgzNmRkMjZhZWFiZGYzMjg1OTQ5MmM4NjU0ODM5ZGQ3MThjZTBkYj" + "U3OTEyYTBmNTQzNGIwYjQ0MDY1MGZmNDY1ZjVjMGIyZjg0Y2M0ZDA5ZTlkYTMyY2VlZWU4YjgwNTMyYjM2ODkyYmRj" + "MWNhMjE2ZGJkNDYyODgiLCJ2IjogIjM4ZTZhNDZmNzYwZTA3OGM4OTYzODgwYjk1MTMyYjdmODQ1YjliM2M0OTU2Mm" + "FjZjRiZjY4NDIwNDI2YzdjYzVmYjhkMjQxYTc4ZjA4YWJjMWUxOTgzZDg0YTQ5OTY2ZjFhZjJkZmEzNGY3OTAwMjJl" + "NjU2MTM4MzI5ZWFmNmEzOGYyNGZjYjIyNzk0YTY4Y2Q0NDA1Zjk4YzIzZjYxNmEwZWRiYWY5MDYwOTZlNmRjNTEzMT" + "k4MzA5NmE1Y2FkOGY2NGI5OTdlMjM3ODU1NmRlM2UyNmFiYzdkY2UzNzQ1ZTg3NDEwM2I5MDgxNzgyMzA0NzE5OWQ4" + "MWJmMGE1YzY0OTRmIiwidyI6ICIzMWZkMWYzMThiZGFhNGI5ODA1MDk2ZDY2MGNlMDgzZjJkZDhlMjg0MmNmOWQ1Mj" + "IzMzU4M2MyY2NlMGRkNWNmZDFhYWNhZjcxM2RkYTljM2Y4MmI3ODkxODU4ZjcxZGE0YzM5YzQyODFmZjFmZTI1NWRj" + "ODIxNzZlMjdlMmQzMmQ4Mjc5MTEzODFlZTI4OWJhOGJiM2ZiMmM1N2ZjNmQ0OTI2ZjEyMDNjNDI4ZDQ3ZjE5ZjhmMz" + "ViOTlmN2Q1ODQxZWViNWU0Yjg5YjhhMTc3NGQ2Yzc2OThlNzNhZmJlMmE5ZGUwNWUwZWY1MTQxZmZhOTEwZjMwZGI3" + "ZDk1MmQ0NTRhMiJ9"; + std::string paramInfo = + "dHlwZSBhIHEgODA0NDY4NDc1Nzk2NTU1ODI1OTc0NDQxNDk5ODkyMzUwNzY3NjQ4NzYxOTQ5MjM1NTQzNjAyNjYzND" + "EzNjg2NjIzMzA1ODQxODA0NDEyODE4NjA4MTEyNDU3ODkwMDE0MjA1NjYxNDAxOTExNDkxMTg5MTYzMDUxMjI1MjMy" + "OTY4NzE2Nzk0MTk2Nzg2MDE4NjgyNjY3MDA4MDU5IGggNjAgciAxMzQwNzgwNzkyOTk0MjU5NzA5OTU3NDAyNDk5OD" + "IwNTg0NjEyNzQ3OTM2NTgyMDU5MjM5MzM3NzcyMzU2MTQ0MzcyMTc2NDAzMDA3MzU0Njk3NjgwMTg3NDI5ODE2Njkw" + "MzQyNzY5MDAzMTg1ODE4NjQ4NjA1MDg1Mzc1Mzg4MjgxMTk0NjU2OTk0NjQzMzY0NDcxMTExNjgwMSBleHAyIDUxMi" + "BleHAxIDMyIHNpZ24xIC0xIHNpZ24wIDE="; + + GroupSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn( + "groupSigVerify(string,string,string,string)", signature, message1, gpkInfo, paramInfo); + + + auto groupSigPrecompiled = fixture.m_groupSigPrecompiled; + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = groupSigPrecompiled->call(fixture.m_executive, parameters); + bytes out = execResult->execResult(); + + bool result; + int retCode; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(true == result); + BOOST_TEST(0 == retCode); + + // false + std::string message2 = "groupSigVerify"; + in = abi.abiIn( + "groupSigVerify(string,string,string,string)", signature, message2, gpkInfo, paramInfo); + parameters->m_input = bytesConstRef(in.data(), in.size()); + execResult = groupSigPrecompiled->call(fixture.m_executive, parameters); + out = execResult->execResult(); + + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(false == result); + BOOST_TEST(retCode == VERIFY_GROUP_SIG_FAILED); +} + +BOOST_AUTO_TEST_CASE(ErrorFunc) +{ + GroupSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + auto executive = fixture.m_executive; + auto groupSigPrecompiled = fixture.m_groupSigPrecompiled; + + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn("groupSigVerify(string)", std::string("2AE3FFE2")); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = groupSigPrecompiled->call(executive, parameters); + auto out = execResult->execResult(); + bool result; + int retCode; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(false == result); + BOOST_TEST(retCode == CODE_UNKNOW_FUNCTION_CALL); +} + +BOOST_AUTO_TEST_CASE(InvalidInputs) +{ + GroupSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + auto executive = fixture.m_executive; + auto groupSigPrecompiled = fixture.m_groupSigPrecompiled; + + // situation1 + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn("groupSigVerify(string,string,string,string)", std::string("2AE3FFE2"), + std::string("2AE3FFE2"), std::string("2AE3FFE2"), std::string("2AE3FFE2")); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + + auto execResult = groupSigPrecompiled->call(executive, parameters); + bytes out = execResult->execResult(); + int retCode; + bool result; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(retCode == VERIFY_GROUP_SIG_FAILED); + BOOST_TEST(result == false); + + + // situation2 + std::string signature2 = + "eyJUMiI6ICIwY2Q5YWEwM2I4MmIyZGI3MDhkYWIxM2Q3MWQwOWEwZmE4ZGVkYzgwNTBhYjIwNGRmMjcwZjBlODUwOG" + "E4ZTE4ODUyYWE1ZjE1MzYwZGM3YjE4YzVjZDY5ODI3MjhlZmM1YzE1NzIwY2U5MGYzM2NiZjdhZWIzNjM0ZTVkNTZk" + "MGY3MzM3Y2Y5ZWIzOWVmYmUyM2FmYTIzYzU1NDg3ODBmNmQ1MDM5NTc4YjYxNWI3ZjkwZjk3YjVhMWU4ZjdmN2YxN2" + "M0MzY2YjJkYWFjMDg3ZWY3OGI2N2JmYTlmYzAwY2RkYTAzNGNiNDkyMzIxM2JhNTYzMjZlM2VlMzlmYWMzNzVjNSIs" + "IlQzIjogIjBhMGIyYTU3OTYzZTFmZjBjYmY2ZmY0MjI0NjAxZjE2ODMwNmViNWZlNTE2NTQzMzJiMWI1OTdlMWIwNW" + "RkMTNjY2Y2NjJiZDdlYTFjY2UzY2JkNTEzNTMwZDc1YWNmZjFjMGNiYTM4NzgyNmE5NTQ5NDA2ZWNhZjYzNDNhMGJm" + "NjkyNjM5MmQ1MDBhNDc0YWQ0Nzc0MDFjYTI5YmZmZjgyYWI3OTQyZDIyZTcwZDhiZmU1MzBlMTM0NTFmOGFkYzE4YT" + "k0MDliOTQyM2U4OTc4MzhmYzY5NzBkMjE2MmE4NzhlNmI5MWE5YWVjOTc5NzFjZTJkMTk1MWEyYjk4MzcwMGUwIn0" + "="; + std::string message2 = "ringSigVerify"; + std::string gpkInfo2 = + "eyJnMSI6ICIxZmNkZWQ1ZGU0Zjc3ZTQ2MWE4N2Q0ZmY4ZmY5YjI1ZDQ5MzkxYjY2Y2MyNGUxN2E2NjYxODRhZDBhYm" + "IzZDcwYTc4MDgwNTNjMjAxODhiZjA0NjBiZTA1YjQ0YzEyYmFhMzVhNjUxM2YwM2ZlZTVjNjU3ZmRlYzA1MDBlNGVj" + "YTY1MTcyYzI2MmNiNzExMGNhZGE5ZDcyZTNmYmFiZTcxYThjOWFjNDZiMTA5MTVjNGIzNGZmZjQyOWVjMGJiNjU0ZD" + "Y3YzVlNjA2NzI3YjIxM2ZhY2JkMDA1N2ZjYjE3ZWYyM2QwOTNkNGY2ZmUxZjk2NmMzYmFjMjk4NjI4ZTJjZGMwMyIs" + "ImcyIjogIjI2MDhlZDNlODU3ZmFlZTllZDRiNjVkZjY5MTQzMzdlOTg5N2Q1Mjc1NGJlODg2ZDc4ZDFiMWFiMGQxMT" + "czZTQyNjBlYWVlOTg5YjY3MjdmZDFhNDdmMGE1Y2M1M2IyNDY3NzBhYTcxOGIyOGI1NmJhODJjZDNhM2M2NzgxMzkw" + "YWQzMjU2NGVhMzU3MDFmZWViOTExZWQzNzA5YjQ1MmI2N2RiMjhiNmUxZmZmZWZiZTE5Y2M2NzBkOTRkN2NhMDZiMm" + "RlNmU5YzVmYWI2ZjMxMjE0Njk2NjRlYWZkNWNkZWNlNmZhMGU3ZTE0MjEyMTY3OTE5MDI1N2JjMWE4MDc5M2VjIn0" + "="; + std::string paramInfo2 = + "dHlwZSBhODA0NDY4NDc1Nzk2NTU1ODI1OTc0NDQxNDk5ODkyMzUwNzY3NjQ4NzYxOTQ5MjM1NTQzNjAyNjYzNDEzNj" + "g2NjIzMzA1ODQxODA0NDEyODE4NjA4MTEyNDU3ODkwMDE0MjA1NjYxNDAxOTExNDkxMTg5MTYzMDUxMjI1MjMyOTY4" + "NzE2Nzk0MTk2Nzg2MDE4NjgyNjY3MDA4MDU5IGggNjAgciAxMzQwNzgwNzkyOTk0MjU5NzA5OTU3NDAyNDk5ODIwNT" + "g0NjEyNzQ3OTM2NTgyMDU5MjM5MzM3NzcyMzU2MTQ0MzcyMTc2NDAzMDA3MzU0Njk3NjgwMTg3NDI5ODE2NjkwMzQy" + "NzY5MDAzMTg1ODE4NjQ4NjA1MDg1Mzc1Mzg4MjgxMTk0NjU2OTk0NjQzMzY0NDcxMTExNjgwMSBleHAyIDUxMiBleH" + "AxIDMyIHNpZ24xIC0xIHNpZ24wIDE="; + in = abi.abiIn( + "groupSigVerify(string,string,string,string)", signature2, message2, gpkInfo2, paramInfo2); + parameters->m_input = bytesConstRef(in.data(), in.size()); + + execResult = groupSigPrecompiled->call(executive, parameters); + out = execResult->execResult(); + + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(retCode == VERIFY_GROUP_SIG_FAILED); + BOOST_TEST(result == false); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/KVTablePrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/KVTablePrecompiledTest.cpp new file mode 100644 index 0000000..0ad4e03 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/KVTablePrecompiledTest.cpp @@ -0,0 +1,496 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file KVTablePrecompiledTest.cpp + * @author: kyonRay + * @date 2021-12-01 + */ + +#include "precompiled/KVTablePrecompiled.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "libprecompiled/PreCompiledFixture.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class KVTableFactoryPrecompiledFixture : public PrecompiledFixture +{ +public: + KVTableFactoryPrecompiledFixture() { init(false); } + + void init(bool _isWasm) + { + codec = std::make_shared(hashImpl, _isWasm); + setIsWasm(_isWasm); + } + + virtual ~KVTableFactoryPrecompiledFixture() {} + + ExecutionMessage::UniquePtr creatKVTable(protocol::BlockNumber _number, + const std::string& tableName, const std::string& key, const std::string& value, + const std::string& solidityAddress, int _errorCode = 0, bool errorInTableManager = false) + { + nextBlock(_number); + bytes in = + codec->encodeWithSig("createKVTable(string,string,string)", tableName, key, value); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (errorInTableManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + commitBlock(_number); + return result2; + } + + // set new address + result2->setTo(solidityAddress); + // external create + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + // external call bfs + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call bfs success, callback to create + result4->setSeq(1001); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + // create success, callback to precompiled + result5->setSeq(1000); + + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result6->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result6; + }; + + ExecutionMessage::UniquePtr desc(protocol::BlockNumber _number, std::string const& tableName) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("desc(string)", tableName); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr get( + protocol::BlockNumber _number, const std::string& callAddress, const std::string& key) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("get(string)", key); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr set(protocol::BlockNumber _number, const std::string& callAddress, + const std::string& key, const std::string& value, int _errorCode = 1) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("set(string,string)", key, value); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + commitBlock(_number); + return result2; + } + + std::string sender; +}; + +BOOST_FIXTURE_TEST_SUITE(precompiledKVTableTest, KVTableFactoryPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(createTableTest) +{ + int64_t number = 2; + // + { + creatKVTable( + number++, "t_test", "id", "item_name", "1234853b49838bd3e9466c85a4cc3428c960dde2"); + } + + // createTable exist + { + creatKVTable(number++, "t_test", "id", "item_name", + "2234853b49838bd3e9466c85a4cc3428c960dde2", CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable build + { + auto response = creatKVTable(number++, "t_test/t_test2", "id", "item_name", + "3234853b49838bd3e9466c85a4cc3428c960dde2"); + BOOST_CHECK(response->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(0); + } + // createTable too long tableName, key and field + { + auto r1 = creatKVTable(number++, errorStr, "id", "item_name", + "1134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatKVTable(number++, "t_test", errorStr, "item_name", + "2134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatKVTable(number++, "t_test", "id", errorStr, + "3134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = creatKVTable(number++, errorStr2, "id", "item_name,item_id", + "4134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatKVTable(number++, "t_test", errorStr2, "item_name,item_id", + "5134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatKVTable(number++, "t_test", "id", errorStr2, + "6134853b49838bd3e9466c85a4cc3428c960dde1", 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(createTableWasmTest) +{ + init(true); + int64_t number = 2; + // + { + creatKVTable(number++, "t_test", "id", "item_name", "/tables/t_test"); + } + + // createTable exist + { + creatKVTable(number++, "t_test", "id", "item_name", "/tables/t_test", + CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable build + { + auto response = + creatKVTable(number++, "t_test/t_test2", "id", "item_name", "/tables/t_test/t_test2"); + BOOST_CHECK(response->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(0); + } + // createTable too long tableName, key and field + { + auto r1 = creatKVTable(number++, errorStr, "id", "item_name", "/tables/t_test3", 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = + creatKVTable(number++, "t_test", errorStr, "item_name", "/tables/t_test4", 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatKVTable(number++, "t_test", "id", errorStr, "/tables/t_test5", 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = creatKVTable( + number++, errorStr2, "id", "item_name,item_id", "/tables/t_test6", 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatKVTable( + number++, "t_test", errorStr2, "item_name,item_id", "/tables/t_test7", 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatKVTable(number++, "t_test", "id", errorStr2, "/tables/t_test8", 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(descTest) +{ + int64_t number = 2; + std::string address = "1234853b49838bd3e9466c85a4cc3428c960dde2"; + // create + { + creatKVTable(number++, "t_kv_test", "id", "item_name", address); + } + + auto result2 = desc(number++, "t_kv_test"); + TableInfoTuple tableInfo = {"id", {"item_name"}}; + BOOST_CHECK(result2->data().toBytes() == codec->encode(tableInfo)); +} + +BOOST_AUTO_TEST_CASE(descWasmTest) +{ + init(true); + int64_t number = 2; + std::string address = "/tables/t_kv_test"; + // create + { + auto result = creatKVTable(number++, "t_kv_test", "id", "item_name", address); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::None); + } + + auto result2 = desc(number++, "t_kv_test"); + TableInfoTuple tableInfo = {"id", {"item_name"}}; + BOOST_CHECK(result2->data().toBytes() == codec->encode(tableInfo)); +} + +BOOST_AUTO_TEST_CASE(setTest) +{ + int64_t number = 2; + std::string address = "1234853b49838bd3e9466c85a4cc3428c960dde2"; + // create + { + creatKVTable(number++, "t_kv_test", "id", "item_name", address); + } + + // simple set and get + { + auto result1 = set(number++, address, "id1", "test1"); + auto result2 = get(number++, address, "id1"); + BOOST_CHECK(result2->data().toBytes() == codec->encode(true, std::string("test1"))); + } + + // cover write and get + { + auto result3 = set(number++, address, "id1", "test2"); + auto result4 = get(number++, address, "id1"); + BOOST_CHECK(result4->data().toBytes() == codec->encode(true, std::string("test2"))); + } + + // get not exist + { + auto result4 = get(number++, address, "noExist"); + BOOST_CHECK(result4->data().toBytes() == codec->encode(false, std::string(""))); + } + + boost::log::core::get()->set_logging_enabled(false); + // set key overflow + { + std::string errorKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + errorKey += "0"; + } + auto result3 = set(number++, address, errorKey, "test2"); + BOOST_CHECK(result3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // set value overflow + { + std::string errorValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + errorValue += "0"; + } + auto result3 = set(number++, address, "1", errorValue); + BOOST_CHECK(result3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + boost::log::core::get()->set_logging_enabled(true); +} + +BOOST_AUTO_TEST_CASE(setWasmTest) +{ + init(true); + int64_t number = 2; + std::string address = "/tables/t_kv_test"; + // create + { + creatKVTable(number++, "t_kv_test", "id", "item_name", address); + } + + // simple set and get + { + auto result1 = set(number++, address, "id1", "test1"); + auto result2 = get(number++, address, "id1"); + BOOST_CHECK(result2->data().toBytes() == codec->encode(true, std::string("test1"))); + } + + // cover write and get + { + auto result3 = set(number++, address, "id1", "test2"); + auto result4 = get(number++, address, "id1"); + BOOST_CHECK(result4->data().toBytes() == codec->encode(true, std::string("test2"))); + } + + // get not exist + { + auto result4 = get(number++, address, "noExist"); + BOOST_CHECK(result4->data().toBytes() == codec->encode(false, std::string(""))); + } + + boost::log::core::get()->set_logging_enabled(false); + // set key overflow + { + std::string errorKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + errorKey += "0"; + } + auto result3 = set(number++, address, errorKey, "test2"); + BOOST_CHECK(result3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // set value overflow + { + std::string errorValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + errorValue += "0"; + } + auto result3 = set(number++, address, "1", errorValue); + BOOST_CHECK(result3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + boost::log::core::get()->set_logging_enabled(true); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/PreCompiledFixture.h b/bcos-executor/test/unittest/libprecompiled/PreCompiledFixture.h new file mode 100644 index 0000000..97cfe66 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/PreCompiledFixture.h @@ -0,0 +1,720 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PreCompiledFixture.h + * @author: kyonRay + * @date 2021-06-19 + */ + +#pragma once +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-table/src/StateStorageFactory.h" +#include "bcos-tars-protocol/protocol/BlockHeaderImpl.h" +#include "executive/BlockContext.h" +#include "executive/TransactionExecutive.h" +#include "executor/TransactionExecutorFactory.h" +#include "mock/MockKeyPageStorage.h" +#include "mock/MockLedger.h" +#include "mock/MockTransactionalStorage.h" +#include "mock/MockTxPool.h" +#include "precompiled/extension/UserPrecompiled.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::crypto; + +namespace bcos::test +{ +class PrecompiledFixture : public TestPromptFixture +{ +public: + PrecompiledFixture() + { + hashImpl = std::make_shared(); + assert(hashImpl); + smHashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto sm2Sign = std::make_shared(); + assert(signatureImpl); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + assert(cryptoSuite); + smCryptoSuite = std::make_shared(smHashImpl, sm2Sign, nullptr); + txpool = std::make_shared(); + assert(DEFAULT_PERMISSION_ADDRESS); + } + + virtual ~PrecompiledFixture() {} + + /// must set isWasm + void setIsWasm(bool _isWasm, bool _isCheckAuth = false, bool _isKeyPage = true, + protocol::BlockVersion version = BlockVersion::V3_1_VERSION) + { + isWasm = _isWasm; + if (_isKeyPage) + { + storage = std::make_shared(hashImpl); + } + else + { + storage = std::make_shared(hashImpl); + } + blockFactory = createBlockFactory(cryptoSuite); + auto header = blockFactory->blockHeaderFactory()->createBlockHeader(1); + header->setNumber(1); + ledger = std::make_shared(); + ledger->setBlockNumber(header->number() - 1); + + auto executionResultFactory = std::make_shared(); + auto stateStorageFactory = std::make_shared(0); + executor = bcos::executor::TransactionExecutorFactory::build(ledger, txpool, nullptr, + storage, executionResultFactory, stateStorageFactory, hashImpl, _isWasm, _isCheckAuth); + + codec = std::make_shared(hashImpl, _isWasm); + keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + memcpy(keyPair->secretKey()->mutableData(), + fromHexString("ff6f30856ad3bae00b1169808488502786a13e3c174d85682135ffd51310310e") + ->data(), + 32); + memcpy(keyPair->publicKey()->mutableData(), + fromHexString( + "ccd8de502ac45462767e649b462b5f4ca7eadd69c7e1f1b410bdf754359be29b1b88ffd79744" + "03f56e250af52b25682014554f7b3297d6152401e85d426a06ae") + ->data(), + 64); + boost::log::core::get()->set_logging_enabled(false); + createSysTable(version); + boost::log::core::get()->set_logging_enabled(true); + if (_isCheckAuth) + { + boost::log::core::get()->set_logging_enabled(false); + deployAuthSolidity(1); + boost::log::core::get()->set_logging_enabled(true); + } + } + + void createSysTable(protocol::BlockVersion version) + { + // create sys table + { + std::promise> promise1; + storage->asyncCreateTable(std::string{ledger::SYS_CONFIG}, "value", + [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise1.set_value(std::move(_table)); + }); + auto table = promise1.get_future().get(); + auto entry = table->newEntry(); + + entry.setObject(SystemConfigEntry{"3000000", 0}); + + table->setRow(SYSTEM_KEY_TX_GAS_LIMIT, std::move(entry)); + } + + m_blockVersion = version; + if (m_blockVersion >= protocol::BlockVersion::V3_1_VERSION) + { + initBfs(1); + } + else + { + // create / table + { + std::promise> promise2; + storage->asyncCreateTable( + "/", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise2.set_value(std::move(_table)); + }); + auto rootTable = promise2.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + newSubMap.insert(std::make_pair("apps", executor::FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("sys", executor::FS_TYPE_DIR)); + newSubMap.insert(std::make_pair("tables", executor::FS_TYPE_DIR)); + tEntry.importFields({executor::FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + rootTable->setRow(executor::FS_KEY_TYPE, std::move(tEntry)); + rootTable->setRow(executor::FS_KEY_SUB, std::move(newSubEntry)); + rootTable->setRow(executor::FS_ACL_TYPE, std::move(aclTypeEntry)); + rootTable->setRow(executor::FS_ACL_WHITE, std::move(aclWEntry)); + rootTable->setRow(executor::FS_ACL_BLACK, std::move(aclBEntry)); + rootTable->setRow(executor::FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /tables table + { + std::promise> promise3; + storage->asyncCreateTable("/tables", "value", + [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise3.set_value(std::move(_table)); + }); + auto tablesTable = promise3.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({executor::FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + tablesTable->setRow(executor::FS_KEY_TYPE, std::move(tEntry)); + tablesTable->setRow(executor::FS_KEY_SUB, std::move(newSubEntry)); + tablesTable->setRow(executor::FS_ACL_TYPE, std::move(aclTypeEntry)); + tablesTable->setRow(executor::FS_ACL_WHITE, std::move(aclWEntry)); + tablesTable->setRow(executor::FS_ACL_BLACK, std::move(aclBEntry)); + tablesTable->setRow(executor::FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /apps table + { + std::promise> promise4; + storage->asyncCreateTable("/apps", "value", + [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise4.set_value(std::move(_table)); + }); + auto appsTable = promise4.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({executor::FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + appsTable->setRow(executor::FS_KEY_TYPE, std::move(tEntry)); + appsTable->setRow(executor::FS_KEY_SUB, std::move(newSubEntry)); + appsTable->setRow(executor::FS_ACL_TYPE, std::move(aclTypeEntry)); + appsTable->setRow(executor::FS_ACL_WHITE, std::move(aclWEntry)); + appsTable->setRow(executor::FS_ACL_BLACK, std::move(aclBEntry)); + appsTable->setRow(executor::FS_KEY_EXTRA, std::move(extraEntry)); + } + + // create /usr table + { + std::promise> promise4; + storage->asyncCreateTable( + "/sys", "value", [&](Error::UniquePtr&& _error, std::optional
&& _table) { + BOOST_CHECK(!_error); + promise4.set_value(std::move(_table)); + }); + auto appsTable = promise4.get_future().get(); + storage::Entry tEntry, newSubEntry, aclTypeEntry, aclWEntry, aclBEntry, extraEntry; + std::map newSubMap; + tEntry.importFields({executor::FS_TYPE_DIR}); + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + appsTable->setRow(executor::FS_KEY_TYPE, std::move(tEntry)); + appsTable->setRow(executor::FS_KEY_SUB, std::move(newSubEntry)); + appsTable->setRow(executor::FS_ACL_TYPE, std::move(aclTypeEntry)); + appsTable->setRow(executor::FS_ACL_WHITE, std::move(aclWEntry)); + appsTable->setRow(executor::FS_ACL_BLACK, std::move(aclBEntry)); + appsTable->setRow(executor::FS_KEY_EXTRA, std::move(extraEntry)); + } + } + } + + void nextBlock( + int64_t blockNumber, protocol::BlockVersion version = protocol::BlockVersion::V3_2_VERSION) + { + if (blockNumber < 0) [[unlikely]] + { + // for parallel test + return; + } + auto blockHeader = std::make_shared( + [m_blockHeader = bcostars::BlockHeader()]() mutable { return &m_blockHeader; }); + blockHeader->setNumber(blockNumber); + + std::vector parentInfos{ + {blockHeader->number() - 1, h256(blockHeader->number() - 1)}}; + blockHeader->setParentInfo(parentInfos); + + blockHeader->setVersion((uint32_t)version); + ledger->setBlockNumber(blockNumber - 1); + blockHeader->calculateHash(*cryptoSuite->hashImpl()); + std::promise nextPromise; + executor->nextBlockHeader( + 0, blockHeader, [&](bcos::Error::Ptr&& error) { nextPromise.set_value(); }); + nextPromise.get_future().get(); + } + + void commitBlock(protocol::BlockNumber blockNumber) + { + if (blockNumber < 0) [[unlikely]] + { + // for parallel test + return; + } + + TwoPCParams commitParams{}; + commitParams.number = blockNumber; + + std::promise preparePromise; + executor->prepare( + commitParams, [&](bcos::Error::Ptr&& error) { preparePromise.set_value(); }); + preparePromise.get_future().get(); + + std::promise commitPromise; + executor->commit( + commitParams, [&](bcos::Error::Ptr&& error) { commitPromise.set_value(); }); + commitPromise.get_future().get(); + } + + void deployAuthSolidity(protocol::BlockNumber blockNumber) + { + static const char* committeeBin = bcos::initializer::committeeBin; + + // deploy CommitteeManager + + // hex bin code to bytes + bytes code; + boost::algorithm::unhex(committeeBin, std::back_inserter(code)); + + // constructor (address[] initGovernors, = [authAdminAddress] + // uint32[] memory weights, = [0] + // uint8 participatesRate, = 0 + // uint8 winRate) = 0 + std::vector
initGovernors({Address(admin)}); + std::vector weights({bcos::codec::toString32(h256(uint8_t(1)))}); + // bytes code + abi encode constructor params + codec::abi::ContractABICodec abi(hashImpl); + bytes constructor = abi.abiIn("", initGovernors, weights, + codec::toString32(h256(uint8_t(0))), codec::toString32(h256(uint8_t(0)))); + bytes input = code + constructor; + + auto sender = admin; + + auto params = std::make_unique(); + params->setContextID(99); + params->setSeq(1000); + params->setDepth(0); + + params->setOrigin(sender); + params->setFrom(sender); + + // toChecksumAddress(addressString, hashImpl); + params->setTo(precompiled::AUTH_COMMITTEE_ADDRESS); + params->setStaticCall(false); + params->setGasAvailable(gas); + params->setData(input); + params->setType(NativeExecutionMessage::MESSAGE); + params->setCreate(true); + params->setData(input); + + nextBlock(blockNumber); + // -------------------------------- + // Create contract + // -------------------------------- + + // deploy CommitteeManager + std::promise executePromise; + executor->dmcExecuteTransaction( + std::move(params), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise.set_value(std::move(result)); + }); + + auto result = executePromise.get_future().get(); + BOOST_CHECK_EQUAL((int32_t)result->type(), (int32_t)ExecutionMessage::MESSAGE); + + result->setSeq(1001); + /// call precompiled to get deploy auth + std::promise executePromise2; + executor->dmcExecuteTransaction( + std::move(result), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + + auto result2 = executePromise2.get_future().get(); + BOOST_CHECK_EQUAL((int32_t)result2->type(), (int32_t)ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result2->evmStatus(), 0); + + result2->setSeq(1000); + /// callback get deploy committeeManager context + /// return checkAuth result to committeeManager + std::promise executePromise3; + executor->dmcExecuteTransaction( + std::move(result2), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + + // result3 is the deploy Committee contract request + auto result3 = executePromise3.get_future().get(); + + BOOST_CHECK_EQUAL(result3->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(result3->contextID(), 99); + BOOST_CHECK_EQUAL(result3->seq(), 1000); + BOOST_CHECK_EQUAL(result3->create(), true); + BOOST_CHECK_EQUAL(result3->origin(), sender); + BOOST_CHECK_EQUAL(result3->from(), precompiled::AUTH_COMMITTEE_ADDRESS); + + result3->setSeq(1002); + result3->setTo("1111111111111111111111111111111111111111"); + result3->setKeyLocks({}); + /// new committee + std::promise executePromise4; + executor->dmcExecuteTransaction( + std::move(result3), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + + auto result4 = executePromise4.get_future().get(); + + result4->setSeq(1003); + BOOST_CHECK_EQUAL(result4->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(result4->evmStatus(), 0); + + /// call precompiled to get deploy auth + std::promise executePromise5; + executor->dmcExecuteTransaction( + std::move(result4), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + + auto result5 = executePromise5.get_future().get(); + + result5->setSeq(1002); + /// callback get deploy committee context, checkAuth of deploy proposalManager + /// complete deploy Committee + std::promise executePromise6; + executor->dmcExecuteTransaction( + std::move(result5), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + + auto result6 = executePromise6.get_future().get(); + BOOST_CHECK_EQUAL(result6->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result6->contextID(), 99); + BOOST_CHECK_EQUAL(result6->seq(), 1002); + BOOST_CHECK_EQUAL(result6->create(), false); + BOOST_CHECK_EQUAL( + result6->newEVMContractAddress(), "1111111111111111111111111111111111111111"); + BOOST_CHECK_EQUAL(result6->origin(), sender); + BOOST_CHECK_EQUAL(result6->to(), precompiled::AUTH_COMMITTEE_ADDRESS); + + result6->setSeq(1000); + // new committee address => committeeManager + // new proposalManager + std::promise executePromise7; + executor->dmcExecuteTransaction( + std::move(result6), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise7.set_value(std::move(result)); + }); + /// result7 is the request to deploy proposalManager + auto result7 = executePromise7.get_future().get(); + + BOOST_CHECK_EQUAL(result7->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(result7->contextID(), 99); + BOOST_CHECK_EQUAL(result7->seq(), 1000); + BOOST_CHECK_EQUAL(result7->create(), true); + BOOST_CHECK_EQUAL(result7->origin(), sender); + BOOST_CHECK_EQUAL(result7->from(), precompiled::AUTH_COMMITTEE_ADDRESS); + + result7->setSeq(1004); + result7->setTo("2222222222222222222222222222222222222222"); + result7->setKeyLocks({}); + + // new proposalManager + std::promise executePromise8; + executor->dmcExecuteTransaction( + std::move(result7), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise8.set_value(std::move(result)); + }); + + auto result8 = executePromise8.get_future().get(); + + result8->setSeq(1005); + /// call precompiled to get deploy auth + std::promise executePromise9; + executor->dmcExecuteTransaction( + std::move(result8), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise9.set_value(std::move(result)); + }); + + auto result9 = executePromise9.get_future().get(); + + result9->setSeq(1004); + /// callback get deploy committee context + std::promise executePromise10; + executor->dmcExecuteTransaction( + std::move(result9), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise10.set_value(std::move(result)); + }); + + auto result10 = executePromise10.get_future().get(); + + result10->setSeq(1006); + result10->setTo("3333333333333333333333333333333333333333"); + result10->setKeyLocks({}); + + /// new voteComputer + std::promise executePromise11; + executor->dmcExecuteTransaction( + std::move(result10), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise11.set_value(std::move(result)); + }); + + auto result11 = executePromise11.get_future().get(); + + result11->setSeq(1007); + + /// call precompiled to get deploy auth + std::promise executePromise12; + executor->dmcExecuteTransaction( + std::move(result11), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise12.set_value(std::move(result)); + }); + + auto result12 = executePromise12.get_future().get(); + + result12->setSeq(1006); + + /// callback get deploy proposalMgr context + std::promise executePromise13; + executor->dmcExecuteTransaction( + std::move(result12), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise13.set_value(std::move(result)); + }); + + auto result13 = executePromise13.get_future().get(); + + BOOST_CHECK_EQUAL(result13->type(), ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(result13->evmStatus(), 0); + BOOST_CHECK_EQUAL(result13->contextID(), 99); + BOOST_CHECK_EQUAL(result13->seq(), 1006); + BOOST_CHECK_EQUAL(result13->create(), false); + BOOST_CHECK_EQUAL(result13->origin(), sender); + BOOST_CHECK_EQUAL(result13->to(), "1111111111111111111111111111111111111111"); + + /// call to committee, getWeights + result13->setSeq(1008); + // to committee + std::promise executePromise14; + executor->dmcExecuteTransaction( + std::move(result13), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise14.set_value(std::move(result)); + }); + auto result14 = executePromise14.get_future().get(); + + result14->setSeq(1006); + BOOST_CHECK_EQUAL((int32_t)result14->type(), (int32_t)ExecutionMessage::FINISHED); + + // committee callback to voteComputer + std::promise executePromise15; + executor->dmcExecuteTransaction( + std::move(result14), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise15.set_value(std::move(result)); + }); + auto result15 = executePromise15.get_future().get(); + BOOST_CHECK_EQUAL((int32_t)result15->type(), (int32_t)ExecutionMessage::FINISHED); + + result15->setSeq(1004); + + // new voteCompute => new ProposalMgr context + std::promise executePromise16; + executor->dmcExecuteTransaction( + std::move(result15), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise16.set_value(std::move(result)); + }); + + auto result16 = executePromise16.get_future().get(); + + BOOST_CHECK_EQUAL((int32_t)result16->type(), (int32_t)ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result16->contextID(), 99); + BOOST_CHECK_EQUAL(result16->seq(), 1004); + BOOST_CHECK_EQUAL(result16->create(), false); + BOOST_CHECK_EQUAL(result16->origin(), sender); + BOOST_CHECK_EQUAL( + result16->newEVMContractAddress(), "2222222222222222222222222222222222222222"); + BOOST_CHECK_EQUAL(result16->to(), AUTH_COMMITTEE_ADDRESS); + + result16->setSeq(1000); + // new proposalManager address => committeeManager + std::promise executePromise17; + executor->dmcExecuteTransaction( + std::move(result16), [&](bcos::Error::UniquePtr&& error, + bcos::protocol::ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise17.set_value(std::move(result)); + }); + + auto result17 = executePromise17.get_future().get(); + BOOST_CHECK_EQUAL(result17->type(), ExecutionMessage::FINISHED); + BOOST_CHECK_EQUAL(result17->contextID(), 99); + BOOST_CHECK_EQUAL(result17->seq(), 1000); + BOOST_CHECK_EQUAL(result17->create(), false); + BOOST_CHECK_EQUAL(result17->origin(), sender); + BOOST_CHECK_EQUAL(result17->from(), precompiled::AUTH_COMMITTEE_ADDRESS); + + commitBlock(blockNumber); + } + + ExecutionMessage::UniquePtr list( + protocol::BlockNumber _number, std::string const& path, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("list(string)", path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? BFS_NAME : BFS_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + std::vector empty; + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(_errorCode), empty)); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr initBfs(protocol::BlockNumber _number, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("initBfs()"); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + auto sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? BFS_NAME : BFS_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, m_blockVersion); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + +protected: + crypto::Hash::Ptr hashImpl; + crypto::Hash::Ptr smHashImpl; + protocol::BlockFactory::Ptr blockFactory; + CryptoSuite::Ptr cryptoSuite = nullptr; + CryptoSuite::Ptr smCryptoSuite = nullptr; + + TransactionalStorageInterface::Ptr storage; + TransactionExecutor::Ptr executor; + std::shared_ptr txpool; + std::shared_ptr ledger; + KeyPairInterface::Ptr keyPair; + + CodecWrapper::Ptr codec; + int64_t gas = MockLedger::TX_GAS_LIMIT; + bool isWasm = false; + std::string admin = "1111654b49838bd3e9466c85a4cc3428c9601111"; + protocol::BlockVersion m_blockVersion = protocol::BlockVersion::V3_1_VERSION; +}; +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/libprecompiled/PrecompiledCallTest.cpp b/bcos-executor/test/unittest/libprecompiled/PrecompiledCallTest.cpp new file mode 100644 index 0000000..363140f --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/PrecompiledCallTest.cpp @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledCallTest.cpp + * @author: kyonGuo + * @date 2022/7/26 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/ConsensusPrecompiled.h" +#include "precompiled/SystemConfigPrecompiled.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; + +namespace bcos::test +{ +class PrecompiledCallTestFixture : public PrecompiledFixture +{ +public: + PrecompiledCallTestFixture() + { + codec = std::make_shared(hashImpl, false); + setIsWasm(false); + contractAddress = Address("0x420f853b49838bd3e9466c85a4cc3428c960dde2").hex(); + } + + virtual ~PrecompiledCallTestFixture() = default; + + ExecutionMessage::UniquePtr openTable( + protocol::BlockNumber _number, const std::string& tableName, int _errorCode = 0) + { + nextBlock(_number); + bytes in = codec->encodeWithSig("openTable(string)", tableName); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result2; + }; + + std::string sender; + std::string contractAddress; +}; + +BOOST_FIXTURE_TEST_SUITE(precompiledCallTest, PrecompiledCallTestFixture) + +BOOST_AUTO_TEST_CASE(precompiled_gas_test) +{ + // call precompiled gas overflow + gas = 1; + BlockNumber number = 1; + auto result = openTable(number++, "error_test"); + BOOST_CHECK(result->status() == (int32_t)TransactionStatus::OutOfGas); +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/libprecompiled/PrecompiledGas.cpp b/bcos-executor/test/unittest/libprecompiled/PrecompiledGas.cpp new file mode 100644 index 0000000..78367cd --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/PrecompiledGas.cpp @@ -0,0 +1,109 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledGas.cpp + * @author: kyonRay + * @date 2021-06-03 + */ + +#include "bcos-executor/src/precompiled/common/PrecompiledGas.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(precompiledGasTest, TestPromptFixture) +void checkGasCost(GasMetrics::Ptr _metric, InterfaceOpcode const& _key, int64_t _value) +{ + BOOST_CHECK(_metric->OpCode2GasCost[_key] == _value); +} + +void checkBasicGasCost(GasMetrics::Ptr _metric) +{ + checkGasCost(_metric, InterfaceOpcode::EQ, 3); + checkGasCost(_metric, InterfaceOpcode::GE, 3); + checkGasCost(_metric, InterfaceOpcode::GT, 3); + checkGasCost(_metric, InterfaceOpcode::LE, 3); + checkGasCost(_metric, InterfaceOpcode::LT, 3); + checkGasCost(_metric, InterfaceOpcode::NE, 3); + checkGasCost(_metric, InterfaceOpcode::Limit, 3); + checkGasCost(_metric, InterfaceOpcode::GetInt, 3); + checkGasCost(_metric, InterfaceOpcode::GetAddr, 3); + checkGasCost(_metric, InterfaceOpcode::Set, 3); + checkGasCost(_metric, InterfaceOpcode::GetByte32, 96); + checkGasCost(_metric, InterfaceOpcode::GetByte64, 192); + checkGasCost(_metric, InterfaceOpcode::GetString, 3); + checkGasCost(_metric, InterfaceOpcode::PaillierAdd, 20000); + checkGasCost(_metric, InterfaceOpcode::GroupSigVerify, 20000); + checkGasCost(_metric, InterfaceOpcode::RingSigVerify, 20000); +} + +BOOST_AUTO_TEST_CASE(testPrecompiledGasFactory) +{ + auto precompiledGasFactory = std::make_shared(); + BOOST_CHECK(precompiledGasFactory->gasMetric() != nullptr); + auto metric = precompiledGasFactory->gasMetric(); + // check gas cost + checkBasicGasCost(metric); + checkGasCost(metric, InterfaceOpcode::CreateTable, 16000); + checkGasCost(metric, InterfaceOpcode::OpenTable, 200); + checkGasCost(metric, InterfaceOpcode::Select, 200); + checkGasCost(metric, InterfaceOpcode::Insert, 10000); + checkGasCost(metric, InterfaceOpcode::Update, 10000); + checkGasCost(metric, InterfaceOpcode::Remove, 2500); +} + +BOOST_AUTO_TEST_CASE(testPrecompiledGas) +{ + // disable freeStorage + auto precompiledGasFactory = std::make_shared(); + auto gasPricer = precompiledGasFactory->createPrecompiledGas(); + gasPricer->appendOperation(InterfaceOpcode::CreateTable); + BOOST_CHECK(gasPricer->calTotalGas() == 16000); + gasPricer->appendOperation(InterfaceOpcode::OpenTable); + BOOST_CHECK(gasPricer->calTotalGas() == 16200); + gasPricer->appendOperation(InterfaceOpcode::Insert); + BOOST_CHECK(gasPricer->calTotalGas() == 26200); + gasPricer->appendOperation(InterfaceOpcode::Select); + BOOST_CHECK(gasPricer->calTotalGas() == 26400); + gasPricer->appendOperation(InterfaceOpcode::Update); + BOOST_CHECK(gasPricer->calTotalGas() == 36400); + gasPricer->setMemUsed(256); + BOOST_CHECK(gasPricer->calTotalGas() == 36424); + gasPricer->updateMemUsed(15000); + BOOST_CHECK(gasPricer->calTotalGas() == 38236); + gasPricer->appendOperation(InterfaceOpcode::LE); + BOOST_CHECK(gasPricer->calTotalGas() == 38239); + + // with bad instructions + auto metric = precompiledGasFactory->gasMetric(); + metric->OpCode2GasCost.clear(); + gasPricer->appendOperation(InterfaceOpcode::LT); + gasPricer->appendOperation(InterfaceOpcode::GetString); + // only calculate the memory gas for bad instructions + BOOST_CHECK(gasPricer->calTotalGas() == 1836); + metric->init(); + gasPricer->appendOperation(InterfaceOpcode::CreateTable); + gasPricer->appendOperation(InterfaceOpcode::OpenTable); + BOOST_CHECK(gasPricer->calTotalGas() == 54445); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/RingSigPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/RingSigPrecompiledTest.cpp new file mode 100644 index 0000000..65da0a6 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/RingSigPrecompiledTest.cpp @@ -0,0 +1,208 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "bcos-executor/src/precompiled/extension/RingSigPrecompiled.h" +#include "../mock/MockLedger.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executive/TransactionExecutive.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +namespace bcos::test +{ +struct RingSigPrecompiledFixture +{ + RingSigPrecompiledFixture() + { + m_hashImpl = std::make_shared(); + m_ringSigPrecompiled = std::make_shared(m_hashImpl); + m_ledgerCache = std::make_shared(std::make_shared()); + m_blockContext = std::make_shared(nullptr, m_ledgerCache, m_hashImpl, 0, + h256(), utcTime(), 0, FiscoBcosSchedule, false, false); + std::shared_ptr gasInjector = nullptr; + m_executive = std::make_shared( + std::weak_ptr(m_blockContext), "", 100, 0, gasInjector); + } + + ~RingSigPrecompiledFixture() {} + + LedgerCache::Ptr m_ledgerCache; + bcos::crypto::Hash::Ptr m_hashImpl; + BlockContext::Ptr m_blockContext; + TransactionExecutive::Ptr m_executive; + RingSigPrecompiled::Ptr m_ringSigPrecompiled; +}; + +BOOST_FIXTURE_TEST_SUITE(test_RingSigPrecompiled, RingSigPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(TestRingSigVerify) +{ + // true + std::string signature = + "eyJDIjogIjU4MDk3MjI0NzExMDQwOTI0NzQzMDI1OTQ4MTM3MTUzNzA0MzM5MjIwODE2NTY5MjYzNDM1NTEyOTUwNj" + "Y5NTIxMDA0MTAxNTQ2MzIzLiIsIlkiOiAiMTcxOTc4NjM0MzM1MzM5NjU4OTUxNzI5Mzg0MDM3ODU5MDk3NTc5MDA4" + "NzU3MTAxMjI3MTY3NzE2MDEzMzM3MjEzNzcwMjUxMzA2MTY2NjE5NDEzMzEyMzMyMDIxMDA4ODI5NjQ2MjA5OTY1Nj" + "gwNzU1NzgxNjgyNjc2OTg1NTA3MDYyNDM0NTAzNjM3OTIzMDQzNTMxNzk2MzExMjIxOTY5NDU4NTM1NTY0OTg4MDI4" + "MTYxMDAzNjc5NzI2NTQ1Mjg3ODY1NzE3MjEyNTQyOTU4MDc0NjIxMDE5MTc1OTI3NzcxNjc0NDA5ODA1MTc2NTcyMT" + "gzOTQ4MzM2NjMyNjA1NDI2ODEzMzExMTc4MDIzNjY0MTg1MzkxMTgyMTg2NjI1ODYxODYyNjkxNzk2OTA2MTY1LiIs" + "Im51bSI6ICIyIiwicGswIjogIjYxNjQ5MTE2MzI3Mjk5MjUyMTMyNDc4NjY2Njc1MDE1MzY0NDE1OTM2NzE0ODk1Nj" + "czMjE1MzU2NTA5MTg1MjY5OTcxODc1NTMyOTMzNjg3MTk4ODIxNjcxMTk1MDExOTMzMTg3ODQ2MTA3ODE4MjQ5Mzc3" + "NDAwMTc3MzIwNjQzMDYwMjAwMzUwMjM5MDM4NDA4MjczNTA1NTMyMzE0NTc3NjkyNjczNzQyNjM2NDI3MTc2MjYyMz" + "E1OTg4NDEyMDkwNjMyNDI5ODE0MDgxNjk4MTAwODcyMTI1NjQ5MjY5OTU1NDQ0NTYyMjM3NDY1NzI0NjAxNzU3MTQ2" + "ODA1MTg4MDk5MTUxNTQwMTE1NDQ4MjM2ODcyMTQ5MTk1MjQwNzUzNzU5MzI5NDA1NDAxMDIwNjg4LiIsInBrMSI6IC" + "IxMzk2OTMyMzA0NjMyOTMyMDE2MTYyNzk5ODc0ODMwNzExMzU5OTY5NzYxNTUyNDUwOTk3MTEwMDM0NDEwMzE1NTY2" + "MDE2NTA2MDQwOTU0NjA4OTAxMTE1OTc2NDUyMDI2MDMyOTcxNTQzNDUyNzgyMjUzNDc3NjU4NzQ4NjI2MjUzMjY0MD" + "I0MzM4OTE1MjM4NTg0Njc5NDI1Mjk2NTUxOTgyOTY1OTY3NjYyNzUxMjA2NDQ0NzU1ODg4NjU3MzA4MjgzNjA1MzE4" + "MjU1NzY2NTIxMTE3MTc5NTczNjU0Nzc4Njc3NDY1OTAxMTA5NTg0Mzg2ODgzNzA0NjU4OTQ5MzM0Nzg3MTE0NjAwNz" + "UyMTg0NTk0NDgzNjk1NTk1MDYzMDY4NzQ4ODk4OTU1MTAxOTkyNDYuIiwiczAiOiAiMjAxMDcyNTE3OTI3MzQwMDE1" + "NzY2NzM0NTE3NzQ1MjgzMjc4NDAyODM1MjQ0OTAzNzAzNDA0MTkwODE4NDI2NDUwMDkzODQ2Nzc0MDQ5NTMwMjY1ND" + "M0MDMxNjY5MzA5NDc5MzU4MzIxNDE0OTAzNzEyNzk0MTI5NzQ1MTYxNDA3Mjc0OTI5NTYyNjk0ODk3MDYwNTAyNjcx" + "Njk0NDIyNzY4OTkyMjI2MTAwMDg1NDcyNTg0ODE3Nzg2ODIzODk4Mzc2MjIxMzA5MjU4NzcxODUwODUzMjU2Nzc2Nj" + "U2MzI4Nzg0NzE3MTUxNzg0NDI4NTQ1Njg5MDA4MzIwMzA1ODYzMTAyMTQyNDY1MjkzODgwNTczNjAxNDYwMDM1MzIw" + "MDgzMzIyMTcyNDUyMzEwNDIxOTcuIiwiczEiOiAiNjkyNTY3NzY0NTc4MjY4Mjk0MTYwMTEzMjY5MjM1NTQwMzM5ND" + "ExMjgzMjY0MjM4NDIwMTc4Njk3ODM4OTE1MDg4NTcyNzQ1MjAxMjA5NTcyNDQzNDIyNDY0MzA4MTA2MTUwMTg4MTk5" + "MjM4MjE1MDg5MzgxODY1NDYzNTUyNDkxOTY0OTg2MzA0NDU4MTQ4ODMzOTEzNzk3MDc0OTQyNTMxMjEzNDU3MDE0Mj" + "YzNDc4ODY1Mjc3MzMwNjYwMjM5OTE2NzQxMDY5MzE0ODg3MzA4NjUxODkyMjA5MTY2OTkyNDk0NjY2OTc0NDI1OTAz" + "ODc5NDgzMTA0NzUyNjQ3MTg0NDYzODQyNzUzMDUwNDAyODg2NjMyNzIwNzE4MDEwMTkxNzU3ODI0MTI0ODI3MTM4Nj" + "UuIn0="; + std::string message1 = "test ringSigVerify"; + std::string paramInfo = + "eyJnIjogIjMuIiwicCI6ICIxNzc4NzYxMzUxNzk5MTA2NjkyODQwMjg1MDQ1NDQ5NzMxNDM2MTI0NDI1NTE0MTk4Nj" + "U0ODQ4MzA5MzE2NjYxOTQzMjkwNDg5ODIyMzgzNTgxMzQzMDk3NTc3MTQyMjU4NDg2NzI3NTkyNzU2NzQxMzc4MjI0" + "NjQ0Nzk5NjEwNjAxMDY3MzQ4NzgwNjA0MjQ5NTMyOTQwODQxNTEyOTE3Nzg0NTQxODIwOTI4OTk2NjE0MDIwNzgxNj" + "kzODU4NTcwMjM2NzYwMTI3OTc5ODQxNTU3MzAxMzM0NzQ4MTY1OTg4NDExMDAyMzczNjMxNjg2NjY3MDUzMjk5Mjk3" + "NjA4MjU2OTI3Mzk2NzQ1MTkzMzU2Nzg3NzA5NjQ1MzQ0MzA5MDUxNjkyNzk0MTIxOTA2MDY4MTkuIiwicSI6ICI4OD" + "kzODA2NzU4OTk1NTMzNDY0MjAxNDI1MjI3MjQ4NjU3MTgwNjIyMTI3NTcwOTkzMjc0MjQxNTQ2NTgzMzA5NzE2NDUy" + "NDQ5MTExOTE3OTA2NzE1NDg3ODg1NzExMjkyNDMzNjM3OTYzNzgzNzA2ODkxMTIzMjIzOTk4MDUzMDA1MzM2NzQzOT" + "AzMDIxMjQ3NjY0NzA0MjA3NTY0NTg4OTIyNzA5MTA0NjQ0OTgzMDcwMTAzOTA4NDY5MjkyODUxMTgzODAwNjM5ODk5" + "MjA3Nzg2NTA2NjczNzQwODI5OTQyMDU1MDExODY4MTU4NDMzMzM1MjY2NDk2NDg4MDQxMjg0NjM2OTgzNzI1OTY2Nz" + "gzOTM4NTQ4MjI2NzIxNTQ1MjU4NDYzOTcwNjA5NTMwMzQwOS4ifQ=="; + + RingSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn("ringSigVerify(string,string,string)", signature, message1, paramInfo); + + + auto ringSigPrecompiled = fixture.m_ringSigPrecompiled; + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = ringSigPrecompiled->call(fixture.m_executive, parameters); + bytes out = execResult->execResult(); + + bool result; + int retCode; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(true == result); + BOOST_TEST(0 == retCode); + + // false + std::string message2 = "ringSigVerify"; + in = abi.abiIn("ringSigVerify(string,string,string)", signature, message2, paramInfo); + parameters->m_input = bytesConstRef(in.data(), in.size()); + execResult = ringSigPrecompiled->call(fixture.m_executive, parameters); + out = execResult->execResult(); + + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(false == result); + BOOST_TEST(retCode == VERIFY_RING_SIG_FAILED); +} + +BOOST_AUTO_TEST_CASE(ErrorFunc) +{ + RingSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + auto executive = fixture.m_executive; + auto ringSigPrecompiled = fixture.m_ringSigPrecompiled; + + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn("ringSigVerify(string)", std::string("2AE3FFE2")); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = ringSigPrecompiled->call(executive, parameters); + auto out = execResult->execResult(); + bool result; + int retCode; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(false == result); + BOOST_TEST(retCode == CODE_UNKNOW_FUNCTION_CALL); +} + +BOOST_AUTO_TEST_CASE(InvalidInputs) +{ + RingSigPrecompiledFixture fixture; + auto hashImpl = fixture.m_hashImpl; + auto executive = fixture.m_executive; + auto ringSigPrecompiled = fixture.m_ringSigPrecompiled; + + // situation1 + bcos::codec::abi::ContractABICodec abi(hashImpl); + bytes in = abi.abiIn("ringSigVerify(string,string,string)", std::string("2AE3FFE2"), + std::string("2AE3FFE2"), std::string("2AE3FFE2")); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + + auto execResult = ringSigPrecompiled->call(executive, parameters); + bytes out = execResult->execResult(); + int retCode; + bool result; + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(retCode == VERIFY_RING_SIG_FAILED); + BOOST_TEST(result == false); + + + // situation2 + std::string signature2 = + "eyJDIjogIjU4MDk3MjI0NzExMDQwOTI0NzQzMDI1OTQ4MTM3MTUzNzA0MzM5MjIwODE2NTY5MjYzNDM1NTEyOTUwNj" + "Y5NTIxMDA0MTAxNTQ2MzIzLiIsIlkiOiAiMTcxOTc4NjM0MzM1MzM5NjU4OTUxNzI5Mzg0MDM3ODU5MDk3NTc5MDA4" + "NzU3MTAxMjI3MTY3NzE2MDEzMzM3MjEzNzcwMjUxMzA2MTY2NjE5NDEzMzEyMzMyMDIxMDA4ODI5NjQ2MjA5OTY1Nj" + "gwNzU1NzgxNjgyNjc2OTg1NTA3MDYyNDM0NTAzNjM3OTIzMDQzNTMxNzk2MzExMjIxOTY5NDU4NTM1NTY0OTg4MDI4" + "MTYxMDAzNjc5NzI2NTQ1Mjg3ODY1NzE3MjEyNTQyOTU4MDc0NjIxMDE5MTc1OTI3NzcxNjc0NDA5ODA1MTc2NTcyMT" + "gzOTQ4MzM2NjMyNjA1NDI2ODEzMzExMTc4MDIzNjY0MTg1MzkxMTgyMTg2NjI1ODYxODYyNjkxNzk2OTA2MTY1LiIs" + "Im51bSI6ICIyIiwicGswIjogIjYxNjQ5MTE2MzI3Mjk5MjUyMTMyNDc4NjY2Njc1MDE1MzY0NDE1OTM2NzE0ODk1Nj" + "czMjE1MzU2NTA5MTg1MjY5OTcxODc1NTMyOTMzNjg3MTk4ODIxNjcxMTk1MDExOTMzMTg3ODQ2MTA3ODE4MjQ5Mzc3" + "NDAwMTc3MzIwNjQzMDYwMjAwMzUwMjM5MDM4NDA4MjczNTA1NTMyMzE0NTc3NjkyNjczNzQyNjM2NDI3MTc2MjYyMz" + "E1OTg4NDEyMDkwNjMyNDI5ODE0MDgxNjk4MTAwODcyMTI1NjQ5MjY5OTU1NDQ0NTYyMjM3NDY1NzI0NjAxNzU3MTQ2" + "ODA1MTg4MDk5MTUxNTQwMTE1NDQ4MjM2ODcyMTQ5MTk1MjQwNzUzNzU5MzI5NDA1NDAxMDIwNjg4LiJ9"; + std::string message2 = "ringSigVerify"; + std::string paramInfo2 = + "dHlwZSBhIHEgODA0NDY4NDc1Nzk2NTU1ODI1OTc0NDQxNDk5ODkyMzUwNzY3NjQ4NzYxOTQ5MjM1NTQzNjAyNjYzND" + "EzNjg2NjIzMzA1ODQxODA0NDEyODE4NjA4MTEyNDU3ODkwMDE0MjA1NjYxNDAxOTExNDkxMTg5MTYzMDUxMjI1MjMy" + "OTY4NzE2Nzk0MTk2Nzg2MDE4NjgyNjY3MDA4MDU5IGggNjAgciAxMzQwNzgwNzkyOTk0MjU5NzA5OTU3NDAyNDk5OD" + "IwNTg0NjEyNzQ3OTM2NTgyMDU5MjM5MzM3NzcyMzU2MTQ0MzcyMTc2NDAzMDA3MzU0Njk3NjgwMTg3NDI5ODE2Njkw" + "MzQyNzY5MDAzMTg1ODE4NjQ4NjA1MDg1Mzc1Mzg4MjgxMTk0NjU2OTk0NjQzMzY0NDcxMTExNjgwMSBleHAyIDUxMi" + "BleHAxIDMyIHNpZ24xIC0xIHNpZ24wIDE="; + in = abi.abiIn("ringSigVerify(string,string,string)", signature2, message2, paramInfo2); + parameters->m_input = bytesConstRef(in.data(), in.size()); + + execResult = ringSigPrecompiled->call(executive, parameters); + out = execResult->execResult(); + + abi.abiOut(bytesConstRef(&out), retCode, result); + BOOST_TEST(retCode == VERIFY_RING_SIG_FAILED); + BOOST_TEST(result == false); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/TablePrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/TablePrecompiledTest.cpp new file mode 100644 index 0000000..89325e7 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/TablePrecompiledTest.cpp @@ -0,0 +1,1474 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TablePrecompiledTest.cpp + * @author: kyonRay + * @date 2022-04-13 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/TableManagerPrecompiled.h" +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class TableFactoryPrecompiledFixture : public PrecompiledFixture +{ +public: + TableFactoryPrecompiledFixture() { init(false); } + + void init(bool isWasm) + { + setIsWasm(isWasm, false, true); + tableTestAddress = isWasm ? "/tables/t_test" : "420f853b49838bd3e9466c85a4cc3428c960dde2"; + } + + virtual ~TableFactoryPrecompiledFixture() = default; + + ExecutionMessage::UniquePtr creatTable(protocol::BlockNumber _number, + const std::string& tableName, const std::string& key, const std::vector& value, + const std::string& callAddress, int _errorCode = 0, bool errorInTableManager = false) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + TableInfoTuple tableInfoTuple = std::make_tuple(key, value); + bytes in = codec->encodeWithSig( + "createTable(string,(string,string[]))", tableName, tableInfoTuple); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (errorInTableManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + commitBlock(_number); + return result2; + } + + // set new address + result2->setTo(callAddress); + // external create + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + // external call bfs + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call bfs success, callback to create + result4->setSeq(1001); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + // create success, callback to precompiled + result5->setSeq(1000); + + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result6->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result6; + }; + + ExecutionMessage::UniquePtr appendColumns(protocol::BlockNumber _number, + const std::string& tableName, const std::vector& values, int _errorCode = 0) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("appendColumns(string,string[])", tableName, values); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr openTable( + protocol::BlockNumber _number, std::string const& _path, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("openTable(string)", _path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, BlockVersion::V3_1_VERSION); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr desc(protocol::BlockNumber _number, std::string const& tableName) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("desc(string)", tableName); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr insert(protocol::BlockNumber _number, const std::string& key, + const std::vector& values, const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + EntryTuple entryTuple = {key, values}; + bytes in = codec->encodeWithSig("insert((string,string[]))", entryTuple); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr selectByKey( + protocol::BlockNumber _number, const std::string& key, const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("select(string)", key); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr selectByCondition(protocol::BlockNumber _number, + const std::vector& keyCond, const LimitTuple& limit, + const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("select((uint8,string)[],(uint32,uint32))", keyCond, limit); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr count(protocol::BlockNumber _number, + const std::vector& keyCond, const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("count((uint8,string)[])", keyCond); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr updateByKey(protocol::BlockNumber _number, const std::string& key, + const std::vector& _updateFields, + const std::string& callAddress, bool _isErrorInTable = false) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("update(string,(string,string)[])", key, _updateFields); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_isErrorInTable) + { + // call precompiled + commitBlock(_number); + return result2; + } + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr updateByCondition(protocol::BlockNumber _number, + const std::vector& conditions, const LimitTuple& _limit, + const std::vector& _updateFields, + const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = + codec->encodeWithSig("update((uint8,string)[],(uint32,uint32),(string,string)[])", + conditions, _limit, _updateFields); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + if (result2->status() != (int32_t)TransactionStatus::None) + { + commitBlock(_number); + return result2; + } + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr removeByKey( + protocol::BlockNumber _number, const std::string& key, const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("remove(string)", key); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr removeByCondition(protocol::BlockNumber _number, + const std::vector& keyCond, const LimitTuple& limit, + const std::string& callAddress) + { + nextBlock(_number, BlockVersion::V3_1_VERSION); + bytes in = codec->encodeWithSig("remove((uint8,string)[],(uint32,uint32))", keyCond, limit); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + std::string tableTestAddress; + std::string sender; +}; + +BOOST_FIXTURE_TEST_SUITE(precompiledTableTest, TableFactoryPrecompiledFixture) + +BOOST_AUTO_TEST_CASE(createTableTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // open table not exist + { + auto response1 = openTable(number++, "t_test2"); + BOOST_CHECK(response1->data().toBytes() == codec->encode(Address())); + + auto response2 = openTable(number++, tableTestAddress); + BOOST_CHECK(response2->data().toBytes() == codec->encode(Address())); + } + + // check create + { + auto r1 = openTable(number++, "t_test"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(Address(tableTestAddress))); + + auto response1 = openTable(number++, "/tables/t_test"); + Address address; + codec->decode(response1->data(), address); + BOOST_CHECK(address.hex() == tableTestAddress); + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == tool::FS_TYPE_LINK); + } + + // createTable exist + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress, + CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable too long tableName, key and field + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(1); + } + { + auto r1 = + creatTable(number++, errorStr, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", errorStr, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", "id", {errorStr}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = + creatTable(number++, errorStr2, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", errorStr2, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", "id", {errorStr2}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // check trim create table params + { + auto r1 = creatTable(number++, "t_test123", " id ", {" item_name ", " item_id "}, + "420f853b49838bd3e9466c85a4cc3428c960dde3"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = desc(number++, "t_test123"); + TableInfoTuple t = {"id", {"item_name", "item_id"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(t)); + } +} + +BOOST_AUTO_TEST_CASE(createTableWasmsTest) +{ + init(true); + + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // check create + { + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == executor::FS_TYPE_CONTRACT); + } + + // createTable exist + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress, + CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable too long tableName, key and field + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(1); + } + { + auto r1 = + creatTable(number++, errorStr, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", errorStr, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", "id", {errorStr}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = + creatTable(number++, errorStr2, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", errorStr2, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", "id", {errorStr2}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(appendColumnsTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // check create + { + auto response1 = openTable(number++, "/tables/t_test"); + Address address; + codec->decode(response1->data(), address); + BOOST_CHECK(address.hex() == tableTestAddress); + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == tool::FS_TYPE_LINK); + } + // simple append + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v2"}); + auto r2 = desc(number++, "t_test"); + TableInfoTuple tableInfo = {"id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + } + // append not exist table + { + auto r1 = appendColumns(number++, "t_test2", {"v1", "v2"}); + BOOST_CHECK(r1->data().toBytes() == codec->encode((int32_t)CODE_TABLE_NOT_EXIST)); + } + // append duplicate field + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v3"}); + BOOST_CHECK(r1->data().toBytes() == codec->encode((int32_t)CODE_TABLE_DUPLICATE_FIELD)); + } + + // append too long field + { + std::string longField = "0"; + for (int j = 0; j < USER_TABLE_FIELD_NAME_MAX_LENGTH; ++j) + { + longField += "0"; + } + auto r1 = appendColumns(number++, "t_test", {"v3", longField}); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(appendColumnsWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // check create + { + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == executor::FS_TYPE_CONTRACT); + } + // simple append + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v2"}); + auto r2 = desc(number++, "t_test"); + TableInfoTuple tableInfo = {"id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + } + // append not exist table + { + auto r1 = appendColumns(number++, "t_test2", {"v1", "v2"}); + BOOST_CHECK(r1->data().toBytes() == codec->encode((int32_t)CODE_TABLE_NOT_EXIST)); + } + // append duplicate field + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v3"}); + BOOST_CHECK(r1->data().toBytes() == codec->encode((int32_t)CODE_TABLE_DUPLICATE_FIELD)); + } + + // append too long field + { + std::string longField = "0"; + for (int j = 0; j < USER_TABLE_FIELD_NAME_MAX_LENGTH; ++j) + { + longField += "0"; + } + auto r1 = appendColumns(number++, "t_test", {"v3", longField}); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(insertTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // insert exist + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + + // insert too much value + { + auto r1 = insert(number++, "id2", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert not enough value + { + auto r1 = insert(number++, "id3", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + longKey += "0"; + } + auto r1 = insert(number++, longKey, {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "id111", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert after append + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v2"}); + auto r2 = desc(number++, "t_test"); + TableInfoTuple tableInfo = {"id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + + // good + auto r3 = insert(number++, "id4", {"test1", "test2", "test3", "test4"}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + + // insert too much value + auto r4 = + insert(number++, "id5", {"test1", "test2", "test3", "test4", "test5"}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + + // insert not enough value + auto r5 = insert(number++, "id3", {"test1", "test2"}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(insertWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // insert exist + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + + // insert too much value + { + auto r1 = insert(number++, "id1", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert not enough value + { + auto r1 = insert(number++, "id1", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + longKey += "0"; + } + auto r1 = insert(number++, longKey, {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "id1", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } +} + +BOOST_AUTO_TEST_CASE(selectTest) +{ + /// INSERT_COUNT should > 100 + const int INSERT_COUNT = 10000; + auto fillZero = [](int _num) -> std::string { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, fillZero(1), {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, fillZero(1), callAddress); + EntryTuple entryTuple = {fillZero(1), {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, fillZero(2), callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + for (int j = 3; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string index = std::to_string(j); + insert(number++, fillZero(j), {"test" + index, "test" + index}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // simple select by condition + { + uint32_t limitCount = 10; + // lexicographical order, 1~INSERT_COUNT + ConditionTuple cond1 = {0, fillZero(1)}; + LimitTuple limit = {0, limitCount}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + BOOST_CHECK(entries.size() == limitCount); + } + + { + // lexicographical order, 100~INSERT_COUNT + uint32_t geNumber = 100; + ConditionTuple cond1 = {1, fillZero(geNumber)}; + auto r1 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(uint32_t(INSERT_COUNT - geNumber))); + } + + // select by condition, empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select by condition, condition with undefined cmp + { + ConditionTuple cond1 = {5, "90"}; + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select by condition, limit overflow + { + ConditionTuple cond1 = {0, "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(selectWasmTest) +{ + init(true); + /// INSERT_COUNT should > 100 + const int INSERT_COUNT = 1000; + auto fillZero = [](int _num) -> std::string { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, fillZero(1), {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, fillZero(1), callAddress); + EntryTuple entryTuple = {fillZero(1), {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, fillZero(2), callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + for (int j = 3; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string index = std::to_string(j); + insert(number++, fillZero(j), {"test" + index, "test" + index}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // simple select by condition + { + uint32_t limitCount = 10; + // lexicographical order, 1~INSERT_COUNT + ConditionTuple cond1 = {0, fillZero(1)}; + LimitTuple limit = {0, limitCount}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + BOOST_CHECK(entries.size() == limitCount); + } + + { + // lexicographical order, 100~INSERT_COUNT + uint32_t geNumber = 100; + ConditionTuple cond1 = {1, fillZero(geNumber)}; + auto r1 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(uint32_t(INSERT_COUNT - geNumber))); + } + + // select by condition, empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select by condition, condition with undefined cmp + { + ConditionTuple cond1 = {5, "90"}; + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select by condition, limit overflow + { + ConditionTuple cond1 = {0, "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +/// TODO: check limit +BOOST_AUTO_TEST_CASE(updateTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + for (int j = 2; j < 100; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string index = std::to_string(j); + insert(number++, index, {"test" + index, "test" + index}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // update by empty condition + { + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByCondition(number++, {}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // simple update by condition + { + // lexicographical order, 90~99 + ConditionTuple cond1 = {0, "90"}; + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(9))); + + // select + auto r2 = selectByKey(number++, "98", callAddress); + EntryTuple entryTuple = {"98", {"update1", "test98"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + + // update second column + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r3 = updateByCondition( + number++, {cond1}, limit, {updateFieldTuple1, updateFieldTuple2}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(9))); + + // select + auto r4 = selectByKey(number++, "96", callAddress); + EntryTuple entryTuple2 = {"96", {"update1", "update2"}}; + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple2)); + } +} + +/// TODO: check limit +BOOST_AUTO_TEST_CASE(updateWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + for (int j = 2; j < 100; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string index = std::to_string(j); + insert(number++, index, {"test" + index, "test" + index}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // simple update by condition + { + // lexicographical order, 90~99 + ConditionTuple cond1 = {0, "90"}; + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(9))); + + // select + auto r2 = selectByKey(number++, "98", callAddress); + EntryTuple entryTuple = {"98", {"update1", "test98"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + + // update second column + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r3 = updateByCondition( + number++, {cond1}, limit, {updateFieldTuple1, updateFieldTuple2}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(9))); + + // select + auto r4 = selectByKey(number++, "96", callAddress); + EntryTuple entryTuple2 = {"96", {"update1", "update2"}}; + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple2)); + } +} + +/// TODO: check limit +BOOST_AUTO_TEST_CASE(removeTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple remove by key + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + // empty + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // remove by key not exist + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + } + + for (int j = 1; j < 100; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string index = std::to_string(j); + insert(number++, index, {"test" + index, "test" + index}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // remove by empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // simple remove by condition + { + // lexicographical order, 90~99 + ConditionTuple cond1 = {0, "90"}; + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(9))); + + // select + auto r2 = selectByKey(number++, "98", callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + + // select + auto r3 = selectByKey(number++, "89", callAddress); + EntryTuple entryTuple2 = {"89", {"test89", "test89"}}; + BOOST_CHECK(r3->data().toBytes() == codec->encode(entryTuple2)); + + // remove again + auto r4 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r4->data().toBytes() == codec->encode(int32_t(0))); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/TablePrecompiledV320Test.cpp b/bcos-executor/test/unittest/libprecompiled/TablePrecompiledV320Test.cpp new file mode 100644 index 0000000..4bd86fd --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/TablePrecompiledV320Test.cpp @@ -0,0 +1,4597 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TablePrecompiledV320Test.cpp + * @author: kyonRay + * @date 2022-04-13 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include "precompiled/TableManagerPrecompiled.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class TableFactoryPrecompiledV320Fixture : public PrecompiledFixture +{ +public: + TableFactoryPrecompiledV320Fixture() { init(false); } + + void init(bool isWasm) + { + setIsWasm(isWasm, false, true); + tableTestAddress = isWasm ? "/tables/t_test" : "420f853b49838bd3e9466c85a4cc3428c960dde2"; + } + + virtual ~TableFactoryPrecompiledV320Fixture() = default; + + ExecutionMessage::UniquePtr creatTable(protocol::BlockNumber _number, + const std::string& tableName, const uint8_t keyOrder, const std::string& key, + const std::vector& value, const std::string& callAddress, int _errorCode = 0, + bool errorInTableManager = false) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + TableInfoTupleV320 tableInfoTuple = std::make_tuple(keyOrder, key, value); + bytes in = codec->encodeWithSig( + "createTable(string,(uint8,string,string[]))", tableName, tableInfoTuple); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (errorInTableManager) + { + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(int32_t(_errorCode))); + } + commitBlock(_number); + return result2; + } + + // set new address + result2->setTo(callAddress); + // external create + result2->setSeq(1001); + + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1002); + // external call bfs + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call bfs success, callback to create + result4->setSeq(1001); + + std::promise executePromise5; + executor->dmcExecuteTransaction(std::move(result4), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise5.set_value(std::move(result)); + }); + auto result5 = executePromise5.get_future().get(); + + // create success, callback to precompiled + result5->setSeq(1000); + + std::promise executePromise6; + executor->dmcExecuteTransaction(std::move(result5), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise6.set_value(std::move(result)); + }); + auto result6 = executePromise6.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result6->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result6; + }; + + ExecutionMessage::UniquePtr appendColumns(protocol::BlockNumber _number, + const std::string& tableName, const std::vector& values, int _errorCode = 0) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("appendColumns(string,string[])", tableName, values); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 100, 10000, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(100); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + // call precompiled + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr list( + protocol::BlockNumber _number, std::string const& path, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("list(string)", path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? BFS_NAME : BFS_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + std::vector empty; + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode), empty)); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr openTable( + protocol::BlockNumber _number, std::string const& _path, int _errorCode = 0) + { + bytes in = codec->encodeWithSig("openTable(string)", _path); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + if (_errorCode != 0) + { + BOOST_CHECK(result2->data().toBytes() == codec->encode(s256(_errorCode))); + } + + commitBlock(_number); + return result2; + }; + + ExecutionMessage::UniquePtr desc(protocol::BlockNumber _number, std::string const& tableName) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("descWithKeyOrder(string)", tableName); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(isWasm ? TABLE_MANAGER_NAME : TABLE_MANAGER_ADDRESS); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + // call precompiled + commitBlock(_number); + return result2; + } + + ExecutionMessage::UniquePtr insert(protocol::BlockNumber _number, const std::string& key, + const std::vector& values, const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + EntryTuple entryTuple = {key, values}; + bytes in = codec->encodeWithSig("insert((string,string[]))", entryTuple); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr selectByKey( + protocol::BlockNumber _number, const std::string& key, const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("select(string)", key); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr selectByCondition(protocol::BlockNumber _number, + const std::vector& keyCond, const LimitTuple& limit, + const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = + codec->encodeWithSig("select((uint8,string,string)[],(uint32,uint32))", keyCond, limit); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr count(protocol::BlockNumber _number, + const std::vector& keyCond, const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("count((uint8,string,string)[])", keyCond); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr updateByKey(protocol::BlockNumber _number, const std::string& key, + const std::vector& _updateFields, + const std::string& callAddress, bool _isErrorInTable = false) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("update(string,(string,string)[])", key, _updateFields); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + if (_isErrorInTable) + { + // call precompiled + commitBlock(_number); + return result2; + } + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr updateByCondition(protocol::BlockNumber _number, + const std::vector& conditions, const LimitTuple& _limit, + const std::vector& _updateFields, + const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig( + "update((uint8,string,string)[],(uint32,uint32),(string,string)[])", conditions, _limit, + _updateFields); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + BOOST_CHECK(!error); + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + if (result2->status() != (int32_t)TransactionStatus::None) + { + commitBlock(_number); + return result2; + } + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr removeByKey( + protocol::BlockNumber _number, const std::string& key, const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = codec->encodeWithSig("remove(string)", key); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + ExecutionMessage::UniquePtr removeByCondition(protocol::BlockNumber _number, + const std::vector& keyCond, const LimitTuple& limit, + const std::string& callAddress) + { + nextBlock(_number, protocol::BlockVersion::V3_2_VERSION); + bytes in = + codec->encodeWithSig("remove((uint8,string,string)[],(uint32,uint32))", keyCond, limit); + auto tx = fakeTransaction(cryptoSuite, keyPair, "", in, 101, 100001, "1", "1"); + sender = boost::algorithm::hex_lower(std::string(tx->sender())); + auto hash = tx->hash(); + txpool->hash2Transaction.emplace(hash, tx); + auto params2 = std::make_unique(); + params2->setTransactionHash(hash); + params2->setContextID(1000); + params2->setSeq(1000); + params2->setDepth(0); + params2->setFrom(sender); + params2->setTo(callAddress); + params2->setOrigin(sender); + params2->setStaticCall(false); + params2->setGasAvailable(gas); + params2->setData(std::move(in)); + params2->setType(NativeExecutionMessage::TXHASH); + + std::promise executePromise2; + executor->dmcExecuteTransaction(std::move(params2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise2.set_value(std::move(result)); + }); + auto result2 = executePromise2.get_future().get(); + + result2->setSeq(1001); + + // get desc + std::promise executePromise3; + executor->dmcExecuteTransaction(std::move(result2), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise3.set_value(std::move(result)); + }); + auto result3 = executePromise3.get_future().get(); + + result3->setSeq(1000); + + // get desc callback + std::promise executePromise4; + executor->dmcExecuteTransaction(std::move(result3), + [&](bcos::Error::UniquePtr&& error, ExecutionMessage::UniquePtr&& result) { + executePromise4.set_value(std::move(result)); + }); + auto result4 = executePromise4.get_future().get(); + + // call precompiled + commitBlock(_number); + return result4; + } + + std::string tableTestAddress; + std::string sender; +}; + +static void generateRandomVector( + uint32_t count, uint32_t _min, uint32_t _max, std::map& res) +{ + static std::random_device rd; + if (_min > _max || count > _max - _min + 1) + { + return; + } + std::vector temp; + temp.reserve(_max - _min + 1); + for (uint32_t i = _min; i <= _max; i++) + { + temp.push_back(i); + } + std::shuffle(temp.begin(), temp.end(), std::default_random_engine(rd())); + std::sort(temp.begin(), temp.begin() + count); + size_t offset = res.size(); + for (uint32_t i = 0; i < count; i++) + { + res.insert({temp[i], i + offset}); + } +} + + +BOOST_FIXTURE_TEST_SUITE(precompiledTableTestV320, TableFactoryPrecompiledV320Fixture) + +BOOST_AUTO_TEST_CASE(createTableTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // open table not exist + { + auto response1 = openTable(number++, "t_test2"); + BOOST_CHECK(response1->data().toBytes() == codec->encode(Address())); + + auto response2 = openTable(number++, tableTestAddress); + BOOST_CHECK(response2->data().toBytes() == codec->encode(Address())); + } + + // check create + { + auto r1 = openTable(number++, "t_test"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(Address(tableTestAddress))); + + auto response1 = openTable(number++, "/tables/t_test"); + Address address; + codec->decode(response1->data(), address); + BOOST_CHECK(address.hex() == tableTestAddress); + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == tool::FS_TYPE_LINK); + } + + // createTable exist + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress, + CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable too long tableName, key and field + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(1); + } + { + auto r1 = + creatTable(number++, errorStr, 0, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", 0, errorStr, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", 0, "id", {errorStr}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = creatTable( + number++, errorStr2, 0, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", 0, errorStr2, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", 0, "id", {errorStr2}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // check trim create table params + { + auto r1 = creatTable(number++, "t_test123", 0, " id ", {" item_name ", " item_id "}, + "420f853b49838bd3e9466c85a4cc3428c960dde3"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = desc(number++, "t_test123"); + TableInfoTupleV320 t = {0, "id", {"item_name", "item_id"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(t)); + } + + // undefined keyOrder + { + auto r1 = creatTable( + number++, "t_test456", 2, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(createTableWasmTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // open table not exist + { + auto response1 = openTable(number++, "t_test2"); + BOOST_CHECK(response1->data().toBytes() == codec->encode(Address())); + + auto response2 = openTable(number++, tableTestAddress); + BOOST_CHECK(response2->data().toBytes() == codec->encode(Address())); + } + + // check create + { + auto r1 = openTable(number++, "t_test"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(Address(tableTestAddress))); + + auto response1 = openTable(number++, "/tables/t_test"); + Address address; + codec->decode(response1->data(), address); + BOOST_CHECK(address.hex() == tableTestAddress); + auto response2 = list(number++, "/tables"); + int32_t ret; + std::vector bfsInfos; + codec->decode(response2->data(), ret, bfsInfos); + BOOST_CHECK(ret == 0); + BOOST_CHECK(bfsInfos.size() == 1); + auto fileInfo = bfsInfos[0]; + BOOST_CHECK(std::get<0>(fileInfo) == "t_test"); + BOOST_CHECK(std::get<1>(fileInfo) == tool::FS_TYPE_LINK); + } + + // createTable exist + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress, + CODE_TABLE_NAME_ALREADY_EXIST, true); + } + + // createTable too long tableName, key and field + std::string errorStr; + for (int i = 0; i <= SYS_TABLE_VALUE_FIELD_NAME_MAX_LENGTH; i++) + { + errorStr += std::to_string(1); + } + { + auto r1 = + creatTable(number++, errorStr, 0, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", 0, errorStr, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", 0, "id", {errorStr}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // createTable error key and field + std::string errorStr2 = "/test&"; + { + auto r1 = creatTable( + number++, errorStr2, 0, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = creatTable( + number++, "t_test", 0, errorStr2, {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r3 = creatTable(number++, "t_test", 0, "id", {errorStr2}, callAddress, 0, true); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // check trim create table params + { + auto r1 = creatTable(number++, "t_test123", 0, " id ", {" item_name ", " item_id "}, + "420f853b49838bd3e9466c85a4cc3428c960dde3"); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(0))); + auto r2 = desc(number++, "t_test123"); + TableInfoTupleV320 t = {0, "id", {"item_name", "item_id"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(t)); + } + + // undefined keyOrder + { + auto r1 = creatTable( + number++, "t_test456", 2, "id", {"item_name", "item_id"}, callAddress, 0, true); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + + +BOOST_AUTO_TEST_CASE(insertLexicographicOrderTest) +{ + // Lexicographic Order + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // insert exist + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + + // insert too much value + { + auto r1 = insert(number++, "id2", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert not enough value + { + auto r1 = insert(number++, "id3", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + longKey += "0"; + } + auto r1 = insert(number++, longKey, {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "id111", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert after append + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v2"}); + auto r2 = desc(number++, "t_test"); + TableInfoTupleV320 tableInfo = {0, "id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + + // good + auto r3 = insert(number++, "id4", {"test1", "test2", "test3", "test4"}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + + // insert too much value + auto r4 = + insert(number++, "id5", {"test1", "test2", "test3", "test4", "test5"}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + + // insert not enough value + auto r5 = insert(number++, "id3", {"test1", "test2"}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +// Numerical Order +BOOST_AUTO_TEST_CASE(insertNumericalOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test_1", 1, "id", {"item_name", "item_id"}, callAddress); + } + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + // insert exist + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + // insert too much value + { + auto r1 = insert(number++, "2", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert not enough value + { + auto r1 = insert(number++, "3", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert a non numeric key + { + auto r1 = insert(number++, "03", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = insert(number++, "aa", {"test1", "test2"}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = insert(number++, "9223372036854775808", {"test1", "test2"}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert negative key + { + auto r1 = insert(number++, "-10", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + // LONG_MIN + auto r2 = insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + BOOST_CHECK(r2->data().toBytes() == codec->encode(int32_t(1))); + + // LONG_MIN - 1 + auto r3 = insert(number++, "-9223372036854775809", {"test1", "test2"}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert too long value + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "3", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + // insert after append + { + auto r1 = appendColumns(number++, "t_test_1", {"v1", "v2"}); + auto r2 = desc(number++, "t_test_1"); + TableInfoTupleV320 tableInfo = {1, "id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + // good + auto r3 = insert(number++, "4", {"test1", "test2", "test3", "test4"}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + // insert too much value + auto r4 = insert(number++, "5", {"test1", "test2", "test3", "test4", "test5"}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + // insert not enough value + auto r5 = insert(number++, "6", {"test1", "test2"}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(insertLexicographicOrderWasmTest) +{ + // Lexicographic Order + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // insert exist + { + auto r1 = insert(number++, "id1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + + // insert too much value + { + auto r1 = insert(number++, "id2", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert not enough value + { + auto r1 = insert(number++, "id3", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longKey = "0"; + for (int j = 0; j < USER_TABLE_KEY_VALUE_MAX_LENGTH; ++j) + { + longKey += "0"; + } + auto r1 = insert(number++, longKey, {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert too long key + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "id111", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // insert after append + { + auto r1 = appendColumns(number++, "t_test", {"v1", "v2"}); + auto r2 = desc(number++, "t_test"); + TableInfoTupleV320 tableInfo = {0, "id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + + // good + auto r3 = insert(number++, "id4", {"test1", "test2", "test3", "test4"}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + + // insert too much value + auto r4 = + insert(number++, "id5", {"test1", "test2", "test3", "test4", "test5"}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + + // insert not enough value + auto r5 = insert(number++, "id3", {"test1", "test2"}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(insertNumericalOrdeWasmTest) +{ + // Numerical Order + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test_1", 1, "id", {"item_name", "item_id"}, callAddress); + } + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + // insert exist + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_INSERT_KEY_EXIST))); + } + // insert too much value + { + auto r1 = insert(number++, "2", {"test1", "test2", "test3"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert not enough value + { + auto r1 = insert(number++, "3", {"test1"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert a non numeric key + { + auto r1 = insert(number++, "03", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + auto r2 = insert(number++, "aa", {"test1", "test2"}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = insert(number++, "9223372036854775808", {"test1", "test2"}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert negative key + { + auto r1 = insert(number++, "-10", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + // LONG_MIN + auto r2 = insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + BOOST_CHECK(r2->data().toBytes() == codec->encode(int32_t(1))); + + // LONG_MIN - 1 + auto r3 = insert(number++, "-9223372036854775809", {"test1", "test2"}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + // insert too long value + { + boost::log::core::get()->set_logging_enabled(false); + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + auto r1 = insert(number++, "3", {"test1", longValue}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + // insert after append + { + auto r1 = appendColumns(number++, "t_test_1", {"v1", "v2"}); + auto r2 = desc(number++, "t_test_1"); + TableInfoTupleV320 tableInfo = {1, "id", {"item_name", "item_id", "v1", "v2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(tableInfo)); + // good + auto r3 = insert(number++, "4", {"test1", "test2", "test3", "test4"}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + // insert too much value + auto r4 = insert(number++, "5", {"test1", "test2", "test3", "test4", "test5"}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + // insert not enough value + auto r5 = insert(number++, "6", {"test1", "test2"}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(selectLexicographicOrderTest) +{ + auto fillZero = [](int _num) -> std::string { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, fillZero(1), {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, fillZero(1), callAddress); + EntryTuple entryTuple = {fillZero(1), {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, fillZero(2), callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } +} + +BOOST_AUTO_TEST_CASE(selectNumericalOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, "2", callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select a non numeric key + { + auto r1 = selectByKey(number++, "01", callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = selectByKey(number++, "aa", callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = selectByKey(number++, "9223372036854775808", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + + auto r1 = selectByKey(number++, "-10", callAddress); + EntryTuple entryTuple1 = {"-10", {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple1)); + + auto r2 = selectByKey(number++, "-9223372036854775808", callAddress); + EntryTuple entryTuple2 = {"-9223372036854775808", {"test1", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple2)); + + // LONG_MIN - 1 + auto r3 = selectByKey(number++, "-9223372036854775809", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(selectLexicographicOrderWasmTest) +{ + init(true); + auto fillZero = [](int _num) -> std::string { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, fillZero(1), {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, fillZero(1), callAddress); + EntryTuple entryTuple = {fillZero(1), {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, fillZero(2), callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } +} + +BOOST_AUTO_TEST_CASE(selectNumericalOrderWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple select by key + { + auto r1 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select by key not exist + { + auto r1 = selectByKey(number++, "2", callAddress); + EntryTuple entryTuple = {}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple)); + } + + // select a non numeric key + { + auto r1 = selectByKey(number++, "01", callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = selectByKey(number++, "aa", callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = selectByKey(number++, "9223372036854775808", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + + auto r1 = selectByKey(number++, "-10", callAddress); + EntryTuple entryTuple1 = {"-10", {"test1", "test2"}}; + BOOST_CHECK(r1->data().toBytes() == codec->encode(entryTuple1)); + + auto r2 = selectByKey(number++, "-9223372036854775808", callAddress); + EntryTuple entryTuple2 = {"-9223372036854775808", {"test1", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple2)); + + // LONG_MIN - 1 + auto r3 = selectByKey(number++, "-9223372036854775809", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(updateLexicographicOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } +} + +BOOST_AUTO_TEST_CASE(updateNumericalOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // update, non numeric key + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "01", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = updateByKey(number++, "aa", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = updateByKey(number++, "9223372036854775808", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "-10", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "-10", callAddress); + EntryTuple entryTuple1 = {"-10", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple1)); + + auto r3 = updateByKey(number++, "-9223372036854775808", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + auto r4 = selectByKey(number++, "-9223372036854775808", callAddress); + EntryTuple entryTuple2 = {"-9223372036854775808", {"update", "test2"}}; + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple2)); + + // LONG_MIN - 1 + auto r5 = updateByKey(number++, "-9223372036854775809", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(updateLexicographicOrderWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } +} + +BOOST_AUTO_TEST_CASE(updateNumericalOrderWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple update by key, modify 1 column + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // simple update by key, modify 2 columns + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + UpdateFieldTuple updateFieldTuple2 = {"item_id", "update2"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple2, updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + EntryTuple entryTuple = {"1", {"update1", "update2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // update by key not exist + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update1"}; + auto r1 = updateByKey(number++, "2", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_UPDATE_KEY_NOT_EXIST))); + } + + // update by key, index overflow + { + UpdateFieldTuple updateFieldTuple1 = {"errorField", "update1"}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + std::string longValue = "0"; + for (int j = 0; j < USER_TABLE_FIELD_VALUE_MAX_LENGTH; ++j) + { + longValue += "0"; + } + + // update by key, value overflow + { + boost::log::core::get()->set_logging_enabled(false); + UpdateFieldTuple updateFieldTuple1 = {"item_name", longValue}; + auto r1 = updateByKey(number++, "1", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + boost::log::core::get()->set_logging_enabled(true); + } + + // update, non numeric key + { + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "01", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = updateByKey(number++, "aa", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = updateByKey(number++, "9223372036854775808", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + + UpdateFieldTuple updateFieldTuple1 = {"item_name", "update"}; + auto r1 = updateByKey(number++, "-10", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "-10", callAddress); + EntryTuple entryTuple1 = {"-10", {"update", "test2"}}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple1)); + + auto r3 = updateByKey(number++, "-9223372036854775808", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + auto r4 = selectByKey(number++, "-9223372036854775808", callAddress); + EntryTuple entryTuple2 = {"-9223372036854775808", {"update", "test2"}}; + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple2)); + + // LONG_MIN - 1 + auto r5 = updateByKey(number++, "-9223372036854775809", {updateFieldTuple1}, callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(removeLexicographicOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple remove by key + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + // empty + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // remove by key not exist + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + } +} + +BOOST_AUTO_TEST_CASE(removeNumericalOrderTest) +{ + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple remove by key + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + // empty + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // remove by key not exist + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + } + + // remove, non numeric key + { + auto r1 = removeByKey(number++, "01", callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = removeByKey(number++, "aa", callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = removeByKey(number++, "9223372036854775808", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + EntryTuple entryTuple = {}; + + auto r1 = removeByKey(number++, "-10", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "-10", callAddress); + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + + auto r3 = removeByKey(number++, "-9223372036854775808", callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + auto r4 = selectByKey(number++, "-9223372036854775808", callAddress); + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple)); + + // LONG_MIN - 1 + auto r5 = removeByKey(number++, "-9223372036854775809", callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(removeLexicographicOrderWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 0, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple remove by key + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + // empty + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // remove by key not exist + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + } +} + +BOOST_AUTO_TEST_CASE(removeNumericalOrderWasmTest) +{ + init(true); + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test", 1, "id", {"item_name", "item_id"}, callAddress); + } + + // simple insert + { + auto r1 = insert(number++, "1", {"test1", "test2"}, callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + } + + // simple remove by key + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "1", callAddress); + // empty + EntryTuple entryTuple = {}; + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + } + + // remove by key not exist + { + auto r1 = removeByKey(number++, "1", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(CODE_REMOVE_KEY_NOT_EXIST))); + } + + // remove, non numeric key + { + auto r1 = removeByKey(number++, "01", callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = removeByKey(number++, "aa", callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MAX + 1 + auto r3 = removeByKey(number++, "9223372036854775808", callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, negative key + { + insert(number++, "-10", {"test1", "test2"}, callAddress); + insert(number++, "-9223372036854775808", {"test1", "test2"}, callAddress); + EntryTuple entryTuple = {}; + + auto r1 = removeByKey(number++, "-10", callAddress); + BOOST_CHECK(r1->data().toBytes() == codec->encode(int32_t(1))); + auto r2 = selectByKey(number++, "-10", callAddress); + BOOST_CHECK(r2->data().toBytes() == codec->encode(entryTuple)); + + auto r3 = removeByKey(number++, "-9223372036854775808", callAddress); + BOOST_CHECK(r3->data().toBytes() == codec->encode(int32_t(1))); + auto r4 = selectByKey(number++, "-9223372036854775808", callAddress); + BOOST_CHECK(r4->data().toBytes() == codec->encode(entryTuple)); + + // LONG_MIN - 1 + auto r5 = removeByKey(number++, "-9223372036854775809", callAddress); + BOOST_CHECK(r5->status() == (int32_t)TransactionStatus::PrecompiledError); + } +} + +BOOST_AUTO_TEST_CASE(countTest) +{ + const int INSERT_COUNT = 10000; + + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + boost::log::core::get()->set_logging_enabled(false); + for (int j = 0; j < INSERT_COUNT; ++j) + { + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + } + boost::log::core::get()->set_logging_enabled(true); + + // (<= && <= && ==) or (<= && <= && !=) + { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution distribution1(1, randomSet.size() / 2); + std::uniform_int_distribution distribution2( + randomSet.size() / 2, randomSet.size()); + uint32_t low = distribution1(gen); + uint32_t high = distribution2(gen); + uint32_t validCount = 0; + std::string lowKey; + std::string highKey; + uint32_t counter = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + ++counter; + if (counter == low) + { + validCount = iter->second; + lowKey = std::to_string(iter->first); + } + if (counter == high) + { + validCount = iter->second - validCount + 1; + highKey = std::to_string(iter->first); + break; + } + } + // lowKey <= key <= highKey && value == "yes" + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", lowKey}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", highKey}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == validCount); + + // lowKey <= key <= highKey && value != "yes" + low = boost::lexical_cast(lowKey); + high = boost::lexical_cast(highKey); + uint32_t total = high - low + 1; + auto r2 = count(number++, {cond1, cond2, cond4}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_CHECK(countRes == total - validCount); + } + + // (< && < && ==) or (< && < && !=) + { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution distribution1(1, randomSet.size() / 2 - 1); + std::uniform_int_distribution distribution2( + randomSet.size() / 2 + 1, randomSet.size()); + uint32_t low = distribution1(gen); + uint32_t high = distribution2(gen); + uint32_t validCount = 0; + std::string lowKey; + std::string highKey; + uint32_t counter = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + ++counter; + if (counter == low) + { + validCount = iter->second; + lowKey = std::to_string(iter->first); + } + if (counter == high) + { + validCount = iter->second - validCount - 1; + highKey = std::to_string(iter->first); + break; + } + } + + // lowKey < key < highKey && value == "yes" + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GT, "id", lowKey}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LT, "id", highKey}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_CHECK(countRes == validCount); + + // lowKey < key < highKey && value != "yes" + low = boost::lexical_cast(lowKey); + high = boost::lexical_cast(highKey); + uint32_t total = high - low - 1; + auto r2 = count(number++, {cond1, cond2, cond4}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_CHECK(countRes == total - validCount); + } + + // 0 <= key <= 1001 + { + uint32_t low = 0; + uint32_t high = 1001; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LE, "id", std::to_string(high)}; + auto r1 = count(number++, {cond1, cond2}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == high - low + 1); + } + + // value == "yes" + { + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == 25 * (INSERT_COUNT / 500)); + } + + // value == "no" + { + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "no"}; + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == (500 - 25) * (INSERT_COUNT / 500)); + } + + // The index of condition out of range + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // empty condition + { + auto r1 = count(number++, {}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {10, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // count, non numeric key + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ,"id", "01"}; + auto r1 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = count(number++, {cond2}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = count(number++, {cond3}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = count(number++, {cond4}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // count, negative key + { + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", "-10"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::LT, "id", "50"}; + + auto r1 = count(number++, {cond1, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == 51); + + auto r2 = count(number++, {cond2, cond3}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_TEST(countRes == 52); + } +} + +BOOST_AUTO_TEST_CASE(countWasmTest) +{ + init(true); + const int INSERT_COUNT = 10000; + + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + boost::log::core::get()->set_logging_enabled(false); + for (int j = 0; j < INSERT_COUNT; ++j) + { + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + } + boost::log::core::get()->set_logging_enabled(true); + + // (<= && <= && ==) or (<= && <= && !=) + { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution distribution1(1, randomSet.size() / 2); + std::uniform_int_distribution distribution2( + randomSet.size() / 2, randomSet.size()); + uint32_t low = distribution1(gen); + uint32_t high = distribution2(gen); + uint32_t validCount = 0; + std::string lowKey; + std::string highKey; + uint32_t counter = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + ++counter; + if (counter == low) + { + validCount = iter->second; + lowKey = std::to_string(iter->first); + } + if (counter == high) + { + validCount = iter->second - validCount + 1; + highKey = std::to_string(iter->first); + break; + } + } + // lowKey <= key <= highKey && value == "yes" + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", lowKey}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", highKey}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == validCount); + + // lowKey <= key <= highKey && value != "yes" + low = boost::lexical_cast(lowKey); + high = boost::lexical_cast(highKey); + uint32_t total = high - low + 1; + auto r2 = count(number++, {cond1, cond2, cond4}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_CHECK(countRes == total - validCount); + } + + // (< && < && ==) or (< && < && !=) + { + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution distribution1(1, randomSet.size() / 2 - 1); + std::uniform_int_distribution distribution2( + randomSet.size() / 2 + 1, randomSet.size()); + uint32_t low = distribution1(gen); + uint32_t high = distribution2(gen); + uint32_t validCount = 0; + std::string lowKey; + std::string highKey; + uint32_t counter = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + ++counter; + if (counter == low) + { + validCount = iter->second; + lowKey = std::to_string(iter->first); + } + if (counter == high) + { + validCount = iter->second - validCount - 1; + highKey = std::to_string(iter->first); + break; + } + } + + // lowKey < key < highKey && value == "yes" + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GT, "id", lowKey}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LT, "id", highKey}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_CHECK(countRes == validCount); + + // lowKey < key < highKey && value != "yes" + low = boost::lexical_cast(lowKey); + high = boost::lexical_cast(highKey); + uint32_t total = high - low - 1; + auto r2 = count(number++, {cond1, cond2, cond4}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_CHECK(countRes == total - validCount); + } + + // 0 <= key <= 1001 + { + uint32_t low = 0; + uint32_t high = 1001; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LE, "id", std::to_string(high)}; + auto r1 = count(number++, {cond1, cond2}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == high - low + 1); + } + + // value == "yes" + { + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == 25 * (INSERT_COUNT / 500)); + } + + // value == "no" + { + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "no"}; + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == (500 - 25) * (INSERT_COUNT / 500)); + } + + // The index of condition out of range + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // empty condition + { + auto r1 = count(number++, {}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {10, "value", "yes"}; + auto r1 = count(number++, {cond1, cond2, cond3}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // count, non numeric key + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ,"id", "01"}; + auto r1 = count(number++, {cond1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = count(number++, {cond2}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = count(number++, {cond3}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = count(number++, {cond4}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // count, negative key + { + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", "-10"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::LT, "id", "50"}; + + auto r1 = count(number++, {cond1, cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_TEST(countRes == 51); + + auto r2 = count(number++, {cond2, cond3}, callAddress); + countRes = 0; + codec->decode(r2->data(), countRes); + BOOST_TEST(countRes == 52); + } +} + +BOOST_AUTO_TEST_CASE(selectByCondTest) +{ + /// INSERT_COUNT should > 100 + const int INSERT_COUNT = 10000; + + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // select by condition——check limit and count + { + uint32_t limitOffset = 0; + uint32_t limitCount = 50; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 10; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 37; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == (500 - limitOffset) && count == (500 - limitOffset)); + } + + // select by condition limitCount < USER_TABLE_MIN_LIMIT_COUNT + { + uint32_t limitOffset = 0; + uint32_t limitCount = 49; + // lexicographical order, 1~INSERT_COUNT + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + // select by condition limitCount == 0 + { + uint32_t limitOffset = 0; + uint32_t limitCount = 0; + // lexicographical order, 1~INSERT_COUNT + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + // check not use key condition + uint32_t count1 = 0; + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count1; + } + BOOST_CHECK(entries.size() == (500 - limitOffset) && count1 == (500 - limitOffset)); + } + uint32_t count2 = 0; + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count2; + } + BOOST_CHECK(entries.size() == (500 - limitOffset) && count2 == (500 - limitOffset)); + } + BOOST_CHECK(count1 == count2); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select, non numeric key + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = selectByCondition(number++, {cond2}, limit, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = selectByCondition(number++, {cond3}, limit, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = selectByCondition(number++, {cond4}, limit, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select, negative key + { + LimitTuple limit = {0, 100}; + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", "-10"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::LT, "id", "50"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "xx"}; + std::vector target1 = {"-10"}; + std::vector target2 = {"-9223372036854775808", "-10"}; + + for (int i = 0; i < 50; ++i) + { + target1.push_back(std::to_string(i)); + target2.push_back(std::to_string(i)); + } + + auto checkFunc = [](std::vector& target, std::vector entries) { + if (target.size() != entries.size()) + return false; + for (size_t i = 0; i < target.size(); ++i) + { + if (target[i] != std::get<0>(entries[i])) + { + return false; + } + } + return true; + }; + + { + std::vector entries1; + auto r1 = selectByCondition(number++, {cond1, cond3}, limit, callAddress); + codec->decode(r1->data(), entries1); + BOOST_CHECK(checkFunc(target1, entries1)); + + std::vector entries2; + auto r2 = selectByCondition(number++, {cond2, cond3}, limit, callAddress); + codec->decode(r2->data(), entries2); + BOOST_CHECK(checkFunc(target2, entries2)); + } + + // use value condition + { + std::vector entries1; + auto r1 = selectByCondition(number++, {cond1, cond3, cond4}, limit, callAddress); + codec->decode(r1->data(), entries1); + BOOST_CHECK(checkFunc(target1, entries1)); + + std::vector entries2; + auto r2 = selectByCondition(number++, {cond2, cond3, cond4}, limit, callAddress); + codec->decode(r2->data(), entries2); + BOOST_CHECK(checkFunc(target2, entries2)); + } + } +} + +BOOST_AUTO_TEST_CASE(selectByCondWasmTest) +{ + init(true); + /// INSERT_COUNT should > 100 + const int INSERT_COUNT = 10000; + + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + // select by condition——check limit and count + { + uint32_t limitOffset = 0; + uint32_t limitCount = 50; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 10; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 37; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == (500 - limitOffset) && count == (500 - limitOffset)); + } + + // select by condition limitCount < USER_TABLE_MIN_LIMIT_COUNT + { + uint32_t limitOffset = 0; + uint32_t limitCount = 49; + // lexicographical order, 1~INSERT_COUNT + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + // select by condition limitCount == 0 + { + uint32_t limitOffset = 0; + uint32_t limitCount = 0; + // lexicographical order, 1~INSERT_COUNT + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + uint32_t count = 0; + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count; + } + + BOOST_CHECK(entries.size() == limitCount && count == limitCount); + } + + { + // check not use key condition + uint32_t count1 = 0; + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count1; + } + BOOST_CHECK(entries.size() == (500 - limitOffset) && count1 == (500 - limitOffset)); + } + uint32_t count2 = 0; + { + uint32_t limitOffset = 461; + uint32_t limitCount = 75; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "yes"}; + LimitTuple limit = {limitOffset, limitCount}; + auto r1 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries; + codec->decode(r1->data(), entries); + + for (size_t i = 0; i < entries.size(); ++i) + { + EntryTuple& entry = entries[i]; + uint32_t key = boost::lexical_cast(std::get<0>(entry)); + auto iter = randomSet.find(key); + if (iter == randomSet.end() || iter->second != i + limitOffset) + break; + ++count2; + } + BOOST_CHECK(entries.size() == (500 - limitOffset) && count2 == (500 - limitOffset)); + } + BOOST_CHECK(count1 == count2); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + auto r2 = count(number++, {}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = selectByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select, non numeric key + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = selectByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = selectByCondition(number++, {cond2}, limit, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = selectByCondition(number++, {cond3}, limit, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = selectByCondition(number++, {cond4}, limit, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // select, negative key + { + LimitTuple limit = {0, 100}; + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", "-10"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::LT, "id", "50"}; + ConditionTupleV320 cond4 = {(uint8_t)storage::Condition::Comparator::NE, "value", "xx"}; + std::vector target1 = {"-10"}; + std::vector target2 = {"-9223372036854775808", "-10"}; + + for (int i = 0; i < 50; ++i) + { + target1.push_back(std::to_string(i)); + target2.push_back(std::to_string(i)); + } + + auto checkFunc = [](std::vector& target, std::vector entries) { + if (target.size() != entries.size()) + return false; + for (size_t i = 0; i < target.size(); ++i) + { + if (target[i] != std::get<0>(entries[i])) + { + return false; + } + } + return true; + }; + + { + std::vector entries1; + auto r1 = selectByCondition(number++, {cond1, cond3}, limit, callAddress); + codec->decode(r1->data(), entries1); + BOOST_CHECK(checkFunc(target1, entries1)); + + std::vector entries2; + auto r2 = selectByCondition(number++, {cond2, cond3}, limit, callAddress); + codec->decode(r2->data(), entries2); + BOOST_CHECK(checkFunc(target2, entries2)); + } + + // use value condition + { + std::vector entries1; + auto r1 = selectByCondition(number++, {cond1, cond3, cond4}, limit, callAddress); + codec->decode(r1->data(), entries1); + BOOST_CHECK(checkFunc(target1, entries1)); + + std::vector entries2; + auto r2 = selectByCondition(number++, {cond2, cond3, cond4}, limit, callAddress); + codec->decode(r2->data(), entries2); + BOOST_CHECK(checkFunc(target2, entries2)); + } + } +} + +BOOST_AUTO_TEST_CASE(updateByCondTest) +{ + const int INSERT_COUNT = 10000; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + // prepare data + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + { + auto updateFunc = [this, &number, &callAddress](uint32_t low, uint32_t high, + uint32_t offset, uint32_t count, const std::string& target, + const std::string& value) { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(high)}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + UpdateFieldTuple updateFieldTuple1 = {"value", target}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + int32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + return affectRows; + }; + + auto countFunc = [this, &number, &callAddress](const std::string& value) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + auto r1 = count(number++, {cond}, callAddress); + uint32_t rows = 0; + codec->decode(r1->data(), rows); + return rows; + }; + uint32_t countBeforeUpdate = countFunc("yes"); + // update value = "update" where (key >= 5000 && key < 6000) && (value == "yes") + uint32_t affectRows1 = updateFunc(5000, 6000, 26, 20, "update", "yes"); + uint32_t countAfterUpdate = countFunc("update"); + // update value = "yes" where (key >= 0 && key < 10000) && (value == "update") + uint32_t affectRows2 = updateFunc(0, 10000, 0, 500, "yes", "update"); + uint32_t countAfterRecover = countFunc("yes"); + BOOST_CHECK(affectRows1 == countAfterUpdate && affectRows1 == affectRows2 && + affectRows1 == 20 && countBeforeUpdate == countAfterRecover && + countBeforeUpdate == 500); + } + + // limitcount == 0 + { + auto updateFunc = [this, &number, &callAddress](uint32_t low, uint32_t high, + uint32_t offset, uint32_t count, const std::string& target, + const std::string& value) { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(high)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + UpdateFieldTuple updateFieldTuple1 = {"value", target}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + int32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + return affectRows; + }; + + auto countFunc = [this, &number, &callAddress](const std::string& value) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + auto r1 = count(number++, {cond}, callAddress); + uint32_t rows = 0; + codec->decode(r1->data(), rows); + return rows; + }; + uint32_t countBeforeUpdate = countFunc("yes"); + // update value = "update" where (key >= 5000 && key < 6000) && (value == "yes") + uint32_t affectRows1 = updateFunc(5000, 6000, 0, 0, "update", "yes"); + uint32_t countAfterUpdate = countFunc("update"); + // update value = "yes" where (key >= 0 && key < 10000) && (value == "update") + uint32_t affectRows2 = updateFunc(0, 10000, 0, 0, "yes", "update"); + uint32_t countAfterRecover = countFunc("yes"); + BOOST_CHECK(affectRows1 == countAfterUpdate && affectRows1 == affectRows2 && + affectRows1 == 0 && countBeforeUpdate == countAfterRecover && + countBeforeUpdate == 500); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, non numeric key + { + UpdateFieldTuple updateFieldTuple = {"value", "update"}; + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = updateByCondition(number++, {cond2}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = updateByCondition(number++, {cond3}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = updateByCondition(number++, {cond4}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, negative key + { + LimitTuple limit = {0, 100}; + UpdateFieldTuple updateFieldTuple = {"value", "updatexx"}; + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-100", {"no"}, callAddress); + insert(number++, "-1000", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", "-10"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "updatexx"}; + + auto r1 = + updateByCondition(number++, {cond1, cond2}, limit, {updateFieldTuple}, callAddress); + uint32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + BOOST_CHECK(affectRows == 4); + + std::vector entries; + auto r2 = selectByCondition(number++, {cond3}, limit, callAddress); + codec->decode(r2->data(), entries); + BOOST_CHECK(std::get<0>(entries[0]) == "-9223372036854775808"); + BOOST_CHECK(std::get<0>(entries[1]) == "-1000"); + BOOST_CHECK(std::get<0>(entries[2]) == "-100"); + BOOST_CHECK(std::get<0>(entries[3]) == "-10"); + } +} + +BOOST_AUTO_TEST_CASE(updateByCondWasmTest) +{ + init(true); + const int INSERT_COUNT = 10000; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + // Numerical Order + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + // prepare data + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + { + auto updateFunc = [this, &number, &callAddress](uint32_t low, uint32_t high, + uint32_t offset, uint32_t count, const std::string& target, + const std::string& value) { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(high)}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + UpdateFieldTuple updateFieldTuple1 = {"value", target}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + int32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + return affectRows; + }; + + auto countFunc = [this, &number, &callAddress](const std::string& value) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + auto r1 = count(number++, {cond}, callAddress); + uint32_t rows = 0; + codec->decode(r1->data(), rows); + return rows; + }; + uint32_t countBeforeUpdate = countFunc("yes"); + // update value = "update" where (key >= 5000 && key < 6000) && (value == "yes") + uint32_t affectRows1 = updateFunc(5000, 6000, 26, 20, "update", "yes"); + uint32_t countAfterUpdate = countFunc("update"); + // update value = "yes" where (key >= 0 && key < 10000) && (value == "update") + uint32_t affectRows2 = updateFunc(0, 10000, 0, 500, "yes", "update"); + uint32_t countAfterRecover = countFunc("yes"); + BOOST_CHECK(affectRows1 == countAfterUpdate && affectRows1 == affectRows2 && + affectRows1 == 20 && countBeforeUpdate == countAfterRecover && + countBeforeUpdate == 500); + } + + // limitcount == 0 + { + auto updateFunc = [this, &number, &callAddress](uint32_t low, uint32_t high, + uint32_t offset, uint32_t count, const std::string& target, + const std::string& value) { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(low)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(high)}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + UpdateFieldTuple updateFieldTuple1 = {"value", target}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + int32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + return affectRows; + }; + + auto countFunc = [this, &number, &callAddress](const std::string& value) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + auto r1 = count(number++, {cond}, callAddress); + uint32_t rows = 0; + codec->decode(r1->data(), rows); + return rows; + }; + uint32_t countBeforeUpdate = countFunc("yes"); + // update value = "update" where (key >= 5000 && key < 6000) && (value == "yes") + uint32_t affectRows1 = updateFunc(5000, 6000, 0, 0, "update", "yes"); + uint32_t countAfterUpdate = countFunc("update"); + // update value = "yes" where (key >= 0 && key < 10000) && (value == "update") + uint32_t affectRows2 = updateFunc(0, 10000, 0, 0, "yes", "update"); + uint32_t countAfterRecover = countFunc("yes"); + BOOST_CHECK(affectRows1 == countAfterUpdate && affectRows1 == affectRows2 && + affectRows1 == 0 && countBeforeUpdate == countAfterRecover && + countBeforeUpdate == 500); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + UpdateFieldTuple updateFieldTuple1 = {"value", "update"}; + auto r1 = updateByCondition( + number++, {cond1, cond2, cond3}, limit, {updateFieldTuple1}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, non numeric key + { + UpdateFieldTuple updateFieldTuple = {"value", "update"}; + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = updateByCondition(number++, {cond1}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = updateByCondition(number++, {cond2}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = updateByCondition(number++, {cond3}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = updateByCondition(number++, {cond4}, limit, {updateFieldTuple}, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // update, negative key + { + LimitTuple limit = {0, 100}; + UpdateFieldTuple updateFieldTuple = {"value", "updatexx"}; + insert(number++, "-10", {"no"}, callAddress); + insert(number++, "-100", {"no"}, callAddress); + insert(number++, "-1000", {"no"}, callAddress); + insert(number++, "-9223372036854775808", {"no"}, callAddress); + + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", "-10"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "updatexx"}; + + auto r1 = + updateByCondition(number++, {cond1, cond2}, limit, {updateFieldTuple}, callAddress); + uint32_t affectRows = 0; + codec->decode(r1->data(), affectRows); + BOOST_CHECK(affectRows == 4); + + std::vector entries; + auto r2 = selectByCondition(number++, {cond3}, limit, callAddress); + codec->decode(r2->data(), entries); + BOOST_CHECK(std::get<0>(entries[0]) == "-9223372036854775808"); + BOOST_CHECK(std::get<0>(entries[1]) == "-1000"); + BOOST_CHECK(std::get<0>(entries[2]) == "-100"); + BOOST_CHECK(std::get<0>(entries[3]) == "-10"); + } +} + +BOOST_AUTO_TEST_CASE(removeByCondTest) +{ + const int INSERT_COUNT = 10000; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + // prepare data + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + auto recoverFunc = [this, &number, &callAddress](const std::set& removed) { + for (auto& iter : removed) + { + boost::log::core::get()->set_logging_enabled(false); + insert(number++, iter, {"yes"}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + }; + + auto removeFunc = [this, &number, &callAddress](const std::string& low, const std::string& high, + uint32_t offset, uint32_t count, const std::string& value) { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", low}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LT, "id", high}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + auto r1 = removeByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + int32_t removedRows = 0; + codec->decode(r1->data(), removedRows); + return removedRows; + }; + + auto selectFunc = [this, &number, &callAddress]( + const std::string& value, std::vector& entries) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {0, 500}; + auto r1 = selectByCondition(number++, {cond}, limit, callAddress); + codec->decode(r1->data(), entries); + }; + + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 100; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + // recover data + recoverFunc(removedSet); + } + + // limitCount == 0 + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 0; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + } + + // limitCount < USER_TABLE_MIN_LIMIT_COUNT + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 49; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = removeByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, non numeric key + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = removeByCondition(number++, {cond2}, limit, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = removeByCondition(number++, {cond3}, limit, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = removeByCondition(number++, {cond4}, limit, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, negative key + { + LimitTuple limit = {0, 100}; + insert(number++, "-10", {"removexx"}, callAddress); + insert(number++, "-100", {"removexx"}, callAddress); + insert(number++, "-1000", {"removexx"}, callAddress); + insert(number++, "-9223372036854775808", {"removexx"}, callAddress); + + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", "-10"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "removexx"}; + + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_CHECK(countRes == 4); + + auto r2 = removeByCondition(number++, {cond1, cond2}, limit, callAddress); + uint32_t removedRows = 0; + codec->decode(r2->data(), removedRows); + BOOST_CHECK(removedRows == 4); + + auto r3 = count(number++, {cond3}, callAddress); + countRes = 0; + codec->decode(r3->data(), countRes); + BOOST_CHECK(countRes == 0); + } +} + +BOOST_AUTO_TEST_CASE(removeByCondWasmTest) +{ + init(true); + const int INSERT_COUNT = 10000; + auto callAddress = tableTestAddress; + BlockNumber number = 1; + { + creatTable(number++, "t_test_condv320", 1, "id", {"value"}, callAddress); + } + + // prepare data + std::map randomSet; + int start = 0; + int end = 499; + for (int i = 0; i < INSERT_COUNT / 500; i++) + { + generateRandomVector(25, start, end, randomSet); + start += 500; + end += 500; + } + + for (int j = 0; j < INSERT_COUNT; ++j) + { + boost::log::core::get()->set_logging_enabled(false); + std::string value = "no"; + if (randomSet.contains(j)) + { + value = "yes"; + } + insert(number++, std::to_string(j), {value}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + + auto recoverFunc = [this, &number, &callAddress](const std::set& removed) { + for (auto& iter : removed) + { + boost::log::core::get()->set_logging_enabled(false); + insert(number++, iter, {"yes"}, callAddress); + boost::log::core::get()->set_logging_enabled(true); + } + }; + + auto removeFunc = [this, &number, &callAddress](const std::string& low, const std::string& high, + uint32_t offset, uint32_t count, const std::string& value) { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::GE, "id", low}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LT, "id", high}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {offset, count}; + auto r1 = removeByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + int32_t removedRows = 0; + codec->decode(r1->data(), removedRows); + return removedRows; + }; + + auto selectFunc = [this, &number, &callAddress]( + const std::string& value, std::vector& entries) { + ConditionTupleV320 cond = {(uint8_t)storage::Condition::Comparator::EQ, "value", value}; + LimitTuple limit = {0, 500}; + auto r1 = selectByCondition(number++, {cond}, limit, callAddress); + codec->decode(r1->data(), entries); + }; + + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 100; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + // recover data + recoverFunc(removedSet); + } + + // limitCount == 0 + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 0; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + } + + // limitCount < USER_TABLE_MIN_LIMIT_COUNT + { + std::default_random_engine generator; + std::uniform_int_distribution distribution(50, 100); + int _start = distribution(generator); + int limitCount = 49; + uint32_t low = 0; + uint32_t high = 0; + int i = 0; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter, ++i) + { + if (i == _start) + { + low = iter->first; + } + if (i - _start == limitCount) + { + high = iter->first; + break; + } + } + + std::set savedSet; + std::set removedSet; + for (auto iter = randomSet.begin(); iter != randomSet.end(); ++iter) + { + if (iter->first >= low && iter->first < high) + { + removedSet.insert(std::to_string(iter->first)); + continue; + } + savedSet.insert(std::to_string(iter->first)); + } + + uint32_t removedRows1 = + removeFunc(std::to_string(low), std::to_string(INSERT_COUNT), 0, limitCount, "yes"); + std::vector entries; + selectFunc("yes", entries); + BOOST_CHECK(removedRows1 == 500 - entries.size()); + + for (auto& entry : entries) + { + std::string key = std::get<0>(entry); + if (!savedSet.contains(key)) + { + BOOST_CHECK(false); + break; + } + savedSet.erase(key); + } + BOOST_CHECK(savedSet.empty()); + } + + // empty condition + { + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // condition with undefined cmp + { + ConditionTupleV320 cond1 = {100, "id", "90"}; + LimitTuple limit = {0, 10}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // limit overflow + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "90"}; + LimitTuple limit = {0, 10000}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // The index of condition out of range + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", std::to_string(0)}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::LT, "id", std::to_string(INSERT_COUNT)}; + // index out of range 0 <= idx <= 1 + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "idx", "yes"}; + auto r1 = removeByCondition(number++, {cond1, cond2, cond3}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, non numeric key + { + LimitTuple limit = {0, 50}; + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "01"}; + auto r1 = removeByCondition(number++, {cond1}, limit, callAddress); + BOOST_CHECK(r1->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::EQ, "id", "aa"}; + auto r2 = removeByCondition(number++, {cond2}, limit, callAddress); + BOOST_CHECK(r2->status() == (int32_t)TransactionStatus::PrecompiledError); + + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "9223372036854775808"}; + auto r3 = removeByCondition(number++, {cond3}, limit, callAddress); + BOOST_CHECK(r3->status() == (int32_t)TransactionStatus::PrecompiledError); + + // LONG_MIN - 1 + ConditionTupleV320 cond4 = { + (uint8_t)storage::Condition::Comparator::EQ, "id", "-9223372036854775809"}; + auto r4 = removeByCondition(number++, {cond4}, limit, callAddress); + BOOST_CHECK(r4->status() == (int32_t)TransactionStatus::PrecompiledError); + } + + // remove, negative key + { + LimitTuple limit = {0, 100}; + insert(number++, "-10", {"removexx"}, callAddress); + insert(number++, "-100", {"removexx"}, callAddress); + insert(number++, "-1000", {"removexx"}, callAddress); + insert(number++, "-9223372036854775808", {"removexx"}, callAddress); + + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::GE, "id", "-9223372036854775808"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::LE, "id", "-10"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::EQ, "value", "removexx"}; + + auto r1 = count(number++, {cond3}, callAddress); + uint32_t countRes = 0; + codec->decode(r1->data(), countRes); + BOOST_CHECK(countRes == 4); + + auto r2 = removeByCondition(number++, {cond1, cond2}, limit, callAddress); + uint32_t removedRows = 0; + codec->decode(r2->data(), removedRows); + BOOST_CHECK(removedRows == 4); + + auto r3 = count(number++, {cond3}, callAddress); + countRes = 0; + codec->decode(r3->data(), countRes); + BOOST_CHECK(countRes == 0); + } +} + +BOOST_AUTO_TEST_CASE(containsTest) +{ + auto callAddress = tableTestAddress; + const int INSERT_COUNT = 500; + BlockNumber number = 1; + { + creatTable(number++, "t_test_condv320", 0, "id", {"v1", "v2"}, callAddress); + } + + auto _fillZeros = [](int _num) { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + + for (int j = 0; j < INSERT_COUNT; j += 2) + { + boost::log::core::get()->set_logging_enabled(false); + { + std::string value = _fillZeros(j); + std::string key = "abc_" + value; + insert(number++, key, {value, key}, callAddress); + } + { + std::string value = _fillZeros(j + 1); + std::string key = value + "_abc"; + insert(number++, key, {value, key}, callAddress); + } + boost::log::core::get()->set_logging_enabled(true); + } + + // STARTS_WITH ENDS_WITH CONTAINS + { + LimitTuple limit = {0, 500}; + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", "abc"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", "abc"}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::CONTAINS, "id", "abc"}; + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + BOOST_CHECK(countPrefix == INSERT_COUNT / 2); + BOOST_CHECK(countSuffix == INSERT_COUNT - INSERT_COUNT / 2); + BOOST_CHECK(countContains == INSERT_COUNT); + + auto r4 = selectByCondition(number++, {cond1}, limit, callAddress); + auto r5 = selectByCondition(number++, {cond2}, limit, callAddress); + auto r6 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries1; + codec->decode(r4->data(), entries1); + std::vector entries2; + codec->decode(r5->data(), entries2); + std::vector entries3; + codec->decode(r6->data(), entries3); + size_t count1 = 0; + size_t count2 = 0; + size_t count3 = 0; + for (uint32_t j = 0; j < 500; j += 2) + { + if (std::get<1>(entries1[j / 2])[0] == _fillZeros(j)) + ++count1; + if (std::get<1>(entries2[j / 2])[0] == _fillZeros(j + 1)) + ++count2; + if (std::get<1>(entries3[j / 2 + 250])[0] == _fillZeros(j)) + ++count3; + if (std::get<1>(entries3[j / 2])[0] == _fillZeros(j + 1)) + ++count3; + } + BOOST_CHECK(count1 == entries1.size()); + BOOST_CHECK(count2 == entries2.size()); + BOOST_CHECK(count3 == entries3.size()); + } + + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "v2", "abc"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::ENDS_WITH, "v2", "abc"}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::CONTAINS, "v2", "abc"}; + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + BOOST_CHECK(countPrefix == INSERT_COUNT / 2); + BOOST_CHECK(countSuffix == INSERT_COUNT - INSERT_COUNT / 2); + BOOST_CHECK(countContains == INSERT_COUNT); + + auto r4 = selectByCondition(number++, {cond1}, limit, callAddress); + auto r5 = selectByCondition(number++, {cond2}, limit, callAddress); + auto r6 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries1; + codec->decode(r4->data(), entries1); + std::vector entries2; + codec->decode(r5->data(), entries2); + std::vector entries3; + codec->decode(r6->data(), entries3); + size_t count1 = 0; + size_t count2 = 0; + size_t count3 = 0; + for (uint32_t j = 0; j < 500; j += 2) + { + if (std::get<1>(entries1[j / 2])[0] == _fillZeros(j)) + ++count1; + if (std::get<1>(entries2[j / 2])[0] == _fillZeros(j + 1)) + ++count2; + if (std::get<1>(entries3[j / 2 + 250])[0] == _fillZeros(j)) + ++count3; + if (std::get<1>(entries3[j / 2])[0] == _fillZeros(j + 1)) + ++count3; + } + BOOST_CHECK(count1 == entries1.size()); + BOOST_CHECK(count2 == entries2.size()); + BOOST_CHECK(count3 == entries3.size()); + } + } + + // empty key + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", ""}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", ""}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::CONTAINS, "id", ""}; + + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + + BOOST_CHECK(countPrefix == INSERT_COUNT); + BOOST_CHECK(countSuffix == INSERT_COUNT); + BOOST_CHECK(countContains == INSERT_COUNT); + } + + // error key + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", "abcd"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", "abcd"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::CONTAINS, "id", "abcd"}; + + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + + BOOST_CHECK(countPrefix == 0); + BOOST_CHECK(countSuffix == 0); + BOOST_CHECK(countContains == 0); + } +} + +BOOST_AUTO_TEST_CASE(containsWasmTest) +{ + init(true); + + auto callAddress = tableTestAddress; + const int INSERT_COUNT = 500; + BlockNumber number = 1; + { + creatTable(number++, "t_test_condv320", 0, "id", {"v1", "v2"}, callAddress); + } + + auto _fillZeros = [](int _num) { + std::stringstream stream; + stream << std::setfill('0') << std::setw(40) << std::right << _num; + return stream.str(); + }; + + for (int j = 0; j < INSERT_COUNT; j += 2) + { + boost::log::core::get()->set_logging_enabled(false); + { + std::string value = _fillZeros(j); + std::string key = "abc_" + value; + insert(number++, key, {value, key}, callAddress); + } + { + std::string value = _fillZeros(j + 1); + std::string key = value + "_abc"; + insert(number++, key, {value, key}, callAddress); + } + boost::log::core::get()->set_logging_enabled(true); + } + + // STARTS_WITH ENDS_WITH CONTAINS + { + LimitTuple limit = {0, 500}; + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", "abc"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", "abc"}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::CONTAINS, "id", "abc"}; + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + BOOST_CHECK(countPrefix == INSERT_COUNT / 2); + BOOST_CHECK(countSuffix == INSERT_COUNT - INSERT_COUNT / 2); + BOOST_CHECK(countContains == INSERT_COUNT); + + auto r4 = selectByCondition(number++, {cond1}, limit, callAddress); + auto r5 = selectByCondition(number++, {cond2}, limit, callAddress); + auto r6 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries1; + codec->decode(r4->data(), entries1); + std::vector entries2; + codec->decode(r5->data(), entries2); + std::vector entries3; + codec->decode(r6->data(), entries3); + size_t count1 = 0; + size_t count2 = 0; + size_t count3 = 0; + for (uint32_t j = 0; j < 500; j += 2) + { + if (std::get<1>(entries1[j / 2])[0] == _fillZeros(j)) + ++count1; + if (std::get<1>(entries2[j / 2])[0] == _fillZeros(j + 1)) + ++count2; + if (std::get<1>(entries3[j / 2 + 250])[0] == _fillZeros(j)) + ++count3; + if (std::get<1>(entries3[j / 2])[0] == _fillZeros(j + 1)) + ++count3; + } + BOOST_CHECK(count1 == entries1.size()); + BOOST_CHECK(count2 == entries2.size()); + BOOST_CHECK(count3 == entries3.size()); + } + + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "v2", "abc"}; + ConditionTupleV320 cond2 = { + (uint8_t)storage::Condition::Comparator::ENDS_WITH, "v2", "abc"}; + ConditionTupleV320 cond3 = { + (uint8_t)storage::Condition::Comparator::CONTAINS, "v2", "abc"}; + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + BOOST_CHECK(countPrefix == INSERT_COUNT / 2); + BOOST_CHECK(countSuffix == INSERT_COUNT - INSERT_COUNT / 2); + BOOST_CHECK(countContains == INSERT_COUNT); + + auto r4 = selectByCondition(number++, {cond1}, limit, callAddress); + auto r5 = selectByCondition(number++, {cond2}, limit, callAddress); + auto r6 = selectByCondition(number++, {cond3}, limit, callAddress); + std::vector entries1; + codec->decode(r4->data(), entries1); + std::vector entries2; + codec->decode(r5->data(), entries2); + std::vector entries3; + codec->decode(r6->data(), entries3); + size_t count1 = 0; + size_t count2 = 0; + size_t count3 = 0; + for (uint32_t j = 0; j < 500; j += 2) + { + if (std::get<1>(entries1[j / 2])[0] == _fillZeros(j)) + ++count1; + if (std::get<1>(entries2[j / 2])[0] == _fillZeros(j + 1)) + ++count2; + if (std::get<1>(entries3[j / 2 + 250])[0] == _fillZeros(j)) + ++count3; + if (std::get<1>(entries3[j / 2])[0] == _fillZeros(j + 1)) + ++count3; + } + BOOST_CHECK(count1 == entries1.size()); + BOOST_CHECK(count2 == entries2.size()); + BOOST_CHECK(count3 == entries3.size()); + } + } + + // empty key + { + ConditionTupleV320 cond1 = {(uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", ""}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", ""}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::CONTAINS, "id", ""}; + + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + + BOOST_CHECK(countPrefix == INSERT_COUNT); + BOOST_CHECK(countSuffix == INSERT_COUNT); + BOOST_CHECK(countContains == INSERT_COUNT); + } + + // error key + { + ConditionTupleV320 cond1 = { + (uint8_t)storage::Condition::Comparator::STARTS_WITH, "id", "abcd"}; + ConditionTupleV320 cond2 = {(uint8_t)storage::Condition::Comparator::ENDS_WITH, "id", "abcd"}; + ConditionTupleV320 cond3 = {(uint8_t)storage::Condition::Comparator::CONTAINS, "id", "abcd"}; + + auto r1 = count(number++, {cond1}, callAddress); + auto r2 = count(number++, {cond2}, callAddress); + auto r3 = count(number++, {cond3}, callAddress); + uint32_t countPrefix = 0; + uint32_t countSuffix = 0; + uint32_t countContains = 0; + codec->decode(r1->data(), countPrefix); + codec->decode(r2->data(), countSuffix); + codec->decode(r3->data(), countContains); + + BOOST_CHECK(countPrefix == 0); + BOOST_CHECK(countSuffix == 0); + BOOST_CHECK(countContains == 0); + } +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/UtilitiesTest.cpp b/bcos-executor/test/unittest/libprecompiled/UtilitiesTest.cpp new file mode 100644 index 0000000..e67d8c4 --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/UtilitiesTest.cpp @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file UtilitiesTest.cpp + * @author: kyonGuo + * @date 2023/1/3 + */ + +#include "libprecompiled/PreCompiledFixture.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class UtilitiesFixture : public PrecompiledFixture +{ +public: + UtilitiesFixture() = default; + + ~UtilitiesFixture() override = default; + + void init(bool _isWasm, protocol::BlockVersion version = BlockVersion::V3_1_VERSION) + { + setIsWasm(_isWasm, false, true, version); + } + + static bool checkPathValid( + std::string const& path, protocol::BlockVersion version = BlockVersion::V3_1_VERSION) + { + return precompiled::checkPathValid(path, version); + } +}; +BOOST_FIXTURE_TEST_SUITE(UtilitiesTest, UtilitiesFixture) + +BOOST_AUTO_TEST_CASE(pathValidTest) +{ + BOOST_CHECK(!checkPathValid("")); + BOOST_CHECK(!checkPathValid("/apps/check/path/level/is/too/deep")); + BOOST_CHECK(!checkPathValid( + "/apps/check/path/too/looooooooooooooooooooooooooooooooooooooooooooooooon")); + BOOST_CHECK(checkPathValid("/")); + BOOST_CHECK(checkPathValid("/apps/123456/")); + BOOST_CHECK(checkPathValid("apps/123456/")); + BOOST_CHECK(!checkPathValid("/apps/123456>")); + BOOST_CHECK(!checkPathValid("/apps/123456=")); + BOOST_CHECK(!checkPathValid("/apps/123\"456")); + /// >= 3.2 + BOOST_CHECK(checkPathValid("/apps/123456/", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(checkPathValid("apps/123456/", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123456>", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123456=", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123\"456", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123456\n", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123456\t", BlockVersion::V3_2_VERSION)); + BOOST_CHECK(!checkPathValid("/apps/123456 ", BlockVersion::V3_2_VERSION)); + // BOOST_CHECK(checkPathValid(std::string("/apps/123456中文"), BlockVersion::V3_2_VERSION)); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libprecompiled/VRFPrecompiledTest.cpp b/bcos-executor/test/unittest/libprecompiled/VRFPrecompiledTest.cpp new file mode 100644 index 0000000..19d298c --- /dev/null +++ b/bcos-executor/test/unittest/libprecompiled/VRFPrecompiledTest.cpp @@ -0,0 +1,171 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "../mock/MockLedger.h" +#include "bcos-codec/abi/ContractABICodec.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executive/TransactionExecutive.h" +#include "bcos-executor/src/precompiled/CryptoPrecompiled.h" +#include "bcos-executor/src/precompiled/common/Common.h" +#include "bcos-executor/src/precompiled/common/Utilities.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::precompiled; +using namespace bcos::executor; +using namespace bcos::storage; +namespace bcos::test +{ +class VRFPrecompiledFixture +{ +public: + VRFPrecompiledFixture(bool _useSM, uint32_t _blockVersion) + { + clearName2SelectCache(); + if (!_useSM) + { + m_cryptoSuite = std::make_shared( + std::make_shared(), std::make_shared(), nullptr); + } + else + { + m_cryptoSuite = std::make_shared( + std::make_shared(), std::make_shared(), nullptr); + } + m_cryptoPrecompiled = std::make_shared(m_cryptoSuite->hashImpl()); + m_ledgerCache = std::make_shared(std::make_shared()); + m_blockContext = + std::make_shared(nullptr, m_ledgerCache, m_cryptoSuite->hashImpl(), 0, + h256(), utcTime(), _blockVersion, FiscoBcosSchedule, false, false); + std::shared_ptr gasInjector = nullptr; + m_executive = std::make_shared( + std::weak_ptr(m_blockContext), "", 100, 0, gasInjector); + m_abi = std::make_shared(m_cryptoSuite->hashImpl()); + } + + ~VRFPrecompiledFixture() {} + + LedgerCache::Ptr m_ledgerCache; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + BlockContext::Ptr m_blockContext; + TransactionExecutive::Ptr m_executive; + CryptoPrecompiled::Ptr m_cryptoPrecompiled; + std::string m_vrfVerifyFunction = "curve25519VRFVerify(bytes,bytes,bytes)"; + std::shared_ptr m_abi; +}; + +BOOST_FIXTURE_TEST_SUITE(test_VRFPrecompiled, TestPromptFixture) + +void testVRFVerify(VRFPrecompiledFixture _fixture) +{ + auto keyPair = _fixture.m_cryptoSuite->signatureImpl()->generateKeyPair(); + // generate vrfProof + std::string input = "abcd"; + bytes vrfPublicKey; + vrfPublicKey.resize(32); + CInputBuffer privateKey{ + (const char*)keyPair->secretKey()->data().data(), keyPair->secretKey()->size()}; + COutputBuffer publicKey{(char*)vrfPublicKey.data(), vrfPublicKey.size()}; + // derive the public key + std::cout << "try to wedpr_curve25519_vrf_derive_public_key" << std::endl; + auto ret = wedpr_curve25519_vrf_derive_public_key(&privateKey, &publicKey); + BOOST_CHECK_EQUAL(ret, WEDPR_SUCCESS); + std::cout << "try to wedpr_curve25519_vrf_derive_public_key success" << std::endl; + + // generate proof + bytes inputBytes = bytes(input.begin(), input.end()); + CInputBuffer inputMsg{(const char*)inputBytes.data(), inputBytes.size()}; + bytes vrfProof; + size_t proofSize = 96; + vrfProof.resize(proofSize); + COutputBuffer proof{(char*)vrfProof.data(), proofSize}; + std::cout << "try to wedpr_curve25519_vrf_prove_utf8" << std::endl; + ret = wedpr_curve25519_vrf_prove_utf8(&privateKey, &inputMsg, &proof); + BOOST_CHECK_EQUAL(ret, WEDPR_SUCCESS); + std::cout << "try to wedpr_curve25519_vrf_prove_utf8 success" << std::endl; + + // case1: verify success + u256 lastRandomValue; + bool verifySucc; + u256 randomValue; + std::cout << "### inputBytes: " << *toHexString(inputBytes) << std::endl; + std::cout << "### vrfPublicKey: " << *toHexString(vrfPublicKey) << std::endl; + std::cout << "### vrfProof: " << *toHexString(vrfProof) << std::endl; + for (int i = 0; i < 10; i++) + { + bytes in = + _fixture.m_abi->abiIn(_fixture.m_vrfVerifyFunction, inputBytes, vrfPublicKey, vrfProof); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = _fixture.m_cryptoPrecompiled->call(_fixture.m_executive, parameters); + auto out = execResult->execResult(); + + _fixture.m_abi->abiOut(bytesConstRef(&out), verifySucc, randomValue); + BOOST_CHECK(verifySucc == true); + if (i > 0) + { + BOOST_CHECK(lastRandomValue == randomValue); + } + lastRandomValue = randomValue; + } + + // case2: mismatch public key + std::string fakeData = "mismatchVRFPublicKey"; + auto mismatchVRFPublicKey = bytes(fakeData.begin(), fakeData.end()); + auto in = _fixture.m_abi->abiIn( + _fixture.m_vrfVerifyFunction, inputBytes, mismatchVRFPublicKey, vrfProof); + auto parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + auto execResult = _fixture.m_cryptoPrecompiled->call(_fixture.m_executive, parameters); + auto out = execResult->execResult(); + _fixture.m_abi->abiOut(bytesConstRef(&out), verifySucc, randomValue); + BOOST_CHECK(verifySucc == false); + BOOST_CHECK(randomValue == 0); + + // case3: mismatch input data + fakeData = "abc^5%@@bc$"; + bytes mismatchInput = bytes(fakeData.begin(), fakeData.end()); + in = _fixture.m_abi->abiIn(_fixture.m_vrfVerifyFunction, mismatchInput, vrfPublicKey, vrfProof); + parameters = std::make_shared(); + parameters->m_input = bytesConstRef(in.data(), in.size()); + execResult = _fixture.m_cryptoPrecompiled->call(_fixture.m_executive, parameters); + out = execResult->execResult(); + _fixture.m_abi->abiOut(bytesConstRef(&out), verifySucc, randomValue); + BOOST_CHECK(verifySucc == false); + BOOST_CHECK(randomValue == 0); +} + +BOOST_AUTO_TEST_CASE(testCurve25519VRFVerify) +{ + VRFPrecompiledFixture fixture(false, (uint32_t)(bcos::protocol::BlockVersion::V3_0_VERSION)); + testVRFVerify(fixture); +} +BOOST_AUTO_TEST_CASE(testSMCurve25519VRFVerify) +{ + VRFPrecompiledFixture fixture(true, (uint32_t)(bcos::protocol::BlockVersion::V3_0_VERSION)); + testVRFVerify(fixture); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libvm/.gitignore b/bcos-executor/test/unittest/libvm/.gitignore new file mode 100644 index 0000000..528c1e8 --- /dev/null +++ b/bcos-executor/test/unittest/libvm/.gitignore @@ -0,0 +1 @@ +WasmPath.h diff --git a/bcos-executor/test/unittest/libvm/TestTransactionExecutive.cpp b/bcos-executor/test/unittest/libvm/TestTransactionExecutive.cpp new file mode 100644 index 0000000..318eae1 --- /dev/null +++ b/bcos-executor/test/unittest/libvm/TestTransactionExecutive.cpp @@ -0,0 +1,21 @@ +#include "../../src/executive/TransactionExecutive.h" +#include + +namespace bcos::test +{ +class TransactionExecutiveFixture +{ +public: + TransactionExecutiveFixture() {} +}; + +BOOST_FIXTURE_TEST_SUITE(testTransactionExecutive, TransactionExecutiveFixture) + +BOOST_AUTO_TEST_CASE(test) +{ + BOOST_CHECK(true); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/libvm/WasmPath.h.in b/bcos-executor/test/unittest/libvm/WasmPath.h.in new file mode 100644 index 0000000..256b3be --- /dev/null +++ b/bcos-executor/test/unittest/libvm/WasmPath.h.in @@ -0,0 +1,7 @@ +#include + +#pragma once + +char originBinary[] = "@CMAKE_CURRENT_SOURCE_DIR@/../wasm/infinit_loop.wasm"; +char useGasBinary[] = "@CMAKE_CURRENT_SOURCE_DIR@/../wasm/metric_infinit_loop_useGas.wasm"; +char globalGasBinary[] = "@CMAKE_CURRENT_SOURCE_DIR@/../wasm/metric_infinit_loop_global_gas.wasm"; diff --git a/bcos-executor/test/unittest/main.cpp b/bcos-executor/test/unittest/main.cpp new file mode 100644 index 0000000..7e74d52 --- /dev/null +++ b/bcos-executor/test/unittest/main.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: xingqiangbai + * @date 2021-05-17 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN +#define BOOST_TEST_STATIC_LINK + +#include +#include diff --git a/bcos-executor/test/unittest/mock/MockBlock.h b/bcos-executor/test/unittest/mock/MockBlock.h new file mode 100644 index 0000000..2c88326 --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockBlock.h @@ -0,0 +1,60 @@ +#pragma once +#include "MockBlockHeader.h" +#include + +namespace bcos::test +{ +class MockBlock : public bcos::protocol::Block +{ +public: + MockBlock() {} + ~MockBlock() override {} + + void setBlockHeader(protocol::BlockHeader::Ptr blockHeader) override + { + m_blockHeader = blockHeader; + } + void decode(bytesConstRef _data, bool _calculateHash, bool _checkSig) override {} + void encode(bytes& _encodeData) const override {} + crypto::HashType calculateTransactionRoot(const crypto::Hash& hashImpl) const override + { + return {}; + } + crypto::HashType calculateReceiptRoot(const crypto::Hash& hashImpl) const override + { + return {}; + } + int32_t version() const override { return m_blockHeader->version(); } + void setVersion(int32_t _version) override { m_blockHeader->setVersion(_version); } + protocol::BlockType blockType() const override { return protocol::WithTransactionsHash; } + protocol::BlockHeader::ConstPtr blockHeaderConst() const override { return m_blockHeader; } + protocol::BlockHeader::Ptr blockHeader() override { return m_blockHeader; } + protocol::Transaction::ConstPtr transaction(uint64_t _index) const override { return {}; } + protocol::TransactionReceipt::ConstPtr receipt(uint64_t _index) const override { return {}; } + protocol::TransactionMetaData::ConstPtr transactionMetaData(uint64_t _index) const override + { + return {}; + } + crypto::HashType transactionHash(uint64_t _index) const override + { + return Block::transactionHash(_index); + } + void setBlockType(protocol::BlockType _blockType) override {} + void setTransaction(uint64_t _index, protocol::Transaction::Ptr _transaction) override {} + void appendTransaction(protocol::Transaction::Ptr _transaction) override {} + void setReceipt(uint64_t _index, protocol::TransactionReceipt::Ptr _receipt) override {} + void appendReceipt(protocol::TransactionReceipt::Ptr _receipt) override {} + void appendTransactionMetaData(protocol::TransactionMetaData::Ptr _txMetaData) override {} + protocol::NonceListPtr nonces() const override { return {}; } + uint64_t transactionsSize() const override { return 0; } + uint64_t transactionsMetaDataSize() const override { return 0; } + uint64_t transactionsHashSize() const override { return Block::transactionsHashSize(); } + uint64_t receiptsSize() const override { return 0; } + void setNonceList(RANGES::any_view nonces) override {} + RANGES::any_view nonceList() const override { return m_nodelist; } + +private: + protocol::BlockHeader::Ptr m_blockHeader = std::make_shared(1); + protocol::NonceList m_nodelist; +}; +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/mock/MockBlockHeader.h b/bcos-executor/test/unittest/mock/MockBlockHeader.h new file mode 100644 index 0000000..03302c4 --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockBlockHeader.h @@ -0,0 +1,56 @@ +#pragma once +#include + +namespace bcos::test +{ +class MockBlockHeader : public bcos::protocol::BlockHeader +{ +public: + MockBlockHeader(protocol::BlockNumber _number) : m_blockNumber(_number) {} + ~MockBlockHeader() override = default; + + bcos::crypto::HashType hash() const override { return {}; } + void calculateHash(const crypto::Hash& hashImpl) override {} + + void decode(bytesConstRef _data) override {} + void encode(bytes& _encodeData) const override {} + void clear() override {} + uint32_t version() const override { return 0; } + RANGES::any_view + parentInfo() const override + { + return {}; + } + crypto::HashType txsRoot() const override { return {}; } + crypto::HashType receiptsRoot() const override { return {}; } + crypto::HashType stateRoot() const override { return {}; } + protocol::BlockNumber number() const override { return m_blockNumber; } + u256 gasUsed() const override { return {}; } + int64_t timestamp() const override { return 0; } + int64_t sealer() const override { return 0; } + gsl::span sealerList() const override { return {}; } + bytesConstRef extraData() const override { return {}; } + gsl::span signatureList() const override { return {}; } + gsl::span consensusWeights() const override { return {}; } + void setVersion(uint32_t _version) override {} + void setParentInfo(RANGES::any_view parentInfo) override {} + void setTxsRoot(bcos::crypto::HashType _txsRoot) override {} + void setReceiptsRoot(bcos::crypto::HashType _receiptsRoot) override {} + void setStateRoot(bcos::crypto::HashType _stateRoot) override {} + void setNumber(protocol::BlockNumber _blockNumber) override { m_blockNumber = _blockNumber; } + void setGasUsed(u256 _gasUsed) override {} + void setTimestamp(int64_t _timestamp) override {} + void setSealer(int64_t _sealerId) override {} + void setSealerList(const gsl::span& _sealerList) override {} + void setSealerList(std::vector&& _sealerList) override {} + void setConsensusWeights(const gsl::span& _weightList) override {} + void setConsensusWeights(std::vector&& _weightList) override {} + void setExtraData(const bytes& _extraData) override {} + void setExtraData(bytes&& _extraData) override {} + void setSignatureList(const gsl::span& _signatureList) override {} + void setSignatureList(protocol::SignatureList&& _signatureList) override {} + +private: + protocol::BlockNumber m_blockNumber; +}; +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/mock/MockExecutiveFactory.h b/bcos-executor/test/unittest/mock/MockExecutiveFactory.h new file mode 100644 index 0000000..a158e5c --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockExecutiveFactory.h @@ -0,0 +1,49 @@ +#pragma once +#include "../../../src/Common.h" +#include "../../../src/executive/BlockContext.h" +#include "../../../src/executive/ExecutiveFactory.h" +#include "../../../src/executive/TransactionExecutive.h" +#include "../../../src/vm/gas_meter/GasInjector.h" +#include "MockLedger.h" +#include "MockTransactionExecutive.h" +#include + +using namespace bcos; +using namespace bcos::executor; +namespace bcos::test +{ +class MockExecutiveFactory : public bcos::executor::ExecutiveFactory +{ +public: + using Ptr = std::shared_ptr; + MockExecutiveFactory(std::shared_ptr blockContext, + std::shared_ptr>> + precompiledContract, + std::shared_ptr>> + constantPrecompiled, + std::shared_ptr> builtInPrecompiled, + std::shared_ptr gasInjector) + : ExecutiveFactory(std::move(blockContext), precompiledContract, constantPrecompiled, + builtInPrecompiled, gasInjector) + {} + virtual ~MockExecutiveFactory() {} + + + std::shared_ptr build(const std::string&, int64_t, int64_t, bool) override + { + auto ledgerCache = std::make_shared(std::make_shared()); + std::shared_ptr blockContext = std::make_shared( + nullptr, ledgerCache, nullptr, 0, h256(), 0, 0, FiscoBcosSchedule, false, false); + auto executive = + std::make_shared(blockContext, "0x00", 0, 0, instruction); + return executive; + } + +#ifdef WITH_WASM + std::shared_ptr instruction = + std::make_shared(wasm::GetInstructionTable()); +#else + std::shared_ptr instruction; +#endif +}; +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/mock/MockExecutiveFlow.h b/bcos-executor/test/unittest/mock/MockExecutiveFlow.h new file mode 100644 index 0000000..2e1e883 --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockExecutiveFlow.h @@ -0,0 +1,35 @@ +#pragma once +#include "../../../src/CallParameters.h" +#include "../../../src/executive/ExecutiveFlowInterface.h" +#include +#include + +using namespace bcos; +using namespace std; +using namespace bcos::executor; + +namespace bcos::test +{ +class MockExecutiveFlow : public bcos::executor::ExecutiveFlowInterface +{ +public: + using Ptr = std::shared_ptr; + MockExecutiveFlow(std::string& name) : m_name(name) {} + virtual ~MockExecutiveFlow() {} + + + void submit(CallParameters::UniquePtr txInput) override {} + void submit(std::shared_ptr> txInputs) override {} + void asyncRun( + // onTxReturn(output) + std::function onTxReturn, + + // onFinished(success, errorMessage) + std::function onFinished) override{}; + std::string& name() const { return m_name; } + +private: + std::string& m_name; +}; + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/mock/MockKeyPageStorage.h b/bcos-executor/test/unittest/mock/MockKeyPageStorage.h new file mode 100644 index 0000000..bf2e918 --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockKeyPageStorage.h @@ -0,0 +1,133 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file MockKeyPageStorage.h + * @author: kyonGuo + * @date 2022/6/28 + */ + +#pragma once +#include "../../src/Common.h" +#include "MockTransactionalStorage.h" +#include +#include +#include +#include +#include + + +using namespace bcos::protocol; + +namespace bcos::test +{ +class MockKeyPageStorage : public bcos::storage::TransactionalStorageInterface +{ +public: + MockKeyPageStorage(bcos::crypto::Hash::Ptr hashImpl) : m_hashImpl(std::move(hashImpl)) + { + auto pre = std::make_shared(hashImpl); + m_inner = std::make_shared(std::move(pre)); + } + + void asyncGetPrimaryKeys(std::string_view table, + const std::optional& _condition, + std::function)> _callback) noexcept override + { + m_inner->asyncGetPrimaryKeys(table, _condition, std::move(_callback)); + } + + void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) noexcept + override + { + m_inner->asyncGetRow(table, _key, std::move(_callback)); + } + + void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> + _callback) noexcept override + { + m_inner->asyncGetRows(table, keys, std::move(_callback)); + } + + void asyncSetRow(std::string_view table, std::string_view key, storage::Entry entry, + std::function callback) noexcept override + { + m_inner->asyncSetRow(table, key, std::move(entry), std::move(callback)); + } + + void asyncOpenTable(std::string_view tableName, + std::function)> callback) noexcept + override + { + m_inner->asyncOpenTable(tableName, std::move(callback)); + } + + void asyncPrepare(const TwoPCParams& params, + const bcos::storage::TraverseStorageInterface& storage, + std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + + std::mutex mutex; + storage.parallelTraverse( + true, [&](const std::string_view& table, const std::string_view& key, + const storage::Entry& entry) { + std::unique_lock lock(mutex); + + auto keyHex = boost::algorithm::hex_lower(std::string(key)); + // EXECUTOR_LOG(TRACE) << "Merge data" << LOG_KV("table", table) + // << LOG_KV("key", keyHex) << LOG_KV("fields", fields); + + auto myTable = m_inner->openTable(table); + if (!myTable) + { + m_inner->createTable(std::string(table), executor::STORAGE_VALUE); + myTable = m_inner->openTable(std::string(table)); + } + myTable->setRow(key, entry); + + return true; + }); + + callback(nullptr, 0, ""); + } + + void asyncCommit(const TwoPCParams& params, + std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr, 0); + } + + void asyncRollback( + const TwoPCParams& params, std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr); + } + + std::pair count(const std::string_view& table) + { + return m_inner->count(table); + } + + bcos::storage::KeyPageStorage::Ptr m_inner; + bcos::crypto::Hash::Ptr m_hashImpl; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/mock/MockLedger.h b/bcos-executor/test/unittest/mock/MockLedger.h new file mode 100644 index 0000000..10e4080 --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockLedger.h @@ -0,0 +1,148 @@ +#pragma once + +#include "MockBlock.h" +#include +#include +#include +#include + +namespace bcos::test +{ +class MockLedger : public bcos::ledger::LedgerInterface +{ +public: + using Ptr = std::shared_ptr; + static const uint32_t TX_GAS_LIMIT = 3000000666; + + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) override + { + BOOST_CHECK(false); // Need implementations + }; + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr, + std::function _callback) override + { + if (!_callback) + { + return; + } + _callback(nullptr); + } + + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr) override + { + BOOST_CHECK(false); // Need implementations + return nullptr; + }; + + protocol::BlockHeader::Ptr m_blockHeader; + void setBlockHeader(protocol::BlockHeader::Ptr blockHeader) + { + if (blockHeader) + { + m_blockHeader = blockHeader; + m_blockNumber = blockHeader->number(); + } + } + void asyncGetBlockDataByNumber(protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) override + { + auto block = std::make_shared(); + if (m_blockHeader) + { + block->setBlockHeader(m_blockHeader); + } + block->blockHeader()->setNumber(m_blockNumber); + _onGetBlock(nullptr, block); + }; + + protocol::BlockNumber m_blockNumber = 0; + void setBlockNumber(protocol::BlockNumber blockNumber) { m_blockNumber = blockNumber; } + + void asyncGetBlockNumber( + std::function _onGetBlock) override + { + _onGetBlock(nullptr, m_blockNumber); + }; + + void asyncGetBlockHashByNumber(protocol::BlockNumber _blockNumber, + std::function _onGetBlock) override + { + _onGetBlock(nullptr, crypto::HashType(_blockNumber)); + }; + + void asyncGetBlockNumberByHash(crypto::HashType const& _blockHash, + std::function _onGetBlock) override + { + BOOST_CHECK(false); // Need implementations + }; + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) override + { + BOOST_CHECK(false); // Need implementations + }; + + + void asyncGetTransactionReceiptByHash(crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) override + { + BOOST_CHECK(false); // Need implementations + }; + + + void asyncGetTotalTransactionCount(std::function + _callback) override + { + BOOST_CHECK(false); // Need implementations + }; + + void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) override + {} + + + void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) override + { + if (std::string(bcos::ledger::SYSTEM_KEY_COMPATIBILITY_VERSION) == std::string(_key)) + { + std::stringstream ss; + ss << bcos::protocol::BlockVersion::MAX_VERSION; + + _onGetConfig(nullptr, ss.str(), m_blockNumber); + return; + } + else if (std::string(bcos::ledger::SYSTEM_KEY_TX_GAS_LIMIT) == std::string(_key)) + { + _onGetConfig(nullptr, std::to_string(MockLedger::TX_GAS_LIMIT), m_blockNumber); + return; + } + + + BOOST_CHECK(false); // Need implementations + }; + + + void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) override + { + BOOST_CHECK(false); // Need implementations + }; + + void asyncGetNonceList(protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) override + { + BOOST_CHECK(false); // Need implementations + }; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/mock/MockTransactionExecutive.h b/bcos-executor/test/unittest/mock/MockTransactionExecutive.h new file mode 100644 index 0000000..18d736b --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockTransactionExecutive.h @@ -0,0 +1,52 @@ +#pragma once +#include "../../../src/executive/BlockContext.h" +#include "../../src/Common.h" +#include "../../src/executive/TransactionExecutive.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executor/TransactionExecutor.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include + + +using namespace bcos; +using namespace bcos::executor; +namespace bcos::test +{ +class MockTransactionExecutive : public bcos::executor::CoroutineTransactionExecutive +{ +public: + using Ptr = std::shared_ptr; + MockTransactionExecutive(std::weak_ptr blockContext, + std::string contractAddress, int64_t contextID, int64_t seq, + std::shared_ptr& gasInjector) + : CoroutineTransactionExecutive( + std::move(blockContext), contractAddress, contextID, seq, gasInjector) + {} + + virtual ~MockTransactionExecutive() {} + + CallParameters::UniquePtr start(CallParameters::UniquePtr input) override { return input; } + CallParameters::UniquePtr resume() override + { + auto callParameters = std::make_unique(CallParameters::Type::MESSAGE); + callParameters->staticCall = false; + callParameters->codeAddress = "aabbccddee"; + callParameters->contextID = 1; + callParameters->seq = 1; + return callParameters; + } + + void setExchangeMessage(CallParameters::UniquePtr callParameters) override + { + m_exchangeMessage = std::move(callParameters); + } + void appendResumeKeyLocks(std::vector keyLocks) override + { + std::copy( + keyLocks.begin(), keyLocks.end(), std::back_inserter(m_exchangeMessage->keyLocks)); + } + +private: + CallParameters::UniquePtr m_exchangeMessage = nullptr; +}; +} // namespace bcos::test diff --git a/bcos-executor/test/unittest/mock/MockTransactionalStorage.h b/bcos-executor/test/unittest/mock/MockTransactionalStorage.h new file mode 100644 index 0000000..4c0ee1d --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockTransactionalStorage.h @@ -0,0 +1,107 @@ +#pragma once + +#include "../../src/Common.h" +#include +#include +#include +#include +#include + +using namespace bcos::protocol; + +namespace bcos::test +{ +class MockTransactionalStorage : public bcos::storage::TransactionalStorageInterface +{ +public: + MockTransactionalStorage(bcos::crypto::Hash::Ptr hashImpl) : m_hashImpl(std::move(hashImpl)) + { + m_inner = std::make_shared(nullptr); + m_inner->setEnableTraverse(true); + } + + void asyncGetPrimaryKeys(std::string_view table, + const std::optional& _condition, + std::function)> _callback) noexcept override + { + m_inner->asyncGetPrimaryKeys(table, _condition, std::move(_callback)); + } + + void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) noexcept + override + { + m_inner->asyncGetRow(table, _key, std::move(_callback)); + } + + void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> + _callback) noexcept override + { + m_inner->asyncGetRows(table, keys, std::move(_callback)); + } + + void asyncSetRow(std::string_view table, std::string_view key, storage::Entry entry, + std::function callback) noexcept override + { + m_inner->asyncSetRow(table, key, std::move(entry), std::move(callback)); + } + + void asyncOpenTable(std::string_view tableName, + std::function)> callback) noexcept + override + { + m_inner->asyncOpenTable(tableName, std::move(callback)); + } + + void asyncPrepare(const TwoPCParams& params, + const bcos::storage::TraverseStorageInterface& storage, + std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + + std::mutex mutex; + storage.parallelTraverse( + true, [&](const std::string_view& table, const std::string_view& key, + const storage::Entry& entry) { + std::unique_lock lock(mutex); + + auto keyHex = boost::algorithm::hex_lower(std::string(key)); + // EXECUTOR_LOG(TRACE) << "Merge data" << LOG_KV("table", table) + // << LOG_KV("key", keyHex) << LOG_KV("fields", fields); + + auto myTable = m_inner->openTable(table); + if (!myTable) + { + m_inner->createTable(std::string(table), executor::STORAGE_VALUE); + myTable = m_inner->openTable(std::string(table)); + } + myTable->setRow(key, entry); + + return true; + }); + + callback(nullptr, 0, ""); + } + + void asyncCommit(const TwoPCParams& params, + std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr, 0); + } + + void asyncRollback( + const TwoPCParams& params, std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr); + } + + bcos::storage::StateStorage::Ptr m_inner; + bcos::crypto::Hash::Ptr m_hashImpl; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/unittest/mock/MockTxPool.h b/bcos-executor/test/unittest/mock/MockTxPool.h new file mode 100644 index 0000000..560afaa --- /dev/null +++ b/bcos-executor/test/unittest/mock/MockTxPool.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include + +namespace bcos::test +{ +class MockTxPool : public txpool::TxPoolInterface +{ +public: + void start() override {} + void stop() override {} + task::Task submitTransaction( + protocol::Transaction::Ptr transaction) override + { + co_return nullptr; + } + void asyncSealTxs(uint64_t, bcos::txpool::TxsHashSetPtr, + std::function) + override + {} + void asyncMarkTxs(bcos::crypto::HashListPtr, bool, bcos::protocol::BlockNumber, + bcos::crypto::HashType const&, std::function) override + {} + void asyncVerifyBlock(bcos::crypto::PublicPtr, bytesConstRef const&, + std::function) override + {} + void asyncNotifyBlockResult(bcos::protocol::BlockNumber, + bcos::protocol::TransactionSubmitResultsPtr, std::function) override + {} + void asyncNotifyTxsSyncMessage(bcos::Error::Ptr, std::string const&, bcos::crypto::NodeIDPtr, + bytesConstRef, std::function) override + {} + void notifyConsensusNodeList( + bcos::consensus::ConsensusNodeList const&, std::function) override + {} + void notifyObserverNodeList( + bcos::consensus::ConsensusNodeList const&, std::function) override + {} + void asyncGetPendingTransactionSize(std::function) override {} + void asyncResetTxPool(std::function) override {} + + void asyncFillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled) override + { + BOOST_CHECK_GT(_txsHash->size(), 0); + auto transactions = std::make_shared(); + for (auto& hash : *_txsHash) + { + auto it = hash2Transaction.find(hash); + if (it != hash2Transaction.end()) + { + transactions->push_back(it->second); + } + else + { + transactions->push_back(nullptr); + } + } + + _onBlockFilled(nullptr, std::move(transactions)); + } + + void notifyConnectedNodes( + const bcos::crypto::NodeIDSet&, std::function)>) override + {} + + std::map hash2Transaction; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-executor/test/wasm/infinit_loop.wasm b/bcos-executor/test/wasm/infinit_loop.wasm new file mode 100644 index 0000000000000000000000000000000000000000..ab6a517f73091e06e56932ca3d45ab82110d93e0 GIT binary patch literal 267 zcmYL^O=^{v36#>OK?&;lm1MiCn^6B|vQqvA%YU(T55OxHqESe9lqODS}|7e+{;uJ)L$m<-Rv$~P_@OZ}2**@>?16H-U vJ|OXtbEcMB$rsqnze|L`LFEbQ3~Rata0dxUI?0316k4bKgP@{;%8=?mi-99p literal 0 HcmV?d00001 diff --git a/bcos-executor/test/wasm/metric_infinit_loop_useGas.wasm b/bcos-executor/test/wasm/metric_infinit_loop_useGas.wasm new file mode 100644 index 0000000000000000000000000000000000000000..d291f148c1d7ff79c93e16742c651d4cd159990e GIT binary patch literal 145 zcmW;Cu@V6>6ouh)?~Rz*FhZ%K@d#?tcmOYuAY&LSMpmJbSC`#We8rg`A-4p8X5s;_ zN*z4?z-v~gbIMJQ-LXsWaE+kh(VrX-A%jI27zu&LbJmymdZaH{wc+-JG+W*<6)LiG a3rj2P>0aR;saQC+G=VYGA#=KqmgWzOdm2Xo literal 0 HcmV?d00001 diff --git a/bcos-executor/tools/CMakeLists.txt b/bcos-executor/tools/CMakeLists.txt new file mode 100644 index 0000000..f56e091 --- /dev/null +++ b/bcos-executor/tools/CMakeLists.txt @@ -0,0 +1,5 @@ + + +add_executable(injector inject_meter.cpp) +target_include_directories(injector PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../src/) +target_link_libraries(injector PUBLIC ${EXECUTOR_TARGET} ${TOOL_TARGET} wabt) diff --git a/bcos-executor/tools/inject_meter.cpp b/bcos-executor/tools/inject_meter.cpp new file mode 100644 index 0000000..2e3be9e --- /dev/null +++ b/bcos-executor/tools/inject_meter.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the tool of gas injector + * @file inject_meter.cpp + * @author: xingqiangbai + * @date: 2021-11-01 + */ + +#include "src/binary-reader-ir.h" +#include "src/binary-reader.h" +#include "src/error-formatter.h" +#include "src/ir.h" +#include "src/option-parser.h" +#include "src/stream.h" +#include "src/validator.h" +#include "src/wast-lexer.h" +#include "vm/gas_meter/GasInjector.h" +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace wabt; + +static std::unique_ptr s_log_stream; + +int main(int argc, char* argv[]) +{ + if (argc != 2) + { + cerr << "The number of parameters not equal to 2" << endl; + return 0; + } + std::vector file_data; + auto result = wabt::ReadFile(argv[1], &file_data); + filesystem::path p(argv[1]); + if (Succeeded(result)) + { + wasm::GasInjector injector(wasm::GetInstructionTable()); + auto ret = injector.InjectMeter(file_data); + if (ret.status == wasm::GasInjector::Status::Success) + { + Errors errors; + Module module; + const bool kStopOnFirstError = true; + // s_log_stream = FileStream::CreateStdout(); + auto defaultFeature = Features(); + ReadBinaryOptions options( + defaultFeature, s_log_stream.get(), true, kStopOnFirstError, true); + result = ReadBinaryIr(p.filename().generic_string().c_str(), + (const char*)ret.byteCode->data(), ret.byteCode->size(), options, &errors, &module); + if (Succeeded(result)) + { + ValidateOptions voptions(defaultFeature); + result = ValidateModule(&module, &errors, voptions); + if (result == Result::Ok) + { + ofstream out("metric_" + p.filename().generic_string(), + std::ofstream::out | std::ofstream::binary | std::ofstream::trunc); + out.write((const char*)ret.byteCode->data(), ret.byteCode->size()); + out.close(); + cout << "InjectMeter success" << endl; + return 0; + } + } + cout << "validate failed" << endl; + FormatErrorsToFile(errors, Location::Type::Binary); + } + cerr << "InjectMeter failed, reason:" + << (ret.status == wasm::GasInjector::Status::InvalidFormat ? "invalid format" : + "bad instruction") + << endl; + } + cerr << "Read file failed" << endl; + return -1; +} \ No newline at end of file diff --git a/bcos-framework/CMakeLists.txt b/bcos-framework/CMakeLists.txt new file mode 100644 index 0000000..3b06c4d --- /dev/null +++ b/bcos-framework/CMakeLists.txt @@ -0,0 +1,49 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-framework +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.12) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +project(bcos-framework VERSION ${VERSION}) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-framework) + +find_package(Microsoft.GSL CONFIG REQUIRED) + +add_library(bcos-framework INTERFACE) +target_include_directories(bcos-framework INTERFACE + $ + $) +target_link_libraries(bcos-framework INTERFACE bcos-crypto bcos-task Microsoft.GSL::GSL) + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("framework-cov" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () + +include(GNUInstallDirs) +install(TARGETS bcos-framework EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-framework" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-framework/bcos-framework/Common.h b/bcos-framework/bcos-framework/Common.h new file mode 100644 index 0000000..1e8a96a --- /dev/null +++ b/bcos-framework/bcos-framework/Common.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + */ +#pragma once +#include +#include +#include +#include + +#define METRIC LOG_BADGE("METRIC") + + +//--------------- Definition of signal ----------------------- + +#define GATEWAY_RELOAD_P2P_CONFIG SIGUSR1 +#define BOOST_LOG_RELOAD_LOG_LEVEL SIGUSR2 \ No newline at end of file diff --git a/bcos-framework/bcos-framework/consensus/ConsensusInterface.h b/bcos-framework/bcos-framework/consensus/ConsensusInterface.h new file mode 100644 index 0000000..8666092 --- /dev/null +++ b/bcos-framework/bcos-framework/consensus/ConsensusInterface.h @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Consensus module + * @file ConsensusInterface.h + * @author: yujiechen + * @date 2021-04-08 + */ +#pragma once +#include "../ledger/LedgerConfig.h" +#include "../protocol/Block.h" +#include "../protocol/Protocol.h" +#include "../protocol/ProtocolTypeDef.h" +#include "ConsensusTypeDef.h" +#include +#include +#include + + +namespace bcos::consensus +{ +// ConsensusInterface is the interface of consensus exposed to other modules +class ConsensusInterface +{ +public: + using Ptr = std::shared_ptr; + ConsensusInterface() = default; + virtual ~ConsensusInterface() = default; + + virtual void start() = 0; + virtual void stop() = 0; + + virtual void asyncSubmitProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) = 0; + + virtual void asyncGetPBFTView(std::function _onGetView) = 0; + + // the sync module calls this interface to check block + virtual void asyncCheckBlock(bcos::protocol::Block::Ptr _block, + std::function _onVerifyFinish) = 0; + // the sync module calls this interface to notify new block + virtual void asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) = 0; + + // called by frontService to dispatch message + virtual void asyncNotifyConsensusMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) = 0; + + + // for the sync module to notify the syncing number + virtual void notifyHighestSyncingNumber(bcos::protocol::BlockNumber _number) = 0; + + virtual void asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) = 0; + + // get the consensusNodeList + // Note: if separate sealer with the PBFT module, should implement with notify + virtual ConsensusNodeList consensusNodeList() const { return ConsensusNodeList(); } + virtual uint64_t nodeIndex() const { return 0; } + virtual uint32_t compatibilityVersion() const + { + return (uint32_t)(bcos::protocol::DEFAULT_VERSION); + } + + virtual void asyncGetConsensusStatus( + std::function _onGetConsensusStatus) = 0; + virtual void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) = 0; + + virtual void clearExceptionProposalState(bcos::protocol::BlockNumber) {} +}; +} // namespace bcos::consensus diff --git a/bcos-framework/bcos-framework/consensus/ConsensusNode.h b/bcos-framework/bcos-framework/consensus/ConsensusNode.h new file mode 100644 index 0000000..43beb99 --- /dev/null +++ b/bcos-framework/bcos-framework/consensus/ConsensusNode.h @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information of the consensus node with weight + * @file ConsensusNode.h + * @author: yujiechen + * @date 2021-04-12 + */ +#pragma once +#include "ConsensusNodeInterface.h" +namespace bcos +{ +namespace consensus +{ +class ConsensusNode : public ConsensusNodeInterface +{ +public: + using Ptr = std::shared_ptr; + explicit ConsensusNode(bcos::crypto::PublicPtr _nodeID) : m_nodeID(_nodeID) {} + + ConsensusNode(bcos::crypto::PublicPtr _nodeID, uint64_t _weight) + : m_nodeID(_nodeID), m_weight(_weight) + {} + + ~ConsensusNode() override {} + + bcos::crypto::PublicPtr nodeID() const override { return m_nodeID; } + uint64_t weight() const override { return m_weight; } + +private: + bcos::crypto::PublicPtr m_nodeID; + uint64_t m_weight = 100; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/consensus/ConsensusNodeInterface.h b/bcos-framework/bcos-framework/consensus/ConsensusNodeInterface.h new file mode 100644 index 0000000..108320f --- /dev/null +++ b/bcos-framework/bcos-framework/consensus/ConsensusNodeInterface.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information of the consensus node + * @file ConsensusNodeInterface.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace consensus +{ +class ConsensusNodeInterface +{ +public: + using Ptr = std::shared_ptr; + ConsensusNodeInterface() = default; + virtual ~ConsensusNodeInterface() = default; + + // the nodeID of the consensus node + [[nodiscard]] virtual bcos::crypto::PublicPtr nodeID() const = 0; + + [[nodiscard]] virtual uint64_t weight() const { return 100; } +}; +using ConsensusNodeList = std::vector; +using ConsensusNodeListPtr = std::shared_ptr; + +struct ConsensusNodeComparator +{ + bool operator()( + const ConsensusNodeInterface::Ptr& _left, const ConsensusNodeInterface::Ptr& _right) const + { + if (_left->nodeID()->data() == _right->nodeID()->data()) + { + return _left->weight() < _right->weight(); + } + return (_left->nodeID()->data() < _right->nodeID()->data()); + } +}; + +inline std::string decsConsensusNodeList(ConsensusNodeList const& _nodeList) +{ + std::ostringstream stringstream; + for (const auto& node : _nodeList) + { + stringstream << LOG_KV(node->nodeID()->shortHex(), std::to_string(node->weight())); + } + return stringstream.str(); +} +} // namespace consensus +} // namespace bcos diff --git a/bcos-framework/bcos-framework/consensus/ConsensusTypeDef.h b/bcos-framework/bcos-framework/consensus/ConsensusTypeDef.h new file mode 100644 index 0000000..860cccf --- /dev/null +++ b/bcos-framework/bcos-framework/consensus/ConsensusTypeDef.h @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief data type for consensus module + * @file ConsensusTypeDef.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include +namespace bcos::consensus +{ +using IndexType = uint64_t; +using ViewType = uint64_t; +const ViewType MaxView = std::numeric_limits::max() / 2; +} // namespace bcos diff --git a/bcos-framework/bcos-framework/dispatcher/SchedulerInterface.h b/bcos-framework/bcos-framework/dispatcher/SchedulerInterface.h new file mode 100644 index 0000000..6de799c --- /dev/null +++ b/bcos-framework/bcos-framework/dispatcher/SchedulerInterface.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Scheduler + * @file SchedulerInterface.h + * @author: ancelmo + * @date: 2021-07-27 + */ + +#pragma once +#include "../executor/ParallelTransactionExecutorInterface.h" +#include "../ledger/LedgerConfig.h" +#include "../protocol/Block.h" +#include "../protocol/ProtocolTypeDef.h" +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ +class SchedulerInterface +{ +public: + using Ptr = std::shared_ptr; + SchedulerInterface() = default; + virtual ~SchedulerInterface() {} + + // by pbft & sync + virtual void executeBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function + callback) = 0; + + // by pbft & sync + virtual void commitBlock(bcos::protocol::BlockHeader::Ptr header, + std::function callback) = 0; + + // by console, query committed committing executing + virtual void status( + std::function callback) = 0; + + // by rpc + virtual void call(protocol::Transaction::Ptr tx, + std::function) = 0; + + // by executor + virtual void registerExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + std::function callback) = 0; + + virtual void unregisterExecutor( + const std::string& name, std::function callback) = 0; + + // clear all status + virtual void reset(std::function callback) = 0; + virtual void getCode( + std::string_view contract, std::function callback) = 0; + + virtual void getABI( + std::string_view contract, std::function callback) = 0; + + // for performance, do the things before executing block in executor. + virtual void preExecuteBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function callback) = 0; + + virtual void stop() {}; +}; +} // namespace bcos::scheduler diff --git a/bcos-framework/bcos-framework/dispatcher/SchedulerTypeDef.h b/bcos-framework/bcos-framework/dispatcher/SchedulerTypeDef.h new file mode 100644 index 0000000..f9529de --- /dev/null +++ b/bcos-framework/bcos-framework/dispatcher/SchedulerTypeDef.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief typedef for scheduler module + * @file SchedulerTypeDef.h + * @author: yujiechen + * @date: 2021-04-9 + */ +#pragma once +#include +namespace bcos +{ +namespace scheduler +{ +enum SchedulerError +{ + UnknownError = -70000, + InvalidStatus, + InvalidBlockNumber, + InvalidBlocks, + NextBlockError, + PrewriteBlockError, + CommitError, + RollbackError, + UnexpectedKeyLockError, + BatchError, + SerialExecuteError, + DMCError, + DAGError, + CallError, + ExecutorNotEstablishedError, + fetchGasLimitError, + Stopped, + InvalidBlockVersion, + BlockIsCommitting, +}; +} // namespace scheduler +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/election/FailOverTypeDef.h b/bcos-framework/bcos-framework/election/FailOverTypeDef.h new file mode 100644 index 0000000..2c9f491 --- /dev/null +++ b/bcos-framework/bcos-framework/election/FailOverTypeDef.h @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FailOverTypeDef.h + * @author: yujiechen + * @date 2022-04-29 + */ +#pragma once +#include +namespace bcos +{ +namespace election +{ +const char* const CONSENSUS_LEADER_DIR = "/consensus/"; +} +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/election/LeaderElectionInterface.h b/bcos-framework/bcos-framework/election/LeaderElectionInterface.h new file mode 100644 index 0000000..c7f0198 --- /dev/null +++ b/bcos-framework/bcos-framework/election/LeaderElectionInterface.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the interface for LeaderElection + * @file LeaderElectionInterface.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "bcos-framework/protocol/MemberInterface.h" +#include +namespace bcos +{ +namespace election +{ +class LeaderElectionInterface +{ +public: + using Ptr = std::shared_ptr; + LeaderElectionInterface() = default; + virtual ~LeaderElectionInterface() {} + + virtual void start() = 0; + virtual void stop() = 0; + virtual void updateSelfConfig(bcos::protocol::MemberInterface::Ptr _self) = 0; + virtual bool electionClusterOk() const = 0; + + // called when campaign success, this logic should start to work when campaign success + virtual void registerOnCampaignHandler( + std::function _onCampaignHandler) = 0; + // called when keep-alive exception + virtual void registerKeepAliveExceptionHandler( + std::function _handler) = 0; + // handler called when the election cluster down + virtual void registerOnElectionClusterException(std::function _handler) = 0; + // handler called when the election cluster recover + virtual void registerOnElectionClusterRecover(std::function _handler) = 0; +}; + +class LeaderElectionFactoryInterface +{ +public: + using Ptr = std::shared_ptr; + LeaderElectionFactoryInterface() = default; + virtual ~LeaderElectionFactoryInterface() {} + virtual LeaderElectionInterface::Ptr createLeaderElection(std::string const& _memberID, + std::string const& _memberConfig, std::string const& _etcdEndPoint, + std::string const& _leaderKey, std::string const& _purpose, unsigned _leaseTTL, + const std::string& _caPath, const std::string& _certPath, const std::string& _keyPath) = 0; +}; + +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/election/LeaderEntryPointInterface.h b/bcos-framework/bcos-framework/election/LeaderEntryPointInterface.h new file mode 100644 index 0000000..b7ac50b --- /dev/null +++ b/bcos-framework/bcos-framework/election/LeaderEntryPointInterface.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the leader entry-point + * @file LeaderEntryPointInterface.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "bcos-framework/protocol/MemberInterface.h" +#include +namespace bcos +{ +namespace election +{ +class LeaderEntryPointInterface +{ +public: + using Ptr = std::shared_ptr; + LeaderEntryPointInterface() = default; + virtual ~LeaderEntryPointInterface() {} + + virtual bcos::protocol::MemberInterface::Ptr getLeaderByKey(std::string const& _leaderKey) = 0; + virtual std::map getAllLeaders() = 0; + + virtual void addMemberChangeNotificationHandler( + std::function) = 0; + virtual void addMemberDeleteNotificationHandler( + std::function _handler) = 0; + virtual void start() = 0; + virtual void stop() = 0; +}; + +class LeaderEntryPointFactory +{ +public: + using Ptr = std::shared_ptr(); + LeaderEntryPointFactory() = default; + virtual ~LeaderEntryPointFactory() {} + + virtual LeaderEntryPointInterface::Ptr createLeaderEntryPoint(std::string const& _etcdEndPoint, + std::string const& _watchDir, std::string const& _purpose, const std::string& _caPath, + const std::string& _certPath, const std::string& _keyPath) = 0; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/executor/ExecuteError.h b/bcos-framework/bcos-framework/executor/ExecuteError.h new file mode 100644 index 0000000..bae34b9 --- /dev/null +++ b/bcos-framework/bcos-framework/executor/ExecuteError.h @@ -0,0 +1,25 @@ +#pragma once + +namespace bcos +{ +namespace executor +{ +enum ExecuteError : int32_t +{ + SUCCESS = -80000, + INVALID_BLOCKNUMBER, + GETHASH_ERROR, + CALL_ERROR, + EXECUTE_ERROR, + PREPARE_ERROR, + COMMIT_ERROR, + ROLLBACK_ERROR, + DAG_ERROR, + DEAD_LOCK, + TABLE_NOT_FOUND, + STOPPED, + SCHEDULER_TERM_ID_ERROR, // to notify switch + INTERNAL_ERROR +}; +} +} // namespace bcos diff --git a/bcos-framework/bcos-framework/executor/ExecutionMessage.h b/bcos-framework/bcos-framework/executor/ExecutionMessage.h new file mode 100644 index 0000000..df8010a --- /dev/null +++ b/bcos-framework/bcos-framework/executor/ExecutionMessage.h @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of ExecutionParams + * @file ExecutionMessage.h + * @author: ancelmo + * @date: 2021-09-22 + */ + +#pragma once +#include "../protocol/LogEntry.h" +#include "../protocol/ProtocolTypeDef.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ + +static const std::string SERIAL_EXECUTIVE_FLOW_ADDRESS = + std::string("serial_executive_flow_address"); + +const bcos::bytes GET_CODE_INPUT_BYTES = asBytes(std::string("getCode")); + +class ExecutionMessage +{ +public: + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + + virtual ~ExecutionMessage() = default; + + enum Type : int8_t + { + TXHASH = 0, // Received an new transaction from scheduler + MESSAGE, // Send/Receive an external call to/from another contract + FINISHED, // Send a finish to another contract + KEY_LOCK, // Send a wait key lock to scheduler, or release key lock + SEND_BACK, // Send a dag refuse to scheduler + REVERT, // Send/Receive a revert to/from previous external call + }; + + static std::string getTypeName(Type type) + { + switch (type) + { + case TXHASH: + return "TXHASH"; + case MESSAGE: + return "MESSAGE"; + case FINISHED: + return "FINISHED"; + case KEY_LOCK: + return "KEY_LOCK"; + case SEND_BACK: + return "SEND_BACK"; + case REVERT: + return "REVERT"; + } + return "Unknown"; + } + + std::string toString() + { + std::stringstream ss; + ss << "[" << (staticCall() ? "call" : "tx") << "|" << contextID() << "|" << seq() << "|" + << getTypeName(type()) << "|" << from() << "->" << to() << "|" << gasAvailable() << "|" + << toHex(keyLockAcquired()) << "|" << keyLocks().size() << ":"; + for (auto& lock : keyLocks()) + { + ss << toHex(lock) << "."; + } + ss << "]"; + + if (delegateCall()) + { + ss << "(delegateCall|" << delegateCallSender() << "|" << from() << "->" + << delegateCallAddress() << "|code.size=" << delegateCallCode().size() << ")"; + } + return ss.str(); + } + + // ----------------------------------------------- + // Request fields + // ----------------------------------------------- + virtual Type type() const = 0; + virtual void setType(Type type) = 0; + + virtual crypto::HashType transactionHash() const = 0; + virtual void setTransactionHash(crypto::HashType hash) = 0; + + virtual int64_t contextID() const = 0; + virtual void setContextID(int64_t contextID) = 0; + + virtual int64_t seq() const = 0; + virtual void setSeq(int64_t seq) = 0; + + virtual std::string_view origin() const = 0; // readable format + virtual void setOrigin(std::string origin) = 0; + + virtual std::string_view from() const = 0; // readable format + virtual void setFrom(std::string from) = 0; + + virtual std::string_view to() const = 0; // readable format + virtual void setTo(std::string to) = 0; + + virtual std::string_view abi() const = 0; // readable format + virtual void setABI(std::string to) = 0; + + virtual int32_t depth() const = 0; + virtual void setDepth(int32_t depth) = 0; + + virtual bool create() const = 0; + virtual void setCreate(bool create) = 0; + + virtual bool internalCreate() const = 0; + virtual void setInternalCreate(bool internalCreate) = 0; + + virtual bool internalCall() const = 0; + virtual void setInternalCall(bool internalCall) = 0; + + // ----------------------------------------------- + // Request / Response common fields + // ----------------------------------------------- + virtual int64_t gasAvailable() const = 0; + virtual void setGasAvailable(int64_t gasAvailable) = 0; + + virtual bcos::bytesConstRef data() const = 0; + virtual bytes takeData() = 0; + virtual void setData(bcos::bytes data) = 0; + + virtual bool staticCall() const = 0; + virtual void setStaticCall(bool staticCall) = 0; + + // for evm + virtual std::optional createSalt() const = 0; + virtual void setCreateSalt(u256 createSalt) = 0; + + // ----------------------------------------------- + // Response fields + // ----------------------------------------------- + virtual int32_t status() const = 0; + virtual void setStatus(int32_t status) = 0; + + virtual int32_t evmStatus() const = 0; + virtual void setEvmStatus(int32_t evmstatus) = 0; + + virtual std::string_view message() const = 0; + virtual void setMessage(std::string message) = 0; + + virtual gsl::span const logEntries() const = 0; + virtual std::vector takeLogEntries() = 0; + virtual void setLogEntries(std::vector logEntries) = 0; + + // for evm + virtual std::string_view newEVMContractAddress() const = 0; + virtual void setNewEVMContractAddress(std::string newEVMContractAddress) = 0; + + // ----------------------------------------------- + // Key locks + // ----------------------------------------------- + virtual gsl::span keyLocks() const = 0; + virtual std::vector takeKeyLocks() = 0; + virtual void setKeyLocks(std::vector keyLocks) = 0; + + virtual std::string_view keyLockAcquired() const = 0; + virtual void setKeyLockAcquired(std::string keyLock) = 0; + + virtual bool delegateCall() const = 0; + virtual void setDelegateCall(bool delegateCall) = 0; + + virtual std::string_view delegateCallAddress() const = 0; + virtual void setDelegateCallAddress(std::string delegateCallAddress) = 0; + + virtual bcos::bytesConstRef delegateCallCode() const = 0; + virtual bytes takeDelegateCallCode() = 0; + virtual void setDelegateCallCode(bcos::bytes delegateCallCode) = 0; + + virtual std::string_view delegateCallSender() const = 0; + virtual void setDelegateCallSender(std::string delegateCallSender) = 0; +}; + +class ExecutionMessageFactory +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + virtual ~ExecutionMessageFactory() = default; + + virtual bcos::protocol::ExecutionMessage::UniquePtr createExecutionMessage() = 0; +}; +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/executor/ExecutorStatus.h b/bcos-framework/bcos-framework/executor/ExecutorStatus.h new file mode 100644 index 0000000..cb7ab3f --- /dev/null +++ b/bcos-framework/bcos-framework/executor/ExecutorStatus.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of ExecutorStatus + * @file ExecutorStatus.h + * @author: jimmyshi + * @date: 2021-07-03 + */ + +#pragma once +#include "../protocol/LogEntry.h" +#include "../protocol/ProtocolTypeDef.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +class ExecutorStatus +{ +public: + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + + virtual ~ExecutorStatus() = default; + + int64_t seq() const { return m_seq; } + void setSeq(int64_t seq) { m_seq = seq; } + +private: + int64_t m_seq; +}; + + +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/executor/NativeExecutionMessage.h b/bcos-framework/bcos-framework/executor/NativeExecutionMessage.h new file mode 100644 index 0000000..9cf28b5 --- /dev/null +++ b/bcos-framework/bcos-framework/executor/NativeExecutionMessage.h @@ -0,0 +1,177 @@ +#pragma once + +#include "bcos-framework/executor/ExecutionMessage.h" +#include +#include +#include +#include +#include + +namespace bcos::executor +{ +class NativeExecutionMessage : public protocol::ExecutionMessage +{ +public: + NativeExecutionMessage() = default; + virtual ~NativeExecutionMessage() {} + + Type type() const override { return m_type; } + void setType(Type type) override { m_type = type; } + + crypto::HashType transactionHash() const override { return m_transactionHash; } + void setTransactionHash(crypto::HashType hash) override { m_transactionHash = hash; } + + int64_t contextID() const override { return m_contextID; } + void setContextID(int64_t contextID) override { m_contextID = contextID; } + + int64_t seq() const override { return m_seq; } + void setSeq(int64_t seq) override { m_seq = seq; } + + std::string_view origin() const override { return m_origin; } + void setOrigin(std::string origin) override { m_origin = std::move(origin); } + + std::string_view from() const override { return m_from; } + void setFrom(std::string from) override { m_from = std::move(from); } + + std::string_view to() const override { return m_to; } + void setTo(std::string to) override { m_to = std::move(to); } + + std::string_view abi() const override { return m_abi; } + void setABI(std::string abi) override { m_abi = std::move(abi); } + + int32_t depth() const override { return m_depth; } + void setDepth(int32_t depth) override { m_depth = depth; } + + bool create() const override { return m_create; } + void setCreate(bool create) override { m_create = create; } + + bool internalCreate() const override { return m_internalCreate; } + void setInternalCreate(bool internalCreate) override { m_internalCreate = internalCreate; } + + bool internalCall() const override { return m_internalCall; } + void setInternalCall(bool internalCall) override { m_internalCall = internalCall; } + + int64_t gasAvailable() const override { return m_gasAvailable; } + void setGasAvailable(int64_t gasAvailable) override { m_gasAvailable = gasAvailable; } + + bcos::bytesConstRef data() const override { return ref(m_data); } + bcos::bytes takeData() override { return std::move(m_data); } + void setData(bcos::bytes input) override { m_data = std::move(input); } + + bool staticCall() const override { return m_staticCall; } + void setStaticCall(bool staticCall) override { m_staticCall = staticCall; } + + std::optional createSalt() const override { return m_createSalt; } + void setCreateSalt(u256 createSalt) override { m_createSalt = createSalt; } + + int32_t status() const override { return m_status; } + void setStatus(int32_t status) override { m_status = status; } + + int32_t evmStatus() const override { return m_evmStatus; } + void setEvmStatus(int32_t evmStatus) override { m_evmStatus = evmStatus; } + + std::string_view message() const override { return m_message; } + void setMessage(std::string message) override { m_message = std::move(message); } + + gsl::span const logEntries() const override + { + return m_logEntries; + } + std::vector takeLogEntries() override + { + return std::move(m_logEntries); + } + void setLogEntries(std::vector logEntries) override + { + m_logEntries = std::move(logEntries); + } + + std::string_view newEVMContractAddress() const override { return m_newEVMContractAddress; } + void setNewEVMContractAddress(std::string newEVMContractAddress) override + { + m_newEVMContractAddress = std::move(newEVMContractAddress); + } + + std::string_view toStringView(const std::string& it) const { return std::string_view(it); } + + gsl::span keyLocks() const override { return m_keyLocks; } + + std::vector takeKeyLocks() override { return std::move(m_keyLocks); } + + void setKeyLocks(std::vector keyLocks) override + { + m_keyLocks = std::move(keyLocks); + } + + std::string_view keyLockAcquired() const override { return m_keyLockAcquired; } + void setKeyLockAcquired(std::string keyLock) override { m_keyLockAcquired = keyLock; } + + + bool delegateCall() const override { return m_delegateCall; } + void setDelegateCall(bool delegateCall) override { m_delegateCall = delegateCall; } + + std::string_view delegateCallAddress() const override { return m_delegateCallAddress; } + void setDelegateCallAddress(std::string delegateCallAddress) override + { + m_delegateCallAddress = std::move(delegateCallAddress); + } + + bcos::bytesConstRef delegateCallCode() const override { return ref(m_delegateCallCode); } + bcos::bytes takeDelegateCallCode() override { return std::move(m_delegateCallCode); } + void setDelegateCallCode(bcos::bytes delegateCallCode) override + { + m_delegateCallCode = std::move(delegateCallCode); + } + + std::string_view delegateCallSender() const override { return m_delegateCallSender; } + void setDelegateCallSender(std::string delegateCallSender) override + { + m_delegateCallSender = std::move(delegateCallSender); + } + + bcos::crypto::HashType m_transactionHash; + int64_t m_contextID = 0; + int64_t m_seq = 0; + + std::string m_origin; + std::string m_from; + std::string m_to; + std::string m_abi; + + int64_t m_gasAvailable = 0; + bcos::bytes m_data; + + std::optional m_createSalt; + + std::string m_message; + std::vector m_logEntries; + std::string m_newEVMContractAddress; + + std::vector m_keyLocks; + std::string m_keyLockAcquired; + + int32_t m_status = 0; + int32_t m_depth = 0; + int32_t m_evmStatus = 0; + Type m_type = TXHASH; + bool m_create = false; + bool m_staticCall = false; + bool m_internalCreate = false; + bool m_internalCall = false; + + // for delegateCall + bool m_delegateCall = false; + std::string m_delegateCallAddress; + bcos::bytes m_delegateCallCode; + std::string m_delegateCallSender; +}; + +class NativeExecutionMessageFactory : public protocol::ExecutionMessageFactory +{ +public: + protocol::ExecutionMessage::UniquePtr createExecutionMessage() override + { + return std::make_unique(); + } +}; +} // namespace bcos::executor \ No newline at end of file diff --git a/bcos-framework/bcos-framework/executor/ParallelTransactionExecutorInterface.h b/bcos-framework/bcos-framework/executor/ParallelTransactionExecutorInterface.h new file mode 100644 index 0000000..07bd7ca --- /dev/null +++ b/bcos-framework/bcos-framework/executor/ParallelTransactionExecutorInterface.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Executor + * @file ParallelExecutorInterface.h + * @author: ancelmo + * @date: 2021-07-27 + */ + +#pragma once + +#include "../protocol/BlockHeader.h" +#include "../protocol/ProtocolTypeDef.h" +#include "../protocol/Transaction.h" +#include "../protocol/TransactionReceipt.h" +#include "ExecutionMessage.h" +#include "ExecutorStatus.h" +#include +#include +#include +#include +#include + +namespace bcos::executor +{ +class ParallelTransactionExecutorInterface +{ +public: + using Ptr = std::shared_ptr; + ParallelTransactionExecutorInterface() = default; + virtual ~ParallelTransactionExecutorInterface() = default; + + virtual void status( + std::function + callback) + { + // TODO: use pure virtual function + auto executorStatus = std::make_unique(); + executorStatus->setSeq(m_seq); + callback(nullptr, std::move(executorStatus)); + }; + + virtual void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) = 0; + + virtual void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) = 0; + + virtual void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) = 0; + + virtual void executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) = 0; + + virtual void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + + // called every time at all tx stop( pause or finish) + std::function)> + callback) = 0; + + virtual void dagExecuteTransactions( + gsl::span inputs, + std::function)> + callback) = 0; + + + virtual void dmcExecuteTransaction( + [[maybe_unused]] bcos::protocol::ExecutionMessage::UniquePtr input, + [[maybe_unused]] std::function + callback) + { + BCOS_LOG(FATAL) << "dmcExecuteTransaction is not available"; + assert(false); + }; + + virtual void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) = 0; + + virtual void getHash(bcos::protocol::BlockNumber number, + std::function callback) = 0; + + /* ----- XA Transaction interface Start ----- */ + + // Write data to storage uncommitted + virtual void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) = 0; + + // Commit uncommitted data + virtual void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) = 0; + + // Rollback the changes + virtual void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) = 0; + + /* ----- XA Transaction interface End ----- */ + + // drop all status + virtual void reset(std::function callback) = 0; + + virtual void getCode( + std::string_view contract, std::function callback) = 0; + + virtual void getABI( + std::string_view contract, std::function callback) = 0; + + virtual void start(){}; + + virtual void stop(){}; + +protected: + int64_t m_seq = utcTime(); +}; +} // namespace bcos::executor diff --git a/bcos-framework/bcos-framework/executor/PrecompiledTypeDef.h b/bcos-framework/bcos-framework/executor/PrecompiledTypeDef.h new file mode 100644 index 0000000..5c7751e --- /dev/null +++ b/bcos-framework/bcos-framework/executor/PrecompiledTypeDef.h @@ -0,0 +1,124 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PrecompiledTypeDef.h + * @author: kyonRay + * @date 2021-06-22 + */ + +#pragma once +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include + +namespace bcos +{ +/// System contract +constexpr const int SYS_CONTRACT_DEPLOY_NUMBER = 0; +inline bool isSysContractDeploy(protocol::BlockNumber _number) +{ + return _number == SYS_CONTRACT_DEPLOY_NUMBER; +} + +namespace precompiled +{ +/// precompiled contract path for wasm +constexpr const char* const SYS_CONFIG_NAME = "/sys/status"; +constexpr const char* const TABLE_NAME = "/sys/table_storage"; +constexpr const char* const TABLE_MANAGER_NAME = "/sys/table_manager"; +constexpr const char* const CONSENSUS_NAME = "/sys/consensus"; +constexpr const char* const AUTH_MANAGER_NAME = "/sys/auth"; +constexpr const char* const KV_TABLE_NAME = "/sys/kv_storage"; +constexpr const char* const CRYPTO_NAME = "/sys/crypto_tools"; +constexpr const char* const DAG_TRANSFER_NAME = "/sys/dag_test"; +constexpr const char* const BFS_NAME = "/sys/bfs"; +constexpr const char* const GROUP_SIG_NAME = "/sys/group_sig"; +constexpr const char* const RING_SIG_NAME = "/sys/ring_sig"; +constexpr const char* const DISCRETE_ZKP_NAME = "/sys/discrete_zkp"; +constexpr const char* const ACCOUNT_MANAGER_NAME = "/sys/account_manager"; +constexpr const char* const CAST_NAME = "/sys/cast_tools"; +constexpr static const uint8_t BFS_SYS_SUBS_COUNT = 14; +constexpr static const std::array BFS_SYS_SUBS = { + SYS_CONFIG_NAME, TABLE_NAME, TABLE_MANAGER_NAME, CONSENSUS_NAME, AUTH_MANAGER_NAME, + KV_TABLE_NAME, CRYPTO_NAME, DAG_TRANSFER_NAME, BFS_NAME, GROUP_SIG_NAME, RING_SIG_NAME, + DISCRETE_ZKP_NAME, ACCOUNT_MANAGER_NAME, CAST_NAME}; + +/// precompiled contract for solidity +/// precompiled address should range in [0x1000, 0x20000) +constexpr const char* const SYS_CONFIG_ADDRESS = "0000000000000000000000000000000000001000"; +constexpr const char* const TABLE_ADDRESS = "0000000000000000000000000000000000001001"; +constexpr const char* const TABLE_MANAGER_ADDRESS = "0000000000000000000000000000000000001002"; +constexpr const char* const CONSENSUS_ADDRESS = "0000000000000000000000000000000000001003"; +constexpr const char* const AUTH_MANAGER_ADDRESS = "0000000000000000000000000000000000001005"; +constexpr const char* const KV_TABLE_ADDRESS = "0000000000000000000000000000000000001009"; +constexpr const char* const CRYPTO_ADDRESS = "000000000000000000000000000000000000100a"; +constexpr const char* const WORKING_SEALER_MGR_ADDRESS = "000000000000000000000000000000000000100b"; +constexpr const char* const DAG_TRANSFER_ADDRESS = "000000000000000000000000000000000000100c"; +constexpr const char* const BFS_ADDRESS = "000000000000000000000000000000000000100e"; +constexpr const char* const CAST_ADDRESS = "000000000000000000000000000000000000100f"; +constexpr const char* const SYS_ADDRESS_PREFIX = "00000000000000000000000000000000000"; + +// Contract address related to privacy computing +constexpr const char* const GROUP_SIG_ADDRESS = "0000000000000000000000000000000000005004"; +constexpr const char* const RING_SIG_ADDRESS = "0000000000000000000000000000000000005005"; +// for zkp +constexpr const char* const DISCRETE_ZKP_ADDRESS = "0000000000000000000000000000000000005100"; + + +/// auth system contract for solidity +constexpr const char* const AUTH_INTERCEPT_ADDRESS = "0000000000000000000000000000000000010000"; +constexpr const char* const AUTH_COMMITTEE_ADDRESS = "0000000000000000000000000000000000010001"; +constexpr const char* const AUTH_CONTRACT_MGR_ADDRESS = "0000000000000000000000000000000000010002"; +constexpr const char* const ACCOUNT_MGR_ADDRESS = "0000000000000000000000000000000000010003"; +constexpr const char* const ACCOUNT_ADDRESS = "0000000000000000000000000000000000010004"; + +// clang-format off +/// name to address, only for create sys table +constexpr static const std::array, BFS_SYS_SUBS_COUNT> + SYS_NAME_ADDRESS_MAP ={ + std::pair{SYS_CONFIG_NAME, SYS_CONFIG_ADDRESS}, + {TABLE_NAME, TABLE_ADDRESS}, + {TABLE_MANAGER_NAME, TABLE_MANAGER_ADDRESS}, + {CONSENSUS_NAME, CONSENSUS_ADDRESS}, + {AUTH_MANAGER_NAME, AUTH_MANAGER_ADDRESS}, + {KV_TABLE_NAME, KV_TABLE_ADDRESS}, + {CRYPTO_NAME, CRYPTO_ADDRESS}, + {DAG_TRANSFER_NAME, DAG_TRANSFER_ADDRESS}, + {BFS_NAME, BFS_ADDRESS}, + {GROUP_SIG_NAME, GROUP_SIG_ADDRESS}, + {RING_SIG_NAME, RING_SIG_ADDRESS}, + {DISCRETE_ZKP_NAME, DISCRETE_ZKP_ADDRESS}, + {ACCOUNT_MANAGER_NAME, ACCOUNT_MGR_ADDRESS}, + {CAST_NAME, CAST_ADDRESS} +}; +// clang-format on + +const std::set> c_systemTxsAddress = { + bcos::precompiled::SYS_CONFIG_ADDRESS, bcos::precompiled::CONSENSUS_ADDRESS, + bcos::precompiled::WORKING_SEALER_MGR_ADDRESS, bcos::precompiled::SYS_CONFIG_NAME, + bcos::precompiled::CONSENSUS_NAME, bcos::precompiled::AUTH_COMMITTEE_ADDRESS, + bcos::precompiled::AUTH_MANAGER_ADDRESS, bcos::precompiled::ACCOUNT_ADDRESS, + bcos::precompiled::ACCOUNT_MGR_ADDRESS, bcos::precompiled::ACCOUNT_MANAGER_NAME}; + +/// for testing +// CpuHeavy test: 0x5200 ~ (0x5200 + 128) +const char* const CPU_HEAVY_START_ADDRESS = "0x5200"; +const int CPU_HEAVY_CONTRACT_NUM = 128; + +// Smallbank test: 0x6200 ~ (0x6200 + 128) +const char* const SMALLBANK_START_ADDRESS = "0x6200"; +const int SMALLBANK_CONTRACT_NUM = 128; + +} // namespace precompiled +} // namespace bcos diff --git a/bcos-framework/bcos-framework/front/FrontServiceInterface.h b/bcos-framework/bcos-framework/front/FrontServiceInterface.h new file mode 100644 index 0000000..bfce181 --- /dev/null +++ b/bcos-framework/bcos-framework/front/FrontServiceInterface.h @@ -0,0 +1,137 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for front service module + * @file FrontInterface.h + * @author: octopus + * @date 2021-04-19 + */ +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace front +{ +using GetGroupNodeInfoFunc = + std::function; +using ReceiveMsgFunc = std::function; +using ResponseFunc = std::function; +using CallbackFunc = std::function; + +/** + * @brief: the interface provided by the front service + */ +class FrontServiceInterface +{ +public: + using Ptr = std::shared_ptr; + FrontServiceInterface() = default; + virtual ~FrontServiceInterface() {} + +public: + /** + * @brief: start/stop service + */ + virtual void start() = 0; + virtual void stop() = 0; + +public: + /** + * @brief: get groupNodeInfo from the gateway + * @param _getGroupNodeInfoFunc: get groupNodeInfo callback + * @return void + */ + virtual void asyncGetGroupNodeInfo(GetGroupNodeInfoFunc _onGetGroupNodeInfo) = 0; + /** + * @brief: receive nodeIDs from gateway, call by gateway + * @param _groupID: groupID + * @param _groupNodeInfo: the groupNodeInfo + * @return void + */ + virtual void onReceiveGroupNodeInfo(const std::string& _groupID, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, ReceiveMsgFunc _receiveMsgCallback) = 0; + + /** + * @brief: receive message from gateway, call by gateway + * @param _groupID: groupID + * @param _nodeID: the node send this message + * @param _data: received message data + * @return void + */ + virtual void onReceiveMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) = 0; + + /** + * @brief: receive broadcast message from gateway, call by gateway + * @param _groupID: groupID + * @param _nodeID: the node send this message + * @param _data: received message data + * @return void + */ + virtual void onReceiveBroadcastMessage(const std::string& _groupID, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + ReceiveMsgFunc _receiveMsgCallback) = 0; + + /** + * @brief: send message to node + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _data: message + * @param _timeout: the timeout value of async function, in milliseconds. + * @param _callback: callback + * @return void + */ + virtual void asyncSendMessageByNodeID(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, uint32_t _timeout, CallbackFunc _callback) = 0; + + /** + * @brief: send response + * @param _id: the request id + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _data: message + * @return void + */ + virtual void asyncSendResponse(const std::string& _id, int _moduleID, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + ReceiveMsgFunc _receiveMsgCallback) = 0; + + /** + * @brief: send messages to multiple nodes + * @param _moduleID: moduleID + * @param _nodeIDs: the receiver nodeIDs + * @param _data: message + * @return void + */ + virtual void asyncSendMessageByNodeIDs(int _moduleID, + const std::vector& _nodeIDs, bytesConstRef _data) = 0; + + /** + * @brief: send broadcast message + * @param _moduleID: moduleID + * @param _data: message + * @return void + */ + virtual void asyncSendBroadcastMessage(uint16_t _type, int _moduleID, bytesConstRef _data) = 0; +}; + +} // namespace front +} // namespace bcos diff --git a/bcos-framework/bcos-framework/gateway/GatewayInterface.h b/bcos-framework/bcos-framework/gateway/GatewayInterface.h new file mode 100644 index 0000000..3c0775e --- /dev/null +++ b/bcos-framework/bcos-framework/gateway/GatewayInterface.h @@ -0,0 +1,142 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Gateway module + * @file GatewayInterface.h + * @author: octopus + * @date 2021-04-19 + */ +#pragma once +#include "GatewayTypeDef.h" +#include "bcos-framework/front/FrontServiceInterface.h" +#include "bcos-framework/multigroup/GroupInfo.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/protocol/ProtocolInfo.h" +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +using ErrorRespFunc = std::function; +using PeerRespFunc = std::function; +using GetGroupNodeInfoFunc = + std::function; + +/** + * @brief: A list of interfaces provided by the gateway which are called by the front service. + */ +class GatewayInterface +{ +public: + using Ptr = std::shared_ptr; + GatewayInterface() = default; + virtual ~GatewayInterface() {} + + /** + * @brief: start/stop service + */ + virtual void start() = 0; + virtual void stop() = 0; + +public: + /** + * @brief: get nodeIDs from gateway + * @param: _groupID + * @param _getGroupNodeInfoFunc: get nodeIDs callback + * @return void + */ + virtual void asyncGetGroupNodeInfo( + const std::string& _groupID, GetGroupNodeInfoFunc _getGroupNodeInfoFunc) = 0; + /** + * @brief: get connected peers + * @param _callback: + * @return void + */ + virtual void asyncGetPeers( + std::function _callback) = 0; + /** + * @brief: send message to a single node + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message content + * @return void + */ + virtual void asyncSendMessageByNodeID(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, + bytesConstRef _payload, ErrorRespFunc _errorRespFunc) = 0; + + /** + * @brief: send message to multiple nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _nodeIDs: the receiver nodeIDs + * @param _payload: message content + * @param _errorRespFunc: error func + * @return void + */ + virtual void asyncSendMessageByNodeIDs(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, const bcos::crypto::NodeIDs& _dstNodeIDs, + bytesConstRef _payload) = 0; + + /** + * @brief: send message to all nodes + * @param _type: type + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _payload: message content + * @return void + */ + virtual void asyncSendBroadcastMessage(uint16_t _type, const std::string& _groupID, + int _moduleID, bcos::crypto::NodeIDPtr _srcNodeID, bytesConstRef _payload) = 0; + + /// multi-group related interfaces + + /** + * @brief receive the latest group information notification from the GroupManagerInterface + * + * @param _groupInfo the latest group information + */ + virtual void asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr _groupInfo, std::function) = 0; + + /// for AMOP + virtual void asyncSendMessageByTopic(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc) = 0; + virtual void asyncSendBroadcastMessageByTopic( + const std::string& _topic, bcos::bytesConstRef _data) = 0; + + virtual void asyncSubscribeTopic(std::string const& _clientID, std::string const& _topicInfo, + std::function _callback) = 0; + virtual void asyncRemoveTopic(std::string const& _clientID, + std::vector const& _topicList, + std::function _callback) = 0; + + // for the air-mode node + virtual bool registerNode(const std::string&, bcos::crypto::NodeIDPtr, bcos::protocol::NodeType, + bcos::front::FrontServiceInterface::Ptr, bcos::protocol::ProtocolInfo::ConstPtr) + { + return true; + } +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-framework/bcos-framework/gateway/GatewayTypeDef.h b/bcos-framework/bcos-framework/gateway/GatewayTypeDef.h new file mode 100644 index 0000000..c374642 --- /dev/null +++ b/bcos-framework/bcos-framework/gateway/GatewayTypeDef.h @@ -0,0 +1,161 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief typedef for gateway + * @file GatewayTypeDef.h + * @author: octopus + * @date 2021-04-19 + */ +#pragma once +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +// Message type definition +enum GatewayMessageType : int16_t +{ + Heartbeat = 0x1, + Handshake = 0x2, + RequestNodeStatus = 0x3, // for request the gateway nodeinfo + ResponseNodeStatus = 0x4, + PeerToPeerMessage = 0x5, + BroadcastMessage = 0x6, + AMOPMessageType = 0x7, + WSMessageType = 0x8, + SyncNodeSeq = 0x9, + RouterTableSyncSeq = 0xa, + RouterTableResponse = 0xb, + RouterTableRequest = 0xc, + ForwardMessage = 0xd, +}; +/** + * @brief client end endpoint. Node will connect to NodeIPEndpoint. + */ +struct NodeIPEndpoint +{ + using Ptr = std::shared_ptr; + NodeIPEndpoint() = default; + NodeIPEndpoint(std::string const& _host, uint16_t _port) : m_host(_host), m_port(_port) {} + NodeIPEndpoint(const NodeIPEndpoint& _nodeIPEndpoint) = default; + NodeIPEndpoint(boost::asio::ip::address _addr, uint16_t _port) + : m_host(_addr.to_string()), m_port(_port), m_ipv6(_addr.is_v6()) + {} + + virtual ~NodeIPEndpoint() = default; + NodeIPEndpoint(const boost::asio::ip::tcp::endpoint& _endpoint) + { + m_host = _endpoint.address().to_string(); + m_port = _endpoint.port(); + m_ipv6 = _endpoint.address().is_v6(); + } + bool operator<(const NodeIPEndpoint& rhs) const + { + if (m_host + std::to_string(m_port) < rhs.m_host + std::to_string(rhs.m_port)) + { + return true; + } + return false; + } + bool operator==(const NodeIPEndpoint& rhs) const + { + return (m_host + std::to_string(m_port) == rhs.m_host + std::to_string(rhs.m_port)); + } + operator boost::asio::ip::tcp::endpoint() const + { + return boost::asio::ip::tcp::endpoint(boost::asio::ip::make_address(m_host), m_port); + } + + // Get the port associated with the endpoint. + uint16_t port() const { return m_port; }; + + // Get the IP address associated with the endpoint. + std::string address() const { return m_host; }; + bool isIPv6() const { return m_ipv6; } + + std::string m_host; + uint16_t m_port; + bool m_ipv6 = false; +}; + +inline std::ostream& operator<<(std::ostream& _out, NodeIPEndpoint const& _endpoint) +{ + _out << _endpoint.address() << ":" << _endpoint.port(); + return _out; +} + +/// node info obtained from the certificate +struct P2PInfo +{ + using Ptr = std::shared_ptr; + P2PInfo() = default; + ~P2PInfo() {} + std::string p2pID; + std::string p2pIDWithoutExtInfo; + std::string agencyName; + std::string nodeName; + NodeIPEndpoint nodeIPEndpoint; +}; +using P2PInfos = std::vector; + +class GatewayInfo +{ +public: + using Ptr = std::shared_ptr; + // groupID=>nodeList + using NodeIDInfoType = std::map>; + GatewayInfo() + : m_p2pInfo(std::make_shared()), m_nodeIDInfo(std::make_shared()) + {} + explicit GatewayInfo(P2PInfo const& _p2pInfo) : GatewayInfo() { *m_p2pInfo = _p2pInfo; } + + virtual ~GatewayInfo() {} + void setNodeIDInfo(NodeIDInfoType&& _nodeIDInfo) + { + WriteGuard l(x_nodeIDInfo); + *m_nodeIDInfo = std::move(_nodeIDInfo); + } + void setP2PInfo(P2PInfo&& _p2pInfo) + { + WriteGuard l(x_p2pInfo); + *m_p2pInfo = std::move(_p2pInfo); + } + // Note: copy here to ensure thread-safe, use std::move out to ensure performance + NodeIDInfoType nodeIDInfo() + { + ReadGuard l(x_nodeIDInfo); + return *m_nodeIDInfo; + } + // Note: copy here to ensure thread-safe, use std::move out to ensure performance + P2PInfo p2pInfo() + { + ReadGuard l(x_p2pInfo); + return *m_p2pInfo; + } + +private: + std::shared_ptr m_p2pInfo; + SharedMutex x_p2pInfo; + + std::shared_ptr m_nodeIDInfo; + SharedMutex x_nodeIDInfo; +}; +using GatewayInfos = std::vector; +using GatewayInfosPtr = std::shared_ptr; +} // namespace gateway +} // namespace bcos diff --git a/bcos-framework/bcos-framework/gateway/GroupNodeInfo.h b/bcos-framework/bcos-framework/gateway/GroupNodeInfo.h new file mode 100644 index 0000000..9da2623 --- /dev/null +++ b/bcos-framework/bcos-framework/gateway/GroupNodeInfo.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GroupNodeInfo.h + * @author: yujiechen + * @date 2022-3-8 + */ +#pragma once +#include "bcos-crypto/interfaces/crypto/KeyInterface.h" +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +class GroupNodeInfo +{ +public: + using Ptr = std::shared_ptr; + GroupNodeInfo() = default; + virtual ~GroupNodeInfo() {} + // the groupID + virtual void setGroupID(std::string const& _groupID) = 0; + // the nodeIDList + virtual void setNodeIDList(std::vector&& _nodeIDList) = 0; + virtual void setNodeTypeList(std::vector&& _nodeTypeList) = 0; + virtual void appendNodeID(std::string const& _nodeID) = 0; + virtual void appendProtocol(bcos::protocol::ProtocolInfo::ConstPtr _protocol) = 0; + // the groupType + virtual void setType(uint16_t _type) = 0; + + virtual std::string const& groupID() const = 0; + // Note: externally ensure thread safety + virtual std::vector const& nodeIDList() const = 0; + virtual std::vector const& nodeTypeList() const = 0; + virtual int type() const = 0; + + virtual void setNodeProtocolList( + std::vector&& _protocolList) = 0; + virtual std::vector const& nodeProtocolList() const = 0; + virtual bcos::protocol::ProtocolInfo::ConstPtr protocol(uint64_t _index) const = 0; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/ledger/GenesisConfig.h b/bcos-framework/bcos-framework/ledger/GenesisConfig.h new file mode 100644 index 0000000..1d582c5 --- /dev/null +++ b/bcos-framework/bcos-framework/ledger/GenesisConfig.h @@ -0,0 +1,103 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file genesisData.h + * @author: wenlinli + * @date 2022-10-24 + */ + +#pragma once + +#include "LedgerConfig.h" +#include "bcos-framework/consensus/ConsensusNodeInterface.h" +#include "bcos-ledger/src/libledger/Ledger.h" +#include +#include + + +namespace bcos +{ +namespace ledger +{ +class GenesisConfig +{ +public: + using Ptr = std::shared_ptr; + GenesisConfig(bool smcrypto, std::string chainID, std::string groupID, + std::string consensusType, uint64_t blockLimit, uint64_t leaderSwitchPeriod, + std::string compatibilityVersion, uint64_t txGasLimit, bool isWasm, bool isAuthCheck, + std::string authAdminAccount, bool isSerialExecute) + : m_smCrypto(smcrypto), + m_chainID(chainID), + m_groupID(groupID), + m_consensusType(consensusType), + m_blockLimit(blockLimit), + m_leaderSwitchPeriod(leaderSwitchPeriod), + m_compatibilityVersion(compatibilityVersion), + m_txGasLimit(txGasLimit), + m_isWasm(isWasm), + m_isAuthCheck(isAuthCheck), + m_authAdminAccount(authAdminAccount), + m_isSerialExecute(isSerialExecute){}; + virtual ~GenesisConfig() {} + + std::string genesisDataOutPut() + { + std::stringstream ss; + ss << "[chain]" << std::endl + << "sm_crypto:" << m_smCrypto << std::endl + << "chainID: " << m_chainID << std::endl + << "grouID: " << m_groupID << std::endl + << "[consensys]" << std::endl + << "consensus_type: " << m_consensusType << std::endl + << "block_tx_count_limit:" << m_blockLimit << std::endl + << "leader_period:" << m_leaderSwitchPeriod << std::endl + << "[version]" << std::endl + << "compatibility_version:" << m_compatibilityVersion << std::endl + << "[tx]" << std::endl + << "gaslimit:" << m_txGasLimit << std::endl + << "[executor]" << std::endl + << "iswasm: " << m_isWasm << std::endl + << "isAuthCheck:" << m_isAuthCheck << std::endl + << "authAdminAccount:" << m_authAdminAccount << std::endl + << "isSerialExecute:" << m_isSerialExecute << std::endl; + return ss.str(); + } + + +private: + // chain config + bool m_smCrypto; + std::string m_chainID; + std::string m_groupID; + + // consensus config + std::string m_consensusType; + uint64_t m_blockLimit; + uint64_t m_leaderSwitchPeriod = 1; + + // version config + std::string m_compatibilityVersion; + + // tx config + uint64_t m_txGasLimit = 3000000000; + // executorConfig + bool m_isWasm; + bool m_isAuthCheck; + std::string m_authAdminAccount; + bool m_isSerialExecute; +}; // namespace genesisConfig +} // namespace ledger +} // namespace bcos diff --git a/bcos-framework/bcos-framework/ledger/LedgerConfig.h b/bcos-framework/bcos-framework/ledger/LedgerConfig.h new file mode 100644 index 0000000..9414fed --- /dev/null +++ b/bcos-framework/bcos-framework/ledger/LedgerConfig.h @@ -0,0 +1,118 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief + * @file LedgerConfig.h + * @author: yujiechen + * @date 2021-05-06 + */ +#pragma once +#include "../consensus/ConsensusNodeInterface.h" +#include "../protocol/ProtocolTypeDef.h" + +namespace bcos +{ +namespace ledger +{ +class LedgerConfig +{ +public: + using Ptr = std::shared_ptr; + LedgerConfig() + : m_consensusNodeList(std::make_shared()), + m_observerNodeList(std::make_shared()) + {} + virtual ~LedgerConfig() {} + + virtual void setConsensusNodeList(bcos::consensus::ConsensusNodeList const& _consensusNodeList) + { + *m_consensusNodeList = _consensusNodeList; + } + virtual void setObserverNodeList(bcos::consensus::ConsensusNodeList const& _observerNodeList) + { + *m_observerNodeList = _observerNodeList; + } + virtual void setHash(bcos::crypto::HashType const& _hash) { m_hash = _hash; } + virtual void setBlockNumber(bcos::protocol::BlockNumber _blockNumber) + { + m_blockNumber = _blockNumber; + } + virtual void setBlockTxCountLimit(uint64_t _blockTxCountLimit) + { + m_blockTxCountLimit = _blockTxCountLimit; + } + + virtual bcos::consensus::ConsensusNodeList const& consensusNodeList() const + { + return *m_consensusNodeList; + } + + virtual bcos::consensus::ConsensusNodeList& mutableConsensusNodeList() + { + return *m_consensusNodeList; + } + + virtual bcos::consensus::ConsensusNodeList const& observerNodeList() const + { + return *m_observerNodeList; + } + bcos::crypto::HashType const& hash() const { return m_hash; } + bcos::protocol::BlockNumber blockNumber() const { return m_blockNumber; } + + uint64_t blockTxCountLimit() const { return m_blockTxCountLimit; } + + bcos::consensus::ConsensusNodeListPtr mutableConsensusList() { return m_consensusNodeList; } + bcos::consensus::ConsensusNodeListPtr mutableObserverList() { return m_observerNodeList; } + + uint64_t leaderSwitchPeriod() const { return m_leaderSwitchPeriod; } + void setLeaderSwitchPeriod(uint64_t _leaderSwitchPeriod) + { + m_leaderSwitchPeriod = _leaderSwitchPeriod; + } + + std::tuple const& gasLimit() const { return m_gasLimit; } + void setGasLimit(std::tuple mGasLimit) + { + m_gasLimit = std::move(mGasLimit); + } + + // Not enforce to set this field, in memory data + void setSealerId(int64_t _sealerId) { m_sealerId = _sealerId; } + int64_t sealerId() const { return m_sealerId; } + + // Not enforce to set this field, in memory data + void setTxsSize(int64_t _txsSize) { m_txsSize = _txsSize; } + int64_t txsSize() const { return m_txsSize; } + + void setCompatibilityVersion(uint32_t _version) { m_compatibilityVersion = _version; } + uint32_t compatibilityVersion() const { return m_compatibilityVersion; } + +protected: + bcos::consensus::ConsensusNodeListPtr m_consensusNodeList; + bcos::consensus::ConsensusNodeListPtr m_observerNodeList; + bcos::crypto::HashType m_hash; + bcos::protocol::BlockNumber m_blockNumber; + uint64_t m_blockTxCountLimit; + uint64_t m_leaderSwitchPeriod = 1; + std::tuple m_gasLimit = {3000000000, 0}; + // the compatibilityVersion + // the system version, can only be upgraded manually + uint32_t m_compatibilityVersion; + // no need to store, in memory data + int64_t m_sealerId = -1; + int64_t m_txsSize = -1; +}; +} // namespace ledger +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/ledger/LedgerInterface.h b/bcos-framework/bcos-framework/ledger/LedgerInterface.h new file mode 100644 index 0000000..683349d --- /dev/null +++ b/bcos-framework/bcos-framework/ledger/LedgerInterface.h @@ -0,0 +1,172 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Ledger + * @file LedgerInterface.h + * @author: kyonRay + * @date: 2021-04-07 + */ + +#pragma once + +#include "../protocol/Block.h" +#include "../protocol/BlockHeader.h" +#include "../protocol/Transaction.h" +#include "../protocol/TransactionReceipt.h" +#include "../storage/StorageInterface.h" +#include "LedgerConfig.h" +#include "LedgerTypeDef.h" +#include +#include +#include +#include + + +namespace bcos::ledger +{ +class LedgerInterface +{ +public: + using Ptr = std::shared_ptr; + LedgerInterface() = default; + virtual ~LedgerInterface() {} + + /** + * @brief async prewrite a block in scheduler module + * @param block the block to commit + * @param callback trigger this callback when write is finished + */ + virtual void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) = 0; + + /** + * @brief async store txs in block when tx pool verify + * @param _txToStore tx bytes data list + * @param _txHashList tx hash list + * @param _onTxsStored callback + */ + virtual bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) = 0; + + /** + * @brief async get block by blockNumber + * @param _blockNumber number of block + * @param _blockFlag flag bit of what the block be callback contains, + * you can checkout all flags in LedgerTypeDef.h + * @param _onGetBlock + * + * @example + * asyncGetBlockDataByNumber(10, HEADER|TRANSACTIONS, [](error, block){ doSomething(); }); + */ + virtual void asyncGetBlockDataByNumber(protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) = 0; + + /** + * @brief async get latest block number + * @param _onGetBlock + */ + virtual void asyncGetBlockNumber( + std::function _onGetBlock) = 0; + + /** + * @brief async get block hash by block number + * @param _blockNumber the number of block to get + * @param _onGetBlock + */ + virtual void asyncGetBlockHashByNumber(protocol::BlockNumber _blockNumber, + std::function _onGetBlock) = 0; + + /** + * @brief async get block number by block hash + * @param _blockHash the hash of block to get + * @param _onGetBlock + */ + virtual void asyncGetBlockNumberByHash(crypto::HashType const& _blockHash, + std::function _onGetBlock) = 0; + + /** + * @brief async get a batch of transaction by transaction hash list + * @param _txHashList transaction hash list, hash should be hex + * @param _withProof if true then it will callback MerkleProofPtr map in _onGetTx + * if false then MerkleProofPtr map will be nullptr + * @param _onGetTx return + */ + virtual void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) = 0; + + /** + * @brief async get a transaction receipt by tx hash + * @param _txHash hash of transaction + * @param _withProof if true then it will callback MerkleProofPtr in _onGetTx + * if false then MerkleProofPtr will be nullptr + * @param _onGetTx + */ + virtual void asyncGetTransactionReceiptByHash(crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) = 0; + + /** + * @brief async get total transaction count and latest block number + * @param _callback callback totalTxCount, totalFailedTxCount, and latest block number + */ + virtual void asyncGetTotalTransactionCount(std::function + _callback) = 0; + + /** + * @brief async get current_state table to get total transaction count, archived block number + * and latest block number + * @param _callback callback totalTxCount, totalFailedTxCount, and latest block number + */ + virtual void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) = 0; + + /** + * @brief async get system config by table key + * @param _key the key of row, you can checkout all key in LedgerTypeDef.h + * @param _onGetConfig callback when get config, + */ + virtual void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) = 0; + + /** + * @brief async get node list by type, can be sealer or observer + * @param _type the type of node, CONSENSUS_SEALER or CONSENSUS_OBSERVER + * @param _onGetConfig + */ + virtual void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) = 0; + + /** + * @brief async get a batch of nonce lists in blocks + * @param _startNumber start block number + * @param _offset batch offset, if batch is 0, then callback nonce list in start block number; + * if (_startNumber + _offset) > latest block number, then callback nonce lists in + * [_startNumber, latest number] + * @param _onGetList + */ + virtual void asyncGetNonceList(protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) = 0; + + virtual void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr _blockTxs, + bcos::protocol::Block::ConstPtr block, + std::function _callback) = 0; +}; +} // namespace bcos::ledger diff --git a/bcos-framework/bcos-framework/ledger/LedgerTypeDef.h b/bcos-framework/bcos-framework/ledger/LedgerTypeDef.h new file mode 100644 index 0000000..1fd9c10 --- /dev/null +++ b/bcos-framework/bcos-framework/ledger/LedgerTypeDef.h @@ -0,0 +1,82 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LedgerTypeDef.h + * @author: kyonRay + * @date 2021-04-30 + */ + +#pragma once +#include "../protocol/ProtocolTypeDef.h" +#include + +namespace bcos::ledger +{ +using MerkleProof = std::vector; +using MerkleProofPtr = std::shared_ptr; + +// get block flag +constexpr static int32_t FULL_BLOCK = 0xFFFE; +constexpr static int32_t HEADER = 0x0008; +constexpr static int32_t TRANSACTIONS_HASH = 0x0001; +constexpr static int32_t TRANSACTIONS = 0x0004; +constexpr static int32_t RECEIPTS = 0x0002; + +// get system config key +constexpr static std::string_view SYSTEM_KEY_TX_GAS_LIMIT = "tx_gas_limit"; +constexpr static std::string_view SYSTEM_KEY_TX_COUNT_LIMIT = "tx_count_limit"; +constexpr static std::string_view SYSTEM_KEY_CONSENSUS_LEADER_PERIOD = "consensus_leader_period"; +// for compatibility +constexpr static std::string_view SYSTEM_KEY_COMPATIBILITY_VERSION = "compatibility_version"; + +// system config struct +using SystemConfigEntry = std::tuple; + +const unsigned TX_GAS_LIMIT_MIN = 100000; +// get consensus node list type +constexpr static std::string_view CONSENSUS_SEALER = "consensus_sealer"; +constexpr static std::string_view CONSENSUS_OBSERVER = "consensus_observer"; +constexpr static std::string_view CONSENSUS_WORKING_SEALER = "consensus_working_sealer"; + +// get current state key +constexpr static std::string_view SYS_KEY_CURRENT_NUMBER = "current_number"; +constexpr static std::string_view SYS_KEY_TOTAL_TRANSACTION_COUNT = "total_transaction_count"; +constexpr static std::string_view SYS_KEY_ARCHIVED_NUMBER = "archived_block_number"; +constexpr static std::string_view SYS_KEY_TOTAL_FAILED_TRANSACTION = + "total_failed_transaction_count"; + +// sys table name +constexpr static std::string_view SYS_CONSENSUS{"s_consensus"}; +constexpr static std::string_view SYS_CONFIG{"s_config"}; +constexpr static std::string_view SYS_CURRENT_STATE{"s_current_state"}; +constexpr static std::string_view SYS_HASH_2_NUMBER{"s_hash_2_number"}; +constexpr static std::string_view SYS_NUMBER_2_HASH{"s_number_2_hash"}; +constexpr static std::string_view SYS_BLOCK_NUMBER_2_NONCES{"s_block_number_2_nonces"}; +constexpr static std::string_view SYS_NUMBER_2_BLOCK_HEADER{"s_number_2_header"}; +constexpr static std::string_view SYS_NUMBER_2_TXS{"s_number_2_txs"}; +constexpr static std::string_view SYS_HASH_2_TX{"s_hash_2_tx"}; +constexpr static std::string_view SYS_HASH_2_RECEIPT{"s_hash_2_receipt"}; +constexpr static std::string_view DAG_TRANSFER{"/tables/dag_transfer"}; +constexpr static std::string_view SMALLBANK_TRANSFER{"/tables/smallbank_transfer"}; +constexpr static std::string_view SYS_CODE_BINARY{"s_code_binary"}; +constexpr static std::string_view SYS_CONTRACT_ABI{"s_contract_abi"}; + +struct CurrentState { + bcos::protocol::BlockNumber latestBlockNumber; + bcos::protocol::BlockNumber archivedNumber; + int64_t totalTransactionCount; + int64_t totalFailedTransactionCount; +}; +} // namespace bcos::ledger diff --git a/bcos-framework/bcos-framework/multigroup/ChainNodeInfo.h b/bcos-framework/bcos-framework/multigroup/ChainNodeInfo.h new file mode 100644 index 0000000..d810bb7 --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/ChainNodeInfo.h @@ -0,0 +1,160 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to deploy new node + * @file NodeInfo.h + * @author: yujiechen + * @date 2021-09-08 + */ +#pragma once +#include "GroupTypeDef.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/protocol/ProtocolInfo.h" +#include "bcos-framework/protocol/ServiceDesc.h" +#include +#include +namespace bcos +{ +namespace group +{ +enum NodeCryptoType : uint32_t +{ + NON_SM_NODE = 0, + SM_NODE = 1, +}; + +class ChainNodeInfo +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using ServicesInfo = std::map; + ChainNodeInfo() : m_nodeProtocol(std::make_shared()) {} + ChainNodeInfo(std::string const& _nodeName, int32_t _type) : ChainNodeInfo() + { + m_nodeName = _nodeName; + m_nodeCryptoType = (NodeCryptoType)_type; + } + + virtual ~ChainNodeInfo() {} + + virtual std::string const& nodeName() const { return m_nodeName; } + virtual NodeCryptoType const& nodeCryptoType() const { return m_nodeCryptoType; } + virtual std::string const& serviceName(bcos::protocol::ServiceType _type) const + { + if (!m_servicesInfo.count(_type)) + { + return c_emptyServiceName; + } + return m_servicesInfo.at(_type); + } + + virtual void setNodeName(std::string const& _nodeName) { m_nodeName = _nodeName; } + virtual void setNodeCryptoType(NodeCryptoType const& _nodeType) + { + m_nodeCryptoType = _nodeType; + } + virtual void appendServiceInfo( + bcos::protocol::ServiceType _type, std::string const& _serviceName) + { + m_servicesInfo[_type] = _serviceName; + + BCOS_LOG(TRACE) << LOG_BADGE("ChainNodeInfo") << LOG_DESC("appendServiceInfo") + << LOG_KV("type", _type) << LOG_KV("name", getServiceNameByType(_type)) + << LOG_KV("serviceName", _serviceName); + } + + virtual ServicesInfo const& serviceInfo() const { return m_servicesInfo; } + + virtual void setServicesInfo(ServicesInfo&& _servicesInfo) + { + m_servicesInfo = std::move(_servicesInfo); + } + + virtual void setIniConfig(std::string const& _iniConfig) { m_iniConfig = _iniConfig; } + virtual std::string const& iniConfig() const { return m_iniConfig; } + virtual std::string const& nodeID() const { return m_nodeID; } + virtual void setNodeID(std::string const& _nodeID) { m_nodeID = _nodeID; } + + void setMicroService(bool _microService) { m_microService = _microService; } + bool microService() const { return m_microService; } + void setNodeType(bcos::protocol::NodeType _type) { m_nodeType = _type; } + bcos::protocol::NodeType nodeType() const { return m_nodeType; } + + bcos::protocol::ProtocolInfo::ConstPtr nodeProtocol() const { return m_nodeProtocol; } + void setNodeProtocol(bcos::protocol::ProtocolInfo&& _protocol) + { + *m_nodeProtocol = std::move(_protocol); + } + + void setNodeProtocol(bcos::protocol::ProtocolInfo const& _protocol) + { + *m_nodeProtocol = _protocol; + } + + virtual void setWasm(bool _wasm) { m_wasm = _wasm; } + virtual void setSmCryptoType(bool _smCryptoType) { m_smCryptoType = _smCryptoType; } + + bool wasm() const { return m_wasm; } + bool smCryptoType() const { return m_smCryptoType; } + + void setCompatibilityVersion(uint32_t _version) { m_compatibilityVersion = _version; } + uint32_t compatibilityVersion() const { return m_compatibilityVersion; } + +protected: + bool m_microService = false; + // the node name + std::string m_nodeName; + NodeCryptoType m_nodeCryptoType; + // the nodeType + bcos::protocol::NodeType m_nodeType; + // the nodeID + std::string m_nodeID; + + // mapping of service to deployed machine + ServicesInfo m_servicesInfo; + // the ini config maintained by the node, use the iniConfig of the node if empty + std::string m_iniConfig = ""; + std::string c_emptyServiceName = ""; + + // the node protocol + bcos::protocol::ProtocolInfo::Ptr m_nodeProtocol; + + // the system version + uint32_t m_compatibilityVersion; + + bool m_wasm{false}; + bool m_smCryptoType{false}; +}; +inline std::string printNodeInfo(ChainNodeInfo::Ptr _nodeInfo) +{ + if (!_nodeInfo) + { + return ""; + } + std::stringstream oss; + oss << LOG_KV("name", _nodeInfo->nodeName()) + << LOG_KV("cryptoType", std::to_string((int32_t)_nodeInfo->nodeCryptoType())) + << LOG_KV("nodeType", _nodeInfo->nodeType()); + auto const& serviceInfos = _nodeInfo->serviceInfo(); + oss << ", serviceInfos: "; + for (auto const& info : serviceInfos) + { + oss << info.second << ","; + } + return oss.str(); +} +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/multigroup/ChainNodeInfoFactory.h b/bcos-framework/bcos-framework/multigroup/ChainNodeInfoFactory.h new file mode 100644 index 0000000..b1e23a8 --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/ChainNodeInfoFactory.h @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to build the ChainNodeInfo + * @file ChainNodeInfoFactory.h + * @author: yujiechen + * @date 2021-09-18 + */ +#pragma once +#include "ChainNodeInfo.h" +namespace bcos +{ +namespace group +{ +class ChainNodeInfoFactory +{ +public: + using Ptr = std::shared_ptr; + ChainNodeInfoFactory() = default; + virtual ~ChainNodeInfoFactory() {} + virtual ChainNodeInfo::Ptr createNodeInfo() { return std::make_shared(); } + virtual ChainNodeInfo::Ptr createNodeInfo(std::string const& _nodeName, int32_t _type) + { + return std::make_shared(_nodeName, _type); + } +}; +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/multigroup/GroupInfo.h b/bcos-framework/bcos-framework/multigroup/GroupInfo.h new file mode 100644 index 0000000..ee8dac7 --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/GroupInfo.h @@ -0,0 +1,151 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to manager group + * @file GroupInfo.h + * @author: yujiechen + * @date 2021-09-08 + */ +#pragma once +#include "ChainNodeInfoFactory.h" +#include "GroupTypeDef.h" +namespace bcos +{ +namespace group +{ +class GroupInfo +{ +public: + using Ptr = std::shared_ptr; + GroupInfo() = default; + GroupInfo(std::string const& _chainID, std::string const& _groupID) + : m_chainID(_chainID), m_groupID(_groupID) + {} + virtual ~GroupInfo() {} + + virtual std::string const& genesisConfig() const { return m_genesisConfig; } + virtual std::string const& iniConfig() const { return m_iniConfig; } + virtual ChainNodeInfo::Ptr nodeInfo(std::string_view _nodeName) const + { + ReadGuard l(x_nodeInfos); + auto it = m_nodeInfos.find(_nodeName); + if (it == m_nodeInfos.end()) + { + return nullptr; + } + return it->second; + } + + std::string const& groupID() const { return m_groupID; } + std::string const& chainID() const { return m_chainID; } + + virtual void setGenesisConfig(std::string const& _genesisConfig) + { + m_genesisConfig = _genesisConfig; + } + virtual void setIniConfig(std::string const& _iniConfig) { m_iniConfig = _iniConfig; } + virtual bool appendNodeInfo(ChainNodeInfo::Ptr _nodeInfo) + { + UpgradableGuard l(x_nodeInfos); + auto const& nodeName = _nodeInfo->nodeName(); + if (m_nodeInfos.count(nodeName)) + { + return false; + } + UpgradeGuard ul(l); + m_nodeInfos[nodeName] = _nodeInfo; + return true; + } + + virtual void updateNodeInfo(ChainNodeInfo::Ptr _nodeInfo) + { + WriteGuard l(x_nodeInfos); + auto const& nodeName = _nodeInfo->nodeName(); + if (m_nodeInfos.count(nodeName)) + { + *(m_nodeInfos[nodeName]) = *_nodeInfo; + return; + } + m_nodeInfos[nodeName] = _nodeInfo; + } + + virtual bool removeNodeInfo(std::string const& _nodeName) + { + UpgradableGuard l(x_nodeInfos); + if (!m_nodeInfos.count(_nodeName)) + { + return false; + } + UpgradeGuard ul(l); + m_nodeInfos.erase(_nodeName); + return true; + } + + virtual void setGroupID(std::string const& _groupID) { m_groupID = _groupID; } + virtual void setChainID(std::string const& _chainID) { m_chainID = _chainID; } + virtual int64_t nodesNum() const + { + ReadGuard l(x_nodeInfos); + return m_nodeInfos.size(); + } + + // return copied nodeInfos to ensure thread-safe + auto nodeInfos() { return m_nodeInfos; } + + bcos::group::ChainNodeInfoFactory::Ptr chainNodeInfoFactory() const + { + return m_chainNodeInfoFactory; + } + + void setChainNodeInfoFactory(bcos::group::ChainNodeInfoFactory::Ptr _chainNodeInfoFactory) + { + m_chainNodeInfoFactory = _chainNodeInfoFactory; + } + + bool wasm() const { return m_wasm; } + bool smCryptoType() const { return m_smCryptoType; } + virtual void setWasm(bool _wasm) { m_wasm = _wasm; } + virtual void setSmCryptoType(bool _smCryptoType) { m_smCryptoType = _smCryptoType; } + +protected: + bool m_wasm{false}; + bool m_smCryptoType{false}; + + ChainNodeInfoFactory::Ptr m_chainNodeInfoFactory; + + std::string m_chainID; + std::string m_groupID; + // the genesis config for the group + std::string m_genesisConfig; + // the iniConfig for the group + std::string m_iniConfig; + // node name to node deployment information mapping + std::map> m_nodeInfos; + mutable SharedMutex x_nodeInfos; +}; + +inline std::string printGroupInfo(GroupInfo::Ptr _groupInfo) +{ + if (!_groupInfo) + { + return ""; + } + std::stringstream oss; + oss << LOG_KV("group", _groupInfo->groupID()) << LOG_KV("chain", _groupInfo->chainID()) + << LOG_KV("nodeSize", _groupInfo->nodesNum()); + return oss.str(); +} +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/multigroup/GroupInfoCodec.h b/bcos-framework/bcos-framework/multigroup/GroupInfoCodec.h new file mode 100644 index 0000000..393f481 --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/GroupInfoCodec.h @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to deploy new node + * @file GroupInfoCodec.h + * @author: yujiechen + * @date 2022-03-29 + */ +#pragma once +#include "GroupInfo.h" +#include +#include + +namespace bcos +{ +namespace group +{ +class GroupInfoCodec +{ +public: + using Ptr = std::shared_ptr; + GroupInfoCodec() = default; + virtual ~GroupInfoCodec() {} + + virtual GroupInfo::Ptr deserialize(const std::string& _encodedData) = 0; + virtual void serialize(std::string& _encodedData, GroupInfo::Ptr _groupInfo) = 0; + virtual Json::Value serialize(GroupInfo::Ptr _groupInfo) = 0; +}; +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/multigroup/GroupInfoFactory.h b/bcos-framework/bcos-framework/multigroup/GroupInfoFactory.h new file mode 100644 index 0000000..f192be5 --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/GroupInfoFactory.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to build the GroupInfo + * @file GroupInfoFactory.h + * @author: yujiechen + * @date 2021-09-18 + */ +#pragma once +#include "ChainNodeInfoFactory.h" +#include "GroupInfo.h" +namespace bcos +{ +namespace group +{ +class GroupInfoFactory +{ +public: + using Ptr = std::shared_ptr; + GroupInfoFactory() = default; + virtual ~GroupInfoFactory() {} + virtual GroupInfo::Ptr createGroupInfo() { return std::make_shared(); } + virtual GroupInfo::Ptr createGroupInfo(std::string const& _chainID, std::string const& _groupID) + { + return std::make_shared(_chainID, _groupID); + } +}; +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/multigroup/GroupTypeDef.h b/bcos-framework/bcos-framework/multigroup/GroupTypeDef.h new file mode 100644 index 0000000..27faf8c --- /dev/null +++ b/bcos-framework/bcos-framework/multigroup/GroupTypeDef.h @@ -0,0 +1,35 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the basic type of the GroupManager + * @file GroupTypeDef.h + * @author: yujiechen + * @date 2021-09-16 + */ +#pragma once +#include +#include +#include + +#define GROUP_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("GROUP") + +namespace bcos +{ +namespace group +{ +DERIVE_BCOS_EXCEPTION(InvalidGroupInfo); +DERIVE_BCOS_EXCEPTION(InvalidChainNodeInfo); +} // namespace group +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/AMOPRequest.h b/bcos-framework/bcos-framework/protocol/AMOPRequest.h new file mode 100644 index 0000000..b0eb486 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/AMOPRequest.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPRequest.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once +#include +#include + +// check offset length overflow when decode message +#define OFFSET_CHECK(offset, step, length) \ + do \ + { \ + if (offset + step > length) \ + { \ + throw std::runtime_error("offset overflow, offset: " + std::to_string(offset) + \ + ",step: " + std::to_string(step) + \ + " ,length: " + std::to_string(length)); \ + } \ + } while (0) + +namespace bcos +{ +namespace protocol +{ +class AMOPRequest +{ +public: + using Ptr = std::shared_ptr; + AMOPRequest() = default; + AMOPRequest(bcos::bytesConstRef _data) { decode(_data); } + virtual ~AMOPRequest() {} + + // topic field length + const static size_t TOPIC_MAX_LENGTH = 65535; + const static size_t MESSAGE_MIN_LENGTH = 2; + + + std::string topic() const { return m_topic; } + void setTopic(const std::string& _topic) { m_topic = _topic; } + void setData(bcos::bytesConstRef _data) { m_data = _data; } + bcos::bytesConstRef data() const { return m_data; } + + virtual bool encode(bcos::bytes& _buffer) + { + if (m_topic.size() > TOPIC_MAX_LENGTH) + { + return false; + } + // the version + auto version = boost::asio::detail::socket_ops::host_to_network_long(m_version); + auto versionLen = sizeof(m_version) / sizeof(uint8_t); + _buffer.insert(_buffer.end(), (byte*)&version, (byte*)&version + versionLen); + // the topic length + uint16_t length = + boost::asio::detail::socket_ops::host_to_network_short((uint16_t)m_topic.size()); + _buffer.insert(_buffer.end(), (byte*)&length, (byte*)&length + 2); + // the topic data + _buffer.insert(_buffer.end(), m_topic.begin(), m_topic.end()); + // the data + _buffer.insert(_buffer.end(), m_data.begin(), m_data.end()); + return true; + } + virtual int64_t decode(bcos::bytesConstRef _data) + { + if (_data.size() < MESSAGE_MIN_LENGTH) + { + return -1; + } + + try + { + std::size_t length = _data.size(); + std::size_t offset = 0; + // decode version + auto versionLen = sizeof(m_version) / sizeof(uint8_t); + OFFSET_CHECK(offset, versionLen, length); + offset += versionLen; + m_version = + boost::asio::detail::socket_ops::network_to_host_long(*((uint32_t*)_data.data())); + + // decode topicLength + OFFSET_CHECK(offset, 2, length); + uint16_t topicLen = boost::asio::detail::socket_ops::network_to_host_short( + *((uint16_t*)(_data.data() + versionLen))); + offset += 2; + + // decode topic + OFFSET_CHECK(offset, topicLen, length); + m_topic = std::string(_data.data() + offset, _data.data() + offset + topicLen); + offset += topicLen; + + // decode data + m_data = _data.getCroppedData(offset); + return _data.size(); + } + catch (const std::string&) + { + return -1; + } + } + + virtual uint32_t version() const { return m_version; } + virtual void setVersion(uint32_t _version) { m_version = _version; } + +private: + std::string m_topic; + bcos::bytesConstRef m_data = bcos::bytesConstRef(); + uint32_t m_version = 0; +}; + +class AMOPRequestFactory +{ +public: + using Ptr = std::shared_ptr; + AMOPRequestFactory() = default; + virtual ~AMOPRequestFactory() {} + + std::shared_ptr buildRequest() { return std::make_shared(); } + std::shared_ptr buildRequest(bcos::bytesConstRef _data) + { + return std::make_shared(_data); + } +}; + +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/Block.h b/bcos-framework/bcos-framework/protocol/Block.h new file mode 100644 index 0000000..9f25cc3 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/Block.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Block + * @file Block.h + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "BlockHeader.h" +#include "Transaction.h" +#include "TransactionFactory.h" +#include "TransactionMetaData.h" +#include "TransactionReceipt.h" +#include "TransactionReceiptFactory.h" +#include + +namespace bcos::protocol +{ +using HashList = std::vector; +using HashListPtr = std::shared_ptr; +using HashListConstPtr = std::shared_ptr; + +using NonceList = std::vector; +using NonceListPtr = std::shared_ptr; + +enum BlockType : int32_t +{ + CompleteBlock = 1, + WithTransactionsHash = 2, +}; + +class Block +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + Block() = default; + Block(const Block&) = default; + Block(Block&&) = default; + Block& operator=(const Block&) = default; + Block& operator=(Block&&) = default; + virtual ~Block() = default; + + virtual void decode(bytesConstRef _data, bool _calculateHash, bool _checkSig) = 0; + virtual void encode(bytes& _encodeData) const = 0; + + virtual bcos::crypto::HashType calculateTransactionRoot(const crypto::Hash& hashImpl) const = 0; + virtual bcos::crypto::HashType calculateReceiptRoot(const crypto::Hash& hashImpl) const = 0; + + virtual int32_t version() const = 0; + virtual void setVersion(int32_t _version) = 0; + virtual BlockType blockType() const = 0; + // blockHeader gets blockHeader + virtual BlockHeader::ConstPtr blockHeaderConst() const = 0; + virtual BlockHeader::Ptr blockHeader() = 0; + // get transactions + virtual Transaction::ConstPtr transaction(uint64_t _index) const = 0; + // get receipts + virtual TransactionReceipt::ConstPtr receipt(uint64_t _index) const = 0; + // get transaction metaData + virtual TransactionMetaData::ConstPtr transactionMetaData(uint64_t _index) const = 0; + // get transaction hash + virtual bcos::crypto::HashType transactionHash(uint64_t _index) const + { + auto txMetaData = transactionMetaData(_index); + if (txMetaData) + { + return txMetaData->hash(); + } + return {}; + } + + virtual void setBlockType(BlockType _blockType) = 0; + // setBlockHeader sets blockHeader + virtual void setBlockHeader(BlockHeader::Ptr _blockHeader) = 0; + // set transactions + virtual void setTransaction(uint64_t _index, Transaction::Ptr _transaction) = 0; + // FIXME: appendTransaction will create Transaction, the parameter should be object not pointer + virtual void appendTransaction(Transaction::Ptr _transaction) = 0; + // set receipts + virtual void setReceipt(uint64_t _index, TransactionReceipt::Ptr _receipt) = 0; + virtual void appendReceipt(TransactionReceipt::Ptr _receipt) = 0; + // set transaction metaData + // FIXME: appendTransactionMetaData will create, parameter should be object instead of pointer + virtual void appendTransactionMetaData(TransactionMetaData::Ptr _txMetaData) = 0; + + // get transactions size + virtual uint64_t transactionsSize() const = 0; + virtual uint64_t transactionsMetaDataSize() const = 0; + virtual uint64_t transactionsHashSize() const { return transactionsMetaDataSize(); } + + // get receipts size + virtual uint64_t receiptsSize() const = 0; + + // for nonceList + virtual void setNonceList(RANGES::any_view nonces) = 0; + virtual RANGES::any_view nonceList() const = 0; + + virtual NonceListPtr nonces() const + { + return std::make_shared( + RANGES::iota_view(0LU, transactionsSize()) | + RANGES::views::transform([this](uint64_t index) { + auto transaction = this->transaction(index); + return transaction->nonce(); + }) | + RANGES::to()); + } +}; +using Blocks = std::vector; +using BlocksPtr = std::shared_ptr; +} // namespace bcos::protocol diff --git a/bcos-framework/bcos-framework/protocol/BlockFactory.h b/bcos-framework/bcos-framework/protocol/BlockFactory.h new file mode 100644 index 0000000..1c04032 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/BlockFactory.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BlockFactory.h + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "Block.h" +#include "BlockHeaderFactory.h" +#include "TransactionFactory.h" +#include "TransactionMetaData.h" +#include "TransactionReceiptFactory.h" +#include + +namespace bcos::protocol +{ + +class BlockFactory +{ +public: + using Ptr = std::shared_ptr; + BlockFactory() = default; + BlockFactory(const BlockFactory&) = default; + BlockFactory(BlockFactory&&) = default; + BlockFactory& operator=(const BlockFactory&) = default; + BlockFactory& operator=(BlockFactory&&) = default; + virtual ~BlockFactory() = default; + + virtual Block::Ptr createBlock() = 0; + + Block::Ptr createBlock( + bcos::bytes const& _data, bool _calculateHash = true, bool _checkSig = true) + { + return createBlock(bcos::ref(_data), _calculateHash, _checkSig); + } + + virtual Block::Ptr createBlock( + bytesConstRef _data, bool _calculateHash = true, bool _checkSig = true) = 0; + + virtual TransactionMetaData::Ptr createTransactionMetaData() = 0; + virtual TransactionMetaData::Ptr createTransactionMetaData( + bcos::crypto::HashType _hash, std::string const& _to) = 0; + + virtual bcos::crypto::CryptoSuite::Ptr cryptoSuite() = 0; + virtual BlockHeaderFactory::Ptr blockHeaderFactory() = 0; + virtual TransactionFactory::Ptr transactionFactory() = 0; + virtual TransactionReceiptFactory::Ptr receiptFactory() = 0; +}; +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/BlockHeader.h b/bcos-framework/bcos-framework/protocol/BlockHeader.h new file mode 100644 index 0000000..7647214 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/BlockHeader.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for BlockHeader + * @file BlockHeader.h + * @author: yujiechen + * @date: 2021-03-22 + */ +#pragma once +#include "Exceptions.h" +#include "ProtocolTypeDef.h" +#include +#include +#include +#include + +namespace bcos::protocol +{ +class BlockHeader +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using BlockHeadersPtr = std::shared_ptr >; + BlockHeader() = default; + virtual ~BlockHeader() = default; + + virtual void decode(bytesConstRef _data) = 0; + virtual void encode(bytes& _encodeData) const = 0; + + virtual bcos::crypto::HashType hash() const = 0; + virtual void calculateHash(const crypto::Hash& hashImpl) = 0; + + virtual void populateFromParents(const crypto::Hash& hashImpl, + const std::vector& _parents, BlockNumber _number) + { + // set parentInfo + ParentInfoList parentInfoList; + for (const auto& parentHeader : _parents) + { + ParentInfo parentInfo; + parentInfo.blockNumber = parentHeader->number(); + parentInfo.blockHash = parentHeader->hash(); + parentInfoList.emplace_back(parentInfo); + } + setParentInfo(parentInfoList); + setNumber(_number); + } + + virtual void clear() = 0; + + // verifySignatureList verifys the signatureList + virtual void verifySignatureList( + const crypto::Hash& hashImpl, const crypto::SignatureCrypto& signatureImpl) const + { + auto signatures = signatureList(); + auto sealers = sealerList(); + if (signatures.size() < sealers.size()) + { + BOOST_THROW_EXCEPTION(InvalidBlockHeader() << errinfo_comment( + "Invalid blockHeader for the size of sealerList " + "is smaller than the size of signatureList")); + } + for (const auto& signature : signatures) + { + auto sealerIndex = signature.index; + auto signatureData = signature.signature; + if (!signatureImpl.verify( + std::shared_ptr(&((sealers)[sealerIndex]), [](const bytes*) {}), + hash(), bytesConstRef(signatureData.data(), signatureData.size()))) + { + BOOST_THROW_EXCEPTION( + InvalidSignatureList() + << errinfo_comment("Invalid signatureList for verify failed, signatureData:" + + *toHexString(signatureData))); + } + } + } + virtual void populateEmptyBlock( + BlockNumber _number, int64_t _sealerId, int64_t _timestamp = utcTime()) + { + setNumber(_number); + setSealer(_sealerId); + setTimestamp(_timestamp); + } + + // version returns the version of the blockHeader + virtual uint32_t version() const = 0; + // parentInfo returns the parent information, including (parentBlockNumber, parentHash) + virtual RANGES::any_view + parentInfo() const = 0; + // txsRoot returns the txsRoot of the current block + virtual bcos::crypto::HashType txsRoot() const = 0; + // receiptsRoot returns the receiptsRoot of the current block + virtual bcos::crypto::HashType receiptsRoot() const = 0; + // stateRoot returns the stateRoot of the current block + virtual bcos::crypto::HashType stateRoot() const = 0; + // number returns the number of the current block + virtual BlockNumber number() const = 0; + virtual u256 gasUsed() const = 0; + virtual int64_t timestamp() const = 0; + // sealer returns the sealer that generate this block + virtual int64_t sealer() const = 0; + // sealerList returns the current sealer list + virtual gsl::span sealerList() const = 0; + virtual bytesConstRef extraData() const = 0; + virtual gsl::span signatureList() const = 0; + virtual gsl::span consensusWeights() const = 0; + + virtual void setVersion(uint32_t _version) = 0; + virtual void setParentInfo(RANGES::any_view parentInfo) = 0; + + virtual void setTxsRoot(bcos::crypto::HashType _txsRoot) = 0; + virtual void setReceiptsRoot(bcos::crypto::HashType _receiptsRoot) = 0; + virtual void setStateRoot(bcos::crypto::HashType _stateRoot) = 0; + virtual void setNumber(BlockNumber _blockNumber) = 0; + virtual void setGasUsed(u256 _gasUsed) = 0; + virtual void setTimestamp(int64_t _timestamp) = 0; + virtual void setSealer(int64_t _sealerId) = 0; + + virtual void setSealerList(gsl::span const& _sealerList) = 0; + virtual void setSealerList(std::vector&& _sealerList) = 0; + + virtual void setConsensusWeights(gsl::span const& _weightList) = 0; + virtual void setConsensusWeights(std::vector&& _weightList) = 0; + + virtual void setExtraData(bytes const& _extraData) = 0; + virtual void setExtraData(bytes&& _extraData) = 0; + + virtual void setSignatureList(gsl::span const& _signatureList) = 0; + virtual void setSignatureList(SignatureList&& _signatureList) = 0; +}; +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/BlockHeaderFactory.h b/bcos-framework/bcos-framework/protocol/BlockHeaderFactory.h new file mode 100644 index 0000000..e8ff28f --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/BlockHeaderFactory.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for BlockHeader + * @file BlockHeaderFactory.h + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "BlockHeader.h" +namespace bcos::protocol +{ +class BlockHeaderFactory +{ +public: + using Ptr = std::shared_ptr; + BlockHeaderFactory() = default; + virtual ~BlockHeaderFactory() = default; + virtual BlockHeader::Ptr createBlockHeader() = 0; + virtual BlockHeader::Ptr createBlockHeader(bytes const& _data) = 0; + virtual BlockHeader::Ptr createBlockHeader(bytesConstRef _data) = 0; + virtual BlockHeader::Ptr createBlockHeader(BlockNumber _number) = 0; + + virtual BlockHeader::Ptr populateBlockHeader(const BlockHeader::Ptr& _blockHeader) + { + auto header = createBlockHeader(); + header->setVersion(_blockHeader->version()); + header->setTxsRoot(_blockHeader->txsRoot()); + header->setReceiptsRoot(_blockHeader->receiptsRoot()); + header->setStateRoot(_blockHeader->stateRoot()); + header->setNumber(_blockHeader->number()); + header->setGasUsed(_blockHeader->gasUsed()); + header->setTimestamp(_blockHeader->timestamp()); + header->setSealer(_blockHeader->sealer()); + header->setSealerList(_blockHeader->sealerList()); + header->setSignatureList(_blockHeader->signatureList()); + header->setConsensusWeights(_blockHeader->consensusWeights()); + header->setParentInfo(_blockHeader->parentInfo()); + auto extraData = _blockHeader->extraData().toBytes(); + header->setExtraData(std::move(extraData)); + return header; + } +}; +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/CommonError.h b/bcos-framework/bcos-framework/protocol/CommonError.h new file mode 100644 index 0000000..22701a0 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/CommonError.h @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define common error for all the modules + * @file CommonError.h + * @author: yujiechen + * @date 2021-04-22 + */ +#pragma once +#include +namespace bcos +{ +namespace protocol +{ +enum CommonError : int32_t +{ + SUCCESS = 0, + TIMEOUT = 1000, // for gateway + NotFoundFrontServiceSendMsg = 1001, + NotFoundFrontServiceDispatchMsg = 1002, + GatewaySendMsgFailed = 1003, + NetworkBandwidthOverFlow = 1004, + TransactionsMissing = 2000, // for transaction sync + InconsistentTransactions = 2001, + TxsSignatureVerifyFailed = 2002, + FetchTransactionsFailed = 2003, + NotFoundPeerByTopicSendMsg = 3001, + NotFoundClientByTopicDispatchMsg = 3002, + AMOPSendMsgFailed = 3003, + UnSupportedPacketType = 3004, +}; + +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/Exceptions.h b/bcos-framework/bcos-framework/protocol/Exceptions.h new file mode 100644 index 0000000..489ff79 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/Exceptions.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief exceptions for protocol + * @file Exceptions.h + * @author: yujiechen + * @date: 2021-03-16 + */ +#pragma once +#include +namespace bcos +{ +namespace protocol +{ +DERIVE_BCOS_EXCEPTION(InvalidBlockHeader); +DERIVE_BCOS_EXCEPTION(InvalidSignatureList); +// transaction exceptions +DERIVE_BCOS_EXCEPTION(OutOfGasLimit); +DERIVE_BCOS_EXCEPTION(NotEnoughCash); +DERIVE_BCOS_EXCEPTION(BadInstruction); +DERIVE_BCOS_EXCEPTION(BadJumpDestination); +DERIVE_BCOS_EXCEPTION(OutOfGas); +DERIVE_BCOS_EXCEPTION(OutOfStack); +DERIVE_BCOS_EXCEPTION(StackUnderflow); +DERIVE_BCOS_EXCEPTION(ContractAddressAlreadyUsed); +DERIVE_BCOS_EXCEPTION(RevertInstruction); +DERIVE_BCOS_EXCEPTION(PermissionDenied); +DERIVE_BCOS_EXCEPTION(CallAddressError); +DERIVE_BCOS_EXCEPTION(GasOverflow); +DERIVE_BCOS_EXCEPTION(ContractFrozen); +DERIVE_BCOS_EXCEPTION(AccountFrozen); +class PrecompiledError : public Exception +{ +public: + PrecompiledError() : Exception() {} + PrecompiledError(std::string const& _msg) : Exception(_msg) {} +}; +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/GlobalConfig.h b/bcos-framework/bcos-framework/protocol/GlobalConfig.h new file mode 100644 index 0000000..e114112 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/GlobalConfig.h @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for ProtocolInfo + * @file ProtocolInfo.h + * @author: yujiechen + * @date 2022-03-08 + */ +#pragma once +#include "Protocol.h" +#include "ProtocolInfo.h" +#include "ProtocolInfoCodec.h" +#include +#include + +namespace bcos +{ +namespace protocol +{ +class GlobalConfig +{ +public: + static GlobalConfig& instance() + { + static GlobalConfig ins; + return ins; + } + GlobalConfig() + { + // nodeService + c_supportedProtocols.insert({ProtocolModuleID::NodeService, + std::make_shared( + ProtocolModuleID::NodeService, ProtocolVersion::V0, ProtocolVersion::V1)}); + // gatewayService + c_supportedProtocols.insert({ProtocolModuleID::GatewayService, + std::make_shared( + ProtocolModuleID::GatewayService, ProtocolVersion::V0, ProtocolVersion::V2)}); + // rpcService && SDK + c_supportedProtocols.insert({ProtocolModuleID::RpcService, + std::make_shared( + ProtocolModuleID::RpcService, ProtocolVersion::V0, ProtocolVersion::V1)}); + // executorService + c_supportedProtocols.insert({ProtocolModuleID::ExecutorService, + std::make_shared( + ProtocolModuleID::ExecutorService, ProtocolVersion::V0, ProtocolVersion::V1)}); + } + virtual ~GlobalConfig() {} + + ProtocolInfo::ConstPtr protocolInfo(ProtocolModuleID _moduleID) const + { + if (!c_supportedProtocols.count(_moduleID)) + { + return nullptr; + } + return c_supportedProtocols.at(_moduleID); + } + + std::map const& supportedProtocols() const + { + return c_supportedProtocols; + } + // Note: must set the protocolInfo codec when init + virtual void setCodec(ProtocolInfoCodec::Ptr _codec) { m_codec = _codec; } + virtual ProtocolInfoCodec::Ptr codec() const { return m_codec; } + + BlockVersion minSupportedVersion() const { return m_minSupportedVersion; } + BlockVersion maxSupportedVersion() const { return m_maxSupportedVersion; } + +private: + std::map c_supportedProtocols; + // the minimum supported version + BlockVersion m_minSupportedVersion = BlockVersion::MIN_VERSION; + BlockVersion m_maxSupportedVersion = BlockVersion::MAX_VERSION; + + ProtocolInfoCodec::Ptr m_codec; + mutable bcos::SharedMutex x_version; +}; +} // namespace protocol +} // namespace bcos +#define g_BCOSConfig bcos::protocol::GlobalConfig::instance() \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/LogEntry.h b/bcos-framework/bcos-framework/protocol/LogEntry.h new file mode 100644 index 0000000..18738c0 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/LogEntry.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LogEntry.h + * @author: yujiechen + * @date: 2021-03-18 + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +class LogEntry +{ +public: + using Ptr = std::shared_ptr; + LogEntry() = default; + LogEntry(bytes const& _address, h256s _topics, bytes _data) + : m_address(_address), m_topics(std::move(_topics)), m_data(std::move(_data)) + {} + + ~LogEntry() {} + + std::string_view address() const + { + return std::string_view((char*)m_address.data(), m_address.size()); + } + gsl::span topics() const { return gsl::span(m_topics.data(), m_topics.size()); } + bytesConstRef data() const { return ref(m_data); } + // Define the scale decode method, which cannot be modified at will + template > + friend Stream& operator>>(Stream& _stream, LogEntry& _logEntry) + { + return _stream >> _logEntry.m_address >> _logEntry.m_topics >> _logEntry.m_data; + } + + // Define the scale encode method, which cannot be modified at will + template > + friend Stream& operator<<(Stream& _stream, LogEntry const& _logEntry) + { + return _stream << _logEntry.m_address << _logEntry.m_topics << _logEntry.m_data; + } + +private: + bcos::bytes m_address; + bcos::h256s m_topics; + bytes m_data; +}; + +using LogEntries = std::vector; +using LogEntriesPtr = std::shared_ptr>; +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/MemberInterface.h b/bcos-framework/bcos-framework/protocol/MemberInterface.h new file mode 100644 index 0000000..73baf72 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/MemberInterface.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the member information + * @file MemberInterface.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include +namespace bcos +{ +namespace protocol +{ +class MemberInterface +{ +public: + using Ptr = std::shared_ptr; + MemberInterface() = default; + virtual ~MemberInterface() {} + + // the memberID of different service, should be unique + virtual void setMemberID(std::string const& _memberID) = 0; + // the memberConfig of different service + virtual void setMemberConfig(std::string const& _config) = 0; + // no-need to store or transfer in the network + virtual void setSeq(int64_t _seq) { m_seq = _seq; } + virtual void setLeaseID(int64_t _leaseID) { m_leaseID = _leaseID; } + + virtual std::string const& memberID() const = 0; + virtual std::string const& memberConfig() const = 0; + virtual int64_t seq() const { return m_seq; } + virtual int64_t leaseID() const { return m_leaseID; } + + // encode the member into string + virtual void encode(std::string& _encodedData) = 0; + // decode the member info + virtual void decode(std::string const& _memberData) = 0; + +protected: + int64_t m_seq; + int64_t m_leaseID; +}; + +class MemberFactoryInterface +{ +public: + using Ptr = std::shared_ptr; + MemberFactoryInterface() = default; + virtual ~MemberFactoryInterface() {} + + virtual MemberInterface::Ptr createMember() = 0; + virtual MemberInterface::Ptr createMember(std::string const& _memberData) = 0; +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/Protocol.h b/bcos-framework/bcos-framework/protocol/Protocol.h new file mode 100644 index 0000000..ead952e --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/Protocol.h @@ -0,0 +1,257 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Protocol for all the modules + * @file Protocol.h + * @author: yujiechen + * @date 2021-04-21 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +// Note: both MessageExtFieldFlag and NodeType occupy the ext fields +enum MessageExtFieldFlag : uint32_t +{ + Response = 0x0001, + Compress = 0x0010, +}; +enum NodeType : uint32_t +{ + None = 0x0, + LIGHT_NODE = 0x1, + CONSENSUS_NODE = 0x2, + OBSERVER_NODE = 0x4, + NODE_OUTSIDE_GROUP = 0x8, +}; + +enum NodeArchitectureType +{ + AIR = 0, + PRO = 1, + MAX = 2, + LIGHT +}; + +enum MessageType +{ + HANDESHAKE = 0x100, // 256 + BLOCK_NOTIFY = 0x101, // 257 + RPC_REQUEST = 0x102, // 258 + GROUP_NOTIFY = 0x103, // 259 + EVENT_SUBSCRIBE = 0x120, // 288 + EVENT_UNSUBSCRIBE = 0x121, // 289 + EVENT_LOG_PUSH = 0x122, // 290 +}; + +// TODO: Allow add new module, exchange moduleid or version +enum ModuleID +{ + PBFT = 1000, + Raft = 1001, + + BlockSync = 2000, + TxsSync = 2001, + ConsTxsSync = 2002, + + AMOP = 3000, + + LIGHTNODE_GET_BLOCK = 4000, + LIGHTNODE_GET_TRANSACTIONS = 4001, + LIGHTNODE_GET_RECEIPTS = 4002, + LIGHTNODE_GET_STATUS = 4003, + LIGHTNODE_SEND_TRANSACTION = 4004, + LIGHTNODE_CALL = 4005, + LIGHTNODE_GET_ABI = 4006, + LIGHTNODE_END = 4999, + + SYNC_PUSH_TRANSACTION = 5000, + SYNC_GET_TRANSACTIONS = 5001, + SYNC_END = 5999 +}; + +enum ProtocolModuleID : uint32_t +{ + NodeService = 0x0, + GatewayService = 0x1, + RpcService = 0x2, + ExecutorService = 0x3, + MAX_PROTOCOL_MODULE = ExecutorService, +}; +enum ProtocolVersion : uint32_t +{ + V0 = 0, + V1 = 1, + V2 = 2, +}; + +// BlockVersion only present the data version with format major.minor.patch of 3 bytes, data should +// be compatible with the same major.minor version, the patch version should always be compatible, +// the last byte is reserved, so 3.1.0 is 0x03010000 and is compatible with 3.1.1 which is +// 0x03010100 + +enum class BlockVersion : uint32_t +{ + V3_2_VERSION = 0x03020000, + V3_1_VERSION = 0x03010000, + V3_0_VERSION = 0x03000000, + RC4_VERSION = 4, + MIN_VERSION = RC4_VERSION, + MAX_VERSION = V3_2_VERSION, +}; +const std::string RC4_VERSION_STR = "3.0.0-rc4"; +const std::string V3_0_VERSION_STR = "3.0.0"; +const std::string V3_1_VERSION_STR = "3.1.0"; +const std::string V3_2_VERSION_STR = "3.2.0"; + +const std::string RC_VERSION_PREFIX = "3.0.0-rc"; + +const BlockVersion DEFAULT_VERSION = bcos::protocol::BlockVersion::V3_1_VERSION; +const uint8_t MAX_MAJOR_VERSION = std::numeric_limits::max(); +const uint8_t MIN_MAJOR_VERSION = 3; + +[[nodiscard]] inline int versionCompareTo( + std::variant _v1, BlockVersion const& _v2) +{ + int flag = 0; + std::visit( + [&_v2, &flag](auto&& arg) { + auto ver1 = static_cast(arg); + auto ver2 = static_cast(_v2); + flag = ver1 > ver2 ? 1 : -1; + flag = (ver1 == ver2) ? 0 : flag; + }, + _v1); + return flag; +} +inline std::ostream& operator<<(std::ostream& _out, bcos::protocol::BlockVersion const& _version) +{ + switch (_version) + { + case bcos::protocol::BlockVersion::RC4_VERSION: + _out << RC4_VERSION_STR; + break; + case bcos::protocol::BlockVersion::V3_0_VERSION: + _out << V3_0_VERSION_STR; + break; + case bcos::protocol::BlockVersion::V3_1_VERSION: + _out << V3_1_VERSION_STR; + break; + case bcos::protocol::BlockVersion::V3_2_VERSION: + _out << V3_2_VERSION_STR; + break; + default: + _out << "Unknown"; + break; + } + return _out; +} +inline std::ostream& operator<<(std::ostream& _out, NodeType const& _nodeType) +{ + switch (_nodeType) + { + case NodeType::None: + _out << "None"; + break; + case NodeType::CONSENSUS_NODE: + _out << "CONSENSUS_NODE"; + break; + case NodeType::OBSERVER_NODE: + _out << "OBSERVER_NODE"; + break; + case NodeType::LIGHT_NODE: + _out << "LIGHT_NODE"; + break; + case NodeType::NODE_OUTSIDE_GROUP: + _out << "NODE_OUTSIDE_GROUP"; + break; + default: + _out << "Unknown"; + break; + } + return _out; +} + +inline std::optional stringToModuleID(const std::string& _moduleName) +{ + if (boost::iequals(_moduleName, "raft")) + { + return bcos::protocol::ModuleID::Raft; + } + else if (boost::iequals(_moduleName, "pbft")) + { + return bcos::protocol::ModuleID::PBFT; + } + else if (boost::iequals(_moduleName, "amop")) + { + return bcos::protocol::ModuleID::AMOP; + } + else if (boost::iequals(_moduleName, "block_sync")) + { + return bcos::protocol::ModuleID::BlockSync; + } + else if (boost::iequals(_moduleName, "txs_sync")) + { + return bcos::protocol::ModuleID::TxsSync; + } + else if (boost::iequals(_moduleName, "cons_txs_sync")) + { + return bcos::protocol::ModuleID::ConsTxsSync; + } + else if (boost::iequals(_moduleName, "light_node")) + { + return bcos::protocol::ModuleID::LIGHTNODE_GET_BLOCK; + } + else + { + return std::nullopt; + } +} + +inline std::string moduleIDToString(ModuleID _moduleID) +{ + switch (_moduleID) + { + case ModuleID::PBFT: + return "pbft"; + case ModuleID::Raft: + return "raft"; + case ModuleID::BlockSync: + return "block_sync"; + case ModuleID::TxsSync: + return "txs_sync"; + case ModuleID::ConsTxsSync: + return "cons_txs_sync"; + case ModuleID::AMOP: + return "amop"; + case ModuleID::LIGHTNODE_GET_BLOCK: + return "light_node"; + default: + return "unrecognized module"; + }; +} + + +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/ProtocolInfo.h b/bcos-framework/bcos-framework/protocol/ProtocolInfo.h new file mode 100644 index 0000000..2a07169 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/ProtocolInfo.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for ProtocolInfo + * @file ProtocolInfo.h + * @author: yujiechen + * @date 2022-03-08 + */ +#pragma once +#include "Protocol.h" +#include +namespace bcos +{ +namespace protocol +{ +class ProtocolInfo +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + ProtocolInfo() : m_protocolModuleID{}, m_minVersion{}, m_maxVersion{}, m_version{} {} + ProtocolInfo(ProtocolModuleID _moduleID, uint32_t _minVersion, uint32_t _maxVersion) + : m_protocolModuleID(_moduleID), + m_minVersion(_minVersion), + m_maxVersion(_maxVersion), + m_version(m_minVersion) + {} + virtual ~ProtocolInfo() {} + virtual void setProtocolModuleID(ProtocolModuleID _moduleID) { m_protocolModuleID = _moduleID; } + virtual void setMinVersion(uint32_t _minVersion) { m_minVersion = _minVersion; } + virtual void setMaxVersion(uint32_t _maxVersion) { m_maxVersion = _maxVersion; } + // set the negotiated version + virtual void setVersion(uint32_t _version) { m_version = _version; } + + // the moduleID + virtual ProtocolModuleID protocolModuleID() const { return m_protocolModuleID; } + // the minimum supported version number + virtual uint32_t minVersion() const { return m_minVersion; } + // the maximum supported version number + virtual uint32_t maxVersion() const { return m_maxVersion; } + + // the negotiated version + virtual uint32_t version() const { return m_version; } + +protected: + ProtocolModuleID m_protocolModuleID; + // Note: here can't use enum Version type in case of setVersion failed for no-defined Version + uint32_t m_minVersion; + uint32_t m_maxVersion; + uint32_t m_version; +}; +} // namespace protocol +} // namespace bcos diff --git a/bcos-framework/bcos-framework/protocol/ProtocolInfoCodec.h b/bcos-framework/bcos-framework/protocol/ProtocolInfoCodec.h new file mode 100644 index 0000000..807ea18 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/ProtocolInfoCodec.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for ProtocolInfoCodec + * @file ProtocolInfoCodec.h + * @author: yujiechen + * @date 2022-03-22 + */ +#pragma once +#include "bcos-framework/protocol/ProtocolInfo.h" +#include +#include +namespace bcos +{ +namespace protocol +{ +class ProtocolInfoCodec +{ +public: + using ConstPtr = std::shared_ptr; + using Ptr = std::shared_ptr; + ProtocolInfoCodec() = default; + virtual ~ProtocolInfoCodec() {} + + virtual void encode(ProtocolInfo::ConstPtr _protocol, bcos::bytes& _encodeData) const = 0; + virtual ProtocolInfo::Ptr decode(bcos::bytesConstRef _data) const = 0; +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/ProtocolTypeDef.h b/bcos-framework/bcos-framework/protocol/ProtocolTypeDef.h new file mode 100644 index 0000000..2944592 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/ProtocolTypeDef.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief typedef for protocol module + * @file ProtocolTypeDef.h + * @author: yujiechen + * @date: 2021-04-9 + */ +#pragma once +#include +namespace bcos::protocol +{ +using BlockNumber = int64_t; +using NonceType = u256; +using NonceList = std::vector; +using NonceListPtr = std::shared_ptr; +using BytesList = std::vector>; +using BytesListPtr = std::shared_ptr; + +struct ParentInfo +{ + BlockNumber blockNumber = 0; + bcos::crypto::HashType blockHash; + + bool operator==(const ParentInfo& rhs) const + { + return this->blockNumber == rhs.blockNumber && this->blockHash == rhs.blockHash; + } + + template > + friend Stream& operator>>(Stream& _stream, ParentInfo& parentInfo) + { + return _stream >> parentInfo.blockNumber >> parentInfo.blockHash; + } + + template > + friend Stream& operator<<(Stream& _stream, ParentInfo const& parentInfo) + { + return _stream << parentInfo.blockNumber << parentInfo.blockHash; + } +}; +using ParentInfoList = std::vector; +using ParentInfoListPtr = std::shared_ptr; + +struct Signature +{ + int64_t index; + bytes signature; + + template > + friend Stream& operator>>(Stream& _stream, Signature& _signature) + { + return _stream >> _signature.index >> _signature.signature; + } + + template > + friend Stream& operator<<(Stream& _stream, Signature const& _signature) + { + return _stream << _signature.index << _signature.signature; + } +}; +using SignatureList = std::vector; +using SignatureListPtr = std::shared_ptr; + +// the weight list +using WeightList = std::vector; +using WeightListPtr = std::shared_ptr; + +int64_t constexpr InvalidSealerIndex = INT64_MAX; + +struct Session +{ + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + enum Status + { + STARTED = 0, + DIRTY, + COMMITTED, + ROLLBACKED + }; + + long sessionID; + Status status; + bcos::protocol::BlockNumber beginNumber; // [ + bcos::protocol::BlockNumber endNumber; // ) +}; + +struct TwoPCParams +{ + BlockNumber number = 0; + std::string primaryKey; + uint64_t timestamp = 0; +}; +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/ServiceDesc.h b/bcos-framework/bcos-framework/protocol/ServiceDesc.h new file mode 100644 index 0000000..0fddb2a --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/ServiceDesc.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define the common service information + * @file ServiceDesc.h + * @author: yujiechen + * @date: 2021-10-11 + */ +#pragma once +#include +#include +#include +namespace bcos +{ +namespace protocol +{ +enum ServiceType : int32_t +{ + NATIVE = 0, + EXECUTOR = 1, + LEDGER = 2, + SCHEDULER = 3, + FRONT = 4, + CONSENSUS = 5, + GATEWAY = 6, + RPC = 7, + TXPOOL = 8, +}; +const std::string NATIVE_NAME = "Native"; +const std::string NATIVE_SERVANT_NAME = "NativeNodeObj"; + +const std::string LEDGER_NAME = "Ledger"; +const std::string LEDGER_SERVANT_NAME = "LedgerServiceObj"; + +const std::string EXECUTOR_NAME = "Executor"; +const std::string EXECUTOR_SERVANT_NAME = "ExecutorServiceObj"; +const std::string EXECUTOR_SERVICE_NAME = "ExecutorService"; + +const std::string SCHEDULER_NAME = "Scheduler"; +const std::string SCHEDULER_SERVANT_NAME = "SchedulerServiceObj"; +const std::string SCHEDULER_SERVICE_NAME = "SchedulerService"; + +const std::string FRONT_NAME = "Front"; +const std::string FRONT_SERVANT_NAME = "FrontServiceObj"; +const std::string FRONT_SERVICE_NAME = "FrontService"; + +const std::string GATEWAY_NAME = "Gateway"; +const std::string GATEWAY_SERVANT_NAME = "GatewayServiceObj"; + +const std::string TXPOOL_NAME = "TxPool"; +const std::string TXPOOL_SERVANT_NAME = "TxPoolServiceObj"; +const std::string TXPOOL_SERVICE_NAME = "TxPoolService"; + +const std::string CONSENSUS_NAME = "PBFT"; +const std::string CONSENSUS_SERVANT_NAME = "PBFTServiceObj"; +const std::string CONSENSUS_SERVICE_NAME = "PBFTService"; + +const std::string RPC_NAME = "Rpc"; +const std::string RPC_SERVANT_NAME = "RpcServiceObj"; + +const std::string UNKNOWN_SERVANT = "Unknown"; + +inline std::string getPrxDesc(std::string const& _serviceName, std::string const& _objName) +{ + return _serviceName + "." + _objName; +} + +inline std::string getServiceObjByType(ServiceType _type) +{ + switch (_type) + { + case NATIVE: + return NATIVE_SERVANT_NAME; + case EXECUTOR: + return EXECUTOR_SERVANT_NAME; + case LEDGER: + return LEDGER_SERVANT_NAME; + case SCHEDULER: + return SCHEDULER_SERVANT_NAME; + case FRONT: + return FRONT_SERVANT_NAME; + case CONSENSUS: + return CONSENSUS_SERVANT_NAME; + case GATEWAY: + return GATEWAY_SERVANT_NAME; + case RPC: + return RPC_SERVANT_NAME; + case TXPOOL: + return TXPOOL_SERVANT_NAME; + default: + // undefined Comparator + break; + } + return UNKNOWN_SERVANT; +} + +inline std::string getServiceNameByType(ServiceType _type) +{ + switch (_type) + { + case NATIVE: + return NATIVE_NAME; + case EXECUTOR: + return EXECUTOR_NAME; + case LEDGER: + return LEDGER_NAME; + case SCHEDULER: + return SCHEDULER_NAME; + case FRONT: + return FRONT_NAME; + case CONSENSUS: + return CONSENSUS_NAME; + case GATEWAY: + return GATEWAY_NAME; + case RPC: + return RPC_SERVANT_NAME; + case TXPOOL: + return TXPOOL_NAME; + default: + // undefined Comparator + break; + } + return UNKNOWN_SERVANT; +} +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/Transaction.h b/bcos-framework/bcos-framework/protocol/Transaction.h new file mode 100644 index 0000000..7fd5c72 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/Transaction.h @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for transaction + * @file Transaction.h + */ +#pragma once +#include "TransactionSubmitResult.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::protocol +{ +enum TransactionType +{ + NullTransaction = 0, + ContractCreation, + MessageCall, +}; + +using TxSubmitCallback = + std::function; +class Transaction +{ +public: + enum Attribute : uint32_t + { + EVM_ABI_CODEC = 0x1, + LIQUID_SCALE_CODEC = 0x2, + DAG = 0x4, + LIQUID_CREATE = 0x8, + }; + + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + Transaction() = default; + Transaction(const Transaction&) = delete; + Transaction(Transaction&&) = delete; + Transaction& operator=(const Transaction&) = delete; + Transaction& operator=(Transaction&&) = delete; + virtual ~Transaction() = default; + + virtual void decode(bytesConstRef _txData) = 0; + virtual void encode(bcos::bytes& txData) const = 0; + virtual bcos::crypto::HashType hash() const = 0; + + virtual void verify(crypto::Hash& hashImpl, crypto::SignatureCrypto& signatureImpl) const + { + // The tx has already been verified + if (!sender().empty()) + { + return; + } + + auto hashResult = hash(); + // check the signatures + auto signature = signatureData(); + auto publicKey = signatureImpl.recover(hashResult, signature); + // recover the sender + forceSender(bcos::right160(hashImpl.hash(publicKey)).asBytes()); + } + + virtual int32_t version() const = 0; + virtual std::string_view chainId() const = 0; + virtual std::string_view groupId() const = 0; + virtual int64_t blockLimit() const = 0; + virtual u256 nonce() const = 0; + virtual std::string_view to() const = 0; + virtual std::string_view abi() const = 0; + + virtual std::string_view extraData() const = 0; + virtual void setExtraData(std::string const& _extraData) = 0; + + virtual std::string_view sender() const = 0; + + virtual bytesConstRef input() const = 0; + virtual int64_t importTime() const = 0; + virtual void setImportTime(int64_t _importTime) = 0; + virtual TransactionType type() const + { + if (!to().empty()) + { + return TransactionType::MessageCall; + } + return TransactionType::ContractCreation; + } + virtual void forceSender(bytes _sender) const = 0; + virtual bytesConstRef signatureData() const = 0; + + virtual int32_t attribute() const = 0; + virtual void setAttribute(int32_t attribute) = 0; + + TxSubmitCallback takeSubmitCallback() { return std::move(m_submitCallback); } + TxSubmitCallback const& submitCallback() const { return m_submitCallback; } + void setSubmitCallback(TxSubmitCallback _submitCallback) + { + m_submitCallback = std::move(_submitCallback); + } + bool synced() const { return m_synced; } + void setSynced(bool _synced) const { m_synced = _synced; } + + bool sealed() const { return m_sealed; } + void setSealed(bool _sealed) const { m_sealed = _sealed; } + + bool invalid() const { return m_invalid; } + void setInvalid(bool _invalid) const { m_invalid = _invalid; } + + void appendKnownNode(bcos::crypto::NodeIDPtr _node) const + { + std::unique_lock l(x_knownNodeList); + m_knownNodeList.insert(_node); + } + + bool isKnownBy(bcos::crypto::NodeIDPtr _node) const + { + std::shared_lock l(x_knownNodeList); + return m_knownNodeList.count(_node); + } + + void setSystemTx(bool _systemTx) const { m_systemTx = _systemTx; } + bool systemTx() const { return m_systemTx; } + + void setBatchId(bcos::protocol::BlockNumber _batchId) const { m_batchId = _batchId; } + bcos::protocol::BlockNumber batchId() const { return m_batchId; } + + void setBatchHash(bcos::crypto::HashType const& _hash) const { m_batchHash = _hash; } + bcos::crypto::HashType const& batchHash() const { return m_batchHash; } + + bool storeToBackend() const { return m_storeToBackend; } + void setStoreToBackend(bool _storeToBackend) const { m_storeToBackend = _storeToBackend; } + +protected: + TxSubmitCallback m_submitCallback; + // the tx has been synced or not + + // the hash of the proposal that the tx batched into + mutable bcos::crypto::HashType m_batchHash; + + // Record the list of nodes containing the transaction and provide related query interfaces. + mutable std::shared_mutex x_knownNodeList; + // Record the node where the transaction exists + mutable bcos::crypto::NodeIDSet m_knownNodeList; + // the number of proposal that the tx batched into + mutable bcos::protocol::BlockNumber m_batchId = {-1}; + + mutable std::atomic_bool m_synced = {false}; + // the tx has been sealed by the leader of not + mutable std::atomic_bool m_sealed = {false}; + // the tx is invalid for verify failed + mutable std::atomic_bool m_invalid = {false}; + // the transaction is the system transaction or not + mutable std::atomic_bool m_systemTx = {false}; + // the transaction has been stored to the storage or not + mutable std::atomic_bool m_storeToBackend = {false}; +}; + +using Transactions = std::vector; +using TransactionsPtr = std::shared_ptr; +using TransactionsConstPtr = std::shared_ptr; +using ConstTransactions = std::vector; +using ConstTransactionsPtr = std::shared_ptr; + +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/TransactionFactory.h b/bcos-framework/bcos-framework/protocol/TransactionFactory.h new file mode 100644 index 0000000..949b3de --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionFactory.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory interface of Transaction + * @file TransactionFactory.h + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "Transaction.h" +#include + +namespace bcos::protocol +{ +class TransactionFactory +{ +public: + using Ptr = std::shared_ptr; + + TransactionFactory() = default; + TransactionFactory(const TransactionFactory&) = default; + TransactionFactory(TransactionFactory&&) = default; + TransactionFactory& operator=(const TransactionFactory&) = default; + TransactionFactory& operator=(TransactionFactory&&) = default; + virtual ~TransactionFactory() = default; + + virtual Transaction::Ptr createTransaction(bytesConstRef txData, bool checkSig = true, bool checkHash = false) = 0; + virtual Transaction::Ptr createTransaction(int32_t _version, std::string _to, + bytes const& _input, u256 const& _nonce, int64_t blockLimit, std::string _chainId, + std::string _groupId, int64_t _importTime) = 0; + virtual Transaction::Ptr createTransaction(int32_t _version, std::string _to, + bytes const& _input, u256 const& _nonce, int64_t _blockLimit, std::string _chainId, + std::string _groupId, int64_t _importTime, bcos::crypto::KeyPairInterface::Ptr keyPair) = 0; + virtual bcos::crypto::CryptoSuite::Ptr cryptoSuite() = 0; +}; +} // namespace bcos::protocol \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/TransactionMetaData.h b/bcos-framework/bcos-framework/protocol/TransactionMetaData.h new file mode 100644 index 0000000..fe0104a --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionMetaData.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for TransactionMetaData + * @file TransactionMetaData.h + * @author: yujiechen + * @date: 2021-08-20 + */ +#pragma once +#include "Transaction.h" +#include "TransactionSubmitResult.h" +#include +#include + +namespace bcos +{ +namespace protocol +{ +class TransactionMetaData +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + virtual ~TransactionMetaData() = default; + + virtual bcos::crypto::HashType hash() const = 0; + virtual void setHash(bcos::crypto::HashType _hash) = 0; + + virtual std::string_view to() const = 0; + virtual void setTo(std::string _to) = 0; + + virtual uint32_t attribute() const = 0; + virtual void setAttribute(uint32_t attribute) = 0; + + virtual std::string_view source() const = 0; + virtual void setSource(std::string source) = 0; +}; + +using TransactionMetaDataList = std::vector; +using TransactionMetaDataListPtr = std::shared_ptr; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/TransactionReceipt.h b/bcos-framework/bcos-framework/protocol/TransactionReceipt.h new file mode 100644 index 0000000..c9fa61f --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionReceipt.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for TransactionReceipt + * @file TransactionReceipt.h + */ +#pragma once + +#include "ProtocolTypeDef.h" +#include +#include +#include +#include + +namespace bcos::protocol +{ +class LogEntry; +class TransactionReceipt +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + virtual ~TransactionReceipt() = default; + + virtual void decode(bytesConstRef _receiptData) = 0; + virtual void encode(bytes& _encodedData) const = 0; + virtual bcos::crypto::HashType hash() const = 0; + virtual int32_t version() const = 0; + virtual u256 gasUsed() const = 0; + virtual std::string_view contractAddress() const = 0; + virtual int32_t status() const = 0; + virtual bytesConstRef output() const = 0; + virtual gsl::span logEntries() const = 0; + virtual BlockNumber blockNumber() const = 0; + + // additional information on transaction execution, no need to be involved in the hash + // calculation + virtual std::string const& message() const = 0; + virtual void setMessage(std::string message) = 0; +}; +using Receipts = std::vector; +using ReceiptsPtr = std::shared_ptr; +using ReceiptsConstPtr = std::shared_ptr; +} // namespace bcos::protocol diff --git a/bcos-framework/bcos-framework/protocol/TransactionReceiptFactory.h b/bcos-framework/bcos-framework/protocol/TransactionReceiptFactory.h new file mode 100644 index 0000000..33802d6 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionReceiptFactory.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for TransactionReceipt + * @file TransactionReceiptFactory.h + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "TransactionReceipt.h" +#include "bcos-utilities/Common.h" +#include + +namespace bcos +{ +namespace protocol +{ +class LogEntry; +class TransactionReceiptFactory +{ +public: + using Ptr = std::shared_ptr; + TransactionReceiptFactory() = default; + virtual ~TransactionReceiptFactory() = default; + virtual TransactionReceipt::Ptr createReceipt(bytesConstRef _receiptData) = 0; + virtual TransactionReceipt::Ptr createReceipt(bytes const& _receiptData) = 0; + + virtual TransactionReceipt::Ptr createReceipt(u256 const& gasUsed, std::string contractAddress, + const std::vector& logEntries, int32_t status, bcos::bytesConstRef output, + BlockNumber blockNumber) = 0; +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/TransactionSubmitResult.h b/bcos-framework/bcos-framework/protocol/TransactionSubmitResult.h new file mode 100644 index 0000000..7f8b514 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionSubmitResult.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TransactionSubmitResult.h + * @author: yujiechen + * @date: 2021-04-07 + */ +#pragma once +#include "ProtocolTypeDef.h" +#include "TransactionReceipt.h" +namespace bcos +{ +namespace protocol +{ +class TransactionSubmitResult +{ +public: + using Ptr = std::shared_ptr; + virtual ~TransactionSubmitResult() = default; + + virtual uint32_t status() const = 0; + virtual void setStatus(uint32_t status) = 0; + + virtual bcos::crypto::HashType txHash() const = 0; + virtual void setTxHash(bcos::crypto::HashType txHash) = 0; + + virtual bcos::crypto::HashType blockHash() const = 0; + virtual void setBlockHash(bcos::crypto::HashType blockHash) = 0; + + virtual int64_t transactionIndex() const = 0; + virtual void setTransactionIndex(int64_t index) = 0; + + virtual NonceType nonce() const = 0; + virtual void setNonce(NonceType nonce) = 0; + + virtual TransactionReceipt::Ptr transactionReceipt() const = 0; + virtual void setTransactionReceipt(TransactionReceipt::Ptr transactionReceipt) = 0; + + virtual std::string const& sender() const = 0; + virtual void setSender(std::string const& _sender) = 0; + + virtual std::string const& to() const = 0; + virtual void setTo(std::string const& _to) = 0; +}; + +using TransactionSubmitResults = std::vector; +using TransactionSubmitResultsPtr = std::shared_ptr; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/protocol/TransactionSubmitResultFactory.h b/bcos-framework/bcos-framework/protocol/TransactionSubmitResultFactory.h new file mode 100644 index 0000000..747d914 --- /dev/null +++ b/bcos-framework/bcos-framework/protocol/TransactionSubmitResultFactory.h @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TransactionSubmitResultFactory.h + * @author: yujiechen + * @date: 2021-05-08 + */ +#pragma once +#include "BlockHeader.h" +#include "Transaction.h" +#include "TransactionReceipt.h" +#include "TransactionSubmitResult.h" + +namespace bcos +{ +namespace protocol +{ +class TransactionSubmitResultFactory +{ +public: + using Ptr = std::shared_ptr; + + virtual ~TransactionSubmitResultFactory() = default; + + virtual TransactionSubmitResult::Ptr createTxSubmitResult() = 0; +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/rpc/HandshakeRequest.h b/bcos-framework/bcos-framework/rpc/HandshakeRequest.h new file mode 100644 index 0000000..a25593a --- /dev/null +++ b/bcos-framework/bcos-framework/rpc/HandshakeRequest.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HandshakeRequest.h + * @author: yujiechen + * @date 2022-2-29 + */ + +#pragma once +#include +#include +#include +#include +namespace bcos +{ +namespace rpc +{ +class HandshakeRequest +{ +public: + using Ptr = std::shared_ptr; + HandshakeRequest() : m_protocol(std::make_shared()) {} + + HandshakeRequest(bcos::protocol::ProtocolInfo::ConstPtr _protocol) + { + m_protocol = std::const_pointer_cast(_protocol); + } + + virtual std::shared_ptr encode() const + { + Json::Value request; + request["minVersion"] = m_protocol->minVersion(); + request["maxVersion"] = m_protocol->maxVersion(); + request["moduleID"] = m_protocol->protocolModuleID(); + Json::FastWriter fastWriter; + auto requestStr = fastWriter.write(request); + return std::make_shared(requestStr.begin(), requestStr.end()); + } + + virtual bool decode(bcos::bytes const& _data) + { + std::string dataStr(_data.begin(), _data.end()); + try + { + Json::Reader reader; + Json::Value request; + if (!reader.parse(dataStr, request)) + { + BCOS_LOG(WARNING) << LOG_DESC("HandshakeRequest: invalid json object") + << LOG_KV("data", dataStr); + return false; + } + // get the moduleID + auto moduleID = request["moduleID"].asUInt(); + if (moduleID > (uint32_t)(bcos::protocol::ProtocolModuleID::MAX_PROTOCOL_MODULE)) + { + BCOS_LOG(WARNING) << LOG_DESC("HandshakeRequest: invalid moduleID") + << LOG_KV("moduleID", moduleID) << LOG_KV("data", dataStr); + return false; + } + m_protocol->setProtocolModuleID((bcos::protocol::ProtocolModuleID)(moduleID)); + // set minVersion + m_protocol->setMinVersion(request["minVersion"].asUInt()); + // set maxVersion + m_protocol->setMaxVersion(request["maxVersion"].asUInt()); + BCOS_LOG(INFO) << LOG_DESC("HandshakeRequest") + << LOG_KV("module", m_protocol->protocolModuleID()) + << LOG_KV("minVersion", m_protocol->minVersion()) + << LOG_KV("maxVersion", m_protocol->maxVersion()); + return true; + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("HandshakeRequest decode exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("data", dataStr); + } + return false; + } + bcos::protocol::ProtocolInfo const& protocol() const { return *m_protocol; } + +private: + bcos::protocol::ProtocolInfo::Ptr m_protocol; +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/rpc/RPCInterface.h b/bcos-framework/bcos-framework/rpc/RPCInterface.h new file mode 100644 index 0000000..ec8dc90 --- /dev/null +++ b/bcos-framework/bcos-framework/rpc/RPCInterface.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RPCInterface.h + * @author: octopus + * @date 2021-07-01 + */ +#pragma once + +#include "bcos-framework/multigroup/GroupInfo.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include + +namespace bcos +{ +namespace rpc +{ +enum AMOPNotifyMessageType : int16_t +{ + Unicast, + Broadcast, +}; +class RPCInterface +{ +public: + using Ptr = std::shared_ptr; + + virtual ~RPCInterface() {} + +public: + virtual void start() = 0; + virtual void stop() = 0; + +public: + /** + * @brief: notify blockNumber to rpc + * @param _blockNumber: blockNumber + * @param _callback: resp callback + * @return void + */ + virtual void asyncNotifyBlockNumber(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber, std::function _callback) = 0; + + /// multi-group manager related interfaces + /** + * @brief receive the latest group information notification from the GroupManagerInterface + * + * @param _groupInfo the latest group information + */ + virtual void asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr _groupInfo, std::function) = 0; + + /// AMOP related interfaces + /** + * @brief receive the amop message from the gateway + * + * @param _requestData the AMOP data + * @param _callback the callback + */ + virtual void asyncNotifyAMOPMessage(int16_t _type, std::string const& _topic, + bytesConstRef _requestData, + std::function _callback) = 0; + + // the gateway notify the rpc to re-subscribe the topic when the gateway set-up + virtual void asyncNotifySubscribeTopic( + std::function _callback) = 0; +}; +} // namespace rpc +} // namespace bcos diff --git a/bcos-framework/bcos-framework/sealer/SealerInterface.h b/bcos-framework/bcos-framework/sealer/SealerInterface.h new file mode 100644 index 0000000..f2f8e46 --- /dev/null +++ b/bcos-framework/bcos-framework/sealer/SealerInterface.h @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Sealer module + * @file SealerInterface.h + * @author: yujiechen + * @date 2021-05-14 + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace sealer +{ +class SealerInterface +{ +public: + using Ptr = std::shared_ptr; + SealerInterface() = default; + virtual ~SealerInterface() {} + + virtual void start() = 0; + virtual void stop() = 0; + + // interface for the transaction module to notify the sealer seal new proposal + virtual void asyncNotifySealProposal(uint64_t _proposalIndex, uint64_t _proposalEndIndex, + uint64_t _maxTxsToSeal, std::function onRecvResponse) = 0; + // interface to notify the unsealed transactions size to the consensus module + virtual void asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) = 0; + + // interface for the consensus module to notify the latest block number + virtual void asyncNoteLatestBlockNumber(int64_t _blockNumber) = 0; + // interface for the consensus module to notify reset the sealing transactions + virtual void asyncResetSealing(std::function _onRecvResponse) = 0; +}; +} // namespace sealer +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/security/DataEncryptInterface.h b/bcos-framework/bcos-framework/security/DataEncryptInterface.h new file mode 100644 index 0000000..9bfefec --- /dev/null +++ b/bcos-framework/bcos-framework/security/DataEncryptInterface.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : Encrypt file + * @author: jimmyshi, websterchen + * @date: 2018-12-06 + */ + +#pragma once +#include +#include + +namespace bcos +{ +namespace security +{ +class DataEncryptInterface +{ +public: + using Ptr = std::shared_ptr; + DataEncryptInterface() = default; + virtual ~DataEncryptInterface() = default; + +public: + virtual void init() = 0; + virtual void init(const std::string& dataKey, const bool smCryptoType) = 0; + + // use to decrypt node.key + virtual std::shared_ptr decryptContents(const std::shared_ptr& contents) = 0; + virtual std::shared_ptr decryptFile(const std::string& filename) = 0; + + // use to encrypt/decrypt in rocksdb + virtual std::string encrypt(const std::string& data) = 0; + virtual std::string decrypt(const std::string& data) = 0; +}; + +} // namespace security + +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/storage/Common.h b/bcos-framework/bcos-framework/storage/Common.h new file mode 100644 index 0000000..ea8298e --- /dev/null +++ b/bcos-framework/bcos-framework/storage/Common.h @@ -0,0 +1,274 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file Table.h + * @author: xingqiangbai + * @date: 2021-04-07 + */ +#pragma once + +#include "../protocol/ProtocolTypeDef.h" +#include "boost/algorithm/string.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define STORAGE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[STORAGE]" + +namespace bcos +{ +namespace storage +{ +enum StorageError +{ + UnknownError = -60000, + TableNotExists, + SystemTableNotExists, + TableExists, + UnknownEntryType, + ReadError, + WriteError, + EmptyStorage, + ReadOnly, + DatabaseError, + DatabaseRetryable, + TryLockFailed, + TimestampMismatch, +}; + +struct Condition +{ + Condition() = default; + ~Condition() = default; + void EQ(const std::string& value) { m_conditions.emplace_back(Comparator::EQ, value); } + void NE(const std::string& value) { m_conditions.emplace_back(Comparator::NE, value); } + // string compare, "2" > "12" + void GT(const std::string& value) { m_conditions.emplace_back(Comparator::GT, value); } + void GE(const std::string& value) { m_conditions.emplace_back(Comparator::GE, value); } + // string compare, "12" < "2" + void LT(const std::string& value) { m_conditions.emplace_back(Comparator::LT, value); } + void LE(const std::string& value) { m_conditions.emplace_back(Comparator::LE, value); } + void startsWith(const std::string& value) + { + m_conditions.emplace_back(Comparator::STARTS_WITH, value); + } + void endsWith(const std::string& value) + { + m_conditions.emplace_back(Comparator::ENDS_WITH, value); + } + void contains(const std::string& value) + { + m_conditions.emplace_back(Comparator::CONTAINS, value); + } + void limit(size_t start, size_t count) { m_limit = std::pair(start, count); } + + std::pair getLimit() const { return m_limit; } + + bool isValid(const std::string_view& key) const + { // all conditions must be satisfied + for (auto& cond : m_conditions) + { // conditions should few, so not parallel check for now + switch (cond.cmp) + { + case Comparator::EQ: + if (key != cond.value) + { + return false; + } + break; + case Comparator::NE: + if (key == cond.value) + { + return false; + } + break; + case Comparator::GT: + if (key <= cond.value) + { + return false; + } + break; + case Comparator::GE: + if (key < cond.value) + { + return false; + } + break; + case Comparator::LT: + if (key >= cond.value) + { + return false; + } + break; + case Comparator::LE: + if (key > cond.value) + { + return false; + } + break; + case Comparator::STARTS_WITH: + if (!key.starts_with(cond.value)) + { + return false; + } + break; + case Comparator::ENDS_WITH: + if (!key.ends_with(cond.value)) + { + return false; + } + break; + case Comparator::CONTAINS: + if (key.find(cond.value) == std::string::npos) + { + return false; + } + break; + default: + // undefined Comparator + break; + } + } + return true; + } + + enum class Comparator : uint8_t + { + GT = 0, + GE = 1, + LT = 2, + LE = 3, + EQ = 4, + NE = 5, + STARTS_WITH = 6, + ENDS_WITH = 7, + CONTAINS = 8 + }; + struct cond + { + cond(Comparator _cmp, const std::string& _value) : cmp(_cmp), value(_value) {} + Comparator cmp; + std::string value; + // this method only for trace log + std::string toString() const + { + std::string cmpStr; + switch (cmp) + { + case Comparator::EQ: + cmpStr = "EQ"; + break; + case Comparator::NE: + cmpStr = "NE"; + break; + case Comparator::GT: + cmpStr = "GT"; + break; + case Comparator::GE: + cmpStr = "GE"; + break; + case Comparator::LT: + cmpStr = "NE"; + break; + case Comparator::LE: + cmpStr = "LE"; + break; + case Comparator::STARTS_WITH: + cmpStr = "STARTS_WITH"; + break; + case Comparator::ENDS_WITH: + cmpStr = "ENDS_WITH"; + break; + case Comparator::CONTAINS: + cmpStr = "CONTAINS"; + break; + } + return cmpStr + " " + value; + } + }; + std::vector m_conditions; + std::pair m_limit; + // this method only for trace log + std::string toString() const + { + std::stringstream ss; + ss << "keyCond: "; + for (const auto& cond : m_conditions) + { + ss << cond.toString() << ";"; + } + ss << "limit start: " << m_limit.first << "limit count: " << m_limit.second; + return ss.str(); + } +}; + +class TableInfo +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + TableInfo(std::string name, std::vector fields) + : m_name(std::move(name)), m_fields(std::move(fields)) + { + m_order.reserve(m_fields.size()); + for (size_t i = 0; i < m_fields.size(); ++i) + { + m_order.push_back({m_fields[i], i}); + } + std::sort(m_order.begin(), m_order.end(), + [](auto&& lhs, auto&& rhs) { return std::get<0>(lhs) < std::get<0>(rhs); }); + } + + std::string_view name() const { return m_name; } + + const std::vector& fields() const { return m_fields; } + + size_t fieldIndex(const std::string_view& field) const + { + auto it = std::lower_bound(m_order.begin(), m_order.end(), field, + [](auto&& lhs, auto&& rhs) { return std::get<0>(lhs) < rhs; }); + if (it != m_order.end() && std::get<0>(*it) == field) + { + return std::get<1>(*it); + } + else + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(-1, std::string("Can't find field: ") + std::string(field))); + } + } + +private: + std::string m_name; + std::vector m_fields; + std::vector> m_order; + +private: + void* operator new(size_t s) { return malloc(s); }; + void operator delete(void* p) { free(p); }; +}; + +} // namespace storage +} // namespace bcos diff --git a/bcos-framework/bcos-framework/storage/Entry.h b/bcos-framework/bcos-framework/storage/Entry.h new file mode 100644 index 0000000..0268ace --- /dev/null +++ b/bcos-framework/bcos-framework/storage/Entry.h @@ -0,0 +1,353 @@ +#pragma once + +#include "Common.h" +#include "bcos-crypto/interfaces/crypto/Hash.h" +#include "bcos-framework/protocol/Protocol.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ +class Entry +{ +public: + enum Status : int8_t + { + NORMAL = 0, + DELETED = 1, + EMPTY = 2, + MODIFIED = 3, // dirty() can use status + }; + + constexpr static int32_t SMALL_SIZE = 32; + constexpr static int32_t MEDIUM_SIZE = 64; + constexpr static int32_t LARGE_SIZE = INT32_MAX; + + constexpr static int32_t ARCHIVE_FLAG = + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking; + + using SBOBuffer = std::array; + + using ValueType = std::variant, + std::vector, std::shared_ptr, + std::shared_ptr>, std::shared_ptr>>; + + Entry() = default; + + explicit Entry(TableInfo::ConstPtr) {} + + Entry(const Entry&) = default; + Entry(Entry&&) noexcept = default; + bcos::storage::Entry& operator=(const Entry&) = default; + bcos::storage::Entry& operator=(Entry&&) noexcept = default; + // auto operator<=>(const Entry&) const = default; + + ~Entry() noexcept = default; + + template + void getObject(Out& out) const + { + auto view = get(); + boost::iostreams::stream inputStream( + view.data(), view.size()); + InputArchive archive(inputStream, flag); + + archive >> out; + } + + template + Out getObject() const + { + Out out; + getObject(out); + + return out; + } + + template + void setObject(const In& in) + { + std::string value; + boost::iostreams::stream> outputStream( + value); + OutputArchive archive(outputStream, flag); + + archive << in; + outputStream.flush(); + + setField(0, std::move(value)); + } + + std::string_view get() const { return outputValueView(m_value); } + + std::string_view getField(size_t index) const + { + if (index > 0) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(-1, "Get field index: " + boost::lexical_cast(index) + + " failed, index out of range")); + } + + return get(); + } + + template + void setField(size_t index, T&& input) + { + if (index > 0) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(-1, "Set field index: " + boost::lexical_cast(index) + + " failed, index out of range")); + } + + set(std::forward(input)); + } + + void set(const char* p) + { + auto view = std::string_view(p, strlen(p)); + m_size = view.size(); + if (view.size() <= SMALL_SIZE) + { + if (m_value.index() != 0) + { + m_value = SBOBuffer(); + } + + std::copy_n(view.data(), view.size(), std::get<0>(m_value).data()); + m_status = MODIFIED; + // m_dirty = true; + } + else + { + set(std::string(view)); + } + } + + template + void set(Input value) + { + auto view = inputValueView(value); + m_size = view.size(); + if (m_size <= SMALL_SIZE) + { + if (m_value.index() != 0) + { + m_value = SBOBuffer(); + } + + std::copy_n(view.data(), view.size(), std::get<0>(m_value).data()); + } + else if (m_size <= MEDIUM_SIZE) + { + m_value = std::move(value); + } + else + { + m_value = std::make_shared(std::move(value)); + } + m_status = MODIFIED; + // m_dirty = true; + } + + template + void setPointer(std::shared_ptr&& value) + { + m_size = value->size(); + m_value = value; + } + + Status status() const { return m_status; } + + void setStatus(Status status) + { + m_status = status; + if (m_status == DELETED) + { + m_size = 0; + m_value = std::string(); + } + // m_dirty = true; + } + + bool dirty() const + { + return (m_status == MODIFIED || m_status == DELETED); + // return m_dirty; + } + // void setDirty(bool dirty) + // { + // if(dirty) + // { + // m_status = MODIFIED; + // } + // else + // { + // m_status = NORMAL; + // } + // // m_dirty = dirty; + // } + + int32_t size() const { return m_size; } + + template + void importFields(std::initializer_list values) + { + if (values.size() != 1) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(StorageError::UnknownEntryType, "Import fields not equal to 1")); + } + + setField(0, std::move(*values.begin())); + } + + auto&& exportFields() + { + m_size = 0; + return std::move(m_value); + } + + bool valid() const { return m_status == Status::NORMAL; } + crypto::HashType hash(std::string_view table, std::string_view key, + const bcos::crypto::Hash::Ptr& hashImpl, uint32_t blockVersion) const + { + bcos::crypto::HashType entryHash(0); + if (blockVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + auto anyHasher = hashImpl->hasher(); + + std::visit( + [this, &table, &key, &entryHash](auto& hasher) { + hasher.update(table); + hasher.update(key); + + switch (m_status) + { + case MODIFIED: + { + auto data = get(); + hasher.update(data); + hasher.final(entryHash); + if (c_fileLogLevel <= TRACE) + { + STORAGE_LOG(TRACE) + << "Entry hash, dirty entry: " << table << " | " << toHex(key) + << " | " << toHex(table) << toHex(key) << toHex(data) + << LOG_KV("hash", entryHash.abridged()); + } + break; + } + case DELETED: + { + hasher.final(entryHash); + if (c_fileLogLevel <= TRACE) + { + STORAGE_LOG(TRACE) + << "Entry hash, deleted entry: " << table << " | " << toHex(key) + << LOG_KV("hash", entryHash.abridged()); + } + break; + } + default: + { + STORAGE_LOG(DEBUG) << "Entry hash, clean entry: " << table << " | " + << toHex(key) << " | " << (int)m_status; + break; + } + } + }, + anyHasher); + } + else + { // 3.0.0 + if (m_status == Entry::MODIFIED) + { + auto value = get(); + bcos::bytesConstRef ref((const bcos::byte*)value.data(), value.size()); + entryHash = hashImpl->hash(ref); + if (c_fileLogLevel <= TRACE) + { + STORAGE_LOG(TRACE) + << "Entry Calc hash, dirty entry: " << table << " | " << toHex(key) << " | " + << toHex(value) << LOG_KV("hash", entryHash.abridged()); + } + } + else if (m_status == Entry::DELETED) + { + entryHash = bcos::crypto::HashType(0x1); + if (c_fileLogLevel <= TRACE) + { + STORAGE_LOG(TRACE) << "Entry Calc hash, deleted entry: " << table << " | " + << toHex(key) << LOG_KV("hash", entryHash.abridged()); + } + } + else + { + STORAGE_LOG(DEBUG) << "Entry Calc hash, clean entry: " << table << " | " + << toHex(key) << " | " << (int)m_status; + } + } + return entryHash; + } + +private: + [[nodiscard]] auto outputValueView(const ValueType& value) const -> std::string_view + { + std::string_view view; + std::visit( + [this, &view](auto&& valueInside) { + auto viewRaw = inputValueView(valueInside); + view = std::string_view(viewRaw.data(), m_size); + }, + value); + return view; + } + + template + [[nodiscard]] auto inputValueView(const T& value) const -> std::string_view + { + std::string_view view((const char*)value.data(), value.size()); + return view; + } + + template + [[nodiscard]] auto inputValueView(const std::shared_ptr& value) const -> std::string_view + { + std::string_view view((const char*)value->data(), value->size()); + return view; + } + + ValueType m_value; // should serialization + int32_t m_size = 0; // no need to serialization + Status m_status = Status::EMPTY; // should serialization + // bool m_dirty = false; // no need to serialization +}; + +} // namespace bcos::storage + +namespace boost::serialization +{ +template +void serialize(Archive& ar, std::tuple& t, const unsigned int) +{ + std::apply([&](auto&... element) { ((ar & element), ...); }, t); +} +} // namespace boost::serialization \ No newline at end of file diff --git a/bcos-framework/bcos-framework/storage/KVStorageHelper.h b/bcos-framework/bcos-framework/storage/KVStorageHelper.h new file mode 100644 index 0000000..2b93b36 --- /dev/null +++ b/bcos-framework/bcos-framework/storage/KVStorageHelper.h @@ -0,0 +1,90 @@ +#pragma once + +#include "StorageInterface.h" + +namespace bcos::storage +{ +class KVStorageHelper +{ +public: + KVStorageHelper(StorageInterface::Ptr storage) : m_storage(std::move(storage)) {} + ~KVStorageHelper() {} + + void asyncGet(std::string_view _columnFamily, std::string_view _key, + std::function _callback) + { + m_storage->asyncGetRow(_columnFamily, _key, + [callback = std::move(_callback)]( + Error::UniquePtr&& error, std::optional&& entry) { + if (error) + { + callback(std::move(error), std::string_view()); + return; + } + + if (entry) + { + callback(nullptr, entry->getField(0)); + } + else + { + callback(nullptr, ""); + } + }); + }; + + void asyncGetBatch(std::string_view _columnFamily, + const std::shared_ptr>& _keys, + std::function>)> callback) + { + m_storage->asyncGetRows(_columnFamily, *_keys, + [callback = std::move(callback)]( + Error::UniquePtr&& error, std::vector>&& entries) { + if (error) + { + callback(std::move(error), nullptr); + return; + } + + auto values = std::make_shared>(); + for (auto& it : entries) + { + if (it) + { + values->emplace_back(std::string(it->getField(0))); + } + else + { + values->emplace_back(""); + } + } + + callback(std::move(error), std::move(values)); + }); + } + + template + void asyncPut(std::string_view _columnFamily, std::string_view _key, T _value, + std::function _callback) + { + Entry value; + value.importFields({std::move(_value)}); + + m_storage->asyncSetRow(_columnFamily, _key, std::move(value), std::move(_callback)); + } + + void asyncRemove(std::string_view _columnFamily, std::string_view _key, + std::function _callback) + { + Entry value; + value.setStatus(Entry::DELETED); + + m_storage->asyncSetRow(_columnFamily, _key, std::move(value), std::move(_callback)); + } + StorageInterface::Ptr storage() { return m_storage; } + +private: + StorageInterface::Ptr m_storage; +}; + +} // namespace bcos::storage \ No newline at end of file diff --git a/bcos-framework/bcos-framework/storage/StorageInterface.h b/bcos-framework/bcos-framework/storage/StorageInterface.h new file mode 100644 index 0000000..3857add --- /dev/null +++ b/bcos-framework/bcos-framework/storage/StorageInterface.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of StorageInterface + * @file StorageInterface.h + * @author: xingqiangbai + * @date: 2021-04-07 + * @brief interface of StorageInterface + * @file StorageInterface.h + * @author: ancelmo + * @date: 2021-09-07 + */ + +#pragma once +#include "../protocol/ProtocolTypeDef.h" +#include "Common.h" +#include "Entry.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ +class Table; +class StorageInterface +{ +public: + static constexpr const char SYS_TABLES[] = "s_tables"; + static constexpr const char SYS_TABLE_VALUE_FIELDS[] = "key_field,value_fields"; + + static TableInfo::ConstPtr getSysTableInfo(std::string_view tableName); + + using Ptr = std::shared_ptr; + + virtual ~StorageInterface() = default; + + virtual void asyncGetPrimaryKeys(std::string_view table, + const std::optional& _condition, + std::function)> _callback) = 0; + + virtual void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) = 0; + + virtual void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> _callback) = 0; + + virtual void asyncSetRow(std::string_view table, std::string_view key, Entry entry, + std::function callback) = 0; + + virtual void asyncCreateTable(std::string _tableName, std::string _valueFields, + std::function)> callback); + + virtual void asyncOpenTable(std::string_view tableName, + std::function)> callback); + + virtual void asyncGetTableInfo(std::string_view tableName, + std::function callback); + virtual Error::Ptr setRows(std::string_view, + const std::variant, + const gsl::span>&, + std::variant, gsl::span>) + { + throw std::invalid_argument("unimplemented method"); + return nullptr; + }; + virtual Error::Ptr deleteRows( + std::string_view, const std::variant, + const gsl::span>&) + { + throw std::invalid_argument("unimplemented method"); + return nullptr; + }; + + virtual std::pair> getRow( + const std::string_view& table, const std::string_view& _key) + { + std::pair> result; + asyncGetRow(table, _key, [&result](Error::UniquePtr _error, std::optional _entry) { + result.first = std::move(_error); + result.second = std::move(_entry); + }); + return result; + }; +}; + +class TraverseStorageInterface : public virtual StorageInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + virtual void parallelTraverse(bool onlyDirty, + std::function + callback) const = 0; +}; + +class MergeableStorageInterface : public virtual StorageInterface +{ +public: + using Ptr = std::shared_ptr; + + virtual void merge(bool onlyDirty, const TraverseStorageInterface& source) = 0; +}; + +class TransactionalStorageInterface : public virtual StorageInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + ~TransactionalStorageInterface() override = default; + + virtual void asyncPrepare(const bcos::protocol::TwoPCParams& params, + const TraverseStorageInterface& storage, + std::function callback) = 0; + + virtual void asyncCommit(const bcos::protocol::TwoPCParams& params, + std::function callback) = 0; + + virtual void asyncRollback( + const bcos::protocol::TwoPCParams& params, std::function callback) = 0; +}; + +} // namespace bcos::storage diff --git a/bcos-framework/bcos-framework/storage/Table.h b/bcos-framework/bcos-framework/storage/Table.h new file mode 100644 index 0000000..cb2ec05 --- /dev/null +++ b/bcos-framework/bcos-framework/storage/Table.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file Table.h + * @author: xingqiangbai + * @date: 2021-04-07 + */ +#pragma once + +#include "Common.h" +#include "StorageInterface.h" +#include +#include + +namespace bcos::storage +{ +class Table +{ +public: + Table(StorageInterface* _db, TableInfo::ConstPtr _tableInfo) + : m_storage(_db), m_tableInfo(std::move(_tableInfo)) + {} + + Table(const Table&) = default; + Table(Table&&) = default; + Table& operator=(const Table&) = default; + Table& operator=(Table&&) = default; + ~Table() = default; + + std::optional getRow(std::string_view _key); + std::vector> getRows(RANGES::any_view + keys); + std::vector getPrimaryKeys(const std::optional& _condition); + + void setRow(std::string_view _key, Entry _entry); + + void asyncGetPrimaryKeys(std::optional const& _condition, + std::function)> _callback) noexcept; + + void asyncGetRow(std::string_view _key, + std::function)> _callback) noexcept; + + void asyncGetRows( + RANGES::any_view + keys, + std::function>)> + _callback) noexcept; + + void asyncSetRow( + std::string_view key, Entry entry, std::function callback) noexcept; + + TableInfo::ConstPtr tableInfo() const { return m_tableInfo; } + Entry newEntry() { return Entry(m_tableInfo); } + Entry newDeletedEntry() + { + auto deletedEntry = newEntry(); + deletedEntry.setStatus(Entry::DELETED); + return deletedEntry; + } + +protected: + StorageInterface* m_storage; + TableInfo::ConstPtr m_tableInfo; +}; + +} // namespace bcos::storage diff --git a/bcos-framework/bcos-framework/sync/BlockSyncInterface.h b/bcos-framework/bcos-framework/sync/BlockSyncInterface.h new file mode 100644 index 0000000..b7073df --- /dev/null +++ b/bcos-framework/bcos-framework/sync/BlockSyncInterface.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for block sync + * @file BlockSyncInterface.h + * @author: yujiechen + * @date 2021-05-23 + */ + +#pragma once +#include "../ledger/LedgerConfig.h" +#include +#include +namespace bcos::sync +{ +class BlockSyncInterface +{ +public: + using Ptr = std::shared_ptr; + BlockSyncInterface() = default; + virtual ~BlockSyncInterface() = default; + + virtual void start() = 0; + virtual void stop() = 0; + + // called by the consensus module when commit a new block + virtual void asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) = 0; + + // called by the frontService to dispatch message + virtual void asyncNotifyBlockSyncMessage(Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) = 0; + // called by the RPC to get the sync status + virtual void asyncGetSyncInfo(std::function _onGetSyncInfo) = 0; + + virtual void asyncNotifyCommittedIndex( + bcos::protocol::BlockNumber _number, std::function _onRecv) = 0; + virtual void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) = 0; + + // determine the specified node is faulty or not + // used to optimize consensus + virtual bool faultyNode(bcos::crypto::NodeIDPtr _nodeID) = 0; +}; +} // namespace bcos::sync diff --git a/bcos-framework/bcos-framework/sync/SyncConfig.h b/bcos-framework/bcos-framework/sync/SyncConfig.h new file mode 100644 index 0000000..9ca0679 --- /dev/null +++ b/bcos-framework/bcos-framework/sync/SyncConfig.h @@ -0,0 +1,175 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief base class for sync config + * @file SyncConfig.h + * @author: yujiechen + * @date 2021-05-25 + */ +#pragma once +#include +#include +#include +#include +namespace bcos +{ +namespace sync +{ +class SyncConfig +{ +public: + using Ptr = std::shared_ptr; + explicit SyncConfig(bcos::crypto::NodeIDPtr _nodeId) + : m_nodeId(_nodeId), + m_consensusNodeList(std::make_shared()), + m_observerNodeList(std::make_shared()), + m_nodeList(std::make_shared()), + m_connectedNodeList(std::make_shared()) + {} + virtual ~SyncConfig() {} + + bcos::crypto::NodeIDPtr nodeID() { return m_nodeId; } + // Note: copy here to ensure thread-safe + virtual bcos::consensus::ConsensusNodeList consensusNodeList() + { + ReadGuard l(x_consensusNodeList); + return *m_consensusNodeList; + } + // Note: only when the consensusNodeList or observerNodeList changed will call this interface + // for perf consideration + virtual void setConsensusNodeList(bcos::consensus::ConsensusNodeList const& _consensusNodeList) + { + { + WriteGuard l(x_consensusNodeList); + *m_consensusNodeList = _consensusNodeList; + } + updateNodeList(); + } + + // Note: only when the consensusNodeList or observerNodeList changed will call this interface + // for perf consideration + virtual void setConsensusNodeList(bcos::consensus::ConsensusNodeList&& _consensusNodeList) + { + { + WriteGuard l(x_consensusNodeList); + *m_consensusNodeList = std::move(_consensusNodeList); + } + updateNodeList(); + } + + // Note: only when the consensusNodeList or observerNodeList changed will call this interface + // for perf consideration + virtual void setObserverList(bcos::consensus::ConsensusNodeList const& _observerNodeList) + { + { + WriteGuard l(x_observerNodeList); + *m_observerNodeList = _observerNodeList; + } + updateNodeList(); + } + + virtual bcos::consensus::ConsensusNodeList observerNodeList() + { + ReadGuard l(x_observerNodeList); + return *m_observerNodeList; + } + + // Note: copy here to remove multithreading issues + virtual bcos::crypto::NodeIDSet connectedNodeList() + { + ReadGuard l(x_connectedNodeList); + return *m_connectedNodeList; + } + + virtual void setConnectedNodeList(bcos::crypto::NodeIDSet const& _connectedNodeList) + { + WriteGuard l(x_connectedNodeList); + *m_connectedNodeList = _connectedNodeList; + BCOS_LOG(INFO) << LOG_DESC("SyncConfig: setConnectedNodeList") + << LOG_KV("size", m_connectedNodeList->size()); + } + + virtual void setConnectedNodeList(bcos::crypto::NodeIDSet&& _connectedNodeList) + { + WriteGuard l(x_connectedNodeList); + *m_connectedNodeList = std::move(_connectedNodeList); + BCOS_LOG(INFO) << LOG_DESC("SyncConfig: setConnectedNodeList") + << LOG_KV("size", m_connectedNodeList->size()); + } + + virtual bool existsInGroup() + { + ReadGuard l(x_nodeList); + return m_nodeList->count(m_nodeId); + } + + + virtual bool existsInGroup(bcos::crypto::NodeIDPtr _nodeId) + { + ReadGuard l(x_nodeList); + return m_nodeList->count(_nodeId); + } + + virtual bool connected(bcos::crypto::NodeIDPtr _nodeId) + { + ReadGuard l(x_connectedNodeList); + return m_connectedNodeList->count(_nodeId); + } + + bcos::crypto::NodeIDSet groupNodeList() + { + ReadGuard l(x_nodeList); + return *m_nodeList; + } + + virtual void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onRecvResponse) + { + setConnectedNodeList(_connectedNodes); + if (!_onRecvResponse) + { + return; + } + _onRecvResponse(nullptr); + } + +private: + void updateNodeList() + { + auto nodeList = consensusNodeList() + observerNodeList(); + WriteGuard l(x_nodeList); + m_nodeList->clear(); + for (auto node : nodeList) + { + m_nodeList->insert(node->nodeID()); + } + } + +protected: + bcos::crypto::NodeIDPtr m_nodeId; + bcos::consensus::ConsensusNodeListPtr m_consensusNodeList; + mutable SharedMutex x_consensusNodeList; + + bcos::consensus::ConsensusNodeListPtr m_observerNodeList; + SharedMutex x_observerNodeList; + + bcos::crypto::NodeIDSetPtr m_nodeList; + mutable SharedMutex x_nodeList; + + bcos::crypto::NodeIDSetPtr m_connectedNodeList; + mutable SharedMutex x_connectedNodeList; +}; +} // namespace sync +} // namespace bcos diff --git a/bcos-framework/bcos-framework/testutils/TestPromptFixture.h b/bcos-framework/bcos-framework/testutils/TestPromptFixture.h new file mode 100644 index 0000000..6f5c2f9 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/TestPromptFixture.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file: TestPromptFixture.h + * fixture class for test case prompt + */ + +#pragma once +#include "bcos-utilities/Common.h" +#include +#include + +namespace bcos +{ +namespace test +{ +class TestPrompt +{ +public: + static TestPrompt& get() + { + static TestPrompt instance; + return instance; + } + TestPrompt(TestPrompt const&) = delete; + void operator=(TestPrompt const&) = delete; + /** + * @brief : init every test-suite by printting the name of cases + * @param _maxTests + */ + void initTest(size_t _maxTests = 1) + { + m_currentTestName = "unknown"; + m_currentTestFileName = std::string(); + m_startTime = utcTime(); + m_currentTestCaseName = boost::unit_test::framework::current_test_case().p_name; + std::cout << "===== BCOS Test Case : " + m_currentTestCaseName << "=====" << std::endl; + m_maxTests = _maxTests; + m_currTest = 0; + }; + + /** + * @brief : release resources when test-suite finished + */ + void finishTest() + { + execTimeName res; + res.first = (double)(utcTime() - m_startTime); + res.second = caseName(); + std::cout << "#### Run " << res.second << " time elapsed: " << res.first << std::endl; + m_execTimeResults.push_back(res); + } + + void setCurrentTestFile(boost::filesystem::path const& _name) { m_currentTestFileName = _name; } + void setCurrentTestName(std::string const& _name) { m_currentTestName = _name; } + std::string const& testName() { return m_currentTestName; } + std::string const& caseName() { return m_currentTestCaseName; } + boost::filesystem::path const& testFile() { return m_currentTestFileName; } + +private: + TestPrompt() {} + size_t m_currTest; + size_t m_maxTests; + std::string m_currentTestName; + std::string m_currentTestCaseName; + boost::filesystem::path m_currentTestFileName; + typedef std::pair execTimeName; + std::vector m_execTimeResults; + int64_t m_startTime; +}; + +class TestPromptFixture +{ +public: + // init test-suite fixture + TestPromptFixture() { TestPrompt::get().initTest(); } + // release test-suite fixture + ~TestPromptFixture() { TestPrompt::get().finishTest(); } +}; +} // namespace test +} // namespace bcos diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeFrontService.h b/bcos-framework/bcos-framework/testutils/faker/FakeFrontService.h new file mode 100644 index 0000000..b5e8538 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeFrontService.h @@ -0,0 +1,234 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fake frontService + * @file FakeFrontService.h + * @author: yujiechen + * @date 2021-05-25 + */ +#pragma once + +#include "../../consensus/ConsensusInterface.h" +#include "../../front/FrontServiceInterface.h" +#include "../../sync/BlockSyncInterface.h" +#include "../../txpool/TxPoolInterface.h" +using namespace bcos; +using namespace bcos::front; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::txpool; +using namespace bcos::consensus; +using namespace bcos::sync; + +namespace bcos +{ +namespace test +{ +class FakeGateWay +{ +public: + using Ptr = std::shared_ptr; + FakeGateWay() = default; + virtual ~FakeGateWay() {} + + void addTxPool(NodeIDPtr _nodeId, TxPoolInterface::Ptr _txpool) + { + m_nodeId2TxPool[_nodeId] = _txpool; + } + + void addSync(NodeIDPtr _nodeId, BlockSyncInterface::Ptr _sync) + { + m_nodeId2Sync[_nodeId] = _sync; + } + + void addConsensusInterface(NodeIDPtr _nodeId, ConsensusInterface::Ptr _consensusInterface) + { + m_nodeId2Consensus[_nodeId] = _consensusInterface; + } + + virtual void asyncSendMessageByNodeID(int _moduleId, NodeIDPtr _fromNode, NodeIDPtr _nodeId, + bytesConstRef _data, uint32_t, CallbackFunc _responseCallback) + { + std::string id; + { + Guard l(m_mutex); + m_uuid++; + id = std::to_string(m_uuid); + if (_responseCallback) + { + m_uuidToCallback[id] = _responseCallback; + } + if (_responseCallback) + { + std::cout << "asyncSendMessageByNodeID, from: " << _fromNode + << _fromNode->shortHex() << ", to: " << _nodeId->shortHex() + << ", id:" << id << std::endl; + } + } + + if (_moduleId == ModuleID::TxsSync && m_nodeId2TxPool.count(_nodeId)) + { + auto txpool = m_nodeId2TxPool[_nodeId]; + txpool->asyncNotifyTxsSyncMessage(nullptr, id, _fromNode, _data, nullptr); + } + if (_moduleId == ModuleID::ConsTxsSync && m_nodeId2TxPool.count(_nodeId)) + { + auto txpool = m_nodeId2TxPool[_nodeId]; + txpool->asyncNotifyTxsSyncMessage(nullptr, id, _fromNode, _data, nullptr); + } + + if (_moduleId == ModuleID::PBFT && m_nodeId2Consensus.count(_nodeId)) + { + auto consensus = m_nodeId2Consensus[_nodeId]; + consensus->asyncNotifyConsensusMessage(nullptr, id, _fromNode, _data, nullptr); + } + if (_moduleId == ModuleID::BlockSync && m_nodeId2Sync.count(_nodeId)) + { + auto sync = m_nodeId2Sync[_nodeId]; + sync->asyncNotifyBlockSyncMessage(nullptr, id, _fromNode, _data, nullptr); + } + } + + virtual void asyncSendResponse(const std::string& _id, int, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _responseData, ReceiveMsgFunc _receiveCallback) + { + CallbackFunc callback = nullptr; + { + Guard l(m_mutex); + if (m_uuidToCallback.count(_id)) + { + callback = m_uuidToCallback[_id]; + m_uuidToCallback.erase(_id); + } + } + if (callback) + { + callback(nullptr, _nodeID, _responseData, "", nullptr); + std::cout << "### find callback, id: " << _id << std::endl; + } + else + { + std::cout << "### not find callback for the id: " << _id << std::endl; + } + _receiveCallback(nullptr); + } + +private: + std::map m_uuidToCallback; + Mutex m_mutex; + + std::map m_nodeId2TxPool; + std::map m_nodeId2Consensus; + std::map m_nodeId2Sync; + std::atomic m_uuid = 0; +}; + +class FakeFrontService : public FrontServiceInterface +{ +public: + using Ptr = std::shared_ptr; + explicit FakeFrontService(NodeIDPtr _nodeId) : m_nodeId(_nodeId) {} + void setGateWay(FakeGateWay::Ptr _gateWay) { m_fakeGateWay = _gateWay; } + + ~FakeFrontService() override {} + + void start() override {} + void stop() override {} + + void asyncGetGroupNodeInfo(GetGroupNodeInfoFunc) override {} + // for gateway: useless here + void onReceiveGroupNodeInfo( + const std::string&, bcos::gateway::GroupNodeInfo::Ptr, ReceiveMsgFunc) override + {} + // for gateway: useless here + void onReceiveMessage(const std::string&, NodeIDPtr, bytesConstRef, ReceiveMsgFunc) override {} + void asyncSendMessageByNodeIDs( + int _moduleId, const std::vector& _nodeIdList, bytesConstRef _data) override + { + for (auto node : _nodeIdList) + { + if (node->data() == m_nodeId->data()) + { + continue; + } + asyncSendMessageByNodeID(_moduleId, node, _data, 0, nullptr); + } + } + + // useless for sync/pbft/txpool + void asyncSendBroadcastMessage(uint16_t, int _moduleId, bytesConstRef _data) override + { + for (auto node : m_nodeIDList) + { + if (node->data() == m_nodeId->data()) + { + continue; + } + asyncSendMessageByNodeID(_moduleId, node, _data, 0, nullptr); + } + } + + // useless for sync/pbft/txpool + void onReceiveBroadcastMessage( + const std::string&, NodeIDPtr, bytesConstRef, ReceiveMsgFunc) override + {} + + void asyncSendResponse(const std::string& _id, int _moduleId, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _responseData, ReceiveMsgFunc _responseCallback) override + { + return m_fakeGateWay->asyncSendResponse( + _id, _moduleId, _nodeID, _responseData, _responseCallback); + } + + void asyncSendMessageByNodeID(int _moduleId, NodeIDPtr _nodeId, bytesConstRef _data, + uint32_t _timeout, CallbackFunc _responseCallback) override + { + m_fakeGateWay->asyncSendMessageByNodeID( + _moduleId, m_nodeId, _nodeId, _data, _timeout, _responseCallback); + + if (m_nodeId2AsyncSendSize.count(_nodeId)) + { + m_nodeId2AsyncSendSize[_nodeId]++; + } + else + { + m_nodeId2AsyncSendSize[_nodeId] = 1; + } + m_totalSendMsgSize++; + } + + size_t getAsyncSendSizeByNodeID(NodeIDPtr _nodeId) + { + if (!m_nodeId2AsyncSendSize.count(_nodeId)) + { + return 0; + } + return m_nodeId2AsyncSendSize[_nodeId]; + } + + size_t totalSendMsgSize() { return m_totalSendMsgSize; } + FakeGateWay::Ptr gateWay() { return m_fakeGateWay; } + + void setNodeIDList(bcos::crypto::NodeIDSet const& _nodeIDList) { m_nodeIDList = _nodeIDList; } + +private: + NodeIDPtr m_nodeId; + std::map m_nodeId2AsyncSendSize; + size_t m_totalSendMsgSize = 0; + FakeGateWay::Ptr m_fakeGateWay; + bcos::crypto::NodeIDSet m_nodeIDList; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeKVStorage.h b/bcos-framework/bcos-framework/testutils/faker/FakeKVStorage.h new file mode 100644 index 0000000..2278ba3 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeKVStorage.h @@ -0,0 +1,111 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fake KVStorage + * @file FakeKVStorage.h + * @author: yujiechen + * @date 2021-09-07 + */ +#pragma once +#include "../../protocol/CommonError.h" +#include "../../storage/StorageInterface.h" +#include "../../storage/KVStorageHelper.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::storage; +namespace bcos +{ +namespace test +{ +class FakeKVStorage : public bcos::storage::KVStorageHelper +{ +}; + +// class FakeKVStorage : public KVStorageHelper +// { +// public: +// using Ptr = std::shared_ptr; +// FakeKVStorage() = default; +// ~FakeKVStorage() override {} + +// void asyncGet(const std::string_view& _columnFamily, const std::string_view& _key, +// std::function _callback) override +// { +// auto key = getKey(_columnFamily, _key); +// if (!m_key2Data.count(key)) +// { +// _callback(std::make_shared( +// (int32_t)bcos::protocol::StorageErrorCode::NotFound, "key NotFound"), +// ""); +// return; +// } +// _callback(nullptr, m_key2Data[key]); +// } + +// void asyncGetBatch(const std::string_view& _columnFamily, +// const std::shared_ptr>& _keys, +// std::function>&)> +// callback) override +// { +// auto result = std::make_shared>(); +// for (auto const& _key : *_keys) +// { +// auto key = getKey(_columnFamily, _key); +// if (!m_key2Data.count(key)) +// { +// result->push_back(""); +// continue; +// } +// result->push_back(m_key2Data[key]); +// } +// callback(nullptr, result); +// } + +// void asyncPut(const std::string_view& _columnFamily, const std::string_view& _key, +// const std::string_view& _value, std::function _callback) +// override +// { +// auto key = getKey(_columnFamily, _key); +// m_key2Data[key] = _value; +// _callback(nullptr); +// } +// void asyncRemove(const std::string_view& _columnFamily, const std::string_view& _key, +// std::function _callback) override +// { +// auto key = getKey(_columnFamily, _key); +// if (!m_key2Data.count(key)) +// { +// _callback(std::make_shared( +// (int32_t)bcos::protocol::StorageErrorCode::NotFound, "key NotFound")); +// return; +// } +// m_key2Data.erase(key); +// _callback(nullptr); +// } + +// protected: +// std::string getKey(const std::string_view& _columnFamily, const std::string_view& _key) +// { +// std::string columnFamily(_columnFamily.data(), _columnFamily.size()); +// std::string key(_key.data(), _key.size()); +// return columnFamily + "_" + key; +// } +// std::map m_key2Data; +// }; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeLedger.h b/bcos-framework/bcos-framework/testutils/faker/FakeLedger.h new file mode 100644 index 0000000..1d75bc2 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeLedger.h @@ -0,0 +1,379 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fake ledger + * @file FakeLedger.h + * @author: yujiechen + * @date 2021-05-25 + */ +#pragma once +#include "../../ledger/LedgerConfig.h" +#include "../../ledger/LedgerInterface.h" +#include "../../protocol/Block.h" +#include + +using namespace bcos; +using namespace bcos::ledger; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::consensus; +namespace bcos +{ +namespace test +{ +class FakeLedger : public LedgerInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + FakeLedger() = default; + FakeLedger(BlockFactory::Ptr _blockFactory, size_t _blockNumber, size_t _txsSize, size_t, + std::vector _sealerList) + : m_blockFactory(_blockFactory), + m_ledgerConfig(std::make_shared()), + m_sealerList(_sealerList) + { + init(_blockNumber, _txsSize, 0); + m_worker = std::make_shared("worker", 1); + } + ~FakeLedger() override + { + if (m_worker) + { + m_worker->stop(); + } + m_hash2Block.clear(); + std::map emptyHash2Block; + m_hash2Block.swap(emptyHash2Block); + + m_txsHashToData.clear(); + std::map emptyTxsData; + m_txsHashToData.swap(emptyTxsData); + } + + FakeLedger( + BlockFactory::Ptr _blockFactory, size_t _blockNumber, size_t _txsSize, size_t _receiptsSize) + : m_blockFactory(_blockFactory), m_ledgerConfig(std::make_shared()) + { + auto sigImpl = m_blockFactory->cryptoSuite()->signatureImpl(); + m_sealerList = fakeSealerList(m_keyPairVec, sigImpl, 4); + init(_blockNumber, _txsSize, _receiptsSize); + m_worker = std::make_shared("worker", 1); + } + + void init(size_t _blockNumber, size_t _txsSize, int64_t _timestamp = utcTime()) + { + auto genesisBlock = init(nullptr, true, 0, 0, 0); + m_ledger.push_back(genesisBlock); + m_hash2Block[genesisBlock->blockHeader()->hash()] = 0; + + auto parentHeader = genesisBlock->blockHeader(); + for (size_t i = 1; i < _blockNumber; i++) + { + auto block = init(parentHeader, true, i, _txsSize, _timestamp); + parentHeader = block->blockHeader(); + m_ledger.push_back(block); + m_hash2Block[block->blockHeader()->hash()] = i; + } + auto latestBlock = m_ledger[m_ledger.size() - 1]; + updateLedgerConfig(latestBlock->blockHeader()); + } + + Block::Ptr init(BlockHeader::Ptr _parentBlockHeader, bool _withHeader, BlockNumber _blockNumber, + size_t _txsSize, int64_t _timestamp = utcTime()) + { + auto block = fakeAndCheckBlock( + m_blockFactory->cryptoSuite(), m_blockFactory, false, _txsSize, 0, false); + if (!_withHeader) + { + return block; + } + ParentInfoList parentInfo; + if (_parentBlockHeader != nullptr) + { + ParentInfo info{_parentBlockHeader->number(), _parentBlockHeader->hash()}; + parentInfo.push_back(info); + } + auto rootHash = + m_blockFactory->cryptoSuite()->hashImpl()->hash(std::to_string(_blockNumber)); + u256 gasUsed = 1232342523; + + SignatureList signatureList; + // fake blockHeader + auto blockHeader = fakeAndTestBlockHeader(m_blockFactory->cryptoSuite(), 0, parentInfo, + rootHash, rootHash, rootHash, _blockNumber, gasUsed, _timestamp, 0, m_sealerList, + bytes(), signatureList, false); + auto sigImpl = m_blockFactory->cryptoSuite()->signatureImpl(); + blockHeader->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + signatureList = fakeSignatureList(sigImpl, m_keyPairVec, blockHeader->hash()); + blockHeader->setSignatureList(signatureList); + block->setBlockHeader(blockHeader); + return block; + } + + Block::Ptr populateFromHeader(BlockHeader::Ptr _blockHeader) + { + auto block = m_blockFactory->createBlock(); + block->blockHeader()->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + block->setBlockHeader(_blockHeader); + return block; + } + + void updateLedgerConfig(BlockHeader::Ptr _blockHeader) + { + m_ledgerConfig->setBlockNumber(_blockHeader->number()); + m_ledgerConfig->setHash(_blockHeader->hash()); + } + + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) override + { + (void)storage; + (void)block; + callback(nullptr); + } + + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr, + std::function _callback) override + { + if (!_callback) + { + return; + } + _callback(nullptr); + } + + // the txpool module use this interface to store txs + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) override + { + WriteGuard l(x_txsHashToData); + for (size_t i = 0; i < block->transactionsSize(); i++) + { + auto tx = blockTxs ? blockTxs->at(i) : block->transaction(i); + auto txHash = tx->hash(); + std::shared_ptr txData; + tx->encode(*txData); + m_txsHashToData[txHash] = txData; + } + return nullptr; + } + + // maybe sync module or rpc module need this interface to return header/txs/receipts + void asyncGetBlockDataByNumber(BlockNumber _number, int32_t, + std::function _callback) override + { + ReadGuard l(x_ledger); + if (m_ledger.size() <= (size_t)(_number)) + { + _callback(std::make_unique(-1, "block not found"), nullptr); + return; + } + auto block = m_ledger[_number]; + _callback(nullptr, block); + } + + void asyncGetBlockNumberByHash( + crypto::HashType const&, std::function) override + {} + + void asyncGetBlockHashByNumber(BlockNumber _blockNumber, + std::function _onGetBlock) override + { + ReadGuard l(x_ledger); + auto const& hash = m_ledger[_blockNumber]->blockHeader()->hash(); + _onGetBlock(nullptr, hash); + } + + void asyncGetBlockNumber(std::function _onGetBlock) override + { + _onGetBlock(nullptr, m_ledgerConfig->blockNumber()); + } + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool, + std::function>)> + _onGetTx) override + { + ReadGuard l(x_txsHashToData); + auto txs = std::make_shared(); + for (auto const& hash : *_txHashList) + { + if (m_txsHashToData.count(hash)) + { + auto tx = m_blockFactory->transactionFactory()->createTransaction( + ref(*(m_txsHashToData[hash])), false); + txs->emplace_back(tx); + } + } + _onGetTx(nullptr, txs, nullptr); + } + + void asyncGetTransactionReceiptByHash(crypto::HashType const&, bool, + std::function _onGetTx) + override + { + _onGetTx(nullptr, nullptr, nullptr); + } + + void asyncGetTotalTransactionCount(std::function + _callback) override + { + _callback(nullptr, m_totalTxCount, 0, m_ledgerConfig->blockNumber()); + } + + void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) override + { + _callback(nullptr, {}); + } + + void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) override + { + std::string value = ""; + if (m_systemConfig.count(_key)) + { + value = m_systemConfig[std::string{_key}]; + } + _onGetConfig(nullptr, value, m_ledgerConfig->blockNumber()); + } + + void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetNodeList) override + { + if (_type == CONSENSUS_SEALER) + { + auto consensusNodes = std::make_shared(); + *consensusNodes = m_ledgerConfig->consensusNodeList(); + _onGetNodeList(nullptr, consensusNodes); + return; + } + if (_type == CONSENSUS_OBSERVER) + { + auto observerNodes = std::make_shared(); + *observerNodes = m_ledgerConfig->observerNodeList(); + _onGetNodeList(nullptr, observerNodes); + return; + } + _onGetNodeList(std::make_unique(-1, "invalid Type"), nullptr); + } + + void asyncGetNonceList(BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) override + { + if (_startNumber > m_ledgerConfig->blockNumber()) + { + _onGetList(nullptr, nullptr); + } + auto endNumber = std::min(_startNumber + _offset - 1, m_ledgerConfig->blockNumber()); + auto nonceList = std::make_shared>(); + ReadGuard l(x_ledger); + for (auto index = _startNumber; index <= endNumber; index++) + { + auto nonces = m_ledger[index]->nonces(); + std::cout << "Block nonces: " << nonces->size() << std::endl; + nonceList->insert(std::make_pair(index, nonces)); + } + _onGetList(nullptr, nonceList); + } + + void setStatus(bool _normal) { m_statusNormal = _normal; } + void setTotalTxCount(size_t _totalTxCount) { m_totalTxCount = _totalTxCount; } + void setSystemConfig(std::string_view _key, std::string const& _value) + { + m_systemConfig[std::string{_key}] = _value; + } + + void setConsensusNodeList(ConsensusNodeListPtr _consensusNodes) + { + m_ledgerConfig->setConsensusNodeList(*_consensusNodes); + } + void setObserverNodeList(ConsensusNodeListPtr _observerNodes) + { + m_ledgerConfig->setObserverNodeList(*_observerNodes); + } + + LedgerConfig::Ptr ledgerConfig() { return m_ledgerConfig; } + BlockNumber blockNumber() { return m_ledgerConfig->blockNumber(); } + std::vector const& ledgerData() + { + ReadGuard l(x_ledger); + return m_ledger; + } + + size_t storedTxsSize() + { + ReadGuard l(x_txsHashToData); + return m_txsHashToData.size(); + } + // Note thread-safe + std::map txsHashToData() + { + ReadGuard l(x_txsHashToData); + return m_txsHashToData; + } + + std::vector sealerList() { return m_sealerList; } + + // Consensus and block-sync module use this interface to commit block + virtual void asyncCommitBlock(const bcos::protocol::BlockHeader::ConstPtr& _blockHeader, + std::function _onCommitBlock) + { + auto nonConstHeader = std::const_pointer_cast(_blockHeader); + if (nonConstHeader->number() != m_ledgerConfig->blockNumber() + 1) + { + _onCommitBlock(std::make_shared(-1, "invalid block"), nullptr); + return; + } + + auto self = std::weak_ptr(shared_from_this()); + m_worker->enqueue([nonConstHeader, _onCommitBlock, self]() { + auto ledger = self.lock(); + if (!self.lock()) + { + return; + } + WriteGuard l(ledger->x_ledger); + auto block = ledger->populateFromHeader(nonConstHeader); + ledger->m_ledger.push_back(block); + ledger->updateLedgerConfig(nonConstHeader); + _onCommitBlock(nullptr, ledger->m_ledgerConfig); + }); + } + +private: + BlockFactory::Ptr m_blockFactory; + std::vector m_keyPairVec; + LedgerConfig::Ptr m_ledgerConfig; + + size_t m_totalTxCount; + bool m_statusNormal = true; + + std::vector m_ledger; + std::map m_hash2Block; + SharedMutex x_ledger; + + std::map m_txsHashToData; + SharedMutex x_txsHashToData; + + std::map> m_systemConfig; + std::vector m_sealerList; + std::shared_ptr m_worker = nullptr; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeScheduler.h b/bcos-framework/bcos-framework/testutils/faker/FakeScheduler.h new file mode 100644 index 0000000..76d6453 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeScheduler.h @@ -0,0 +1,94 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief faker for the Scheduler + * @file FakeScheduler.h + * @author: yujiechen + * @date 2021-09-07 + */ +#pragma once +#include "../../dispatcher/SchedulerInterface.h" +#include "FakeLedger.h" + +using namespace bcos; +using namespace bcos::scheduler; +namespace bcos +{ +namespace test +{ +class FakeScheduler : public SchedulerInterface +{ +public: + using Ptr = std::shared_ptr; + FakeScheduler(FakeLedger::Ptr _ledger, BlockFactory::Ptr _blockFactory) + : m_ledger(_ledger), m_blockFactory(_blockFactory) + {} + ~FakeScheduler() override = default; + void executeBlock(bcos::protocol::Block::Ptr _block, bool, + std::function + _callback) noexcept override + { + auto blockHeader = _block->blockHeader(); + if (m_blockFactory) + { + auto oldBlockHeader = _block->blockHeader(); + blockHeader = m_blockFactory->blockHeaderFactory()->populateBlockHeader(oldBlockHeader); + blockHeader->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + } + _callback(nullptr, std::move(blockHeader), false); + return; + } + + // Consensus and block-sync module use this interface to commit block + void commitBlock(bcos::protocol::BlockHeader::Ptr _blockHeader, + std::function + _onCommitBlock) noexcept override + { + m_ledger->asyncCommitBlock(_blockHeader, _onCommitBlock); + } + + // by console, query committed committing executing + void status( + std::function) noexcept override + {} + + // by rpc + void call(protocol::Transaction::Ptr, + std::function) noexcept override + {} + + // by executor + void registerExecutor(std::string, bcos::executor::ParallelTransactionExecutorInterface::Ptr, + std::function) noexcept override + {} + + void unregisterExecutor(const std::string&, std::function) noexcept override + {} + + // clear all status + void reset(std::function) noexcept override {} + void getCode(std::string_view, std::function) override {} + void getABI(std::string_view, std::function) override {} + + // for performance, do the things before executing block in executor. + void preExecuteBlock( + bcos::protocol::Block::Ptr, bool, std::function) override{}; + +private: + FakeLedger::Ptr m_ledger; + BlockFactory::Ptr m_blockFactory; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeSealer.h b/bcos-framework/bcos-framework/testutils/faker/FakeSealer.h new file mode 100644 index 0000000..d8eb103 --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeSealer.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fake sealer + * @file FakeSealer.h + * @author: yujiechen + * @date 2021-05-26 + */ +#pragma once +#include "../../sealer/SealerInterface.h" +#include +#include + +using namespace bcos; +using namespace bcos::sealer; + +namespace bcos +{ +namespace test +{ +class FakeSealer : public SealerInterface +{ +public: + using Ptr = std::shared_ptr; + FakeSealer() = default; + ~FakeSealer() override {} + + void start() override {} + void stop() override {} + + void asyncNotifySealProposal(uint64_t _startIndex, uint64_t _endIndex, uint64_t _maxTxsToSeal, + std::function) override + { + m_proposalStartIndex = _startIndex; + m_proposalEndIndex = _endIndex; + m_maxTxsToSeal = _maxTxsToSeal; + } + + void asyncNoteUnSealedTxsSize( + uint64_t _unSealedTxsSize, std::function _onRecvResponse) override + { + m_unSealedTxsSize = _unSealedTxsSize; + _onRecvResponse(nullptr); + } + + uint64_t unSealedTxsSize() const { return m_unSealedTxsSize; } + + uint64_t proposalStartIndex() const { return m_proposalStartIndex; } + uint64_t proposalEndIndex() const { return m_proposalEndIndex; } + uint64_t maxTxsToSeal() const { return m_maxTxsToSeal; } + + void asyncNoteLatestBlockNumber(int64_t _blockNumber) override { m_blockNumber = _blockNumber; } + int64_t blockNumber() const { return m_blockNumber; } + void asyncResetSealing(std::function) override {} + +private: + std::atomic m_unSealedTxsSize = {0}; + uint64_t m_proposalStartIndex = 0; + uint64_t m_proposalEndIndex = 0; + uint64_t m_maxTxsToSeal = 0; + int64_t m_blockNumber; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/testutils/faker/FakeTxPool.h b/bcos-framework/bcos-framework/testutils/faker/FakeTxPool.h new file mode 100644 index 0000000..ace4c4a --- /dev/null +++ b/bcos-framework/bcos-framework/testutils/faker/FakeTxPool.h @@ -0,0 +1,114 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief faker for the TxPool + * @file FakeTxPool.h + * @author: yujiechen + * @date 2021-05-28 + */ +#pragma once +#include "../../protocol/CommonError.h" +#include "../../txpool/TxPoolInterface.h" +#include + +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::consensus; + +namespace bcos +{ +namespace test +{ +class FakeTxPool : public TxPoolInterface +{ +public: + using Ptr = std::shared_ptr; + FakeTxPool() { m_worker = std::make_shared("txpool", 1); } + ~FakeTxPool() override {} + + void start() override {} + void stop() override {} + + // useless for PBFT, maybe needed by RPC + task::Task submitTransaction( + protocol::Transaction::Ptr transaction) override + { + co_return nullptr; + } + void asyncResetTxPool(std::function _callback) override + { + _callback(nullptr); + } + // useless for PBFT, needed by dispatcher to fetch block transactions + void asyncFillBlock(HashListPtr, std::function) override {} + + // useless for PBFT, maybe useful for the ledger + void asyncNotifyBlockResult( + BlockNumber, TransactionSubmitResultsPtr, std::function) override + {} + + // called by frontService to dispatch message + // useless for PBFT + void asyncNotifyTxsSyncMessage(Error::Ptr, std::string const&, NodeIDPtr, bytesConstRef, + std::function) override + {} + + // notify related interfaces: useless for the PBFT module + void notifyConsensusNodeList(ConsensusNodeList const&, std::function) override + {} + // notify related interfaces: useless for the PBFT module + void notifyObserverNodeList(ConsensusNodeList const&, std::function) override + {} + + void notifyConnectedNodes( + bcos::crypto::NodeIDSet const&, std::function) override + {} + void asyncSealTxs(uint64_t, TxsHashSetPtr, + std::function) + override + {} + + void asyncMarkTxs(HashListPtr, bool, bcos::protocol::BlockNumber, bcos::crypto::HashType const&, + std::function) override + {} + + void asyncVerifyBlock(PublicPtr, bytesConstRef const&, + std::function _onVerifyFinished) override + { + m_worker->enqueue([this, _onVerifyFinished]() { + if (m_verifyResult) + { + _onVerifyFinished(nullptr, m_verifyResult); + return; + } + _onVerifyFinished( + std::make_unique(CommonError::TransactionsMissing, "TransactionsMissing"), + m_verifyResult); + }); + } + + void setVerifyResult(bool _verifyResult) { m_verifyResult = _verifyResult; } + bool verifyResult() const { return m_verifyResult; } + + void asyncGetPendingTransactionSize(std::function) override {} + +private: + bool m_verifyResult = true; + std::shared_ptr m_worker = nullptr; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/bcos-framework/txpool/TxPoolInterface.h b/bcos-framework/bcos-framework/txpool/TxPoolInterface.h new file mode 100644 index 0000000..accb54e --- /dev/null +++ b/bcos-framework/bcos-framework/txpool/TxPoolInterface.h @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TxPoolInterface.h + * @author: yujiechen + * @date: 2021-04-07 + */ +#pragma once +#include "../consensus/ConsensusNodeInterface.h" +#include "../protocol/Block.h" +#include "../protocol/Transaction.h" +#include "../protocol/TransactionSubmitResult.h" +#include "TxPoolTypeDef.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace txpool +{ +class TxPoolInterface +{ +public: + using Ptr = std::shared_ptr; + + TxPoolInterface() = default; + virtual ~TxPoolInterface() {} + + virtual void start() = 0; + virtual void stop() = 0; + + /** + * @brief submit a transaction + * + * @param transaction the transaction to be submitted + * @return protocol::TransactionSubmitResult::Ptr + */ + virtual task::Task submitTransaction( + [[maybe_unused]] protocol::Transaction::Ptr transaction) + { + BOOST_THROW_EXCEPTION(std::runtime_error("No implement!")); + } + + virtual task::Task broadcastPushTransaction( + [[maybe_unused]] const protocol::Transaction& transaction) + { + BOOST_THROW_EXCEPTION(std::runtime_error("No implement!")); + } + + virtual task::Task onReceivePushTransaction( + bcos::crypto::NodeIDPtr nodeID, const std::string& messageID, bytesConstRef data) + { + BOOST_THROW_EXCEPTION(std::runtime_error("No implement!")); + } + + virtual task::Task> getMissedTransactions( + std::vector transactionHashes, bcos::crypto::NodeIDPtr fromNodeID) + { + BOOST_THROW_EXCEPTION(std::runtime_error("No implement!")); + } + + /** + * @brief fetch transactions from the txpool + * + * @param _txsLimit the max number of the transactions to be fetch + * @param _avoidTxs list of transactions that need to be filtered + * @param _sealCallback after the txpool responds to the sealed txs, the callback is + * triggered + */ + virtual void asyncSealTxs(uint64_t _txsLimit, TxsHashSetPtr _avoidTxs, + std::function + _sealCallback) = 0; + + virtual void asyncMarkTxs(bcos::crypto::HashListPtr _txsHash, bool _sealedFlag, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + std::function _onRecvResponse) = 0; + /** + * @brief verify transactions in Block for the consensus module + * + * @param _generatedNodeID the NodeID of the leader(When missing transactions, need to obtain + * the missing transactions from Leader) + * @param _blocks the block to be verified + * @param _onVerifyFinished callback to be called after the block verification is over + */ + virtual void asyncVerifyBlock(bcos::crypto::PublicPtr _generatedNodeID, + bytesConstRef const& _block, std::function _onVerifyFinished) = 0; + + /** + * @brief The dispatcher obtains the transaction list corresponding to the block from the + * transaction pool + * + * @param _block the block to be filled with transactions + * @param _onBlockFilled callback to be called after the block has been filled + */ + virtual void asyncFillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled) = 0; + + /** + * @brief After the blockchain is on-chain, the interface is called to notify the transaction + * receipt and other information + * + * @param _onChainBlock Including transaction receipt, on-chain transaction hash list, block + * header information + * @param _onChainCallback + */ + virtual void asyncNotifyBlockResult(bcos::protocol::BlockNumber _blockNumber, + bcos::protocol::TransactionSubmitResultsPtr _txsResult, + std::function _onNotifyFinished) = 0; + + // called by frontService to dispatch message + virtual void asyncNotifyTxsSyncMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) = 0; + virtual void notifyConsensusNodeList( + bcos::consensus::ConsensusNodeList const& _consensusNodeList, + std::function _onRecvResponse) = 0; + virtual void notifyObserverNodeList(bcos::consensus::ConsensusNodeList const& _observerNodeList, + std::function _onRecvResponse) = 0; + + // for RPC to get pending transactions + virtual void asyncGetPendingTransactionSize( + std::function _onGetTxsSize) = 0; + + // notify to reset the txpool when the consensus module startup + virtual void asyncResetTxPool(std::function _onRecvResponse) = 0; + + virtual void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) = 0; + + // determine to clean up txs periodically or not + virtual void registerTxsCleanUpSwitch(std::function) {} + virtual void clearAllTxs() {} + + virtual void tryToSyncTxsFromPeers() {} +}; +} // namespace txpool +} // namespace bcos diff --git a/bcos-framework/bcos-framework/txpool/TxPoolTypeDef.h b/bcos-framework/bcos-framework/txpool/TxPoolTypeDef.h new file mode 100644 index 0000000..6a5eab8 --- /dev/null +++ b/bcos-framework/bcos-framework/txpool/TxPoolTypeDef.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TxPoolTypeDef.h + * @author: yujiechen + * @date: 2021-05-07 + */ +#pragma once +#include "../Common.h" +#include + +#define TXPOOL_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TXPOOL") + +namespace bcos +{ +namespace txpool +{ +using TxsHashSet = std::set; +using TxsHashSetPtr = std::shared_ptr; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/test/CMakeLists.txt b/bcos-framework/test/CMakeLists.txt new file mode 100644 index 0000000..234ab6b --- /dev/null +++ b/bcos-framework/test/CMakeLists.txt @@ -0,0 +1,29 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-framework +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +# target_include_directories(${TEST_BINARY_NAME} PRIVATE bcos-framework) + +find_package(Boost REQUIRED serialization unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${UTILITIES_TARGET} bcos-framework Boost::serialization Boost::unit_test_framework) +add_test(NAME test-framework WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-framework/test/unittests/interfaces/ConsensusNodeTest.cpp b/bcos-framework/test/unittests/interfaces/ConsensusNodeTest.cpp new file mode 100644 index 0000000..45f3b11 --- /dev/null +++ b/bcos-framework/test/unittests/interfaces/ConsensusNodeTest.cpp @@ -0,0 +1,146 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the ConsensusNode + * @file ConsensusNodeTest.cpp + */ +#include "bcos-framework/consensus/ConsensusNode.h" +#include "bcos-framework/consensus/ConsensusNodeInterface.h" +#include "bcos-framework/protocol/Protocol.h" +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(ConsensusNodeTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testConsensusNode) +{ + // test operator + std::string node1 = "123"; + uint64_t weight = 1; + auto nodeId = std::make_shared(bytes(node1.begin(), node1.end())); + auto consensusNode1 = std::make_shared(nodeId, weight); + + std::string node2 = "1234"; + auto nodeId2 = std::make_shared(bytes(node2.begin(), node2.end())); + auto consensusNode2 = std::make_shared(nodeId2, weight); + + auto nodeId3 = std::make_shared(bytes(node1.begin(), node1.end())); + auto consensusNode3 = std::make_shared(nodeId3, weight); + + // test set + std::set consensusNodeList; + consensusNodeList.insert(consensusNode1); + BOOST_CHECK(consensusNodeList.count(consensusNode1)); + BOOST_CHECK(consensusNodeList.size() == 1); + + consensusNodeList.insert(consensusNode2); + BOOST_CHECK(consensusNodeList.count(consensusNode2)); + BOOST_CHECK(consensusNodeList.size() == 2); + + consensusNodeList.insert(consensusNode3); + BOOST_CHECK(consensusNodeList.count(consensusNode3)); + BOOST_CHECK(consensusNodeList.size() == 2); + + // check map + std::map nodeId2ConsensusNode; + nodeId2ConsensusNode.insert(std::make_pair(consensusNode1->nodeID(), consensusNode1)); + BOOST_CHECK(nodeId2ConsensusNode.count(consensusNode1->nodeID())); + BOOST_CHECK(!nodeId2ConsensusNode.count(consensusNode2->nodeID())); + BOOST_CHECK(nodeId2ConsensusNode.size() == 1); + + nodeId2ConsensusNode.insert(std::make_pair(consensusNode2->nodeID(), consensusNode2)); + BOOST_CHECK(nodeId2ConsensusNode.count(consensusNode2->nodeID())); + BOOST_CHECK(nodeId2ConsensusNode.count(consensusNode3->nodeID())); + BOOST_CHECK(nodeId2ConsensusNode.size() == 2); + nodeId2ConsensusNode.insert(std::make_pair(consensusNode3->nodeID(), consensusNode3)); + BOOST_CHECK(nodeId2ConsensusNode.size() == 2); + + // test NodeIDSet + NodeIDSet nodeIdSet; + nodeIdSet.insert(nodeId); + BOOST_CHECK(nodeIdSet.count(nodeId)); + BOOST_CHECK(nodeIdSet.size() == 1); + + nodeIdSet.insert(nodeId2); + BOOST_CHECK(nodeIdSet.count(nodeId2)); + BOOST_CHECK(nodeIdSet.size() == 2); + + nodeIdSet.insert(nodeId3); + BOOST_CHECK(nodeIdSet.count(nodeId3)); + BOOST_CHECK(nodeIdSet.size() == 2); +} + +BOOST_AUTO_TEST_CASE(test_stringToModuleID) +{ + BOOST_CHECK(bcos::protocol::ModuleID::Raft == protocol::stringToModuleID("raft").value()); + BOOST_CHECK(bcos::protocol::ModuleID::Raft == protocol::stringToModuleID("Raft").value()); + BOOST_CHECK(bcos::protocol::ModuleID::Raft == protocol::stringToModuleID("RAFT").value()); + + BOOST_CHECK(bcos::protocol::ModuleID::PBFT == protocol::stringToModuleID("pbft").value()); + BOOST_CHECK(bcos::protocol::ModuleID::PBFT == protocol::stringToModuleID("Pbft").value()); + BOOST_CHECK(bcos::protocol::ModuleID::PBFT == protocol::stringToModuleID("PBFT").value()); + + BOOST_CHECK(bcos::protocol::ModuleID::AMOP == protocol::stringToModuleID("amop").value()); + BOOST_CHECK(bcos::protocol::ModuleID::AMOP == protocol::stringToModuleID("Amop").value()); + BOOST_CHECK(bcos::protocol::ModuleID::AMOP == protocol::stringToModuleID("AMOP").value()); + + BOOST_CHECK( + bcos::protocol::ModuleID::BlockSync == protocol::stringToModuleID("block_sync").value()); + BOOST_CHECK( + bcos::protocol::ModuleID::BlockSync == protocol::stringToModuleID("Block_sync").value()); + BOOST_CHECK( + bcos::protocol::ModuleID::BlockSync == protocol::stringToModuleID("BLOCK_SYNC").value()); + + BOOST_CHECK( + bcos::protocol::ModuleID::TxsSync == protocol::stringToModuleID("txs_sync").value()); + BOOST_CHECK( + bcos::protocol::ModuleID::TxsSync == protocol::stringToModuleID("Txs_sync").value()); + BOOST_CHECK( + bcos::protocol::ModuleID::TxsSync == protocol::stringToModuleID("TXS_SYNC").value()); + + BOOST_CHECK(bcos::protocol::ModuleID::ConsTxsSync == + protocol::stringToModuleID("cons_txs_sync").value()); + BOOST_CHECK(bcos::protocol::ModuleID::ConsTxsSync == + protocol::stringToModuleID("cons_Txs_sync").value()); + BOOST_CHECK(bcos::protocol::ModuleID::ConsTxsSync == + protocol::stringToModuleID("CONS_TXS_SYNC").value()); + + + BOOST_CHECK(!protocol::stringToModuleID("aa").has_value()); +} + + +BOOST_AUTO_TEST_CASE(test_moduleIDToString) +{ + BOOST_CHECK("raft" == protocol::moduleIDToString(protocol::ModuleID::Raft)); + BOOST_CHECK("pbft" == protocol::moduleIDToString(protocol::ModuleID::PBFT)); + BOOST_CHECK("amop" == protocol::moduleIDToString(protocol::ModuleID::AMOP)); + BOOST_CHECK("block_sync" == protocol::moduleIDToString(protocol::ModuleID::BlockSync)); + BOOST_CHECK("txs_sync" == protocol::moduleIDToString(protocol::ModuleID::TxsSync)); + BOOST_CHECK("light_node" == protocol::moduleIDToString(protocol::ModuleID::LIGHTNODE_GET_BLOCK)); + BOOST_CHECK("cons_txs_sync" == protocol::moduleIDToString(protocol::ModuleID::ConsTxsSync)); +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-framework/test/unittests/interfaces/ExecutorTest.cpp b/bcos-framework/test/unittests/interfaces/ExecutorTest.cpp new file mode 100644 index 0000000..eafd38b --- /dev/null +++ b/bcos-framework/test/unittests/interfaces/ExecutorTest.cpp @@ -0,0 +1,60 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the Executor + * @file ExecutorTest.cpp + */ + +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::executor; + +namespace bcos +{ +namespace test +{ +struct ExecutorTestFixture +{ + ParallelTransactionExecutorInterface* executor; + + ExecutorTestFixture() : executor(nullptr) {} + + ~ExecutorTestFixture() {} +}; + +BOOST_FIXTURE_TEST_SUITE(ExecutorTest, ExecutorTestFixture) + +BOOST_AUTO_TEST_CASE(ExecutionParams) +{ + shared_ptr p = nullptr; +} + +BOOST_AUTO_TEST_CASE(ExecutionResult) +{ + shared_ptr p = nullptr; +} + +BOOST_AUTO_TEST_CASE(TableHash) +{ + shared_ptr p = nullptr; +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-framework/test/unittests/main/main.cpp b/bcos-framework/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-framework/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-front/CMakeLists.txt b/bcos-front/CMakeLists.txt new file mode 100644 index 0000000..deb01e1 --- /dev/null +++ b/bcos-front/CMakeLists.txt @@ -0,0 +1,40 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-front +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-front +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +aux_source_directory(bcos-front SRCS) + +add_library(${FRONT_TARGET} ${SRCS}) +target_link_libraries(${FRONT_TARGET} PUBLIC bcos-framework ${UTILITIES_TARGET}) + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for doxygen +# include(BuildDocs) + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("front-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_SOURCE_DIR}/test/mock**' '${CMAKE_SOURCE_DIR}/test/main**'") +endif () diff --git a/bcos-front/bcos-front/Common.h b/bcos-front/bcos-front/Common.h new file mode 100644 index 0000000..f88f59e --- /dev/null +++ b/bcos-front/bcos-front/Common.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-04-26 + */ +#pragma once + +#define FRONT_LOG(LEVEL) BCOS_LOG(LEVEL) << "[FrontService]" \ No newline at end of file diff --git a/bcos-front/bcos-front/FrontImpl.h b/bcos-front/bcos-front/FrontImpl.h new file mode 100644 index 0000000..ff13a9f --- /dev/null +++ b/bcos-front/bcos-front/FrontImpl.h @@ -0,0 +1,191 @@ +#pragma once + +#include "bcos-crypto/interfaces/crypto/KeyFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::front +{ + +#define FRONT_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("Front") + +// clang-format off +struct NoNodeAvailable: public bcos::error::Exception {}; +// clang-format on + +class FrontImpl : public bcos::concepts::front::FrontBase +{ +public: + FrontImpl(bcos::front::FrontServiceInterface::Ptr front, + bcos::gateway::GatewayInterface::Ptr gateway, bcos::crypto::KeyFactory::Ptr keyFactory, + std::string groupID) + : m_front(std::move(front)), + m_gateway(std::move(gateway)), + m_keyFactory(std::move(keyFactory)), + m_groupID(std::move(groupID)) + {} + + task::Task> nodeIDs() + { + struct Awaitable + { + Awaitable(bcos::gateway::GatewayInterface::Ptr& gateway, std::string& groupID) + : m_gateway(gateway), m_groupID(groupID) + {} + + constexpr bool await_ready() const noexcept { return false; } + void await_suspend(CO_STD::coroutine_handle<> handle) + { + bcos::concepts::getRef(m_gateway).asyncGetPeers( + [this, m_handle = handle](Error::Ptr error, const gateway::GatewayInfo::Ptr&, + const gateway::GatewayInfosPtr& peerGatewayInfos) mutable { + if (error) + { + m_result = std::move(error); + } + else + { + if (!peerGatewayInfos->empty()) + { + for (const auto& peerGatewayInfo : *peerGatewayInfos) + { + auto nodeIDInfo = peerGatewayInfo->nodeIDInfo(); + auto it = nodeIDInfo.find(m_groupID); + + if (it != nodeIDInfo.end() && !it->second.empty()) + { + m_result = std::move(it->second); + break; + } + } + } + } + + m_handle.resume(); + }); + } + std::set await_resume() + { + if (std::holds_alternative(m_result)) + { + BOOST_THROW_EXCEPTION(*std::get(m_result)); + } + + if (std::holds_alternative(m_result)) + { + BOOST_THROW_EXCEPTION(NoNodeAvailable{}); + } + + return std::move(std::get>(m_result)); + } + + bcos::gateway::GatewayInterface::Ptr& m_gateway; + std::string& m_groupID; + + std::variant> m_result; + }; + + auto awaitable = Awaitable(m_gateway, m_groupID); + co_return co_await awaitable; + } + + task::Task impl_sendMessageByNodeID(int moduleID, auto const& nodeID, + concepts::serialize::Serializable auto const& request, + concepts::serialize::Serializable auto& response) + { + bcos::bytes requestBuffer; + bcos::concepts::serialize::encode(request, requestBuffer); + + crypto::NodeIDPtr nodeIDPtr; + using NodeIDType = std::decay_t; + if constexpr (std::is_same_v) + { + nodeIDPtr = nodeID; + } + else if constexpr (concepts::bytebuffer::ByteBuffer) + { + auto nodeIDBin = bcos::fromHex(nodeID); + nodeIDPtr = m_keyFactory->createKey(nodeIDBin); + } + else + { + static_assert(!sizeof(nodeID), "Unspported nodeID type!"); + } + + using ResponseType = std::remove_cvref_t; + struct Awaitable + { + constexpr bool await_ready() const { return false; } + + void await_suspend(CO_STD::coroutine_handle::promise_type> handle) + { + FRONT_LOG(DEBUG) << "P2P client send message: " << m_moduleID << " | " + << m_nodeID->hex() << " | " << m_requestBuffer.size(); + bcos::concepts::getRef(m_front).asyncSendMessageByNodeID(m_moduleID, m_nodeID, + bcos::ref(m_requestBuffer), DEFAULT_TIMEOUT, + [m_handle = handle, this](Error::Ptr error, const bcos::crypto::NodeIDPtr&, + bytesConstRef data, const std::string&, + const front::ResponseFunc&) mutable { + FRONT_LOG(DEBUG) << "P2P client receive message: " << m_moduleID << " | " + << m_nodeID->hex() << " | " << data.size() << " | " + << (error ? error->errorCode() : 0) << " | " + << (error ? error->errorMessage() : ""); + if (!error) + { + bcos::concepts::serialize::decode(data, m_response); + } + else + { + m_error = std::move(error); + } + + m_handle.resume(); + }); + } + + constexpr void await_resume() const + { + if (m_error) + { + BOOST_THROW_EXCEPTION(*m_error); + } + } + + // Request params + bcos::front::FrontServiceInterface::Ptr& m_front; + ModuleID m_moduleID = 0; + crypto::NodeIDPtr m_nodeID; + bcos::bytes m_requestBuffer; + + // Response params + Error::Ptr m_error; + ResponseType& m_response; + }; + + auto awaitable = Awaitable{.m_front = m_front, + .m_moduleID = moduleID, + .m_nodeID = std::move(nodeIDPtr), + .m_requestBuffer = std::move(requestBuffer), + .m_response = response}; + co_await awaitable; + } + + task::Task impl_broadcastMessage(NodeType type, ModuleID moduleID, + bcos::concepts::serialize::Serializable auto const& request) + {} + +private: + bcos::front::FrontServiceInterface::Ptr m_front; + bcos::gateway::GatewayInterface::Ptr m_gateway; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + std::string m_groupID; + + constexpr static uint32_t DEFAULT_TIMEOUT = 3000; +}; +} // namespace bcos::front \ No newline at end of file diff --git a/bcos-front/bcos-front/FrontMessage.cpp b/bcos-front/bcos-front/FrontMessage.cpp new file mode 100644 index 0000000..eba6215 --- /dev/null +++ b/bcos-front/bcos-front/FrontMessage.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontMessage.cpp + * @author: octopus + * @date 2021-04-20 + */ + +#include "FrontMessage.h" +#include + +using namespace bcos; +using namespace front; + +bool FrontMessage::encode(bytes& _buffer) +{ + _buffer.clear(); + + /// moduleID :2 bytes + /// UUID length :1 bytes + /// UUID :UUID length bytes + /// ext :2 bytes + /// payload + + uint16_t moduleID = boost::asio::detail::socket_ops::host_to_network_short(m_moduleID); + uint16_t ext = boost::asio::detail::socket_ops::host_to_network_short(m_ext); + + size_t uuidLength = m_uuid->size(); + // uuid length should not be greater than 256 + if (uuidLength > MAX_MESSAGE_UUID_SIZE) + { + return false; + } + + _buffer.insert(_buffer.end(), (byte*)&moduleID, (byte*)&moduleID + 2); + _buffer.insert(_buffer.end(), (byte*)&uuidLength, (byte*)&uuidLength + 1); + if (uuidLength > 0) + { + _buffer.insert(_buffer.end(), m_uuid->begin(), m_uuid->end()); + } + _buffer.insert(_buffer.end(), (byte*)&ext, (byte*)&ext + 2); + + _buffer.insert(_buffer.end(), m_payload.begin(), m_payload.end()); + return true; +} + +ssize_t FrontMessage::decode(bytesConstRef _buffer) +{ + if (_buffer.size() < HEADER_MIN_LENGTH) + { + return MessageDecodeStatus::MESSAGE_ERROR; + } + + m_uuid->clear(); + m_payload.reset(); + + int32_t offset = 0; + m_moduleID = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + uint8_t uuidLength = *((uint8_t*)&_buffer[offset]); + offset += 1; + + if (uuidLength > 0) + { + m_uuid->assign(&_buffer[offset], &_buffer[offset] + uuidLength); + offset += uuidLength; + } + + m_ext = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + m_payload = _buffer.getCroppedData(offset); + + return MessageDecodeStatus::MESSAGE_COMPLETE; +} diff --git a/bcos-front/bcos-front/FrontMessage.h b/bcos-front/bcos-front/FrontMessage.h new file mode 100644 index 0000000..2524c55 --- /dev/null +++ b/bcos-front/bcos-front/FrontMessage.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontMessage.h + * @author: octopus + * @date 2021-04-20 + */ + +#pragma once + +#include + +namespace bcos +{ +namespace front +{ +enum MessageDecodeStatus +{ + MESSAGE_ERROR = -1, + MESSAGE_COMPLETE = 0, + MESSAGE_INCOMPLETE = 1 +}; + +/// moduleID :2 bytes +/// UUID length :1 bytes +/// UUID :UUID length bytes +/// ext :2 bytes +/// payload +class FrontMessage +{ +public: + using Ptr = std::shared_ptr; + + /// moduleID(2) + UUID length(1) + ext(2) + const static size_t HEADER_MIN_LENGTH = 5; + /// The maximum front uuid length 10M + const static size_t MAX_MESSAGE_UUID_SIZE = 255; + + enum ExtFlag + { + Response = 0x0001, + }; + +public: + FrontMessage() + { + m_uuid = std::make_shared(); + m_payload = bytesConstRef(); + } + + virtual ~FrontMessage() {} + +public: + virtual uint16_t moduleID() { return m_moduleID; } + virtual void setModuleID(uint16_t _moduleID) { m_moduleID = _moduleID; } + + virtual uint16_t ext() { return m_ext; } + virtual void setExt(uint16_t _ext) { m_ext = _ext; } + + virtual std::shared_ptr uuid() { return m_uuid; } + virtual void setUuid(std::shared_ptr _uuid) { m_uuid = _uuid; } + + virtual bytesConstRef payload() { return m_payload; } + virtual void setPayload(bytesConstRef _payload) { m_payload = _payload; } + + virtual void setResponse() { m_ext |= ExtFlag::Response; } + virtual bool isResponse() { return m_ext & ExtFlag::Response; } + +public: + virtual bool encode(bytes& _buffer); + virtual ssize_t decode(bytesConstRef _buffer); + +protected: + uint16_t m_moduleID = 0; + std::shared_ptr m_uuid; + uint16_t m_ext = 0; + bytesConstRef m_payload; ///< message data +}; + +class FrontMessageFactory +{ +public: + using Ptr = std::shared_ptr; + + virtual ~FrontMessageFactory() {} + + virtual FrontMessage::Ptr buildMessage() + { + auto message = std::make_shared(); + return message; + } +}; + +} // namespace front +} // namespace bcos diff --git a/bcos-front/bcos-front/FrontService.cpp b/bcos-front/bcos-front/FrontService.cpp new file mode 100644 index 0000000..9863068 --- /dev/null +++ b/bcos-front/bcos-front/FrontService.cpp @@ -0,0 +1,675 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontService.cpp + * @author: octopus + * @date 2021-04-19 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace front; +using namespace protocol; + +FrontService::FrontService() +{ + m_localProtocol = g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService); + FRONT_LOG(INFO) << LOG_DESC("FrontService") << LOG_KV("this", this) + << LOG_KV("minVersion", m_localProtocol->minVersion()) + << LOG_KV("maxVersion", m_localProtocol->maxVersion()); +} + +FrontService::~FrontService() +{ + stop(); + FRONT_LOG(INFO) << LOG_DESC("~FrontService") << LOG_KV("this", this); +} + +// check the startup parameters, exception will be thrown if the required +// parameters are not set properly +void FrontService::checkParams() +{ + if (m_groupID.empty()) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment(" FrontService groupID is uninitialized")); + } + + if (!m_nodeID) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment(" FrontService nodeID is uninitialized")); + } + + if (!m_gatewayInterface) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + " FrontService gatewayInterface is uninitialized")); + } + + if (!m_messageFactory) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment(" FrontService messageFactory is uninitialized")); + } + + if (!m_ioService) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment(" FrontService ioService is uninitialized")); + } +} + +void FrontService::start() +{ + if (m_run) + { + FRONT_LOG(INFO) << LOG_BADGE("start") << LOG_DESC("front service is running") + << LOG_KV("nodeID", m_nodeID->hex()) << LOG_KV("groupID", m_groupID); + return; + } + + checkParams(); + + m_run = true; + + // try to getNodeIDs from gateway + auto self = std::weak_ptr(shared_from_this()); + m_gatewayInterface->asyncGetGroupNodeInfo( + m_groupID, [self](Error::Ptr _error, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + if (_error) + { + FRONT_LOG(ERROR) << LOG_BADGE("start") << LOG_DESC("asyncGetGroupNodeInfo error") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + FRONT_LOG(INFO) << LOG_BADGE("start") << LOG_DESC("asyncGetGroupNodeInfo callback") + << LOG_KV("node size", + _groupNodeInfo ? _groupNodeInfo->nodeIDList().size() : 0); + auto frontService = self.lock(); + if (frontService) + { + frontService->onReceiveGroupNodeInfo( + frontService->groupID(), _groupNodeInfo, nullptr); + } + }); + + m_frontServiceThread = std::make_shared([=, this]() { + while (m_run) + { + try + { + boost::asio::io_service::work work(*m_ioService); + m_ioService->run(); + } + catch (std::exception& e) + { + FRONT_LOG(WARNING) + << LOG_DESC("IOService") << LOG_KV("error", boost::diagnostic_information(e)); + } + + if (m_run && m_ioService->stopped()) + { + m_ioService->restart(); + } + } + }); + + FRONT_LOG(INFO) << LOG_DESC("start") << LOG_KV("nodeID", m_nodeID->hex()) + << LOG_KV("groupID", m_groupID); + + FRONT_LOG(INFO) << LOG_DESC("register module") + << LOG_KV("count", m_moduleID2MessageDispatcher.size()); + for (const auto& module : m_moduleID2MessageDispatcher) + { + FRONT_LOG(INFO) << LOG_DESC("register module") << LOG_KV("moduleID", module.first); + } +} +void FrontService::stop() +{ + if (!m_run) + { + return; + } + + m_run = false; + + try + { + { + Guard guard(x_callback); + for (auto& callback : m_callback) + { + FRONT_LOG(INFO) << LOG_DESC("FrontService stopped, erase the callback") + << LOG_KV("uuid", callback.first); + // cancel the timer + if (callback.second->timeoutHandler) + { + callback.second->timeoutHandler->cancel(); + } + } + // clear the callback + m_callback.clear(); + } + + if (m_ioService) + { + m_ioService->stop(); + } + + if (m_threadPool) + { + m_threadPool->stop(); + } + + if (m_frontServiceThread && m_frontServiceThread->joinable()) + { + m_frontServiceThread->join(); + } + } + catch (const std::exception& e) + { + FRONT_LOG(ERROR) << LOG_DESC("FrontService stop") + << LOG_KV("error", boost::diagnostic_information(e)); + } + + FRONT_LOG(INFO) << LOG_DESC("FrontService stop") + << LOG_KV("nodeID", (m_nodeID ? m_nodeID->hex() : "")) + << LOG_KV("groupID", m_groupID); +} + +/** + * @brief: get nodeIDs from frontservice + * @param _onGetGroupNodeInfo: response callback + * @return void + */ +void FrontService::asyncGetGroupNodeInfo(GetGroupNodeInfoFunc _onGetGroupNodeInfo) +{ + bcos::gateway::GroupNodeInfo::Ptr groupNodeInfo; + { + Guard guard(x_groupNodeInfo); + groupNodeInfo = m_groupNodeInfo; + } + + if (_onGetGroupNodeInfo) + { + if (m_threadPool) + { + m_threadPool->enqueue([_onGetGroupNodeInfo, groupNodeInfo]() { + _onGetGroupNodeInfo(nullptr, groupNodeInfo); + }); + } + else + { + _onGetGroupNodeInfo(nullptr, groupNodeInfo); + } + } + + FRONT_LOG(INFO) << LOG_DESC("asyncGetGroupNodeInfo") + << LOG_KV("nodeIDs.size()", + (groupNodeInfo ? groupNodeInfo->nodeIDList().size() : 0)); +} + +/** + * @brief: send message + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _data: send message data + * @param _timeout: timeout, in milliseconds. + * @param _callbackFunc: callback + * @return void + */ +void FrontService::asyncSendMessageByNodeID(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, uint32_t _timeout, CallbackFunc _callbackFunc) +{ + try + { + static thread_local auto uuid_gen = + boost::uuids::basic_random_generator(); + std::string uuid = boost::uuids::to_string(uuid_gen()); + if (_callbackFunc) + { + auto callback = std::make_shared(); + callback->callbackFunc = _callbackFunc; + + if (_timeout > 0) + { + // create new timer to handle timeout + auto timeoutHandler = std::make_shared( + *m_ioService, boost::posix_time::milliseconds(_timeout)); + + callback->timeoutHandler = timeoutHandler; + auto frontServiceWeakPtr = std::weak_ptr(shared_from_this()); + // callback->startTime = utcSteadyTime(); + timeoutHandler->async_wait( + [frontServiceWeakPtr, _nodeID, uuid](const boost::system::error_code& e) { + auto frontService = frontServiceWeakPtr.lock(); + if (frontService) + { + frontService->onMessageTimeout(e, _nodeID, uuid); + } + }); + } + + addCallback(uuid, callback); + + FRONT_LOG(DEBUG) << LOG_DESC("asyncSendMessageByNodeID") << LOG_KV("groupID", m_groupID) + << LOG_KV("moduleID", _moduleID) << LOG_KV("uuid", uuid) + << LOG_KV("nodeID", _nodeID->hex()) + << LOG_KV("data.size()", _data.size()) << LOG_KV("timeout", _timeout); + } // if (_callback) + + auto self = weak_from_this(); + sendMessage(_moduleID, _nodeID, uuid, _data, false, + [self, _moduleID, _nodeID, uuid](Error::Ptr _error) { + auto front = self.lock(); + if (!front) + { + return; + } + if (_error && (_error->errorCode() != CommonError::SUCCESS)) + { + /* + FRONT_LOG(ERROR) << LOG_BADGE("sendMessage callback") << LOG_KV("uuid", uuid) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + */ + front->handleCallback(_error, bytesConstRef(), uuid, _moduleID, _nodeID); + } + }); + } + catch (std::exception& e) + { + FRONT_LOG(ERROR) << LOG_BADGE("asyncSendMessageByNodeID") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +/** + * @brief: send response + * @param _id: the request uuid + * @param _data: message + * @return void + */ +void FrontService::asyncSendResponse(const std::string& _id, int _moduleID, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) +{ + sendMessage(_moduleID, _nodeID, _id, _data, true, _receiveMsgCallback); +} + +/** + * @brief: send message to multiple nodes + * @param _moduleID: moduleID + * @param _nodeIDs: the receiver nodeIDs + * @param _data: send message data + * @return void + */ +void FrontService::asyncSendMessageByNodeIDs( + int _moduleID, const crypto::NodeIDs& _nodeIDs, bytesConstRef _data) +{ + for (const auto& _nodeID : _nodeIDs) + { + asyncSendMessageByNodeID(_moduleID, _nodeID, _data, 0, CallbackFunc()); + } +} + +/** + * @brief: send broadcast message + * @param _moduleID: moduleID + * @param _data: send message data + * @return void + */ +void FrontService::asyncSendBroadcastMessage(uint16_t _type, int _moduleID, bytesConstRef _data) +{ + auto message = messageFactory()->buildMessage(); + message->setModuleID(_moduleID); + message->setPayload(_data); + + auto buffer = std::make_shared(); + message->encode(*buffer); + + m_gatewayInterface->asyncSendBroadcastMessage( + _type, m_groupID, _moduleID, m_nodeID, bytesConstRef(buffer->data(), buffer->size())); +} + +/** + * @brief: receive nodeIDs from gateway + * @param _groupID: groupID + * @param _groupNodeInfo: nodeIDs pushed by gateway + * @param _receiveMsgCallback: response callback + * @return void + */ +void FrontService::onReceiveGroupNodeInfo(const std::string& _groupID, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, ReceiveMsgFunc _receiveMsgCallback) +{ + { + protocolNegotiate(_groupNodeInfo); + Guard guard(x_groupNodeInfo); + m_groupNodeInfo = _groupNodeInfo; + } + // To be considered: How to ensure orderly notifications in the pro/max mode + FRONT_LOG(INFO) << LOG_DESC("onReceiveGroupNodeInfo") << LOG_KV("groupID", _groupID) + << LOG_KV("nodeIDs.size()", + (_groupNodeInfo ? _groupNodeInfo->nodeIDList().size() : 0)); + + if (m_threadPool) + { + auto self = std::weak_ptr(shared_from_this()); + m_threadPool->enqueue([self, _groupID, _groupNodeInfo]() { + auto front = self.lock(); + if (!front) + { + return; + } + front->notifyGroupNodeInfo(_groupID, _groupNodeInfo); + }); + } + else + { + notifyGroupNodeInfo(_groupID, _groupNodeInfo); + } + + if (_receiveMsgCallback) + { + _receiveMsgCallback(nullptr); + } +} + +void FrontService::protocolNegotiate(bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) +{ + auto const& protocolList = _groupNodeInfo->nodeProtocolList(); + auto const& nodeIDList = _groupNodeInfo->nodeIDList(); + size_t i = 0; + for (auto const& protocol : protocolList) + { + auto mutableProtocol = std::const_pointer_cast(protocol); + // negotiate failed: can't happen unless the code has a bug + if (mutableProtocol->minVersion() > m_localProtocol->maxVersion() || + mutableProtocol->maxVersion() < m_localProtocol->minVersion()) + { + FRONT_LOG(ERROR) << LOG_DESC("protocolNegotiate failed") + << LOG_KV("nodeID", nodeIDList.at(i)) + << LOG_KV("groupID", _groupNodeInfo->groupID()) + << LOG_KV("minVersion", mutableProtocol->minVersion()) + << LOG_KV("maxVersion", mutableProtocol->maxVersion()) + << LOG_KV("supportedMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportedMaxVersion", m_localProtocol->maxVersion()); + mutableProtocol->setVersion(ProtocolVersion::V0); + i++; + continue; + } + // set the negotiated version + auto version = std::min(m_localProtocol->maxVersion(), mutableProtocol->maxVersion()); + mutableProtocol->setVersion((ProtocolVersion)version); + FRONT_LOG(INFO) << LOG_DESC("protocolNegotiate success") + << LOG_KV("nodeID", nodeIDList.at(i)) + << LOG_KV("groupID", _groupNodeInfo->groupID()) + << LOG_KV("minVersion", mutableProtocol->minVersion()) + << LOG_KV("maxVersion", mutableProtocol->maxVersion()) + << LOG_KV("supportedMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportedMaxVersion", m_localProtocol->maxVersion()) + << LOG_KV("version", version); + i++; + } +} + +void FrontService::notifyGroupNodeInfo( + const std::string& _groupID, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) +{ + Guard l(x_notifierLock); + for (const auto& entry : m_module2GroupNodeInfoNotifier) + { + auto moduleID = entry.first; + entry.second(_groupNodeInfo, [_groupID, moduleID](Error::Ptr _error) { + if (_error) + { + FRONT_LOG(ERROR) << LOG_DESC("onReceiveGroupNodeInfo dispather failed") + << LOG_KV("groupID", _groupID) << LOG_KV("moduleID", moduleID); + } + }); + } +} + +void FrontService::handleCallback(bcos::Error::Ptr _error, bytesConstRef _payLoad, + std::string const& _uuid, int _moduleID, bcos::crypto::NodeIDPtr _nodeID) +{ + // callback message + auto callback = getAndRemoveCallback(_uuid); + if (!callback) + { + return; + } + auto frontServiceWeakPtr = std::weak_ptr(shared_from_this()); + auto respFunc = [frontServiceWeakPtr, _moduleID, _nodeID, _uuid](bytesConstRef _data) { + auto frontService = frontServiceWeakPtr.lock(); + if (frontService) + { + frontService->sendMessage( + _moduleID, _nodeID, _uuid, _data, true, [_uuid](Error::Ptr _error) { + if (_error && (_error->errorCode() != CommonError::SUCCESS)) + { + FRONT_LOG(ERROR) + << LOG_BADGE("onReceiveMessage sendMessage callback") + << LOG_KV("uuid", _uuid) << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + } + }); + } + }; + // cancel the timer first + if (callback->timeoutHandler) + { + callback->timeoutHandler->cancel(); + } + + if (m_threadPool) + { + // construct shared_ptr from message->payload() first for + // thead safe + std::shared_ptr buffer = std::make_shared(_payLoad.begin(), _payLoad.end()); + m_threadPool->enqueue([_uuid, _error, callback, buffer, _nodeID, respFunc] { + callback->callbackFunc( + _error, _nodeID, bytesConstRef(buffer->data(), buffer->size()), _uuid, respFunc); + }); + } + else + { + callback->callbackFunc(_error, _nodeID, _payLoad, _uuid, respFunc); + } +} +/** + * @brief: receive message from gateway + * @param _groupID: groupID + * @param _nodeID: the node send the message + * @param _data: received message data + * @param _receiveMsgCallback: response callback + * @return void + */ +void FrontService::onReceiveMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) +{ + try + { + auto message = messageFactory()->buildMessage(); + auto ret = message->decode(_data); + if (MessageDecodeStatus::MESSAGE_COMPLETE != ret) + { + FRONT_LOG(ERROR) << LOG_DESC("onReceiveMessage") << LOG_DESC("illegal message") + << LOG_KV("length", _data.size()) << LOG_KV("nodeID", m_nodeID->hex()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment("illegal message")); + } + + int moduleID = message->moduleID(); + int ext = message->ext(); + std::string uuid = std::string(message->uuid()->begin(), message->uuid()->end()); + + FRONT_LOG(TRACE) << LOG_BADGE("onReceiveMessage") << LOG_KV("moduleID", moduleID) + << LOG_KV("uuid", uuid) << LOG_KV("ext", ext) + << LOG_KV("groupID", _groupID) << LOG_KV("nodeID", _nodeID->hex()) + << LOG_KV("length", _data.size()); + + if (message->isResponse()) + { + handleCallback(nullptr, message->payload(), uuid, moduleID, _nodeID); + } + else + { + auto it = m_moduleID2MessageDispatcher.find(moduleID); + if (it != m_moduleID2MessageDispatcher.end()) + { + if (m_threadPool) + { + auto callback = it->second; + // construct shared_ptr from message->payload() first for + // thead safe + std::shared_ptr buffer = std::make_shared( + message->payload().begin(), message->payload().end()); + m_threadPool->enqueue([uuid, callback, buffer, message, _nodeID] { + callback(_nodeID, uuid, bytesConstRef(buffer->data(), buffer->size())); + }); + } + else + { + it->second(_nodeID, uuid, message->payload()); + } + } + else + { + FRONT_LOG(WARNING) << LOG_DESC("unable find the register module message dispather") + << LOG_KV("moduleID", moduleID) << LOG_KV("uuid", uuid); + } + } + } + catch (const std::exception& e) + { + FRONT_LOG(ERROR) << "onReceiveMessage" << LOG_KV("error", boost::diagnostic_information(e)); + } + + if (_receiveMsgCallback) + { + if (m_threadPool) + { + m_threadPool->enqueue([_receiveMsgCallback]() { _receiveMsgCallback(nullptr); }); + } + else + { + _receiveMsgCallback(nullptr); + } + } +} + +/** + * @brief: receive broadcast message from gateway + * @param _groupID: groupID + * @param _nodeID: the node send the message + * @param _data: received message data + * @param _receiveMsgCallback: response callback + * @return void + */ +void FrontService::onReceiveBroadcastMessage(const std::string& _groupID, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) +{ + onReceiveMessage(_groupID, _nodeID, _data, _receiveMsgCallback); +} + +/** + * @brief: send message + * @param _moduleID: moduleID + * @param _nodeID: the node the message sent to + * @param _uuid: uuid identify this message + * @param _data: send data payload + * @param isResponse: if send response message + * @param _receiveMsgCallback: response callback + * @return void + */ +void FrontService::sendMessage(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + const std::string& _uuid, bytesConstRef _data, bool isResponse, + ReceiveMsgFunc _receiveMsgCallback) +{ + auto message = messageFactory()->buildMessage(); + message->setModuleID(_moduleID); + message->setUuid(std::make_shared(_uuid.begin(), _uuid.end())); + message->setPayload(_data); + if (isResponse) + { + message->setResponse(); + } + + auto buffer = std::make_shared(); + message->encode(*buffer.get()); + + // call gateway interface to send the message + m_gatewayInterface->asyncSendMessageByNodeID(m_groupID, _moduleID, m_nodeID, _nodeID, + bytesConstRef(buffer->data(), buffer->size()), [_receiveMsgCallback](Error::Ptr _error) { + if (_receiveMsgCallback) + { + _receiveMsgCallback(_error); + } + }); +} + +/** + * @brief: handle message timeout + * @param _error: boost error code + * @param _uuid: message uuid + * @return void + */ +void FrontService::onMessageTimeout(const boost::system::error_code& _error, + bcos::crypto::NodeIDPtr _nodeID, const std::string& _uuid) +{ + if (_error) + { + return; + } + + try + { + Callback::Ptr callback = getAndRemoveCallback(_uuid); + if (callback) + { + auto errorPtr = std::make_shared(CommonError::TIMEOUT, "timeout"); + if (m_threadPool) + { + m_threadPool->enqueue([_uuid, _nodeID, callback, errorPtr]() { + callback->callbackFunc(errorPtr, _nodeID, bytesConstRef(), _uuid, + std::function()); + }); + } + else + { + callback->callbackFunc(errorPtr, _nodeID, bytesConstRef(), _uuid, + std::function()); + } + } + + FRONT_LOG(WARNING) << LOG_BADGE("onMessageTimeout") << LOG_KV("uuid", _uuid); + } + catch (std::exception& e) + { + FRONT_LOG(ERROR) << "onMessageTimeout" << LOG_KV("uuid", _uuid) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} diff --git a/bcos-front/bcos-front/FrontService.h b/bcos-front/bcos-front/FrontService.h new file mode 100644 index 0000000..ea27cc2 --- /dev/null +++ b/bcos-front/bcos-front/FrontService.h @@ -0,0 +1,306 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontService.h + * @author: octopus + * @date 2021-04-19 + */ + +#pragma once +#include "FrontMessage.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace front +{ +class FrontService : public FrontServiceInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + + FrontService(); + FrontService(const FrontService&) = delete; + FrontService(FrontService&&) = delete; + virtual ~FrontService(); + + FrontService& operator=(const FrontService&) = delete; + FrontService& operator=(FrontService&&) = delete; + +public: + void start() override; + void stop() override; + + // check the startup parameters, if the required parameters are not set + // properly, exception will be thrown + void checkParams(); + +public: + /** + * @brief: get nodeIDs from frontservice + * @param _onGetGroupNodeInfoFunc: response callback + * @return void + */ + void asyncGetGroupNodeInfo(GetGroupNodeInfoFunc _onGetGroupNodeInfoFunc) override; + /** + * @brief: send message + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _data: send message data + * @param _timeout: timeout, in milliseconds. + * @param _callbackFunc: callback + * @return void + */ + void asyncSendMessageByNodeID(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, uint32_t _timeout, CallbackFunc _callbackFunc) override; + + /** + * @brief: send response + * @param _id: the request id + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _data: message + * @return void + */ + void asyncSendResponse(const std::string& _id, int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) override; + + /** + * @brief: send message to multiple nodes + * @param _moduleID: moduleID + * @param _nodeIDs: the receiver nodeIDs + * @param _data: send message data + * @return void + */ + void asyncSendMessageByNodeIDs( + int _moduleID, const crypto::NodeIDs& _nodeIDs, bytesConstRef _data) override; + + /** + * @brief: send broadcast message + * @param _moduleID: moduleID + * @param _data: send message data + * @return void + */ + void asyncSendBroadcastMessage(uint16_t _type, int _moduleID, bytesConstRef _data) override; + + /** + * @brief: receive nodeIDs from gateway + * @param _groupID: groupID + * @param _nodeIDs: nodeIDs pushed by gateway + * @param _receiveMsgCallback: response callback + * @return void + */ + void onReceiveGroupNodeInfo(const std::string& _groupID, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, + ReceiveMsgFunc _receiveMsgCallback) override; + + /** + * @brief: receive message from gateway + * @param _groupID: groupID + * @param _nodeID: the node send the message + * @param _data: received message data + * @param _receiveMsgCallback: response callback + * @return void + */ + void onReceiveMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) override; + + /** + * @brief: receive broadcast message from gateway + * @param _groupID: groupID + * @param _nodeID: the node send the message + * @param _data: received message data + * @param _receiveMsgCallback: response callback + * @return void + */ + void onReceiveBroadcastMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, ReceiveMsgFunc _receiveMsgCallback) override; + + /** + * @brief: send message + * @param _moduleID: moduleID + * @param _nodeID: the node the message sent to + * @param _uuid: uuid identify this message + * @param _data: send data payload + * @param isResponse: if send response message + * @param _receiveMsgCallback: response callback + * @return void + */ + void sendMessage(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, const std::string& _uuid, + bytesConstRef _data, bool isResponse, ReceiveMsgFunc _receiveMsgCallback); + + /** + * @brief: handle message timeout + * @param _error: boost error code + * @param _uuid: message uuid + * @return void + */ + void onMessageTimeout(const boost::system::error_code& _error, bcos::crypto::NodeIDPtr _nodeID, + const std::string& _uuid); + +public: + FrontMessageFactory::Ptr messageFactory() const { return m_messageFactory; } + + void setMessageFactory(FrontMessageFactory::Ptr _messageFactory) + { + m_messageFactory = std::move(_messageFactory); + } + + bcos::crypto::NodeIDPtr nodeID() const { return m_nodeID; } + void setNodeID(bcos::crypto::NodeIDPtr _nodeID) { m_nodeID = _nodeID; } + std::string groupID() const { return m_groupID; } + void setGroupID(const std::string& _groupID) { m_groupID = _groupID; } + + std::shared_ptr gatewayInterface() { return m_gatewayInterface; } + + void setGatewayInterface(std::shared_ptr _gatewayInterface) + { + m_gatewayInterface = _gatewayInterface; + } + + std::shared_ptr ioService() const { return m_ioService; } + void setIoService(std::shared_ptr _ioService) + { + m_ioService = _ioService; + } + + bcos::ThreadPool::Ptr threadPool() const { return m_threadPool; } + void setThreadPool(bcos::ThreadPool::Ptr _threadPool) { m_threadPool = _threadPool; } + + // register message _dispatcher for module + void registerModuleMessageDispatcher(int _moduleID, + std::function + _dispatcher) + { + m_moduleID2MessageDispatcher[_moduleID] = _dispatcher; + } + + // only for ut + std::unordered_map> + moduleID2MessageDispatcher() const + { + return m_moduleID2MessageDispatcher; + } + + // only for ut + std::unordered_map> + module2GroupNodeInfoNotifier() const + { + return m_module2GroupNodeInfoNotifier; + } + // register nodeIDs _dispatcher for module + void registerGroupNodeInfoNotification(int _moduleID, + std::function + _dispatcher) + { + m_module2GroupNodeInfoNotifier[_moduleID] = _dispatcher; + } + +public: + struct Callback : public std::enable_shared_from_this + { + using Ptr = std::shared_ptr; + uint64_t startTime = utcSteadyTime(); + CallbackFunc callbackFunc; + std::shared_ptr timeoutHandler; + }; + // lock m_callback + mutable bcos::Mutex x_callback; + // uuid to callback + std::unordered_map m_callback; + + // only for ut + std::unordered_map callback() const { return m_callback; } + + Callback::Ptr getAndRemoveCallback(const std::string& _uuid) + { + Callback::Ptr callback = nullptr; + + { + Guard guard(x_callback); + auto it = m_callback.find(_uuid); + if (it != m_callback.end()) + { + callback = it->second; + m_callback.erase(it); + } + } + + return callback; + } + + void addCallback(const std::string& _uuid, Callback::Ptr _callback) + { + Guard guard(x_callback); + m_callback[_uuid] = _callback; + } + +protected: + virtual void handleCallback(bcos::Error::Ptr _error, bytesConstRef _payLoad, + std::string const& _uuid, int _moduleID, bcos::crypto::NodeIDPtr _nodeID); + void notifyGroupNodeInfo( + const std::string& _groupID, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo); + + virtual void protocolNegotiate(bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo); + +private: + // thread pool + bcos::ThreadPool::Ptr m_threadPool; + // timer + std::shared_ptr m_ioService; + /// gateway interface + std::shared_ptr m_gatewayInterface; + + FrontMessageFactory::Ptr m_messageFactory; + + std::unordered_map> + m_moduleID2MessageDispatcher; + + std::unordered_map> + m_module2GroupNodeInfoNotifier; + + // service is running or not + bool m_run = false; + // + std::shared_ptr m_frontServiceThread; + // NodeID + bcos::crypto::NodeIDPtr m_nodeID; + // GroupID + std::string m_groupID; + // lock notifyNodeIDs + mutable bcos::Mutex x_notifierLock; + + // groupNodeInfo pushed by the gateway + bcos::gateway::GroupNodeInfo::Ptr m_groupNodeInfo = nullptr; + // lock m_nodeID + mutable bcos::Mutex x_groupNodeInfo; + + // the local protocolInfo + // Note: frontService is responsible for version negotiation of blockchain nodes + bcos::protocol::ProtocolInfo::ConstPtr m_localProtocol; +}; +} // namespace front +} // namespace bcos \ No newline at end of file diff --git a/bcos-front/bcos-front/FrontServiceFactory.cpp b/bcos-front/bcos-front/FrontServiceFactory.cpp new file mode 100644 index 0000000..b24578e --- /dev/null +++ b/bcos-front/bcos-front/FrontServiceFactory.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontServiceFactory.cpp + * @author: octopus + * @date 2021-05-20 + */ + +#include +#include +#include +#include + +using namespace bcos; +using namespace front; + +FrontService::Ptr FrontServiceFactory::buildFrontService( + const std::string& _groupID, const bcos::crypto::NodeIDPtr _nodeID) +{ + if (!m_gatewayInterface) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "FrontServiceFactory::init gateway is uninitialized")); + } + + /* + if (!m_threadPool) { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "FrontServiceFactory::init threadPool is uninitialized")); + } + */ + + FRONT_LOG(INFO) << LOG_DESC("FrontServiceFactory::buildFrontService") + << LOG_KV("groupID", _groupID) << LOG_KV("nodeID", _nodeID->hex()); + + auto factory = std::make_shared(); + auto ioService = std::make_shared(); + auto frontService = std::make_shared(); + + frontService->setMessageFactory(factory); + frontService->setGroupID(_groupID); + frontService->setNodeID(_nodeID); + frontService->setIoService(ioService); + frontService->setGatewayInterface(m_gatewayInterface); + frontService->setThreadPool(m_threadPool); + + return frontService; +} \ No newline at end of file diff --git a/bcos-front/bcos-front/FrontServiceFactory.h b/bcos-front/bcos-front/FrontServiceFactory.h new file mode 100644 index 0000000..71d6b1e --- /dev/null +++ b/bcos-front/bcos-front/FrontServiceFactory.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontServiceFactory.h + * @author: octopus + * @date 2021-05-20 + */ + +#pragma once + +#include +#include +#include + +namespace bcos +{ +namespace front +{ +class FrontServiceFactory +{ +public: + using Ptr = std::shared_ptr; + +public: + FrontService::Ptr buildFrontService( + const std::string& _groupID, const bcos::crypto::NodeIDPtr _nodeID); + +public: + void setGatewayInterface(bcos::gateway::GatewayInterface::Ptr _gatewayInterface) + { + m_gatewayInterface = _gatewayInterface; + } + + std::shared_ptr threadPool() { return m_threadPool; } + void setThreadPool(std::shared_ptr _threadPool) + { + m_threadPool = _threadPool; + } + +private: + // gatewayInterface + bcos::gateway::GatewayInterface::Ptr m_gatewayInterface; + // threadpool + std::shared_ptr m_threadPool; +}; + +} // namespace front +} // namespace bcos \ No newline at end of file diff --git a/bcos-front/test/CMakeLists.txt b/bcos-front/test/CMakeLists.txt new file mode 100644 index 0000000..e7b9f8c --- /dev/null +++ b/bcos-front/test/CMakeLists.txt @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-front +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-front) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE .) +find_package(Boost REQUIRED unit_test_framework) +target_link_libraries(${TEST_BINARY_NAME} PUBLIC ${FRONT_TARGET} ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) +add_test(NAME test-front WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-front/test/unittests/FakeGateway.cpp b/bcos-front/test/unittests/FakeGateway.cpp new file mode 100644 index 0000000..68155e4 --- /dev/null +++ b/bcos-front/test/unittests/FakeGateway.cpp @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Gateway fake implementation + * @file FakeGateway.cpp + * @author: octopus + * @date 2021-04-27 + */ + +#include "FakeGateway.h" +#include + +using namespace bcos; +using namespace bcos::front; +using namespace bcos::front::test; +using namespace bcos::gateway; +/** + * @brief: send message to a single node + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _nodeID: the receiver nodeID + * @param _payload: message content + * @param _options: option parameters + * @param _callback: callback + * @return void + */ +void FakeGateway::asyncSendMessageByNodeID(const std::string& _groupID, int, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, bytesConstRef _payload, + bcos::gateway::ErrorRespFunc _errorRespFunc) +{ + m_frontService->onReceiveMessage(_groupID, _dstNodeID, _payload, _errorRespFunc); + + FRONT_LOG(DEBUG) << "[FakeGateway] asyncSendMessageByNodeID" << LOG_KV("groupID", _groupID) + << LOG_KV("nodeID", _srcNodeID->hex()) << LOG_KV("nodeID", _dstNodeID->hex()); +} + +/** + * @brief: send message to multiple nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _nodeIDs: the receiver nodeIDs + * @param _payload: message content + * @return void + */ +void FakeGateway::asyncSendMessageByNodeIDs(const std::string& _groupID, int, + bcos::crypto::NodeIDPtr _srcNodeID, const bcos::crypto::NodeIDs& _dstNodeIDs, + bytesConstRef _payload) +{ + if (!_dstNodeIDs.empty()) + { + m_frontService->onReceiveMessage( + _groupID, _srcNodeID, _payload, bcos::gateway::ErrorRespFunc()); + } + + FRONT_LOG(DEBUG) << "[FakeGateway] asyncSendMessageByNodeIDs" << LOG_KV("groupID", _groupID); +} + +/** + * @brief: send message to all nodes + * @param _groupID: groupID + * @param _payload: message content + * @return void + */ +void FakeGateway::asyncSendBroadcastMessage(uint16_t, const std::string& _groupID, int, + bcos::crypto::NodeIDPtr _srcNodeID, bytesConstRef _payload) +{ + m_frontService->onReceiveBroadcastMessage(_groupID, _srcNodeID, _payload, ErrorRespFunc()); + FRONT_LOG(DEBUG) << "asyncSendBroadcastMessage" << LOG_KV("groupID", _groupID); +} diff --git a/bcos-front/test/unittests/FakeGateway.h b/bcos-front/test/unittests/FakeGateway.h new file mode 100644 index 0000000..5d0be64 --- /dev/null +++ b/bcos-front/test/unittests/FakeGateway.h @@ -0,0 +1,128 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Gateway fake implementation + * @file FakeGateway.h + * @author: octopus + * @date 2021-04-27 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace front +{ +namespace test +{ +class FakeGateway : public gateway::GatewayInterface, + public std::enable_shared_from_this +{ +public: + virtual ~FakeGateway() {} + +public: + std::shared_ptr m_frontService; + void setFrontService(std::shared_ptr _frontService) + { + m_frontService = _frontService; + } + +public: + /** + * @brief: start/stop service + */ + void start() override {} + void stop() override {} + void asyncGetPeers(std::function) override + {} + /** + * @brief: get nodeIDs from gateway + * @param _groupID: + * @param _onGetGroupNodeInfo: get nodeIDs callback + * @return void + */ + void asyncGetGroupNodeInfo( + const std::string& _groupID, GetGroupNodeInfoFunc _onGetGroupNodeInfo) override + { + boost::ignore_unused(_groupID, _onGetGroupNodeInfo); + } + + /** + * @brief: send message to a single node + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message content + * @return void + */ + void asyncSendMessageByNodeID(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, + bytesConstRef _payload, bcos::gateway::ErrorRespFunc _errorRespFunc) override; + + /** + * @brief: send message to multiple nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _nodeIDs: the receiver nodeIDs + * @param _payload: message content + * @return void + */ + void asyncSendMessageByNodeIDs(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, const bcos::crypto::NodeIDs& _dstNodeIDs, + bytesConstRef _payload) override; + + /** + * @brief: send message to all nodes + * @param _nodeType: nodeType + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _payload: message content + * @return void + */ + void asyncSendBroadcastMessage(uint16_t _nodeType, const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bytesConstRef _payload) override; + + void asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr, std::function) override + {} + + void asyncSendMessageByTopic(const std::string&, bcos::bytesConstRef, + std::function) override + {} + void asyncSendBroadcastMessageByTopic(const std::string&, bcos::bytesConstRef) override {} + + void asyncSubscribeTopic( + std::string const&, std::string const&, std::function) override + {} + void asyncRemoveTopic(std::string const&, std::vector const&, + std::function) override + {} +}; + +} // namespace test +} // namespace front +} // namespace bcos diff --git a/bcos-front/test/unittests/FrontMessageTest.cpp b/bcos-front/test/unittests/FrontMessageTest.cpp new file mode 100644 index 0000000..ec18e12 --- /dev/null +++ b/bcos-front/test/unittests/FrontMessageTest.cpp @@ -0,0 +1,230 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for front related messages + * @file FrontMessageTest.h + * @author: octopus + * @date 2021-04-26 + */ + +#include +#include +#include + +using namespace bcos; +using namespace bcos::test; +using namespace bcos::front; + +BOOST_FIXTURE_TEST_SUITE(FrontMessageTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(testFrontMessage_0) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + BOOST_CHECK_EQUAL(message->moduleID(), 0); + BOOST_CHECK_EQUAL(message->ext(), 0); + BOOST_CHECK_EQUAL(message->uuid()->size(), 0); + BOOST_CHECK_EQUAL(message->payload().size(), 0); + + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); + BOOST_CHECK(buffer->size() == FrontMessage::HEADER_MIN_LENGTH); +} + +BOOST_AUTO_TEST_CASE(testFrontMessage_1) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + int moduleID = 0; + int ext = 0; + std::string uuid = ""; + std::string payload = ""; + + message->setModuleID(moduleID); + message->setExt(ext); + message->setUuid(std::make_shared(uuid.begin(), uuid.end())); + auto payloadPtr = std::make_shared(payload.begin(), payload.end()); + message->setPayload(bytesConstRef(payloadPtr->data(), payloadPtr->size())); + + // encode + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); + BOOST_CHECK(!buffer->empty()); + + // decode + auto decodeMessage = factory->buildMessage(); + + auto bcr = bytesConstRef(buffer->data(), buffer->size()); + + auto r1 = decodeMessage->decode(bcr); + BOOST_CHECK_EQUAL(r1, MessageDecodeStatus::MESSAGE_COMPLETE); + + BOOST_CHECK_EQUAL(moduleID, decodeMessage->moduleID()); + BOOST_CHECK_EQUAL(ext, decodeMessage->ext()); + BOOST_CHECK_EQUAL( + uuid, std::string(decodeMessage->uuid()->begin(), decodeMessage->uuid()->end())); + BOOST_CHECK_EQUAL( + payload, std::string(decodeMessage->payload().begin(), decodeMessage->payload().end())); +} + +BOOST_AUTO_TEST_CASE(testFrontMessage_2) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + int moduleID = 1; + int ext = 2; + std::string uuid = "1234567890"; + std::string payload = "payload"; + + message->setModuleID(moduleID); + message->setExt(ext); + message->setUuid(std::make_shared(uuid.begin(), uuid.end())); + auto payloadPtr = std::make_shared(payload.begin(), payload.end()); + message->setPayload(bytesConstRef(payloadPtr->data(), payloadPtr->size())); + + // encode + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); + BOOST_CHECK(!buffer->empty()); + + // decode + auto decodeMessage = factory->buildMessage(); + + auto bcr = bytesConstRef(buffer->data(), buffer->size()); + + auto r1 = decodeMessage->decode(bcr); + BOOST_CHECK_EQUAL(r1, MessageDecodeStatus::MESSAGE_COMPLETE); + + BOOST_CHECK_EQUAL(moduleID, decodeMessage->moduleID()); + BOOST_CHECK_EQUAL(ext, decodeMessage->ext()); + BOOST_CHECK_EQUAL( + uuid, std::string(decodeMessage->uuid()->begin(), decodeMessage->uuid()->end())); + BOOST_CHECK_EQUAL( + payload, std::string(decodeMessage->payload().begin(), decodeMessage->payload().end())); +} + +BOOST_AUTO_TEST_CASE(testFrontMessage_3) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + int moduleID = 1; + int ext = 2; + std::string uuid = "1234567890"; + std::string payload = "payload"; + + message->setModuleID(moduleID); + message->setExt(ext); + message->setUuid(std::make_shared(uuid.begin(), uuid.end())); + auto payloadPtr = std::make_shared(payload.begin(), payload.end()); + message->setPayload(bytesConstRef(payloadPtr->data(), payloadPtr->size())); + + // encode + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); + BOOST_CHECK(!buffer->empty()); + + // decode + auto decodeMessage = factory->buildMessage(); + + auto bcr = bytesConstRef(buffer->data(), buffer->size()); + + auto r1 = decodeMessage->decode(bcr); + BOOST_CHECK_EQUAL(r1, MessageDecodeStatus::MESSAGE_COMPLETE); + + BOOST_CHECK_EQUAL(moduleID, decodeMessage->moduleID()); + BOOST_CHECK_EQUAL(ext, decodeMessage->ext()); + BOOST_CHECK_EQUAL( + uuid, std::string(decodeMessage->uuid()->begin(), decodeMessage->uuid()->end())); + BOOST_CHECK_EQUAL( + payload, std::string(decodeMessage->payload().begin(), decodeMessage->payload().end())); +} + +BOOST_AUTO_TEST_CASE(testFrontMessage_4) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + int moduleID = 1; + int ext = 2; + std::string uuid = + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "567890123456789012345678901234567890123456789012345678901234567890123456" + "78901234567890123456789012345678901234567890123456789012345678901234567" + "8"; + std::string payload = "payload"; + + message->setModuleID(moduleID); + message->setExt(ext); + message->setUuid(std::make_shared(uuid.begin(), uuid.end())); + auto payloadPtr = std::make_shared(payload.begin(), payload.end()); + message->setPayload(bytesConstRef(payloadPtr->data(), payloadPtr->size())); + + // encode + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(!r); + + buffer->clear(); + auto decodeMessage = factory->buildMessage(); + auto r1 = decodeMessage->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK_EQUAL(r1, MessageDecodeStatus::MESSAGE_ERROR); +} + +BOOST_AUTO_TEST_CASE(testFrontMessage_5) +{ + auto factory = std::make_shared(); + auto message = factory->buildMessage(); + int moduleID = 111; + std::string uuid; + std::string payload = std::string(1000, 'x'); + + message->setModuleID(moduleID); + message->setUuid(std::make_shared(uuid.begin(), uuid.end())); + auto payloadPtr = std::make_shared(payload.begin(), payload.end()); + message->setPayload(bytesConstRef(payloadPtr->data(), payloadPtr->size())); + + // encode + std::shared_ptr buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); + + auto decodeMessage = factory->buildMessage(); + auto r1 = decodeMessage->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK_EQUAL(r1, MessageDecodeStatus::MESSAGE_COMPLETE); + BOOST_CHECK_EQUAL( + payload, std::string(decodeMessage->payload().begin(), decodeMessage->payload().end())); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-front/test/unittests/FrontServiceTest.cpp b/bcos-front/test/unittests/FrontServiceTest.cpp new file mode 100644 index 0000000..72e5d57 --- /dev/null +++ b/bcos-front/test/unittests/FrontServiceTest.cpp @@ -0,0 +1,323 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for front service + * @file FrontServiceTest.h + * @author: octopus + * @date 2021-04-26 + */ + +#define BOOST_TEST_MAIN + +#include "FakeGateway.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::test; +using namespace bcos::front; +using namespace bcos::front::test; + +const static std::string g_groupID = "front.service.group"; +const static std::string g_srcNodeID = "front.src.nodeid"; +const static std::string g_dstNodeID_0 = "front.dst.nodeid.0"; +const static std::string g_dstNodeID_1 = "front.dst.nodeid.1"; + +bcos::crypto::NodeIDPtr createKey(const std::string& _strNodeID) +{ + auto keyFactory = std::make_shared(); + auto nodeID = + keyFactory->createKey(bytesConstRef((bcos::byte*)_strNodeID.data(), _strNodeID.size())); + return nodeID; +} + +std::shared_ptr buildFrontService() +{ + auto gateway = std::make_shared(); + auto srcNodeID = createKey(g_srcNodeID); + + auto threadPool = std::make_shared("frontServiceTest", 16); + auto frontServiceFactory = std::make_shared(); + frontServiceFactory->setThreadPool(threadPool); + frontServiceFactory->setGatewayInterface(gateway); + auto frontService = frontServiceFactory->buildFrontService(g_groupID, srcNodeID); + frontService->start(); + + gateway->setFrontService(frontService); + + return frontService; +} + +BOOST_FIXTURE_TEST_SUITE(FrontServiceTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(testFrontService_buildFrontService) +{ + auto frontService = buildFrontService(); + BOOST_CHECK_EQUAL(frontService->groupID(), g_groupID); + // BOOST_CHECK_EQUAL(frontService->nodeID()->hex(), g_srcNodeID); + BOOST_CHECK(frontService->gatewayInterface()); + BOOST_CHECK(frontService->messageFactory()); + BOOST_CHECK(frontService->ioService()); + BOOST_CHECK(frontService->callback().empty()); + BOOST_CHECK(frontService->moduleID2MessageDispatcher().empty()); +} + +BOOST_AUTO_TEST_CASE(testFrontService_asyncSendMessageByNodeID_withoutCallback) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + + auto dstNodeID = createKey(g_dstNodeID_0); + std::string data(1000, 'x'); + + std::promise p; + auto f = p.get_future(); + auto moduleCallback = [&p, dstNodeID, data](bcos::crypto::NodeIDPtr _nodeID, + const std::string& _id, bytesConstRef _data) { + BOOST_CHECK(!_id.empty()); + BOOST_CHECK_EQUAL(dstNodeID->hex(), _nodeID->hex()); + BOOST_CHECK_EQUAL(std::string(_data.begin(), _data.end()), data); + p.set_value(true); + }; + + int moduleID = 111; + frontService->registerModuleMessageDispatcher(moduleID, moduleCallback); + BOOST_CHECK(frontService->moduleID2MessageDispatcher().find(moduleID) != + frontService->moduleID2MessageDispatcher().end()); + + frontService->asyncSendMessageByNodeID(moduleID, dstNodeID, + bytesConstRef((unsigned char*)data.data(), data.size()), 0, CallbackFunc()); + BOOST_CHECK(frontService->callback().empty()); + f.get(); +} + +BOOST_AUTO_TEST_CASE(testFrontService_onRecieveNodeIDsAnd) +{ + auto frontService = buildFrontService(); + int moduleID = 1000; + std::promise p; + auto f = p.get_future(); + std::vector expectedNodeIDList; + expectedNodeIDList.emplace_back(g_dstNodeID_0); + expectedNodeIDList.emplace_back(g_dstNodeID_0); + auto orgExpectedNodeIDList = expectedNodeIDList; + + std::vector nodeIDs0; + frontService->registerGroupNodeInfoNotification( + moduleID, [&p, &nodeIDs0](bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, + ReceiveMsgFunc _receiveMsgCallback) { + nodeIDs0 = _groupNodeInfo->nodeIDList(); + p.set_value(true); + if (_receiveMsgCallback) + { + _receiveMsgCallback(nullptr); + } + }); + + BOOST_CHECK(frontService->module2GroupNodeInfoNotifier().find(moduleID) != + frontService->module2GroupNodeInfoNotifier().end()); + BOOST_CHECK(frontService->module2GroupNodeInfoNotifier().find(moduleID + 1) == + frontService->module2GroupNodeInfoNotifier().end()); + + auto groupNodeInfo = std::make_shared(); + groupNodeInfo->setNodeIDList(std::move(expectedNodeIDList)); + frontService->onReceiveGroupNodeInfo( + "1", groupNodeInfo, [](Error::Ptr _error) { BOOST_CHECK(_error == nullptr); }); + + f.get(); + BOOST_CHECK(nodeIDs0.size() == orgExpectedNodeIDList.size()); +} + +BOOST_AUTO_TEST_CASE(testFrontService_asyncSendMessageByNodeID_callback) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + + auto dstNodeID = createKey(g_dstNodeID_0); + std::string data(100000, '#'); + int moduleID = 12345; + + { + std::promise p; + auto f = p.get_future(); + auto callback = [dstNodeID, data, &p](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, const std::string& _uuid, + std::function _respFunc) { + (void)_uuid; + (void)_respFunc; + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(dstNodeID->hex(), _nodeID->hex()); + BOOST_CHECK_EQUAL(std::string(_data.begin(), _data.end()), data); + p.set_value(true); + }; + frontService->asyncSendMessageByNodeID(moduleID, dstNodeID, + bytesConstRef((unsigned char*)data.data(), data.size()), 0, callback); + BOOST_CHECK(!frontService->callback().empty()); + auto uuid = frontService->callback().begin()->first; + frontService->asyncSendResponse(uuid, moduleID, dstNodeID, + bytesConstRef((unsigned char*)data.data(), data.size()), + [](Error::Ptr _error) { (void)_error; }); + f.get(); + BOOST_CHECK(frontService->callback().empty()); + } +} + +BOOST_AUTO_TEST_CASE(testFrontService_asyncSendMessageByNodeIDcmak_timeout) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + auto message = frontService->messageFactory()->buildMessage(); + + int moduleID = 222; + auto dstNodeID = createKey(g_dstNodeID_0); + std::string data(100000, '#'); + + BOOST_CHECK(frontService->callback().empty()); + + { + std::promise barrier; + Error::Ptr _error; + auto callback = [&](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + const std::string& _uuid, + std::function _respFunc) { + (void)_nodeID; + (void)_data; + (void)_respFunc; + (void)_uuid; + BOOST_CHECK_EQUAL(_error->errorCode(), bcos::protocol::CommonError::TIMEOUT); + barrier.set_value(); + }; + + frontService->asyncSendMessageByNodeID(moduleID, dstNodeID, + bytesConstRef((unsigned char*)data.data(), data.size()), 2000, callback); + + BOOST_CHECK(frontService->callback().size() == 1); + std::future barrier_future = barrier.get_future(); + barrier_future.wait(); + BOOST_CHECK(frontService->callback().empty()); + } +} + +BOOST_AUTO_TEST_CASE(testFrontService_asyncSendBroadcastMessage) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + + auto dstNodeID = createKey(g_srcNodeID); + std::string data(1000, 'x'); + + std::promise p; + auto f = p.get_future(); + auto moduleCallback = [&p, dstNodeID, data](bcos::crypto::NodeIDPtr _nodeID, + const std::string& _id, bytesConstRef _data) { + (void)_id; + BOOST_CHECK_EQUAL(dstNodeID->hex(), _nodeID->hex()); + BOOST_CHECK_EQUAL(std::string(_data.begin(), _data.end()), data); + p.set_value(true); + }; + + int moduleID = 111; + frontService->registerModuleMessageDispatcher(moduleID, moduleCallback); + BOOST_CHECK(frontService->moduleID2MessageDispatcher().find(moduleID) != + frontService->moduleID2MessageDispatcher().end()); + + frontService->asyncSendBroadcastMessage(bcos::protocol::NodeType::CONSENSUS_NODE, moduleID, + bytesConstRef((unsigned char*)data.data(), data.size())); + BOOST_CHECK(frontService->callback().empty()); + f.get(); +} + +BOOST_AUTO_TEST_CASE(testFrontService_asyncSendMessageByNodeIDs) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + + auto dstNodeID = createKey(g_dstNodeID_0); + std::string data(1000, 'x'); + + std::promise p; + auto f = p.get_future(); + auto moduleCallback = [&p, dstNodeID, data](bcos::crypto::NodeIDPtr _nodeID, + const std::string& _id, bytesConstRef _data) { + (void)_id; + BOOST_CHECK_EQUAL(dstNodeID->hex(), _nodeID->hex()); + BOOST_CHECK_EQUAL(std::string(_data.begin(), _data.end()), data); + p.set_value(true); + }; + + int moduleID = 111; + frontService->registerModuleMessageDispatcher(moduleID, moduleCallback); + BOOST_CHECK(frontService->moduleID2MessageDispatcher().find(moduleID) != + frontService->moduleID2MessageDispatcher().end()); + + frontService->asyncSendMessageByNodeIDs(moduleID, bcos::crypto::NodeIDs{dstNodeID}, + bytesConstRef((unsigned char*)data.data(), data.size())); + + BOOST_CHECK(frontService->callback().empty()); + f.get(); +} + +BOOST_AUTO_TEST_CASE(testFrontService_loopTimeout) +{ + auto frontService = buildFrontService(); + auto gateway = std::static_pointer_cast(frontService->gatewayInterface()); + auto message = frontService->messageFactory()->buildMessage(); + + int moduleID = 12345; + auto dstNodeID = createKey(g_dstNodeID_0); + std::string data(1000, '#'); + + BOOST_CHECK(frontService->callback().empty()); + + std::vector> barriers; + barriers.resize(1000); + + for (auto& barrier : barriers) + { + Error::Ptr _error; + auto callback = [&](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + const std::string& _uuid, + std::function _respFunc) { + (void)_nodeID; + (void)_data; + (void)_uuid; + (void)_respFunc; + BOOST_CHECK_EQUAL(_error->errorCode(), bcos::protocol::CommonError::TIMEOUT); + barrier.set_value(); + }; + + frontService->asyncSendMessageByNodeID(moduleID, dstNodeID, + bytesConstRef((unsigned char*)data.data(), data.size()), 2000, callback); + } + + BOOST_CHECK(frontService->callback().size() == barriers.size()); + + for (auto& barrier : barriers) + { + std::future barrier_future = barrier.get_future(); + barrier_future.wait(); + } + + BOOST_CHECK(frontService->callback().empty()); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-gateway/CMakeLists.txt b/bcos-gateway/CMakeLists.txt new file mode 100644 index 0000000..266134f --- /dev/null +++ b/bcos-gateway/CMakeLists.txt @@ -0,0 +1,53 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-gateway +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-gateway +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +project(bcos-gateway VERSION ${VERSION}) + +find_package(jsoncpp CONFIG REQUIRED) +find_package(Boost REQUIRED COMPONENTS filesystem) +find_package(redis++ CONFIG REQUIRED) + +file(GLOB_RECURSE SRCS bcos-gateway/*.cpp) + +find_package(tarscpp REQUIRED) + +add_library(${GATEWAY_TARGET} ${SRCS}) +target_link_libraries(${GATEWAY_TARGET} PUBLIC ${PROTOCOL_TARGET} jsoncpp_static redis++::redis++_static Boost::filesystem bcos-boostssl ${TARS_PROTOCOL_TARGET} tarscpp::tarsservant tarscpp::tarsutil) + +if (APPLE) +# target_compile_options(${GATEWAY_TARGET} PRIVATE -faligned-allocation) +endif() + +# ut +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for doxygen +# include(BuildDocs) + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("gateway-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_SOURCE_DIR}/test/mock**' '${CMAKE_SOURCE_DIR}/test/main**'") +endif () diff --git a/bcos-gateway/bcos-gateway/Common.h b/bcos-gateway/bcos-gateway/Common.h new file mode 100644 index 0000000..44bac5c --- /dev/null +++ b/bcos-gateway/bcos-gateway/Common.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-05-04 + */ +#pragma once +#include "libnetwork/Common.h" + +#define GATEWAY_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][Gateway]" +#define GATEWAY_CONFIG_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][Config]" +#define GATEWAY_FACTORY_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][Factory]" +#define NODE_MANAGER_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][GatewayNodeManager]" +#define ROUTER_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][Router]" +#define RATELIMIT_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][RateLimiter]" +#define RATELIMIT_MGR_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][RateLimiterManager]" + +namespace bcos +{ +namespace gateway +{ +enum GroupType : uint16_t +{ + // group with at-least one consensus node + GROUP_WITH_CONSENSUS_NODE = 0x0, + // group without consensus node + GROUP_WITHOUT_CONSENSUS_NODE = 0x1, + // group without consensus node and observer node + OUTSIDE_GROUP = 0x2, +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/Gateway.cpp b/bcos-gateway/bcos-gateway/Gateway.cpp new file mode 100644 index 0000000..e70ce62 --- /dev/null +++ b/bcos-gateway/bcos-gateway/Gateway.cpp @@ -0,0 +1,551 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Gateway.cpp + * @author: octopus + * @date 2021-04-19 + */ + +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::gateway; +using namespace bcos::group; +using namespace bcos::amop; +using namespace bcos::crypto; + +void Gateway::start() +{ + if (m_gatewayRateLimiter) + { + m_gatewayRateLimiter->start(); + } + if (m_p2pInterface) + { + m_p2pInterface->start(); + } + if (m_amop) + { + m_amop->start(); + } + if (m_gatewayNodeManager) + { + m_gatewayNodeManager->start(); + } + + GATEWAY_LOG(INFO) << LOG_DESC("start end."); + + return; +} + +void Gateway::stop() +{ + // erase the registered handler + if (m_p2pInterface) + { + m_p2pInterface->eraseHandlerByMsgType(GatewayMessageType::PeerToPeerMessage); + m_p2pInterface->eraseHandlerByMsgType(GatewayMessageType::BroadcastMessage); + m_p2pInterface->stop(); + } + if (m_amop) + { + m_amop->stop(); + } + if (m_gatewayNodeManager) + { + m_gatewayNodeManager->stop(); + } + if (m_gatewayRateLimiter) + { + m_gatewayRateLimiter->stop(); + } + GATEWAY_LOG(INFO) << LOG_DESC("stop end."); + return; +} + +void Gateway::asyncGetPeers( + std::function _onGetPeers) +{ + if (!_onGetPeers) + { + return; + } + auto sessionInfos = m_p2pInterface->sessionInfos(); + auto peersNodeIDList = m_gatewayNodeManager->peersRouterTable()->getAllPeers(); + GatewayInfosPtr peerGatewayInfos = std::make_shared(); + // append the peers sessionInfos + for (auto const& info : sessionInfos) + { + auto gatewayInfo = std::make_shared(info); + auto nodeIDList = m_gatewayNodeManager->peersNodeIDList(info.p2pID); + gatewayInfo->setNodeIDInfo(std::move(nodeIDList)); + peerGatewayInfos->emplace_back(gatewayInfo); + peersNodeIDList.erase(info.p2pID); + } + // append peers that are not directly connected to nodeSelf + for (auto const& peer : peersNodeIDList) + { + P2PInfo p2pInfo; + p2pInfo.p2pID = peer; + auto gatewayInfo = std::make_shared(p2pInfo); + auto nodeIDList = m_gatewayNodeManager->peersNodeIDList(peer); + gatewayInfo->setNodeIDInfo(std::move(nodeIDList)); + peerGatewayInfos->emplace_back(gatewayInfo); + } + auto localP2pInfo = m_p2pInterface->localP2pInfo(); + auto localGatewayInfo = std::make_shared(localP2pInfo); + auto localNodeInfo = m_gatewayNodeManager->localRouterTable()->nodeListInfo(); + localGatewayInfo->setNodeIDInfo(std::move(localNodeInfo)); + _onGetPeers(nullptr, localGatewayInfo, peerGatewayInfos); +} + +/** + * @brief: get nodeIDs from gateway + * @param _groupID: + * @param _onGetGroupNodeInfo: get nodeIDs callback + * @return void + */ +void Gateway::asyncGetGroupNodeInfo( + const std::string& _groupID, GetGroupNodeInfoFunc _onGetGroupNodeInfo) +{ + auto groupNodeInfo = m_gatewayNodeManager->getGroupNodeInfoList(_groupID); + _onGetGroupNodeInfo(nullptr, groupNodeInfo); +} + + +/** + * @brief: send message + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message payload + * @param _errorRespFunc: error func + * @return void + */ +void Gateway::asyncSendMessageByNodeID(const std::string& _groupID, int _moduleID, + NodeIDPtr _srcNodeID, NodeIDPtr _dstNodeID, bytesConstRef _payload, + ErrorRespFunc _errorRespFunc) +{ + auto p2pIDs = + m_gatewayNodeManager->peersRouterTable()->queryP2pIDs(_groupID, _dstNodeID->hex()); + if (p2pIDs.empty()) + { + if (m_gatewayNodeManager->localRouterTable()->sendMessage( + _groupID, _srcNodeID, _dstNodeID, _payload, _errorRespFunc)) + { + return; + } + GATEWAY_LOG(ERROR) << LOG_DESC("could not find a gateway to send this message") + << LOG_KV("groupID", _groupID) << LOG_KV("srcNodeID", _srcNodeID->hex()) + << LOG_KV("dstNodeID", _dstNodeID->hex()); + + auto errorPtr = std::make_shared(CommonError::NotFoundFrontServiceSendMsg, + "could not find a gateway to " + "send this message, groupID:" + + _groupID + " ,dstNodeID:" + _dstNodeID->hex()); + if (_errorRespFunc) + { + _errorRespFunc(errorPtr); + } + return; + } + + class Retry : public std::enable_shared_from_this + { + public: + // random choose one p2pID to send message + P2pID chooseP2pID() + { + auto p2pId = P2pID(); + if (!m_p2pIDs.empty()) + { + p2pId = *m_p2pIDs.begin(); + m_p2pIDs.erase(m_p2pIDs.begin()); + } + + return p2pId; + } + + // send the message with retry + void trySendMessage() + { + if (m_p2pIDs.empty()) + { + GATEWAY_LOG(ERROR) + << LOG_DESC("[Gateway::Retry]") << LOG_DESC("unable to send the message") + << LOG_KV("srcNodeID", m_srcNodeID->hex()) + << LOG_KV("dstNodeID", m_dstNodeID->hex()) + << LOG_KV("seq", std::to_string(m_p2pMessage->seq())); + + if (m_respFunc) + { + auto errorPtr = std::make_shared( + CommonError::GatewaySendMsgFailed, "unable to send the message"); + m_respFunc(errorPtr); + } + return; + } + + auto seq = m_p2pMessage->seq(); + auto p2pID = chooseP2pID(); + auto self = shared_from_this(); + auto startT = utcTime(); + auto callback = [seq, self, startT, p2pID](NetworkException e, + std::shared_ptr session, + std::shared_ptr message) { + std::ignore = session; + if (e.errorCode() != P2PExceptionType::Success) + { + // bandwidth overflow , do'not try again + if (e.errorCode() == P2PExceptionType::BandwidthOverFlow) + { + if (self->m_respFunc) + { + auto errorPtr = std::make_shared( + CommonError::NetworkBandwidthOverFlow, e.what()); + self->m_respFunc(errorPtr); + } + + return; + } + + GATEWAY_LOG(ERROR) + << LOG_BADGE("Retry") << LOG_DESC("network callback") << LOG_KV("seq", seq) + << LOG_KV("dstP2P", p2pID) << LOG_KV("errorCode", e.errorCode()) + << LOG_KV("errorMessage", e.what()) + << LOG_KV("timeCost", (utcTime() - startT)); + // try again + self->trySendMessage(); + return; + } + + try + { + auto payload = message->payload(); + int respCode = + boost::lexical_cast(std::string(payload->begin(), payload->end())); + // the peer gateway not response not ok ,it means the gateway not dispatch the + // message successfully,find another gateway and try again + if (respCode != CommonError::SUCCESS) + { + GATEWAY_LOG(WARNING) + << LOG_BADGE("Retry") << LOG_KV("p2pid", p2pID) + << LOG_KV("errorCode", respCode) << LOG_KV("errorMessage", e.what()); + // try again + self->trySendMessage(); + return; + } + GATEWAY_LOG(TRACE) + << LOG_BADGE("Retry: asyncSendMessageByNodeID success") + << LOG_KV("dstP2P", p2pID) << LOG_KV("srcNodeID", self->m_srcNodeID->hex()) + << LOG_KV("dstNodeID", self->m_dstNodeID->hex()); + // send message successfully + if (self->m_respFunc) + { + self->m_respFunc(nullptr); + } + return; + } + catch (const std::exception& e) + { + GATEWAY_LOG(ERROR) + << LOG_BADGE("trySendMessage and receive response exception") + << LOG_KV("payload", + std::string(message->payload()->begin(), message->payload()->end())) + << LOG_KV("packetType", message->packetType()) + << LOG_KV("src", message->options() ? + toHex(*(message->options()->srcNodeID())) : + "unknown") + << LOG_KV("size", message->length()) << LOG_KV("error", e.what()); + + self->trySendMessage(); + } + }; + m_p2pInterface->asyncSendMessageByNodeID(p2pID, m_p2pMessage, callback, Options(10000)); + } + + public: + std::vector m_p2pIDs; + NodeIDPtr m_srcNodeID; + NodeIDPtr m_dstNodeID; + std::shared_ptr m_p2pMessage; + std::shared_ptr m_p2pInterface; + ErrorRespFunc m_respFunc; + }; + + auto retry = std::make_shared(); + auto message = + std::static_pointer_cast(m_p2pInterface->messageFactory()->buildMessage()); + + auto msgExtAttr = std::make_shared(); + msgExtAttr->setGroupID(_groupID); + msgExtAttr->setModuleID(_moduleID); + + message->setPacketType(GatewayMessageType::PeerToPeerMessage); + message->setSeq(m_p2pInterface->messageFactory()->newSeq()); + message->options()->setGroupID(_groupID); + message->options()->setSrcNodeID(_srcNodeID->encode()); + message->options()->dstNodeIDs().push_back(_dstNodeID->encode()); + message->setPayload(std::make_shared(_payload.begin(), _payload.end())); + message->setExtAttributes(msgExtAttr); + + retry->m_p2pMessage = message; + retry->m_p2pIDs.insert(retry->m_p2pIDs.begin(), p2pIDs.begin(), p2pIDs.end()); + retry->m_respFunc = _errorRespFunc; + retry->m_srcNodeID = _srcNodeID; + retry->m_dstNodeID = _dstNodeID; + retry->m_p2pInterface = m_p2pInterface; + + retry->trySendMessage(); +} + +/** + * @brief: send message to multiple nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _nodeIDs: the receiver nodeIDs + * @param _payload: message content + * @return void + */ +void Gateway::asyncSendMessageByNodeIDs(const std::string& _groupID, int _moduleID, + NodeIDPtr _srcNodeID, const NodeIDs& _dstNodeIDs, bytesConstRef _payload) +{ + for (auto dstNodeID : _dstNodeIDs) + { + asyncSendMessageByNodeID(_groupID, _moduleID, _srcNodeID, dstNodeID, _payload, + [_groupID, _srcNodeID, dstNodeID](Error::Ptr _error) { + if (!_error) + { + return; + } + GATEWAY_LOG(TRACE) + << LOG_DESC("asyncSendMessageByNodeIDs callback") << LOG_KV("groupID", _groupID) + << LOG_KV("srcNodeID", _srcNodeID->hex()) + << LOG_KV("dstNodeID", dstNodeID->hex()) << LOG_KV("code", _error->errorCode()); + }); + } +} + +/** + * @brief: send message to all nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _payload: message content + * @return void + */ +void Gateway::asyncSendBroadcastMessage(uint16_t _type, const std::string& _groupID, int _moduleID, + NodeIDPtr _srcNodeID, bytesConstRef _payload) +{ + // broadcast message to the local nodes + auto ret = m_gatewayNodeManager->localRouterTable()->asyncBroadcastMsg( + _type, _groupID, _moduleID, _srcNodeID, _payload); + auto message = + std::static_pointer_cast(m_p2pInterface->messageFactory()->buildMessage()); + message->setPacketType(GatewayMessageType::BroadcastMessage); + message->setExt(_type); + message->setSeq(m_p2pInterface->messageFactory()->newSeq()); + message->options()->setGroupID(_groupID); + message->options()->setSrcNodeID(_srcNodeID->encode()); + message->setPayload(std::make_shared(_payload.begin(), _payload.end())); + + auto msgExtAttr = std::make_shared(); + msgExtAttr->setGroupID(_groupID); + msgExtAttr->setModuleID(_moduleID); + message->setExtAttributes(msgExtAttr); + + // broadcast message to the peers + m_gatewayNodeManager->peersRouterTable()->asyncBroadcastMsg( + _type, _groupID, _moduleID, message); +} + +/** + * @brief: receive p2p message from p2p network module + * @param _groupID: groupID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message content + * @param _callback: callback + * @return void + */ +void Gateway::onReceiveP2PMessage(const std::string& _groupID, NodeIDPtr _srcNodeID, + NodeIDPtr _dstNodeID, bytesConstRef _payload, ErrorRespFunc _errorRespFunc) +{ + auto frontService = + m_gatewayNodeManager->localRouterTable()->getFrontService(_groupID, _dstNodeID); + if (!frontService) + { + GATEWAY_LOG(ERROR) << LOG_DESC( + "onReceiveP2PMessage unable to find front " + "service to dispatch this message") + << LOG_KV("groupID", _groupID) << LOG_KV("srcNodeID", _srcNodeID->hex()) + << LOG_KV("dstNodeID", _dstNodeID->hex()); + + auto errorPtr = std::make_shared(CommonError::NotFoundFrontServiceDispatchMsg, + "unable to find front service dispatch message to " + "groupID:" + + _groupID + " ,nodeID:" + _dstNodeID->hex()); + + if (_errorRespFunc) + { + _errorRespFunc(errorPtr); + } + return; + } + + frontService->frontService()->onReceiveMessage(_groupID, _srcNodeID, _payload, + [_groupID, _srcNodeID, _dstNodeID, _errorRespFunc](Error::Ptr _error) { + if (_errorRespFunc) + { + _errorRespFunc(_error); + } + GATEWAY_LOG(TRACE) << LOG_DESC("onReceiveP2PMessage callback") + << LOG_KV("groupID", _groupID) + << LOG_KV("srcNodeID", _srcNodeID->hex()) + << LOG_KV("dstNodeID", _dstNodeID->hex()) + << LOG_KV("code", (_error ? _error->errorCode() : 0)) + << LOG_KV("msg", (_error ? _error->errorMessage() : "")); + }); +} + +bool Gateway::checkGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + // check the serviceName + auto nodeList = _groupInfo->nodeInfos(); + for (auto const& node : nodeList) + { + auto const& expectedGatewayService = + node.second->serviceName(bcos::protocol::ServiceType::GATEWAY); + if (expectedGatewayService != m_gatewayServiceName) + { + GATEWAY_LOG(INFO) << LOG_DESC( + "unfollowed groupInfo for inconsistent gateway service name") + << LOG_KV("expected", expectedGatewayService) + << LOG_KV("selfName", m_gatewayServiceName); + return false; + } + } + return true; +} + +void Gateway::asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr _groupInfo, std::function _callback) +{ + if (!checkGroupInfo(_groupInfo)) + { + if (_callback) + { + _callback(nullptr); + } + return; + } + m_gatewayNodeManager->updateFrontServiceInfo(_groupInfo); + if (_callback) + { + _callback(nullptr); + } +} + +void Gateway::onReceiveP2PMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg) +{ + if (_e.errorCode()) + { + GATEWAY_LOG(WARNING) << LOG_DESC("onReceiveP2PMessage error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + + auto options = _msg->options(); + auto msgPayload = _msg->payload(); + auto payload = bytesConstRef(msgPayload->data(), msgPayload->size()); + // groupID + auto groupID = options->groupID(); + // moduleID + auto moduleID = options->moduleID(); + + m_gatewayRateLimiter->checkInComing(groupID, moduleID, _msg->length()); + + auto srcNodeID = options->srcNodeID(); + const auto& dstNodeIDs = options->dstNodeIDs(); + auto srcNodeIDPtr = m_gatewayNodeManager->keyFactory()->createKey(*srcNodeID.get()); + auto dstNodeIDPtr = m_gatewayNodeManager->keyFactory()->createKey(*dstNodeIDs[0].get()); + auto gateway = std::weak_ptr(shared_from_this()); + onReceiveP2PMessage(groupID, srcNodeIDPtr, dstNodeIDPtr, payload, + [groupID, srcNodeIDPtr, dstNodeIDPtr, _session, _msg, gateway](Error::Ptr _error) { + auto gatewayPtr = gateway.lock(); + if (!gatewayPtr) + { + return; + } + + auto errorCode = + std::to_string(_error ? _error->errorCode() : (int)protocol::CommonError::SUCCESS); + if (_error) + { + GATEWAY_LOG(DEBUG) + << "onReceiveP2PMessage callback" << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()) << LOG_KV("group", groupID) + << LOG_KV("src", srcNodeIDPtr->shortHex()) + << LOG_KV("dst", dstNodeIDPtr->shortHex()); + } + gatewayPtr->m_p2pInterface->sendRespMessageBySession( + bytesConstRef((byte*)errorCode.data(), errorCode.size()), _msg, _session); + }); +} + +void Gateway::onReceiveBroadcastMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg) +{ + if (_e.errorCode() != 0) + { + GATEWAY_LOG(WARNING) << LOG_DESC("onReceiveBroadcastMessage error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + + auto options = _msg->options(); + auto msgPayload = _msg->payload(); + + // groupID + auto groupID = options->groupID(); + // moduleID + uint16_t moduleID = options->moduleID(); + + m_gatewayRateLimiter->checkInComing(groupID, moduleID, _msg->length()); + + auto srcNodeIDPtr = + m_gatewayNodeManager->keyFactory()->createKey(*(_msg->options()->srcNodeID())); + + auto type = _msg->ext(); + GATEWAY_LOG(TRACE) << LOG_DESC("onReceiveBroadcastMessage") << LOG_KV("groupID", groupID) + << LOG_KV("src", _msg->srcP2PNodeID()) << LOG_KV("dst", _msg->dstP2PNodeID()) + << LOG_KV("type", type); + m_gatewayNodeManager->localRouterTable()->asyncBroadcastMsg(type, groupID, moduleID, + srcNodeIDPtr, bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); +} diff --git a/bcos-gateway/bcos-gateway/Gateway.h b/bcos-gateway/bcos-gateway/Gateway.h new file mode 100644 index 0000000..2c6969b --- /dev/null +++ b/bcos-gateway/bcos-gateway/Gateway.h @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Gateway.h + * @author: octopus + * @date 2021-04-19 + */ + +#pragma once + +#include "bcos-gateway/libratelimit/GatewayRateLimiter.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class Gateway : public GatewayInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + Gateway(std::string const& _chainID, P2PInterface::Ptr _p2pInterface, + GatewayNodeManager::Ptr _gatewayNodeManager, bcos::amop::AMOPImpl::Ptr _amop, + ratelimiter::GatewayRateLimiter::Ptr _gatewayRateLimiter, + std::string _gatewayServiceName = "localGateway") + : m_gatewayServiceName(_gatewayServiceName), + m_chainID(_chainID), + m_p2pInterface(_p2pInterface), + m_gatewayNodeManager(_gatewayNodeManager), + m_amop(_amop), + m_gatewayRateLimiter(_gatewayRateLimiter) + { + m_p2pInterface->registerHandlerByMsgType(GatewayMessageType::PeerToPeerMessage, + boost::bind(&Gateway::onReceiveP2PMessage, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + + m_p2pInterface->registerHandlerByMsgType(GatewayMessageType::BroadcastMessage, + boost::bind(&Gateway::onReceiveBroadcastMessage, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + } + ~Gateway() override { stop(); } + + void start() override; + void stop() override; + + /** + * @brief: get connected peers + * @return void + */ + void asyncGetPeers( + std::function _onGetPeers) override; + /** + * @brief: get nodeIDs from gateway + * @param _groupID: + * @param _onGetGroupNodeInfo: get nodeIDs callback + * @return void + */ + void asyncGetGroupNodeInfo( + const std::string& _groupID, GetGroupNodeInfoFunc _onGetGroupNodeInfo) override; + /** + * @brief: send message + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message payload + * @param _errorRespFunc: error func + * @return void + */ + void asyncSendMessageByNodeID(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, + bytesConstRef _payload, ErrorRespFunc _errorRespFunc) override; + + /** + * @brief: send message to multiple nodes + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _nodeIDs: the receiver nodeIDs + * @param _payload: message payload + * @return void + */ + void asyncSendMessageByNodeIDs(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, const bcos::crypto::NodeIDs& _nodeIDs, + bytesConstRef _payload) override; + + /** + * @brief: send broadcast message + * @param _groupID: groupID + * @param _moduleID: moduleID + * @param _srcNodeID: the sender nodeID + * @param _payload: message payload + * @return void + */ + void asyncSendBroadcastMessage(uint16_t _type, const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bytesConstRef _payload) override; + + /** + * @brief: receive p2p message + * @param _groupID: groupID + * @param _srcNodeID: the sender nodeID + * @param _dstNodeID: the receiver nodeID + * @param _payload: message content + * @param _errorRespFunc: error func + * @return void + */ + virtual void onReceiveP2PMessage(const std::string& _groupID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, + bytesConstRef _payload, ErrorRespFunc _errorRespFunc = ErrorRespFunc()); + + + P2PInterface::Ptr p2pInterface() const { return m_p2pInterface; } + GatewayNodeManager::Ptr gatewayNodeManager() { return m_gatewayNodeManager; } + /** + * @brief receive the latest group information notification from the GroupManagerInterface + * + * @param _groupInfo the latest group information + */ + void asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr, std::function) override; + + /// for AMOP + void asyncSendMessageByTopic(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc) override + { + m_amop->asyncSendMessageByTopic(_topic, _data, _respFunc); + } + void asyncSendBroadcastMessageByTopic( + const std::string& _topic, bcos::bytesConstRef _data) override + { + m_amop->asyncSendBroadcastMessageByTopic(_topic, _data); + } + + void asyncSubscribeTopic(std::string const& _clientID, std::string const& _topicInfo, + std::function _callback) override + { + m_amop->asyncSubscribeTopic(_clientID, _topicInfo, _callback); + } + + void asyncRemoveTopic(std::string const& _clientID, std::vector const& _topicList, + std::function _callback) override + { + m_amop->asyncRemoveTopic(_clientID, _topicList, _callback); + } + + bcos::amop::AMOPImpl::Ptr amop() { return m_amop; } + + bool registerNode(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::protocol::NodeType _nodeType, bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo) override + { + return m_gatewayNodeManager->registerNode( + _groupID, _nodeID, _nodeType, _frontService, _protocolInfo); + } + + virtual bool unregisterNode(const std::string& _groupID, std::string const& _nodeID) + { + return m_gatewayNodeManager->unregisterNode(_groupID, _nodeID); + } + +protected: + // for UT + Gateway() {} + virtual void onReceiveP2PMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg); + + /** + * @brief: receive group broadcast message + * @param _groupID: groupID + * @param _srcNodeID: the sender nodeID + * @param _payload: message content + * @return void + */ + virtual void onReceiveBroadcastMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg); + + + bool checkGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo); + +private: + std::string m_gatewayServiceName; + std::string m_chainID; + // p2p service interface + P2PInterface::Ptr m_p2pInterface; + // GatewayNodeManager + GatewayNodeManager::Ptr m_gatewayNodeManager; + bcos::amop::AMOPImpl::Ptr m_amop; + + // For rate limit + ratelimiter::GatewayRateLimiter::Ptr m_gatewayRateLimiter; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/GatewayConfig.cpp b/bcos-gateway/bcos-gateway/GatewayConfig.cpp new file mode 100644 index 0000000..bb6960f --- /dev/null +++ b/bcos-gateway/bcos-gateway/GatewayConfig.cpp @@ -0,0 +1,764 @@ +/** @file GatewayConfig.cpp + * @author octopus + * @date 2021-05-19 + */ + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace security; +using namespace gateway; + +bool GatewayConfig::isValidPort(int port) +{ + if (port <= 1024 || port > 65535) + return false; + return true; +} + +// check if the ip valid +bool GatewayConfig::isValidIP(const std::string& _ip) +{ + boost::system::error_code ec; + boost::asio::ip::address ip_address = boost::asio::ip::make_address(_ip, ec); + std::ignore = ip_address; + return ec.value() == 0; +} + +// MB to bit +int64_t GatewayConfig::doubleMBToBit(double _d) +{ + _d *= (1024 * 1024 / 8); + + return (int64_t)_d; +} + +void GatewayConfig::hostAndPort2Endpoint(const std::string& _host, NodeIPEndpoint& _endpoint) +{ + std::string ip; + uint16_t port; + + std::vector s; + boost::split(s, _host, boost::is_any_of("]"), boost::token_compress_on); + if (s.size() == 2) + { // ipv6 + ip = s[0].data() + 1; + port = boost::lexical_cast(s[1].data() + 1); + } + else if (s.size() == 1) + { // ipv4 + std::vector v; + boost::split(v, _host, boost::is_any_of(":"), boost::token_compress_on); + if (v.size() < 2) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "GatewayConfig: invalid host , host=" + _host)); + } + ip = v[0]; + port = boost::lexical_cast(v[1]); + } + else + { + GATEWAY_CONFIG_LOG(ERROR) << LOG_DESC("not valid host value") << LOG_KV("host", _host); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "GatewayConfig: the host is invalid, host=" + _host)); + } + + if (!isValidPort(port)) + { + GATEWAY_CONFIG_LOG(ERROR) << LOG_DESC("the port is not valid") << LOG_KV("port", port); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "GatewayConfig: the port is invalid, port=" + std::to_string(port))); + } + + boost::system::error_code ec; + boost::asio::ip::address ip_address = boost::asio::ip::make_address(ip, ec); + if (ec.value() != 0) + { + GATEWAY_CONFIG_LOG(ERROR) << LOG_DESC("the host is invalid, make_address error") + << LOG_KV("host", _host); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "GatewayConfig: the host is invalid make_address error, host=" + _host)); + } + + _endpoint = NodeIPEndpoint{ip_address, port}; +} + +void GatewayConfig::parseConnectedJson( + const std::string& _json, std::set& _nodeIPEndpointSet) +{ + /* + {"nodes":["127.0.0.1:30355","127.0.0.1:30356"}]} + */ + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(_json, root)) + { + GATEWAY_CONFIG_LOG(ERROR) + << "unable to parse connected nodes json" << LOG_KV("json:", _json); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment("GatewayConfig: unable to parse p2p " + "connected nodes json")); + } + + std::set nodeIPEndpointSet; + Json::Value jNodes = root["nodes"]; + if (jNodes.isArray()) + { + unsigned int jNodesSize = jNodes.size(); + for (unsigned int i = 0; i < jNodesSize; i++) + { + std::string host = jNodes[i].asString(); + + NodeIPEndpoint endpoint; + hostAndPort2Endpoint(host, endpoint); + _nodeIPEndpointSet.insert(endpoint); + + GATEWAY_CONFIG_LOG(INFO) + << LOG_DESC("add one connected node") << LOG_KV("host", host); + } + } + } + catch (const std::exception& e) + { + GATEWAY_CONFIG_LOG(ERROR) << LOG_KV( + "parseConnectedJson error: ", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(e); + } +} + +/** + * @brief: loads configuration items from the config.ini + * @param _configPath: config.ini path + * @return void + */ +void GatewayConfig::initConfig(std::string const& _configPath, bool _uuidRequired) +{ + try + { + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(_configPath, pt); + initP2PConfig(pt, _uuidRequired); + initPeerBlacklistConfig(pt); + initPeerWhitelistConfig(pt); + initRateLimitConfig(pt); + if (m_smSSL) + { + initSMCertConfig(pt); + } + else + { + initCertConfig(pt); + } + } + catch (const std::exception& e) + { + boost::filesystem::path full_path(boost::filesystem::current_path()); + + GATEWAY_CONFIG_LOG(ERROR) << LOG_KV("configPath", _configPath) + << LOG_KV("currentPath", full_path.string()) + << LOG_KV("initConfig error: ", boost::diagnostic_information(e)); + + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment("initConfig: currentPath:" + full_path.string() + + " ,error:" + boost::diagnostic_information(e))); + } + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("initConfig ok!") << LOG_KV("configPath", _configPath) + << LOG_KV("listenIP", m_listenIP) << LOG_KV("listenPort", m_listenPort) + << LOG_KV("smSSL", m_smSSL) + << LOG_KV("peers", m_connectedNodes.size()); +} + +/// loads p2p configuration items from the configuration file +void GatewayConfig::initP2PConfig(const boost::property_tree::ptree& _pt, bool _uuidRequired) +{ + /* + [p2p] + ; uuid + uuid = + ; ssl or sm ssl + sm_ssl=true + listen_ip=0.0.0.0 + listen_port=30300 + nodes_path=./ + nodes_file=nodes.json + */ + m_uuid = _pt.get("p2p.uuid", ""); + if (_uuidRequired && m_uuid.size() == 0) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "initP2PConfig: invalid uuid! Must be non-empty!")); + } + bool smSSL = _pt.get("p2p.sm_ssl", false); + std::string listenIP = _pt.get("p2p.listen_ip", "0.0.0.0"); + int listenPort = _pt.get("p2p.listen_port", 30300); + if (!isValidPort(listenPort)) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "initP2PConfig: invalid listen port, port=" + std::to_string(listenPort))); + } + + // not set the nodePath, load from the config + if (m_nodePath.size() == 0) + { + m_nodePath = _pt.get("p2p.nodes_path", "./"); + } + + m_nodeFileName = _pt.get("p2p.nodes_file", "nodes.json"); + + m_smSSL = smSSL; + m_listenIP = listenIP; + m_listenPort = (uint16_t)listenPort; + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("initP2PConfig ok!") << LOG_KV("listenIP", listenIP) + << LOG_KV("listenPort", listenPort) << LOG_KV("smSSL", smSSL) + << LOG_KV("nodePath", m_nodePath) + << LOG_KV("nodeFileName", m_nodeFileName); +} + +// load p2p connected peers +void GatewayConfig::loadP2pConnectedNodes() +{ + std::string nodeFilePath = m_nodePath + "/" + m_nodeFileName; + // load p2p connected nodes + std::set nodes; + auto jsonContent = readContentsToString(boost::filesystem::path(nodeFilePath)); + if (!jsonContent || jsonContent->empty()) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "initP2PConfig: unable to read nodes json file, path=" + nodeFilePath)); + } + + parseConnectedJson(*jsonContent.get(), nodes); + m_connectedNodes = nodes; + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("loadP2pConnectedNodes ok!") + << LOG_KV("nodePath", m_nodePath) + << LOG_KV("nodeFileName", m_nodeFileName) + << LOG_KV("nodes", nodes.size()); +} + +/// loads ca configuration items from the configuration file +void GatewayConfig::initCertConfig(const boost::property_tree::ptree& _pt) +{ + /* + [cert] + ; directory the certificates located in + ca_path=./ + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + node_key=ssl.key + ; the node certificate file + node_cert=ssl.crt + */ + if (m_certPath.size() == 0) + { + m_certPath = _pt.get("cert.ca_path", "./"); + } + std::string caCertFile = m_certPath + "/" + _pt.get("cert.ca_cert", "ca.crt"); + std::string nodeCertFile = m_certPath + "/" + _pt.get("cert.node_cert", "ssl.crt"); + std::string nodeKeyFile = m_certPath + "/" + _pt.get("cert.node_key", "ssl.key"); + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("initCertConfig") << LOG_KV("ca_path", m_certPath) + << LOG_KV("ca_cert", caCertFile) << LOG_KV("node_cert", nodeCertFile) + << LOG_KV("node_key", nodeKeyFile); + + checkFileExist(caCertFile); + checkFileExist(nodeCertFile); + checkFileExist(nodeKeyFile); + + CertConfig certConfig; + certConfig.caCert = caCertFile; + certConfig.nodeCert = nodeCertFile; + certConfig.nodeKey = nodeKeyFile; + + m_certConfig = certConfig; + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("initCertConfig") << LOG_KV("ca", certConfig.caCert) + << LOG_KV("node_cert", certConfig.nodeCert) + << LOG_KV("node_key", certConfig.nodeKey); +} + +// loads sm ca configuration items from the configuration file +void GatewayConfig::initSMCertConfig(const boost::property_tree::ptree& _pt) +{ + /* + [cert] + ; directory the certificates located in + ca_path=./ + ; the ca certificate file + sm_ca_cert=sm_ca.crt + ; the node private key file + sm_node_key=sm_ssl.key + ; the node certificate file + sm_node_cert=sm_ssl.crt + ; the node private key file + sm_ennode_key=sm_enssl.key + ; the node certificate file + sm_ennode_cert=sm_enssl.crt + */ + // not set the certPath, load from the configuration + if (m_certPath.size() == 0) + { + m_certPath = _pt.get("cert.ca_path", "./"); + } + std::string smCaCertFile = + m_certPath + "/" + _pt.get("cert.sm_ca_cert", "sm_ca.crt"); + std::string smNodeCertFile = + m_certPath + "/" + _pt.get("cert.sm_node_cert", "sm_ssl.crt"); + std::string smNodeKeyFile = + m_certPath + "/" + _pt.get("cert.sm_node_key", "sm_ssl.key"); + std::string smEnNodeCertFile = + m_certPath + "/" + _pt.get("cert.sm_ennode_cert", "sm_enssl.crt"); + std::string smEnNodeKeyFile = + m_certPath + "/" + _pt.get("cert.sm_ennode_key", "sm_enssl.key"); + + checkFileExist(smCaCertFile); + checkFileExist(smNodeCertFile); + checkFileExist(smNodeKeyFile); + checkFileExist(smEnNodeCertFile); + checkFileExist(smEnNodeKeyFile); + + SMCertConfig smCertConfig; + smCertConfig.caCert = smCaCertFile; + smCertConfig.nodeCert = smNodeCertFile; + smCertConfig.nodeKey = smNodeKeyFile; + smCertConfig.enNodeCert = smEnNodeCertFile; + smCertConfig.enNodeKey = smEnNodeKeyFile; + + m_smCertConfig = smCertConfig; + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("initSMCertConfig") << LOG_KV("ca_path", m_certPath) + << LOG_KV("sm_ca_cert", smCertConfig.caCert) + << LOG_KV("sm_node_cert", smCertConfig.nodeCert) + << LOG_KV("sm_node_key", smCertConfig.nodeKey) + << LOG_KV("sm_ennode_cert", smCertConfig.enNodeCert) + << LOG_KV("sm_ennode_key", smCertConfig.enNodeKey); +} + +// loads rate limit configuration items from the configuration file +void GatewayConfig::initRateLimitConfig(const boost::property_tree::ptree& _pt) +{ + /* + [flow_control] + ; the switch for distributed rate limit + ; enable_distributed_ratelimit=true + ; enable_distributed_ratelimit_cache=true + ; distributed_ratelimit_cache_percent=15 + ; + ; rate limiter stat reporter interval, unit: ms + ; stat_reporter_interval=60000 + + ; the module that does not limit bandwidth + ; list of all modules: raft,pbft,amop,block_sync,txs_sync,light_node,cons_txs_sync + ; + ; modules_without_bw_limit=raft,pbft + + ; restrict the outgoing bandwidth of the node + ; both integer and decimal is support, unit: Mb + ; + ; total_outgoing_bw_limit=10 + + ; restrict the outgoing bandwidth of the the connection + ; both integer and decimal is support, unit: Mb + ; + ; conn_outgoing_bw_limit=2 + ; + ; specify IP to limit bandwidth, format: conn_outgoing_bw_limit_x.x.x.x=n + ; conn_outgoing_bw_limit_192.108.0.1=3 + ; conn_outgoing_bw_limit_192.108.0.2=3 + ; conn_outgoing_bw_limit_192.108.0.3=3 + ; + ; default bandwidth limit for the group + ; group_outgoing_bw_limit=2 + ; + ; specify group to limit bandwidth, group_outgoing_bw_limit_groupName=n + ; group_outgoing_bw_limit_group0=2 + ; group_outgoing_bw_limit_group1=2 + ; group_outgoing_bw_limit_group2=2 + */ + + // enable_distributed_ratelimit=false + bool enableDistributedRatelimit = + _pt.get("flow_control.enable_distributed_ratelimit", false); + // enable_distributed_ratelimit=false + bool enableDistributedRateLimitCache = + _pt.get("flow_control.enable_distributed_ratelimit_cache", true); + // enable_distributed_ratelimit=false + int32_t distributedRateLimitCachePercent = + _pt.get("flow_control.distributed_ratelimit_cache_percent", 20); + // stat_reporter_interval=60000 + int32_t statInterval = _pt.get("flow_control.stat_reporter_interval", 60000); + + // modules_without_bw_limit=raft,pbft + std::string strModulesWithoutLimit = + _pt.get("flow_control.modules_without_bw_limit", "raft,pbft,cons_txs_sync"); + + std::set moduleIDs; + std::vector modules; + + if (!strModulesWithoutLimit.empty()) + { + boost::split( + modules, strModulesWithoutLimit, boost::is_any_of(","), boost::token_compress_on); + + for (auto module : modules) + { + boost::trim(module); + boost::algorithm::to_lower(module); + auto optModuleID = protocol::stringToModuleID(module); + if (!optModuleID.has_value()) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "unrecognized module: " + module + + " ,list of available modules: " + "raft,pbft,amop,block_sync,txs_sync,light_node")); + } + moduleIDs.insert(optModuleID.value()); + } + } + + int64_t totalOutgoingBwLimit = -1; + // total_outgoing_bw_limit + std::string value = _pt.get("flow_control.total_outgoing_bw_limit", ""); + if (value.empty()) + { + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the total_outgoing_bw_limit is not initialized"); + } + else + { + double bw = boost::lexical_cast(value); + totalOutgoingBwLimit = doubleMBToBit(bw); + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the total_outgoing_bw_limit has been initialized") + << LOG_KV("value", value) << LOG_KV("bw", bw) + << LOG_KV("totalOutgoingBwLimit", totalOutgoingBwLimit); + } + + + bool enableGroupRateLimit = false; + bool enableConRateLimit = false; + + int64_t connOutgoingBwLimit = -1; + // conn_outgoing_bw_limit + value = _pt.get("flow_control.conn_outgoing_bw_limit", ""); + if (value.empty()) + { + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the conn_outgoing_bw_limit is not initialized"); + } + else + { + enableConRateLimit = true; + auto bw = boost::lexical_cast(value); + connOutgoingBwLimit = doubleMBToBit(bw); + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the conn_outgoing_bw_limit has been initialized") + << LOG_KV("value", value) << LOG_KV("bw", bw) + << LOG_KV("connOutgoingBwLimit", connOutgoingBwLimit); + } + + int64_t groupOutgoingBwLimit = -1; + // group_outgoing_bw_limit + value = _pt.get("flow_control.group_outgoing_bw_limit", ""); + if (value.empty()) + { + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the group_outgoing_bw_limit is not initialized"); + } + else + { + enableGroupRateLimit = true; + auto bw = boost::lexical_cast(value); + groupOutgoingBwLimit = doubleMBToBit(bw); + + GATEWAY_CONFIG_LOG(INFO) << LOG_DESC("the group_outgoing_bw_limit has been initialized") + << LOG_KV("value", value) << LOG_KV("bw", bw) + << LOG_KV("groupOutgoingBwLimit", groupOutgoingBwLimit); + } + + // ip => bw && group => bw + if (_pt.get_child_optional("flow_control")) + { + for (auto const& it : _pt.get_child("flow_control")) + { + auto key = it.first; + auto value = it.second.data(); + + boost::trim(key); + boost::trim(value); + + if (boost::starts_with(key, "conn_outgoing_bw_limit_")) + { + enableConRateLimit = true; + // ip_outgoing_bw_x.x.x.x = + std::string ip = key.substr(strlen("conn_outgoing_bw_limit_")); + if (!isValidIP(ip)) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "flow_control.ip_outgoing_bw_x.x.x.x config, invalid ip format, ip: " + + ip)); + } + auto bw = boost::lexical_cast(value); + m_rateLimiterConfig.ip2BwLimit[ip] = doubleMBToBit(bw); + + GATEWAY_CONFIG_LOG(INFO) + << LOG_BADGE("initRateLimiterConfig") << LOG_DESC("add ip bandwidth limit") + << LOG_KV("ip", ip) << LOG_KV("bandwidth", bw); + } // group_outgoing_bw_group0 + else if (boost::starts_with(key, "group_outgoing_bw_limit_")) + { + enableGroupRateLimit = true; + // group_xxxx = + std::string group = key.substr(strlen("group_outgoing_bw_limit_")); + auto bw = boost::lexical_cast(value); + m_rateLimiterConfig.group2BwLimit[group] = doubleMBToBit(bw); + + GATEWAY_CONFIG_LOG(INFO) + << LOG_BADGE("initRateLimiterConfig") << LOG_DESC("add group bandwidth limit") + << LOG_KV("group", group) << LOG_KV("bandwidth", bw); + } + } + } + + m_rateLimiterConfig.statInterval = statInterval; + m_rateLimiterConfig.modulesWithoutLimit = moduleIDs; + m_rateLimiterConfig.totalOutgoingBwLimit = totalOutgoingBwLimit; + m_rateLimiterConfig.connOutgoingBwLimit = connOutgoingBwLimit; + m_rateLimiterConfig.groupOutgoingBwLimit = groupOutgoingBwLimit; + m_rateLimiterConfig.enableDistributedRatelimit = enableDistributedRatelimit; + m_rateLimiterConfig.enableDistributedRateLimitCache = enableDistributedRateLimitCache; + m_rateLimiterConfig.distributedRateLimitCachePercent = distributedRateLimitCachePercent; + m_rateLimiterConfig.enableGroupRateLimit = enableGroupRateLimit; + m_rateLimiterConfig.enableConRateLimit = enableConRateLimit; + + if (totalOutgoingBwLimit > 0 && connOutgoingBwLimit > 0 && + connOutgoingBwLimit > totalOutgoingBwLimit) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "flow_control.conn_outgoing_bw_limit should not greater " + "than flow_control.total_outgoing_bw_limit")); + } + + if (totalOutgoingBwLimit > 0 && groupOutgoingBwLimit > 0 && + groupOutgoingBwLimit > totalOutgoingBwLimit) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "flow_control.group_outgoing_bw_limit should not greater " + "than flow_control.total_outgoing_bw_limit")); + } + + GATEWAY_CONFIG_LOG(INFO) << LOG_BADGE("initRateLimiterConfig") + << LOG_KV("enableRateLimit", m_rateLimiterConfig.enableRateLimit()) + << LOG_KV("statInterval", statInterval) + << LOG_KV("enableDistributedRatelimit", enableDistributedRatelimit) + << LOG_KV("enableDistributedRateLimitCache", + enableDistributedRateLimitCache) + << LOG_KV("distributedRateLimitCachePercent", + distributedRateLimitCachePercent) + << LOG_KV("enableGroupRateLimit", enableGroupRateLimit) + << LOG_KV("enableConRateLimit", enableConRateLimit) + << LOG_KV("totalOutgoingBwLimit", totalOutgoingBwLimit) + << LOG_KV("connOutgoingBwLimit", connOutgoingBwLimit) + << LOG_KV("groupOutgoingBwLimit", groupOutgoingBwLimit) + << LOG_KV("moduleIDs", boost::join(modules, ",")) + << LOG_KV("ips size", m_rateLimiterConfig.ip2BwLimit.size()) + << LOG_KV("groups size", m_rateLimiterConfig.group2BwLimit.size()); + + if (m_rateLimiterConfig.enableDistributedRatelimit) + { + GATEWAY_CONFIG_LOG(INFO) + << LOG_BADGE("initRateLimiterConfig") + << LOG_DESC( + "distributed ratelimit switch is turn on, then load the redis configurations"); + + initRedisConfig(_pt); + } +} + +// loads redis config +void GatewayConfig::initRedisConfig(const boost::property_tree::ptree& _pt) +{ + /* + [redis] + server_ip= + server_port= + request_timeout= + connection_pool_size= + password= + db= + */ + + // server_ip + std::string redisServerIP = _pt.get("redis.server_ip", ""); + if (redisServerIP.empty()) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "initRedisConfig: invalid redis.server_ip! Must be non-empty!")); + } + + if (!isValidIP(redisServerIP)) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "initRedisConfig: invalid redis.server_ip! Invalid ip format!")); + } + + // server_port + uint16_t redisServerPort = _pt.get("redis.server_port", 0); + if (!isValidPort(redisServerPort)) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment("initRedisConfig: invalid redis.server_port! " + "redis port must be in range (1024,65535]!")); + } + + // request_timeout + int32_t redisTimeout = _pt.get("redis.request_timeout", -1); + + // connection_pool_size + int32_t redisPoolSize = _pt.get("redis.connection_pool_size", 16); + + // password + std::string redisPassword = _pt.get("redis.password", ""); + + // db + int redisDB = _pt.get("redis.db", 0); + + m_redisConfig.host = redisServerIP; + m_redisConfig.port = redisServerPort; + m_redisConfig.timeout = redisTimeout; + m_redisConfig.connectionPoolSize = redisPoolSize; + m_redisConfig.password = redisPassword; + m_redisConfig.db = redisDB; + + GATEWAY_CONFIG_LOG(INFO) << LOG_BADGE("initRedisConfig") + << LOG_KV("redisServerIP", redisServerIP) + << LOG_KV("redisServerPort", redisServerPort) + << LOG_KV("redisDB", redisDB) << LOG_KV("redisTimeout", redisTimeout) + << LOG_KV("redisPoolSize", redisPoolSize) + << LOG_KV("redisPassword", redisPassword); +} + +void GatewayConfig::initPeerBlacklistConfig(const boost::property_tree::ptree& _pt) +{ + std::string certBlacklistSection{"crl"}; + if (_pt.get_child_optional("certificate_blacklist")) + { + certBlacklistSection = "certificate_blacklist"; + } + + bool enableBlacklist{false}; + // CRL means certificate rejected list, CRL optional in config.ini + if (_pt.get_child_optional(certBlacklistSection)) + { + for (auto it : _pt.get_child(certBlacklistSection)) + { + if (0 == it.first.find("crl.")) + { + try + { + std::string nodeID{boost::to_upper_copy(it.second.data())}; + GATEWAY_CONFIG_LOG(TRACE) << LOG_BADGE("GatewayConfig") + << LOG_DESC("get certificate rejected by nodeID") + << LOG_KV("nodeID", nodeID); + bool isNodeIDValid = (false == m_smSSL? isNodeIDOk(nodeID) : isNodeIDOk(nodeID)); + if (true == isNodeIDValid) + { + m_enableBlacklist = true; + m_certBlacklist.emplace(std::move(nodeID)); + } + else + { + GATEWAY_CONFIG_LOG(ERROR) + << LOG_BADGE("GatewayConfig") + << LOG_DESC("get certificate accepted by nodeID failed, illegal nodeID") + << LOG_KV("nodeID", nodeID); + } + } + catch (std::exception& e) + { + GATEWAY_CONFIG_LOG(ERROR) + << LOG_BADGE("GatewayConfig") << LOG_DESC("get certificate rejected failed") + << LOG_KV("EINFO", boost::diagnostic_information(e)); + } + } + } + } +} + +void GatewayConfig::initPeerWhitelistConfig(const boost::property_tree::ptree& _pt) +{ + std::string certWhitelistSection{"cal"}; + if (_pt.get_child_optional("certificate_whitelist")) + { + certWhitelistSection = "certificate_whitelist"; + } + + bool enableWhiteList{false}; + // CAL means certificate accepted list, CAL optional in config.ini + if (_pt.get_child_optional(certWhitelistSection)) + { + for (auto it : _pt.get_child(certWhitelistSection)) + { + if (0 == it.first.find("cal.")) + { + try + { + std::string nodeID{boost::to_upper_copy(it.second.data())}; + GATEWAY_CONFIG_LOG(DEBUG) << LOG_BADGE("GatewayConfig") + << LOG_BADGE("get certificate accepted by nodeID") + << LOG_KV("nodeID", nodeID); + bool isNodeIDValid = (false == m_smSSL? isNodeIDOk(nodeID) : isNodeIDOk(nodeID)); + if (true == isNodeIDValid) + { + m_enableWhitelist = true; + m_certWhitelist.emplace(std::move(nodeID)); + } + else + { + GATEWAY_CONFIG_LOG(ERROR) + << LOG_BADGE("GatewayConfig") + << LOG_DESC("get certificate accepted by nodeID failed, illegal nodeID") + << LOG_KV("nodeID", nodeID); + } + } + catch (const std::exception& e) + { + GATEWAY_CONFIG_LOG(ERROR) + << LOG_BADGE("GatewayConfig") << LOG_DESC("get certificate accepted failed") + << LOG_KV("EINFO", boost::diagnostic_information(e)); + } + } + } + } +} + +void GatewayConfig::checkFileExist(const std::string& _path) +{ + auto fileContent = readContentsToString(boost::filesystem::path(_path)); + if (!fileContent || fileContent->empty()) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment("checkFileExist: unable to load file content " + " maybe file not exist, path: " + + _path)); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/GatewayConfig.h b/bcos-gateway/bcos-gateway/GatewayConfig.h new file mode 100644 index 0000000..d869db4 --- /dev/null +++ b/bcos-gateway/bcos-gateway/GatewayConfig.h @@ -0,0 +1,235 @@ +/** @file GatewayConfig.h + * @author octopus + * @date 2021-05-19 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class GatewayConfig +{ +public: + using Ptr = std::shared_ptr; + + GatewayConfig() = default; + ~GatewayConfig() = default; + +public: + // cert for ssl connection + struct CertConfig + { + std::string caCert; + std::string nodeKey; + std::string nodeCert; + }; + + // cert for sm ssl connection + struct SMCertConfig + { + std::string caCert; + std::string nodeCert; + std::string nodeKey; + std::string enNodeCert; + std::string enNodeKey; + }; + + // config for redis + struct RedisConfig + { + // redis server ip + std::string host; + // redis server port + uint16_t port; + // redis request timeout + int32_t timeout = -1; + // redis connection pool size, default 16 + int32_t connectionPoolSize = 16; + // redis password, default empty + std::string password; + // redis db, default 0th + int db = 0; + }; + + // config for rate limit + struct RateLimiterConfig + { + bool enableGroupRateLimit = false; + bool enableConRateLimit = false; + + // if turn on distributed ratelimit + bool enableDistributedRatelimit = false; + // + bool enableDistributedRateLimitCache = true; + // + int32_t distributedRateLimitCachePercent = 20; + // stat reporter interval, unit: ms + int32_t statInterval = 60000; + + // total outgoing bandwidth limit + int64_t totalOutgoingBwLimit = -1; + + // per connection outgoing bandwidth limit + int64_t connOutgoingBwLimit = -1; + // specify IP bandwidth limiting + std::unordered_map ip2BwLimit; + + // per connection outgoing bandwidth limit + int64_t groupOutgoingBwLimit = -1; + // specify group bandwidth limiting + std::unordered_map group2BwLimit; + + // the message of modules that do not limit bandwidth + std::set modulesWithoutLimit; + + // whether any configuration takes effect + bool enableRateLimit() const + { + if (totalOutgoingBwLimit > 0 || connOutgoingBwLimit > 0 || groupOutgoingBwLimit > 0) + { + return true; + } + + if (!group2BwLimit.empty() || !ip2BwLimit.empty()) + { + return true; + } + + return false; + } + }; + + /** + * @brief: loads configuration items from the config.ini + * @param _configPath: config.ini path + * @return void + */ + void initConfig(std::string const& _configPath, bool _uuidRequired = false); + + void setCertPath(std::string const& _certPath) { m_certPath = _certPath; } + void setNodePath(std::string const& _nodePath) { m_nodePath = _nodePath; } + void setNodeFileName(const std::string& _nodeFileName) { m_nodeFileName = _nodeFileName; } + + std::string const& certPath() const { return m_certPath; } + std::string const& nodePath() const { return m_nodePath; } + std::string const& nodeFileName() const { return m_nodeFileName; } + + // check if the port valid + bool isValidPort(int port); + // check if the ip valid + bool isValidIP(const std::string& _ip); + // MB to bit + int64_t doubleMBToBit(double _d); + void hostAndPort2Endpoint(const std::string& _host, NodeIPEndpoint& _endpoint); + void parseConnectedJson(const std::string& _json, std::set& _nodeIPEndpointSet); + // loads p2p configuration items from the configuration file + void initP2PConfig(const boost::property_tree::ptree& _pt, bool _uuidRequired); + // loads ca configuration items from the configuration file + void initCertConfig(const boost::property_tree::ptree& _pt); + // loads sm ca configuration items from the configuration file + void initSMCertConfig(const boost::property_tree::ptree& _pt); + // loads ratelimit config + void initRateLimitConfig(const boost::property_tree::ptree& _pt); + // loads redis config + void initRedisConfig(const boost::property_tree::ptree& _pt); + // loads peer blacklist config + void initPeerBlacklistConfig(const boost::property_tree::ptree& _pt); + // loads peer whitelist config + void initPeerWhitelistConfig(const boost::property_tree::ptree& _pt); + // check if file exist, exception will be throw if the file not exist + void checkFileExist(const std::string& _path); + // load p2p connected peers + void loadP2pConnectedNodes(); + + std::string listenIP() const { return m_listenIP; } + uint16_t listenPort() const { return m_listenPort; } + uint32_t threadPoolSize() const { return m_threadPoolSize; } + bool smSSL() const { return m_smSSL; } + + CertConfig certConfig() const { return m_certConfig; } + SMCertConfig smCertConfig() const { return m_smCertConfig; } + RateLimiterConfig rateLimiterConfig() const { return m_rateLimiterConfig; } + RedisConfig redisConfig() const { return m_redisConfig; } + + const std::set& connectedNodes() const { return m_connectedNodes; } + + bool enableBlacklist() const { return m_enableBlacklist; } + const std::set& peerBlacklist() const { return m_certBlacklist; } + bool enableWhitelist() const { return m_enableWhitelist; } + const std::set& peerWhitelist() const { return m_certWhitelist;} + + std::string const& uuid() const { return m_uuid; } + void setUUID(std::string const& _uuid) { m_uuid = _uuid; } + + //NodeIDType: + //h512(true == m_smSSL) + //h2048(false == m_smSSL) + template + bool isNodeIDOk(const std::string& _nodeID) + { + try + { + const std::size_t nodeIDLength = NodeIDType::SIZE * 2; + const std::size_t nodeIDWithPrefixLength = nodeIDLength + 2; + + // check node id length + if (_nodeID.length() != nodeIDWithPrefixLength && _nodeID.length() != nodeIDLength) + { + return false; + } + // if the length of the node id is nodeIDWithPrefixLength, must be start with 0x + if (_nodeID.length() == nodeIDWithPrefixLength && _nodeID.compare(0, 2, "0x") != 0) + { + return false; + } + NodeIDType nodeID = NodeIDType(_nodeID); + return NodeIDType() != nodeID; + } + catch (...) + { + return false; + } + return false; + } + +private: + std::string m_uuid; + // if SM SSL connection or not + bool m_smSSL; + // p2p network listen IP + std::string m_listenIP; + // p2p network listen Port + uint16_t m_listenPort; + // threadPool size + uint32_t m_threadPoolSize{16}; + // p2p connected nodes host list + std::set m_connectedNodes; + // peer black list + bool m_enableBlacklist{ false }; + std::set m_certBlacklist; + // peer white list + bool m_enableWhitelist{ false }; + std::set m_certWhitelist; + // cert config for ssl connection + CertConfig m_certConfig; + SMCertConfig m_smCertConfig; + + RateLimiterConfig m_rateLimiterConfig; + RedisConfig m_redisConfig; + + std::string m_certPath; + std::string m_nodePath; + std::string m_nodeFileName; +}; + +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/GatewayFactory.cpp b/bcos-gateway/bcos-gateway/GatewayFactory.cpp new file mode 100644 index 0000000..91375b9 --- /dev/null +++ b/bcos-gateway/bcos-gateway/GatewayFactory.cpp @@ -0,0 +1,911 @@ +/** @file GatewayFactory.cpp + * @author octopus + * @date 2021-05-17 + */ + +#include "bcos-gateway/GatewayConfig.h" +#include "bcos-gateway/libnetwork/SessionCallback.h" +#include "bcos-gateway/libp2p/Service.h" +#include "bcos-gateway/libratelimit/DistributedRateLimiter.h" +#include "bcos-gateway/libratelimit/GatewayRateLimiter.h" +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::rpc; +using namespace bcos; +using namespace security; +using namespace gateway; +using namespace bcos::amop; +using namespace bcos::protocol; +using namespace bcos::boostssl; + +struct GatewayP2PReloadHandler +{ + static GatewayConfig::Ptr config; + static Service::Ptr service; + + static void handle(int sig) + { + BCOS_LOG(INFO) << LOG_BADGE("Gateway::Signal") << LOG_DESC("receive SIGUSER1 sig"); + + if (!config || !service) + { + return; + } + + try + { + config->loadP2pConnectedNodes(); + auto nodes = config->connectedNodes(); + service->setStaticNodes(nodes); + + BCOS_LOG(INFO) << LOG_BADGE("Gateway::Signal") + << LOG_DESC("reload p2p connected nodes successfully") + << LOG_KV("nodes count: ", nodes.size()); + } + catch (const std::exception& e) + { + BCOS_LOG(WARNING) << LOG_BADGE("Gateway::Signal") + << LOG_DESC("reload p2p connected nodes failed, e: " + + std::string(e.what())); + } + } +}; + +GatewayConfig::Ptr GatewayP2PReloadHandler::config = nullptr; +Service::Ptr GatewayP2PReloadHandler::service = nullptr; + +// register the function fetch pub hex from the cert +void GatewayFactory::initCert2PubHexHandler() +{ + auto handler = [this](const std::string& _cert, std::string& _pubHex) -> bool { + auto certContent = readContentsToString(boost::filesystem::path(_cert)); + if (!certContent || certContent->empty()) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("errorMessage", "unable to load cert content, cert: " + _cert); + return false; + } + + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("certContent: ", certContent); + + std::shared_ptr bioMem(BIO_new(BIO_s_mem()), [](BIO* p) { + if (p != NULL) + { + BIO_free(p); + } + }); + + if (!bioMem) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("errorMessage", "BIO_new error"); + return false; + } + + BIO_write(bioMem.get(), certContent->data(), certContent->size()); + std::shared_ptr x509Ptr( + PEM_read_bio_X509(bioMem.get(), NULL, NULL, NULL), [](X509* p) { + if (p != NULL) + { + X509_free(p); + } + }); + + if (!x509Ptr) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initCert2PubHexHandler") << LOG_KV("cert", _cert) + << LOG_KV("errorMessage", "PEM_read_bio_X509 error"); + return false; + } + + return m_sslContextPubHandler(x509Ptr.get(), _pubHex); + }; + + m_certPubHexHandler = handler; +} + +// register the function fetch public key from the ssl context +void GatewayFactory::initSSLContextPubHexHandler() +{ + auto handler = [](X509* x509, std::string& _pubHex) -> bool { + ASN1_BIT_STRING* pubKey = + X509_get0_pubkey_bitstr(x509); // csc->current_cert is an X509 struct + if (pubKey == NULL) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler X509_get0_pubkey_bitstr error"); + return false; + } + + auto hex = bcos::toHexString(pubKey->data, pubKey->data + pubKey->length, ""); + _pubHex = *hex.get(); + + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("[NEW]SSLContext pubHex: " + _pubHex); + return true; + }; + + m_sslContextPubHandler = handler; +} + +// register the function fetch public key from the ssl context +void GatewayFactory::initSSLContextPubHexHandlerWithoutExtInfo() +{ + auto handler = [](X509* x509, std::string& _pubHex) -> bool { + EVP_PKEY* pKey = X509_get_pubkey(x509); + if (nullptr == pKey) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler X509_get_pubkey error"); + return false; + } + + int type = EVP_PKEY_base_id(pKey); + if (EVP_PKEY_RSA == type || EVP_PKEY_RSA2 == type) + { + RSA* rsa = EVP_PKEY_get0_RSA(pKey); + if (nullptr == rsa) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler EVP_PKEY_get0_RSA error"); + return false; + } + + const BIGNUM* n = RSA_get0_n(rsa); + if (nullptr == n) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler RSA_get0_n error"); + return false; + } + + _pubHex = BN_bn2hex(n); // RSA_print_fp(stdout, rsa, 0); + } + else if (EVP_PKEY_EC == type) + { + ec_key_st* ecPublicKey = EVP_PKEY_get0_EC_KEY(pKey); + if (nullptr == ecPublicKey) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler EVP_PKEY_get1_EC_KEY error"); + return false; + } + + const EC_POINT* ecPoint = EC_KEY_get0_public_key(ecPublicKey); + if (nullptr == ecPoint) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler EC_KEY_get0_public_key error"); + return false; + } + + const EC_GROUP* ecGroup = EC_KEY_get0_group(ecPublicKey); + if (nullptr == ecGroup) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("initSSLContextPubHexHandler EC_KEY_get0_group error"); + return false; + } + + std::shared_ptr hex = std::shared_ptr( + EC_POINT_point2hex(ecGroup, ecPoint, EC_KEY_get_conv_form(ecPublicKey), NULL), + [](char* p) { OPENSSL_free(p); }); + if (nullptr != hex) + { + if ('0' == *(hex.get()) && '4' == *(hex.get() + 1)) + _pubHex = hex.get() + 2; + else + _pubHex = hex.get(); + } + } + else + { + GATEWAY_FACTORY_LOG(ERROR) << LOG_DESC("initSSLContextPubHexHandler unknown type error") + << LOG_KV("type", type); + + return false; + } + + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("[NEW]SSLContext pubHex: " + _pubHex); + return true; + }; + + m_sslContextPubHandlerWithoutExtInfo = handler; +} + +std::shared_ptr GatewayFactory::buildSSLContext( + bool _server, const GatewayConfig::CertConfig& _certConfig) +{ + std::ignore = _server; + std::shared_ptr sslContext = + std::make_shared(boost::asio::ssl::context::tlsv12); + /* + std::shared_ptr ecdh(EC_KEY_new_by_curve_name(NID_secp384r1), + [](EC_KEY *p) { EC_KEY_free(p); }); + SSL_CTX_set_tmp_ecdh(sslContext->native_handle(), ecdh.get()); + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_none); + */ + std::shared_ptr keyContent; + if (!_certConfig.nodeKey.empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + keyContent = readContents(boost::filesystem::path(_certConfig.nodeKey)); + else + keyContent = m_dataEncrypt->decryptFile(_certConfig.nodeKey); + } + catch (std::exception& e) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_BADGE("SecureInitializer") << LOG_DESC("open privateKey failed") + << LOG_KV("file", _certConfig.nodeKey); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: unable read content of key: " + _certConfig.nodeKey)); + } + } + if (!keyContent || keyContent->empty()) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("buildSSLContext: unable read content of key: " + _certConfig.nodeKey); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: unable read content of key: " + _certConfig.nodeKey)); + } + + boost::asio::const_buffer keyBuffer(keyContent->data(), keyContent->size()); + sslContext->use_private_key(keyBuffer, boost::asio::ssl::context::file_format::pem); + + // node.crt + sslContext->use_certificate_chain_file(_certConfig.nodeCert); + /*if (!SSL_CTX_get0_certificate(sslContext->native_handle())) { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("buildSSLContext: SSL_CTX_get0_certificate failed"); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: SSL_CTX_get0_certificate failed, node_cert=" + + _certConfig.nodeCert)); + }*/ + + auto caCertContent = + readContentsToString(boost::filesystem::path(_certConfig.caCert)); // ca.crt + if (!caCertContent || caCertContent->empty()) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_DESC("buildSSLContext: unable read content of ca: " + _certConfig.caCert); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: unable read content of ca: " + _certConfig.caCert)); + } + sslContext->add_certificate_authority( + boost::asio::const_buffer(caCertContent->data(), caCertContent->size())); + + std::string caPath; + if (!caPath.empty()) + { + sslContext->add_verify_path(caPath); + } + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + + return sslContext; +} + +std::shared_ptr GatewayFactory::buildSSLContext( + bool _server, const GatewayConfig::SMCertConfig& _smCertConfig) +{ + SSL_CTX* ctx = NULL; + if (_server) + { + const SSL_METHOD* meth = SSLv23_server_method(); + ctx = SSL_CTX_new(meth); + } + else + { + const SSL_METHOD* meth = CNTLS_client_method(); + ctx = SSL_CTX_new(meth); + } + + std::shared_ptr sslContext = + std::make_shared(ctx); + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_none); + + /* Load the server certificate into the SSL_CTX structure */ + if (SSL_CTX_use_certificate_file( + sslContext->native_handle(), _smCertConfig.nodeCert.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_certificate_file error")); + } + + std::shared_ptr keyContent; + if (!_smCertConfig.nodeKey.empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + keyContent = readContents(boost::filesystem::path(_smCertConfig.nodeKey)); + else + keyContent = m_dataEncrypt->decryptFile(_smCertConfig.nodeKey); + } + catch (std::exception& e) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_BADGE("SecureInitializer") << LOG_DESC("open privateKey failed") + << LOG_KV("file", _smCertConfig.nodeKey); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: unable read content of key: " + _smCertConfig.nodeKey)); + } + } + // nodekey + boost::asio::const_buffer keyBuffer(keyContent->data(), keyContent->size()); + sslContext->use_private_key(keyBuffer, boost::asio::ssl::context::file_format::pem); + + /* Check if the server certificate and private-key matches */ + if (!SSL_CTX_check_private_key(sslContext->native_handle())) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_check_private_key error")); + } + + std::shared_ptr enNodeKeyContent; + if (!_smCertConfig.enNodeKey.empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + enNodeKeyContent = readContents(boost::filesystem::path(_smCertConfig.enNodeKey)); + else + enNodeKeyContent = m_dataEncrypt->decryptFile(_smCertConfig.enNodeKey); + } + catch (std::exception& e) + { + GATEWAY_FACTORY_LOG(ERROR) + << LOG_BADGE("SecureInitializer") << LOG_DESC("open privateKey failed") + << LOG_KV("file", _smCertConfig.enNodeKey); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "buildSSLContext: unable read content of key: " + _smCertConfig.enNodeKey)); + } + } + + + /* Load the server encrypt certificate into the SSL_CTX structure */ + if (SSL_CTX_use_enc_certificate_file( + sslContext->native_handle(), _smCertConfig.enNodeCert.c_str(), SSL_FILETYPE_PEM) <= 0) + { + ERR_print_errors_fp(stderr); + BOOST_THROW_EXCEPTION(std::runtime_error("SSL_CTX_use_enc_certificate_file error")); + } + std::string enNodeKeyStr((const char*)enNodeKeyContent->data(), enNodeKeyContent->size()); + + if (SSL_CTX_use_enc_PrivateKey(sslContext->native_handle(), toEvpPkey(enNodeKeyStr.c_str())) <= + 0) + { + GATEWAY_FACTORY_LOG(ERROR) << LOG_DESC("SSL_CTX_use_enc_PrivateKey error"); + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment("GatewayFactory::buildSSLContext " + "SSL_CTX_use_enc_PrivateKey error")); + } + + auto caContent = + readContentsToString(boost::filesystem::path(_smCertConfig.caCert)); // node.key content + + sslContext->add_certificate_authority( + boost::asio::const_buffer(caContent->data(), caContent->size())); + + std::string caPath; + if (!caPath.empty()) + { + sslContext->add_verify_path(caPath); + } + + sslContext->set_verify_mode(boost::asio::ssl::context_base::verify_peer | + boost::asio::ssl::verify_fail_if_no_peer_cert); + + return sslContext; +} + +/** + * @brief: construct Gateway + * @param _configPath: config.ini path + * @return void + */ +std::shared_ptr GatewayFactory::buildGateway(const std::string& _configPath, + bool _airVersion, bcos::election::LeaderEntryPointInterface::Ptr _entryPoint, + std::string const& _gatewayServiceName) +{ + auto config = std::make_shared(); + // load config + if (_airVersion) + { + // the air mode not require the uuid(use p2pID as uuid by default) + config->initConfig(_configPath, false); + } + else + { + // the pro mode require the uuid + config->initConfig(_configPath, true); + } + config->loadP2pConnectedNodes(); + return buildGateway(config, _airVersion, _entryPoint, _gatewayServiceName); +} + +std::shared_ptr GatewayFactory::buildGatewayRateLimiter( + const GatewayConfig::RateLimiterConfig& _rateLimiterConfig, + const GatewayConfig::RedisConfig& _redisConfig) +{ + auto rateLimiterStat = std::make_shared(); + rateLimiterStat->setStatInterval(_rateLimiterConfig.statInterval); + + // redis instance + std::shared_ptr redis = nullptr; + if (_rateLimiterConfig.enableDistributedRatelimit) + { // init redis first + redis = initRedis(_redisConfig); + } + + auto rateLimiterManager = buildRateLimiterManager(_rateLimiterConfig, redis); + + auto gatewayRateLimiter = + std::make_shared(rateLimiterManager, rateLimiterStat); + + return gatewayRateLimiter; +} + +std::shared_ptr GatewayFactory::buildRateLimiterManager( + const GatewayConfig::RateLimiterConfig& _rateLimiterConfig, + std::shared_ptr _redis) +{ + // rate limiter factory + auto rateLimiterFactory = std::make_shared(_redis); + // rate limiter manager + auto rateLimiterManager = std::make_shared(_rateLimiterConfig); + + // total outgoing bandwidth Limit for p2p network + ratelimiter::RateLimiterInterface::Ptr totalOutgoingRateLimiter = nullptr; + if (_rateLimiterConfig.totalOutgoingBwLimit > 0) + { + totalOutgoingRateLimiter = rateLimiterFactory->buildTokenBucketRateLimiter( + _rateLimiterConfig.totalOutgoingBwLimit); + + rateLimiterManager->registerRateLimiter( + ratelimiter::RateLimiterManager::TOTAL_OUTGOING_KEY, totalOutgoingRateLimiter); + } + + // ip connection => rate limit + if (!_rateLimiterConfig.ip2BwLimit.empty()) + { + for (const auto& [ip, bandWidth] : _rateLimiterConfig.ip2BwLimit) + { + auto rateLimiterInterface = rateLimiterFactory->buildTokenBucketRateLimiter(bandWidth); + rateLimiterManager->registerRateLimiter(ip, rateLimiterInterface); + } + } + + // group => rate limit + if (!_rateLimiterConfig.group2BwLimit.empty()) + { + for (const auto& [group, bandWidth] : _rateLimiterConfig.group2BwLimit) + { + ratelimiter::RateLimiterInterface::Ptr rateLimiterInterface = nullptr; + if (_rateLimiterConfig.enableDistributedRatelimit) + { + rateLimiterInterface = rateLimiterFactory->buildRedisDistributedRateLimiter( + rateLimiterFactory->toTokenKey(group), bandWidth, 1, + _rateLimiterConfig.enableDistributedRateLimitCache, + _rateLimiterConfig.distributedRateLimitCachePercent); + } + else + { + rateLimiterInterface = rateLimiterFactory->buildTokenBucketRateLimiter(bandWidth); + } + + rateLimiterManager->registerRateLimiter(group, rateLimiterInterface); + } + } + + // modules without bandwidth limit + rateLimiterManager->setModulesWithoutLimit(_rateLimiterConfig.modulesWithoutLimit); + rateLimiterManager->setRateLimiterFactory(rateLimiterFactory); + + return rateLimiterManager; +} + +/** + * @brief: construct Gateway + * @param _config: config parameter object + * @return void + */ +// Note: _gatewayServiceName is used to check the validation of groupInfo when localRouter update +// groupInfo +std::shared_ptr GatewayFactory::buildGateway(GatewayConfig::Ptr _config, bool _airVersion, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint, + std::string const& _gatewayServiceName) +{ + try + { + std::string nodeCert = + (_config->smSSL() ? _config->smCertConfig().nodeCert : _config->certConfig().nodeCert); + std::string pubHex; + if (!m_certPubHexHandler(nodeCert, pubHex)) + { + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "GatewayFactory::init unable parse myself pub id")); + } + + std::shared_ptr srvCtx = + (_config->smSSL() ? buildSSLContext(true, _config->smCertConfig()) : + buildSSLContext(true, _config->certConfig())); + + std::shared_ptr clientCtx = + (_config->smSSL() ? buildSSLContext(false, _config->smCertConfig()) : + buildSSLContext(false, _config->certConfig())); + + // init ASIOInterface + auto asioInterface = std::make_shared(); + asioInterface->setIOServicePool(std::make_shared()); + asioInterface->setSrvContext(srvCtx); + asioInterface->setClientContext(clientCtx); + asioInterface->setType(ASIOInterface::ASIO_TYPE::SSL); + + // Message Factory + auto messageFactory = std::make_shared(); + // Session Factory + auto sessionFactory = std::make_shared(pubHex); + // KeyFactory + auto keyFactory = std::make_shared(); + // Session Callback manager + auto sessionCallbackManager = std::make_shared(); + + // init peer black list + PeerBlackWhitelistInterface::Ptr peerBlacklist = + std::make_shared(_config->peerBlacklist(), _config->enableBlacklist()); + // init peer white list + PeerBlackWhitelistInterface::Ptr peerWhitelist = + std::make_shared(_config->peerWhitelist(), _config->enableWhitelist()); + + // init Host + auto host = std::make_shared(asioInterface, sessionFactory, messageFactory); + host->setHostPort(_config->listenIP(), _config->listenPort()); + host->setThreadPool(std::make_shared("P2P", _config->threadPoolSize())); + host->setSSLContextPubHandler(m_sslContextPubHandler); + host->setSSLContextPubHandlerWithoutExtInfo(m_sslContextPubHandlerWithoutExtInfo); + host->setPeerBlacklist(peerBlacklist); + host->setPeerWhitelist(peerWhitelist); + host->setSessionCallbackManager(sessionCallbackManager); + + // init Service + auto routerTableFactory = std::make_shared(); + auto service = std::make_shared(pubHex, routerTableFactory); + service->setHost(host); + service->setStaticNodes(_config->connectedNodes()); + + GatewayP2PReloadHandler::config = _config; + GatewayP2PReloadHandler::service = service; + // register SIGUSR1 for reload connected p2p nodes config + signal(GATEWAY_RELOAD_P2P_CONFIG, GatewayP2PReloadHandler::handle); + + BCOS_LOG(INFO) << LOG_DESC("register SIGUSR1 sig for reload p2p connected nodes config"); + + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("GatewayFactory::init") + << LOG_KV("myself pub id", pubHex) + << LOG_KV("rpcService", m_rpcServiceName) + << LOG_KV("gatewayServiceName", _gatewayServiceName); + service->setMessageFactory(messageFactory); + service->setKeyFactory(keyFactory); + + auto gatewayRateLimiter = + buildGatewayRateLimiter(_config->rateLimiterConfig(), _config->redisConfig()); + auto gatewayRateLimiterWeakPtr = + std::weak_ptr(gatewayRateLimiter); + + // init GatewayNodeManager + GatewayNodeManager::Ptr gatewayNodeManager; + AMOPImpl::Ptr amop; + if (_airVersion) + { + gatewayNodeManager = + std::make_shared(_config->uuid(), pubHex, keyFactory, service); + amop = buildLocalAMOP(service, pubHex); + } + else + { + // Note: no need to use nodeAliveDetector when enable failover + if (_entryPoint) + { + gatewayNodeManager = std::make_shared( + _config->uuid(), pubHex, keyFactory, service); + } + else + { + gatewayNodeManager = std::make_shared( + _config->uuid(), pubHex, keyFactory, service); + } + amop = buildAMOP(service, pubHex); + } + // init Gateway + auto gateway = std::make_shared( + m_chainID, service, gatewayNodeManager, amop, gatewayRateLimiter, _gatewayServiceName); + auto GatewayNodeManagerWeakPtr = std::weak_ptr(gatewayNodeManager); + // register disconnect handler + service->registerDisconnectHandler( + [GatewayNodeManagerWeakPtr](NetworkException e, P2PSession::Ptr p2pSession) { + (void)e; + auto gatewayNodeManager = GatewayNodeManagerWeakPtr.lock(); + if (gatewayNodeManager && p2pSession) + { + gatewayNodeManager->onRemoveNodeIDs(p2pSession->p2pID()); + } + }); + service->registerUnreachableHandler( + [GatewayNodeManagerWeakPtr](std::string const& _unreachableNode) { + auto nodeMgr = GatewayNodeManagerWeakPtr.lock(); + if (!nodeMgr) + { + return; + } + nodeMgr->onRemoveNodeIDs(_unreachableNode); + }); + + service->setBeforeMessageHandler([gatewayRateLimiterWeakPtr](SessionFace::Ptr _session, + Message::Ptr _msg, SessionCallbackFunc _callback) { + auto gatewayRateLimiter = gatewayRateLimiterWeakPtr.lock(); + if (!gatewayRateLimiter) + { + return true; + } + + GatewayMessageExtAttributes::Ptr msgExtAttributes = nullptr; + if (_msg->extAttributes()) + { + msgExtAttributes = + std::dynamic_pointer_cast(_msg->extAttributes()); + } + + std::string groupID = msgExtAttributes ? msgExtAttributes->groupID() : std::string(); + uint16_t moduleID = msgExtAttributes ? msgExtAttributes->moduleID() : 0; + std::string endpoint = _session->nodeIPEndpoint().address(); + uint64_t msgLength = _msg->length(); + + // bandwidth limit check + auto r = gatewayRateLimiter->checkOutGoing(endpoint, groupID, moduleID, msgLength); + if (!r.first && _callback) + { + _callback(NetworkException(BandwidthOverFlow, r.second), Message::Ptr()); + } + + return r.first; + }); + + service->setOnMessageHandler( + [gatewayRateLimiterWeakPtr](SessionFace::Ptr _session, Message::Ptr _message) { + auto gatewayRateLimiter = gatewayRateLimiterWeakPtr.lock(); + if (!gatewayRateLimiter) + { + return true; + } + + auto endpoint = _session->nodeIPEndpoint().address(); + auto msgLength = _message->length(); + gatewayRateLimiter->checkInComing(endpoint, msgLength); + + return true; + }); + + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("GatewayFactory::init ok"); + if (!_entryPoint) + { + return gateway; + } + initFailOver(gateway, _entryPoint); + + return gateway; + } + catch (const std::exception& e) + { + GATEWAY_FACTORY_LOG(ERROR) << LOG_DESC("GatewayFactory::init") + << LOG_KV("error", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(e); + } +} + +void GatewayFactory::initFailOver( + std::shared_ptr _gateWay, bcos::election::LeaderEntryPointInterface::Ptr _entryPoint) +{ + auto groupInfoCodec = std::make_shared(); + _entryPoint->addMemberChangeNotificationHandler( + [_gateWay, groupInfoCodec]( + std::string const& _leaderKey, bcos::protocol::MemberInterface::Ptr _leader) { + auto const& groupInfoStr = _leader->memberConfig(); + auto groupInfo = groupInfoCodec->deserialize(groupInfoStr); + GATEWAY_FACTORY_LOG(INFO) + << LOG_DESC("The leader entryPoint changed") << LOG_KV("key", _leaderKey) + << LOG_KV("memberID", _leader->memberID()) << LOG_KV("modifyIndex", _leader->seq()) + << LOG_KV("groupID", groupInfo->groupID()); + _gateWay->asyncNotifyGroupInfo(groupInfo, [](Error::Ptr&& _error) { + if (_error) + { + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("memberChangedNotification error") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + return; + } + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("memberChangedNotification success"); + }); + }); + + _entryPoint->addMemberDeleteNotificationHandler( + [_gateWay, groupInfoCodec]( + std::string const& _leaderKey, bcos::protocol::MemberInterface::Ptr _leader) { + auto const& groupInfoStr = _leader->memberConfig(); + auto groupInfo = groupInfoCodec->deserialize(groupInfoStr); + GATEWAY_FACTORY_LOG(INFO) + << LOG_DESC("The leader entryPoint has been deleted") << LOG_KV("key", _leaderKey) + << LOG_KV("memberID", _leader->memberID()) << LOG_KV("modifyIndex", _leader->seq()) + << LOG_KV("groupID", groupInfo->groupID()); + auto nodeInfos = groupInfo->nodeInfos(); + for (auto const& node : nodeInfos) + { + _gateWay->unregisterNode(groupInfo->groupID(), node.second->nodeID()); + GATEWAY_FACTORY_LOG(INFO) + << LOG_DESC("unregisterNode") << LOG_KV("group", groupInfo->groupID()) + << LOG_KV("node", node.second->nodeID()); + } + }); + GATEWAY_FACTORY_LOG(INFO) << LOG_DESC("initFailOver for gateway success"); +} + +/** + * @brief + * + * @param _redisConfig + * @return std::shared_ptr + */ +std::shared_ptr GatewayFactory::initRedis( + const GatewayConfig::RedisConfig& _redisConfig) +{ + GATEWAY_FACTORY_LOG(INFO) << LOG_BADGE("initRedis") << LOG_DESC("start connect to redis") + << LOG_KV("host", _redisConfig.host) + << LOG_KV("port", _redisConfig.port) << LOG_KV("db", _redisConfig.db) + << LOG_KV("poolSize", _redisConfig.connectionPoolSize) + << LOG_KV("timeout", _redisConfig.timeout) + << LOG_KV("password", _redisConfig.password); + + sw::redis::ConnectionOptions connection_options; + connection_options.host = _redisConfig.host; // Required. + connection_options.port = _redisConfig.port; // Optional. + connection_options.db = _redisConfig.db; // Optional. Use the 0th database by default. + if (!_redisConfig.password.empty()) + { + connection_options.password = _redisConfig.password; // Optional. No password by default. + } + + // Optional. Timeout before we successfully send request to or receive response from redis. + // By default, the timeout is 0ms, i.e. never timeout and block until we send or receive + // successfully. NOTE: if any command is timed out, we throw a TimeoutError exception. + connection_options.socket_timeout = std::chrono::milliseconds(_redisConfig.timeout); + // connection_options.connect_timeout = std::chrono::milliseconds(3000); + connection_options.keep_alive = true; + + sw::redis::ConnectionPoolOptions pool_options; + // Pool size, i.e. max number of connections. + pool_options.size = _redisConfig.connectionPoolSize; + + std::shared_ptr redis = nullptr; + try + { + // Connect to Redis server with a connection pool. + redis = std::make_shared(connection_options, pool_options); + + // test whether redis functions properly + // 1. set key + // 2. get key + // 3. del key + + std::string key = "Gateway -> " + std::to_string(utcTime()); + std::string value = "Hello, FISCO-BCOS 3.0."; + + bool setR = redis->set(key, value); + if (setR) + { + GATEWAY_FACTORY_LOG(INFO) << LOG_BADGE("initRedis") << LOG_DESC("set ok"); + + auto getR = redis->get(key); + if (getR) + { + GATEWAY_FACTORY_LOG(INFO) << LOG_BADGE("initRedis") << LOG_DESC("get ok") + << LOG_KV("key", key) << LOG_KV("value", getR.value()); + } + else + { + GATEWAY_FACTORY_LOG(WARNING) + << LOG_BADGE("initRedis") << LOG_DESC("get failed, why???"); + } + + redis->del(key); + } + else + { + GATEWAY_FACTORY_LOG(WARNING) + << LOG_BADGE("initRedis") << LOG_DESC("set failed, why???"); + } + } + catch (std::exception& e) + { + // Note: redis++ exception handling + // https://github.com/sewenew/redis-plus-plus#exception + std::exception_ptr ePtr = std::make_exception_ptr(e); + + GATEWAY_FACTORY_LOG(ERROR) + << LOG_BADGE("initRedis") << LOG_DESC("initialize redis exception") + << LOG_KV("error", e.what()); + + std::throw_with_nested(e); + } + + GATEWAY_FACTORY_LOG(INFO) << LOG_BADGE("initRedis") << LOG_DESC("initialize redis completely"); + + return redis; +} + +bcos::amop::AMOPImpl::Ptr GatewayFactory::buildAMOP( + P2PInterface::Ptr _network, P2pID const& _p2pNodeID) +{ + auto topicManager = std::make_shared(m_rpcServiceName, _network); + auto amopMessageFactory = std::make_shared(); + auto requestFactory = std::make_shared(); + return std::make_shared( + topicManager, amopMessageFactory, requestFactory, _network, _p2pNodeID); +} + +bcos::amop::AMOPImpl::Ptr GatewayFactory::buildLocalAMOP( + P2PInterface::Ptr _network, P2pID const& _p2pNodeID) +{ + // Note: must set rpc to the topicManager before start the amop + auto topicManager = std::make_shared(m_rpcServiceName, _network); + auto amopMessageFactory = std::make_shared(); + auto requestFactory = std::make_shared(); + return std::make_shared( + topicManager, amopMessageFactory, requestFactory, _network, _p2pNodeID); +} diff --git a/bcos-gateway/bcos-gateway/GatewayFactory.h b/bcos-gateway/bcos-gateway/GatewayFactory.h new file mode 100644 index 0000000..db71ed4 --- /dev/null +++ b/bcos-gateway/bcos-gateway/GatewayFactory.h @@ -0,0 +1,144 @@ +/** @file GatewayFactory.h + * @author octopus + * @date 2021-05-17 + */ + +#pragma once + +#include "bcos-gateway/libratelimit/GatewayRateLimiter.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class GatewayFactory +{ +public: + using Ptr = std::shared_ptr; + GatewayFactory(std::string const& _chainID, std::string const& _rpcServiceName, + bcos::security::DataEncryptInterface::Ptr _dataEncrypt = nullptr) + : m_chainID(_chainID), m_rpcServiceName(_rpcServiceName), m_dataEncrypt(_dataEncrypt) + { + // For compatibility, p2p communication between nodes still uses the old public key analysis method + initSSLContextPubHexHandler(); + // the new old public key analysis method is used for black white list + initSSLContextPubHexHandlerWithoutExtInfo(); + initCert2PubHexHandler(); + } + + virtual ~GatewayFactory() = default; + + // init the function calc public key from the ssl context + // in this way, the public key will be parsed in front of a string of prefixes: 3082010a02820101 + // and suffixes: 0203010001 for rsa certificate + void initSSLContextPubHexHandler(); + // init the function calc public key from the ssl context + void initSSLContextPubHexHandlerWithoutExtInfo(); + // init the function calc public hex from the cert + void initCert2PubHexHandler(); + + std::function sslContextPubHandler() + { + return m_sslContextPubHandler; + } + + std::function sslContextPubHandlerWithoutExtInfo() + { + return m_sslContextPubHandlerWithoutExtInfo; + } + + std::function certPubHexHandler() + { + return m_certPubHexHandler; + } + + // build ssl context + std::shared_ptr buildSSLContext( + bool _server, const GatewayConfig::CertConfig& _certConfig); + // build sm ssl context + std::shared_ptr buildSSLContext( + bool _server, const GatewayConfig::SMCertConfig& _smCertConfig); + + // + std::shared_ptr buildRateLimiterManager( + const GatewayConfig::RateLimiterConfig& _rateLimiterConfig, + std::shared_ptr _redis); + + /** + * @brief construct Gateway + * + * @param _configPath + * @param _airVersion + * @param _entryPoint + * @param _gatewayServiceName + * @return Gateway::Ptr + */ + Gateway::Ptr buildGateway(const std::string& _configPath, bool _airVersion, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint, + std::string const& _gatewayServiceName); + + /** + * @brief construct Gateway + * + * @param _config + * @param _airVersion + * @param _entryPoint + * @param _gatewayServiceName + * @return Gateway::Ptr + */ + Gateway::Ptr buildGateway(GatewayConfig::Ptr _config, bool _airVersion, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint, + std::string const& _gatewayServiceName); + + /** + * @brief + * + * @param _rateLimiterConfig + * @param _redisConfig + * @return std::shared_ptr + */ + std::shared_ptr buildGatewayRateLimiter( + const GatewayConfig::RateLimiterConfig& _rateLimiterConfig, + const GatewayConfig::RedisConfig& _redisConfig); + + /** + * @brief + * + * @param _redisConfig + * @return std::shared_ptr + */ + std::shared_ptr initRedis(const GatewayConfig::RedisConfig& _redisConfig); + +protected: + virtual bcos::amop::AMOPImpl::Ptr buildAMOP( + bcos::gateway::P2PInterface::Ptr _network, bcos::gateway::P2pID const& _p2pNodeID); + virtual bcos::amop::AMOPImpl::Ptr buildLocalAMOP( + bcos::gateway::P2PInterface::Ptr _network, bcos::gateway::P2pID const& _p2pNodeID); + +private: + std::function m_sslContextPubHandler; + std::function m_sslContextPubHandlerWithoutExtInfo; + + std::function m_certPubHexHandler; + + void initFailOver(std::shared_ptr _gateWay, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint); + +private: + std::string m_chainID; + std::string m_rpcServiceName; + + bcos::security::DataEncryptInterface::Ptr m_dataEncrypt{nullptr}; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/gateway/FrontServiceInfo.h b/bcos-gateway/bcos-gateway/gateway/FrontServiceInfo.h new file mode 100644 index 0000000..90a71d3 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/FrontServiceInfo.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FrontServiceInfo.h + * @author: octopus + * @date 2021-05-13 + */ +#pragma once +#include "bcos-tars-protocol/Common.h" +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +class FrontServiceInfo +{ +public: + using Ptr = std::shared_ptr; + FrontServiceInfo(std::string _nodeID, bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::protocol::NodeType _type, bcostars::FrontServicePrx _frontServicePrx) + : m_nodeID(_nodeID), + m_nodeType(_type), + m_frontService(_frontService), + m_frontServicePrx(_frontServicePrx) + {} + bcos::front::FrontServiceInterface::Ptr frontService() { return m_frontService; } + bcostars::FrontServicePrx frontServicePrx() { return m_frontServicePrx; } + + bool unreachable() + { + if (!m_frontServicePrx) + { + return false; + } + + return !bcostars::checkConnection( + "FrontService", "unreachable", m_frontServicePrx, nullptr, false); + } + + std::string const& nodeID() const { return m_nodeID; } + + bcos::protocol::NodeType nodeType() const { return m_nodeType; } + + // the protocolInfo of the nodeService + void setProtocolInfo(bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo) + { + m_protocolInfo = _protocolInfo; + } + bcos::protocol::ProtocolInfo::ConstPtr protocolInfo() const { return m_protocolInfo; } + +private: + std::string m_nodeID; + bcos::protocol::NodeType m_nodeType; + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcostars::FrontServicePrx m_frontServicePrx; + + bcos::protocol::ProtocolInfo::ConstPtr m_protocolInfo; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/GatewayMessageExtAttributes.h b/bcos-gateway/bcos-gateway/gateway/GatewayMessageExtAttributes.h new file mode 100644 index 0000000..6217ab5 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/GatewayMessageExtAttributes.h @@ -0,0 +1,34 @@ +/** @file GatewayConfig.h + * @author octopus + * @date 2021-05-19 + */ + +#pragma once + +#include + +namespace bcos +{ +namespace gateway +{ + +class GatewayMessageExtAttributes : public MessageExtAttributes +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + uint16_t moduleID() { return m_moduleID; } + void setModuleID(uint16_t _moduleID) { m_moduleID = _moduleID; } + + std::string groupID() { return m_groupID; } + void setGroupID(const std::string& _groupID) { m_groupID = _groupID; } + +private: + uint16_t m_moduleID = 0; + std::string m_groupID; +}; + +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.cpp b/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.cpp new file mode 100644 index 0000000..82225ad --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.cpp @@ -0,0 +1,333 @@ + +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayNodeManager.cpp + * @author: octopus + * @date 2021-05-13 + */ +#include "GatewayNodeManager.h" +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace gateway; +using namespace bcos::protocol; +using namespace bcos::group; +using namespace bcos::crypto; + +GatewayNodeManager::GatewayNodeManager(std::string const& _uuid, P2pID const& _nodeID, + std::shared_ptr _keyFactory, P2PInterface::Ptr _p2pInterface) + : GatewayNodeManager(_uuid, _keyFactory, _p2pInterface) +{ + m_uuid = _uuid; + if (_uuid.size() == 0) + { + m_uuid = _nodeID; + } + m_p2pNodeID = _nodeID; + m_p2pInterface = _p2pInterface; + // SyncNodeSeq + m_p2pInterface->registerHandlerByMsgType(GatewayMessageType::SyncNodeSeq, + boost::bind(&GatewayNodeManager::onReceiveStatusSeq, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + // RequestNodeStatus + m_p2pInterface->registerHandlerByMsgType(GatewayMessageType::RequestNodeStatus, + boost::bind(&GatewayNodeManager::onRequestNodeStatus, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + // ResponseNodeStatus + m_p2pInterface->registerHandlerByMsgType(GatewayMessageType::ResponseNodeStatus, + boost::bind(&GatewayNodeManager::onReceiveNodeStatus, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + m_timer = std::make_shared(SEQ_SYNC_PERIOD, "seqSync"); + // broadcast seq periodically + m_timer->registerTimeoutHandler([this]() { broadcastStatusSeq(); }); +} + +void GatewayNodeManager::stop() +{ + if (m_p2pInterface) + { + m_p2pInterface->eraseHandlerByMsgType(GatewayMessageType::SyncNodeSeq); + m_p2pInterface->eraseHandlerByMsgType(GatewayMessageType::RequestNodeStatus); + m_p2pInterface->eraseHandlerByMsgType(GatewayMessageType::ResponseNodeStatus); + } + if (m_timer) + { + m_timer->stop(); + } +} + +bool GatewayNodeManager::registerNode(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::protocol::NodeType _nodeType, bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo) +{ + auto ret = + m_localRouterTable->insertNode(_groupID, _nodeID, _nodeType, _frontService, _protocolInfo); + if (ret) + { + increaseSeq(); + } + return ret; +} + +bool GatewayNodeManager::unregisterNode(const std::string& _groupID, std::string const& _nodeID) +{ + auto ret = m_localRouterTable->removeNode(_groupID, _nodeID); + if (ret) + { + increaseSeq(); + } + return ret; +} + +void GatewayNodeManager::onReceiveStatusSeq( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg) +{ + if (_e.errorCode()) + { + NODE_MANAGER_LOG(WARNING) << LOG_DESC("onReceiveStatusSeq error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + auto statusSeq = boost::asio::detail::socket_ops::network_to_host_long( + *((uint32_t*)_msg->payload()->data())); + auto const& from = (_msg->srcP2PNodeID().size() > 0) ? _msg->srcP2PNodeID() : _session->p2pID(); + auto statusSeqChanged = statusChanged(from, statusSeq); + if (!statusSeqChanged) + { + return; + } + NODE_MANAGER_LOG(TRACE) << LOG_DESC("onReceiveStatusSeq request nodeStatus") + << LOG_KV("from", from) << LOG_KV("statusSeq", statusSeq); + m_p2pInterface->asyncSendMessageByP2PNodeID( + GatewayMessageType::RequestNodeStatus, from, bytesConstRef()); +} + +bool GatewayNodeManager::statusChanged(std::string const& _p2pNodeID, uint32_t _seq) +{ + bool ret = true; + ReadGuard l(x_p2pID2Seq); + auto it = m_p2pID2Seq.find(_p2pNodeID); + if (it != m_p2pID2Seq.end()) + { + ret = (_seq > it->second); + } + return ret; +} + +void GatewayNodeManager::onReceiveNodeStatus( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg) +{ + if (_e.errorCode()) + { + NODE_MANAGER_LOG(WARNING) << LOG_DESC("onReceiveNodeStatus error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + auto gatewayNodeStatus = m_gatewayNodeStatusFactory->createGatewayNodeStatus(); + gatewayNodeStatus->decode(bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + auto const& from = (_msg->srcP2PNodeID().size() > 0) ? _msg->srcP2PNodeID() : _session->p2pID(); + + NODE_MANAGER_LOG(INFO) << LOG_DESC("onReceiveNodeStatus") << LOG_KV("from", from) + << LOG_KV("seq", gatewayNodeStatus->seq()) + << LOG_KV("uuid", gatewayNodeStatus->uuid()); + updatePeerStatus(from, gatewayNodeStatus); +} + +void GatewayNodeManager::updatePeerStatus(std::string const& _p2pID, GatewayNodeStatus::Ptr _status) +{ + auto seq = _status->seq(); + { + UpgradableGuard l(x_p2pID2Seq); + if (m_p2pID2Seq.count(_p2pID) && (m_p2pID2Seq.at(_p2pID) >= seq)) + { + return; + } + UpgradeGuard ul(l); + m_p2pID2Seq[_p2pID] = seq; + } + // remove peers info + // insert the latest peers info + m_peersRouterTable->updatePeerStatus(_p2pID, _status); + // notify nodeIDs to front service + syncLatestNodeIDList(); +} + +bool GatewayNodeManager::updateFrontServiceInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + auto updated = m_localRouterTable->updateGroupNodeInfos(_groupInfo); + if (updated) + { + increaseSeq(); + syncLatestNodeIDList(); + } + return updated; +} + +void GatewayNodeManager::onRequestNodeStatus( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg) +{ + if (_e.errorCode()) + { + NODE_MANAGER_LOG(WARNING) << LOG_DESC("onRequestNodeStatus network error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + auto const& from = (_msg->srcP2PNodeID().size() > 0) ? _msg->srcP2PNodeID() : _session->p2pID(); + auto nodeStatusData = generateNodeStatus(); + if (!nodeStatusData) + { + NODE_MANAGER_LOG(WARNING) << LOG_DESC("onRequestNodeStatus: generate nodeInfo error") + << LOG_KV("from", from); + return; + } + NODE_MANAGER_LOG(TRACE) << LOG_DESC("onRequestNodeStatus") << LOG_KV("from", from); + m_p2pInterface->asyncSendMessageByP2PNodeID(GatewayMessageType::ResponseNodeStatus, from, + bytesConstRef((byte*)nodeStatusData->data(), nodeStatusData->size())); +} + +bytesPointer GatewayNodeManager::generateNodeStatus() +{ + auto nodeStatus = m_gatewayNodeStatusFactory->createGatewayNodeStatus(); + nodeStatus->setUUID(m_uuid); + nodeStatus->setSeq(statusSeq()); + auto nodeList = m_localRouterTable->nodeList(); + std::vector groupNodeInfos; + for (auto const& it : nodeList) + { + auto groupNodeInfo = m_gatewayNodeStatusFactory->createGroupNodeInfo(); + groupNodeInfo->setGroupID(it.first); + // get nodeID and type + std::vector nodeIDList; + std::vector nodeTypeList; + std::vector protocolList; + + auto groupType = GroupType::OUTSIDE_GROUP; + bool hasObserverNode = false; + for (auto const& pNodeInfo : it.second) + { + nodeIDList.emplace_back(pNodeInfo.first); + nodeTypeList.emplace_back(pNodeInfo.second->nodeType()); + protocolList.emplace_back(pNodeInfo.second->protocolInfo()); + if ((NodeType)(pNodeInfo.second->nodeType()) == NodeType::CONSENSUS_NODE) + { + groupType = GroupType::GROUP_WITH_CONSENSUS_NODE; + } + // the group has observerNode + if ((NodeType)(pNodeInfo.second->nodeType()) == NodeType::OBSERVER_NODE) + { + hasObserverNode = true; + } + } + // the group has only observerNode + if (groupType == GroupType::OUTSIDE_GROUP && hasObserverNode) + { + groupType = GroupType::GROUP_WITHOUT_CONSENSUS_NODE; + } + groupNodeInfo->setType(groupType); + groupNodeInfo->setNodeIDList(std::move(nodeIDList)); + groupNodeInfo->setNodeTypeList(std::move(nodeTypeList)); + groupNodeInfo->setNodeProtocolList(std::move(protocolList)); + groupNodeInfos.emplace_back(groupNodeInfo); + NODE_MANAGER_LOG(INFO) << LOG_DESC("generateNodeStatus") << LOG_KV("groupType", groupType) + << LOG_KV("groupID", it.first) + << LOG_KV("nodeListSize", groupNodeInfo->nodeIDList().size()) + << LOG_KV("nodeTypeListSize", groupNodeInfo->nodeTypeList().size()) + << LOG_KV("seq", statusSeq()); + } + NODE_MANAGER_LOG(INFO) << LOG_DESC("generateNodeStatus") + << LOG_KV("nodeListSize", nodeList.size()); + nodeStatus->setGroupNodeInfos(std::move(groupNodeInfos)); + return nodeStatus->encode(); +} + +void GatewayNodeManager::onRemoveNodeIDs(const P2pID& _p2pID) +{ + NODE_MANAGER_LOG(INFO) << LOG_DESC("onRemoveNodeIDs") << LOG_KV("p2pid", _p2pID); + { + // remove statusSeq info + WriteGuard l(x_p2pID2Seq); + m_p2pID2Seq.erase(_p2pID); + } + m_peersRouterTable->removeP2PID(_p2pID); + // notify nodeIDs to front service + syncLatestNodeIDList(); +} + + +void GatewayNodeManager::broadcastStatusSeq() +{ + m_timer->restart(); + auto message = + std::static_pointer_cast(m_p2pInterface->messageFactory()->buildMessage()); + message->setPacketType(GatewayMessageType::SyncNodeSeq); + auto seq = statusSeq(); + auto statusSeq = boost::asio::detail::socket_ops::host_to_network_long(seq); + auto payload = std::make_shared((byte*)&statusSeq, (byte*)&statusSeq + 4); + message->setPayload(payload); + NODE_MANAGER_LOG(TRACE) << LOG_DESC("broadcastStatusSeq") << LOG_KV("seq", seq); + m_p2pInterface->asyncBroadcastMessage(message, Options()); +} + +void GatewayNodeManager::syncLatestNodeIDList() +{ + auto nodeList = m_localRouterTable->nodeList(); + for (auto const& it : nodeList) + { + auto groupID = it.first; + auto const& localNodeEntryPoints = it.second; + auto groupNodeInfos = getGroupNodeInfoList(groupID); + NODE_MANAGER_LOG(INFO) << LOG_DESC("syncLatestNodeIDList") << LOG_KV("groupID", groupID) + << LOG_KV("nodeCount", groupNodeInfos->nodeIDList().size()); + for (const auto& entry : localNodeEntryPoints) + { + entry.second->frontService()->onReceiveGroupNodeInfo( + groupID, groupNodeInfos, [](Error::Ptr _error) { + if (!_error) + { + return; + } + NODE_MANAGER_LOG(WARNING) + << LOG_DESC("syncLatestNodeIDList onReceiveGroupNodeInfo callback") + << LOG_KV("codeCode", _error->errorCode()) + << LOG_KV("codeMessage", _error->errorMessage()); + }); + } + } +} + +GroupNodeInfo::Ptr GatewayNodeManager::getGroupNodeInfoList(const std::string& _groupID) +{ + auto groupNodeInfo = m_gatewayNodeStatusFactory->createGroupNodeInfo(); + groupNodeInfo->setGroupID(_groupID); + + m_localRouterTable->getGroupNodeInfoList(groupNodeInfo, _groupID); + m_peersRouterTable->getGroupNodeInfoList(groupNodeInfo, _groupID); + return groupNodeInfo; +} + +std::map> GatewayNodeManager::peersNodeIDList( + std::string const& _p2pNodeID) +{ + if (_p2pNodeID == m_p2pNodeID) + { + return m_localRouterTable->nodeListInfo(); + } + return m_peersRouterTable->peersNodeIDList(_p2pNodeID); +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.h b/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.h new file mode 100644 index 0000000..075a805 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/GatewayNodeManager.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayNodeManager.h + * @author: octopus + * @date 2021-05-13 + */ + +#pragma once +#include "LocalRouterTable.h" +#include "PeersRouterTable.h" +#include +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +class GatewayNodeManager +{ +public: + using Ptr = std::shared_ptr; + GatewayNodeManager(std::string const& _uuid, P2pID const& _nodeID, + std::shared_ptr _keyFactory, P2PInterface::Ptr _p2pInterface); + virtual ~GatewayNodeManager() {} + + virtual void start() { m_timer->start(); } + virtual void stop(); + + void onRemoveNodeIDs(const P2pID& _p2pID); + + GroupNodeInfo::Ptr getGroupNodeInfoList(const std::string& _groupID); + + virtual bool registerNode(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::protocol::NodeType _nodeType, bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo); + virtual bool unregisterNode(const std::string& _groupID, std::string const& _nodeID); + // for multi-group support + virtual bool updateFrontServiceInfo(bcos::group::GroupInfo::Ptr _groupInfo); + + LocalRouterTable::Ptr localRouterTable() { return m_localRouterTable; } + PeersRouterTable::Ptr peersRouterTable() { return m_peersRouterTable; } + std::shared_ptr keyFactory() { return m_keyFactory; } + + std::map> peersNodeIDList( + std::string const& _p2pNodeID); + +protected: + // for ut + GatewayNodeManager(std::string const& _uuid, + std::shared_ptr _keyFactory, P2PInterface::Ptr _p2pInterface) + : m_uuid(_uuid), + m_keyFactory(_keyFactory), + m_localRouterTable(std::make_shared(_keyFactory)), + m_peersRouterTable(std::make_shared(_uuid, _keyFactory, _p2pInterface)), + m_gatewayNodeStatusFactory(std::make_shared()) + {} + + uint32_t increaseSeq() + { + uint32_t statusSeq = ++m_statusSeq; + return statusSeq; + } + bool statusChanged(std::string const& _p2pNodeID, uint32_t _seq); + uint32_t statusSeq() { return m_statusSeq; } + // Note: must broadcast the status seq periodically ensure that the seq can be synced to + // restarted or re-connected nodes + virtual void broadcastStatusSeq(); + + virtual void onReceiveStatusSeq( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg); + virtual void onRequestNodeStatus( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg); + virtual void onReceiveNodeStatus( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _msg); + virtual bytesPointer generateNodeStatus(); + virtual void syncLatestNodeIDList(); + + virtual void updatePeerStatus(std::string const& _p2pID, GatewayNodeStatus::Ptr _status); + +protected: + P2pID m_p2pNodeID; + std::string m_uuid; + std::shared_ptr m_keyFactory; + P2PInterface::Ptr m_p2pInterface; + // statusSeq + std::atomic m_statusSeq{1}; + // P2pID => statusSeq + std::map m_p2pID2Seq; + mutable SharedMutex x_p2pID2Seq; + + LocalRouterTable::Ptr m_localRouterTable; + PeersRouterTable::Ptr m_peersRouterTable; + + unsigned const SEQ_SYNC_PERIOD = 1000; + std::shared_ptr m_timer; + + GatewayNodeStatusFactory::Ptr m_gatewayNodeStatusFactory; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/gateway/GatewayStatus.cpp b/bcos-gateway/bcos-gateway/gateway/GatewayStatus.cpp new file mode 100644 index 0000000..6f36374 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/GatewayStatus.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayStatus.h + * @author: yujiechen + * @date 2022-1-07 + */ +#include "GatewayStatus.h" + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::protocol; + +void GatewayStatus::update(std::string const& _p2pNodeID, GatewayNodeStatus::ConstPtr _nodeStatus) +{ + if (_nodeStatus->uuid() != m_uuid) + { + return; + } + UpgradableGuard l(x_groupP2PNodeList); + auto const& groupNodeInfos = _nodeStatus->groupNodeInfos(); + for (auto const& node : groupNodeInfos) + { + auto const& groupID = node->groupID(); + auto type = (GroupType)(node->type()); + if (m_groupP2PNodeList.count(groupID) && m_groupP2PNodeList[groupID].count(type) && + m_groupP2PNodeList[groupID][type].count(_p2pNodeID)) + { + continue; + } + UpgradeGuard ul(l); + // remove the _p2pNodeID from the cache + removeP2PIDWithoutLock(groupID, _p2pNodeID); + // insert the new p2pNodeID + if (!m_groupP2PNodeList.count(groupID) || !m_groupP2PNodeList[groupID].count(type)) + { + m_groupP2PNodeList[groupID][type] = std::set(); + } + (m_groupP2PNodeList[groupID][type]).insert(_p2pNodeID); + ROUTER_LOG(INFO) << LOG_DESC("GatewayStatus: update") << LOG_KV("group", groupID) + << LOG_KV("type", type) << LOG_KV("p2pID", _p2pNodeID); + } +} + +bool GatewayStatus::randomChooseP2PNode( + std::string& _p2pNodeID, uint16_t _type, std::string const& _groupID) const +{ + auto ret = false; + // If need to send a message to a consensus node, select the consensus node first + if (_type & NodeType::CONSENSUS_NODE) + { + ret = randomChooseNode(_p2pNodeID, GroupType::GROUP_WITH_CONSENSUS_NODE, _groupID); + } + // select the observer node + if (!ret && _type & NodeType::OBSERVER_NODE) + { + ret = randomChooseNode(_p2pNodeID, GroupType::GROUP_WITHOUT_CONSENSUS_NODE, _groupID); + } + // select the OUTSIDE_GROUP(AMOP message needed) + if (!ret && _type & NodeType::NODE_OUTSIDE_GROUP) + { + ret = randomChooseNode(_p2pNodeID, GroupType::OUTSIDE_GROUP, _groupID); + } + return ret; +} + +bool GatewayStatus::randomChooseNode( + std::string& _choosedNode, GroupType _type, std::string const& _groupID) const +{ + std::set p2pNodeList; + { + ReadGuard l(x_groupP2PNodeList); + if (!m_groupP2PNodeList.count(_groupID) || !m_groupP2PNodeList.at(_groupID).count(_type)) + { + return false; + } + p2pNodeList = m_groupP2PNodeList.at(_groupID).at(_type); + } + if (p2pNodeList.size() == 0) + { + return false; + } + srand(utcTime()); + auto selectedP2PNode = rand() % p2pNodeList.size(); + auto it = p2pNodeList.begin(); + if (selectedP2PNode > 0) + { + std::advance(it, selectedP2PNode); + } + _choosedNode = *it; + return true; +} + +void GatewayStatus::removeP2PIDWithoutLock( + std::string const& _groupID, std::string const& _p2pNodeID) +{ + if (!m_groupP2PNodeList.count(_groupID)) + { + return; + } + auto& p2pNodeList = m_groupP2PNodeList[_groupID]; + for (auto it = p2pNodeList.begin(); it != p2pNodeList.end();) + { + if (it->second.count(_p2pNodeID)) + { + it->second.erase(_p2pNodeID); + } + if (it->second.size() == 0) + { + it = p2pNodeList.erase(it); + continue; + } + it++; + } +} + +void GatewayStatus::removeP2PNode(std::string const& _p2pNodeID) +{ + WriteGuard l(x_groupP2PNodeList); + for (auto pGroupInfo = m_groupP2PNodeList.begin(); pGroupInfo != m_groupP2PNodeList.end();) + { + auto& p2pNodeList = m_groupP2PNodeList[pGroupInfo->first]; + removeP2PIDWithoutLock(pGroupInfo->first, _p2pNodeID); + if (p2pNodeList.size() == 0) + { + pGroupInfo = m_groupP2PNodeList.erase(pGroupInfo); + continue; + } + pGroupInfo++; + } + ROUTER_LOG(INFO) << LOG_DESC("GatewayStatus: removeP2PNode") << LOG_KV("p2pID", _p2pNodeID); +} diff --git a/bcos-gateway/bcos-gateway/gateway/GatewayStatus.h b/bcos-gateway/bcos-gateway/gateway/GatewayStatus.h new file mode 100644 index 0000000..e1f7f3d --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/GatewayStatus.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayStatus.h + * @author: yujiechen + * @date 2022-1-07 + */ +#pragma once +#include "bcos-gateway/Common.h" +#include +namespace bcos +{ +namespace gateway +{ +class GatewayStatus +{ +public: + using Ptr = std::shared_ptr; + GatewayStatus(std::string const& _uuid) : m_uuid(_uuid) {} + virtual ~GatewayStatus() {} + + std::string const& uuid() const { return m_uuid; } + + // update the gateway info when receive new gatewayNodeStatus + void update(std::string const& _p2pNodeID, GatewayNodeStatus::ConstPtr _nodeStatus); + + // random choose the p2pNode to send message + bool randomChooseP2PNode( + std::string& _p2pNodeID, uint16_t _type, std::string const& _groupID) const; + + // remove the p2p node from the gatewayInfo after the node disconnected + void removeP2PNode(std::string const& _p2pNodeID); + +protected: + bool randomChooseNode( + std::string& _choosedNode, GroupType _type, std::string const& _groupID) const; + + void removeP2PIDWithoutLock(std::string const& _groupID, std::string const& _p2pNodeID); + +private: + std::string m_uuid; + // groupID => groupType => P2PNodeIDList + std::map>> m_groupP2PNodeList; + mutable SharedMutex x_groupP2PNodeList; +}; + +class GatewayStatusFactory +{ +public: + using Ptr = std::shared_ptr; + GatewayStatusFactory() = default; + virtual ~GatewayStatusFactory() {} + + virtual GatewayStatus::Ptr createGatewayInfo(std::string const& _uuid) + { + return std::make_shared(_uuid); + } +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.cpp b/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.cpp new file mode 100644 index 0000000..a8bff1d --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.cpp @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LocalRouterTable.cpp + * @author: octopus + * @date 2021-12-29 + */ +#include "LocalRouterTable.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::gateway; +using namespace bcos::front; +using namespace bcos::crypto; + +FrontServiceInfo::Ptr LocalRouterTable::getFrontService( + const std::string& _groupID, NodeIDPtr _nodeID) const +{ + ReadGuard l(x_nodeList); + if (!m_nodeList.count(_groupID) || !m_nodeList.at(_groupID).count(_nodeID->hex())) + { + return nullptr; + } + return m_nodeList.at(_groupID).at(_nodeID->hex()); +} + +std::vector LocalRouterTable::getGroupFrontServiceList( + const std::string& _groupID) const +{ + std::vector nodeServiceList; + ReadGuard l(x_nodeList); + if (!m_nodeList.count(_groupID)) + { + return nodeServiceList; + } + for (auto const& it : m_nodeList.at(_groupID)) + { + nodeServiceList.emplace_back(it.second); + } + return nodeServiceList; +} + +void LocalRouterTable::getGroupNodeInfoList( + GroupNodeInfo::Ptr _groupNodeInfo, const std::string& _groupID) const +{ + ReadGuard l(x_nodeList); + if (!m_nodeList.count(_groupID)) + { + return; + } + for (auto const& item : m_nodeList.at(_groupID)) + { + _groupNodeInfo->appendNodeID(item.first); + _groupNodeInfo->appendProtocol(item.second->protocolInfo()); + } +} + +std::map> LocalRouterTable::nodeListInfo() const +{ + std::map> nodeList; + ReadGuard l(x_nodeList); + for (auto const& it : m_nodeList) + { + auto groupID = it.first; + if (!nodeList.count(groupID)) + { + nodeList[groupID] = std::map(); + } + auto const& infos = it.second; + for (auto const& nodeIt : infos) + { + auto nodeID = nodeIt.first; + auto nodeType = nodeIt.second->nodeType(); + nodeList[groupID].insert(std::pair(nodeID, nodeType)); + } + } + return nodeList; +} + +/** + * @brief: insert node + * @param _groupID: groupID + * @param _nodeID: nodeID + * @param _frontService: FrontService + */ +bool LocalRouterTable::insertNode(const std::string& _groupID, NodeIDPtr _nodeID, + bcos::protocol::NodeType _type, FrontServiceInterface::Ptr _frontService, + bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo) +{ + auto nodeIDStr = _nodeID->hex(); + UpgradableGuard l(x_nodeList); + if (m_nodeList.count(_groupID) && m_nodeList[_groupID].count(nodeIDStr)) + { + auto nodeType = (m_nodeList.at(_groupID).at(nodeIDStr))->nodeType(); + if (_type == nodeType) + { + ROUTER_LOG(INFO) << LOG_DESC("insertNode: the node has already existed") + << LOG_KV("groupID", _groupID) << LOG_KV("nodeID", nodeIDStr) + << LOG_KV("nodeType", _type); + return false; + } + } + auto frontServiceInfo = + std::make_shared(nodeIDStr, _frontService, _type, nullptr); + frontServiceInfo->setProtocolInfo(_protocolInfo); + UpgradeGuard ul(l); + m_nodeList[_groupID][nodeIDStr] = frontServiceInfo; + ROUTER_LOG(INFO) << LOG_DESC("insertNode") << LOG_KV("groupID", _groupID) + << LOG_KV("minVersion", _protocolInfo->minVersion()) + << LOG_KV("maxVersion", _protocolInfo->maxVersion()) + << LOG_KV("nodeID", nodeIDStr) << LOG_KV("nodeType", _type); + return true; +} + +/** + * @brief: removeNode + * @param _groupID: groupID + * @param _nodeID: nodeID + */ +bool LocalRouterTable::removeNode(const std::string& _groupID, std::string const& _nodeID) +{ + UpgradableGuard l(x_nodeList); + if (!m_nodeList.count(_groupID) || !m_nodeList[_groupID].count(_nodeID)) + { + ROUTER_LOG(INFO) << LOG_DESC("removeNode: the node is not registered") + << LOG_KV("groupID", _groupID) << LOG_KV("nodeID", _nodeID); + return false; + } + // erase the node from m_nodeList + UpgradeGuard ul(l); + (m_nodeList[_groupID]).erase(_nodeID); + if (m_nodeList.at(_groupID).empty()) + { + m_nodeList.erase(_groupID); + } + ROUTER_LOG(INFO) << LOG_DESC("removeNode") << LOG_KV("groupID", _groupID) + << LOG_KV("nodeID", _nodeID); + return true; +} + +bool LocalRouterTable::updateGroupNodeInfos(bcos::group::GroupInfo::Ptr _groupInfo) +{ + UpgradableGuard l(x_nodeList); + auto const& groupID = _groupInfo->groupID(); + auto const& nodeInfos = _groupInfo->nodeInfos(); + bool frontServiceUpdated = false; + for (auto const& it : nodeInfos) + { + auto const& nodeInfo = it.second; + auto const& nodeID = nodeInfo->nodeID(); + // the node is registered + if (m_nodeList.count(groupID) && m_nodeList[groupID].count(nodeID)) + { + auto currentNodeInfo = m_nodeList.at(groupID).at(nodeID); + auto nodeType = currentNodeInfo->nodeType(); + auto protocol = nodeInfo->nodeProtocol(); + auto currentProtocol = currentNodeInfo->protocolInfo(); + if (nodeType == nodeInfo->nodeType() && + (protocol->minVersion() == currentProtocol->minVersion()) && + (protocol->maxVersion() == currentProtocol->maxVersion())) + { + continue; + } + } + // insert the new node + auto serviceName = nodeInfo->serviceName(bcos::protocol::FRONT); + if (serviceName.size() == 0) + { + continue; + } + + // TODO:: tars + auto frontPrx = bcostars::createServantProxy(serviceName); + auto frontClient = std::make_shared(frontPrx, m_keyFactory); + + UpgradeGuard ul(l); + auto frontServiceInfo = std::make_shared( + nodeInfo->nodeID(), frontClient, nodeInfo->nodeType(), frontPrx); + frontServiceInfo->setProtocolInfo(nodeInfo->nodeProtocol()); + m_nodeList[groupID][nodeID] = frontServiceInfo; + ROUTER_LOG(INFO) << LOG_DESC("updateGroupNodeInfos: insert frontService for the node") + << LOG_KV("nodeID", nodeInfo->nodeID()) + << LOG_KV("minVersion", nodeInfo->nodeProtocol()->minVersion()) + << LOG_KV("maxVersion", nodeInfo->nodeProtocol()->maxVersion()) + << LOG_KV("serviceName", serviceName) << printNodeInfo(nodeInfo); + frontServiceUpdated = true; + } + return frontServiceUpdated; +} + +bool LocalRouterTable::eraseUnreachableNodes() +{ + bool updated = false; + UpgradableGuard l(x_nodeList); + for (auto it = m_nodeList.begin(); it != m_nodeList.end();) + { + auto& nodesInfo = it->second; + for (auto pFrontService = nodesInfo.begin(); pFrontService != nodesInfo.end();) + { + auto frontService = pFrontService->second; + if (frontService->unreachable()) + { + ROUTER_LOG(INFO) << LOG_DESC("remove FrontService for unreachable") + << LOG_KV("node", pFrontService->first); + UpgradeGuard ul(l); + pFrontService = nodesInfo.erase(pFrontService); + updated = true; + continue; + } + pFrontService++; + } + if (nodesInfo.empty()) + { + UpgradeGuard ul(l); + it = m_nodeList.erase(it); + updated = true; + continue; + } + it++; + } + return updated; +} + +bool LocalRouterTable::asyncBroadcastMsg(uint16_t _nodeType, const std::string& _groupID, + uint16_t _moduleID, NodeIDPtr _srcNodeID, bytesConstRef _payload) +{ + auto frontServiceList = getGroupFrontServiceList(_groupID); + if (frontServiceList.size() == 0) + { + return false; + } + for (auto const& it : frontServiceList) + { + if (it->nodeID() == _srcNodeID->hex()) + { + continue; + } + // not expected to send message to the type of node + if ((_nodeType & it->nodeType()) == 0) + { + continue; + } + auto frontService = it->frontService(); + auto dstNodeID = it->nodeID(); + ROUTER_LOG(TRACE) << LOG_BADGE( + "LocalRouterTable: dispatcher broadcast-type message to node") + << LOG_KV("type", _nodeType) << LOG_KV("groupID", _groupID) + << LOG_KV("moduleID", _moduleID) << LOG_KV("payloadSize", _payload.size()) + << LOG_KV("dst", dstNodeID); + frontService->onReceiveMessage(_groupID, _srcNodeID, _payload, + [_groupID, _moduleID, _srcNodeID, dstNodeID](Error::Ptr _error) { + if (_error) + { + GATEWAY_LOG(ERROR) + << LOG_DESC("ROUTER_LOG error") << LOG_KV("groupID", _groupID) + << LOG_KV("moduleID", _moduleID) << LOG_KV("src", _srcNodeID->hex()) + << LOG_KV("dst", dstNodeID) << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + return true; +} + + +// send message to the local nodes +bool LocalRouterTable::sendMessage(const std::string& _groupID, NodeIDPtr _srcNodeID, + NodeIDPtr _dstNodeID, bytesConstRef _payload, ErrorRespFunc _errorRespFunc) +{ + auto frontServiceInfo = getFrontService(_groupID, _dstNodeID); + if (!frontServiceInfo) + { + return false; + } + frontServiceInfo->frontService()->onReceiveMessage( + _groupID, _srcNodeID, _payload, [_errorRespFunc](Error::Ptr _error) { + if (_errorRespFunc) + { + _errorRespFunc(_error); + } + }); + return true; +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.h b/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.h new file mode 100644 index 0000000..449c565 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/LocalRouterTable.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LocalRouterTable.h + * @author: octopus + * @date 2021-12-29 + */ +#pragma once +#include "FrontServiceInfo.h" +#include "bcos-gateway/libp2p/P2PSession.h" +#include +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +class LocalRouterTable +{ +public: + using Ptr = std::shared_ptr; + using GroupNodeListType = std::map>; + LocalRouterTable(bcos::crypto::KeyFactory::Ptr _keyFactory) : m_keyFactory(_keyFactory) {} + virtual ~LocalRouterTable() {} + + FrontServiceInfo::Ptr getFrontService( + const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID) const; + + std::vector getGroupFrontServiceList(const std::string& _groupID) const; + void getGroupNodeInfoList(GroupNodeInfo::Ptr _groupNodeInfo, const std::string& _groupID) const; + bool insertNode(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::protocol::NodeType _type, bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo); + bool removeNode(const std::string& _groupID, std::string const& _nodeID); + + std::map> nodeListInfo() const; + + bool updateGroupNodeInfos(bcos::group::GroupInfo::Ptr _groupInfo); + bool eraseUnreachableNodes(); + + // Note: copy to ensure thread-safe + // groupID => nodeID => FrontServiceInfo + GroupNodeListType nodeList() const + { + ReadGuard l(x_nodeList); + return m_nodeList; + } + + bool asyncBroadcastMsg(uint16_t _nodeType, const std::string& _groupID, uint16_t _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bytesConstRef _payload); + + bool sendMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _srcNodeID, + bcos::crypto::NodeIDPtr _dstNodeID, bytesConstRef _payload, ErrorRespFunc _errorRespFunc); + +private: + bcos::crypto::KeyFactory::Ptr m_keyFactory; + // groupID => nodeID => FrontServiceInfo + GroupNodeListType m_nodeList; + mutable SharedMutex x_nodeList; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.cpp b/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.cpp new file mode 100644 index 0000000..e662576 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PeersRouterTable.cpp + * @author: octopus + * @date 2021-12-29 + */ +#include "PeersRouterTable.h" +#include "bcos-utilities/BoostLog.h" + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::gateway; +using namespace bcos::crypto; + +void PeersRouterTable::getGroupNodeInfoList( + GroupNodeInfo::Ptr _groupInfo, const std::string& _groupID) const +{ + ReadGuard l(x_groupNodeList); + if (!m_groupNodeList.count(_groupID)) + { + return; + } + for (auto const& it : m_groupNodeList.at(_groupID)) + { + auto nodeID = it.first; + _groupInfo->appendNodeID(nodeID); + if (m_nodeProtocolInfo.count(nodeID)) + { + _groupInfo->appendProtocol(m_nodeProtocolInfo.at(nodeID)); + } + } +} + +std::set PeersRouterTable::queryP2pIDs( + const std::string& _groupID, const std::string& _nodeID) const +{ + ReadGuard l(x_groupNodeList); + if (!m_groupNodeList.count(_groupID) || !m_groupNodeList.at(_groupID).count(_nodeID)) + { + return std::set(); + } + return m_groupNodeList.at(_groupID).at(_nodeID); +} + +std::set PeersRouterTable::queryP2pIDsByGroupID(const std::string& _groupID) const +{ + std::set p2pNodeIDList; + ReadGuard l(x_groupNodeList); + if (!m_groupNodeList.count(_groupID)) + { + return p2pNodeIDList; + } + for (const auto& it : m_groupNodeList.at(_groupID)) + { + p2pNodeIDList.insert(it.second.begin(), it.second.end()); + } + return p2pNodeIDList; +} + +void PeersRouterTable::updatePeerStatus( + P2pID const& _p2pID, GatewayNodeStatus::Ptr _gatewayNodeStatus) +{ + auto const& nodeList = _gatewayNodeStatus->groupNodeInfos(); + ROUTER_LOG(INFO) << LOG_DESC("updatePeerStatus") + << LOG_KV("gatewayUUID", _gatewayNodeStatus->uuid()) + << LOG_KV("nodeList", nodeList.size()); + // remove the old nodeList from the groupNodeList + removeP2PIDFromGroupNodeList(_p2pID); + // insert the new nodeList into the groupNodeList + batchInsertNodeList(_p2pID, nodeList); + // update the peers status + updatePeerNodeList(_p2pID, _gatewayNodeStatus); + // update the gatewayInfo + updateGatewayInfo(_p2pID, _gatewayNodeStatus); +} + +void PeersRouterTable::batchInsertNodeList( + P2pID const& _p2pNodeID, std::vector const& _nodeList) +{ + WriteGuard l(x_groupNodeList); + for (auto const& it : _nodeList) + { + auto groupID = it->groupID(); + auto const& nodeIDList = it->nodeIDList(); + int64_t i = 0; + for (auto const& nodeID : nodeIDList) + { + if (!m_groupNodeList.count(groupID) || !m_groupNodeList.at(groupID).count(nodeID)) + { + m_groupNodeList[groupID][nodeID] = std::set(); + } + m_groupNodeList[groupID][nodeID].insert(_p2pNodeID); + if (it->protocol(i)) + { + m_nodeProtocolInfo[nodeID] = it->protocol(i); + } + i++; + } + ROUTER_LOG(INFO) << LOG_DESC("batchInsertNodeList") << LOG_KV("group", it->groupID()) + << LOG_KV("nodeIDs", it->nodeIDList().size()) + << LOG_KV("protocols", it->nodeProtocolList().size()); + } +} + +void PeersRouterTable::removeP2PID(const P2pID& _p2pID) +{ + ROUTER_LOG(INFO) << LOG_DESC("PeersRouterTable: removeP2PID") << LOG_KV("p2pID", _p2pID); + // remove p2pID from groupNodeList + removeP2PIDFromGroupNodeList(_p2pID); + // remove p2pID from peerStatus + removePeerStatus(_p2pID); + // remove p2pID from the gatewayInfo + removeNodeFromGatewayInfo(_p2pID); +} + +void PeersRouterTable::removeP2PIDFromGroupNodeList(const P2pID& _p2pID) +{ + WriteGuard l(x_groupNodeList); + // remove all nodeIDs info belong to p2pID + for (auto it = m_groupNodeList.begin(); it != m_groupNodeList.end();) + { + for (auto innerIt = it->second.begin(); innerIt != it->second.end();) + { + for (auto innerIt2 = innerIt->second.begin(); innerIt2 != innerIt->second.end();) + { + if (*innerIt2 == _p2pID) + { + innerIt2 = innerIt->second.erase(innerIt2); + } + else + { + ++innerIt2; + } + } + + if (innerIt->second.empty()) + { + innerIt = it->second.erase(innerIt); + } + else + { + ++innerIt; + } + } + + if (it->second.empty()) + { + it = m_groupNodeList.erase(it); + } + else + { + ++it; + } + } +} + +void PeersRouterTable::updatePeerNodeList(P2pID const& _p2pNodeID, GatewayNodeStatus::Ptr _status) +{ + WriteGuard l(x_peersStatus); + m_peersStatus[_p2pNodeID] = _status; +} + +void PeersRouterTable::removePeerStatus(P2pID const& _p2pNodeID) +{ + UpgradableGuard l(x_peersStatus); + if (m_peersStatus.count(_p2pNodeID)) + { + UpgradeGuard ul(l); + m_peersStatus.erase(_p2pNodeID); + } +} + +PeersRouterTable::Group2NodeIDListType PeersRouterTable::peersNodeIDList( + P2pID const& _p2pNodeID) const +{ + ReadGuard l(x_peersStatus); + PeersRouterTable::Group2NodeIDListType nodeIDList; + if (!m_peersStatus.count(_p2pNodeID)) + { + return nodeIDList; + } + auto const& groupNodeInfos = m_peersStatus.at(_p2pNodeID)->groupNodeInfos(); + for (auto const& it : groupNodeInfos) + { + auto const& groupNodeIDList = it->nodeIDList(); + auto const& nodeTypeList = it->nodeTypeList(); + for(size_t i = 0; i < groupNodeIDList.size(); ++i) + { + auto nodeID = groupNodeIDList[i]; + nodeIDList[it->groupID()][nodeID] = bcos::protocol::NodeType::None; + if(nodeTypeList.size() > i) + { + auto nodeType = nodeTypeList[i]; + nodeIDList[it->groupID()][nodeID] = nodeType; + } + } + } + return nodeIDList; +} + +std::set PeersRouterTable::getAllPeers() const +{ + std::set peers; + ReadGuard l(x_peersStatus); + for (auto const& peerInfo : m_peersStatus) + { + peers.insert(peerInfo.first); + } + return peers; +} + +GatewayStatus::Ptr PeersRouterTable::gatewayInfo(std::string const& _uuid) +{ + ReadGuard l(x_gatewayInfos); + if (m_gatewayInfos.count(_uuid)) + { + return m_gatewayInfos.at(_uuid); + } + return nullptr; +} + +void PeersRouterTable::updateGatewayInfo(P2pID const& _p2pNodeID, GatewayNodeStatus::Ptr _status) +{ + GatewayStatus::Ptr gatewayStatus; + { + UpgradableGuard l(x_gatewayInfos); + if (!m_gatewayInfos.count(_status->uuid())) + { + UpgradeGuard ul(l); + m_gatewayInfos[_status->uuid()] = + m_gatewayStatusFactory->createGatewayInfo(_status->uuid()); + } + gatewayStatus = m_gatewayInfos.at(_status->uuid()); + } + gatewayStatus->update(_p2pNodeID, _status); +} + +void PeersRouterTable::removeNodeFromGatewayInfo(P2pID const& _p2pID) +{ + ReadGuard l(x_gatewayInfos); + for (auto const& it : m_gatewayInfos) + { + it.second->removeP2PNode(_p2pID); + } +} + +// broadcast message to given group +void PeersRouterTable::asyncBroadcastMsg( + uint16_t _type, std::string const& _groupID, uint16_t _moduleID, P2PMessage::Ptr _msg) +{ + std::vector selectedPeers; + { + ReadGuard l(x_gatewayInfos); + for (auto const& it : m_gatewayInfos) + { + // not broadcast message to the gateway-self + if (it.first == m_uuid) + { + continue; + } + std::string p2pNodeID; + if (it.second->randomChooseP2PNode(p2pNodeID, _type, _groupID)) + { + selectedPeers.emplace_back(p2pNodeID); + } + } + } + ROUTER_LOG(TRACE) << LOG_BADGE("PeersRouterTable") + << LOG_DESC("asyncBroadcastMsg: randomChooseP2PNode") + << LOG_KV("nodeType", _type) << LOG_KV("moduleID", _moduleID) + << LOG_KV("payloadSize", _msg->payload()->size()) + << LOG_KV("peersSize", selectedPeers.size()); + for (auto const& peer : selectedPeers) + { + ROUTER_LOG(TRACE) << LOG_BADGE("PeersRouterTable") << LOG_DESC("asyncBroadcastMsg") + << LOG_KV("nodeType", _type) << LOG_KV("moduleID", _moduleID) + << LOG_KV("dst", peer); + m_p2pInterface->asyncSendMessageByNodeID(peer, _msg, CallbackFuncWithSession()); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.h b/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.h new file mode 100644 index 0000000..2df7805 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/PeersRouterTable.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file PeersRouterTable.h + * @author: octopus + * @date 2021-12-29 + */ +#pragma once +#include "FrontServiceInfo.h" +#include "GatewayStatus.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class PeersRouterTable +{ +public: + using Ptr = std::shared_ptr; + PeersRouterTable(std::string _uuid, bcos::crypto::KeyFactory::Ptr _keyFactory, + P2PInterface::Ptr _p2pInterface) + : m_uuid(_uuid), + m_keyFactory(_keyFactory), + m_p2pInterface(_p2pInterface), + m_gatewayStatusFactory(std::make_shared()) + {} + virtual ~PeersRouterTable() {} + + void getGroupNodeInfoList(GroupNodeInfo::Ptr _groupInfo, const std::string& _groupID) const; + std::set queryP2pIDs(const std::string& _groupID, const std::string& _nodeID) const; + std::set queryP2pIDsByGroupID(const std::string& _groupID) const; + void removeP2PID(const P2pID& _p2pID); + + void updatePeerStatus(P2pID const& _p2pID, GatewayNodeStatus::Ptr _gatewayNodeStatus); + + using Group2NodeIDListType = std::map>; + Group2NodeIDListType peersNodeIDList(P2pID const& _p2pNodeID) const; + + void asyncBroadcastMsg( + uint16_t _type, std::string const& _group, uint16_t _moduleID, P2PMessage::Ptr _msg); + + std::set getAllPeers() const; + +protected: + void batchInsertNodeList( + P2pID const& _p2pNodeID, std::vector const& _nodeList); + void updatePeerNodeList(P2pID const& _p2pNodeID, GatewayNodeStatus::Ptr _status); + + void removeP2PIDFromGroupNodeList(P2pID const& _p2pID); + void removePeerStatus(P2pID const& _p2pNodeID); + + void updateGatewayInfo(P2pID const& _p2pNodeID, GatewayNodeStatus::Ptr _status); + void removeNodeFromGatewayInfo(P2pID const& _p2pID); + GatewayStatus::Ptr gatewayInfo(std::string const& _uuid); + +private: + std::string m_uuid; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + P2PInterface::Ptr m_p2pInterface; + // used for peer-to-peer router + // groupID => NodeID => set + std::map, std::less<>>, std::less<>> + m_groupNodeList; + std::map m_nodeProtocolInfo; + mutable SharedMutex x_groupNodeList; + + // the nodeIDList infos of the peers + // p2pNodeID => GatewayNodeStatus + std::map m_peersStatus; + mutable SharedMutex x_peersStatus; + + GatewayStatusFactory::Ptr m_gatewayStatusFactory; + // uuid => gatewayInfo + std::map m_gatewayInfos; + mutable SharedMutex x_gatewayInfos; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.cpp b/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.cpp new file mode 100644 index 0000000..583482a --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ProGatewayNodeManager.cpp + * @author: yujiechen + * @date 2021-10-28 + */ +#include "ProGatewayNodeManager.h" + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::protocol; + +void ProGatewayNodeManager::detectNodeAlive() +{ + m_nodeAliveDetector->restart(); + auto updated = m_localRouterTable->eraseUnreachableNodes(); + if (updated) + { + increaseSeq(); + } + + syncLatestNodeIDList(); +} + +bool ProGatewayNodeManager::updateFrontServiceInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + auto ret = GatewayNodeManager::updateFrontServiceInfo(_groupInfo); + if (ret) + { + m_nodeAliveDetector->restart(); + } + return ret; +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.h b/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.h new file mode 100644 index 0000000..11c0490 --- /dev/null +++ b/bcos-gateway/bcos-gateway/gateway/ProGatewayNodeManager.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ProGatewayNodeManager.h + * @author: yujiechen + * @date 2021-10-28 + */ +#pragma once +#include "GatewayNodeManager.h" +#include +namespace bcos +{ +namespace gateway +{ +class ProGatewayNodeManager : public GatewayNodeManager +{ +public: + using Ptr = std::shared_ptr; + ProGatewayNodeManager(std::string const& _uuid, P2pID const& _nodeID, + std::shared_ptr _keyFactory, P2PInterface::Ptr _p2pInterface) + : GatewayNodeManager(_uuid, _nodeID, _keyFactory, _p2pInterface) + { + m_nodeAliveDetector = + std::make_shared(c_tarsAdminRefreshTimeInterval, "nodeUpdater"); + m_nodeAliveDetector->registerTimeoutHandler([this]() { detectNodeAlive(); }); + } + + void start() override + { + GatewayNodeManager::start(); + m_nodeAliveDetector->start(); + } + void stop() override + { + GatewayNodeManager::stop(); + m_nodeAliveDetector->stop(); + } + bool updateFrontServiceInfo(bcos::group::GroupInfo::Ptr _groupInfo) override; + +private: + virtual void detectNodeAlive(); + +private: + std::shared_ptr m_nodeAliveDetector; + // Note: since tars need at-least 1min to update the endpoint info, we schedule detectNodeAlive + // every 1min + uint64_t c_tarsAdminRefreshTimeInterval = 30 * 1000; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/AMOPImpl.cpp b/bcos-gateway/bcos-gateway/libamop/AMOPImpl.cpp new file mode 100644 index 0000000..0bf5ba6 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/AMOPImpl.cpp @@ -0,0 +1,574 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPImpl.cpp + * @author: octopus + * @date 2021-10-26 + */ +#include "AMOPImpl.h" +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::amop; +using namespace bcos::protocol; + +AMOPImpl::AMOPImpl(TopicManager::Ptr _topicManager, + bcos::amop::AMOPMessageFactory::Ptr _messageFactory, AMOPRequestFactory::Ptr _requestFactory, + P2PInterface::Ptr _network, P2pID const& _p2pNodeID) + : m_topicManager(_topicManager), + m_messageFactory(_messageFactory), + m_requestFactory(_requestFactory), + m_network(_network), + m_p2pNodeID(_p2pNodeID) +{ + m_threadPool = std::make_shared("amopDispatcher", 1); + m_timer = std::make_shared(TOPIC_SYNC_PERIOD, "topicSync"); + m_timer->registerTimeoutHandler([this]() { broadcastTopicSeq(); }); + + m_network->registerHandlerByMsgType(GatewayMessageType::AMOPMessageType, + boost::bind(&AMOPImpl::onAMOPMessage, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); +} + +void AMOPImpl::start() +{ + m_timer->start(); + m_topicManager->start(); +} + +void AMOPImpl::stop() +{ + m_timer->stop(); + m_topicManager->stop(); +} + +void AMOPImpl::broadcastTopicSeq() +{ + auto topicSeq = std::to_string(m_topicManager->topicSeq()); + auto buffer = buildAndEncodeMessage( + AMOPMessage::Type::TopicSeq, bytesConstRef((byte*)topicSeq.data(), topicSeq.size())); + m_network->asyncBroadcastMessageToP2PNodes( + GatewayMessageType::AMOPMessageType, protocol::ModuleID::AMOP, ref(*buffer), Options(0)); + AMOP_LOG(TRACE) << LOG_BADGE("broadcastTopicSeq") << LOG_KV("topicSeq", topicSeq); + m_timer->restart(); +} + +// receive the topic seq of other nodes, and try to request the latest topic when seq falling behind +void AMOPImpl::onReceiveTopicSeqMessage(P2pID const& _nodeID, AMOPMessage::Ptr _msg) +{ + try + { + uint32_t topicSeq = + boost::lexical_cast(std::string(_msg->data().begin(), _msg->data().end())); + if (!m_topicManager->checkTopicSeq(_nodeID, topicSeq)) + { + return; + } + AMOP_LOG(INFO) << LOG_BADGE( + "onReceiveTopicSeqMessage: try to request latest AMOP information") + << LOG_KV("nodeID", _nodeID) << LOG_KV("topicSeq", topicSeq); + + auto buffer = buildAndEncodeMessage(AMOPMessage::Type::RequestTopic, bytesConstRef()); + Options option(0); + m_network->asyncSendMessageByP2PNodeID(GatewayMessageType::AMOPMessageType, _nodeID, + bytesConstRef(buffer->data(), buffer->size()), option, + [_nodeID](Error::Ptr&& _error, int16_t, bytesPointer) { + if (_error && (_error->errorCode() != CommonError::SUCCESS)) + { + AMOP_LOG(WARNING) + << LOG_BADGE("onReceiveTopicSeqMessage") + << LOG_DESC("receive error callback") << LOG_KV("dstNode", _nodeID) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + }); + } + catch (const std::exception& e) + { + AMOP_LOG(ERROR) << LOG_DESC("onReceiveTopicSeqMessage") << LOG_KV("nodeID", _nodeID) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +/** + * @brief: create message and encode the message to bytes + * @param _type: message type + * @param _data: message data + * @return std::shared_ptr + */ +std::shared_ptr AMOPImpl::buildAndEncodeMessage(uint32_t _type, bcos::bytesConstRef _data) +{ + auto message = m_messageFactory->buildMessage(); + message->setType(_type); + message->setData(_data); + auto buffer = std::make_shared(); + message->encode(*buffer.get()); + return buffer; +} + +// receive topic response and update the local topicManager +void AMOPImpl::onReceiveResponseTopicMessage(P2pID const& _nodeID, AMOPMessage::Ptr _msg) +{ + try + { + uint32_t topicSeq; + TopicItems topicItems; + std::string topicJson = std::string(_msg->data().begin(), _msg->data().end()); + if (m_topicManager->parseTopicItemsJson(topicSeq, topicItems, topicJson)) + { + m_topicManager->updateSeqAndTopicsByNodeID(_nodeID, topicSeq, topicItems); + } + } + catch (const std::exception& e) + { + AMOP_LOG(ERROR) << LOG_BADGE("onReceiveResponseTopicMessage") << LOG_KV("nodeID", _nodeID) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +// response topic message to the given node +void AMOPImpl::onReceiveRequestTopicMessage(P2pID const& _nodeID, AMOPMessage::Ptr _msg) +{ + (void)_msg; + try + { + // the current node subscribed topic info + std::string topicJson = m_topicManager->queryTopicsSubByClient(); + + AMOP_LOG(INFO) << LOG_BADGE("onReceiveRequestTopicMessage") << LOG_KV("nodeID", _nodeID) + << LOG_KV("topicJson", topicJson); + + auto buffer = buildAndEncodeMessage(AMOPMessage::Type::ResponseTopic, + bytesConstRef((byte*)topicJson.data(), topicJson.size())); + Options option(0); + m_network->asyncSendMessageByP2PNodeID(GatewayMessageType::AMOPMessageType, _nodeID, + bytesConstRef(buffer->data(), buffer->size()), option, + [_nodeID](Error::Ptr&& _error, int16_t, bytesPointer) { + if (_error && (_error->errorCode() != CommonError::SUCCESS)) + { + AMOP_LOG(WARNING) + << LOG_BADGE("onReceiveRequestTopicMessage") + << LOG_DESC("callback response error") << LOG_KV("dstNode", _nodeID) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + } + }); + } + catch (const std::exception& e) + { + AMOP_LOG(ERROR) << LOG_BADGE("onReceiveRequestTopicMessage") << LOG_KV("nodeID", _nodeID) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +// receive AMOP request message from the given node +void AMOPImpl::onReceiveAMOPMessage(P2pID const& _nodeID, AMOPMessage::Ptr _msg, + std::function const& _responseCallback) +{ + // AMOPRequest + auto request = m_requestFactory->buildRequest(_msg->data()); + // message seq + std::string topic = request->topic(); + onReceiveAMOPMessage(_nodeID, topic, _msg->data(), _responseCallback); +} + +void AMOPImpl::onReceiveAMOPMessage(P2pID const& _nodeID, std::string const& _topic, + bytesConstRef _data, std::function const& _responseCallback) +{ + std::vector clients; + m_topicManager->queryClientsByTopic(_topic, clients); + bcos::rpc::RPCInterface::Ptr clientService = nullptr; + std::string choosedClient; + if (!clients.empty()) + { + choosedClient = randomChoose(clients); + clientService = m_topicManager->createAndGetServiceByClient(choosedClient); + } + if (!clientService) + { + auto amopMsg = m_messageFactory->buildMessage(); + auto buffer = std::make_shared(); + amopMsg->setStatus(CommonError::NotFoundClientByTopicDispatchMsg); + amopMsg->setType(AMOPMessage::Type::AMOPResponse); + std::string errorMessage = "NotFoundClientByTopicDispatchMsg"; + amopMsg->setData(bytesConstRef((bcos::byte*)errorMessage.c_str(), errorMessage.size())); + amopMsg->encode(*buffer); + m_threadPool->enqueue([buffer, _responseCallback]() { + _responseCallback(buffer, GatewayMessageType::AMOPMessageType); + }); + AMOP_LOG(WARNING) << LOG_BADGE("onRecvAMOPMessage") + << LOG_DESC("no client subscribe the topic") << LOG_KV("topic", _topic) + << LOG_KV("nodeID", _nodeID); + return; + } + + AMOP_LOG(INFO) << LOG_DESC("onRecvAMOPMessage") << LOG_KV("topic", _topic) + << LOG_KV("from", _nodeID) << LOG_KV("choosedClient", choosedClient); + clientService->asyncNotifyAMOPMessage(bcos::rpc::AMOPNotifyMessageType::Unicast, _topic, _data, + [this, _responseCallback](Error::Ptr&& _error, bytesPointer _responseData) { + if (!_error || _error->errorCode() == CommonError::SUCCESS) + { + _responseCallback(_responseData, GatewayMessageType::WSMessageType); + return; + } + auto amopMsg = m_messageFactory->buildMessage(); + amopMsg->setStatus(_error->errorCode()); + amopMsg->setType(AMOPMessage::Type::AMOPResponse); + auto const& errorMessage = _error->errorMessage(); + amopMsg->setData(bytesConstRef((bcos::byte*)errorMessage.c_str(), errorMessage.size())); + auto buffer = std::make_shared(); + amopMsg->encode(*buffer); + _responseCallback(buffer, GatewayMessageType::AMOPMessageType); + AMOP_LOG(WARNING) << LOG_DESC("asyncNotifyAMOPMessage error") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); +} + +// receive the AMOP broadcast message from given node +void AMOPImpl::onReceiveAMOPBroadcastMessage(P2pID const& _nodeID, AMOPMessage::Ptr _msg) +{ + // AMOPRequest + auto request = m_requestFactory->buildRequest(_msg->data()); + // message seq + std::string topic = request->topic(); + std::vector clients; + m_topicManager->queryClientsByTopic(topic, clients); + if (clients.empty()) + { + AMOP_LOG(WARNING) << LOG_BADGE("onRecvAMOPBroadcastMessage") + << LOG_DESC("no client subscribe the topic") << LOG_KV("topic", topic) + << LOG_KV("from", _nodeID); + return; + } + for (const auto& client : clients) + { + auto clientService = m_topicManager->createAndGetServiceByClient(client); + if (!clientService) + { + continue; + } + AMOP_LOG(DEBUG) << LOG_BADGE("onRecvAMOPBroadcastMessage") + << LOG_DESC("push message to client") << LOG_KV("topic", topic) + << LOG_KV("client", client); + clientService->asyncNotifyAMOPMessage(bcos::rpc::AMOPNotifyMessageType::Broadcast, topic, + _msg->data(), [client](Error::Ptr&& _error, bytesPointer) { + if (_error) + { + AMOP_LOG(WARNING) + << LOG_BADGE("onRecvAMOPBroadcastMessage") + << LOG_DESC("asyncNotifyAMOPMessage error") << LOG_KV("client", client) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + AMOP_LOG(DEBUG) << LOG_DESC("onReceiveAMOPBroadcastMessage") << LOG_KV("nodeID", _nodeID); +} + +bool AMOPImpl::trySendTopicMessageToLocalClient(const std::string& _topic, + bcos::bytesConstRef _data, + std::function _respFunc) +{ + std::vector clients; + m_topicManager->queryClientsByTopic(_topic, clients); + if (clients.size() == 0) + { + AMOP_LOG(INFO) << LOG_DESC("trySendTopicMessageToLocalClient failed for empty client") + << LOG_KV("topic", _topic); + return false; + } + AMOP_LOG(INFO) << LOG_DESC("trySendTopicMessageToLocalClient") << LOG_KV("topic", _topic) + << LOG_KV("clientsSubscribeTopic", clients.size()); + auto self = shared_from_this(); + onReceiveAMOPMessage(m_p2pNodeID, _topic, _data, + [self, _topic, _respFunc](bytesPointer _response, int16_t _type) { + self->onRecvAMOPResponse(_type, _response, _respFunc); + AMOP_LOG(INFO) << LOG_DESC("trySendTopicMessageToLocalClient: receive response") + << LOG_KV("topic", _topic); + }); + + return true; +} + +// asyncSendMessage to the given topic +void AMOPImpl::asyncSendMessageByTopic(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc) +{ + std::vector nodeIDs; + m_topicManager->queryNodeIDsByTopic(_topic, nodeIDs); + if (nodeIDs.empty()) + { + if (trySendTopicMessageToLocalClient(_topic, _data, _respFunc)) + { + return; + } + auto errorPtr = std::make_shared(CommonError::NotFoundPeerByTopicSendMsg, + "there has no node subscribe this topic, topic: " + _topic); + if (_respFunc) + { + _respFunc(std::move(errorPtr), 0, nullptr); + } + + AMOP_LOG(WARNING) << LOG_BADGE("asyncSendMessage") + << LOG_DESC("there has no node subscribe the topic") + << LOG_KV("topic", _topic); + return; + } + AMOP_LOG(INFO) << LOG_DESC("asyncSendMessageByTopic") << LOG_KV("topic", _topic) + << LOG_KV("nodeIDsSize", nodeIDs.size()); + auto buffer = buildAndEncodeMessage(AMOPMessage::Type::AMOPRequest, _data); + + class RetrySender : public std::enable_shared_from_this + { + public: + std::vector m_nodeIDs; + std::shared_ptr m_buffer; + std::function m_callback; + P2PInterface::Ptr m_network; + std::shared_ptr m_messageFactory; + + public: + void sendMessage() + { + if (m_nodeIDs.empty()) + { + auto errorPtr = std::make_shared( + CommonError::AMOPSendMsgFailed, "unable to send message to peer by topic"); + if (m_callback) + { + m_callback(std::move(errorPtr), 0, nullptr); + } + + return; + } + auto choosedNodeID = randomChoose(m_nodeIDs); + AMOP_LOG(INFO) << LOG_DESC("asyncSendMessageByTopic") + << LOG_KV("choosedNodeID", choosedNodeID); + // erase in case of select the same node when retry + m_nodeIDs.erase(m_nodeIDs.begin()); + // try to send message to node + Options option(0); + auto self = shared_from_this(); + m_network->asyncSendMessageByP2PNodeID(GatewayMessageType::AMOPMessageType, + choosedNodeID, bytesConstRef(m_buffer->data(), m_buffer->size()), option, + [self, choosedNodeID, callback = m_callback]( + Error::Ptr&& _error, int16_t _type, bytesPointer _responseData) { + if (_error && (_error->errorCode() != CommonError::SUCCESS)) + { + AMOP_LOG(DEBUG) + << LOG_BADGE("RetrySender::sendMessage") + << LOG_DESC("asyncSendMessageByNodeID callback response error") + << LOG_KV("nodeID", choosedNodeID) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + self->sendMessage(); + return; + } + bcos::Error::Ptr error = nullptr; + if (_type == bcos::gateway::GatewayMessageType::AMOPMessageType) + { + // zero copy overhead + auto amopMsg = self->m_messageFactory->buildMessage(ref(*_responseData)); + auto errorMessage = + std::string(amopMsg->data().begin(), amopMsg->data().end()); + auto errorCode = amopMsg->status(); + // tars error + if (amopMsg->status() == (uint16_t)(-8) || + amopMsg->status() == (uint16_t)(-7)) + { + errorMessage = + "Access to the remote RPC service timed out, please make sure it " + "is online"; + errorCode = -1; + } + error = std::make_shared(errorCode, errorMessage); + + AMOP_LOG(INFO) + << LOG_DESC("asyncSendMessageByTopic error: receive responseData") + << LOG_KV("status", amopMsg->status()) << LOG_KV("msg", errorMessage); + } + if (callback) + { + AMOP_LOG(INFO) + << LOG_DESC("asyncSendMessageByTopic: receive responseData") + << LOG_KV("size", _responseData->size()) << LOG_KV("type", _type); + callback(std::move(error), _type, _responseData); + } + }); + } + }; + + auto sender = std::make_shared(); + sender->m_nodeIDs = nodeIDs; + sender->m_buffer = buffer; + sender->m_network = m_network; + sender->m_callback = _respFunc; + sender->m_messageFactory = m_messageFactory; + // send message + sender->sendMessage(); +} + +void AMOPImpl::onRecvAMOPResponse(int16_t _type, bytesPointer _responseData, + std::function _callback) +{ + bcos::Error::Ptr error = nullptr; + if (_type == bcos::gateway::GatewayMessageType::AMOPMessageType) + { + // zero copy overhead + auto amopMsg = m_messageFactory->buildMessage(ref(*_responseData)); + auto errorMessage = std::string(amopMsg->data().begin(), amopMsg->data().end()); + auto errorCode = amopMsg->status(); + // tars error + if (amopMsg->status() == (uint16_t)(-8) || amopMsg->status() == (uint16_t)(-7)) + { + errorMessage = + "Access to the remote RPC service timed out, please make sure it " + "is online"; + errorCode = -1; + } + error = std::make_shared(errorCode, errorMessage); + + AMOP_LOG(INFO) << LOG_DESC("asyncSendMessageByTopic error: receive responseData") + << LOG_KV("status", amopMsg->status()) << LOG_KV("msg", errorMessage); + } + if (_callback) + { + AMOP_LOG(INFO) << LOG_DESC("asyncSendMessageByTopic: receive responseData") + << LOG_KV("size", _responseData->size()) << LOG_KV("type", _type); + _callback(std::move(error), _type, _responseData); + } +} + +void AMOPImpl::asyncSendBroadcastMessageByTopic( + const std::string& _topic, bcos::bytesConstRef _data) +{ + std::vector nodeIDs; + m_topicManager->queryNodeIDsByTopic(_topic, nodeIDs); + if (nodeIDs.empty()) + { + AMOP_LOG(WARNING) << LOG_BADGE("asyncSendBroadbastMessage") + << LOG_DESC("there no node subscribe this topic") + << LOG_KV("topic", _topic); + return; + } + auto buffer = buildAndEncodeMessage(AMOPMessage::Type::AMOPBroadcast, _data); + m_network->asyncSendMessageByP2PNodeIDs(GatewayMessageType::AMOPMessageType, nodeIDs, + bytesConstRef(buffer->data(), buffer->size()), Options(0)); + AMOP_LOG(DEBUG) << LOG_BADGE("asyncSendBroadbastMessage") << LOG_DESC("send broadcast message") + << LOG_KV("topic", _topic) << LOG_KV("data size", _data.size()); +} + +void AMOPImpl::onAMOPMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _message) +{ + auto self = std::weak_ptr(shared_from_this()); + m_threadPool->enqueue([self, _e, _session, _message]() { + auto amop = self.lock(); + if (!amop) + { + return; + } + try + { + amop->dispatcherAMOPMessage(_e, _session, _message); + } + catch (std::exception const& e) + { + AMOP_LOG(WARNING) << LOG_DESC("dispatcher AMOPMessage exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void AMOPImpl::dispatcherAMOPMessage( + NetworkException const& _e, P2PSession::Ptr _session, std::shared_ptr _message) +{ + if (_e.errorCode() != 0 || !_message) + { + AMOP_LOG(WARNING) << LOG_DESC("onAMOPMessage error for NetworkException") + << LOG_KV("error", _e.what()) << LOG_KV("code", _e.errorCode()); + return; + } + if (_message->packetType() != GatewayMessageType::AMOPMessageType) + { + return; + } + // zero copy overhead + auto amopMessage = m_messageFactory->buildMessage(ref(*_message->payload())); + auto amopMsgType = amopMessage->type(); + auto fromNodeID = + _message->srcP2PNodeID().empty() ? _session->p2pID() : _message->srcP2PNodeID(); + switch (amopMsgType) + { + case AMOPMessage::Type::TopicSeq: + onReceiveTopicSeqMessage(fromNodeID, amopMessage); + break; + case AMOPMessage::Type::RequestTopic: + onReceiveRequestTopicMessage(fromNodeID, amopMessage); + break; + case AMOPMessage::Type::ResponseTopic: + onReceiveResponseTopicMessage(fromNodeID, amopMessage); + break; + case AMOPMessage::Type::AMOPRequest: + onReceiveAMOPMessage(fromNodeID, amopMessage, + [this, _session, _message](bytesPointer _responseData, int16_t _type) { + auto responseP2PMsg = std::dynamic_pointer_cast( + m_network->messageFactory()->buildMessage()); + AMOP_LOG(INFO) << LOG_DESC("onReceiveAMOPMessage: sendResponse") + << LOG_KV("type", _type) << LOG_KV("data", _responseData->size()); + responseP2PMsg->setDstP2PNodeID(_message->srcP2PNodeID()); + responseP2PMsg->setSrcP2PNodeID(_message->dstP2PNodeID()); + responseP2PMsg->setSeq(_message->seq()); + responseP2PMsg->setRespPacket(); + responseP2PMsg->setPayload(_responseData); + responseP2PMsg->setPacketType(_type); + m_network->asyncSendMessageByNodeID( + responseP2PMsg->dstP2PNodeID(), responseP2PMsg, nullptr); + }); + break; + case AMOPMessage::Type::AMOPBroadcast: + onReceiveAMOPBroadcastMessage(fromNodeID, amopMessage); + break; + default: + AMOP_LOG(WARNING) << LOG_DESC("unknown AMOP message type") << LOG_KV("type", amopMsgType); + } +} + +void AMOPImpl::asyncSubscribeTopic(std::string const& _clientID, std::string const& _topicInfo, + std::function _callback) +{ + m_topicManager->subTopic(_clientID, _topicInfo); + if (!_callback) + { + return; + } + _callback(nullptr); +} + +void AMOPImpl::asyncRemoveTopic(std::string const& _clientID, + std::vector const& _topicList, std::function _callback) +{ + m_topicManager->removeTopics(_clientID, _topicList); + if (!_callback) + { + return; + } + _callback(nullptr); +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/AMOPImpl.h b/bcos-gateway/bcos-gateway/libamop/AMOPImpl.h new file mode 100644 index 0000000..9f35d23 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/AMOPImpl.h @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPImpl.h + * @author: octopus + * @date 2021-10-26 + */ +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace amop +{ +class AMOPImpl : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + AMOPImpl(TopicManager::Ptr _topicManager, AMOPMessageFactory::Ptr _messageFactory, + bcos::protocol::AMOPRequestFactory::Ptr _requestFactory, + bcos::gateway::P2PInterface::Ptr _network, bcos::gateway::P2pID const& _p2pNodeID); + virtual ~AMOPImpl() {} + + virtual void start(); + virtual void stop(); + virtual void asyncSubscribeTopic(std::string const& _clientID, std::string const& _topicInfo, + std::function _callback); + virtual void asyncRemoveTopic(std::string const& _clientID, + std::vector const& _topicList, std::function _callback); + + /** + * @brief: async send message to random node subscribe _topic + * @param _topic: topic + * @param _data: message data + * @param _respFunc: callback + * @return void + */ + virtual void asyncSendMessageByTopic(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc); + + /** + * @brief: async send message to all nodes subscribe _topic + * @param _topic: topic + * @param _data: message data + * @return void + */ + virtual void asyncSendBroadcastMessageByTopic( + const std::string& _topic, bcos::bytesConstRef _data); + + virtual void onAMOPMessage(bcos::gateway::NetworkException const& _e, + bcos::gateway::P2PSession::Ptr _session, + std::shared_ptr _message); + + virtual TopicManager::Ptr topicManager() { return m_topicManager; } + +protected: + virtual void dispatcherAMOPMessage(bcos::gateway::NetworkException const& _e, + bcos::gateway::P2PSession::Ptr _session, + std::shared_ptr _message); + /** + * @brief: periodically send topicSeq to all other nodes + * @return void + */ + virtual void broadcastTopicSeq(); + + /** + * @brief: receive topicSeq from other nodes + * @param _nodeID: the sender nodeID + * @param _id: the message id + * @param _msg: message + * @return void + */ + virtual void onReceiveTopicSeqMessage( + bcos::gateway::P2pID const& _nodeID, AMOPMessage::Ptr _msg); + + /** + * @brief: receive request topic message from other nodes + * @param _nodeID: the sender nodeID + * @param _id: the message id + * @param _msg: message + * @return void + */ + void onReceiveRequestTopicMessage(bcos::gateway::P2pID const& _nodeID, AMOPMessage::Ptr _msg); + + /** + * @brief: receive topic response message from other nodes + * @param _nodeID: the sender nodeID + * @param _id: the message id + * @param _msg: message + * @return void + */ + virtual void onReceiveResponseTopicMessage( + bcos::gateway::P2pID const& _nodeID, AMOPMessage::Ptr _msg); + + /** + * @brief: receive amop message + * @param _nodeID: the sender nodeID + * @param _id: the message id + * @param _msg: message + * @return void + */ + virtual void onReceiveAMOPMessage(bcos::gateway::P2pID const& _nodeID, AMOPMessage::Ptr _msg, + std::function const& _responseCallback); + + /** + * @brief: receive broadcast message + * @param _nodeID: the sender nodeID + * @param _id: the message id + * @param _msg: message + * @return void + */ + virtual void onReceiveAMOPBroadcastMessage( + bcos::gateway::P2pID const& _nodeID, AMOPMessage::Ptr _msg); + +private: + std::shared_ptr buildAndEncodeMessage(uint32_t _type, bcos::bytesConstRef _data); + virtual void onReceiveAMOPMessage(bcos::gateway::P2pID const& _nodeID, + std::string const& _topic, bytesConstRef _data, + std::function const& _responseCallback); + void onRecvAMOPResponse(int16_t _type, bytesPointer _responseData, + std::function _callback); + bool trySendTopicMessageToLocalClient(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc); + +private: + std::shared_ptr m_topicManager; + std::shared_ptr m_messageFactory; + std::shared_ptr m_requestFactory; + std::shared_ptr m_timer; + bcos::gateway::P2PInterface::Ptr m_network; + bcos::gateway::P2pID m_p2pNodeID; + ThreadPool::Ptr m_threadPool; + + unsigned const TOPIC_SYNC_PERIOD = 2000; +}; +} // namespace amop +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/AMOPMessage.cpp b/bcos-gateway/bcos-gateway/libamop/AMOPMessage.cpp new file mode 100644 index 0000000..385aac3 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/AMOPMessage.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPMessage.cpp + * @author: octopus + * @date 2021-06-21 + */ + +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::amop; + +const size_t AMOPMessage::HEADER_LENGTH; + +bool AMOPMessage::encode(bcos::bytes& _buffer) +{ + // encode version + uint16_t version = boost::asio::detail::socket_ops::host_to_network_short(m_version); + _buffer.insert(_buffer.end(), (byte*)&version, (byte*)&version + 2); + + uint16_t type = boost::asio::detail::socket_ops::host_to_network_short(m_type); + _buffer.insert(_buffer.end(), (byte*)&type, (byte*)&type + 2); + uint16_t status = boost::asio::detail::socket_ops::host_to_network_short(m_status); + _buffer.insert(_buffer.end(), (byte*)&status, (byte*)&status + 2); + _buffer.insert(_buffer.end(), m_data.begin(), m_data.end()); + return true; +} + +ssize_t AMOPMessage::decode(bcos::bytesConstRef _buffer) +{ + if (_buffer.size() < HEADER_LENGTH) + { + AMOP_MSG_LOG(ERROR) + << LOG_BADGE("decode") + << LOG_DESC("the topic length smaller than the minimum length(2), data size:" + + std::to_string(_buffer.size())) + << LOG_KV("data", *toHexString(_buffer)); + return -1; + } + std::size_t offset = 0; + // decode version + m_version = boost::asio::detail::socket_ops::network_to_host_short( + *((uint16_t*)(_buffer.data() + offset))); + offset += 2; + + m_type = boost::asio::detail::socket_ops::network_to_host_short( + *((uint16_t*)(_buffer.data() + offset))); + offset += 2; + m_status = boost::asio::detail::socket_ops::network_to_host_short( + *((uint16_t*)(_buffer.data() + offset))); + offset += 2; + m_data = _buffer.getCroppedData(offset); + + return _buffer.size(); +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/AMOPMessage.h b/bcos-gateway/bcos-gateway/libamop/AMOPMessage.h new file mode 100644 index 0000000..76db89d --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/AMOPMessage.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPMessage.h + * @author: octopus + * @date 2021-06-17 + */ +#pragma once +#include + +namespace bcos +{ +namespace amop +{ +class AMOPMessage +{ +public: + enum Type : uint16_t + { + TopicSeq = 0x1, + RequestTopic = 0x2, + ResponseTopic = 0x3, + AMOPRequest = 0x4, + AMOPResponse = 0x5, + AMOPBroadcast = 0x5 + }; + /// type(2) + status(2) + version(2) + const static size_t HEADER_LENGTH = 6; + /// the max length of topic(65535) + const static size_t MAX_TOPIC_LENGTH = 0xffff; + + + using Ptr = std::shared_ptr; + AMOPMessage() {} + AMOPMessage(bytesConstRef _data) { decode(_data); } + virtual ~AMOPMessage() {} + + virtual uint16_t type() const { return m_type; } + virtual void setType(uint16_t _type) { m_type = _type; } + + virtual bytesConstRef data() const { return m_data; } + // Note: must maintain life time for _data + virtual void setData(bcos::bytesConstRef _data) { m_data = _data; } + virtual void setStatus(uint16_t _status) { m_status = _status; } + virtual uint16_t status() const { return m_status; } + + virtual uint16_t version() const { return m_version; } + virtual void setVersion(uint16_t version) { m_version = version; } + +public: + bool encode(bytes& _buffer); + ssize_t decode(bytesConstRef _buffer); + +private: + uint16_t m_version = 0; + uint16_t m_type{0}; + uint16_t m_status{0}; + bcos::bytesConstRef m_data = bytesConstRef(); +}; +class AMOPMessageFactory +{ +public: + using Ptr = std::shared_ptr; + AMOPMessageFactory() = default; + AMOPMessage::Ptr buildMessage() { return std::make_shared(); } + // Note: must maintain lifetime of _data + AMOPMessage::Ptr buildMessage(bytesConstRef _data) + { + return std::make_shared(_data); + } +}; +} // namespace amop +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libamop/AirTopicManager.h b/bcos-gateway/bcos-gateway/libamop/AirTopicManager.h new file mode 100644 index 0000000..d824885 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/AirTopicManager.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AirTopicManager.h + * @author: octopus + * @date 2021-06-18 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace amop +{ +class LocalTopicManager : public TopicManager +{ +public: + using Ptr = std::shared_ptr; + LocalTopicManager(std::string const& _rpcServiceName, bcos::gateway::P2PInterface::Ptr _network) + : TopicManager(_rpcServiceName, _network) + {} + ~LocalTopicManager() override {} + + void setLocalClient(bcos::rpc::RPCInterface::Ptr _rpc) { m_rpc = _rpc; } + bcos::rpc::RPCInterface::Ptr createAndGetServiceByClient(std::string const&) override + { + return m_rpc; + } + void start() override {} + void stop() override {} + +private: + bcos::rpc::RPCInterface::Ptr m_rpc; +}; +} // namespace amop +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/Common.h b/bcos-gateway/bcos-gateway/libamop/Common.h new file mode 100644 index 0000000..a774587 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/Common.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-06-21 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +#define TOPIC_LOG(LEVEL) BCOS_LOG(LEVEL) << "[AMOP][TOPIC]" +#define AMOP_MSG_LOG(LEVEL) BCOS_LOG(LEVEL) << "[AMOP][MSG]" +#define AMOP_LOG(LEVEL) BCOS_LOG(LEVEL) << "[AMOP][AMOP]" +namespace bcos +{ +namespace amop +{ +class TopicItem +{ +public: + using Ptr = std::shared_ptr; + +public: + TopicItem() {} + TopicItem(const std::string& _topicName) : m_topicName(_topicName) {} + +private: + std::string m_topicName; + +public: + std::string topicName() const { return m_topicName; } + void setTopicName(const std::string& _topicName) { m_topicName = _topicName; } +}; + +inline bool operator<(const TopicItem& _topicItem0, const TopicItem& _topicItem1) +{ + return _topicItem0.topicName() < _topicItem1.topicName(); +} +using TopicItems = std::set; + +inline std::string randomChoose(std::vector _datas) +{ + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::default_random_engine e(seed); + std::shuffle(_datas.begin(), _datas.end(), e); + return *(_datas.begin()); +} + +inline std::string shortHex(std::string const& _nodeID) +{ + return _nodeID.substr(0, 8); +} +} // namespace amop +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libamop/TopicManager.cpp b/bcos-gateway/bcos-gateway/libamop/TopicManager.cpp new file mode 100644 index 0000000..473a82c --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/TopicManager.cpp @@ -0,0 +1,488 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TopicManager.cpp + * @author: octopus + * @date 2021-06-18 + */ + +#include "bcos-tars-protocol/Common.h" +#include "bcos-utilities/BoostLog.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::amop; +using namespace bcos::gateway; + +/** + * @brief: parse client sub topics json + * @param _topicItems: return value, topics + * @param _json: json + * @return void + */ +bool TopicManager::parseSubTopicsJson(const std::string& _json, TopicItems& _topicItems) +{ + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(_json, root)) + { + TOPIC_LOG(ERROR) << LOG_BADGE("parseSubTopicsJson") << LOG_DESC("unable to parse json") + << LOG_KV("json:", _json); + return false; + } + + TopicItems topicItems; + + auto topicItemsSize = root["topics"].size(); + + for (unsigned int i = 0; i < topicItemsSize; i++) + { + std::string topic = root["topics"][i].asString(); + topicItems.insert(TopicItem(topic)); + } + + _topicItems = topicItems; + + TOPIC_LOG(INFO) << LOG_BADGE("parseSubTopicsJson") + << LOG_KV("topicItems size", topicItems.size()) << LOG_KV("json", _json); + return true; + } + catch (const std::exception& e) + { + TOPIC_LOG(ERROR) << LOG_BADGE("parseSubTopicsJson") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("json:", _json); + return false; + } +} + +/** + * @brief: client subscribe topic + * @param _clientID: client identify, to be defined + * @param _topicJson: topics subscribe by client + * @return void + */ +void TopicManager::subTopic(const std::string& _client, const std::string& _topicJson) +{ + TopicItems topicItems; + // parser topic json + if (parseSubTopicsJson(_topicJson, topicItems)) + { + subTopic(_client, topicItems); + }; +} + +/** + * @brief: client subscribe topic + * @param _clientID: client identify, to be defined + * @param _topicItems: topics subscribe by client + * @return void + */ +void TopicManager::subTopic(const std::string& _client, const TopicItems& _topicItems) +{ + { + std::unique_lock lock(x_clientTopics); + m_client2TopicItems[_client] = _topicItems; // Override the previous value + incTopicSeq(); + } + createAndGetServiceByClient(_client); + TOPIC_LOG(INFO) << LOG_BADGE("subTopic") << LOG_KV("client", _client) + << LOG_KV("topicSeq", topicSeq()) + << LOG_KV("topicItems size", _topicItems.size()); +} + +/** + * @brief: query topics sub by client + * @param _clientID: client identify, to be defined + * @param _topicItems: topics subscribe by client + * @return void + */ +bool TopicManager::queryTopicItemsByClient(const std::string& _client, TopicItems& _topicItems) +{ + bool result = false; + { + std::shared_lock lock(x_clientTopics); + auto it = m_client2TopicItems.find(_client); + if (it != m_client2TopicItems.end()) + { + _topicItems = it->second; + result = true; + } + } + + TOPIC_LOG(INFO) << LOG_BADGE("queryTopicItemsByClient") << LOG_KV("client", _client) + << LOG_KV("result", result) << LOG_KV("topicItems size", _topicItems.size()); + return result; +} + +/** + * @brief: clear all topics subscribe by client + * @param _clientID: client identify, to be defined + * @return void + */ +void TopicManager::removeTopics( + const std::string& _client, std::vector const& _topicList) +{ + if (_topicList.size() == 0) + { + return; + } + { + std::unique_lock lock(x_clientTopics); + if (!m_client2TopicItems.count(_client)) + { + return; + } + for (auto const& topic : _topicList) + { + if (m_client2TopicItems[_client].count(topic)) + { + m_client2TopicItems[_client].erase(topic); + } + TOPIC_LOG(INFO) << LOG_BADGE("removeTopics") << LOG_KV("client", _client) + << LOG_KV("topicSeq", topicSeq()) << LOG_KV("topic", topic); + } + incTopicSeq(); + } +} + +void TopicManager::removeTopicsByClient(const std::string& _client) +{ + std::size_t result = 0; + { + std::unique_lock lock(x_clientTopics); + + result = m_client2TopicItems.erase(_client); + } + + incTopicSeq(); + + TOPIC_LOG(INFO) << LOG_BADGE("removeTopicsByClient") << LOG_KV("client", _client) + << LOG_KV("success", result); +} + +/** + * @brief: query topics subscribe by all connected clients + * @return result in json format + */ +std::string TopicManager::queryTopicsSubByClient() +{ + try + { + uint32_t seq; + TopicItems topicItems; + { + std::shared_lock lock(x_clientTopics); + seq = topicSeq(); + for (const auto& m : m_client2TopicItems) + { + topicItems.insert(m.second.begin(), m.second.end()); + } + } + + Json::Value jTopics = Json::Value(Json::arrayValue); + for (const auto& topicItem : topicItems) + { + jTopics.append(topicItem.topicName()); + } + + Json::Value jResp; + jResp["topicSeq"] = seq; + jResp["topicItems"] = jTopics; + + Json::FastWriter writer; + std::string topicJson = writer.write(jResp); + + TOPIC_LOG(DEBUG) << LOG_BADGE("queryTopicsSubByClient") << LOG_KV("topicSeq", seq) + << LOG_KV("topicJson", topicJson); + return topicJson; + } + catch (const std::exception& e) + { + TOPIC_LOG(ERROR) << LOG_BADGE("queryTopicsSubByClient") + << LOG_KV("error", boost::diagnostic_information(e)); + return ""; + } +} + +/** + * @brief: parse json to fetch topicSeq and topicItems + * @param _topicSeq: topicSeq + * @param _topicItems: topics + * @param _json: json + * @return void + */ +bool TopicManager::parseTopicItemsJson( + uint32_t& _topicSeq, TopicItems& _topicItems, const std::string& _json) +{ + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(_json, root)) + { + TOPIC_LOG(ERROR) << LOG_BADGE("parseTopicItemsJson") << LOG_DESC("unable to parse json") + << LOG_KV("json:", _json); + return false; + } + + uint32_t topicSeq; + TopicItems topicItems; + + topicSeq = root["topicSeq"].asUInt(); + auto topicItemsSize = root["topicItems"].size(); + + for (unsigned int i = 0; i < topicItemsSize; i++) + { + std::string topic = root["topicItems"][i].asString(); + topicItems.insert(TopicItem(topic)); + } + + _topicSeq = topicSeq; + _topicItems = topicItems; + + TOPIC_LOG(INFO) << LOG_BADGE("parseTopicItemsJson") << LOG_KV("topicSeq", topicSeq) + << LOG_KV("topicItems size", topicItems.size()) << LOG_KV("json", _json); + return true; + } + catch (const std::exception& e) + { + TOPIC_LOG(ERROR) << LOG_BADGE("parseTopicItemsJson") << LOG_DESC("parse json exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("json:", _json); + return false; + } +} + +/** + * @brief: check if the topicSeq of nodeID changed + * @param _nodeID: the peer nodeID + * @param _topicSeq: the topicSeq of the nodeID + * @return bool: if the nodeID has been changed + */ +bool TopicManager::checkTopicSeq(P2pID const& _nodeID, uint32_t _topicSeq) +{ + std::shared_lock lock(x_topics); + auto it = m_nodeID2TopicSeq.find(_nodeID); + if (it != m_nodeID2TopicSeq.end() && it->second == _topicSeq) + { + return false; + } + return true; +} + +/** + * @brief: update online nodeIDs, clean up the offline nodeIDs state + * @param _nodeIDs: the online nodeIDs + * @return void + */ +void TopicManager::notifyNodeIDs(const std::vector& _nodeIDs) +{ + int removeCount = 0; + { + std::unique_lock lock(x_topics); + for (auto it = m_nodeID2TopicSeq.begin(); it != m_nodeID2TopicSeq.end();) + { + if (std::find_if(_nodeIDs.begin(), _nodeIDs.end(), [&it](std::string _nodeID) -> bool { + return it->first == _nodeID; + }) == _nodeIDs.end()) + { // nodeID is offline, remove the nodeID's state + m_nodeID2TopicItems.erase(it->first); + it = m_nodeID2TopicSeq.erase(it); + removeCount++; + } + else + { + ++it; + } + } + } + + TOPIC_LOG(INFO) << LOG_BADGE("notifyNodeIDs") << LOG_KV("removeCount", removeCount); +} + +/** + * @brief: update the topicSeq and topicItems of the nodeID's + * @param _nodeID: nodeID + * @param _topicSeq: topicSeq + * @param _topicItems: topicItems + * @return void + */ +void TopicManager::updateSeqAndTopicsByNodeID( + P2pID const& _nodeID, uint32_t _topicSeq, const TopicItems& _topicItems) +{ + { + std::unique_lock lock(x_topics); + m_nodeID2TopicSeq[_nodeID] = _topicSeq; + m_nodeID2TopicItems[_nodeID] = _topicItems; + } + + TOPIC_LOG(INFO) << LOG_BADGE("updateSeqAndTopicsByNodeID") << LOG_KV("nodeID", _nodeID) + << LOG_KV("topicSeq", _topicSeq) + << LOG_KV("topicItems size", _topicItems.size()); +} + +/** + * @brief: find the nodeIDs by topic + * @param _topic: topic + * @param _nodeIDs: nodeIDs + * @return void + */ +void TopicManager::queryNodeIDsByTopic( + const std::string& _topic, std::vector& _nodeIDs) +{ + std::shared_lock lock(x_topics); + for (auto it = m_nodeID2TopicItems.begin(); it != m_nodeID2TopicItems.end(); ++it) + { + auto findIt = std::find_if(it->second.begin(), it->second.end(), + [_topic](const TopicItem& _topicItem) { return _topic == _topicItem.topicName(); }); + // only return the connected nodes + if (findIt != it->second.end() && m_network->isReachable(it->first)) + { + _nodeIDs.push_back(it->first); + } + } + return; +} + +/** + * @brief: find clients by topic + * @param _topic: topic + * @param _nodeIDs: nodeIDs + * @return void + */ +void TopicManager::queryClientsByTopic( + const std::string& _topic, std::vector& _clients) +{ + { + std::shared_lock lock(x_clientTopics); + for (const auto& items : m_client2TopicItems) + { + auto it = std::find_if(items.second.begin(), items.second.end(), + [_topic](const TopicItem& _topicItem) { return _topic == _topicItem.topicName(); }); + if (it != items.second.end()) + { + _clients.push_back(items.first); + } + } + } + + TOPIC_LOG(INFO) << LOG_BADGE("queryClientsByTopic") << LOG_KV("topic", _topic) + << LOG_KV("clients size", _clients.size()); +} + +// +bcos::rpc::RPCInterface::Ptr TopicManager::createAndGetServiceByClient(std::string const& _clientID) +{ + try + { + UpgradableGuard l(x_clientInfo); + if (m_clientInfo.count(_clientID)) + { + return m_clientInfo[_clientID]; + } + + auto serviceName = m_rpcServiceName; + + auto topicManagerWeakPtr = std::weak_ptr(shared_from_this()); + auto servicePrx = bcostars::createServantProxy( + tars::Application::getCommunicator().get(), _clientID, + bcostars::TarsServantProxyOnConnectHandler(), + [serviceName, topicManagerWeakPtr](const tars::TC_Endpoint& ep) { + auto topicManager = topicManagerWeakPtr.lock(); + if (!topicManager) + { + return; + } + + auto endPointUrl = bcostars::endPointToString(serviceName, ep); + topicManager->removeTopicsByClient(endPointUrl); + }); + + auto rpcClient = std::make_shared(servicePrx, m_rpcServiceName); + + { + UpgradeGuard ul(l); + m_clientInfo[_clientID] = rpcClient; + } + + TOPIC_LOG(INFO) << LOG_DESC("createAndGetServiceByClient") << LOG_KV("clientID", _clientID); + return rpcClient; + } + catch (std::exception const& e) + { + TOPIC_LOG(WARNING) << LOG_DESC("createAndGetServiceByClient exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + return nullptr; +} + +void TopicManager::notifyRpcToSubscribeTopics() +{ + try + { + auto servicePrx = bcostars::createServantProxy(m_rpcServiceName); + + auto rpcClient = std::make_shared(servicePrx, m_rpcServiceName); + + auto activeEndPoints = bcostars::tarsProxyAvailableEndPoints(rpcClient->prx()); + + TOPIC_LOG(INFO) << LOG_DESC("notifyRpcToSubscribeTopics") + << LOG_KV("rpcServiceName", m_rpcServiceName) + << LOG_KV("activeEndPoints size", activeEndPoints.size()); + + for (auto const& endPoint : activeEndPoints) + { + auto endPointStr = bcostars::endPointToString(m_rpcServiceName, endPoint); + + auto servicePrx = + bcostars::createServantProxy(m_rpcServiceName, endPoint); + + auto serviceClient = + std::make_shared(servicePrx, m_rpcServiceName); + serviceClient->asyncNotifySubscribeTopic( + [this, endPointStr](Error::Ptr _error, std::string _topicInfo) { + if (_error) + { + TOPIC_LOG(INFO) << LOG_DESC("asyncNotifySubscribeTopic error") + << LOG_KV("endPoint", endPointStr) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + return; + } + TOPIC_LOG(INFO) + << LOG_DESC("asyncNotifySubscribeTopic success") + << LOG_KV("endPoint", endPointStr) << LOG_KV("topicInfo", _topicInfo); + + subTopic(endPointStr, _topicInfo); + }); + } + } + catch (std::exception const& e) + { + TOPIC_LOG(WARNING) << LOG_DESC("notifyRpcToSubscribeTopics exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libamop/TopicManager.h b/bcos-gateway/bcos-gateway/libamop/TopicManager.h new file mode 100644 index 0000000..cbef0d8 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libamop/TopicManager.h @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TopicManager.h + * @author: octopus + * @date 2021-06-18 + */ +#pragma once + +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace amop +{ +class TopicManager : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + TopicManager(std::string const& _rpcServiceName, bcos::gateway::P2PInterface::Ptr _network) + { + m_rpcServiceName = _rpcServiceName; + m_network = _network; + } + virtual ~TopicManager() {} + + virtual void start() { notifyRpcToSubscribeTopics(); } + virtual void stop() {} + + uint32_t topicSeq() const { return m_topicSeq; } + uint32_t incTopicSeq() + { + uint32_t topicSeq = ++m_topicSeq; + return topicSeq; + } + + /** + * @brief: parse client sub topics json + * @param _topicItems: return value, topics + * @param _json: json + * @return void + */ + bool parseSubTopicsJson(const std::string& _json, TopicItems& _topicItems); + /** + * @brief: client subscribe topic + * @param _clientID: client identify, to be defined + * @param _topicJson: topics subscribe by client + * @return void + */ + void subTopic(const std::string& _client, const std::string& _topicJson); + /** + * @brief: client subscribe topic + * @param _clientID: client identify, to be defined + * @param _topicItems: topics subscribe by client + * @return void + */ + void subTopic(const std::string& _client, const TopicItems& _topicItems); + /** + * @brief: query topics sub by client + * @param _clientID: client identify, to be defined + * @param _topicItems: topics subscribe by client + * @return bool + */ + bool queryTopicItemsByClient(const std::string& _client, TopicItems& _topicItems); + /** + * @brief: remove all topics subscribed by client + * @param _clientID: client identify, to be defined + * @return void + */ + void removeTopics(const std::string& _client, std::vector const& _topicList); + + void removeTopicsByClient(const std::string& _client); + /** + * @brief: query topics subscribed by all connected clients + * @return json string result, include topicSeq and topicItems fields + */ + std::string queryTopicsSubByClient(); + /** + * @brief: parse json to fetch topicSeq and topicItems + * @param _topicSeq: return value, topicSeq + * @param _topicItems: return value, topics + * @param _json: json + * @return void + */ + bool parseTopicItemsJson( + uint32_t& _topicSeq, TopicItems& _topicItems, const std::string& _json); + /** + * @brief: check if the topicSeq of nodeID changed + * @param _nodeID: the peer nodeID + * @param _topicSeq: the topicSeq of the nodeID + * @return bool: if the nodeID has been changed + */ + bool checkTopicSeq(bcos::gateway::P2pID const& _nodeID, uint32_t _topicSeq); + /** + * @brief: update online nodeIDs, clean up the offline nodeIDs state + * @param _nodeIDs: the online nodeIDs + * @return void + */ + void notifyNodeIDs(const std::vector& _nodeIDs); + /** + * @brief: update the topicSeq and topicItems of the nodeID's + * @param _nodeID: nodeID + * @param _topicSeq: topicSeq + * @param _topicItems: topicItems + * @return void + */ + void updateSeqAndTopicsByNodeID( + bcos::gateway::P2pID const& _nodeID, uint32_t _topicSeq, const TopicItems& _topicItems); + /** + * @brief: find the nodeIDs by topic + * @param _topic: topic + * @param _nodeIDs: nodeIDs + * @return void + */ + void queryNodeIDsByTopic(const std::string& _topic, std::vector& _nodeIDs); + /** + * @brief: find clients by topic + * @param _topic: topic + * @param _nodeIDs: nodeIDs + * @return void + */ + void queryClientsByTopic(const std::string& _topic, std::vector& _clients); + + virtual bcos::rpc::RPCInterface::Ptr createAndGetServiceByClient(std::string const& _clientID); + +protected: + virtual void notifyRpcToSubscribeTopics(); + + // m_client2TopicItems lock + mutable std::shared_mutex x_clientTopics; + // client => TopicItems + // Note: the clientID is the rpc node endpoint + std::unordered_map m_client2TopicItems; + + // topicSeq + std::atomic m_topicSeq{1}; + + // nodeID => topicSeq + std::unordered_map m_nodeID2TopicSeq; + // m_nodeID2TopicSeq lock + mutable std::shared_mutex x_topics; + + // nodeID => topicItems + std::unordered_map m_nodeID2TopicItems; + + std::map m_clientInfo; + mutable SharedMutex x_clientInfo; + + std::string m_rpcServiceName; + bcos::gateway::P2PInterface::Ptr m_network; +}; +} // namespace amop +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.cpp b/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.cpp new file mode 100644 index 0000000..372983c --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.cpp @@ -0,0 +1,36 @@ +/** + * @brief: inteface for boost::asio(for unittest) + * + * @file AsioInterface.cpp + * @author: bxq2011hust + * @date 2019-07-244 + */ +#include + +namespace ba = boost::asio; +namespace bi = ba::ip; +using namespace bcos; +using namespace bcos::gateway; +using namespace std; + +void ASIOInterface::asyncResolveConnect(std::shared_ptr socket, Handler_Type handler) +{ + auto protocol = socket->nodeIPEndpoint().isIPv6() ? bi::tcp::tcp::v6() : bi::tcp::tcp::v4(); + m_resolver->async_resolve(protocol, socket->nodeIPEndpoint().address(), + to_string(socket->nodeIPEndpoint().port()), + [=](const boost::system::error_code& ec, bi::tcp::resolver::results_type results) { + if (!ec) + { + // results is a iterator, but only use first endpoint. + socket->ref().async_connect(results->endpoint(), handler); + ASIO_LOG(INFO) << LOG_DESC("asyncResolveConnect") + << LOG_KV("endpoint", results->endpoint()); + } + else + { + ASIO_LOG(WARNING) << LOG_DESC("asyncResolve failed") + << LOG_KV("host", socket->nodeIPEndpoint().address()) + << LOG_KV("port", socket->nodeIPEndpoint().port()); + } + }); +} diff --git a/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.h b/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.h new file mode 100644 index 0000000..0804e97 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/ASIOInterface.h @@ -0,0 +1,187 @@ +/** + * @brief: inteface for boost::asio(for unittest) + * + * @file AsioInterface.h + * @author: yujiechen + * @date 2018-09-13 + */ +#pragma once +#include +#include +#include +#include +#include + +namespace ba = boost::asio; +namespace bi = ba::ip; + +namespace bcos +{ +namespace gateway +{ +class ASIOInterface +{ +public: + enum ASIO_TYPE + { + TCP_ONLY = 0, + SSL = 1 + }; + + /// CompletionHandler + using Base_Handler = boost::function; + /// accept handler + using Handler_Type = boost::function; + /// write handler + using ReadWriteHandler = boost::function; + using VerifyCallback = boost::function; + + virtual ~ASIOInterface() {} + virtual void setType(int type) { m_type = type; } + + virtual std::shared_ptr ioService() { return m_ioServicePool->getIOService(); } + virtual void setIOServicePool(IOServicePool::Ptr _ioServicePool) + { + m_ioServicePool = _ioServicePool; + m_timerIOService = m_ioServicePool->getIOService(); + } + + virtual std::shared_ptr srvContext() { return m_srvContext; } + virtual std::shared_ptr clientContext() { return m_clientContext; } + + virtual void setSrvContext(std::shared_ptr _srvContext) + { + m_srvContext = _srvContext; + } + virtual void setClientContext(std::shared_ptr _clientContext) + { + m_clientContext = _clientContext; + } + + virtual std::shared_ptr newTimer(uint32_t timeout) + { + return std::make_shared( + *(m_timerIOService), boost::posix_time::milliseconds(timeout)); + } + + virtual std::shared_ptr newSocket( + bool _server, NodeIPEndpoint nodeIPEndpoint = NodeIPEndpoint()) + { + std::shared_ptr m_socket = + std::make_shared(m_ioServicePool->getIOService(), + _server ? *m_srvContext : *m_clientContext, nodeIPEndpoint); + return m_socket; + } + + virtual std::shared_ptr acceptor() { return m_acceptor; } + + virtual void init(std::string listenHost, uint16_t listenPort) + { + m_strand = + std::make_shared(*(m_ioServicePool->getIOService())); + m_resolver = std::make_shared(*(m_ioServicePool->getIOService())); + m_acceptor = std::make_shared(*(m_ioServicePool->getIOService()), + bi::tcp::endpoint(bi::make_address(listenHost), listenPort)); + boost::asio::socket_base::reuse_address optionReuseAddress(true); + m_acceptor->set_option(optionReuseAddress); + } + + virtual void start() { m_ioServicePool->start(); } + virtual void stop() { m_ioServicePool->stop(); } + + virtual void asyncAccept(std::shared_ptr socket, Handler_Type handler, + boost::system::error_code = boost::system::error_code()) + { + m_acceptor->async_accept(socket->ref(), handler); + } + + virtual void asyncResolveConnect(std::shared_ptr socket, Handler_Type handler); + + virtual void asyncWrite(std::shared_ptr socket, + boost::asio::mutable_buffers_1 buffers, ReadWriteHandler handler) + { + auto type = m_type; + auto ioService = socket->ioService(); + ioService->post([type, socket, buffers, handler]() { + if (socket->isConnected()) + { + switch (type) + { + case TCP_ONLY: + { + ba::async_write(socket->ref(), buffers, handler); + break; + } + case SSL: + { + ba::async_write(socket->sslref(), buffers, handler); + break; + } + } + } + }); + } + + virtual void asyncRead(std::shared_ptr socket, + boost::asio::mutable_buffers_1 buffers, ReadWriteHandler handler) + { + switch (m_type) + { + case TCP_ONLY: + { + ba::async_read(socket->ref(), buffers, handler); + break; + } + case SSL: + { + ba::async_read(socket->sslref(), buffers, handler); + break; + } + } + } + + virtual void asyncReadSome(std::shared_ptr socket, + boost::asio::mutable_buffers_1 buffers, ReadWriteHandler handler) + { + switch (m_type) + { + case TCP_ONLY: + { + socket->ref().async_read_some(buffers, handler); + break; + } + case SSL: + { + socket->sslref().async_read_some(buffers, handler); + break; + } + } + } + + virtual void asyncHandshake(std::shared_ptr socket, + ba::ssl::stream_base::handshake_type type, Handler_Type handler) + { + socket->sslref().async_handshake(type, handler); + } + + virtual void setVerifyCallback( + std::shared_ptr socket, VerifyCallback callback, bool = true) + { + socket->sslref().set_verify_callback(callback); + } + + virtual void strandPost(Base_Handler handler) { m_strand->post(handler); } + +protected: + IOServicePool::Ptr m_ioServicePool; + std::shared_ptr m_timerIOService; + std::shared_ptr m_strand; + std::shared_ptr m_acceptor; + std::shared_ptr m_resolver; + + std::shared_ptr m_srvContext; + std::shared_ptr m_clientContext; + int m_type = 0; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/Common.h b/bcos-gateway/bcos-gateway/libnetwork/Common.h new file mode 100644 index 0000000..0ae428b --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Common.h @@ -0,0 +1,140 @@ + +/** @file Common.h + * Miscellanea required for the Host/Session/NodeTable classes. + * + * @author yujiechen + * @date: 2018-09-19 + */ + +#pragma once + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +namespace ba = boost::asio; +namespace bi = boost::asio::ip; +#define HOST_LOG(LEVEL) BCOS_LOG(LEVEL) << "[NETWORK][Host]" +#define SESSION_LOG(LEVEL) BCOS_LOG(LEVEL) << "[SESSION][Session]" +#define ASIO_LOG(LEVEL) BCOS_LOG(LEVEL) << "[ASIO][ASIO]" + +namespace bcos +{ +namespace gateway +{ +enum MessageDecodeStatus +{ + MESSAGE_ERROR = -1, + MESSAGE_INCOMPLETE = 0, +}; +enum DisconnectReason +{ + DisconnectRequested = 0, + TCPError, + BadProtocol, + UselessPeer, + TooManyPeers, + DuplicatePeer, + IncompatibleProtocol, + NullIdentity, + ClientQuit, + UnexpectedIdentity, + LocalIdentity, + PingTimeout, + UserReason = 0x10, + IdleWaitTimeout = 0x11, + NegotiateFailed = 0x12, + NoDisconnect = 0xffff +}; + +///< P2PExceptionType and g_P2PExceptionMsg used in P2PException +enum P2PExceptionType +{ + Success = 0, + ProtocolError, + NetworkTimeout, + Disconnect, + P2PExceptionTypeCnt, + ConnectError, + DuplicateSession, + NotInWhitelist, + BandwidthOverFlow, + ALL, +}; + +// +using P2pID = std::string; +using P2pIDs = std::set; +struct Options +{ + Options() {} + Options(uint32_t _timeout) : timeout(_timeout) {} + uint32_t timeout = 0; ///< The timeout value of async function, in milliseconds. +}; + +class NetworkException : public std::exception +{ +public: + NetworkException(){}; + NetworkException(int _errorCode, const std::string& _msg) + : m_errorCode(_errorCode), m_msg(_msg){}; + + virtual int errorCode() const { return m_errorCode; }; + const char* what() const noexcept override { return m_msg.c_str(); }; + bool operator!() const { return m_errorCode == 0; } + + virtual Error::Ptr toError() { return std::make_shared(errorCode(), m_msg); } + +private: + int m_errorCode = 0; + std::string m_msg; +}; + +/// @returns the string form of the given disconnection reason. +inline std::string reasonOf(DisconnectReason _r) +{ + switch (_r) + { + case DisconnectRequested: + return "Disconnect was requested."; + case TCPError: + return "Low-level TCP communication error."; + case BadProtocol: + return "Data format error."; + case UselessPeer: + return "Peer had no use for this node."; + case TooManyPeers: + return "Peer had too many connections."; + case DuplicatePeer: + return "Peer was already connected."; + case IncompatibleProtocol: + return "Peer protocol versions are incompatible."; + case NullIdentity: + return "Null identity given."; + case ClientQuit: + return "Peer is exiting."; + case UnexpectedIdentity: + return "Unexpected identity given."; + case LocalIdentity: + return "Connected to ourselves."; + case UserReason: + return "Subprotocol reason."; + case NoDisconnect: + return "(No disconnect has happened.)"; + case IdleWaitTimeout: + return "(Idle connection for no network io happens during 5s time " + "intervals.)"; + default: + return "Unknown reason."; + } +} +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/Host.cpp b/bcos-gateway/bcos-gateway/libnetwork/Host.cpp new file mode 100644 index 0000000..d285318 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Host.cpp @@ -0,0 +1,554 @@ + +/** @file Host.cpp + * @author Alex Leverington + * @author Gav Wood + * @date 2014 + * @author toxotguo + * @date 2018 + * + * @ author: yujiechen + * @ date: 2018-09-19 + * @ modifications: + * 1. modify io_service value from 1 to 2 + * (construction of io_service is io_service(std::size_t concurrency_hint);) + * (currenncy_hint means that "A suggestion to the implementation on how many + * threads it should allow to run simultaneously.") (since ethereum use 2, we + * modify io_service from 1 to 2) 2. + */ +#include // for ASIOIn... +#include // for HOST_LOG +#include +#include // for Sessio... +#include // for Socket... +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::gateway; + +/** + * @brief: accept connection requests, maily include procedures: + * 1. async_accept: accept connection requests + * 2. ssl handshake: obtain node id from the certificate during ssl + * handshake + * 3. if ssl handshake success, call 'handshakeServer' to init client + * socket and get caps, version of the connecting client, and startPeerSession + * (mainly init the caps and session, and update peer related + * information) + * @attention: this function is called repeatedly + */ +void Host::startAccept(boost::system::error_code boost_error) +{ + /// accept the connection + if (m_run) + { + HOST_LOG(INFO) << LOG_DESC("P2P StartAccept") << LOG_KV("Host", m_listenHost) << ":" + << m_listenPort; + auto socket = m_asioInterface->newSocket(true, NodeIPEndpoint()); + // get and set the accepted endpoint to socket(client endpoint) + /// define callback after accept connections + m_asioInterface->asyncAccept( + socket, + [=, this](boost::system::error_code ec) { + /// get the endpoint information of remote client after accept the + /// connections + auto endpoint = socket->remoteEndpoint(); + HOST_LOG(TRACE) << LOG_DESC("P2P Recv Connect, From=") << endpoint; + /// network acception failed + if (ec || !m_run) + { + HOST_LOG(ERROR) << "Error: " << ec; + socket->close(); + startAccept(); + + return; + } + + /// if the connected peer over the limitation, drop socket + socket->setNodeIPEndpoint(endpoint); + HOST_LOG(INFO) << LOG_DESC("P2P Recv Connect, From=") << endpoint; + /// register ssl callback to get the NodeID of peers + std::shared_ptr endpointPublicKey = std::make_shared(); + m_asioInterface->setVerifyCallback(socket, newVerifyCallback(endpointPublicKey)); + m_asioInterface->asyncHandshake(socket, ba::ssl::stream_base::server, + boost::bind(&Host::handshakeServer, shared_from_this(), ba::placeholders::error, + endpointPublicKey, socket)); + + startAccept(); + }, + boost_error); + } +} + +/** + * @brief : functions called after openssl handshake, + * maily to get node id and verify whether the certificate has been + * expired + * @param nodeIDOut : also return value, pointer points to the node id string + * @return std::function: + * return true: verify success + * return false: verify failed + * modifications 2019.03.20: append subject name and issuer name after nodeIDOut + * for demand of fisco-bcos-browser + */ +std::function Host::newVerifyCallback( + std::shared_ptr nodeIDOut) +{ + auto host = std::weak_ptr(shared_from_this()); + return [host, nodeIDOut](bool preverified, boost::asio::ssl::verify_context& ctx) { + auto hostPtr = host.lock(); + if (!hostPtr) + { + return false; + } + + try + { + /// return early when the certificate is invalid + if (!preverified) + { + return false; + } + /// get the object points to certificate + X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle()); + if (!cert) + { + HOST_LOG(ERROR) << LOG_DESC("Get cert failed"); + return preverified; + } + + // For compatibility, p2p communication between nodes still uses the old public key analysis method + if (!hostPtr->sslContextPubHandler()(cert, *nodeIDOut)) + { + return preverified; + } + + int crit = 0; + BASIC_CONSTRAINTS* basic = + (BASIC_CONSTRAINTS*)X509_get_ext_d2i(cert, NID_basic_constraints, &crit, NULL); + if (!basic) + { + HOST_LOG(INFO) << LOG_DESC("Get ca basic failed"); + return preverified; + } + + /// ignore ca + if (basic->ca) + { + // ca or agency certificate + HOST_LOG(TRACE) << LOG_DESC("Ignore CA certificate"); + BASIC_CONSTRAINTS_free(basic); + return preverified; + } + + BASIC_CONSTRAINTS_free(basic); + + // The new public key analysis method is used for black and white lists + std::string nodeIDOutWithoutExtInfo; + if (!hostPtr->sslContextPubHandlerWithoutExtInfo()(cert, nodeIDOutWithoutExtInfo)) + { + return preverified; + } + nodeIDOutWithoutExtInfo = boost::to_upper_copy(nodeIDOutWithoutExtInfo); + + // If the node ID exists in the black and white lists at the same time, the black list + // takes precedence + if (nullptr != hostPtr->peerBlacklist() && + true == hostPtr->peerBlacklist()->has(nodeIDOutWithoutExtInfo)) + { + HOST_LOG(INFO) << LOG_DESC("NodeID in certificate blacklist") + << LOG_KV("nodeID", NodeID(nodeIDOutWithoutExtInfo).abridged()); + return false; + } + + if (nullptr != hostPtr->peerWhitelist() && + false == hostPtr->peerWhitelist()->has(nodeIDOutWithoutExtInfo)) + { + HOST_LOG(INFO) << LOG_DESC("NodeID is not in certificate whitelist") + << LOG_KV("nodeID", NodeID(nodeIDOutWithoutExtInfo).abridged()); + return false; + } + + /// append cert-name and issuer name after node ID + /// get subject name + const char* certName = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0); + /// get issuer name + const char* issuerName = X509_NAME_oneline(X509_get_issuer_name(cert), NULL, 0); + /// format: {nodeID}#{issuer-name}#{cert-name} + nodeIDOut->append("#"); + nodeIDOut->append(nodeIDOutWithoutExtInfo); + nodeIDOut->append("#"); + nodeIDOut->append(issuerName); + nodeIDOut->append("#"); + nodeIDOut->append(certName); + OPENSSL_free((void*)certName); + OPENSSL_free((void*)issuerName); + + return preverified; + } + catch (std::exception& e) + { + HOST_LOG(ERROR) << LOG_DESC("Cert verify failed") << boost::diagnostic_information(e); + return preverified; + } + }; +} + +P2PInfo Host::p2pInfo() +{ + try + { + if (m_p2pInfo.p2pID.empty()) + { + /// get certificate + auto sslContext = m_asioInterface->srvContext()->native_handle(); + X509* cert = SSL_CTX_get0_certificate(sslContext); + + /// get issuer name + const char* issuer = X509_NAME_oneline(X509_get_issuer_name(cert), NULL, 0); + std::string issuerName(issuer); + + /// get subject name + const char* subject = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0); + std::string subjectName(subject); + + /// get p2pID + std::string nodeIDOut; + if (m_sslContextPubHandler(cert, nodeIDOut)) + { + m_p2pInfo.p2pID = boost::to_upper_copy(nodeIDOut); + HOST_LOG(INFO) << LOG_DESC("Get node information from cert") + << LOG_KV("p2pid", m_p2pInfo.p2pID); + } + + std::string nodeIDOutWithoutExtInfo; + if (m_sslContextPubHandlerWithoutExtInfo(cert, nodeIDOutWithoutExtInfo)) + { + m_p2pInfo.p2pIDWithoutExtInfo = boost::to_upper_copy(nodeIDOutWithoutExtInfo); + HOST_LOG(INFO) << LOG_DESC("Get node information without ext info from cert") + << LOG_KV("p2pid without ext info", m_p2pInfo.p2pIDWithoutExtInfo); + } + + /// fill in the node informations + m_p2pInfo.agencyName = obtainCommonNameFromSubject(issuerName); + m_p2pInfo.nodeName = obtainCommonNameFromSubject(subjectName); + m_p2pInfo.nodeIPEndpoint = NodeIPEndpoint(m_listenHost, m_listenPort); + /// free resources + OPENSSL_free((void*)issuer); + OPENSSL_free((void*)subject); + } + } + catch (std::exception& e) + { + HOST_LOG(ERROR) << LOG_DESC("Get node information from cert failed.") + << boost::diagnostic_information(e); + return m_p2pInfo; + } + return m_p2pInfo; +} + +/** + * @brief: obtain the common name from the subject of certificate + * + * @param subject : the subject of the certificat + * the subject format is: /CN=xx/O=xxx/OU=xxx/ commonly + * @return std::string: the common name of the certificate + */ +std::string Host::obtainCommonNameFromSubject(std::string const& subject) +{ + std::vector fields; + boost::split(fields, subject, boost::is_any_of("/"), boost::token_compress_on); + for (auto field : fields) + { + std::size_t pos = field.find("CN"); + if (pos != std::string::npos) + { + std::vector cn_fields; + boost::split(cn_fields, field, boost::is_any_of("="), boost::token_compress_on); + /// use the whole fields as the common name + if (cn_fields.size() < 2) + { + return field; + } + /// return real common name + return cn_fields[1]; + } + } + return subject; +} + +/// obtain p2pInfo from given vector +void Host::obtainNodeInfo(P2PInfo& info, std::string const& node_info) +{ + std::vector node_info_vec; + boost::split(node_info_vec, node_info, boost::is_any_of("#"), boost::token_compress_on); + if (!node_info_vec.empty()) + { + info.p2pID = node_info_vec[0]; + } + if (node_info_vec.size() > 1) + { + info.p2pIDWithoutExtInfo = node_info_vec[1]; + } + if (node_info_vec.size() > 2) + { + info.agencyName = obtainCommonNameFromSubject(node_info_vec[2]); + } + if (node_info_vec.size() > 3) + { + info.nodeName = obtainCommonNameFromSubject(node_info_vec[3]); + } + + HOST_LOG(INFO) << "obtainP2pInfo " << LOG_KV("node_info", node_info) + << LOG_KV("p2pid", info.p2pID); +} + +/** + * @brief: server calls handshakeServer to after handshake + * mainly calls RLPxHandshake to obtain informations(client version, + * caps, etc), start peer session and start accepting procedure repeatedly + * @param error: error information triggered in the procedure of ssl handshake + * @param endpointPublicKey: public key obtained from certificate during + * handshake + * @param socket: socket related to the endpoint of the connected client + */ +void Host::handshakeServer(const boost::system::error_code& error, + std::shared_ptr endpointPublicKey, std::shared_ptr socket) +{ + if (error) + { + HOST_LOG(WARNING) << LOG_DESC("handshakeServer Handshake failed") + << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()) + << LOG_KV("endpoint", socket->nodeIPEndpoint()); + socket->close(); + return; + } + if (endpointPublicKey->empty()) + { + HOST_LOG(WARNING) << LOG_DESC("handshakeServer get p2pID failed") + << LOG_KV("remote endpoint", socket->remoteEndpoint()); + socket->close(); + return; + } + if (m_run) + { + /// node info splitted with # + /// format: {nodeId}{#}{agencyName}{#}{nodeName} + std::string node_info(*endpointPublicKey); + P2PInfo info; + obtainNodeInfo(info, node_info); + HOST_LOG(INFO) << LOG_DESC("handshakeServer succ") + << LOG_KV("remote endpoint", socket->remoteEndpoint()) + << LOG_KV("nodeid", info.p2pID); + startPeerSession(info, socket, m_connectionHandler); + } +} + +/** + * @brief: start peer sessions after handshake succeed(called by + * RLPxHandshake), mainly include four functions: + * 1. disconnect connecting host with invalid capability + * 2. modify m_peers && disconnect already-connected session + * 3. modify m_sessions and m_staticNodes + * 4. start new session (session->start()) + * @param _pub: node id of the connecting client + * @param _rlp: informations obtained from the client-peer during handshake + * now include protocolVersion, clientVersion, caps and + * listenPort + * @param _s : connected socket(used to init session object) + */ +// TODO: asyncConnect pass handle to startPeerSession, make use of it +void Host::startPeerSession(P2PInfo const& p2pInfo, std::shared_ptr const& socket, + std::function)>) +{ + auto weakHost = std::weak_ptr(shared_from_this()); + std::shared_ptr ps = m_sessionFactory->create_session( + weakHost, socket, m_messageFactory, m_sessionCallbackManager); + + auto connectionHandler = m_connectionHandler; + m_threadPool->enqueue([ps, connectionHandler, p2pInfo]() { + if (connectionHandler) + { + connectionHandler(NetworkException(0, ""), p2pInfo, ps); + } + else + { + HOST_LOG(WARNING) << LOG_DESC("No connectionHandler, new connection may lost"); + } + }); + HOST_LOG(INFO) << LOG_DESC("startPeerSession, Remote=") << socket->remoteEndpoint() + << LOG_KV("local endpoint", socket->localEndpoint()) + << LOG_KV("p2pid", p2pInfo.p2pID); +} + +/** + * @brief: remove expired timer + * modify alived peers to m_peers + * reconnect all nodes recorded in m_staticNodes periodically + */ +void Host::start() +{ + /// if the p2p network has been stoped, then stop related service + if (!haveNetwork()) + { + m_run = true; + m_asioInterface->init(m_listenHost, m_listenPort); + if (m_asioInterface->acceptor()) + { + startAccept(); + } + m_asioInterface->start(); + } +} + +/** + * @brief : connect to the server + * @param _nodeIPEndpoint : the endpoint of the connected server + */ +void Host::asyncConnect(NodeIPEndpoint const& _nodeIPEndpoint, + std::function)> callback) +{ + if (!m_run) + { + return; + } + HOST_LOG(INFO) << LOG_DESC("Connecting to node") << LOG_KV("endpoint", _nodeIPEndpoint); + { + Guard l(x_pendingConns); + if (m_pendingConns.count(_nodeIPEndpoint)) + { + BCOS_LOG(TRACE) << LOG_DESC("asyncConnected node is in the pending list") + << LOG_KV("endpoint", _nodeIPEndpoint); + return; + } + } + + std::shared_ptr socket = m_asioInterface->newSocket(false, _nodeIPEndpoint); + /// if async connect timeout, close the socket directly + auto connect_timer = std::make_shared( + *(socket->ioService()), boost::posix_time::milliseconds(m_connectTimeThre)); + connect_timer->async_wait([=, this](const boost::system::error_code& error) { + /// return when cancel has been called + if (error == boost::asio::error::operation_aborted) + { + HOST_LOG(DEBUG) << LOG_DESC("AsyncConnect handshake handler revoke this operation"); + return; + } + /// connection timer error + if (error && error != boost::asio::error::operation_aborted) + { + HOST_LOG(ERROR) << LOG_DESC("AsyncConnect timer failed") + << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()); + } + if (socket->isConnected()) + { + HOST_LOG(WARNING) << LOG_DESC("AsyncConnect timeout erase") + << LOG_KV("endpoint", _nodeIPEndpoint); + erasePendingConns(_nodeIPEndpoint); + socket->close(); + } + }); + /// callback async connect + m_asioInterface->asyncResolveConnect(socket, [=, this](boost::system::error_code const& ec) { + if (ec) + { + HOST_LOG(ERROR) << LOG_DESC("TCP Connection refused by node") + << LOG_KV("endpoint", _nodeIPEndpoint) + << LOG_KV("message", ec.message()); + socket->close(); + + m_threadPool->enqueue([callback, _nodeIPEndpoint]() { + callback(NetworkException(ConnectError, "Connect failed"), P2PInfo(), + std::shared_ptr()); + }); + return; + } + else + { + insertPendingConns(_nodeIPEndpoint); + /// get the public key of the server during handshake + std::shared_ptr endpointPublicKey = std::make_shared(); + m_asioInterface->setVerifyCallback(socket, newVerifyCallback(endpointPublicKey)); + /// call handshakeClient after handshake succeed + m_asioInterface->asyncHandshake(socket, ba::ssl::stream_base::client, + boost::bind(&Host::handshakeClient, shared_from_this(), ba::placeholders::error, + socket, endpointPublicKey, callback, _nodeIPEndpoint, connect_timer)); + } + }); +} + +/** + * @brief : start RLPxHandshake procedure after ssl handshake succeed + * @param error: error returned by ssl handshake + * @param socket : ssl socket + * @param endpointPublicKey: public key of the server obtained from the + * certificate + * @param _nodeIPEndpoint : endpoint of the server to connect + */ +void Host::handshakeClient(const boost::system::error_code& error, + std::shared_ptr socket, std::shared_ptr endpointPublicKey, + std::function)> callback, + NodeIPEndpoint _nodeIPEndpoint, std::shared_ptr timerPtr) +{ + timerPtr->cancel(); + erasePendingConns(_nodeIPEndpoint); + if (error) + { + HOST_LOG(WARNING) << LOG_DESC("handshakeClient failed") + << LOG_KV("endpoint", _nodeIPEndpoint) + << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()); + + if (socket->isConnected()) + { + socket->close(); + } + return; + } + if (endpointPublicKey->empty()) + { + HOST_LOG(WARNING) << LOG_DESC("handshakeClient get p2pID failed") + << LOG_KV("local endpoint", socket->localEndpoint()); + socket->close(); + return; + } + + if (m_run) + { + std::string node_info(*endpointPublicKey); + P2PInfo info; + obtainNodeInfo(info, node_info); + HOST_LOG(INFO) << LOG_DESC("handshakeClient succ") + << LOG_KV("local endpoint", socket->localEndpoint()); + startPeerSession(info, socket, callback); + } +} + +/// stop the network and worker thread +void Host::stop() +{ + // ignore if already stopped/stopping + if (!m_run) + return; + // signal run() to prepare for shutdown and reset m_timer + m_run = false; + if (m_asioInterface) + { + m_asioInterface->stop(); + } + if (m_threadPool) + { + m_threadPool->stop(); + } +} diff --git a/bcos-gateway/bcos-gateway/libnetwork/Host.h b/bcos-gateway/bcos-gateway/libnetwork/Host.h new file mode 100644 index 0000000..2e76442 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Host.h @@ -0,0 +1,219 @@ +/** @file Host.h + * @author monan <651932351@qq.com> + * @date 2018 + */ +#pragma once + +#include "bcos-gateway/libnetwork/SessionCallback.h" +#include // for NodeIP... +#include // for Message +#include +#include +#include // for Guard, Mutex +#include +#include +#include // for deadline_timer +#include // for error_code +#include +#include // for set +#include // for string +#include // for thread +#include // for swap, move +#include // for vector + + +namespace boost +{ +namespace asio +{ +namespace ssl +{ +class verify_context; +} +} // namespace asio +} // namespace boost +namespace bcos +{ +class ThreadPool; + +namespace gateway +{ +class SessionFactory; +class SessionFace; +class SocketFace; +class ASIOInterface; + +using x509PubHandler = std::function; + +class Host : public std::enable_shared_from_this +{ +public: + Host(std::shared_ptr _asioInterface, + std::shared_ptr _sessionFactory, MessageFactory::Ptr _messageFactory) + : m_asioInterface(_asioInterface), + m_sessionFactory(_sessionFactory), + m_messageFactory(_messageFactory){}; + virtual ~Host() { stop(); }; + + using Ptr = std::shared_ptr; + + virtual uint16_t listenPort() const { return m_listenPort; } + + virtual void start(); + virtual void stop(); + + virtual void asyncConnect(NodeIPEndpoint const& _nodeIPEndpoint, + std::function)> + callback); + + virtual bool haveNetwork() const { return m_run; } + + virtual std::string listenHost() const { return m_listenHost; } + virtual void setHostPort(std::string host, uint16_t port) + { + m_listenHost = host; + m_listenPort = port; + } + + virtual std::function)> + connectionHandler() const + { + return m_connectionHandler; + } + virtual void setConnectionHandler( + std::function)> + connectionHandler) + { + m_connectionHandler = connectionHandler; + } + + virtual std::function sslContextPubHandler() + { + return m_sslContextPubHandler; + } + + virtual void setSSLContextPubHandler( + std::function _sslContextPubHandler) + { + m_sslContextPubHandler = _sslContextPubHandler; + } + + virtual std::function + sslContextPubHandlerWithoutExtInfo() + { + return m_sslContextPubHandlerWithoutExtInfo; + } + + virtual void setSSLContextPubHandlerWithoutExtInfo( + std::function _sslContextPubHandlerWithoutExtInfo) + { + m_sslContextPubHandlerWithoutExtInfo = _sslContextPubHandlerWithoutExtInfo; + } + + virtual std::shared_ptr threadPool() const { return m_threadPool; } + virtual void setThreadPool(std::shared_ptr threadPool) + { + m_threadPool = threadPool; + } + + virtual void setSessionCallbackManager( + SessionCallbackManagerInterface::Ptr sessionCallbackManager) + { + m_sessionCallbackManager = sessionCallbackManager; + } + + virtual std::shared_ptr asioInterface() const { return m_asioInterface; } + virtual std::shared_ptr sessionFactory() const { return m_sessionFactory; } + virtual MessageFactory::Ptr messageFactory() const { return m_messageFactory; } + virtual P2PInfo p2pInfo(); + + virtual void setPeerBlacklist(PeerBlackWhitelistInterface::Ptr _peerBlacklist) + { + m_peerBlacklist = _peerBlacklist; + } + virtual PeerBlackWhitelistInterface::Ptr peerBlacklist() { return m_peerBlacklist; } + virtual void setPeerWhitelist(PeerBlackWhitelistInterface::Ptr _peerWhitelist) + { + m_peerWhitelist = _peerWhitelist; + } + virtual PeerBlackWhitelistInterface::Ptr peerWhitelist() { return m_peerWhitelist; } + +private: + /// obtain the common name from the subject: + /// the subject format is: /CN=xx/O=xxx/OU=xxx/ commonly + std::string obtainCommonNameFromSubject(std::string const& subject); + + /// called by 'startedWorking' to accept connections + void startAccept(boost::system::error_code ec = boost::system::error_code()); + /// functions called after openssl handshake, + /// maily to get node id and verify whether the certificate has been expired + /// @return: node id of the connected peer + std::function newVerifyCallback( + std::shared_ptr nodeIDOut); + + /// obtain nodeInfo from given vector + void obtainNodeInfo(P2PInfo& info, std::string const& node_info); + + /// server calls handshakeServer to after handshake, mainly calls + /// RLPxHandshake to obtain informations(client version, caps, etc),start peer + /// session and start accepting procedure repeatedly + void handshakeServer(const boost::system::error_code& error, + std::shared_ptr endpointPublicKey, std::shared_ptr socket); + + void startPeerSession(P2PInfo const& p2pInfo, std::shared_ptr const& socket, + std::function)> + handler); + + void handshakeClient(const boost::system::error_code& error, std::shared_ptr socket, + std::shared_ptr endpointPublicKey, + std::function)> + callback, + NodeIPEndpoint _nodeIPEndpoint, std::shared_ptr timerPtr); + + void erasePendingConns(NodeIPEndpoint const& _nodeIPEndpoint) + { + bcos::Guard l(x_pendingConns); + if (m_pendingConns.count(_nodeIPEndpoint)) + m_pendingConns.erase(_nodeIPEndpoint); + } + + void insertPendingConns(NodeIPEndpoint const& _nodeIPEndpoint) + { + bcos::Guard l(x_pendingConns); + if (!m_pendingConns.count(_nodeIPEndpoint)) + m_pendingConns.insert(_nodeIPEndpoint); + } + + std::shared_ptr m_threadPool; + std::shared_ptr m_sessionCallbackManager; + + /// representing to the network state + std::shared_ptr m_asioInterface; + std::shared_ptr m_sessionFactory; + int m_connectTimeThre = 50000; + std::set m_pendingConns; + bcos::Mutex x_pendingConns; + + MessageFactory::Ptr m_messageFactory; + + std::string m_listenHost = ""; + uint16_t m_listenPort = 0; + + std::function)> + m_connectionHandler; + + // get the hex public key of the peer from the the SSL connection + std::function m_sslContextPubHandler; + std::function m_sslContextPubHandlerWithoutExtInfo; + + bool m_run = false; + + P2PInfo m_p2pInfo; + + // Peer black list + PeerBlackWhitelistInterface::Ptr m_peerBlacklist{nullptr}; + PeerBlackWhitelistInterface::Ptr m_peerWhitelist{nullptr}; +}; +} // namespace gateway + +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/Message.h b/bcos-gateway/bcos-gateway/libnetwork/Message.h new file mode 100644 index 0000000..6b1db05 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Message.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Message.h + * @author: octopus + * @date 2021-05-06 + */ + +#pragma once + +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ + +class MessageExtAttributes +{ +public: + using Ptr = std::shared_ptr; + +public: + virtual ~MessageExtAttributes() = default; +}; + +class Message +{ +public: + using Ptr = std::shared_ptr; + +public: + virtual ~Message() = default; + + virtual uint32_t length() const = 0; + virtual uint32_t seq() const = 0; + virtual uint16_t version() const = 0; + virtual uint16_t packetType() const = 0; + virtual uint16_t ext() const = 0; + virtual bool isRespPacket() const = 0; + virtual bool encode(bcos::bytes& _buffer) = 0; + virtual ssize_t decode(bytesConstRef _buffer) = 0; + + virtual std::string const& srcP2PNodeID() const = 0; + virtual std::string const& dstP2PNodeID() const = 0; + + virtual MessageExtAttributes::Ptr extAttributes() = 0; +}; + +class MessageFactory +{ +public: + using Ptr = std::shared_ptr; + + MessageFactory() = default; + MessageFactory(const MessageFactory&) = delete; + MessageFactory(MessageFactory&&) = delete; + MessageFactory& operator=(const MessageFactory&) = delete; + MessageFactory&& operator=(MessageFactory&&) = delete; + + virtual ~MessageFactory() = default; + virtual Message::Ptr buildMessage() = 0; + +public: + virtual uint32_t newSeq() + { + uint32_t seq = ++m_seq; + return seq; + } + + std::atomic m_seq = {1}; +}; + +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.cpp b/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.cpp new file mode 100644 index 0000000..176aed3 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.cpp @@ -0,0 +1,67 @@ +/** @file PeerBlackWhitelistInterface.cpp + * PeerBlackWhitelistInterface of peer connection + * @author jimmyshi + * @date: 2019-08-06 + */ +#include "PeerBlackWhitelistInterface.h" +#include + +using namespace bcos; +using namespace gateway; + +PeerBlackWhitelistInterface::PeerBlackWhitelistInterface( + std::set const& _strList, bool _enable) + : m_enable(_enable) +{ + for (auto const& str : _strList) + { + m_peerList.insert(NodeID(str)); + } +} + +PeerBlackWhitelistInterface::PeerBlackWhitelistInterface( + std::set const& _nodeList, bool _enable) + : m_enable(_enable) +{ + for (auto const& node : _nodeList) + { + m_peerList.emplace(node); + } +} + +bool PeerBlackWhitelistInterface::has(NodeID _peer) const +{ + if (!m_enable) + { + return hasValueWhenDisable(); + } + + auto itr = m_peerList.find(_peer); + return itr != m_peerList.end(); +} + +bool PeerBlackWhitelistInterface::has(const std::string& _peer) const +{ + return has(NodeID(_peer)); +} + +std::string PeerBlackWhitelistInterface::dump(bool _isAbridged) +{ + std::stringstream ret; + ret << LOG_KV("enable", m_enable) << LOG_KV("size", m_peerList.size()) << ",list["; + for (auto nodeID : m_peerList) + { + if (_isAbridged) + { + ret << nodeID.abridged(); + } + else + { + ret << nodeID; + } + ret << ","; // It's ok to tail with ",]" + } + ret << "]"; + + return ret.str(); +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.h b/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.h new file mode 100644 index 0000000..ba8410c --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/PeerBlackWhitelistInterface.h @@ -0,0 +1,48 @@ +/** @file PeerBlackWhitelistInterface.h + * PeerBlackWhitelistInterface of peer connection + * @author jimmyshi + * @date: 2019-08-06 + */ +#pragma once + +#include + +#include +#include +#include +#include + +using NodeID = bcos::h512; + +namespace bcos +{ + +namespace gateway +{ + +class PeerBlackWhitelistInterface +{ +public: + using Ptr = std::shared_ptr; + +public: + PeerBlackWhitelistInterface(std::set const& _strList, bool _enable = false); + PeerBlackWhitelistInterface(std::set const& _nodeList, bool _enable); + virtual ~PeerBlackWhitelistInterface() = default; + + virtual bool has(NodeID _peer) const; + virtual bool has(const std::string& _peer) const; + virtual bool hasValueWhenDisable() const = 0; + virtual void setEnable(bool _enable) { m_enable = _enable; } + virtual bool enable() const { return m_enable; } + virtual std::string dump(bool _isAbridged = false); + virtual size_t size() { return m_peerList.size(); } + +protected: + bool m_enable{false}; + std::set m_peerList; +}; + +} // namespace gateway + +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/PeerBlacklist.h b/bcos-gateway/bcos-gateway/libnetwork/PeerBlacklist.h new file mode 100644 index 0000000..240b248 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/PeerBlacklist.h @@ -0,0 +1,27 @@ +#pragma once + +#include "PeerBlackWhitelistInterface.h" + +namespace bcos +{ + +namespace gateway +{ + +class PeerBlacklist : public PeerBlackWhitelistInterface +{ +public: + PeerBlacklist(std::set const& _strList, bool _enable = false) + : PeerBlackWhitelistInterface(_strList, _enable) + {} + PeerBlacklist(std::set const& _nodeList, bool _enable) + : PeerBlackWhitelistInterface(_nodeList, _enable) + {} + + // if not enable, all peers is not in blacklist + bool hasValueWhenDisable() const override { return false; } +}; + +} // namespace gateway + +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/PeerWhitelist.h b/bcos-gateway/bcos-gateway/libnetwork/PeerWhitelist.h new file mode 100644 index 0000000..3df2fc2 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/PeerWhitelist.h @@ -0,0 +1,27 @@ +#pragma once + +#include "PeerBlackWhitelistInterface.h" + +namespace bcos +{ + +namespace gateway +{ + +class PeerWhitelist : public PeerBlackWhitelistInterface +{ +public: + PeerWhitelist(std::set const& _strList, bool _enable = false) + : PeerBlackWhitelistInterface(_strList, _enable) + {} + PeerWhitelist(std::set const& _nodeList, bool _enable) + : PeerBlackWhitelistInterface(_nodeList, _enable) + {} + + // if not enable, all peers is in whitelist + bool hasValueWhenDisable() const override { return true; } +}; + +} // namespace gateway + +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/Session.cpp b/bcos-gateway/bcos-gateway/libnetwork/Session.cpp new file mode 100644 index 0000000..b110859 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Session.cpp @@ -0,0 +1,632 @@ + +/** @file Session.cpp + * @author Gav Wood + * @author Alex Leverington + * @date 2014 + * @author toxotguo + * @date 2018 + */ + +#include "bcos-utilities/BoostLog.h" +#include // for ASIOIn... +#include // for SESSIO... +#include // for Host +#include +#include // for Respon... +#include // for Socket... +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; + +Session::Session(size_t _bufferSize) : bufferSize(_bufferSize) +{ + SESSION_LOG(INFO) << "[Session::Session] this=" << this; + m_recvBuffer.resize(bufferSize); + m_idleCheckTimer = std::make_shared(m_idleTimeInterval, "idleChecker"); + m_idleCheckTimer->registerTimeoutHandler([this]() { checkNetworkStatus(); }); +} + +Session::~Session() +{ + SESSION_LOG(INFO) << "[Session::~Session] this=" << this; + try + { + if (m_socket) + { + bi::tcp::socket& socket = m_socket->ref(); + if (m_socket->isConnected()) + { + socket.close(); + } + } + if (m_idleCheckTimer) + { + m_idleCheckTimer->stop(); + } + } + catch (...) + { + SESSION_LOG(ERROR) << "Deconstruct Session exception"; + } +} + +NodeIPEndpoint Session::nodeIPEndpoint() const +{ + return m_socket->nodeIPEndpoint(); +} + +bool Session::actived() const +{ + auto server = m_server.lock(); + return m_actived && server && server->haveNetwork() && m_socket && m_socket->isConnected(); +} + +void Session::asyncSendMessage(Message::Ptr message, Options options, SessionCallbackFunc callback) +{ + auto server = m_server.lock(); + if (!actived()) + { + SESSION_LOG(WARNING) << "Session inactived"; + if (callback) + { + server->threadPool()->enqueue([callback] { + callback(NetworkException(-1, "Session inactived"), Message::Ptr()); + }); + } + return; + } + + auto session = shared_from_this(); + // checking before send the message + if (m_beforeMessageHandler && !m_beforeMessageHandler(session, message, callback)) + { + return; + } + + if (callback) + { + auto handler = std::make_shared(); + handler->callback = callback; + if (options.timeout > 0) + { + std::shared_ptr timeoutHandler = + server->asioInterface()->newTimer(options.timeout); + + auto session = std::weak_ptr(shared_from_this()); + auto seq = message->seq(); + timeoutHandler->async_wait([session, seq](const boost::system::error_code& _error) { + try + { + auto s = session.lock(); + if (!s) + { + return; + } + s->onTimeout(_error, seq); + } + catch (std::exception const& e) + { + SESSION_LOG(WARNING) << LOG_DESC("async_wait exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + handler->timeoutHandler = timeoutHandler; + handler->m_startTime = utcSteadyTime(); + } + + m_sessionCallbackManager->addCallback(message->seq(), handler); + } + + if (c_fileLogLevel <= LogLevel::TRACE) + { + SESSION_LOG(TRACE) << LOG_DESC("Session asyncSendMessage") + << LOG_KV("endpoint", nodeIPEndpoint()) << LOG_KV("seq", message->seq()) + << LOG_KV("packetType", message->packetType()) + << LOG_KV("resp", message->isRespPacket()); + } + + std::shared_ptr p_buffer = std::make_shared(); + message->encode(*p_buffer); + + send(p_buffer); +} + +void Session::send(const std::shared_ptr& _msg) +{ + if (!actived()) + { + return; + } + + if (!m_socket->isConnected()) + { + return; + } + + // SESSION_LOG(TRACE) << "send" << LOG_KV("writeQueue size", m_writeQueue.size()); + { + Guard lockGuard(x_writeQueue); + + m_writeQueue.push(make_pair(_msg, u256(utcTime()))); + } + + write(); +} + +void Session::onWrite(boost::system::error_code ec, std::size_t, std::shared_ptr) +{ + if (!actived()) + { + return; + } + + try + { + m_lastWriteTime.store(utcSteadyTime()); + if (ec) + { + SESSION_LOG(WARNING) << LOG_DESC("onWrite error sending") + << LOG_KV("message", ec.message()) + << LOG_KV("endpoint", nodeIPEndpoint()); + drop(TCPError); + return; + } + { + if (m_writing) + { + m_writing = false; + } + } + + write(); + } + catch (std::exception& e) + { + SESSION_LOG(ERROR) << LOG_DESC("onWrite error") << LOG_KV("endpoint", nodeIPEndpoint()) + << LOG_KV("what", boost::diagnostic_information(e)); + drop(TCPError); + return; + } +} + +void Session::write() +{ + if (!actived()) + { + return; + } + + try + { + Guard l(x_writeQueue); + + if (m_writing) + { + return; + } + + m_writing = true; + + std::pair, u256> task; + u256 enter_time = u256(0); + + if (m_writeQueue.empty()) + { + m_writing = false; + return; + } + + task = m_writeQueue.top(); + m_writeQueue.pop(); + + enter_time = task.second; + auto buffer = task.first; + + auto server = m_server.lock(); + if (server && server->haveNetwork()) + { + if (m_socket->isConnected()) + { + // asio::buffer referecne buffer, so buffer need alive before + // asio::buffer be used + auto self = std::weak_ptr(shared_from_this()); + server->asioInterface()->asyncWrite(m_socket, boost::asio::buffer(*buffer), + [self, buffer](const boost::system::error_code _error, std::size_t _size) { + auto session = self.lock(); + if (!session) + { + return; + } + session->onWrite(_error, _size, buffer); + }); + } + else + { + SESSION_LOG(WARNING) + << "Error sending ssl socket is close!" << LOG_KV("endpoint", nodeIPEndpoint()); + drop(TCPError); + return; + } + } + else + { + SESSION_LOG(WARNING) << "Host has gone"; + drop(TCPError); + return; + } + } + catch (std::exception& e) + { + SESSION_LOG(ERROR) << LOG_DESC("write error") << LOG_KV("endpoint", nodeIPEndpoint()) + << LOG_KV("what", boost::diagnostic_information(e)); + drop(TCPError); + return; + } +} + +void Session::drop(DisconnectReason _reason) +{ + auto server = m_server.lock(); + if (!m_actived) + { + return; + } + m_actived = false; + + int errorCode = P2PExceptionType::Disconnect; + std::string errorMsg = "Disconnect"; + if (_reason == DuplicatePeer) + { + errorCode = P2PExceptionType::DuplicateSession; + errorMsg = "DuplicateSession"; + } + + SESSION_LOG(INFO) << "drop, call and erase all callback in this session!" + << LOG_KV("this", this) << LOG_KV("endpoint", nodeIPEndpoint()); + + if (server && m_messageHandler) + { + auto handler = m_messageHandler; + auto self = std::weak_ptr(shared_from_this()); + server->threadPool()->enqueue([handler, self, errorCode, errorMsg]() { + auto session = self.lock(); + if (!session) + { + return; + } + handler(NetworkException(errorCode, errorMsg), session, Message::Ptr()); + }); + } + + if (m_socket->isConnected()) + { + try + { + if (_reason == DisconnectRequested || _reason == DuplicatePeer || + _reason == ClientQuit || _reason == UserReason) + { + SESSION_LOG(DEBUG) << "[drop] closing remote " << m_socket->remoteEndpoint() + << LOG_KV("reason", reasonOf(_reason)) + << LOG_KV("endpoint", m_socket->nodeIPEndpoint()); + } + else + { + SESSION_LOG(WARNING) << "[drop] closing remote " << m_socket->remoteEndpoint() + << LOG_KV("reason", reasonOf(_reason)) + << LOG_KV("endpoint", m_socket->nodeIPEndpoint()); + } + + /// if get Host object failed, close the socket directly + auto socket = m_socket; + auto server = m_server.lock(); + if (server && socket->isConnected()) + { + socket->close(); + } + auto shutdown_timer = std::make_shared( + *(socket->ioService()), boost::posix_time::milliseconds(m_shutDownTimeThres)); + /// async wait for shutdown + shutdown_timer->async_wait([socket](const boost::system::error_code& error) { + /// drop operation has been aborted + if (error == boost::asio::error::operation_aborted) + { + SESSION_LOG(DEBUG) << "[drop] operation aborted by async_shutdown" + << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()); + return; + } + /// shutdown timer error + if (error && error != boost::asio::error::operation_aborted) + { + SESSION_LOG(WARNING) + << "[drop] shutdown timer error" << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()); + } + /// force to shutdown when timeout + if (socket->ref().is_open()) + { + SESSION_LOG(WARNING) << "[drop] timeout, force close the socket" + << LOG_KV("remote endpoint", socket->nodeIPEndpoint()); + socket->close(); + } + }); + + /// async shutdown normally + socket->sslref().async_shutdown( + [socket, shutdown_timer](const boost::system::error_code& error) { + shutdown_timer->cancel(); + if (error) + { + SESSION_LOG(WARNING) + << "[drop] shutdown failed " << LOG_KV("errorValue", error.value()) + << LOG_KV("message", error.message()); + } + /// force to close the socket + if (socket->ref().is_open()) + { + SESSION_LOG(WARNING) << LOG_DESC("force to shutdown session") + << LOG_KV("endpoint", socket->nodeIPEndpoint()); + socket->close(); + } + }); + } + catch (...) + {} + } +} + +void Session::disconnect(DisconnectReason _reason) +{ + drop(_reason); +} + +void Session::start() +{ + if (!m_actived) + { + auto server = m_server.lock(); + if (server && server->haveNetwork()) + { + m_actived = true; + m_lastWriteTime.store(utcSteadyTime()); + m_lastReadTime.store(utcSteadyTime()); + server->asioInterface()->strandPost( + boost::bind(&Session::doRead, shared_from_this())); // doRead(); + } + } + if (m_idleCheckTimer) + { + m_idleCheckTimer->start(); + } +} + +void Session::doRead() +{ + auto server = m_server.lock(); + if (m_actived && server && server->haveNetwork()) + { + auto self = std::weak_ptr(shared_from_this()); + auto asyncRead = [self](boost::system::error_code ec, std::size_t bytesTransferred) { + auto s = self.lock(); + if (s) + { + if (ec) + { + SESSION_LOG(WARNING) + << LOG_DESC("doRead error") << LOG_KV("endpoint", s->nodeIPEndpoint()) + << LOG_KV("message", ec.message()); + s->drop(TCPError); + return; + } + s->m_lastReadTime.store(utcSteadyTime()); + s->m_data.insert(s->m_data.end(), s->m_recvBuffer.begin(), + s->m_recvBuffer.begin() + bytesTransferred); + + while (true) + { + Message::Ptr message = s->m_messageFactory->buildMessage(); + try + { + // Note: the decode function may throw exception + ssize_t result = + message->decode(bytesConstRef(s->m_data.data(), s->m_data.size())); + if (result > 0) + { + /// SESSION_LOG(TRACE) << "Decode success: " << result; + NetworkException e(P2PExceptionType::Success, "Success"); + s->onMessage(e, message); + s->m_data.erase(s->m_data.begin(), s->m_data.begin() + result); + } + else if (result == 0) + { + s->doRead(); + break; + } + else + { + SESSION_LOG(ERROR) + << LOG_DESC("Decode message error") << LOG_KV("result", result); + s->onMessage( + NetworkException(P2PExceptionType::ProtocolError, "ProtocolError"), + message); + break; + } + } + catch (std::exception const& e) + { + SESSION_LOG(ERROR) << LOG_DESC("Decode message exception") + << LOG_KV("error", boost::diagnostic_information(e)); + s->onMessage( + NetworkException(P2PExceptionType::ProtocolError, "ProtocolError"), + message); + break; + } + } + } + }; + + if (m_socket->isConnected()) + { + server->asioInterface()->asyncReadSome( + m_socket, boost::asio::buffer(m_recvBuffer, m_recvBuffer.size()), asyncRead); + } + else + { + SESSION_LOG(WARNING) << LOG_DESC("Error Reading ssl socket is close!"); + drop(TCPError); + return; + } + } + else + { + SESSION_LOG(ERROR) << LOG_DESC("callback doRead failed for session inactived") + << LOG_KV("active", m_actived) + << LOG_KV("haveNetwork", server->haveNetwork()); + } +} + +bool Session::checkRead(boost::system::error_code _ec) +{ + if (_ec && _ec.category() != boost::asio::error::get_misc_category() && + _ec.value() != boost::asio::error::eof) + { + SESSION_LOG(WARNING) << LOG_DESC("checkRead error") << LOG_KV("message", _ec.message()); + drop(TCPError); + + return false; + } + + return true; +} + + +void Session::onMessage(NetworkException const& e, Message::Ptr message) +{ + auto server = m_server.lock(); + if (!server) + { + return; + } + auto self = std::weak_ptr(shared_from_this()); + server->threadPool()->enqueue([e, message, self]() { + auto session = self.lock(); + if (!session) + { + return; + } + try + { + // the forwarding message + if (!message->dstP2PNodeID().empty() && + message->dstP2PNodeID() != session->m_hostNodeID) + { + session->m_messageHandler(e, session, message); + return; + } + auto server = session->m_server.lock(); + // in-activate session + if (!session->m_actived || !server || !server->haveNetwork()) + { + return; + } + + if (!message->isRespPacket()) + { + session->m_messageHandler(e, session, message); + return; + } + + auto callbackManager = session->sessionCallbackManager(); + auto callbackPtr = callbackManager->getCallback(message->seq(), true); + // without callback, call default handler + if (!callbackPtr) + { + SESSION_LOG(WARNING) + << LOG_BADGE("onMessage") + << LOG_DESC("callback not found, maybe the callback timeout") + << LOG_KV("endpoint", session->nodeIPEndpoint()) + << LOG_KV("seq", message->seq()) << LOG_KV("resp", message->isRespPacket()); + return; + } + + // with callback + if (callbackPtr->timeoutHandler) + { + callbackPtr->timeoutHandler->cancel(); + } + auto callback = callbackPtr->callback; + if (!callback) + { + return; + } + callback(e, message); + } + catch (std::exception const& e) + { + SESSION_LOG(WARNING) << LOG_BADGE("onMessage") << LOG_DESC("onMessage exception") + << LOG_KV("msg", boost::diagnostic_information(e)); + } + }); +} + +void Session::onTimeout(const boost::system::error_code& error, uint32_t seq) +{ + if (error) + { + // SESSION_LOG(TRACE) << "timer cancel" << error; + return; + } + + auto server = m_server.lock(); + if (!server) + { + return; + } + ResponseCallback::Ptr callback = m_sessionCallbackManager->getCallback(seq, true); + if (!callback) + { + return; + } + server->threadPool()->enqueue([callback]() { + NetworkException e(P2PExceptionType::NetworkTimeout, "NetworkTimeout"); + callback->callback(e, Message::Ptr()); + }); +} + +void Session::checkNetworkStatus() +{ + m_idleCheckTimer->restart(); + try + { + auto now = utcSteadyTime(); + // read idle + if ((m_lastReadTime + m_idleTimeInterval) < now) + { + SESSION_LOG(WARNING) << LOG_DESC( + "Long time without read operation, maybe session " + "inactivated, drop the session") + << LOG_KV("endpoint", m_socket->nodeIPEndpoint()); + drop(IdleWaitTimeout); + return; + } + // write idle + if ((m_lastWriteTime + m_idleTimeInterval) < now) + { + SESSION_LOG(WARNING) << LOG_DESC( + "Long time without write operation, maybe session " + "inactivated, drop the session") + << LOG_KV("endpoint", m_socket->nodeIPEndpoint()); + drop(IdleWaitTimeout); + return; + } + } + catch (std::exception const& e) + { + SESSION_LOG(WARNING) << LOG_DESC("checkNetworkStatus error") + << LOG_KV("msg", boost::diagnostic_information(e)); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/Session.h b/bcos-gateway/bcos-gateway/libnetwork/Session.h new file mode 100644 index 0000000..f23e75c --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Session.h @@ -0,0 +1,184 @@ + +/** @file Session.h + * @author monan <651932351@qq.com> + * @date 2018 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class Host; +class SocketFace; + +class Session : public SessionFace, public std::enable_shared_from_this +{ +public: + Session(size_t _bufferSize = 4096); + virtual ~Session(); + + using Ptr = std::shared_ptr; + + void start() override; + void disconnect(DisconnectReason _reason) override; + + void asyncSendMessage( + Message::Ptr, Options = Options(), SessionCallbackFunc = SessionCallbackFunc()) override; + + NodeIPEndpoint nodeIPEndpoint() const override; + + bool actived() const override; + + virtual std::weak_ptr host() { return m_server; } + virtual void setHost(std::weak_ptr host) { m_server = host; } + + std::shared_ptr socket() override { return m_socket; } + virtual void setSocket(const std::shared_ptr& socket) { m_socket = socket; } + + virtual MessageFactory::Ptr messageFactory() const { return m_messageFactory; } + virtual void setMessageFactory(const MessageFactory::Ptr& _messageFactory) + { + m_messageFactory = _messageFactory; + } + + SessionCallbackManagerInterface::Ptr sessionCallbackManager() + { + return m_sessionCallbackManager; + } + void setSessionCallbackManager( + const SessionCallbackManagerInterface::Ptr& _sessionCallbackManager) + { + m_sessionCallbackManager = _sessionCallbackManager; + } + + virtual std::function messageHandler() + { + return m_messageHandler; + } + void setMessageHandler( + std::function messageHandler) + override + { + m_messageHandler = messageHandler; + } + + // handle before sending message, if the check fails, meaning false is returned, the message is + // not sent, and the SessionCallbackFunc will be performed + void setBeforeMessageHandler( + std::function handler) override + { + m_beforeMessageHandler = handler; + } + + void setHostNodeID(std::string const& _hostNodeID) { m_hostNodeID = _hostNodeID; } + +protected: + virtual void checkNetworkStatus(); + +private: + void send(const std::shared_ptr& _msg); + + void doRead(); + std::vector m_data; ///< Buffer for ingress packet data. + std::vector m_recvBuffer; + const size_t bufferSize; + + /// Drop the connection for the reason @a _r. + void drop(DisconnectReason _r); + + /// Check error code after reading and drop peer if error code. + bool checkRead(boost::system::error_code _ec); + + void onTimeout(const boost::system::error_code& error, uint32_t seq); + + /// Perform a single round of the write operation. This could end up calling + /// itself asynchronously. + void onWrite(boost::system::error_code ec, std::size_t length, std::shared_ptr buffer); + void write(); + + /// call by doRead() to deal with message + void onMessage(NetworkException const& e, Message::Ptr message); + + std::weak_ptr m_server; ///< The host that owns us. Never null. + std::shared_ptr m_socket; ///< Socket of peer's connection. + + MessageFactory::Ptr m_messageFactory; + + class QueueCompare + { + public: + bool operator()(const std::pair, u256>&, + const std::pair, u256>&) const + { + return false; + } + }; + + boost::heap::priority_queue, u256>, + boost::heap::compare, boost::heap::stable> + m_writeQueue; + std::atomic_bool m_writing = {false}; + bcos::Mutex x_writeQueue; + + mutable bcos::Mutex x_info; + + bool m_actived = false; + + SessionCallbackManagerInterface::Ptr m_sessionCallbackManager; + + std::function m_messageHandler; + + std::function m_beforeMessageHandler; + + uint64_t m_shutDownTimeThres = 50000; + // 1min + uint64_t m_idleTimeInterval = 60 * 1000; + + // timer to check the connection + std::atomic m_lastReadTime; + std::atomic m_lastWriteTime; + std::shared_ptr m_idleCheckTimer; + + std::string m_hostNodeID; +}; + +class SessionFactory +{ +public: + SessionFactory(std::string const& _hostNodeID) : m_hostNodeID(_hostNodeID) {} + virtual ~SessionFactory(){}; + + virtual std::shared_ptr create_session(std::weak_ptr _server, + std::shared_ptr const& _socket, MessageFactory::Ptr _messageFactory, + SessionCallbackManagerInterface::Ptr _sessionCallbackManager) + { + std::shared_ptr session = std::make_shared(); + session->setHostNodeID(m_hostNodeID); + session->setHost(_server); + session->setSocket(_socket); + session->setMessageFactory(_messageFactory); + session->setSessionCallbackManager(_sessionCallbackManager); + return session; + } + +private: + std::string m_hostNodeID; +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/SessionCallback.h b/bcos-gateway/bcos-gateway/libnetwork/SessionCallback.h new file mode 100644 index 0000000..af288c3 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/SessionCallback.h @@ -0,0 +1,139 @@ +/** + * @brief: inteface for boost::asio(for unittest) + * + * @file CallbackInterface.h + * @author: octopuswang + * @date 2018-09-13 + */ +#pragma once +#include "bcos-gateway/libnetwork/Common.h" +#include +#include +#include +#include +#include + +namespace bcos::gateway +{ + +using SessionCallbackFunc = std::function; + +struct ResponseCallback : public std::enable_shared_from_this +{ + using Ptr = std::shared_ptr; + + uint64_t m_startTime; + SessionCallbackFunc callback; + std::shared_ptr timeoutHandler; +}; + +using SessionResponseCallback = ResponseCallback; + +class SessionCallbackManagerInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + SessionCallbackManagerInterface() = default; + SessionCallbackManagerInterface(const SessionCallbackManagerInterface&) = default; + SessionCallbackManagerInterface(SessionCallbackManagerInterface&&) = default; + SessionCallbackManagerInterface& operator=(const SessionCallbackManagerInterface&); + SessionCallbackManagerInterface& operator=(SessionCallbackManagerInterface&&) noexcept; + + virtual ~SessionCallbackManagerInterface() = default; + + virtual SessionResponseCallback::Ptr getCallback(uint32_t seq, bool isRemove) = 0; + virtual bool addCallback(uint32_t seq, SessionResponseCallback::Ptr callback) = 0; + virtual bool removeCallback(uint32_t seq) = 0; +}; + +class SessionCallbackManager : public SessionCallbackManagerInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + SessionCallbackManager() = default; + SessionCallbackManager(const SessionCallbackManager&) = delete; + SessionCallbackManager(SessionCallbackManager&&) = delete; + SessionCallbackManager& operator=(const SessionCallbackManager&) = delete; + SessionCallbackManager& operator=(SessionCallbackManager&&) noexcept = delete; + + ~SessionCallbackManager() override = default; + + SessionResponseCallback::Ptr getCallback(uint32_t seq, bool isRemove) override + { + std::lock_guard lockGuard(x_sessionCallbackMap); + auto it = m_sessionCallbackMap.find(seq); + if (it == m_sessionCallbackMap.end()) + { + return nullptr; + } + + auto callback = it->second; + if (isRemove) + { + m_sessionCallbackMap.erase(it); + } + + return callback; + } + + bool addCallback(uint32_t seq, SessionResponseCallback::Ptr callback) override + { + std::lock_guard lockGuard(x_sessionCallbackMap); + auto result = m_sessionCallbackMap.try_emplace(seq, std::move(callback)); + return result.second; + } + + bool removeCallback(uint32_t seq) override + { + std::lock_guard lockGuard(x_sessionCallbackMap); + auto result = m_sessionCallbackMap.erase(seq); + return result > 0; + } + +private: + std::mutex x_sessionCallbackMap; + std::unordered_map m_sessionCallbackMap; +}; + +class SessionCallbackManagerBucket : public SessionCallbackManagerInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + SessionCallbackManagerBucket() = default; + SessionCallbackManagerBucket(const SessionCallbackManagerBucket&) = delete; + SessionCallbackManagerBucket(SessionCallbackManagerBucket&&) = delete; + SessionCallbackManagerBucket& operator=(const SessionCallbackManagerBucket&) = delete; + SessionCallbackManagerBucket& operator=(SessionCallbackManagerBucket&&) noexcept = delete; + + ~SessionCallbackManagerBucket() override = default; + + SessionResponseCallback::Ptr getCallback(uint32_t seq, bool isRemove) override + { + auto bucket = (seq % SessionCallbackBucketNum); + return m_sessionCallbackBucket.at(bucket).getCallback(seq, isRemove); + } + + bool addCallback(uint32_t seq, SessionResponseCallback::Ptr callback) override + { + auto bucket = (seq % SessionCallbackBucketNum); + return m_sessionCallbackBucket.at(bucket).addCallback(seq, callback); + } + + bool removeCallback(uint32_t seq) override + { + auto bucket = (seq % SessionCallbackBucketNum); + return m_sessionCallbackBucket.at(bucket).removeCallback(seq); + } + +private: + static constexpr uint32_t SessionCallbackBucketNum = 64; + std::array m_sessionCallbackBucket; +}; + +} // namespace bcos::gateway \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libnetwork/SessionFace.h b/bcos-gateway/bcos-gateway/libnetwork/SessionFace.h new file mode 100644 index 0000000..1a87579 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/SessionFace.h @@ -0,0 +1,54 @@ + +/** @file Session.h + * @author Gav Wood + * @author Alex Leverington + * @date 2014 + * @author toxotguo + * @date 2018 + * + * @author: yujiechen + * @date: 2018-09-19 + * @modification: remove addNote interface + */ + +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class SocketFace; + +class SessionFace +{ +public: + virtual ~SessionFace(){}; + + using Ptr = std::shared_ptr; + + virtual void start() = 0; + virtual void disconnect(DisconnectReason) = 0; + + virtual void asyncSendMessage( + Message::Ptr, Options = Options(), SessionCallbackFunc = SessionCallbackFunc()) = 0; + + virtual std::shared_ptr socket() = 0; + + virtual void setMessageHandler( + std::function messageHandler) = 0; + + // handle before sending message, if the check fails, meaning false is returned, the message is + // not sent, and the SessionCallbackFunc will be performed + virtual void setBeforeMessageHandler( + std::function handler) = 0; + + virtual NodeIPEndpoint nodeIPEndpoint() const = 0; + + virtual bool actived() const = 0; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/Socket.h b/bcos-gateway/bcos-gateway/libnetwork/Socket.h new file mode 100644 index 0000000..bc205aa --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/Socket.h @@ -0,0 +1,86 @@ +/** @file Socket.h + * @ author: yujiechen + * @ date: 2018-09-17 + * @ modification: rename RLPXSocket.h to Socket.h + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class Socket : public SocketFace, public std::enable_shared_from_this +{ +public: + Socket(std::shared_ptr _ioService, ba::ssl::context& _sslContext, + NodeIPEndpoint _nodeIPEndpoint) + : m_nodeIPEndpoint(_nodeIPEndpoint), m_ioService(_ioService) + { + try + { + m_sslSocket = + std::make_shared>(*_ioService, _sslContext); + } + catch (const std::exception& _e) + { + SESSION_LOG(ERROR) << "ERROR: " << boost::diagnostic_information(_e); + SESSION_LOG(ERROR) << "Ssl Socket Init Fail! Please Check CERTIFICATE!"; + } + } + ~Socket() { close(); } + + bool isConnected() const override { return m_sslSocket->lowest_layer().is_open(); } + + void close() override + { + try + { + boost::system::error_code ec; + m_sslSocket->lowest_layer().shutdown(bi::tcp::socket::shutdown_both, ec); + if (m_sslSocket->lowest_layer().is_open()) + m_sslSocket->lowest_layer().close(); + } + catch (...) + { + } + } + + bi::tcp::endpoint remoteEndpoint( + boost::system::error_code ec = boost::system::error_code()) override + { + return m_sslSocket->lowest_layer().remote_endpoint(ec); + } + + bi::tcp::endpoint localEndpoint( + boost::system::error_code ec = boost::system::error_code()) override + { + return m_sslSocket->lowest_layer().local_endpoint(ec); + } + + bi::tcp::socket& ref() override { return m_sslSocket->next_layer(); } + ba::ssl::stream& sslref() override { return *m_sslSocket; } + + const NodeIPEndpoint& nodeIPEndpoint() const override { return m_nodeIPEndpoint; } + void setNodeIPEndpoint(NodeIPEndpoint _nodeIPEndpoint) override + { + m_nodeIPEndpoint = _nodeIPEndpoint; + } + + std::shared_ptr ioService() override { return m_ioService; } + +protected: + NodeIPEndpoint m_nodeIPEndpoint; + std::shared_ptr m_ioService; + std::shared_ptr> m_sslSocket; +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libnetwork/SocketFace.h b/bcos-gateway/bcos-gateway/libnetwork/SocketFace.h new file mode 100644 index 0000000..4912ac5 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libnetwork/SocketFace.h @@ -0,0 +1,38 @@ +/** + * @brief: Socket inteface + * @file SocketFace.h + * @author yujiechen + * @date 2018-09-17 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class SocketFace +{ +public: + SocketFace() = default; + + virtual ~SocketFace(){}; + virtual bool isConnected() const = 0; + virtual void close() = 0; + virtual bi::tcp::endpoint remoteEndpoint( + boost::system::error_code ec = boost::system::error_code()) = 0; + virtual bi::tcp::endpoint localEndpoint( + boost::system::error_code ec = boost::system::error_code()) = 0; + + virtual bi::tcp::socket& ref() = 0; + virtual ba::ssl::stream& sslref() = 0; + + virtual const NodeIPEndpoint& nodeIPEndpoint() const = 0; + virtual void setNodeIPEndpoint(NodeIPEndpoint _nodeIPEndpoint) = 0; + virtual std::shared_ptr ioService() = 0; +}; +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/Common.h b/bcos-gateway/bcos-gateway/libp2p/Common.h new file mode 100644 index 0000000..d0db0fc --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/Common.h @@ -0,0 +1,28 @@ +/* + * Common.h + * + * Author: ancelmo + */ + +#pragma once + +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +#define P2PMSG_LOG(LEVEL) BCOS_LOG(LEVEL) << "[P2PService][P2PMessage]" +#define P2PSESSION_LOG(LEVEL) BCOS_LOG(LEVEL) << "[P2PService][P2PSession]" +#define SERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[P2PService][Service]" +#define SERVICE_ROUTER_LOG(LEVEL) BCOS_LOG(LEVEL) << "[P2PService][Router]" + +/// default compress threshold: 1KB +const uint64_t c_compressThreshold = 1024; +/// default zstd compress level: +const uint64_t c_zstdCompressLevel = 1; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PInterface.h b/bcos-gateway/bcos-gateway/libp2p/P2PInterface.h new file mode 100644 index 0000000..3a7dc0a --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PInterface.h @@ -0,0 +1,104 @@ +/** @file P2PInterface.h + * @author chaychen + * @date 20180911 + */ + +#pragma once + +#include +#include +#include +#include + +namespace bcos +{ +namespace stat +{ +class NetworkStatHandler; +class ChannelNetworkStatHandler; +} // namespace stat + +namespace gateway +{ +class P2PMessage; +class MessageFactory; +class P2PSession; +using CallbackFuncWithSession = + std::function, std::shared_ptr)>; +using DisconnectCallbackFuncWithSession = + std::function)>; +using P2PResponseCallback = + std::function _data)>; +class P2PInterface +{ +public: + using Ptr = std::shared_ptr; + virtual ~P2PInterface(){}; + + virtual void start() = 0; + virtual void stop() = 0; + + virtual P2pID id() const = 0; + + virtual std::shared_ptr sendMessageByNodeID( + P2pID nodeID, std::shared_ptr message) = 0; + + virtual void asyncSendMessageByNodeID(P2pID nodeID, std::shared_ptr message, + CallbackFuncWithSession callback, Options options = Options()) = 0; + + virtual void asyncBroadcastMessage(std::shared_ptr message, Options options) = 0; + + virtual P2PInfos sessionInfos() = 0; + virtual P2PInfo localP2pInfo() = 0; + + virtual bool isConnected(P2pID const& _nodeID) const = 0; + virtual bool isReachable(P2pID const& _nodeID) const = 0; + virtual std::shared_ptr host() = 0; + + virtual std::shared_ptr messageFactory() = 0; + + virtual std::shared_ptr getP2PSessionByNodeId(P2pID const& _nodeID) = 0; + + + /** + * @brief send message to the given p2p nodes + * + * @param _type the message type + * @param _dstNodeID the dst node + * @param _payload the data + * @param options timeout option + * @param _callback called when receive response + */ + virtual void asyncSendMessageByP2PNodeID(int16_t _type, P2pID _dstNodeID, + bytesConstRef _payload, Options options = Options(), + P2PResponseCallback _callback = nullptr) = 0; + + /** + * @brief broadcast message to all p2p nodes + * + * @param _type the message type + * @param _payload the payload + */ + virtual void asyncBroadcastMessageToP2PNodes( + int16_t _type, uint16_t moduleID, bytesConstRef _payload, Options _options) = 0; + + /** + * @brief send message to the given nodeIDs + */ + virtual void asyncSendMessageByP2PNodeIDs(int16_t _type, const std::vector& _nodeIDs, + bytesConstRef _payload, Options _options) = 0; + + using MessageHandler = + std::function, P2PMessage::Ptr)>; + + virtual void registerHandlerByMsgType(int16_t _type, MessageHandler const& _msgHandler) = 0; + + virtual void eraseHandlerByMsgType(int16_t _type) = 0; + + virtual void sendRespMessageBySession(bytesConstRef _payload, P2PMessage::Ptr _p2pMessage, + std::shared_ptr _p2pSession) = 0; +}; + +} // namespace gateway + +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PMessage.cpp b/bcos-gateway/bcos-gateway/libp2p/P2PMessage.cpp new file mode 100644 index 0000000..8a9ad2f --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PMessage.cpp @@ -0,0 +1,352 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file P2PMessage.cpp + * @author: octopus + * @date 2021-05-04 + */ + +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::crypto; + +bool P2PMessageOptions::encode(bytes& _buffer) +{ + // parameters check + if (m_groupID.size() > MAX_GROUPID_LENGTH) + { + P2PMSG_LOG(ERROR) << LOG_DESC("groupID length overflow") + << LOG_KV("groupID length", m_groupID.size()); + return false; + } + if (!m_srcNodeID || m_srcNodeID->empty() || (m_srcNodeID->size() > MAX_NODEID_LENGTH)) + { + P2PMSG_LOG(ERROR) << LOG_DESC("srcNodeID length valid") + << LOG_KV("srcNodeID length", (m_srcNodeID ? m_srcNodeID->size() : 0)); + return false; + } + if (m_dstNodeIDs.size() > MAX_DST_NODEID_COUNT) + { + P2PMSG_LOG(ERROR) << LOG_DESC("dstNodeID amount overfow") + << LOG_KV("dstNodeID size", m_dstNodeIDs.size()); + return false; + } + + for (auto dstNodeID : m_dstNodeIDs) + { + if (!dstNodeID || dstNodeID->empty() || (dstNodeID->size() > MAX_NODEID_LENGTH)) + { + P2PMSG_LOG(ERROR) << LOG_DESC("dstNodeID length valid") + << LOG_KV("dstNodeID length", (dstNodeID ? dstNodeID->size() : 0)); + return false; + } + } + + // groupID length + uint16_t groupIDLength = + boost::asio::detail::socket_ops::host_to_network_short((uint16_t)m_groupID.size()); + _buffer.insert(_buffer.end(), (byte*)&groupIDLength, (byte*)&groupIDLength + 2); + // groupID + _buffer.insert(_buffer.end(), m_groupID.begin(), m_groupID.end()); + + // nodeID length + uint16_t nodeIDLength = + boost::asio::detail::socket_ops::host_to_network_short((uint16_t)m_srcNodeID->size()); + _buffer.insert(_buffer.end(), (byte*)&nodeIDLength, (byte*)&nodeIDLength + 2); + // srcNodeID + _buffer.insert(_buffer.end(), m_srcNodeID->begin(), m_srcNodeID->end()); + + // dstNodeID count + uint8_t dstNodeIDCount = (uint8_t)m_dstNodeIDs.size(); + _buffer.insert(_buffer.end(), (byte*)&dstNodeIDCount, (byte*)&dstNodeIDCount + 1); + + // dstNodeIDs + for (const auto& nodeID : m_dstNodeIDs) + { + _buffer.insert(_buffer.end(), nodeID->begin(), nodeID->end()); + } + + // moduleID + uint16_t moduleID = boost::asio::detail::socket_ops::host_to_network_short(m_moduleID); + _buffer.insert(_buffer.end(), (byte*)&moduleID, (byte*)&moduleID + 2); + + return true; +} + +/// groupID length :1 bytes +/// groupID : bytes +/// nodeID length :2 bytes +/// src nodeID : bytes +/// src nodeID count :1 bytes +/// dst nodeIDs : bytes +ssize_t P2PMessageOptions::decode(bytesConstRef _buffer) +{ + size_t offset = 0; + size_t length = _buffer.size(); + + try + { + CHECK_OFFSET_WITH_THROW_EXCEPTION((offset + OPTIONS_MIN_LENGTH), length); + + // groupID length + uint16_t groupIDLength = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + // groupID + if (groupIDLength > 0) + { + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + groupIDLength, length); + m_groupID.assign(&_buffer[offset], &_buffer[offset] + groupIDLength); + offset += groupIDLength; + } + + // nodeID length + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + 2, length); + uint16_t nodeIDLength = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + nodeIDLength, length); + bytes emptyBuffer; + m_srcNodeID->swap(emptyBuffer); + m_srcNodeID->insert( + m_srcNodeID->begin(), (byte*)&_buffer[offset], (byte*)&_buffer[offset] + nodeIDLength); + offset += nodeIDLength; + + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + 1, length); + // dstNodeCount + uint8_t dstNodeCount = *((uint8_t*)&_buffer[offset]); + offset += 1; + + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + dstNodeCount * nodeIDLength, length); + // dstNodeIDs + m_dstNodeIDs.resize(dstNodeCount); + for (size_t i = 0; i < dstNodeCount; i++) + { + m_dstNodeIDs[i] = std::make_shared( + (byte*)&_buffer[offset], (byte*)&_buffer[offset] + nodeIDLength); + + offset += nodeIDLength; + } + + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + 2, length); + + uint16_t moduleID = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + m_moduleID = moduleID; + } + catch (const std::exception& e) + { + P2PMSG_LOG(ERROR) << LOG_DESC("decode message error") + << LOG_KV("e", boost::diagnostic_information(e)); + // invalid packet? + return MessageDecodeStatus::MESSAGE_ERROR; + } + + return offset; +} + +bool P2PMessage::encodeHeader(bytes& _buffer) +{ + // set length to zero first + uint32_t length = 0; + uint16_t version = boost::asio::detail::socket_ops::host_to_network_short(m_version); + uint16_t packetType = boost::asio::detail::socket_ops::host_to_network_short(m_packetType); + uint32_t seq = boost::asio::detail::socket_ops::host_to_network_long(m_seq); + uint16_t ext = boost::asio::detail::socket_ops::host_to_network_short(m_ext); + + _buffer.insert(_buffer.end(), (byte*)&length, (byte*)&length + 4); + _buffer.insert(_buffer.end(), (byte*)&version, (byte*)&version + 2); + _buffer.insert(_buffer.end(), (byte*)&packetType, (byte*)&packetType + 2); + _buffer.insert(_buffer.end(), (byte*)&seq, (byte*)&seq + 4); + _buffer.insert(_buffer.end(), (byte*)&ext, (byte*)&ext + 2); + return true; +} + +bool P2PMessage::encode(bytes& _buffer) +{ + bytes emptyBuffer; + _buffer.swap(emptyBuffer); + + // compress payload + std::shared_ptr compressData = std::make_shared(); + bool isCompressSuccess = false; + if (tryToCompressPayload(compressData)) + { + isCompressSuccess = true; + } + + if (!encodeHeader(_buffer)) + { + return false; + } + // encode options + if (hasOptions() && !m_options->encode(_buffer)) + { + return false; + } + + // encode payload + if (isCompressSuccess) + { + P2PMSG_LOG(TRACE) << LOG_DESC("compress payload success") + << LOG_KV("compressedData", (char*)compressData->data()) + << LOG_KV("packageType", m_packetType) << LOG_KV("ext", m_ext) + << LOG_KV("seq", m_seq); + _buffer.insert(_buffer.end(), compressData->begin(), compressData->end()); + } + else + { + _buffer.insert(_buffer.end(), m_payload->begin(), m_payload->end()); + } + + // calc total length and modify the length value in the buffer + auto length = boost::asio::detail::socket_ops::host_to_network_long((uint32_t)_buffer.size()); + + // update length + std::copy((byte*)&length, (byte*)&length + 4, _buffer.data()); + // set buffer size to m_length + m_length = _buffer.size(); + return true; +} + +/// compress the payload data to be sended +bool P2PMessage::tryToCompressPayload(std::shared_ptr compressData) +{ + if (m_payload->size() <= bcos::gateway::c_compressThreshold) + { + return false; + } + + if (m_version < (uint16_t)(bcos::protocol::ProtocolVersion::V2)) + { + return false; + } + + bool isCompressSuccess = + ZstdCompress::compress(ref(*m_payload), *compressData, bcos::gateway::c_zstdCompressLevel); + if (!isCompressSuccess) + { + return false; + } + // update compress flag + m_ext |= bcos::protocol::MessageExtFieldFlag::Compress; + return true; +} + +int32_t P2PMessage::decodeHeader(bytesConstRef _buffer) +{ + int32_t offset = 0; + + // length field + m_length = + boost::asio::detail::socket_ops::network_to_host_long(*((uint32_t*)&_buffer[offset])); + offset += 4; + + // version + m_version = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + // packetType + m_packetType = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + // seq + m_seq = boost::asio::detail::socket_ops::network_to_host_long(*((uint32_t*)&_buffer[offset])); + offset += 4; + + // ext + m_ext = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + + return offset; +} + +ssize_t P2PMessage::decode(bytesConstRef _buffer) +{ + // check if packet header fully received + if (_buffer.size() < P2PMessage::MESSAGE_HEADER_LENGTH) + { + return MessageDecodeStatus::MESSAGE_INCOMPLETE; + } + + int32_t offset = decodeHeader(_buffer); + + // check if packet header fully received + if (_buffer.size() < m_length) + { + return MessageDecodeStatus::MESSAGE_INCOMPLETE; + } + if (m_length > P2PMessage::MAX_MESSAGE_LENGTH) + { + P2PMSG_LOG(WARNING) << LOG_DESC("Illegal p2p message packet") << LOG_KV("length", m_length) + << LOG_KV("maxLen", P2PMessage::MAX_MESSAGE_LENGTH); + return MessageDecodeStatus::MESSAGE_ERROR; + } + if (hasOptions()) + { + // encode options + auto optionsOffset = m_options->decode(_buffer.getCroppedData(offset)); + if (optionsOffset < 0) + { + return MessageDecodeStatus::MESSAGE_ERROR; + } + offset += optionsOffset; + } + + uint32_t length = _buffer.size(); + CHECK_OFFSET_WITH_THROW_EXCEPTION(m_length, length); + auto data = _buffer.getCroppedData(offset, m_length - offset); + // raw data cropped from buffer, maybe be compressed or not + auto rawData = std::make_shared(data.begin(), data.end()); + + // uncompress payload + // payload has been compressed + if ((m_ext & bcos::protocol::MessageExtFieldFlag::Compress) == + bcos::protocol::MessageExtFieldFlag::Compress) + { + bool isUncompressSuccess = ZstdCompress::uncompress(ref(*rawData), *m_payload); + if (!isUncompressSuccess) + { + P2PMSG_LOG(ERROR) << LOG_DESC("ZstdCompress decode message error, uncompress failed") + << LOG_KV("packageType", m_packetType) << LOG_KV("ext", m_ext) + << LOG_KV("seq", m_seq); + // invalid packet? + return MessageDecodeStatus::MESSAGE_ERROR; + } + P2PMSG_LOG(TRACE) << LOG_DESC("zstd uncompress success") + << LOG_KV("packetType", m_packetType) << LOG_KV("ext", m_ext) + << LOG_KV("rawData", (char*)(rawData->data())) << LOG_KV("seq", m_seq); + // reset ext + m_ext &= (~bcos::protocol::MessageExtFieldFlag::Compress); + } + else + { + m_payload = std::move(rawData); + } + + return m_length; +} diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PMessage.h b/bcos-gateway/bcos-gateway/libp2p/P2PMessage.h new file mode 100644 index 0000000..8b1e976 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PMessage.h @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file P2PMessage.h + * @author: octopus + * @date 2021-05-04 + */ + +#pragma once + +#include +#include +#include +#include +#include + +#define CHECK_OFFSET_WITH_THROW_EXCEPTION(offset, length) \ + do \ + { \ + if ((offset) > (length)) \ + { \ + throw std::out_of_range("Out of range error, offset:" + std::to_string(offset) + \ + " ,length: " + std::to_string(length)); \ + } \ + } while (0); + +namespace bcos +{ +namespace gateway +{ +/// Options format definition +/// options(default version): +/// groupID length :1 bytes +/// groupID : bytes +/// nodeID length :2 bytes +/// src nodeID : bytes +/// src nodeID count :1 bytes +/// dst nodeIDs : bytes +/// moduleID : 2 bytes +class P2PMessageOptions +{ +public: + using Ptr = std::shared_ptr; + /// groupID length(2) + nodeID length(2) + dst nodeID count(1) + moduleID(2) + const static size_t OPTIONS_MIN_LENGTH = 7; + +public: + P2PMessageOptions() { m_srcNodeID = std::make_shared(); } + + virtual ~P2PMessageOptions() = default; + + /// The maximum gateway transport protocol supported groupID length 65535 + const static size_t MAX_GROUPID_LENGTH = 65535; + /// The maximum gateway transport protocol supported nodeID length 65535 + const static size_t MAX_NODEID_LENGTH = 65535; + /// The maximum gateway transport protocol supported dst nodeID count 127 + const static size_t MAX_DST_NODEID_COUNT = 255; + + bool encode(bytes& _buffer); + ssize_t decode(bytesConstRef _buffer); + +public: + uint16_t moduleID() const { return m_moduleID; } + void setModuleID(uint16_t _moduleID) { m_moduleID = _moduleID; } + + std::string groupID() const { return m_groupID; } + void setGroupID(const std::string& _groupID) { m_groupID = _groupID; } + + std::shared_ptr srcNodeID() const { return m_srcNodeID; } + void setSrcNodeID(std::shared_ptr _srcNodeID) { m_srcNodeID = _srcNodeID; } + + std::vector>& dstNodeIDs() { return m_dstNodeIDs; } + void setDstNodeIDs(const std::vector>& _dstNodeIDs) + { + m_dstNodeIDs = _dstNodeIDs; + } + +protected: + std::string m_groupID; + std::shared_ptr m_srcNodeID; + std::vector> m_dstNodeIDs; + uint16_t m_moduleID = 0; +}; + +/// Message format definition of gateway P2P network +/// +/// fields: +/// length :4 bytes +/// version :2 bytes +/// packet type :2 bytes +/// seq :4 bytes +/// ext :2 bytes +/// options(default version): +/// groupID length :1 bytes +/// groupID : bytes +/// nodeID length :2 bytes +/// src nodeID : bytes +/// src nodeID count :1 bytes +/// dst nodeIDs : bytes +/// moduleID : 2 bytes +/// payload :X bytes +class P2PMessage : public Message +{ +public: + using Ptr = std::shared_ptr; + + /// length(4) + version(2) + packetType(2) + seq(4) + ext(2) + const static size_t MESSAGE_HEADER_LENGTH = 14; + const static size_t MAX_MESSAGE_LENGTH = + 100 * 1024 * 1024; ///< The maximum length of data is 100M. +public: + P2PMessage() + { + m_payload = std::make_shared(); + m_options = std::make_shared(); + } + + // ~P2PMessage() override = default; + +public: + uint32_t length() const override + { + // The length value has been set + if (m_length > 0) + { + return m_length; + } + + // estimate the length of msg to be encoded + int64_t length = (int64_t)payload()->size() + (int64_t)P2PMessage::MESSAGE_HEADER_LENGTH; + if (hasOptions() && options() && options()->srcNodeID()) + { + length += P2PMessageOptions::OPTIONS_MIN_LENGTH; + length += + (int64_t)(options()->srcNodeID()->size() * (1 + options()->dstNodeIDs().size())); + } + return length; + } + // virtual void setLength(uint32_t length) { m_length = length; } + + uint16_t version() const override { return m_version; } + virtual void setVersion(uint16_t version) { m_version = version; } + + uint16_t packetType() const override { return m_packetType; } + virtual void setPacketType(uint16_t packetType) { m_packetType = packetType; } + + uint32_t seq() const override { return m_seq; } + virtual void setSeq(uint32_t seq) { m_seq = seq; } + + uint16_t ext() const override { return m_ext; } + virtual void setExt(uint16_t _ext) { m_ext |= _ext; } + + P2PMessageOptions::Ptr options() const { return m_options; } + void setOptions(P2PMessageOptions::Ptr _options) { m_options = _options; } + + std::shared_ptr payload() const { return m_payload; } + void setPayload(std::shared_ptr _payload) { m_payload = _payload; } + + void setRespPacket() { m_ext |= bcos::protocol::MessageExtFieldFlag::Response; } + bool encode(bytes& _buffer) override; + ssize_t decode(bytesConstRef _buffer) override; + bool isRespPacket() const override + { + return (m_ext & bcos::protocol::MessageExtFieldFlag::Response) != 0; + } + + // compress payload if payload need to be compressed + bool tryToCompressPayload(std::shared_ptr compressData); + + bool hasOptions() const + { + return (m_packetType == GatewayMessageType::PeerToPeerMessage) || + (m_packetType == GatewayMessageType::BroadcastMessage); + } + + virtual void setSrcP2PNodeID(std::string const& _srcP2PNodeID) + { + m_srcP2PNodeID = _srcP2PNodeID; + } + virtual void setDstP2PNodeID(std::string const& _dstP2PNodeID) + { + m_dstP2PNodeID = _dstP2PNodeID; + } + + std::string const& srcP2PNodeID() const override { return m_srcP2PNodeID; } + std::string const& dstP2PNodeID() const override { return m_dstP2PNodeID; } + + virtual void setExtAttributes(MessageExtAttributes::Ptr _extAttr) + { + m_extAttr = std::move(_extAttr); + } + MessageExtAttributes::Ptr extAttributes() override { return m_extAttr; } + +protected: + virtual int32_t decodeHeader(bytesConstRef _buffer); + virtual bool encodeHeader(bytes& _buffer); + +protected: + uint32_t m_length = 0; + uint16_t m_version = (uint16_t)(bcos::protocol::ProtocolVersion::V0); + uint16_t m_packetType = 0; + uint32_t m_seq = 0; + uint16_t m_ext = 0; + + // the src p2pNodeID, for message forward, only encode into the P2PMessageV2 + std::string m_srcP2PNodeID; + // the dst p2pNodeID, for message forward, only encode into the P2PMessageV2 + std::string m_dstP2PNodeID; + + P2PMessageOptions::Ptr m_options; ///< options fields + + std::shared_ptr m_payload; ///< payload data + + MessageExtAttributes::Ptr m_extAttr = nullptr; ///< message additional attributes +}; + +class P2PMessageFactory : public MessageFactory +{ +public: + using Ptr = std::shared_ptr; + // virtual ~P2PMessageFactory() = default; + +public: + Message::Ptr buildMessage() override + { + auto message = std::make_shared(); + return message; + } +}; + +inline std::ostream& operator<<(std::ostream& _out, const P2PMessage& _p2pMessage) +{ + _out << "P2PMessage {" + << " length: " << _p2pMessage.length() << " version: " << _p2pMessage.version() + << " packetType: " << _p2pMessage.packetType() << " seq: " << _p2pMessage.seq() + << " ext: " << _p2pMessage.ext() << " }"; + return _out; +} + +inline std::ostream& operator<<(std::ostream& _out, P2PMessage::Ptr& _p2pMessage) +{ + _out << (*_p2pMessage.get()); + return _out; +} + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.cpp b/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.cpp new file mode 100644 index 0000000..15d0f59 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file P2PMessageV2.cpp + * @brief: extend srcNodeID and dstNodeID for message forward + * @author: yujiechen + * @date 2021-05-04 + */ + +#include "P2PMessageV2.h" +#include "Common.h" +using namespace bcos; +using namespace bcos::gateway; + +bool P2PMessageV2::encodeHeader(bytes& _buffer) +{ + auto ret = P2PMessage::encodeHeader(_buffer); + if (m_version <= (uint16_t)(bcos::protocol::ProtocolVersion::V0)) + { + return ret; + } + if (m_srcP2PNodeID.size() > P2PMessageOptions::MAX_NODEID_LENGTH) + { + P2PMSG_LOG(ERROR) << LOG_DESC("srcP2PNodeID length valid") + << LOG_KV("srcP2PNodeID length", m_srcP2PNodeID.size()); + return false; + } + if (m_dstP2PNodeID.size() > P2PMessageOptions::MAX_NODEID_LENGTH) + { + P2PMSG_LOG(ERROR) << LOG_DESC("dstP2PNodeID length valid") + << LOG_KV("dstP2PNodeID length", m_dstP2PNodeID.size()); + return false; + } + // ecode ttl + auto ttlData = boost::asio::detail::socket_ops::host_to_network_short(m_ttl); + _buffer.insert(_buffer.end(), (byte*)&ttlData, (byte*)&ttlData + 2); + + // encode srcP2PNodeID + auto srcP2PNodeIDLen = + boost::asio::detail::socket_ops::host_to_network_short(m_srcP2PNodeID.size()); + _buffer.insert(_buffer.end(), (byte*)&srcP2PNodeIDLen, (byte*)&srcP2PNodeIDLen + 2); + _buffer.insert(_buffer.end(), m_srcP2PNodeID.begin(), m_srcP2PNodeID.end()); + + // encode dstP2PNodeID + auto dstP2PNodeIDLen = + boost::asio::detail::socket_ops::host_to_network_short(m_dstP2PNodeID.size()); + _buffer.insert(_buffer.end(), (byte*)&dstP2PNodeIDLen, (byte*)&dstP2PNodeIDLen + 2); + _buffer.insert(_buffer.end(), m_dstP2PNodeID.begin(), m_dstP2PNodeID.end()); + return true; +} + +int32_t P2PMessageV2::decodeHeader(bytesConstRef _buffer) +{ + int32_t offset = P2PMessage::decodeHeader(_buffer); + if (m_version <= bcos::protocol::ProtocolVersion::V0) + { + return offset; + } + auto length = static_cast(_buffer.size()); + // decode ttl + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + 2, length); + m_ttl = boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + + offset += 2; + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + 2, length); + // decode srcP2PNodeID, the length of srcP2PNodeID is 2-bytes + uint16_t srcP2PNodeIDLen = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + + offset += 2; + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + srcP2PNodeIDLen, length); + if (srcP2PNodeIDLen > 0) + { + m_srcP2PNodeID.assign(&_buffer[offset], &_buffer[offset] + srcP2PNodeIDLen); + } + offset += srcP2PNodeIDLen; + // decode dstP2PNodeID, the length of dstP2PNodeID is 2-bytes + uint16_t dstP2PNodeIDLen = + boost::asio::detail::socket_ops::network_to_host_short(*((uint16_t*)&_buffer[offset])); + offset += 2; + CHECK_OFFSET_WITH_THROW_EXCEPTION(offset + dstP2PNodeIDLen, length); + if (dstP2PNodeIDLen > 0) + { + m_dstP2PNodeID.assign(&_buffer[offset], &_buffer[offset] + dstP2PNodeIDLen); + } + offset += dstP2PNodeIDLen; + return offset; +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.h b/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.h new file mode 100644 index 0000000..cbc7bb5 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PMessageV2.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file P2PMessageV2.h + * @brief: extend srcNodeID and dstNodeID for message forward + * @author: yujiechen + * @date 2021-05-04 + */ +#pragma once +#include "P2PMessage.h" + +namespace bcos +{ +namespace gateway +{ +class P2PMessageV2 : public P2PMessage +{ +public: + using Ptr = std::shared_ptr; + //~P2PMessageV2() override = default; + + virtual int16_t ttl() const { return m_ttl; } + virtual void setTTL(int16_t _ttl) { m_ttl = _ttl; } + +protected: + int32_t decodeHeader(bytesConstRef _buffer) override; + bool encodeHeader(bytes& _buffer) override; + + int16_t m_ttl = 10; +}; + +class P2PMessageFactoryV2 : public MessageFactory +{ +public: + using Ptr = std::shared_ptr; + + Message::Ptr buildMessage() override + { + auto message = std::make_shared(); + return message; + } +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PSession.cpp b/bcos-gateway/bcos-gateway/libp2p/P2PSession.cpp new file mode 100644 index 0000000..86148a4 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PSession.cpp @@ -0,0 +1,89 @@ +/** @file P2PSession.cpp + * @author monan + * @date 20181112 + */ + +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace bcos; +using namespace bcos::gateway; + +P2PSession::P2PSession() + : m_p2pInfo(std::make_shared()), + m_protocolInfo(std::make_shared()) +{ + // init with the minVersion + m_protocolInfo->setVersion(m_protocolInfo->minVersion()); + P2PSESSION_LOG(INFO) << "[P2PSession::P2PSession] this=" << this; +} + +P2PSession::~P2PSession() +{ + P2PSESSION_LOG(INFO) << "[P2PSession::~P2PSession] this=" << this; +} + +void P2PSession::start() +{ + if (!m_run && m_session) + { + m_run = true; + + m_session->start(); + heartBeat(); + } +} + +void P2PSession::stop(DisconnectReason reason) +{ + if (m_run) + { + m_run = false; + if (m_session && m_session->actived()) + { + m_session->disconnect(reason); + } + } +} + +void P2PSession::heartBeat() +{ + auto service = m_service.lock(); + if (service && service->actived()) + { + if (m_session && m_session->actived()) + { + auto message = + std::dynamic_pointer_cast(service->messageFactory()->buildMessage()); + message->setPacketType(GatewayMessageType::Heartbeat); + P2PSESSION_LOG(TRACE) << LOG_DESC("P2PSession onHeartBeat") + << LOG_KV("p2pid", m_p2pInfo->p2pID) + << LOG_KV("endpoint", m_session->nodeIPEndpoint()); + + m_session->asyncSendMessage(message); + } + + auto self = std::weak_ptr(shared_from_this()); + m_timer = service->host()->asioInterface()->newTimer(HEARTBEAT_INTERVEL); + m_timer->async_wait([self](boost::system::error_code e) { + if (e) + { + P2PSESSION_LOG(TRACE) << "Timer canceled: " << e.message(); + return; + } + + auto s = self.lock(); + if (s) + { + s->heartBeat(); + } + }); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/P2PSession.h b/bcos-gateway/bcos-gateway/libp2p/P2PSession.h new file mode 100644 index 0000000..8a2ef25 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/P2PSession.h @@ -0,0 +1,78 @@ +/** @file P2PSession.h + * @author monan + * @date 20181112 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class P2PMessage; +class Service; + +class P2PSession : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + + P2PSession(); + + virtual ~P2PSession(); + + virtual void start(); + virtual void stop(DisconnectReason reason); + virtual bool actived() { return m_run; } + virtual void heartBeat(); + + virtual SessionFace::Ptr session() { return m_session; } + virtual void setSession(std::shared_ptr session) { m_session = session; } + + virtual P2pID p2pID() { return m_p2pInfo->p2pID; } + // Note: the p2pInfo must be setted after session setted + virtual void setP2PInfo(P2PInfo const& p2pInfo) + { + *m_p2pInfo = p2pInfo; + m_p2pInfo->nodeIPEndpoint = m_session->nodeIPEndpoint(); + } + virtual P2PInfo const& p2pInfo() const& { return *m_p2pInfo; } + virtual std::shared_ptr mutableP2pInfo() { return m_p2pInfo; } + + virtual std::weak_ptr service() { return m_service; } + virtual void setService(std::weak_ptr service) { m_service = service; } + + virtual void setProtocolInfo(bcos::protocol::ProtocolInfo::ConstPtr _protocolInfo) + { + WriteGuard l(x_protocolInfo); + *m_protocolInfo = *_protocolInfo; + } + // empty when negotiate failed or negotiate unfinished + virtual bcos::protocol::ProtocolInfo::ConstPtr protocolInfo() const + { + ReadGuard l(x_protocolInfo); + return m_protocolInfo; + } + +private: + SessionFace::Ptr m_session; + /// gateway p2p info + std::shared_ptr m_p2pInfo; + std::weak_ptr m_service; + std::shared_ptr m_timer; + bool m_run = false; + const static uint32_t HEARTBEAT_INTERVEL = 5000; + + bcos::protocol::ProtocolInfo::Ptr m_protocolInfo = nullptr; + mutable bcos::SharedMutex x_protocolInfo; +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/Service.cpp b/bcos-gateway/bcos-gateway/libp2p/Service.cpp new file mode 100644 index 0000000..947f4ad --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/Service.cpp @@ -0,0 +1,684 @@ +/** @file Service.cpp + * @author chaychen + * @date 20180910 + */ + +#include +#include // for ASIOInterface +#include // for SocketFace +#include // for SocketFace +#include +#include // for SessionCallbackFunc... +#include +#include // for P2PSession +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::protocol; + +static const uint32_t CHECK_INTERVEL = 10000; + +Service::Service(std::string const& _nodeID) : m_nodeID(_nodeID) +{ + m_localProtocol = g_BCOSConfig.protocolInfo(ProtocolModuleID::GatewayService); + m_codec = g_BCOSConfig.codec(); + // Process handshake packet logic, handshake protocol and determine + // the version, when handshake finished the version field of P2PMessage + // should be set + registerHandlerByMsgType(GatewayMessageType::Handshake, + boost::bind(&Service::onReceiveProtocol, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); +} + +void Service::start() +{ + if (!m_run) + { + m_run = true; + + auto self = std::weak_ptr(shared_from_this()); + m_host->setConnectionHandler([self](NetworkException e, P2PInfo const& p2pInfo, + std::shared_ptr session) { + auto service = self.lock(); + if (service) + { + service->onConnect(e, p2pInfo, session); + } + }); + m_host->start(); + + heartBeat(); + } +} + +void Service::stop() +{ + if (m_run) + { + m_run = false; + if (m_timer) + { + m_timer->cancel(); + } + m_host->stop(); + + /// disconnect sessions + RecursiveGuard l(x_sessions); + for (auto session : m_sessions) + { + session.second->stop(ClientQuit); + } + + /// clear sessions + m_sessions.clear(); + } +} + +void Service::heartBeat() +{ + if (!m_run) + { + return; + } + + std::map staticNodes; + { + RecursiveGuard l(x_nodes); + staticNodes = m_staticNodes; + } + + // Reconnect all nodes + for (auto& it : staticNodes) + { + /// exclude myself + if (it.second == id()) + { + SERVICE_LOG(DEBUG) << LOG_DESC("heartBeat ignore myself p2pid same") + << LOG_KV("remote endpoint", it.first) + << LOG_KV("nodeid", it.second); + continue; + } + if (!it.second.empty() && isConnected(it.second)) + { + SERVICE_LOG(TRACE) << LOG_DESC("heartBeat ignore connected") + << LOG_KV("endpoint", it.first) << LOG_KV("nodeid", it.second); + continue; + } + SERVICE_LOG(DEBUG) << LOG_DESC("heartBeat try to reconnect") + << LOG_KV("endpoint", it.first); + m_host->asyncConnect( + it.first, std::bind(&Service::onConnect, shared_from_this(), std::placeholders::_1, + std::placeholders::_2, std::placeholders::_3)); + } + { + RecursiveGuard l(x_sessions); + SERVICE_LOG(INFO) << METRIC << LOG_DESC("heartBeat") + << LOG_KV("connected count", m_sessions.size()); + } + + auto self = std::weak_ptr(shared_from_this()); + m_timer = m_host->asioInterface()->newTimer(CHECK_INTERVEL); + m_timer->async_wait([self](const boost::system::error_code& error) { + if (error) + { + SERVICE_LOG(WARNING) << "timer canceled" << LOG_KV("errorCode", error); + return; + } + auto service = self.lock(); + if (service && service->host()->haveNetwork()) + { + service->heartBeat(); + } + }); +} + +/// update the staticNodes +void Service::updateStaticNodes(std::shared_ptr const& _s, P2pID const& nodeID) +{ + NodeIPEndpoint endpoint(_s->nodeIPEndpoint()); + RecursiveGuard l(x_nodes); + auto it = m_staticNodes.find(endpoint); + // modify m_staticNodes(including accept cases, namely the client endpoint) + if (it != m_staticNodes.end()) + { + SERVICE_LOG(INFO) << LOG_DESC("updateStaticNodes") << LOG_KV("nodeid", nodeID) + << LOG_KV("endpoint", endpoint); + it->second = nodeID; + } + else + { + SERVICE_LOG(DEBUG) << LOG_DESC("updateStaticNodes can't find endpoint") + << LOG_KV("nodeid", nodeID) << LOG_KV("endpoint", endpoint); + } +} + +void Service::onConnect( + NetworkException e, P2PInfo const& p2pInfo, std::shared_ptr session) +{ + P2pID p2pID = p2pInfo.p2pID; + std::string peer = "unknown"; + if (session) + { + peer = session->nodeIPEndpoint().address(); + } + if (e.errorCode()) + { + SERVICE_LOG(WARNING) << LOG_DESC("onConnect") << LOG_KV("errorCode", e.errorCode()) + << LOG_KV("p2pid", p2pID) << LOG_KV("nodeName", p2pInfo.nodeName) + << LOG_KV("endpoint", peer) << LOG_KV("errorMessage", e.what()); + + return; + } + + SERVICE_LOG(INFO) << LOG_DESC("onConnect") << LOG_KV("p2pid", p2pID) + << LOG_KV("endpoint", peer); + + RecursiveGuard l(x_sessions); + auto it = m_sessions.find(p2pID); + if (it != m_sessions.end() && it->second->actived()) + { + SERVICE_LOG(INFO) << "Disconnect duplicate peer" << LOG_KV("p2pid", p2pID); + updateStaticNodes(session->socket(), p2pID); + session->disconnect(DuplicatePeer); + return; + } + + if (p2pID == id()) + { + SERVICE_LOG(TRACE) << "Disconnect self"; + updateStaticNodes(session->socket(), id()); + session->disconnect(DuplicatePeer); + return; + } + + auto p2pSession = std::make_shared(); + p2pSession->setSession(session); + p2pSession->setP2PInfo(p2pInfo); + p2pSession->setService(std::weak_ptr(shared_from_this())); + p2pSession->setProtocolInfo(m_localProtocol); + + auto p2pSessionWeakPtr = std::weak_ptr(p2pSession); + p2pSession->session()->setMessageHandler(std::bind(&Service::onMessage, shared_from_this(), + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, p2pSessionWeakPtr)); + p2pSession->session()->setBeforeMessageHandler(std::bind(&Service::onBeforeMessage, + shared_from_this(), std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + p2pSession->start(); + asyncSendProtocol(p2pSession); + updateStaticNodes(session->socket(), p2pID); + if (it != m_sessions.end()) + { + it->second = p2pSession; + } + else + { + m_sessions.insert(std::make_pair(p2pID, p2pSession)); + callNewSessionHandlers(p2pSession); + } + SERVICE_LOG(INFO) << LOG_DESC("Connection established") << LOG_KV("p2pid", p2pID) + << LOG_KV("endpoint", session->nodeIPEndpoint()); +} + +void Service::onDisconnect(NetworkException e, P2PSession::Ptr p2pSession) +{ + // handle all registered handlers + for (const auto& handler : m_disconnectionHandlers) + { + handler(e, p2pSession); + } + + RecursiveGuard l(x_sessions); + auto it = m_sessions.find(p2pSession->p2pID()); + if (it != m_sessions.end() && it->second == p2pSession) + { + SERVICE_LOG(TRACE) << "Service onDisconnect and remove from m_sessions" + << LOG_KV("p2pid", p2pSession->p2pID()) + << LOG_KV("endpoint", p2pSession->session()->nodeIPEndpoint()); + + m_sessions.erase(it); + callDeleteSessionHandlers(p2pSession); + + if (e.errorCode() == P2PExceptionType::DuplicateSession) + return; + SERVICE_LOG(WARNING) << LOG_DESC("onDisconnect") << LOG_KV("errorCode", e.errorCode()) + << LOG_KV("what", boost::diagnostic_information(e)); + RecursiveGuard l(x_nodes); + for (auto& it : m_staticNodes) + { + if (it.second == p2pSession->p2pID()) + { + it.second.clear(); // clear nodeid info when disconnect + break; + } + } + } + // heartBeat(); +} + +void Service::sendMessageToSession(P2PSession::Ptr _p2pSession, P2PMessage::Ptr _msg, + Options _options, CallbackFuncWithSession _callback) +{ + auto protocolVersion = _p2pSession->protocolInfo()->version(); + _msg->setVersion(protocolVersion); + if (!_callback) + { + _p2pSession->session()->asyncSendMessage(_msg, _options, nullptr); + return; + } + auto weakSession = std::weak_ptr(_p2pSession); + _p2pSession->session()->asyncSendMessage( + _msg, _options, [weakSession, _callback](NetworkException e, Message::Ptr message) { + auto session = weakSession.lock(); + if (!session) + { + return; + } + P2PMessage::Ptr p2pMessage = std::dynamic_pointer_cast(message); + if (_callback) + { + _callback(e, session, p2pMessage); + } + }); +} + +void Service::sendRespMessageBySession( + bytesConstRef _payload, P2PMessage::Ptr _p2pMessage, P2PSession::Ptr _p2pSession) +{ + auto respMessage = std::static_pointer_cast(messageFactory()->buildMessage()); + + respMessage->setSeq(_p2pMessage->seq()); + respMessage->setRespPacket(); + respMessage->setPayload(std::make_shared(_payload.begin(), _payload.end())); + + sendMessageToSession(_p2pSession, respMessage); + SERVICE_LOG(TRACE) << "sendRespMessageBySession" << LOG_KV("seq", _p2pMessage->seq()) + << LOG_KV("p2pid", _p2pSession->p2pID()) + << LOG_KV("payload size", _payload.size()); +} + +bool Service::onBeforeMessage( + SessionFace::Ptr _session, Message::Ptr _message, SessionCallbackFunc _callback) +{ + if (m_beforeMessageHandler) + { + return m_beforeMessageHandler(_session, _message, _callback); + } + + return true; +} + +void Service::onMessage(NetworkException e, SessionFace::Ptr session, Message::Ptr message, + std::weak_ptr p2pSessionWeakPtr) +{ + auto p2pSession = p2pSessionWeakPtr.lock(); + if (!p2pSession) + { + return; + } + + try + { + P2pID p2pID = id(); + NodeIPEndpoint nodeIPEndpoint(boost::asio::ip::address(), 0); + if (session && p2pSession) + { + p2pID = p2pSession->p2pID(); + nodeIPEndpoint = session->nodeIPEndpoint(); + } + + if (e.errorCode()) + { + SERVICE_LOG(WARNING) << LOG_DESC("disconnect error P2PSession") + << LOG_KV("p2pid", p2pID) << LOG_KV("endpoint", nodeIPEndpoint) + << LOG_KV("errorCode", e.errorCode()) + << LOG_KV("errorMessage", e.what()); + + if (p2pSession) + { + p2pSession->stop(UserReason); + onDisconnect(e, p2pSession); + } + return; + } + + // on message handler + if (m_onMessageHandler) + { + m_onMessageHandler(session, message); + } + + /// SERVICE_LOG(TRACE) << "Service onMessage: " << message->seq(); + auto p2pMessage = std::dynamic_pointer_cast(message); + SERVICE_LOG(TRACE) << LOG_DESC("onMessage receive message") << LOG_KV("p2pid", p2pID) + << LOG_KV("endpoint", nodeIPEndpoint) << LOG_KV("seq", p2pMessage->seq()) + << LOG_KV("version", p2pMessage->version()) + << LOG_KV("packetType", p2pMessage->packetType()); + + auto packetType = p2pMessage->packetType(); + auto handler = getMessageHandlerByMsgType(packetType); + if (handler) + { + // TODO: use thread pool here + handler(e, p2pSession, p2pMessage); + return; + } + switch (packetType) + { + case GatewayMessageType::Heartbeat: + break; + default: + { + SERVICE_LOG(ERROR) << LOG_DESC("Unrecognized message type") + << LOG_KV("packetType", packetType) << LOG_KV("seq", message->seq()); + } + break; + }; + } + catch (std::exception& e) + { + SERVICE_LOG(ERROR) << "onMessage error" << LOG_KV("what", boost::diagnostic_information(e)); + } +} + +P2PMessage::Ptr Service::sendMessageByNodeID(P2pID nodeID, P2PMessage::Ptr message) +{ + try + { + struct SessionCallback : public std::enable_shared_from_this + { + public: + using Ptr = std::shared_ptr; + + SessionCallback() { mutex.lock(); } + + void onResponse( + NetworkException _error, std::shared_ptr, P2PMessage::Ptr _message) + { + error = _error; + response = _message; + mutex.unlock(); + } + + NetworkException error; + P2PMessage::Ptr response; + std::mutex mutex; + }; + + SessionCallback::Ptr callback = std::make_shared(); + CallbackFuncWithSession fp = std::bind(&SessionCallback::onResponse, callback, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); + + asyncSendMessageByNodeID(nodeID, message, fp, Options()); + // lock to wait for async send + callback->mutex.lock(); + callback->mutex.unlock(); + SERVICE_LOG(DEBUG) << LOG_DESC("sendMessageByNodeID mutex unlock"); + + NetworkException error = callback->error; + if (error.errorCode() != 0) + { + SERVICE_LOG(ERROR) << LOG_DESC("asyncSendMessageByNodeID error") + << LOG_KV("nodeid", nodeID) << LOG_KV("errorCode", error.errorCode()) + << LOG_KV("what", error.what()); + BOOST_THROW_EXCEPTION(error); + } + + return callback->response; + } + catch (std::exception& e) + { + SERVICE_LOG(ERROR) << LOG_DESC("asyncSendMessageByNodeID error") << LOG_KV("nodeid", nodeID) + << LOG_KV("what", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(e); + } + + return P2PMessage::Ptr(); +} + +void Service::asyncSendMessageByEndPoint(NodeIPEndpoint const& _endPoint, P2PMessage::Ptr message, + CallbackFuncWithSession callback, Options options) +{ + RecursiveGuard l(x_sessions); + for (auto const& it : m_sessions) + { + if (it.second->session()->nodeIPEndpoint() == _endPoint) + { + sendMessageToSession(it.second, message, options, callback); + break; + } + } +} + +void Service::asyncSendMessageByNodeID( + P2pID nodeID, P2PMessage::Ptr message, CallbackFuncWithSession callback, Options options) +{ + try + { + if (nodeID == id()) + { + // ignore myself + return; + } + + RecursiveGuard l(x_sessions); + auto it = m_sessions.find(nodeID); + + if (it != m_sessions.end() && it->second->actived()) + { + if (message->seq() == 0) + { + message->setSeq(m_messageFactory->newSeq()); + } + auto session = it->second; + // for compatibility_version consideration + sendMessageToSession(session, message, options, callback); + } + else + { + if (callback) + { + NetworkException e(-1, "send message failed for no network established"); + callback(e, nullptr, nullptr); + } + SERVICE_LOG(WARNING) << "Node inactived" << LOG_KV("nodeid", nodeID); + } + } + catch (std::exception& e) + { + SERVICE_LOG(ERROR) << "asyncSendMessageByNodeID" << LOG_KV("nodeid", nodeID) + << LOG_KV("what", boost::diagnostic_information(e)); + + if (callback) + { + m_host->threadPool()->enqueue([callback, e] { + callback(NetworkException(Disconnect, "Disconnect"), P2PSession::Ptr(), + P2PMessage::Ptr()); + }); + } + } +} + +void Service::asyncBroadcastMessage(P2PMessage::Ptr message, Options options) +{ + try + { + std::unordered_map sessions; + { + RecursiveGuard l(x_sessions); + sessions = m_sessions; + } + + for (auto s : sessions) + { + asyncSendMessageByNodeID(s.first, message, CallbackFuncWithSession(), options); + } + } + catch (std::exception& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("asyncBroadcastMessage") + << LOG_KV("what", boost::diagnostic_information(e)); + } +} + +P2PInfos Service::sessionInfos() +{ + P2PInfos infos; + try + { + RecursiveGuard l(x_sessions); + auto s = m_sessions; + for (auto const& i : s) + { + infos.push_back(i.second->p2pInfo()); + } + } + catch (std::exception& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("sessionInfos") + << LOG_KV("what", boost::diagnostic_information(e)); + } + return infos; +} + +bool Service::isConnected(P2pID const& nodeID) const +{ + RecursiveGuard l(x_sessions); + auto it = m_sessions.find(nodeID); + + if (it != m_sessions.end() && it->second->actived()) + { + return true; + } + return false; +} + +std::shared_ptr Service::newP2PMessage(int16_t _type, bytesConstRef _payload) +{ + auto message = std::static_pointer_cast(messageFactory()->buildMessage()); + + message->setPacketType(_type); + message->setSeq(messageFactory()->newSeq()); + message->setPayload(std::make_shared(_payload.begin(), _payload.end())); + return message; +} + +void Service::asyncSendMessageByP2PNodeID(int16_t _type, P2pID _dstNodeID, bytesConstRef _payload, + Options _options, P2PResponseCallback _callback) +{ + if (!isReachable(_dstNodeID)) + { + if (_callback) + { + auto errorMsg = + "send message to " + _dstNodeID + " failed for no connection established"; + _callback(std::make_shared(-1, errorMsg), 0, nullptr); + } + return; + } + auto p2pMessage = newP2PMessage(_type, _payload); + asyncSendMessageByNodeID( + _dstNodeID, p2pMessage, + [_dstNodeID, _callback](NetworkException _e, std::shared_ptr, + std::shared_ptr _p2pMessage) { + auto packetType = _p2pMessage ? _p2pMessage->packetType() : 0; + if (_e.errorCode() != 0) + { + SERVICE_LOG(WARNING) << LOG_DESC("asyncSendMessageByP2PNodeID error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()) + << LOG_KV("type", packetType) << LOG_KV("dst", _dstNodeID); + if (_callback) + { + _callback( + _e.toError(), packetType, _p2pMessage ? _p2pMessage->payload() : nullptr); + } + return; + } + if (_callback) + { + _callback(nullptr, packetType, _p2pMessage->payload()); + } + }, + _options); +} + +void Service::asyncBroadcastMessageToP2PNodes( + int16_t _type, uint16_t moduleID, bytesConstRef _payload, Options _options) +{ + auto p2pMessage = newP2PMessage(_type, _payload); + asyncBroadcastMessage(p2pMessage, _options); +} + +void Service::asyncSendMessageByP2PNodeIDs( + int16_t _type, const std::vector& _nodeIDs, bytesConstRef _payload, Options _options) +{ + for (auto const& nodeID : _nodeIDs) + { + asyncSendMessageByP2PNodeID(_type, nodeID, _payload, _options, nullptr); + } +} + +// send the protocolInfo +void Service::asyncSendProtocol(P2PSession::Ptr _session) +{ + auto payload = std::make_shared(); + m_codec->encode(m_localProtocol, *payload); + auto message = std::static_pointer_cast(messageFactory()->buildMessage()); + message->setPacketType(GatewayMessageType::Handshake); + auto seq = messageFactory()->newSeq(); + message->setSeq(seq); + message->setPayload(payload); + + SERVICE_LOG(INFO) << LOG_DESC("asyncSendProtocol") << LOG_KV("payload", payload->size()) + << LOG_KV("seq", seq); + sendMessageToSession(_session, message, Options(), nullptr); +} + +// receive the protocolInfo +void Service::onReceiveProtocol( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message) +{ + if (_e.errorCode()) + { + SERVICE_LOG(WARNING) << LOG_DESC("onReceiveProtocol error") + << LOG_KV("errorCode", _e.errorCode()) << LOG_KV("errorMsg", _e.what()) + << LOG_KV("peer", _session ? _session->p2pID() : "unknown"); + return; + } + try + { + auto payload = _message->payload(); + auto protocolInfo = m_codec->decode(bytesConstRef(payload->data(), payload->size())); + // negotiated version + if (protocolInfo->minVersion() > m_localProtocol->maxVersion() || + protocolInfo->maxVersion() < m_localProtocol->minVersion()) + { + SERVICE_LOG(WARNING) + << LOG_DESC("onReceiveProtocol: protocolNegotiate failed, disconnect the session") + << LOG_KV("peer", _session->p2pID()) + << LOG_KV("minVersion", protocolInfo->minVersion()) + << LOG_KV("maxVersion", protocolInfo->maxVersion()) + << LOG_KV("supportMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportMaxVersion", m_localProtocol->maxVersion()); + _session->session()->disconnect(DisconnectReason::NegotiateFailed); + return; + } + auto version = std::min(m_localProtocol->maxVersion(), protocolInfo->maxVersion()); + protocolInfo->setVersion(version); + _session->setProtocolInfo(protocolInfo); + SERVICE_LOG(INFO) << LOG_DESC("onReceiveProtocol: protocolNegotiate success") + << LOG_KV("peer", _session->p2pID()) + << LOG_KV("minVersion", protocolInfo->minVersion()) + << LOG_KV("maxVersion", protocolInfo->maxVersion()) + << LOG_KV("supportMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportMaxVersion", m_localProtocol->maxVersion()) + << LOG_KV("negotiatedVersion", version); + } + catch (std::exception const& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("onReceiveProtocol exception") + << LOG_KV("peer", _session ? _session->p2pID() : "unknown") + << LOG_KV("packetType", _message->packetType()) + << LOG_KV("seq", _message->seq()); + } +} diff --git a/bcos-gateway/bcos-gateway/libp2p/Service.h b/bcos-gateway/bcos-gateway/libp2p/Service.h new file mode 100644 index 0000000..1b7a296 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/Service.h @@ -0,0 +1,268 @@ +/** @file Service.h + * @author monan + * @modify first draft + * @date 20180910 + * @author chaychen + * @modify realize encode and decode, add timeout, code format + * @date 20180911 + */ + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +class Host; +class P2PMessage; +class Gateway; + +class Service : public P2PInterface, public std::enable_shared_from_this +{ +public: + Service(std::string const& _nodeID); + virtual ~Service() { stop(); } + + using Ptr = std::shared_ptr; + + void start() override; + void stop() override; + virtual void heartBeat(); + + virtual bool actived() { return m_run; } + P2pID id() const override { return m_nodeID; } + + virtual void onConnect( + NetworkException e, P2PInfo const& p2pInfo, std::shared_ptr session); + virtual void onDisconnect(NetworkException e, P2PSession::Ptr p2pSession); + virtual void onMessage(NetworkException e, SessionFace::Ptr session, Message::Ptr message, + std::weak_ptr p2pSessionWeakPtr); + + virtual bool onBeforeMessage( + SessionFace::Ptr _session, Message::Ptr _message, SessionCallbackFunc _callback); + + void sendRespMessageBySession( + bytesConstRef _payload, P2PMessage::Ptr _p2pMessage, P2PSession::Ptr _p2pSession) override; + + std::shared_ptr sendMessageByNodeID( + P2pID nodeID, std::shared_ptr message) override; + + void asyncSendMessageByNodeID(P2pID nodeID, std::shared_ptr message, + CallbackFuncWithSession callback, Options options = Options()) override; + + void asyncBroadcastMessage(std::shared_ptr message, Options options) override; + + virtual std::map staticNodes() { return m_staticNodes; } + virtual void setStaticNodes(const std::set& staticNodes) + { + RecursiveGuard l(x_nodes); + m_staticNodes.clear(); + for (const auto& endpoint : staticNodes) + { + m_staticNodes.insert(std::make_pair(endpoint, "")); + } + } + + P2PInfos sessionInfos() override; ///< Only connected node + P2PInfo localP2pInfo() override + { + auto p2pInfo = m_host->p2pInfo(); + p2pInfo.p2pID = m_nodeID; + return p2pInfo; + } + bool isConnected(P2pID const& nodeID) const override; + bool isReachable(P2pID const& _nodeID) const override { return isConnected(_nodeID); } + + std::shared_ptr host() override { return m_host; } + virtual void setHost(std::shared_ptr host) { m_host = host; } + + std::shared_ptr messageFactory() override { return m_messageFactory; } + virtual void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + + std::shared_ptr keyFactory() { return m_keyFactory; } + + void setKeyFactory(std::shared_ptr _keyFactory) + { + m_keyFactory = _keyFactory; + } + void updateStaticNodes(std::shared_ptr const& _s, P2pID const& nodeId); + + void registerDisconnectHandler(std::function _handler) + { + m_disconnectionHandlers.push_back(_handler); + } + + std::shared_ptr getP2PSessionByNodeId(P2pID const& _nodeID) override + { + RecursiveGuard l(x_sessions); + auto it = m_sessions.find(_nodeID); + if (it != m_sessions.end()) + { + return it->second; + } + return nullptr; + } + + void asyncSendMessageByP2PNodeID(int16_t _type, P2pID _dstNodeID, bytesConstRef _payload, + Options options = Options(), P2PResponseCallback _callback = nullptr) override; + + void asyncBroadcastMessageToP2PNodes( + int16_t _type, uint16_t moduleID, bytesConstRef _payload, Options _options) override; + + void asyncSendMessageByP2PNodeIDs(int16_t _type, const std::vector& _nodeIDs, + bytesConstRef _payload, Options _options) override; + + void registerHandlerByMsgType(int16_t _type, MessageHandler const& _msgHandler) override + { + UpgradableGuard l(x_msgHandlers); + if (m_msgHandlers.count(_type) || !_msgHandler) + { + return; + } + UpgradeGuard ul(l); + m_msgHandlers[_type] = _msgHandler; + } + + MessageHandler getMessageHandlerByMsgType(int16_t _type) + { + ReadGuard l(x_msgHandlers); + if (m_msgHandlers.count(_type)) + { + return m_msgHandlers[_type]; + } + return nullptr; + } + + void eraseHandlerByMsgType(int16_t _type) override + { + UpgradableGuard l(x_msgHandlers); + if (!m_msgHandlers.count(_type)) + { + return; + } + UpgradeGuard ul(l); + m_msgHandlers.erase(_type); + } + + + void asyncSendMessageByEndPoint(NodeIPEndpoint const& _endPoint, P2PMessage::Ptr message, + CallbackFuncWithSession callback, Options options = Options()); + + // handle before sending message, if the check fails, meaning false is returned, the message is + // not sent, and the SessionCallbackFunc will be performed + void setBeforeMessageHandler( + std::function _handler) + { + m_beforeMessageHandler = _handler; + } + + void setOnMessageHandler(std::function _handler) + { + m_onMessageHandler = _handler; + } + +protected: + virtual void sendMessageToSession(P2PSession::Ptr _p2pSession, P2PMessage::Ptr _msg, + Options = Options(), CallbackFuncWithSession = CallbackFuncWithSession()); + + std::shared_ptr newP2PMessage(int16_t _type, bytesConstRef _payload); + // handshake protocol + void asyncSendProtocol(P2PSession::Ptr _session); + void onReceiveProtocol( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message); + + // handlers called when new-session + void registerOnNewSession(std::function _handler) + { + m_newSessionHandlers.emplace_back(_handler); + } + // handlers called when delete-session + void registerOnDeleteSession(std::function _handler) + { + m_deleteSessionHandlers.emplace_back(_handler); + } + + + virtual void callNewSessionHandlers(P2PSession::Ptr _session) + { + try + { + for (auto const& handler : m_newSessionHandlers) + { + handler(_session); + } + } + catch (std::exception const& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("callNewSessionHandlers exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + } + virtual void callDeleteSessionHandlers(P2PSession::Ptr _session) + { + try + { + for (auto const& handler : m_deleteSessionHandlers) + { + handler(_session); + } + } + catch (std::exception const& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("callDeleteSessionHandlers exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + } + +protected: + std::vector> m_disconnectionHandlers; + + std::shared_ptr m_keyFactory; + + std::map m_staticNodes; + bcos::RecursiveMutex x_nodes; + + std::shared_ptr m_host; + + std::unordered_map m_sessions; + mutable bcos::RecursiveMutex x_sessions; + + std::shared_ptr m_messageFactory; + + P2pID m_nodeID; + + std::shared_ptr m_timer; + + bool m_run = false; + + std::map m_msgHandlers; + mutable SharedMutex x_msgHandlers; + + // the local protocol + bcos::protocol::ProtocolInfo::ConstPtr m_localProtocol; + bcos::protocol::ProtocolInfoCodec::ConstPtr m_codec; + + // handlers called when new-session + std::vector> m_newSessionHandlers; + // handlers called when delete-session + std::vector> m_deleteSessionHandlers; + + std::function m_beforeMessageHandler; + + std::function m_onMessageHandler; +}; + +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libp2p/ServiceV2.cpp b/bcos-gateway/bcos-gateway/libp2p/ServiceV2.cpp new file mode 100644 index 0000000..e5b6516 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/ServiceV2.cpp @@ -0,0 +1,383 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ServiceV2.cpp + * @author: yujiechen + * @date 2022-5-24 + */ +#include "ServiceV2.h" +#include "Common.h" +#include "P2PMessageV2.h" + +using namespace bcos; +using namespace bcos::gateway; + +ServiceV2::ServiceV2(std::string const& _nodeID, RouterTableFactory::Ptr _routerTableFactory) + : Service(_nodeID), + m_routerTableFactory(_routerTableFactory), + m_routerTable(m_routerTableFactory->createRouterTable()) +{ + m_routerTable->setNodeID(m_nodeID); + m_routerTable->setUnreachableDistance(c_unreachableDistance); + // process router packet related logic + registerHandlerByMsgType(GatewayMessageType::RouterTableSyncSeq, + boost::bind(&ServiceV2::onReceiveRouterSeq, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + + registerHandlerByMsgType(GatewayMessageType::RouterTableResponse, + boost::bind(&ServiceV2::onReceivePeersRouterTable, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + + registerHandlerByMsgType(GatewayMessageType::RouterTableRequest, + boost::bind(&ServiceV2::onReceiveRouterTableRequest, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + registerOnNewSession([this](P2PSession::Ptr _session) { onNewSession(_session); }); + registerOnDeleteSession([this](P2PSession::Ptr _session) { onEraseSession(_session); }); + m_routerTimer = std::make_shared(3000, "routerSeqSync"); + m_routerTimer->registerTimeoutHandler([this]() { broadcastRouterSeq(); }); +} + +void ServiceV2::start() +{ + Service::start(); + if (m_routerTimer) + { + m_routerTimer->start(); + } +} + +void ServiceV2::stop() +{ + if (m_routerTimer) + { + m_routerTimer->stop(); + } + Service::stop(); +} + +// receive routerTable from peers +void ServiceV2::onReceivePeersRouterTable( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message) +{ + if (_e.errorCode()) + { + SERVICE_ROUTER_LOG(WARNING) << LOG_DESC("onReceivePeersRouterTable error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + auto routerTable = m_routerTableFactory->createRouterTable(ref(*(_message->payload()))); + + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onReceivePeersRouterTable") + << LOG_KV("peer", _session->p2pID()) + << LOG_KV("entrySize", routerTable->routerEntries().size()); + joinRouterTable(_session->p2pID(), routerTable); +} + +void ServiceV2::joinRouterTable( + std::string const& _generatedFrom, RouterTableInterface::Ptr _routerTable) +{ + std::set unreachableNodes; + bool updated = false; + auto const& entries = _routerTable->routerEntries(); + for (auto const& it : entries) + { + auto entry = it.second; + if (m_routerTable->update(unreachableNodes, _generatedFrom, entry) && !updated) + { + updated = true; + } + } + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("joinRouterTable: create router entry") + << LOG_KV("dst", _generatedFrom); + auto entry = m_routerTableFactory->createRouterEntry(); + entry->setDstNode(_generatedFrom); + entry->setDistance(0); + if (m_routerTable->update(unreachableNodes, m_nodeID, entry) && !updated) + { + updated = true; + } + if (!updated) + { + return; + } + onP2PNodesUnreachable(unreachableNodes); + m_statusSeq++; + broadcastRouterSeq(); +} + +// receive routerTable request from peer +void ServiceV2::onReceiveRouterTableRequest( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message) +{ + if (_e.errorCode()) + { + SERVICE_ROUTER_LOG(WARNING) << LOG_DESC("onReceiveRouterTableRequest error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onReceiveRouterTableRequest and response routerTable") + << LOG_KV("peer", _session->p2pID()) + << LOG_KV("entrySize", m_routerTable->routerEntries().size()); + + auto routerTableData = std::make_shared(); + m_routerTable->encode(*routerTableData); + auto dstP2PNodeID = + (_message->srcP2PNodeID().size() > 0) ? _message->srcP2PNodeID() : _session->p2pID(); + asyncSendMessageByP2PNodeID(GatewayMessageType::RouterTableResponse, dstP2PNodeID, + bytesConstRef((byte*)routerTableData->data(), routerTableData->size())); +} + +void ServiceV2::broadcastRouterSeq() +{ + m_routerTimer->restart(); + auto message = std::static_pointer_cast(m_messageFactory->buildMessage()); + message->setPacketType(GatewayMessageType::RouterTableSyncSeq); + auto seq = m_statusSeq.load(); + auto statusSeq = boost::asio::detail::socket_ops::host_to_network_long(seq); + auto payload = std::make_shared((byte*)&statusSeq, (byte*)&statusSeq + 4); + message->setPayload(payload); + // the router table should only exchange between neighbor + asyncBroadcastMessageWithoutForward(message, Options()); +} + +void ServiceV2::onReceiveRouterSeq( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message) +{ + if (_e.errorCode()) + { + SERVICE_ROUTER_LOG(WARNING) + << LOG_DESC("onReceiveRouterSeq error") << LOG_KV("code", _e.errorCode()) + << LOG_KV("message", _e.what()); + return; + } + auto statusSeq = boost::asio::detail::socket_ops::network_to_host_long( + *((uint32_t*)_message->payload()->data())); + if (!tryToUpdateSeq(_session->p2pID(), statusSeq)) + { + return; + } + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onReceiveRouterSeq and request routerTable") + << LOG_KV("peer", _session->p2pID()) << LOG_KV("seq", statusSeq); + // request router table to peer + auto dstP2PNodeID = + (_message->srcP2PNodeID().size() > 0) ? _message->srcP2PNodeID() : _session->p2pID(); + asyncSendMessageByP2PNodeID( + GatewayMessageType::RouterTableRequest, dstP2PNodeID, bytesConstRef()); +} + +void ServiceV2::onNewSession(P2PSession::Ptr _session) +{ + std::set unreachableNodes; + auto entry = m_routerTableFactory->createRouterEntry(); + entry->setDstNode(_session->p2pID()); + entry->setDistance(0); + if (!m_routerTable->update(unreachableNodes, m_nodeID, entry)) + { + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onNewSession: RouterTable not changed") + << LOG_KV("dst", _session->p2pID()); + return; + } + onP2PNodesUnreachable(unreachableNodes); + m_statusSeq++; + broadcastRouterSeq(); + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onNewSession: update routerTable") + << LOG_KV("dst", _session->p2pID()); +} + +void ServiceV2::onEraseSession(P2PSession::Ptr _session) +{ + eraseSeq(_session->p2pID()); + std::set unreachableNodes; + if (m_routerTable->erase(unreachableNodes, _session->p2pID())) + { + onP2PNodesUnreachable(unreachableNodes); + m_statusSeq++; + broadcastRouterSeq(); + } + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("onEraseSession") << LOG_KV("dst", _session->p2pID()); +} + +bool ServiceV2::tryToUpdateSeq(std::string const& _p2pNodeID, uint32_t _seq) +{ + UpgradableGuard l(x_node2Seq); + if (m_node2Seq.count(_p2pNodeID) && m_node2Seq.at(_p2pNodeID) >= _seq) + { + return false; + } + UpgradeGuard ul(l); + m_node2Seq[_p2pNodeID] = _seq; + return true; +} + +bool ServiceV2::eraseSeq(std::string const& _p2pNodeID) +{ + UpgradableGuard l(x_node2Seq); + if (!m_node2Seq.count(_p2pNodeID)) + { + return false; + } + UpgradeGuard ul(l); + m_node2Seq.erase(_p2pNodeID); + return true; +} + +void ServiceV2::asyncSendMessageByNodeIDWithMsgForward( + std::shared_ptr _message, CallbackFuncWithSession _callback, Options _options) +{ + auto dstNodeID = _message->dstP2PNodeID(); + // without nextHop: maybe network unreachable or with distance equal to 1 + auto nextHop = m_routerTable->getNextHop(dstNodeID); + if (nextHop.size() == 0) + { + SERVICE_LOG(TRACE) << LOG_DESC("asyncSendMessageByNodeID: sendMessage to dstNode") + << LOG_KV("from", _message->srcP2PNodeID()) + << LOG_KV("to", _message->dstP2PNodeID()) + << LOG_KV("type", _message->packetType()) + << LOG_KV("seq", _message->seq()) + << LOG_KV("rsp", _message->isRespPacket()); + return Service::asyncSendMessageByNodeID(dstNodeID, _message, _callback, _options); + } + // with nextHop, send the message to nextHop + SERVICE_LOG(TRACE) << LOG_DESC("asyncSendMessageByNodeID: forwardMessage to nextHop") + << LOG_KV("from", _message->srcP2PNodeID()) + << LOG_KV("to", _message->dstP2PNodeID()) << LOG_KV("nextHop", nextHop) + << LOG_KV("type", _message->packetType()) << LOG_KV("seq", _message->seq()) + << LOG_KV("rsp", _message->isRespPacket()); + return Service::asyncSendMessageByNodeID(nextHop, _message, _callback, _options); +} + +void ServiceV2::asyncSendMessageByNodeID(P2pID _nodeID, std::shared_ptr _message, + CallbackFuncWithSession _callback, Options _options) +{ + _message->setSrcP2PNodeID(m_nodeID); + _message->setDstP2PNodeID(_nodeID); + asyncSendMessageByNodeIDWithMsgForward(_message, _callback, _options); +} + +void ServiceV2::onMessage(NetworkException _e, SessionFace::Ptr _session, Message::Ptr _message, + std::weak_ptr _p2pSessionWeakPtr) +{ + if (_e.errorCode()) + { + SERVICE_LOG(WARNING) << LOG_DESC("onMessage error") << LOG_KV("code", _e.errorCode()) + << LOG_KV("msg", _e.what()); + // calls onMessage of Service to trigger disconnectHandler + Service::onMessage(_e, _session, _message, _p2pSessionWeakPtr); + return; + } + // v0 message or the dstP2PNodeID is the nodeSelf + auto p2pMsg = std::dynamic_pointer_cast(_message); + if (p2pMsg->dstP2PNodeID().size() == 0 || p2pMsg->dstP2PNodeID() == m_nodeID) + { + SERVICE_LOG(TRACE) << LOG_DESC("onMessage") << LOG_KV("from", p2pMsg->srcP2PNodeID()) + << LOG_KV("seq", p2pMsg->seq()) << LOG_KV("dst", p2pMsg->dstP2PNodeID()) + << LOG_KV("type", p2pMsg->packetType()) + << LOG_KV("rsp", p2pMsg->isRespPacket()) << LOG_KV("ttl", p2pMsg->ttl()) + << LOG_KV("payLoadSize", p2pMsg->payload()->size()); + Service::onMessage(_e, _session, _message, _p2pSessionWeakPtr); + return; + } + // forward the message again + auto ttl = p2pMsg->ttl(); + if (ttl <= 0) + { + SERVICE_LOG(WARNING) << LOG_DESC("onMessage: expired ttl") << LOG_KV("seq", p2pMsg->seq()) + << LOG_KV("from", p2pMsg->srcP2PNodeID()) + << LOG_KV("dst", p2pMsg->dstP2PNodeID()) + << LOG_KV("type", p2pMsg->packetType()) + << LOG_KV("rsp", p2pMsg->isRespPacket()) + << LOG_KV("payLoadSize", p2pMsg->payload()->size()) + << LOG_KV("ttl", ttl); + return; + } + p2pMsg->setTTL(ttl - 1); + SERVICE_LOG(TRACE) << LOG_DESC("onMessage: asyncSendMessageByNodeIDWithMsgForward") + << LOG_KV("seq", p2pMsg->seq()) << LOG_KV("from", p2pMsg->srcP2PNodeID()) + << LOG_KV("dst", p2pMsg->dstP2PNodeID()) + << LOG_KV("type", p2pMsg->packetType()) << LOG_KV("seq", p2pMsg->seq()) + << LOG_KV("rsp", p2pMsg->isRespPacket()) + << LOG_KV("payLoadSize", p2pMsg->payload()->size()) + << LOG_KV("ttl", p2pMsg->ttl()); + asyncSendMessageByNodeIDWithMsgForward(p2pMsg, nullptr); +} + +void ServiceV2::asyncBroadcastMessage(std::shared_ptr message, Options options) +{ + auto reachableNodes = m_routerTable->getAllReachableNode(); + try + { + std::unordered_map sessions; + { + RecursiveGuard l(x_sessions); + std::for_each(m_sessions.begin(), m_sessions.end(), + [&](std::unordered_map::value_type& _value) { + reachableNodes.insert(_value.first); + }); + } + for (auto const& node : reachableNodes) + { + message->setSrcP2PNodeID(m_nodeID); + message->setDstP2PNodeID(node); + asyncSendMessageByNodeID(node, message, CallbackFuncWithSession(), options); + } + } + catch (std::exception& e) + { + SERVICE_LOG(WARNING) << LOG_DESC("asyncBroadcastMessage") + << LOG_KV("what", boost::diagnostic_information(e)); + } +} + +// broadcast message without forward +void ServiceV2::asyncBroadcastMessageWithoutForward( + std::shared_ptr message, Options options) +{ + Service::asyncBroadcastMessage(message, options); +} + +bool ServiceV2::isReachable(P2pID const& _nodeID) const +{ + auto reachableNodes = m_routerTable->getAllReachableNode(); + return reachableNodes.count(_nodeID); +} + +void ServiceV2::sendRespMessageBySession( + bytesConstRef _payload, P2PMessage::Ptr _p2pMessage, P2PSession::Ptr _p2pSession) +{ + auto version = _p2pSession->protocolInfo()->version(); + if (version <= bcos::protocol::ProtocolVersion::V0) + { + Service::sendRespMessageBySession(_payload, _p2pMessage, _p2pSession); + return; + } + auto respMessage = std::dynamic_pointer_cast(messageFactory()->buildMessage()); + auto requestMsg = std::dynamic_pointer_cast(_p2pMessage); + respMessage->setDstP2PNodeID(requestMsg->srcP2PNodeID()); + // respMessage->setSrcP2PNodeID(requestMsg->dstP2PNodeID()); + respMessage->setSrcP2PNodeID(m_nodeID); + respMessage->setSeq(requestMsg->seq()); + respMessage->setRespPacket(); + respMessage->setPayload(std::make_shared(_payload.begin(), _payload.end())); + + // asyncSendMessageByNodeID(respMessage->dstP2PNodeID(), respMessage, nullptr); + + // Note: send response directly with the original session + sendMessageToSession(_p2pSession, respMessage); + + SERVICE_LOG(TRACE) << "ServiceV2::sendRespMessageBySession" << LOG_KV("seq", requestMsg->seq()) + << LOG_KV("from", respMessage->srcP2PNodeID()) + << LOG_KV("dst", respMessage->dstP2PNodeID()) + << LOG_KV("payload size", _payload.size()); +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/ServiceV2.h b/bcos-gateway/bcos-gateway/libp2p/ServiceV2.h new file mode 100644 index 0000000..6406275 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/ServiceV2.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ServiceV2.h + * @author: yujiechen + * @date 2022-5-24 + */ +#pragma once +#include "Service.h" +#include "router/RouterTableInterface.h" +namespace bcos +{ +namespace gateway +{ +class ServiceV2 : public Service +{ +public: + using Ptr = std::shared_ptr; + ServiceV2(std::string const& _nodeID, RouterTableFactory::Ptr _routerTableFactory); + ~ServiceV2() override {} + + void start() override; + void stop() override; + + void asyncSendMessageByNodeID(P2pID nodeID, std::shared_ptr message, + CallbackFuncWithSession callback, Options options = Options()) override; + + void onMessage(NetworkException e, SessionFace::Ptr session, Message::Ptr message, + std::weak_ptr p2pSessionWeakPtr) override; + void sendRespMessageBySession( + bytesConstRef _payload, P2PMessage::Ptr _p2pMessage, P2PSession::Ptr _p2pSession) override; + void asyncBroadcastMessage(std::shared_ptr message, Options options) override; + bool isReachable(P2pID const& _nodeID) const override; + + // handlers called when the node is unreachable + void registerUnreachableHandler(std::function _handler) + { + WriteGuard l(x_unreachableHandlers); + m_unreachableHandlers.emplace_back(_handler); + } + +protected: + // called when the nodes become unreachable + void onP2PNodesUnreachable(std::set const& _p2pNodeIDs) + { + std::vector> handlers; + { + ReadGuard l(x_unreachableHandlers); + handlers = m_unreachableHandlers; + } + // TODO: async here + for (auto const& node : _p2pNodeIDs) + { + for (auto const& it : m_unreachableHandlers) + { + it(node); + } + } + } + // router related + virtual void onReceivePeersRouterTable( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message); + virtual void joinRouterTable( + std::string const& _generatedFrom, RouterTableInterface::Ptr _routerTable); + virtual void onReceiveRouterTableRequest( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message); + virtual void broadcastRouterSeq(); + virtual void onReceiveRouterSeq( + NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _message); + + virtual void onNewSession(P2PSession::Ptr _session); + virtual void onEraseSession(P2PSession::Ptr _session); + bool tryToUpdateSeq(std::string const& _p2pNodeID, uint32_t _seq); + bool eraseSeq(std::string const& _p2pNodeID); + + virtual void asyncSendMessageByNodeIDWithMsgForward(std::shared_ptr _message, + CallbackFuncWithSession _callback, Options options = Options()); + + virtual void asyncBroadcastMessageWithoutForward( + std::shared_ptr message, Options options); + +protected: + // for message forward + std::shared_ptr m_routerTimer; + std::atomic m_statusSeq{1}; + + RouterTableFactory::Ptr m_routerTableFactory; + RouterTableInterface::Ptr m_routerTable; + + std::map m_node2Seq; + mutable SharedMutex x_node2Seq; + + const int c_unreachableDistance = 10; + + // called when the given node unreachable + std::vector> m_unreachableHandlers; + mutable SharedMutex x_unreachableHandlers; +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.cpp b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.cpp new file mode 100644 index 0000000..ce1873a --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RouterTableImpl.cpp + * @author: yujiechen + * @date 2022-5-24 + */ +#include "RouterTableImpl.h" +#include "../Common.h" +#include "bcos-tars-protocol/Common.h" + +using namespace bcos; +using namespace bcos::gateway; + +void RouterTable::encode(bcos::bytes& _encodedData) +{ + WriteGuard l(x_routerEntries); + m_inner()->routerEntries.clear(); + // encode m_routerEntries + for (auto const& it : m_routerEntries) + { + auto entry = std::dynamic_pointer_cast(it.second); + m_inner()->routerEntries.emplace_back(entry->inner()); + } + tars::TarsOutputStream output; + m_inner()->writeTo(output); + output.getByteBuffer().swap(_encodedData); +} + +void RouterTable::decode(bcos::bytesConstRef _decodedData) +{ + WriteGuard l(x_routerEntries); + tars::TarsInputStream input; + input.setBuffer((const char*)_decodedData.data(), _decodedData.size()); + m_inner()->readFrom(input); + // decode into m_routerEntries + m_routerEntries.clear(); + for (auto& it : m_inner()->routerEntries) + { + auto entry = + std::make_shared([m_entry = it]() mutable { return &m_entry; }); + m_routerEntries.insert(std::make_pair(entry->dstNode(), entry)); + } +} + +bool RouterTable::erase(std::set& _unreachableNodes, std::string const& _p2pNodeID) +{ + bool updated = false; + WriteGuard l(x_routerEntries); + // erase router-entry of the _p2pNodeID + if (m_routerEntries.count(_p2pNodeID)) + { + // Note: reset the distance to m_unreachableDistance, to notify that the _p2pNodeID is + // unreachable + auto entry = m_routerEntries.at(_p2pNodeID); + entry->setDistance(m_unreachableDistance); + entry->clearNextHop(); + _unreachableNodes.insert(entry->dstNode()); + + SERVICE_ROUTER_LOG(INFO) << LOG_DESC("erase: make the router unreachable") + << LOG_KV("dst", _p2pNodeID) + << LOG_KV("distance", entry->distance()) + << LOG_KV("size", m_routerEntries.size()); + updated = true; + } + // update the router-entry with nextHop equal to _p2pNodeID to be unreachable + updateDistanceForAllRouterEntries(_unreachableNodes, _p2pNodeID, m_unreachableDistance); + return updated; +} + +void RouterTable::updateDistanceForAllRouterEntries( + std::set& _unreachableNodes, std::string const& _nextHop, int32_t _newDistance) +{ + for (auto& it : m_routerEntries) + { + auto entry = it.second; + if (entry->nextHop() == _nextHop) + { + auto oldDistance = entry->distance(); + entry->setDistance(_newDistance + (oldDistance - 1)); + if (entry->distance() >= m_unreachableDistance) + { + entry->clearNextHop(); + _unreachableNodes.insert(entry->dstNode()); + } + SERVICE_ROUTER_LOG(INFO) + << LOG_DESC("update entry since the nextHop distance has been updated") + << LOG_KV("dst", entry->dstNode()) << LOG_KV("nextHop", _nextHop) + << LOG_KV("distance", entry->distance()) << LOG_KV("oldDistance", oldDistance) + << LOG_KV("size", m_routerEntries.size()); + } + } +} + +bool RouterTable::update(std::set& _unreachableNodes, + std::string const& _generatedFrom, RouterTableEntryInterface::Ptr _entry) +{ + SERVICE_ROUTER_LOG(TRACE) << LOG_DESC("RouterTable: receive entry") + << LOG_KV("dst", _entry->dstNode()) + << LOG_KV("distance", _entry->distance()) + << LOG_KV("from", _generatedFrom); + auto ret = updateDstNodeEntry(_generatedFrom, _entry); + // the dst entry has not been updated + if (ret == false) + { + return false; + } + UpgradableGuard l(x_routerEntries); + if (!m_routerEntries.count(_entry->dstNode())) + { + return false; + } + // get the latest distance + auto currentEntry = m_routerEntries.at(_entry->dstNode()); + auto _newDistance = currentEntry->distance(); + if (_newDistance >= m_unreachableDistance) + { + currentEntry->clearNextHop(); + _unreachableNodes.insert(_entry->dstNode()); + } + // the dst entry has updated, update the distance of the router-entries with nextHop equal to + // dstNode + UpgradeGuard ul(l); + if (_newDistance == 1) + { + currentEntry->clearNextHop(); + } + updateDistanceForAllRouterEntries(_unreachableNodes, _entry->dstNode(), _newDistance); + return true; +} + +bool RouterTable::updateDstNodeEntry( + std::string const& _generatedFrom, RouterTableEntryInterface::Ptr _entry) +{ + UpgradableGuard l(x_routerEntries); + // the node self + if (_entry->dstNode() == m_nodeID) + { + return false; + } + // insert new entry + if (!m_routerEntries.count(_entry->dstNode())) + { + UpgradeGuard ul(l); + _entry->incDistance(1); + if (_generatedFrom != m_nodeID) + { + _entry->setNextHop(_generatedFrom); + } + m_routerEntries.insert(std::make_pair(_entry->dstNode(), _entry)); + SERVICE_ROUTER_LOG(INFO) << LOG_DESC( + "updateDstNodeEntry: insert new entry into the routerTable") + << LOG_KV("distance", _entry->distance()) + << LOG_KV("dst", _entry->dstNode()) + << LOG_KV("nextHop", _entry->nextHop()) + << LOG_KV("size", m_routerEntries.size()); + return true; + } + // discover smaller distance + auto currentEntry = m_routerEntries.at(_entry->dstNode()); + auto currentDistance = currentEntry->distance(); + auto distance = _entry->distance() + 1; + if (currentDistance > distance) + { + UpgradeGuard ul(l); + if (_generatedFrom != m_nodeID) + { + currentEntry->setNextHop(_generatedFrom); + } + currentEntry->setDistance(distance); + SERVICE_ROUTER_LOG(INFO) + << LOG_DESC("updateDstNodeEntry: Discover smaller distance, update entry") + << LOG_KV("distance", currentEntry->distance()) + << LOG_KV("oldDistance", currentDistance) << LOG_KV("dst", _entry->dstNode()) + << LOG_KV("nextHop", _entry->nextHop()) << LOG_KV("size", m_routerEntries.size()); + return true; + } + // the distance information for the nextHop changed + if (currentEntry->nextHop() == _generatedFrom) + { + // distance not updated + if (currentEntry->distance() == distance) + { + return false; + } + // unreachable condition + if (currentEntry->distance() >= m_unreachableDistance && distance >= m_unreachableDistance) + { + return false; + } + currentEntry->setDistance(distance); + if (currentEntry->distance() >= m_unreachableDistance) + { + currentEntry->clearNextHop(); + } + SERVICE_ROUTER_LOG(INFO) << LOG_DESC( + "updateDstNodeEntry: distance of the nextHop Entry " + "updated, update the current entry") + << LOG_KV("dst", currentEntry->dstNode()) + << LOG_KV("nextHop", currentEntry->nextHop()) + << LOG_KV("distance", currentEntry->distance()) + << LOG_KV("size", m_routerEntries.size()); + return true; + } + return false; +} + +std::string RouterTable::getNextHop(std::string const& _nodeID) +{ + std::string emptyNextHop; + ReadGuard l(x_routerEntries); + if (!m_routerEntries.count(_nodeID)) + { + return emptyNextHop; + } + auto entry = m_routerEntries.at(_nodeID); + if (entry->distance() >= m_unreachableDistance) + { + return emptyNextHop; + } + return entry->nextHop(); +} + +std::set RouterTable::getAllReachableNode() +{ + std::set reachableNodes; + ReadGuard l(x_routerEntries); + for (auto const& it : m_routerEntries) + { + auto entry = it.second; + if (entry->distance() < m_unreachableDistance) + { + reachableNodes.insert(entry->dstNode()); + } + } + return reachableNodes; +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.h b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.h new file mode 100644 index 0000000..721fefa --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableImpl.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RouterTableImpl.h + * @author: yujiechen + * @date 2022-5-24 + */ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "RouterTableInterface.h" +#include +#include + +namespace bcos +{ +namespace gateway +{ +class RouterTableEntry : public RouterTableEntryInterface +{ +public: + using Ptr = std::shared_ptr; + RouterTableEntry() + : m_inner([m_entry = bcostars::RouterTableEntry()]() mutable { return &m_entry; }) + {} + RouterTableEntry(std::function _inner) : m_inner(_inner) {} + ~RouterTableEntry() override {} + + void setDstNode(std::string const& _dstNode) override { m_inner()->dstNode = _dstNode; } + void setNextHop(std::string const& _nextHop) override { m_inner()->nextHop = _nextHop; } + void clearNextHop() override { m_inner()->nextHop = std::string(); } + void setDistance(int32_t _distance) override { m_inner()->distance = _distance; } + void incDistance(int32_t _deltaDistance) override { m_inner()->distance += _deltaDistance; } + + std::string const& dstNode() const override { return m_inner()->dstNode; } + std::string const& nextHop() const override { return m_inner()->nextHop; } + int32_t distance() const override { return m_inner()->distance; } + + bcostars::RouterTableEntry const& inner() const { return *(m_inner()); } + +private: + std::function m_inner; +}; + +class RouterTable : public RouterTableInterface +{ +public: + using Ptr = std::shared_ptr; + RouterTable() : m_inner([m_table = bcostars::RouterTable()]() mutable { return &m_table; }) {} + RouterTable(bytesConstRef _decodedData) : RouterTable() { decode(_decodedData); } + virtual ~RouterTable() {} + + void encode(bcos::bytes& _encodedData) override; + void decode(bcos::bytesConstRef _decodedData) override; + + std::map const& routerEntries() override + { + return m_routerEntries; + } + // append the unreachableNodes into param _unreachableNodes + bool update(std::set& _unreachableNodes, std::string const& _generatedFrom, + RouterTableEntryInterface::Ptr _entry) override; + // append the unreachableNodes into param _unreachableNodes + bool erase(std::set& _unreachableNodes, std::string const& _p2pNodeID) override; + + void setNodeID(std::string const& _nodeID) override { m_nodeID = _nodeID; } + std::string const& nodeID() const override { return m_nodeID; } + + void setUnreachableDistance(int _unreachableDistance) override + { + m_unreachableDistance = _unreachableDistance; + } + + std::string getNextHop(std::string const& _nodeID) override; + std::set getAllReachableNode() override; + +private: + bool updateDstNodeEntry( + std::string const& _generatedFrom, RouterTableEntryInterface::Ptr _entry); + void updateDistanceForAllRouterEntries(std::set& _unreachableNodes, + std::string const& _nextHop, int32_t _newDistance); + +private: + std::string m_nodeID; + std::function m_inner; + std::map m_routerEntries; + mutable SharedMutex x_routerEntries; + + int m_unreachableDistance = 10; +}; + +class RouterTableFactoryImpl : public RouterTableFactory +{ +public: + using Ptr = std::shared_ptr; + RouterTableFactoryImpl() = default; + ~RouterTableFactoryImpl() override {} + + RouterTableInterface::Ptr createRouterTable() override + { + return std::make_shared(); + } + RouterTableInterface::Ptr createRouterTable(bcos::bytesConstRef _decodedData) override + { + return std::make_shared(_decodedData); + } + + RouterTableEntryInterface::Ptr createRouterEntry() override + { + return std::make_shared(); + } +}; + +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libp2p/router/RouterTableInterface.h b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableInterface.h new file mode 100644 index 0000000..feedf62 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libp2p/router/RouterTableInterface.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RouterTableInterface.h + * @author: yujiechen + * @date 2022-5-24 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace gateway +{ +class RouterTableEntryInterface +{ +public: + using Ptr = std::shared_ptr; + RouterTableEntryInterface() = default; + virtual ~RouterTableEntryInterface() {} + + virtual void setDstNode(std::string const& _dstNode) = 0; + virtual void setNextHop(std::string const& _nextHop) = 0; + virtual void clearNextHop() = 0; + virtual void setDistance(int32_t _distance) = 0; + virtual void incDistance(int32_t _deltaDistance) = 0; + + virtual std::string const& dstNode() const = 0; + virtual std::string const& nextHop() const = 0; + virtual int32_t distance() const = 0; +}; + +class RouterTableInterface +{ +public: + using Ptr = std::shared_ptr; + RouterTableInterface() = default; + virtual ~RouterTableInterface() {} + + virtual bool update(std::set& _unreachableNodes, std::string const& _generatedFrom, + RouterTableEntryInterface::Ptr _entry) = 0; + virtual bool erase(std::set& _unreachableNodes, std::string const& _p2pNodeID) = 0; + + virtual std::map const& routerEntries() = 0; + + virtual void setNodeID(std::string const& _nodeID) = 0; + virtual std::string const& nodeID() const = 0; + virtual void setUnreachableDistance(int _unreachableDistance) = 0; + virtual std::string getNextHop(std::string const& _nodeID) = 0; + virtual std::set getAllReachableNode() = 0; + + virtual void encode(bcos::bytes& _encodedData) = 0; + virtual void decode(bcos::bytesConstRef _decodedData) = 0; +}; + +class RouterTableFactory +{ +public: + using Ptr = std::shared_ptr; + RouterTableFactory() = default; + virtual ~RouterTableFactory() {} + + virtual RouterTableInterface::Ptr createRouterTable() = 0; + virtual RouterTableInterface::Ptr createRouterTable(bcos::bytesConstRef _decodedData) = 0; + virtual RouterTableEntryInterface::Ptr createRouterEntry() = 0; +}; + +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.cpp b/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.cpp new file mode 100644 index 0000000..1e9eb55 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.cpp @@ -0,0 +1,263 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DistributedRateLimiter.cpp + * @author: octopus + * @date 2022-06-30 + */ + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +// lua script for redis distributed rate limit +const std::string DistributedRateLimiter::LUA_SCRIPT = R"( + -- 限流key + local key = KEYS[1] + -- 限流大小, 初始token数目 + local initialToken = tonumber(ARGV[1]) + -- 申请token数目 + local requestToken = tonumber(ARGV[2]) + -- 限流间隔,单位秒 + local interval = tonumber(ARGV[3]) + + -- key不存在, 未初始化或过期, 初始化 + local r = redis.call('get', key) + if not r then + -- 设置限流值 + redis.call('set', key, ARGV[1]) + -- 设置过期时间 + redis.call("EXPIRE", key, ARGV[3]) + end + + -- 剩余token + local curentToken = tonumber(redis.call('get', key) or '0') + + -- 是否超出限流 + if curentToken < requestToken then + -- 返回(拒绝) + return -1 + else + -- 更新 curentToken + redis.call("DECRBY", key, requestToken) + -- 返回(放行) + return requestToken + end + )"; + +/** + * @brief acquire permits + * + * @param _requiredPermits + * @return void + */ +void DistributedRateLimiter::acquire(int64_t _requiredPermits) +{ + // Note: This operation is not supported + std::ignore = _requiredPermits; +} + +/** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ +bool DistributedRateLimiter::tryAcquire(int64_t _requiredPermits) +{ + // try local cache acquire first + if (m_enableLocalCache && tryAcquireLocalCache(_requiredPermits, true)) + { + return true; + } + + if (!m_enableLocalCache) + { + // local cache not enable, request redis directly + return requestRedis(_requiredPermits) >= 0; + } + + std::lock_guard lock(x_localCache); + // another thread update local cache again + if (tryAcquireLocalCache(_requiredPermits, false)) + { + return true; + } + + // the request acquire bigger than _requiredPermits has been failed + if (m_lastFailedPermit > 0 && _requiredPermits >= m_lastFailedPermit) + { + return false; + } + + // request redis to update local cache + int64_t permits = m_maxPermits / 100 * m_localCachePermits; + if (requestRedis(permits > _requiredPermits ? permits : _requiredPermits) >= 0) + { + // update local cache + m_localCachePermits += (permits - _requiredPermits); + return true; + } + + // update failed info + m_lastFailedPermit = permits; + if (permits == _requiredPermits) + { + return false; + } + + auto result = requestRedis(_requiredPermits); + if (result < 0) + { + m_lastFailedPermit = _requiredPermits; + } + + return result >= 0; +} + +/** + * @brief + * + * @return + */ +void DistributedRateLimiter::rollback(int64_t _requiredPermits) +{ + // Note: This operation is not supported + std::ignore = _requiredPermits; +} + +/** + * @brief + * + * @param _requiredPermits + * @param _withLock + * @return true + * @return false + */ +bool DistributedRateLimiter::tryAcquireLocalCache(int64_t _requiredPermits, bool _withLock) +{ + // enable local cache and local cache is not enough + if (m_localCachePermits < _requiredPermits) + { + return false; + } + + bool result = false; + if (_withLock) + { + x_localCache.lock(); + } + + if (m_localCachePermits >= _requiredPermits) + { + m_localCachePermits -= _requiredPermits; + result = true; + } + + if (_withLock) + { + x_localCache.unlock(); + } + + return result; +} + +/** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ +int64_t DistributedRateLimiter::requestRedis(int64_t _requiredPermits) +{ + try + { + auto start = utcTimeUs(); + + auto keys = {m_rateLimiterKey}; + std::vector args = {std::to_string(m_maxPermits), + std::to_string(_requiredPermits), std::to_string(m_interval)}; + + auto result = m_redis->eval( + LUA_SCRIPT, keys.begin(), keys.end(), args.begin(), args.end()); + + auto end = utcTimeUs(); + + // update stat + result >= 0 ? m_stat.updateOk() : m_stat.updateFailed(); + + if ((end - start) > 1000) + { + m_stat.updateMore1MS(); + } + + m_stat.lastRequestTotalCostMS += (end - start); + + return result; + } + catch (const std::exception& e) + { + m_stat.updateExp(); + // TODO: statistics failure information + GATEWAY_LOG(DEBUG) << LOG_BADGE("DistributedRateLimiter") << LOG_DESC("requestRedis") + << LOG_KV("rateLimitKey", m_rateLimiterKey) + << LOG_KV("enableLocalCache", m_enableLocalCache) + << LOG_KV("error", e.what()); + + // exception throw, allow this acquire + return _requiredPermits; + } +} + +/** + * @brief + * + */ +void DistributedRateLimiter::stat() +{ + GATEWAY_LOG(DEBUG) << LOG_BADGE("DistributedRateLimiter") << LOG_BADGE("stat") + << LOG_BADGE(m_rateLimiterKey) << LOG_KV("totalC", m_stat.totalRequestRedis) + << LOG_KV("totalExpC", m_stat.totalRequestRedisExp) + << LOG_KV("totalFailedC", m_stat.totalRequestRedisFailed) + << LOG_KV("totalMore1MSC", m_stat.totalRequestRedisMore1MS) + << LOG_KV("lastC", m_stat.lastRequestRedis) + << LOG_KV("lastExpC", m_stat.lastRequestRedisExp) + << LOG_KV("lastFailedC", m_stat.lastRequestRedisFailed) + << LOG_KV("lastMore1MSC", m_stat.lastRequestRedisMore1MS) + << LOG_KV("lastTotalCostMS", m_stat.lastRequestTotalCostMS); + + m_stat.resetLast(); + m_statTimer->restart(); +} + +void DistributedRateLimiter::refreshLocalCache() +{ + { + std::lock_guard lock(x_localCache); + m_localCachePermits = 0; + m_localCachePercent = 0; + m_lastFailedPermit = 0; + } + + m_clearCacheTimer->restart(); +} diff --git a/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.h b/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.h new file mode 100644 index 0000000..4cc0263 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/DistributedRateLimiter.h @@ -0,0 +1,246 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DistributedRateLimiter.h + * @author: octopus + * @date 2022-06-30 + */ + +#pragma once + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Timer.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class DistributedRateLimiter : public RateLimiterInterface, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + const static std::string LUA_SCRIPT; + const static int32_t DEFAULT_LOCAL_CACHE_PERCENT = 15; + +public: + DistributedRateLimiter(std::shared_ptr _redis, + const std::string& _rateLimiterKey, int64_t _maxPermits, int32_t _interval = 1, + bool _enableLocalCache = true, int32_t _localCachePercent = DEFAULT_LOCAL_CACHE_PERCENT) + : m_redis(_redis), + m_rateLimiterKey(_rateLimiterKey), + m_maxPermits(_maxPermits), + m_interval(_interval), + m_enableLocalCache(_enableLocalCache), + m_localCachePercent(_localCachePercent) + + { + GATEWAY_LOG(INFO) << LOG_BADGE("DistributedRateLimiter::NEWOBJ") + << LOG_DESC("construct distributed rate limiter") + << LOG_KV("rateLimiterKey", _rateLimiterKey) + << LOG_KV("interval", _interval) << LOG_KV("maxPermits", _maxPermits) + << LOG_KV("enableLocalCache", _enableLocalCache) + << LOG_KV("localCachePercent", _localCachePercent); + + if (m_enableLocalCache) + { + m_clearCacheTimer = std::make_shared(_interval * 1000); + m_clearCacheTimer->registerTimeoutHandler([this]() { refreshLocalCache(); }); + m_clearCacheTimer->start(); + } + + m_statTimer = std::make_shared(60000); + m_statTimer->registerTimeoutHandler([this]() { stat(); }); + m_statTimer->start(); + } + + DistributedRateLimiter(DistributedRateLimiter&&) = delete; + DistributedRateLimiter(const DistributedRateLimiter&) = delete; + DistributedRateLimiter& operator=(const DistributedRateLimiter&) = delete; + DistributedRateLimiter& operator=(DistributedRateLimiter&&) = delete; + + ~DistributedRateLimiter() override + { + if (m_clearCacheTimer) + { + m_clearCacheTimer->stop(); + } + + if (m_statTimer) + { + m_statTimer->stop(); + } + } + +public: + struct Stat + { + std::atomic totalRequestRedis = 0; + std::atomic lastRequestRedis = 0; + + std::atomic totalRequestRedisFailed = 0; + std::atomic lastRequestRedisFailed = 0; + + std::atomic totalRequestRedisExp = 0; + std::atomic lastRequestRedisExp = 0; + + std::atomic totalRequestRedisMore1MS = 0; + std::atomic lastRequestRedisMore1MS = 0; + + std::atomic lastRequestTotalCostMS = 0; + + void resetLast() + { + lastRequestRedis = 0; + lastRequestRedisFailed = 0; + lastRequestRedisExp = 0; + lastRequestRedisMore1MS = 0; + lastRequestTotalCostMS = 0; + } + + void updateOk() + { + totalRequestRedis++; + lastRequestRedis++; + } + + void updateFailed() + { + totalRequestRedisFailed++; + lastRequestRedisFailed++; + } + + void updateExp() + { + totalRequestRedisExp++; + lastRequestRedisExp++; + } + + void updateMore1MS() + { + totalRequestRedisMore1MS++; + lastRequestRedisMore1MS++; + } + }; + +public: + /** + * @brief acquire permits + * + * @param _requiredPermits + * @return void + */ + void acquire(int64_t _requiredPermits) override; + + /** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ + bool tryAcquire(int64_t _requiredPermits) override; + + + /** + * @brief + * + * @return + */ + void rollback(int64_t _requiredPermits) override; + + /** + * @brief + * + * @param _requiredPermits + * @param _withLock + * @return true + * @return false + */ + bool tryAcquireLocalCache(int64_t _requiredPermits, bool _withLock = true); + + /** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ + int64_t requestRedis(int64_t _requiredPermits); + + /** + * @brief + * + */ + void refreshLocalCache(); + + /** + * @brief + * + */ + void stat(); + +public: + int64_t maxPermits() const { return m_maxPermits; } + int64_t interval() const { return m_interval; } + bool enableLocalCache() const { return m_enableLocalCache; } + int32_t localCachePercent() const { return m_localCachePercent; } + std::string rateLimitKey() const { return m_rateLimiterKey; } + std::shared_ptr redis() const { return m_redis; } + +private: + // stat statistics + Stat m_stat; + + // redis + std::shared_ptr m_redis; + // key for distributed rate limit + std::string m_rateLimiterKey; + // max token acquire in m_interval time + int64_t m_maxPermits; + // + int32_t m_interval = 1; + + // enable local cache for improve perf and reduce latency + bool m_enableLocalCache = false; + // lock for m_localCachePermits + std::mutex x_localCache; + // local cache percent of m_maxPermits + int32_t m_localCachePercent = DEFAULT_LOCAL_CACHE_PERCENT; + // local cache value + int64_t m_localCachePermits = 0; + // + int64_t m_lastFailedPermit = 0; + // clear local cache info periodically + std::shared_ptr m_clearCacheTimer = nullptr; + // stat info periodically + std::shared_ptr m_statTimer = nullptr; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.cpp b/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.cpp new file mode 100644 index 0000000..5c3bde7 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.cpp @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayRateLimiter.cpp + * @author: octopus + * @date 2022-09-30 + */ + +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +std::pair GatewayRateLimiter::checkOutGoing(const std::string& _endpoint, + const std::string& _groupID, uint16_t _moduleID, uint64_t _msgLength) +{ + // endpoint of the p2p connection + const std::string& endpoint = _endpoint; + // group of the message, empty string means the message is p2p's own message + const std::string& groupID = _groupID; + // moduleID of the message, zero means the message is p2p's own message + uint16_t moduleID = _moduleID; + // the length of the message + uint64_t msgLength = _msgLength; + + std::string errorMsg; + do + { + // total outgoing bandwidth + ratelimiter::RateLimiterInterface::Ptr totalOutGoingBWLimit = + m_rateLimiterManager->getRateLimiter( + ratelimiter::RateLimiterManager::TOTAL_OUTGOING_KEY); + + // connection outgoing bandwidth + ratelimiter::RateLimiterInterface::Ptr connOutGoingBWLimit = + m_rateLimiterManager->getConnRateLimiter(endpoint); + + // group outgoing bandwidth + ratelimiter::RateLimiterInterface::Ptr groupOutGoingBWLimit = nullptr; + if (!groupID.empty()) + { + groupOutGoingBWLimit = m_rateLimiterManager->getGroupRateLimiter(groupID); + } + + auto modulesWithoutLimit = m_rateLimiterManager->modulesWithoutLimit(); + + // if moduleID is zero, the P2P network itself's message, the ratelimiter does not limit + // P2P own's messages + if (moduleID == 0) + { + if (totalOutGoingBWLimit) + { + totalOutGoingBWLimit->tryAcquire(msgLength); + } + + if (connOutGoingBWLimit) + { + connOutGoingBWLimit->tryAcquire(msgLength); + } + } + // if moduleID is not zero, the message comes from the front + // There are two scenarios: + // 1. ulimit module message rate or + // 2. limit module message rate + else if (modulesWithoutLimit.contains(moduleID)) + { // case 1: ulimit module message rate or, just for statistic + + if (totalOutGoingBWLimit) + { + totalOutGoingBWLimit->tryAcquire(msgLength); + } + + if (connOutGoingBWLimit) + { + connOutGoingBWLimit->tryAcquire(msgLength); + } + + if (groupOutGoingBWLimit) + { + groupOutGoingBWLimit->tryAcquire(msgLength); + } + } + else + { // case 2: limit module message rate + + if (totalOutGoingBWLimit && !totalOutGoingBWLimit->tryAcquire(msgLength)) + { + // total outgoing bandwidth overflow + errorMsg = "the network total outgoing bandwidth overflow"; + break; + } + + if (connOutGoingBWLimit && !connOutGoingBWLimit->tryAcquire(msgLength)) + { + // connection outgoing bandwidth overflow + errorMsg = + "the network connection outgoing bandwidth overflow, endpoint: " + endpoint; + if (totalOutGoingBWLimit) + { + totalOutGoingBWLimit->rollback(msgLength); + } + + break; + } + + if (groupOutGoingBWLimit && !groupOutGoingBWLimit->tryAcquire(msgLength)) + { + // group outgoing bandwidth overflow + errorMsg = "the group outgoing bandwidth overflow, groupID: " + groupID; + if (totalOutGoingBWLimit) + { + totalOutGoingBWLimit->rollback(msgLength); + } + + if (connOutGoingBWLimit) + { + connOutGoingBWLimit->rollback(msgLength); + } + + break; + } + } + + m_rateLimiterStat->updateOutGoing(endpoint, msgLength, true); + m_rateLimiterStat->updateOutGoing(groupID, moduleID, msgLength, true); + + return {true, ""}; + } while (false); + + m_rateLimiterStat->updateOutGoing(endpoint, msgLength, false); + m_rateLimiterStat->updateOutGoing(groupID, moduleID, msgLength, false); + + return {false, errorMsg}; +} + +std::pair GatewayRateLimiter::checkInComing( + const std::string& _endpoint, uint64_t _msgLength) +{ + m_rateLimiterStat->updateInComing(_endpoint, _msgLength); + return {true, ""}; +} + +std::pair GatewayRateLimiter::checkInComing( + const std::string& _groupID, uint16_t _moduleID, uint64_t _msgLength) +{ + m_rateLimiterStat->updateInComing(_groupID, _moduleID, _msgLength); + return {true, ""}; +} diff --git a/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.h b/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.h new file mode 100644 index 0000000..bb4cb89 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/GatewayRateLimiter.h @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayRateLimiter.h + * @author: octopus + * @date 2022-09-30 + */ + +#pragma once + +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Timer.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class GatewayRateLimiter +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + GatewayRateLimiter(ratelimiter::RateLimiterManager::Ptr& _rateLimiterManager, + ratelimiter::RateLimiterStat::Ptr& _rateLimiterStat) + : m_rateLimiterManager(_rateLimiterManager), m_rateLimiterStat(_rateLimiterStat) + {} + + GatewayRateLimiter(GatewayRateLimiter&&) = delete; + GatewayRateLimiter(const GatewayRateLimiter&) = delete; + GatewayRateLimiter& operator=(const GatewayRateLimiter&) = delete; + GatewayRateLimiter& operator=(GatewayRateLimiter&&) = delete; + + ~GatewayRateLimiter() { stop(); } + +public: + void start() + { + if (m_running) + { + RATELIMIT_LOG(INFO) << LOG_BADGE("GatewayRateLimiter") + << LOG_DESC("gateway ratelimiter is running"); + return; + } + m_running = true; + if (m_rateLimiterManager->rateLimiterConfig().enableRateLimit() && + m_rateLimiterStat) + { + m_rateLimiterStat->start(); + } + + RATELIMIT_LOG(INFO) << LOG_BADGE("GatewayRateLimiter") + << LOG_DESC("gateway ratelimiter start ok"); + } + + void stop() + { + if (!m_running) + { + RATELIMIT_LOG(INFO) << LOG_BADGE("GatewayRateLimiter") + << LOG_DESC("gateway ratelimiter has been stopped"); + return; + } + + m_running = false; + if (m_rateLimiterStat) + { + m_rateLimiterStat->stop(); + } + + RATELIMIT_LOG(INFO) << LOG_BADGE("GatewayRateLimiter") + << LOG_DESC("gateway ratelimiter stop end"); + } + +public: + std::pair checkOutGoing(const std::string& _endpoint, + const std::string& _groupID, uint16_t _moduleID, uint64_t _msgLength); + + + std::pair checkInComing(const std::string& _endpoint, uint64_t _msgLength); + std::pair checkInComing( + const std::string& _groupID, uint16_t _moduleID, uint64_t _msgLength); + +private: + bool m_running = false; + + ratelimiter::RateLimiterManager::Ptr m_rateLimiterManager; + ratelimiter::RateLimiterStat::Ptr m_rateLimiterStat; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/ModuleWhiteList.h b/bcos-gateway/bcos-gateway/libratelimit/ModuleWhiteList.h new file mode 100644 index 0000000..06a608f --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/ModuleWhiteList.h @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ModuleWhiteList.h + * @author: octopus + * @date 2022-06-30 + */ + +#pragma once + +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +/** + * This module is used to record modules that do not limit bandwidth + */ + +/* +enum ModuleID +{ + PBFT = 1000, + Raft = 1001, + BlockSync = 2000, + TxsSync = 2001, + ConsTxsSync = 2002, + AMOP = 3000, + + LIGHTNODE_GETBLOCK = 4000, + LIGHTNODE_GETTRANSACTIONS, + LIGHTNODE_GETRECEIPTS, + LIGHTNODE_GETSTATUS, + LIGHTNODE_SENDTRANSACTION, + LIGHTNODE_CALL, + LIGHTNODE_END = 4999 +}; +*/ + +#define BIT_NUMBER_PER_UINT32 (32) + +class ModuleWhiteList +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + bool isModuleExist(uint16_t _moduleID) + { + unsigned int index = _moduleID / BIT_NUMBER_PER_UINT32; + unsigned temp = _moduleID % BIT_NUMBER_PER_UINT32; + + return (m_moduleIDsBitMap.at(index) & (1 << temp)) != 0U; + } + + bool addModuleID(uint16_t _moduleID) + { + unsigned index = _moduleID / BIT_NUMBER_PER_UINT32; + unsigned temp = _moduleID % BIT_NUMBER_PER_UINT32; + + if ((m_moduleIDsBitMap.at(index) & (1 << temp)) != 0U) + { // already exist + return false; + } + + m_moduleIDsBitMap.at(index) |= (1 << temp); + return true; + } + + + bool removeModuleID(uint16_t _moduleID) + { + unsigned index = _moduleID / BIT_NUMBER_PER_UINT32; + unsigned temp = _moduleID % BIT_NUMBER_PER_UINT32; + + if ((m_moduleIDsBitMap.at(index) & (1 << temp)) != 0U) + { + m_moduleIDsBitMap.at(index) &= ~(1 << temp); + return true; + } + + // not exist + return false; + } + +private: + std::array m_moduleIDsBitMap = {0}; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterFactory.h b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterFactory.h new file mode 100644 index 0000000..d45949a --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterFactory.h @@ -0,0 +1,79 @@ + + +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterFactory.h + * @author: octopus + * @date 2022-09-30 + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class RateLimiterFactory +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + RateLimiterFactory() = default; + RateLimiterFactory(std::shared_ptr _redis) : m_redis(_redis) {} + +public: + std::shared_ptr redis() const { return m_redis; } + +public: + static std::string toTokenKey(const std::string& _baseKey) + { + return "FISCO-BCOS 3.0 Gateway RateLimiter: " + _baseKey; + } + +public: + RateLimiterInterface::Ptr buildTokenBucketRateLimiter(int64_t _maxPermits) + { + auto rateLimiter = std::make_shared(_maxPermits); + return rateLimiter; + } + + RateLimiterInterface::Ptr buildRedisDistributedRateLimiter(const std::string& _key, + int64_t _maxPermits, int32_t _interval, bool _enableCache, int32_t _cachePercent) + { + auto rateLimiter = std::make_shared( + m_redis, _key, _maxPermits, _interval, _enableCache, _cachePercent); + return rateLimiter; + } + +private: + std::shared_ptr m_redis = nullptr; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterInterface.h b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterInterface.h new file mode 100644 index 0000000..10d1ba0 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterInterface.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterInterface.h + * @author: octopus + * @date 2022-06-30 + */ + +#pragma once + +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class RateLimiterInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + RateLimiterInterface() = default; + RateLimiterInterface(RateLimiterInterface&&) = default; + RateLimiterInterface(const RateLimiterInterface&) = default; + RateLimiterInterface& operator=(const RateLimiterInterface&) = default; + RateLimiterInterface& operator=(RateLimiterInterface&&) = default; + + virtual ~RateLimiterInterface() = default; + +public: + /** + * @brief acquire permits + * + * @param _requiredPermits + * @return void + */ + virtual void acquire(int64_t _requiredPermits) = 0; + + /** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ + virtual bool tryAcquire(int64_t _requiredPermits) = 0; + + /** + * @brief + * + * @return + */ + virtual void rollback(int64_t _requiredPermits) = 0; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.cpp b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.cpp new file mode 100644 index 0000000..45866a2 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterManager.cpp + * @author: octopus + * @date 2022-06-30 + */ + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/BoostLog.h" +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +const std::string RateLimiterManager::TOTAL_OUTGOING_KEY = "total-outgoing-key"; + +RateLimiterInterface::Ptr RateLimiterManager::getRateLimiter(const std::string& _rateLimiterKey) +{ + std::shared_lock lock(x_rateLimiters); + auto it = m_rateLimiters.find(_rateLimiterKey); + if (it != m_rateLimiters.end()) + { + return it->second; + } + + return nullptr; +} + +bool RateLimiterManager::registerRateLimiter( + const std::string& _rateLimiterKey, RateLimiterInterface::Ptr _rateLimiter) +{ + std::unique_lock lock(x_rateLimiters); + auto result = m_rateLimiters.try_emplace(_rateLimiterKey, _rateLimiter); + + RATELIMIT_MGR_LOG(INFO) << LOG_BADGE("registerRateLimiter") + << LOG_KV("rateLimiterKey", _rateLimiterKey) + << LOG_KV("result", result.second); + return result.second; +} + +bool RateLimiterManager::removeRateLimiter(const std::string& _rateLimiterKey) +{ + RATELIMIT_MGR_LOG(INFO) << LOG_BADGE("removeRateLimiter") + << LOG_KV("rateLimiterKey", _rateLimiterKey); + + std::unique_lock lock(x_rateLimiters); + return m_rateLimiters.erase(_rateLimiterKey) > 0; +} + +RateLimiterInterface::Ptr RateLimiterManager::getGroupRateLimiter(const std::string& _group) +{ + if (!m_rateLimiterConfig.enableGroupRateLimit) + { + return nullptr; + } + + const std::string& rateLimiterKey = _group; + + auto rateLimiter = getRateLimiter(rateLimiterKey); + if (rateLimiter != nullptr) + { + return rateLimiter; + } + + // rete limiter not exist, create it + int64_t groupOutgoingBwLimit = -1; + + auto it = m_rateLimiterConfig.group2BwLimit.find(_group); + if (it != m_rateLimiterConfig.group2BwLimit.end()) + { + groupOutgoingBwLimit = it->second; + } + else if (m_rateLimiterConfig.groupOutgoingBwLimit > 0) + { + groupOutgoingBwLimit = m_rateLimiterConfig.groupOutgoingBwLimit; + } + + if (groupOutgoingBwLimit > 0) + { + RATELIMIT_MGR_LOG(INFO) << LOG_BADGE("getGroupRateLimiter") + << LOG_DESC("group rate limiter not exist") + << LOG_KV("rateLimiterKey", rateLimiterKey) + << LOG_KV("groupOutgoingBwLimit", groupOutgoingBwLimit) + << LOG_KV("enableDistributedRatelimit", + m_rateLimiterConfig.enableDistributedRatelimit); + + if (m_rateLimiterConfig.enableDistributedRatelimit) + { + // create ratelimiter + rateLimiter = m_rateLimiterFactory->buildRedisDistributedRateLimiter( + m_rateLimiterFactory->toTokenKey(_group), groupOutgoingBwLimit, 1, + m_rateLimiterConfig.enableDistributedRateLimitCache, + m_rateLimiterConfig.distributedRateLimitCachePercent); + } + else + { + // create ratelimiter + rateLimiter = m_rateLimiterFactory->buildTokenBucketRateLimiter(groupOutgoingBwLimit); + } + + registerRateLimiter(_group, rateLimiter); + } + + return rateLimiter; +} + +RateLimiterInterface::Ptr RateLimiterManager::getConnRateLimiter(const std::string& _connIP) +{ + if (!m_rateLimiterConfig.enableConRateLimit) + { + return nullptr; + } + + const std::string& rateLimiterKey = _connIP; + + auto rateLimiter = getRateLimiter(rateLimiterKey); + if (rateLimiter != nullptr) + { + return rateLimiter; + } + + int64_t connOutgoingBwLimit = -1; + + auto it = m_rateLimiterConfig.ip2BwLimit.find(_connIP); + if (it != m_rateLimiterConfig.ip2BwLimit.end()) + { + connOutgoingBwLimit = it->second; + } + else if (m_rateLimiterConfig.connOutgoingBwLimit > 0) + { + connOutgoingBwLimit = m_rateLimiterConfig.connOutgoingBwLimit; + } + + if (connOutgoingBwLimit > 0) + { + RATELIMIT_MGR_LOG(INFO) << LOG_BADGE("getConnRateLimiter") + << LOG_DESC("conn rate limiter not exist") + << LOG_KV("rateLimiterKey", rateLimiterKey) + << LOG_KV("connOutgoingBwLimit", connOutgoingBwLimit); + + // create ratelimiter + rateLimiter = m_rateLimiterFactory->buildTokenBucketRateLimiter(connOutgoingBwLimit); + + registerRateLimiter(rateLimiterKey, rateLimiter); + } + + return rateLimiter; +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.h b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.h new file mode 100644 index 0000000..3caeece --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterManager.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterManager.h + * @author: octopus + * @date 2022-06-30 + */ + +#pragma once + +#include "bcos-gateway/libratelimit/ModuleWhiteList.h" +#include "bcos-gateway/libratelimit/RateLimiterFactory.h" +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class RateLimiterManager +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + const static std::string TOTAL_OUTGOING_KEY; + +public: + RateLimiterManager(const GatewayConfig::RateLimiterConfig& _rateLimiterConfig) + : m_rateLimiterConfig(_rateLimiterConfig) + {} + +public: + RateLimiterInterface::Ptr getRateLimiter(const std::string& _rateLimiterKey); + + bool registerRateLimiter( + const std::string& _rateLimiterKey, RateLimiterInterface::Ptr _rateLimiter); + bool removeRateLimiter(const std::string& _rateLimiterKey); + + RateLimiterInterface::Ptr getGroupRateLimiter(const std::string& _group); + RateLimiterInterface::Ptr getConnRateLimiter(const std::string& _connIP); + +public: + ratelimiter::RateLimiterFactory::Ptr rateLimiterFactory() const { return m_rateLimiterFactory; } + void setRateLimiterFactory(ratelimiter::RateLimiterFactory::Ptr& _rateLimiterFactory) + { + m_rateLimiterFactory = _rateLimiterFactory; + } + + const std::set& modulesWithoutLimit() const { return m_modulesWithoutLimit; } + void setModulesWithoutLimit(std::set _modulesWithoutLimit) + { + m_modulesWithoutLimit = std::move(_modulesWithoutLimit); + } + + void setRateLimiterConfig(const GatewayConfig::RateLimiterConfig& _rateLimiterConfig) + { + m_rateLimiterConfig = _rateLimiterConfig; + } + const GatewayConfig::RateLimiterConfig& rateLimiterConfig() const + { + return m_rateLimiterConfig; + } + +private: + // factory for RateLimiterInterface + ratelimiter::RateLimiterFactory::Ptr m_rateLimiterFactory; + + // lock for m_group2RateLimiter + mutable std::shared_mutex x_rateLimiters; + // group/ip => ratelimiter + std::unordered_map m_rateLimiters; + + // the message of modules that do not limit bandwidth + std::set m_modulesWithoutLimit; + + GatewayConfig::RateLimiterConfig m_rateLimiterConfig; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.cpp b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.cpp new file mode 100644 index 0000000..17b9c22 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.cpp @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterStat.cpp + * @author: octopus + * @date 2022-06-30 + */ + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +const std::string RateLimiterStat::TOTAL_INCOMING = " total "; +const std::string RateLimiterStat::TOTAL_OUTGOING = " total "; + +double Stat::calcAvgRate(uint64_t _data, uint32_t _periodMS) +{ + auto avgRate = (double)_data * 8 * 1000 / 1024 / 1024 / _periodMS; + return avgRate; +} + +std::optional Stat::toString(const std::string& _prefix, uint32_t _periodMS) +{ + if (lastDataSize.load() == 0) + { + return std::nullopt; + } + + auto avgRate = calcAvgRate(lastDataSize.load(), _periodMS); + + std::stringstream ss; + + ss << " \t[" << _prefix << "] " + << " \t" + << " |total data: " << totalDataSize.load() << " |last data: " << lastDataSize.load() + << " |total times: " << totalTimes.load() << " |last times: " << lastTimes.load() + << " |total failed times: " << totalFailedTimes.load() + << " |last failed times: " << lastFailedTimes.load() << " |avg rate(Mb/s): "; + + ss << std::fixed << std::setprecision(2) << avgRate; + + return ss.str(); +} + +void RateLimiterStat::start() +{ + if (m_running) + { + RATELIMIT_LOG(INFO) << LOG_BADGE("RateLimiterStat") + << LOG_DESC("ratelimiter stat is running"); + return; + } + m_running = true; + + m_statTimer = std::make_shared(m_statInterval, "ratelimiter_reporter"); + + auto statInterval = m_statInterval; + auto statTimer = m_statTimer; + auto rateLimiterStatWeakPtr = std::weak_ptr(shared_from_this()); + m_statTimer->registerTimeoutHandler([statTimer, rateLimiterStatWeakPtr, statInterval]() { + auto rateLimiterStat = rateLimiterStatWeakPtr.lock(); + if (!rateLimiterStat) + { + return; + } + + auto io = rateLimiterStat->inAndOutStat(statInterval); + GATEWAY_LOG(INFO) << LOG_DESC("\n [ratelimiter stat]") << LOG_DESC(io.first); + GATEWAY_LOG(INFO) << LOG_DESC("\n [ratelimiter stat]") << LOG_DESC(io.second); + rateLimiterStat->flushStat(); + statTimer->restart(); + }); + + m_statTimer->start(); + + RATELIMIT_LOG(INFO) << LOG_BADGE("RateLimiterStat") << LOG_DESC("ratelimiter stat start ok") + << LOG_KV("statInterval", statInterval); +} + +void RateLimiterStat::stop() +{ + if (!m_running) + { + RATELIMIT_LOG(INFO) << LOG_BADGE("RateLimiterStat") + << LOG_DESC("ratelimiter stat has been stopped"); + return; + } + + m_running = false; + if (m_statTimer) + { + m_statTimer->stop(); + } + + RATELIMIT_LOG(INFO) << LOG_BADGE("RateLimiterStat") << LOG_DESC("ratelimiter stat stop end"); +} + + +std::string RateLimiterStat::toGroupKey(const std::string& _groupID) +{ + return " group : " + _groupID; +} + +std::string RateLimiterStat::toModuleKey(uint16_t _moduleID) +{ + return " module : " + protocol::moduleIDToString((protocol::ModuleID)_moduleID); +} + +std::string RateLimiterStat::toEndPointKey(const std::string& _ep) +{ + return " endpoint: " + _ep; +} + +void RateLimiterStat::updateInComing(const std::string& _endpoint, uint64_t _dataSize) +{ + std::string epKey = toEndPointKey(_endpoint); + std::string totalKey = TOTAL_OUTGOING; + + // RATELIMIT_LOG(DEBUG) << LOG_BADGE("updateInComing") << LOG_KV("endpoint", _endpoint) + // << LOG_KV("dataSize", _dataSize); + + std::lock_guard lock(m_inLock); + + auto& totalInStat = m_inStat[totalKey]; + auto& epInStat = m_inStat[epKey]; + + // update total incoming + totalInStat.update(_dataSize); + + // update connection incoming + epInStat.update(_dataSize); +} + +void RateLimiterStat::updateOutGoing(const std::string& _endpoint, uint64_t _dataSize, bool suc) +{ + std::string epKey = toEndPointKey(_endpoint); + std::string totalKey = TOTAL_OUTGOING; + + std::lock_guard lock(m_outLock); + auto& totalOutStat = m_outStat[totalKey]; + auto& epOutStat = m_outStat[epKey]; + + if (suc) + { + // update total outgoing + totalOutStat.update(_dataSize); + + // update connection outgoing + epOutStat.update(_dataSize); + } + else + { + totalOutStat.updateFailed(); + + epOutStat.updateFailed(); + } +} + +void RateLimiterStat::updateInComing( + const std::string& _groupID, uint16_t _moduleID, uint64_t _dataSize) +{ + if (_groupID.empty()) + { // amop + if (_moduleID != 0) + { + std::string moduleKey = toModuleKey(_moduleID); + std::lock_guard lock(m_inLock); + + auto& moduleInStat = m_inStat[moduleKey]; + moduleInStat.update(_dataSize); + } + + return; + } + + // RATELIMIT_LOG(DEBUG) << LOG_BADGE("updateInComing") << LOG_KV("_groupID", _groupID) + // << LOG_KV("moduleID", _moduleID) << LOG_KV("dataSize", _dataSize); + + std::string groupKey = toGroupKey(_groupID); + std::lock_guard lock(m_inLock); + + auto& groupInStat = m_inStat[groupKey]; + groupInStat.update(_dataSize); +} + +void RateLimiterStat::updateOutGoing( + const std::string& _groupID, uint16_t _moduleID, uint64_t _dataSize, bool suc) +{ + if (_groupID.empty()) + { + if (_moduleID != 0) + { + std::string moduleKey = toModuleKey(_moduleID); + std::lock_guard lock(m_outLock); + + auto& moduleOutStat = m_outStat[moduleKey]; + moduleOutStat.update(_dataSize); + + if (suc) + { + // update total outgoing + moduleOutStat.update(_dataSize); + } + else + { + moduleOutStat.updateFailed(); + } + } + return; + } + + std::string groupKey = toGroupKey(_groupID); + std::lock_guard lock(m_outLock); + + auto& groupOutStat = m_outStat[groupKey]; + if (suc) + { + // update total outgoing + groupOutStat.update(_dataSize); + } + else + { + groupOutStat.updateFailed(); + } +} + +void RateLimiterStat::flushStat() +{ + { + std::lock_guard lock(m_inLock); + for (auto& [k, s] : m_inStat) + { + s.resetLast(); + } + } + + { + std::lock_guard lock(m_outLock); + for (auto& [k, s] : m_outStat) + { + s.resetLast(); + } + } +} + +std::pair RateLimiterStat::inAndOutStat(uint32_t _intervalMS) +{ + std::string in = " :"; + { + std::lock_guard lock(m_inLock); + for (auto& [k, s] : m_inStat) + { + in += "\t\n"; + + auto opt = s.toString(k, _intervalMS); + if (opt.has_value()) + { + in += opt.value(); + } + } + } + + std::string out = " :"; + { + std::lock_guard lock(m_outLock); + for (auto& [k, s] : m_outStat) + { + out += "\t\n"; + + auto opt = s.toString(k, _intervalMS); + if (opt.has_value()) + { + out += opt.value(); + } + } + } + + return {in, out}; +} diff --git a/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.h b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.h new file mode 100644 index 0000000..a8a70cf --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/RateLimiterStat.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RateLimiterStat.h + * @author: octopus + * @date 2022-06-30 + */ +#pragma once + +#include "bcos-gateway/Common.h" +#include "bcos-utilities/Timer.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +// +struct Stat +{ + std::atomic totalDataSize; + std::atomic lastDataSize; + + std::atomic totalTimes; + std::atomic lastTimes; + + std::atomic totalFailedTimes; + std::atomic lastFailedTimes; + +public: + void resetLast() + { + lastTimes = 0; + lastDataSize = 0; + lastFailedTimes = 0; + } + + void update(uint64_t _dataSize) + { + totalTimes++; + lastTimes++; + + totalDataSize += _dataSize; + lastDataSize += _dataSize; + } + + void updateFailed() + { + totalFailedTimes++; + lastFailedTimes++; + } + + double calcAvgRate(uint64_t _data, uint32_t _periodMS); + + std::optional toString(const std::string& _prefix, uint32_t _periodMS); +}; + +class RateLimiterStat : public std::enable_shared_from_this +{ +public: + const static std::string TOTAL_INCOMING; + const static std::string TOTAL_OUTGOING; + +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + void start(); + void stop(); + +public: + void updateInComing(const std::string& _endpoint, uint64_t _dataSize); + void updateInComing(const std::string& _groupID, uint16_t _moduleID, uint64_t _dataSize); + + void updateOutGoing(const std::string& _endpoint, uint64_t _dataSize, bool suc); + void updateOutGoing( + const std::string& _groupID, uint16_t _moduleID, uint64_t _dataSize, bool suc); + +public: + std::string toGroupKey(const std::string& _groupID); + std::string toModuleKey(uint16_t _moduleID); + std::string toEndPointKey(const std::string& _ep); + + void flushStat(); + + std::pair inAndOutStat(uint32_t _intervalMS); + +public: + const std::unordered_map& inStat() { return m_inStat; } + const std::unordered_map& outStat() { return m_outStat; } + + int32_t statInterval() const { return m_statInterval; } + void setStatInterval(int32_t _statInterval) { m_statInterval = _statInterval; } + +private: + bool m_running = false; + + // TODO: How to clean up the disconnected connections + std::mutex m_inLock; + std::mutex m_outLock; + std::unordered_map m_inStat; + std::unordered_map m_outStat; + + // report period, default 1 min + int32_t m_statInterval = 60000; + // the timer that periodically report the stat + std::shared_ptr m_statTimer; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.cpp b/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.cpp new file mode 100644 index 0000000..b0e89e1 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.cpp @@ -0,0 +1,168 @@ +/* + * @CopyRight: + * FISCO-BCOS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FISCO-BCOS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FISCO-BCOS. If not, see + * (c) 2016-2020 fisco-dev contributors. + */ +/** + * @brief : Implement of TokenBucketRateLimiter + * @file: TokenBucketRateLimiter.cpp + * @author: yujiechen + * @date: 2020-04-15 + */ +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +TokenBucketRateLimiter::TokenBucketRateLimiter(int64_t _maxQPS) + : m_maxQPS(_maxQPS), + m_permitsUpdateInterval((double)1000000 / (double)m_maxQPS), + m_lastPermitsUpdateTime(utcSteadyTimeUs()), + m_maxPermits(m_maxQPS), + m_futureBurstResetTime(m_lastPermitsUpdateTime + m_burstTimeInterval) +{ + RATELIMIT_LOG(INFO) << LOG_BADGE("[NEWOBJ][TokenBucketRateLimiter]") + << LOG_KV("permitsUpdateInterval", m_permitsUpdateInterval) + << LOG_KV("maxPermits", m_maxPermits); +} + +void TokenBucketRateLimiter::setMaxPermitsSize(int64_t const& _maxPermitsSize) +{ + m_maxPermits = _maxPermitsSize; + + RATELIMIT_LOG(INFO) << LOG_BADGE("setMaxPermitsSize") << LOG_DESC("setMaxPermitsSize") + << LOG_KV("maxPermitsSize", m_maxPermits); +} + +void TokenBucketRateLimiter::setBurstTimeInterval(int64_t const& _burstInterval) +{ + m_burstTimeInterval = _burstInterval; + + RATELIMIT_LOG(INFO) << LOG_BADGE("setBurstTimeInterval") + << LOG_KV("burstTimeInterval", m_burstTimeInterval); +} + +void TokenBucketRateLimiter::setMaxBurstReqNum(int64_t const& _maxBurstReqNum) +{ + m_maxBurstReqNum = _maxBurstReqNum; + + RATELIMIT_LOG(INFO) << LOG_BADGE("setMaxBurstReqNum") + << LOG_KV("maxBurstReqNum", m_maxBurstReqNum); +} + +bool TokenBucketRateLimiter::tryAcquire(int64_t _requiredPermits) +{ + int64_t waitTime = fetchPermitsAndGetWaitTime(_requiredPermits, false, utcSteadyTimeUs()); + return (waitTime == 0); +} + +void TokenBucketRateLimiter::acquire(int64_t _requiredPermits) +{ + int64_t waitTime = fetchPermitsAndGetWaitTime(_requiredPermits, false, utcSteadyTimeUs()); + if (waitTime > 0) + { + std::this_thread::sleep_for(std::chrono::microseconds(waitTime)); + } + return; +} + +void TokenBucketRateLimiter::rollback(int64_t _requiredPermits) +{ + Guard l(m_mutex); + m_currentStoredPermits += _requiredPermits; + if (m_currentStoredPermits > m_maxPermits) + { + m_currentStoredPermits = m_maxPermits; + } + return; +} + +int64_t TokenBucketRateLimiter::fetchPermitsAndGetWaitTime( + int64_t _requiredPermits, bool _fetchPermitsWhenRequireWait, int64_t _now) +{ + Guard l(m_mutex); + // has remaining permits, handle the request directly + if (m_currentStoredPermits > _requiredPermits) + { + m_currentStoredPermits -= _requiredPermits; + return 0; + } + + // update the permits + updatePermits(_now); + int64_t waitAvailableTime = m_lastPermitsUpdateTime - _now; + // _fetchPermitsWhenRequireWait is false: don't fetch permits after timeout + // _fetchPermitsWhenRequireWait is true: fetch permits after timeout + if (!_fetchPermitsWhenRequireWait) + { + if (waitAvailableTime > 0) + { + return waitAvailableTime; + } + // Only permits of m_maxQPS can be used in advance + if ((_requiredPermits - m_currentStoredPermits) >= m_maxQPS) + { + // Indicates that the permits was not obtained + return 1; + } + } + if ((waitAvailableTime > 0 || (_requiredPermits - m_currentStoredPermits) >= m_maxQPS) && + !_fetchPermitsWhenRequireWait) + { + return waitAvailableTime; + } + updateCurrentStoredPermits(_requiredPermits); + return std::max(waitAvailableTime, (int64_t)0); +} + +void TokenBucketRateLimiter::updateCurrentStoredPermits(int64_t _requiredPermits) +{ + double waitTime = 0; + + if (_requiredPermits > m_currentStoredPermits) + { + waitTime = (_requiredPermits - m_currentStoredPermits) * m_permitsUpdateInterval; + m_currentStoredPermits = 0; + } + else + { + m_currentStoredPermits -= _requiredPermits; + } + if (waitTime > 0) + { + m_lastPermitsUpdateTime += (int64_t)(waitTime); + } +} + +void TokenBucketRateLimiter::updatePermits(int64_t _now) +{ + if (_now <= m_lastPermitsUpdateTime) + { + return; + } + int64_t increasedPermits = (double)(_now - m_lastPermitsUpdateTime) / m_permitsUpdateInterval; + m_currentStoredPermits = std::min(m_maxPermits, m_currentStoredPermits + increasedPermits); + // update last permits update time + if (m_currentStoredPermits == m_maxPermits) + { + m_lastPermitsUpdateTime = _now; + } + else + { + m_lastPermitsUpdateTime += increasedPermits * m_permitsUpdateInterval; + } +} diff --git a/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.h b/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.h new file mode 100644 index 0000000..2e68120 --- /dev/null +++ b/bcos-gateway/bcos-gateway/libratelimit/TokenBucketRateLimiter.h @@ -0,0 +1,116 @@ +/* + * @CopyRight: + * FISCO-BCOS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FISCO-BCOS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FISCO-BCOS. If not, see + * (c) 2016-2020 fisco-dev contributors. + */ +/** + * @brief : Implement of TokenBucketRateLimiter + * @file: TokenBucketRateLimiter.h + * @author: yujiechen + * @date: 2020-04-15 + */ +#pragma once + +#include +#include + +namespace bcos +{ +namespace gateway +{ +namespace ratelimiter +{ + +class TokenBucketRateLimiter : public RateLimiterInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + TokenBucketRateLimiter(int64_t _maxQPS); + + TokenBucketRateLimiter(TokenBucketRateLimiter&&) = delete; + TokenBucketRateLimiter(const TokenBucketRateLimiter&) = delete; + TokenBucketRateLimiter& operator=(const TokenBucketRateLimiter&) = delete; + TokenBucketRateLimiter& operator=(TokenBucketRateLimiter&&) = delete; + + ~TokenBucketRateLimiter() override = default; + +public: + /** + * @brief + * + * @param _requiredPermits + */ + void acquire(int64_t _requiredPermits) override; + + /** + * @brief + * + * @param _requiredPermits + * @return true + * @return false + */ + bool tryAcquire(int64_t _requiredPermits) override; + + /** + * @brief + * + * @return + */ + void rollback(int64_t _requiredPermits) override; + +public: + int64_t maxQPS() const { return m_maxQPS; } + + void setMaxPermitsSize(int64_t const& _maxPermitsSize); + void setBurstTimeInterval(int64_t const& _burstInterval); + void setMaxBurstReqNum(int64_t const& _maxBurstReqNum); + +protected: + int64_t fetchPermitsAndGetWaitTime( + int64_t _requiredPermits, bool _fetchPermitsWhenRequireWait, int64_t _now); + + void updatePermits(int64_t _now); + + void updateCurrentStoredPermits(int64_t _requiredPermits); + +private: + mutable bcos::Mutex m_mutex; + + // the max QPS + int64_t m_maxQPS; + + // stored permits + std::atomic m_currentStoredPermits = 0; + + // the interval time to update storedPermits + double m_permitsUpdateInterval; + int64_t m_lastPermitsUpdateTime; + int64_t m_maxPermits = 0; + + // the current burstReqNum, every m_burstTimeInterval is refreshed to 0 + std::atomic m_burstReqNum = {0}; + // the max burst num during m_burstTimeInterval + int64_t m_maxBurstReqNum = 0; + // default burst interval is 1s + uint64_t m_burstTimeInterval = 1000000; + std::atomic m_futureBurstResetTime; +}; + +} // namespace ratelimiter +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.cpp b/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.cpp new file mode 100644 index 0000000..d7ad55b --- /dev/null +++ b/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayNodeStatus.cpp + * @author: yujiechen + * @date 2021-12-31 + */ +#include "GatewayNodeStatus.h" +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::gateway; + +GatewayNodeStatus::GatewayNodeStatus() + : m_tarsStatus(std::make_shared()) +{} + +bytesPointer GatewayNodeStatus::encode() +{ + // append groupInfos to m_tarsStatus + m_tarsStatus->nodeList.clear(); + for (auto const& it : m_groupNodeInfos) + { + auto groupNodeInfoImpl = + std::dynamic_pointer_cast(it); + m_tarsStatus->nodeList.emplace_back(groupNodeInfoImpl->inner()); + } + auto encodeData = std::make_shared(); + tars::TarsOutputStream output; + m_tarsStatus->writeTo(output); + output.getByteBuffer().swap(*encodeData); + return encodeData; +} + +void GatewayNodeStatus::decode(bytesConstRef _data) +{ + tars::TarsInputStream input; + input.setBuffer((const char*)_data.data(), _data.size()); + m_tarsStatus->readFrom(input); + // decode into m_groupNodeInfos + m_groupNodeInfos.clear(); + for (auto& it : m_tarsStatus->nodeList) + { + auto groupNodeInfo = std::make_shared( + [m_groupNodeInfo = it]() mutable { return &m_groupNodeInfo; }); + m_groupNodeInfos.emplace_back(groupNodeInfo); + } +} \ No newline at end of file diff --git a/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.h b/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.h new file mode 100644 index 0000000..36fa90c --- /dev/null +++ b/bcos-gateway/bcos-gateway/protocol/GatewayNodeStatus.h @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayNodeStatus.h + * @author: yujiechen + * @date 2021-12-31 + */ +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include +#include +namespace bcos +{ +namespace gateway +{ +class GatewayNodeStatus +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + GatewayNodeStatus(); + virtual ~GatewayNodeStatus() {} + + virtual void setUUID(std::string const& _uuid) { m_tarsStatus->uuid = _uuid; } + virtual void setSeq(uint32_t _seq) { m_tarsStatus->seq = _seq; } + virtual void setGroupNodeInfos(std::vector&& _groupNodeInfos) + { + m_groupNodeInfos = std::move(_groupNodeInfos); + } + + virtual bytesPointer encode(); + virtual void decode(bytesConstRef _data); + + virtual std::string const& uuid() const { return m_tarsStatus->uuid; } + virtual uint32_t seq() const { return m_tarsStatus->seq; } + // Note: externally ensure thread safety + virtual std::vector const& groupNodeInfos() const + { + return m_groupNodeInfos; + } + +private: + std::shared_ptr m_tarsStatus; + std::vector m_groupNodeInfos; +}; + +class GatewayNodeStatusFactory +{ +public: + using Ptr = std::shared_ptr; + GatewayNodeStatusFactory() = default; + virtual ~GatewayNodeStatusFactory() {} + + GatewayNodeStatus::Ptr createGatewayNodeStatus() + { + return std::make_shared(); + } + GroupNodeInfo::Ptr createGroupNodeInfo() + { + return std::make_shared(); + } +}; +} // namespace gateway +} // namespace bcos \ No newline at end of file diff --git a/bcos-gateway/test/CMakeLists.txt b/bcos-gateway/test/CMakeLists.txt new file mode 100644 index 0000000..cf1604c --- /dev/null +++ b/bcos-gateway/test/CMakeLists.txt @@ -0,0 +1,40 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-gateway +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +if(BUILD_INTEG_TESTS) + file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "integtests/*.cpp" "integtests/*.h" "unittests/*.sol") +else() + file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "unittests/*.sol") +endif() + +# cmake settings +set(TEST_BINARY_NAME test-bcos-gateway) + +if (TOOLS) + add_subdirectory(main) +endif() + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE .) + +target_compile_options(${TEST_BINARY_NAME} PRIVATE -Wno-unused-variable) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${GATEWAY_TARGET} ${TARS_PROTOCOL_TARGET} ${FRONT_TARGET} bcos-crypto Boost::unit_test_framework) +# add_test(NAME test-gateway WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) +add_test(NAME ${TEST_BINARY_NAME} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/bcos-gateway/test/unittests COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-gateway/test/common/FrontServiceBuilder.h b/bcos-gateway/test/common/FrontServiceBuilder.h new file mode 100644 index 0000000..753988d --- /dev/null +++ b/bcos-gateway/test/common/FrontServiceBuilder.h @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for Gateway + * @file FrontServiceBuilder.cpp + * @author: octopus + * @date 2021-05-21 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +inline std::shared_ptr buildFrontService( + const std::string& _groupID, const std::string& _nodeID, const std::string& _configPath) +{ + auto keyFactory = std::make_shared(); + auto gatewayFactory = std::make_shared("", ""); + auto frontServiceFactory = std::make_shared(); + auto threadPool = std::make_shared("frontServiceTest", 16); + + // build gateway + auto gateway = gatewayFactory->buildGateway(_configPath, true, nullptr, "localGateway"); + + // create nodeID by nodeID str + auto nodeIDPtr = + keyFactory->createKey(bcos::bytesConstRef((bcos::byte*)_nodeID.data(), _nodeID.size())); + + frontServiceFactory->setGatewayInterface(gateway); + + // create frontService + auto frontService = frontServiceFactory->buildFrontService(_groupID, nodeIDPtr); + // register front service to gateway + gateway->gatewayNodeManager()->registerNode( + _groupID, nodeIDPtr, bcos::protocol::NodeType::CONSENSUS_NODE, frontService, nullptr); + // front service + frontService->start(); + // start gateway + gateway->start(); + + return frontService; +} \ No newline at end of file diff --git a/bcos-gateway/test/integtests/GatewayTest.cpp b/bcos-gateway/test/integtests/GatewayTest.cpp new file mode 100644 index 0000000..e278c72 --- /dev/null +++ b/bcos-gateway/test/integtests/GatewayTest.cpp @@ -0,0 +1,155 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for Gateway + * @file GatewayTest.cpp + * @author: octopus + * @date 2021-05-21 + */ + +#include "../common/FrontServiceBuilder.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(GatewayTest, TestPromptFixture) + +static uint nodeCount = 3; + +std::vector buildFrontServiceVector() +{ + std::string groupID = "1"; + std::string nodeIDBase = "node"; + // ../test/unittests/data + std::string configPathBase = "./node"; + + std::vector frontServiceVector; + + for (uint i = 0; i < nodeCount; ++i) + { + auto frontService = buildFrontService(groupID, nodeIDBase + std::to_string(i), + configPathBase + std::to_string(i) + "/config.ini"); + auto frontServiceWeakptr = std::weak_ptr(frontService); + // register message dispatcher for front service + frontService->registerModuleMessageDispatcher( + bcos::protocol::ModuleID::AMOP, [frontServiceWeakptr](bcos::crypto::NodeIDPtr _nodeID, + const std::string _id, bytesConstRef _data) { + auto frontService = frontServiceWeakptr.lock(); + if (frontService) + { + frontService->asyncSendResponse( + _id, bcos::protocol::ModuleID::AMOP, _nodeID, _data, [](Error::Ptr) {}); + } + }); + frontServiceVector.push_back(frontService); + } + + std::this_thread::sleep_for(std::chrono::seconds(3)); + + return frontServiceVector; +} + +BOOST_AUTO_TEST_CASE(test_FrontServiceEcho) +{ + auto frontServiceVector = buildFrontServiceVector(); + auto keyFactory = std::make_shared(); + // echo test + for (const auto& frontService : frontServiceVector) + { + frontService->asyncGetGroupNodeInfo([frontService](Error::Ptr _error, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + BOOST_CHECK(_error == nullptr); + auto const& nodeIDs = _groupNodeInfo->nodeIDList(); + BOOST_CHECK_EQUAL(nodeIDs.size(), nodeCount); + + for (const auto& nodeIDStr : nodeIDs) + { + auto nodeID = keyFactory->createKey(fromHex(nodeIDStr)); + std::string sendStr = boost::uuids::to_string(boost::uuids::random_generator()()); + + auto payload = bcos::bytesConstRef((bcos::byte*)sendStr.data(), sendStr.size()); + + std::promise p; + auto f = p.get_future(); + + frontService->asyncSendMessageByNodeID(bcos::protocol::ModuleID::AMOP, nodeID, + payload, 10000, + [sendStr, &p](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, const std::string& _id, + bcos::front::ResponseFunc _respFunc) { + p.set_value(true); + (void)_respFunc; + (void)_nodeID; + BOOST_CHECK(!_id.empty()); + BOOST_CHECK(_error == nullptr); + std::string retStr = std::string(_data.begin(), _data.end()); + BOOST_CHECK_EQUAL(sendStr, retStr); + }); + + f.get(); + } + }); + } +} + +BOOST_AUTO_TEST_CASE(test_FrontServiceTimeout) +{ + auto frontServiceVector = buildFrontServiceVector(); + auto keyFactory = std::make_shared(); + // echo test + for (const auto& frontService : frontServiceVector) + { + frontService->asyncGetGroupNodeInfo([frontService](Error::Ptr _error, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + BOOST_CHECK(_error == nullptr); + auto const& nodeIDs = _groupNodeInfo->nodeIDList(); + BOOST_CHECK_EQUAL(nodeIDs.size(), nodeCount); + + for (const auto& nodeIDStr : nodeIDs) + { + auto nodeID = keyFactory->createKey(fromHex(nodeIDStr)); + std::string sendStr = boost::uuids::to_string(boost::uuids::random_generator()()); + + auto payload = bcos::bytesConstRef((bcos::byte*)sendStr.data(), sendStr.size()); + + std::promise p; + auto f = p.get_future(); + + frontService->asyncSendMessageByNodeID(bcos::protocol::ModuleID::AMOP + 1, nodeID, + payload, 10000, + [sendStr, &p](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, const std::string& _id, + bcos::front::ResponseFunc _respFunc) { + p.set_value(true); + (void)_respFunc; + (void)_nodeID; + (void)_data; + BOOST_CHECK(!_id.empty()); + BOOST_CHECK(_error != nullptr); + BOOST_CHECK_EQUAL( + _error->errorCode(), bcos::protocol::CommonError::TIMEOUT); + }); + + f.get(); + } + }); + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/main/CMakeLists.txt b/bcos-gateway/test/main/CMakeLists.txt new file mode 100644 index 0000000..26798ce --- /dev/null +++ b/bcos-gateway/test/main/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +set(BCOS_GATE_WAY_EXEC_TARGET "gateway-exec-mini") +add_executable(${BCOS_GATE_WAY_EXEC_TARGET} ${SRC_LIST}) +target_link_libraries(${BCOS_GATE_WAY_EXEC_TARGET} PUBLIC ${GATEWAY_TARGET} ${UTILITIES_TARGET} ${FRONT_TARGET}) +target_compile_options(${BCOS_GATE_WAY_EXEC_TARGET} PRIVATE -Wno-unused-variable) diff --git a/bcos-gateway/test/main/main.cpp b/bcos-gateway/test/main/main.cpp new file mode 100644 index 0000000..1107104 --- /dev/null +++ b/bcos-gateway/test/main/main.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: octopus + * @date 2021-05-25 + */ +#include +#include +#include + +#include "../common/FrontServiceBuilder.h" + +using namespace std; +using namespace bcos; +using namespace gateway; + +#define GATEWAY_MAIN_LOG(LEVEL) BCOS_LOG(LEVEL) << "[Gateway][MAIN]" + +int main(int argc, const char** argv) +{ + if ((argc == 2) && ((std::string(argv[1]) == "-h") || (std::string(argv[1]) == "--help"))) + { + std::cerr << "./gateway-exec-mini groupID nodeID ./config.ini" << std::endl; + return -1; + } + + if (argc <= 3) + { + std::cerr << "please input groupID、nodeID、config path" << std::endl; + return -1; + } + + std::string groupID = argv[1]; + std::string nodeID = argv[2]; + std::string configPath = argv[3]; + + try + { + // create frontService + auto frontService = buildFrontService(groupID, nodeID, configPath); + auto fsWeakptr = std::weak_ptr(frontService); + // register message dispatcher for front service + frontService->registerModuleMessageDispatcher( + bcos::protocol::ModuleID::AMOP, [fsWeakptr](bcos::crypto::NodeIDPtr _nodeID, + const std::string& _id, bytesConstRef _data) { + auto frontService = fsWeakptr.lock(); + if (frontService) + { + GATEWAY_MAIN_LOG(INFO) + << LOG_DESC("echo") << LOG_KV("to", _nodeID->hex()) + << LOG_KV("content", std::string(_data.begin(), _data.end())); + frontService->asyncSendResponse( + _id, bcos::protocol::ModuleID::AMOP, _nodeID, _data, [](Error::Ptr) {}); + } + }); + auto keyFactory = std::make_shared(); + while (true) + { + std::this_thread::sleep_for(std::chrono::seconds(1)); + + frontService->asyncGetGroupNodeInfo( + [frontService, keyFactory]( + Error::Ptr _error, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + (void)_error; + if (!_groupNodeInfo || _groupNodeInfo->nodeIDList().empty()) + { + return; + } + auto const& nodeIDs = _groupNodeInfo->nodeIDList(); + for (const auto& nodeIDStr : nodeIDs) + { + auto nodeID = keyFactory->createKey(fromHex(nodeIDStr)); + std::string randStr = + boost::uuids::to_string(boost::uuids::random_generator()()); + GATEWAY_MAIN_LOG(INFO) << LOG_DESC("request") << LOG_KV("to", nodeID->hex()) + << LOG_KV("content", randStr); + + auto payload = bytesConstRef((bcos::byte*)randStr.data(), randStr.size()); + + frontService->asyncSendMessageByNodeID(bcos::protocol::ModuleID::AMOP, + nodeID, payload, 0, + [randStr](Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, const std::string& _id, + bcos::front::ResponseFunc _respFunc) { + (void)_respFunc; + if (_error && (_error->errorCode() != 0)) + { + GATEWAY_MAIN_LOG(ERROR) + << LOG_DESC("request error") << LOG_KV("to", _nodeID->hex()) + << LOG_KV("id", _id); + return; + } + + std::string retMsg = std::string(_data.begin(), _data.end()); + if (retMsg == randStr) + { + GATEWAY_MAIN_LOG(INFO) + << LOG_DESC("response ok") << LOG_KV("from", _nodeID->hex()) + << LOG_KV("id", _id); + } + else + { + GATEWAY_MAIN_LOG(ERROR) + << LOG_DESC("response error") + << LOG_KV("from", _nodeID->hex()) << LOG_KV("id", _id) + << LOG_KV("req", randStr) << LOG_KV("rep", retMsg); + } + }); + } + }); + } + } + catch (const std::exception& e) + { + std::cerr << "exception throw, error: " << boost::diagnostic_information(e) << std::endl; + return -1; + } + + std::cout << "gateway program exit normally." << std::endl; + return 0; +} \ No newline at end of file diff --git a/bcos-gateway/test/unittests/GatewayConfigTest.cpp b/bcos-gateway/test/unittests/GatewayConfigTest.cpp new file mode 100644 index 0000000..ebbcbe1 --- /dev/null +++ b/bcos-gateway/test/unittests/GatewayConfigTest.cpp @@ -0,0 +1,321 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for gateway + * @file GatewayConfigTest.cpp + * @author: octopus + * @date 2021-05-17 + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace gateway; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(GatewayConfigTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_validPort) +{ + auto config = std::make_shared(); + BOOST_CHECK(!config->isValidPort(1024)); + BOOST_CHECK(!config->isValidPort(65536)); + BOOST_CHECK(config->isValidPort(30300)); +} + +BOOST_AUTO_TEST_CASE(test_validIP) +{ + auto config = std::make_shared(); + + BOOST_CHECK(!config->isValidIP("a")); + BOOST_CHECK(!config->isValidIP("127")); + BOOST_CHECK(!config->isValidIP("127.0")); + BOOST_CHECK(!config->isValidIP("127.0.0")); + BOOST_CHECK(!config->isValidIP("127.0.0.1.0")); + + // ipv4 + BOOST_CHECK(config->isValidIP("127.0.0.1")); + BOOST_CHECK(config->isValidIP("192.168.0.1")); + BOOST_CHECK(config->isValidIP("64.120.121.206")); + + // ipv6 + BOOST_CHECK(config->isValidIP("::1")); + BOOST_CHECK(config->isValidIP("fe80::58da:28ff:fe08:5d91")); + BOOST_CHECK(config->isValidIP("1111::1111:1111:1111:1111")); +} + +BOOST_AUTO_TEST_CASE(test_hostAndPort2Endpoint) +{ + auto config = std::make_shared(); + + { + NodeIPEndpoint endpoint; + BOOST_CHECK_NO_THROW(config->hostAndPort2Endpoint("127.0.0.1:1111", endpoint)); + BOOST_CHECK_EQUAL(endpoint.address(), "127.0.0.1"); + BOOST_CHECK_EQUAL(endpoint.port(), 1111); + BOOST_CHECK(!endpoint.isIPv6()); + } + + { + NodeIPEndpoint endpoint; + BOOST_CHECK_NO_THROW(config->hostAndPort2Endpoint("[::1]:1234", endpoint)); + BOOST_CHECK_EQUAL(endpoint.address(), "::1"); + BOOST_CHECK_EQUAL(endpoint.port(), 1234); + BOOST_CHECK(endpoint.isIPv6()); + } + + { + NodeIPEndpoint endpoint; + BOOST_CHECK_NO_THROW(config->hostAndPort2Endpoint("8.129.188.218:12345", endpoint)); + BOOST_CHECK_EQUAL(endpoint.address(), "8.129.188.218"); + BOOST_CHECK_EQUAL(endpoint.port(), 12345); + BOOST_CHECK(!endpoint.isIPv6()); + } + + { + NodeIPEndpoint endpoint; + BOOST_CHECK_NO_THROW( + config->hostAndPort2Endpoint("[fe80::1a9d:50ae:3207:80d9]:54321", endpoint)); + BOOST_CHECK_EQUAL(endpoint.address(), "fe80::1a9d:50ae:3207:80d9"); + BOOST_CHECK_EQUAL(endpoint.port(), 54321); + BOOST_CHECK(endpoint.isIPv6()); + } + + { + NodeIPEndpoint endpoint; + BOOST_CHECK_THROW(config->hostAndPort2Endpoint("abcdef:fff", endpoint), std::exception); + BOOST_CHECK_THROW(config->hostAndPort2Endpoint("127.0.0.1", endpoint), std::exception); + } +} + +BOOST_AUTO_TEST_CASE(test_nodesJsonParser) +{ + { + std::string json = + "{\"nodes\":[\"127.0.0.1:30300\",\"127.0.0.1:30301\"," + "\"127.0.0.1:30302\"]}"; + auto config = std::make_shared(); + std::set nodeIPEndpointSet; + config->parseConnectedJson(json, nodeIPEndpointSet); + BOOST_CHECK_EQUAL(nodeIPEndpointSet.size(), 3); + BOOST_CHECK_EQUAL(config->threadPoolSize(), 16); + } + + { + std::string json = "{\"nodes\":[]}"; + auto config = std::make_shared(); + std::set nodeIPEndpointSet; + config->parseConnectedJson(json, nodeIPEndpointSet); + BOOST_CHECK_EQUAL(nodeIPEndpointSet.size(), 0); + BOOST_CHECK_EQUAL(config->threadPoolSize(), 16); + } + + { + std::string json = + "{\"nodes\":[\"[" + "fe80::1a9d:50ae:3207:80d9]:30302\"," + "\"[fe80::1a9d:50ae:3207:80d9]:30303\"]}"; + auto config = std::make_shared(); + std::set nodeIPEndpointSet; + config->parseConnectedJson(json, nodeIPEndpointSet); + BOOST_CHECK_EQUAL(nodeIPEndpointSet.size(), 2); + BOOST_CHECK_EQUAL(config->threadPoolSize(), 16); + } +} + +BOOST_AUTO_TEST_CASE(test_initConfig) +{ + { + // std::string + // configIni("../../../bcos-gateway/test/unittests/data/config/config_ipv4.ini"); + std::string configIni("data/config/config_ipv4.ini"); + auto config = std::make_shared(); + config->initConfig(configIni); + config->loadP2pConnectedNodes(); + + BOOST_CHECK_EQUAL(config->listenIP(), "127.0.0.1"); + BOOST_CHECK_EQUAL(config->listenPort(), 12345); + BOOST_CHECK_EQUAL(config->smSSL(), false); + BOOST_CHECK_EQUAL(config->connectedNodes().size(), 3); + + auto certConfig = config->certConfig(); + BOOST_CHECK(!certConfig.caCert.empty()); + BOOST_CHECK(!certConfig.nodeCert.empty()); + BOOST_CHECK(!certConfig.nodeKey.empty()); + } +} + +BOOST_AUTO_TEST_CASE(test_initSMConfig) +{ + { + // std::string + // configIni("../../../bcos-gateway/test/unittests/data/config/config_ipv6.ini"); + std::string configIni("data/config/config_ipv6.ini"); + + auto config = std::make_shared(); + config->initConfig(configIni); + config->loadP2pConnectedNodes(); + + BOOST_CHECK_EQUAL(config->listenIP(), "0.0.0.0"); + BOOST_CHECK_EQUAL(config->listenPort(), 54321); + BOOST_CHECK_EQUAL(config->smSSL(), true); + BOOST_CHECK_EQUAL(config->connectedNodes().size(), 1); + + auto smCertConfig = config->smCertConfig(); + BOOST_CHECK(!smCertConfig.caCert.empty()); + BOOST_CHECK(!smCertConfig.nodeCert.empty()); + BOOST_CHECK(!smCertConfig.nodeKey.empty()); + BOOST_CHECK(!smCertConfig.enNodeCert.empty()); + BOOST_CHECK(!smCertConfig.enNodeKey.empty()); + } +} + +BOOST_AUTO_TEST_CASE(test_initRateLimiterConfig) +{ + { + bcos::gateway::GatewayConfig::RateLimiterConfig rateLimiterConfig; + BOOST_CHECK(!rateLimiterConfig.enableRateLimit()); + } + + { + std::string configIni("data/config/config_ipv4.ini"); + + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(configIni, pt); + + auto config = std::make_shared(); + config->initRateLimitConfig(pt); + + auto rateLimiterConfig = config->rateLimiterConfig(); + + BOOST_CHECK(rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + BOOST_CHECK_EQUAL(rateLimiterConfig.distributedRateLimitCachePercent, 13); + BOOST_CHECK_EQUAL(rateLimiterConfig.statInterval, 12345); + + BOOST_CHECK(rateLimiterConfig.enableRateLimit()); + BOOST_CHECK(rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(rateLimiterConfig.enableGroupRateLimit); + + BOOST_CHECK_EQUAL(rateLimiterConfig.totalOutgoingBwLimit, 10 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(rateLimiterConfig.connOutgoingBwLimit, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(rateLimiterConfig.groupOutgoingBwLimit, 5 * 1024 * 1024 / 8); + + BOOST_CHECK_EQUAL(rateLimiterConfig.modulesWithoutLimit.size(), 4); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::Raft) != + rateLimiterConfig.modulesWithoutLimit.end()); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::PBFT) != + rateLimiterConfig.modulesWithoutLimit.end()); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::TxsSync) != + rateLimiterConfig.modulesWithoutLimit.end()); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::AMOP) != + rateLimiterConfig.modulesWithoutLimit.end()); + + BOOST_CHECK_EQUAL(rateLimiterConfig.ip2BwLimit.size(), 3); + BOOST_CHECK_EQUAL( + rateLimiterConfig.ip2BwLimit.find("192.108.0.1")->second, 1 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + rateLimiterConfig.ip2BwLimit.find("192.108.0.2")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + rateLimiterConfig.ip2BwLimit.find("192.108.0.3")->second, 3 * 1024 * 1024 / 8); + + BOOST_CHECK_EQUAL(rateLimiterConfig.group2BwLimit.size(), 3); + BOOST_CHECK_EQUAL( + rateLimiterConfig.group2BwLimit.find("group0")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + rateLimiterConfig.group2BwLimit.find("group1")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + rateLimiterConfig.group2BwLimit.find("group2")->second, 2 * 1024 * 1024 / 8); + } + + { + std::string configIni("data/config/config_ipv6.ini"); + + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(configIni, pt); + + auto config = std::make_shared(); + config->initRateLimitConfig(pt); + + auto rateLimiterConfig = config->rateLimiterConfig(); + + BOOST_CHECK(rateLimiterConfig.enableRateLimit()); + + BOOST_CHECK(!rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + BOOST_CHECK_EQUAL(rateLimiterConfig.distributedRateLimitCachePercent, 20); + BOOST_CHECK_EQUAL(rateLimiterConfig.statInterval, 60000); + + BOOST_CHECK(rateLimiterConfig.enableRateLimit()); + BOOST_CHECK(rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(rateLimiterConfig.enableGroupRateLimit); + + BOOST_CHECK_EQUAL(rateLimiterConfig.totalOutgoingBwLimit, 3 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(rateLimiterConfig.connOutgoingBwLimit, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(rateLimiterConfig.groupOutgoingBwLimit, 1 * 1024 * 1024 / 8); + + BOOST_CHECK_EQUAL(rateLimiterConfig.modulesWithoutLimit.size(), 3); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::Raft) != + rateLimiterConfig.modulesWithoutLimit.end()); + BOOST_CHECK(rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::PBFT) != + rateLimiterConfig.modulesWithoutLimit.end()); + BOOST_CHECK( + rateLimiterConfig.modulesWithoutLimit.find(bcos::protocol::ModuleID::ConsTxsSync) != + rateLimiterConfig.modulesWithoutLimit.end()); + + BOOST_CHECK_EQUAL(rateLimiterConfig.ip2BwLimit.size(), 0); + BOOST_CHECK_EQUAL(rateLimiterConfig.group2BwLimit.size(), 0); + } +} + +BOOST_AUTO_TEST_CASE(test_doubleMBToBit) +{ + auto config = std::make_shared(); + BOOST_CHECK_EQUAL(config->doubleMBToBit(1.0), 1024 * 1024 / 8); + + BOOST_CHECK_EQUAL(config->doubleMBToBit(2.5), 25 * 1024 * 1024 / 8 / 10); + + // BOOST_CHECK_EQUAL(config->doubleMBToBit(10.0), 10 * 1024 * 1024 / 8 / 10); + + BOOST_CHECK_EQUAL(config->doubleMBToBit(25.5), 255 * 1024 * 1024 / 8 / 10); + + BOOST_CHECK_EQUAL(config->doubleMBToBit(100), 100 * 1024 * 1024 / 8); +} + +BOOST_AUTO_TEST_CASE(test_RedisConfig) +{ + auto config = std::make_shared(); + std::string configIni("data/config/config_ipv6.ini"); + + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(configIni, pt); + + config->initRedisConfig(pt); + + BOOST_CHECK_EQUAL(config->redisConfig().host, "127.127.127.127"); + BOOST_CHECK_EQUAL(config->redisConfig().port, 12345); + BOOST_CHECK_EQUAL(config->redisConfig().connectionPoolSize, 111); + BOOST_CHECK_EQUAL(config->redisConfig().timeout, 54321); + BOOST_CHECK_EQUAL(config->redisConfig().password, "abc"); + BOOST_CHECK_EQUAL(config->redisConfig().db, 12); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-gateway/test/unittests/GatewayFactoryTest.cpp b/bcos-gateway/test/unittests/GatewayFactoryTest.cpp new file mode 100644 index 0000000..097e7a6 --- /dev/null +++ b/bcos-gateway/test/unittests/GatewayFactoryTest.cpp @@ -0,0 +1,96 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for GatewayFactory + * @file GatewayFactoryTest.cpp + * @author: octopus + * @date 2021-05-17 + */ + +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace gateway; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(GatewayFactoryTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_certPubHexHandler) +{ + auto factory = std::make_shared("", ""); + { + // sm cert + std::string cert = "../../../bcos-gateway/test/unittests/data/sm_ca/sm_node.crt"; + std::string pubHex; + auto r = factory->certPubHexHandler()(cert, pubHex); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(boost::to_lower_copy(pubHex), + R"(045a0d065954bbc96dba0e9eea163d970a9187c3e5f1a6329daf2898acb888ac2d668f4e3b34b538dcd1be7839d86a0869ca6478913cfd4e46c1517586f9c0b3c0)"); + } + + { + // RSA cert + std::string cert("../../../bcos-gateway/test/unittests/data/ca/node.crt"); + std::string pubHex; + auto r = factory->certPubHexHandler()(cert, pubHex); + BOOST_CHECK(r); + } +} + +BOOST_AUTO_TEST_CASE(test_buildSSLContext) +{ + auto factory = std::make_shared("", ""); + + { + // SM SSLContext + std::string configIni("../../../bcos-gateway/test/unittests/data/config/config_ipv6.ini"); + auto config = std::make_shared(); + config->initConfig(configIni); + + { + auto context = factory->buildSSLContext(true, config->smCertConfig()); + BOOST_CHECK(context); + } + + { + auto context = factory->buildSSLContext(false, config->smCertConfig()); + BOOST_CHECK(context); + } + } + + { + // SSLContext + std::string configIni("../../../bcos-gateway/test/unittests/data/config/config_ipv4.ini"); + auto config = std::make_shared(); + config->initConfig(configIni); + + { + auto context = factory->buildSSLContext(true, config->certConfig()); + BOOST_CHECK(context); + } + + { + auto context = factory->buildSSLContext(false, config->certConfig()); + BOOST_CHECK(context); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/unittests/GatewayMessageTest.cpp b/bcos-gateway/test/unittests/GatewayMessageTest.cpp new file mode 100644 index 0000000..9adffd3 --- /dev/null +++ b/bcos-gateway/test/unittests/GatewayMessageTest.cpp @@ -0,0 +1,488 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for gateway + * @file GatewayMessageTest.cpp + * @author: octopus + * @date 2021-04-26 + */ + +#include "bcos-gateway/gateway/GatewayMessageExtAttributes.h" +#include +#define BOOST_TEST_MAIN + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(GatewayMessageTest, TestPromptFixture) + +void testP2PMessageHasOptions(std::shared_ptr factory, uint32_t _version = 0) +{ + // default P2PMessage object + auto msg = std::static_pointer_cast(factory->buildMessage()); + msg->setVersion(_version); + msg->setPacketType(GatewayMessageType::Heartbeat); + BOOST_CHECK_EQUAL(msg->hasOptions(), false); + msg->setPacketType(GatewayMessageType::Handshake); + BOOST_CHECK_EQUAL(msg->hasOptions(), false); + msg->setPacketType(GatewayMessageType::RequestNodeStatus); + BOOST_CHECK_EQUAL(msg->hasOptions(), false); + msg->setPacketType(GatewayMessageType::ResponseNodeStatus); + BOOST_CHECK_EQUAL(msg->hasOptions(), false); + msg->setPacketType(GatewayMessageType::PeerToPeerMessage); + BOOST_CHECK_EQUAL(msg->hasOptions(), true); + msg->setPacketType(GatewayMessageType::BroadcastMessage); + BOOST_CHECK_EQUAL(msg->hasOptions(), true); + msg->setPacketType(0x1111); + BOOST_CHECK_EQUAL(msg->hasOptions(), false); + + BOOST_CHECK_EQUAL(msg->length(), 14); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage_hasOptions) +{ + auto factory = std::make_shared(); + testP2PMessageHasOptions(factory); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessageV2_hasOptions) +{ + auto factory = std::make_shared(); + testP2PMessageHasOptions(factory, 1); +} + +void testP2PMessage(std::shared_ptr factory, uint32_t _version = 0) +{ + // default P2PMessage object + auto encodeMsg = std::static_pointer_cast(factory->buildMessage()); + encodeMsg->setVersion(_version); + auto buffer = std::make_shared(); + auto r = encodeMsg->encode(*buffer.get()); + + BOOST_CHECK_EQUAL(r, true); + + // decode default + auto decodeMsg = std::static_pointer_cast(factory->buildMessage()); + auto ret = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + auto version = decodeMsg->version(); + if (version == 0) + { + BOOST_CHECK_EQUAL(ret, 14); + BOOST_CHECK_EQUAL(decodeMsg->length(), 14); + } + else + { + BOOST_CHECK_EQUAL(ret, 20); + BOOST_CHECK_EQUAL(decodeMsg->length(), 20); + } + BOOST_CHECK_EQUAL(decodeMsg->packetType(), 0); + BOOST_CHECK_EQUAL(decodeMsg->seq(), 0); + BOOST_CHECK_EQUAL(decodeMsg->ext(), 0); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), 0); + + auto decodeMsg1 = std::static_pointer_cast(factory->buildMessage()); + // decode with less length + + if (_version > 0) + { + BOOST_CHECK_THROW(decodeMsg1->decode(bytesConstRef(buffer->data(), buffer->size() - 1)), + std::out_of_range); + } + else + { + auto ret1 = decodeMsg1->decode(bytesConstRef(buffer->data(), buffer->size() - 1)); + BOOST_CHECK_EQUAL(ret1, MessageDecodeStatus::MESSAGE_INCOMPLETE); + } + + { + auto factory = std::make_shared(); + // default P2PMessage object + auto encodeMsg = std::static_pointer_cast(factory->buildMessage()); + encodeMsg->setVersion(_version); + encodeMsg->setPacketType(GatewayMessageType::PeerToPeerMessage); + + auto buffer = std::make_shared(); + auto r = encodeMsg->encode(*buffer.get()); + BOOST_CHECK_EQUAL(r, false); + } + // test invalid message + std::string invalidMessage = + "GET / HTTP/1.1\r\nHost: 127.0.0.1:20200\r\nUpgrade: websocket\r\nConnection: " + "upgrade\r\nSec-WebSocket-Key: lkBb9dFFu4tuMNJyXAWIfQ==\r\nSec-WebSocket-Version: " + "13\r\n\r\n"; + auto invalidMsgBytes = asBytes(invalidMessage); + auto p2pMsg = std::static_pointer_cast(factory->buildMessage()); + p2pMsg->setVersion(_version); + if (_version > 0) + { + BOOST_CHECK_THROW(p2pMsg->decode(ref(invalidMsgBytes)), std::out_of_range); + } + else + { + BOOST_CHECK_EQUAL( + p2pMsg->decode(ref(invalidMsgBytes)), MessageDecodeStatus::MESSAGE_INCOMPLETE); + } +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage) +{ + auto factory = std::make_shared(); + testP2PMessage(factory); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessageV2) +{ + auto factory = std::make_shared(); + testP2PMessage(factory, 1); +} + +void test_P2PMessageWithoutOptions(std::shared_ptr factory, uint32_t _version = 0) +{ + // default P2PMessage object + auto encodeMsg = std::static_pointer_cast(factory->buildMessage()); + encodeMsg->setVersion(_version); + uint32_t seq = 0x12345678; + uint16_t packetType = 0x4321; + uint16_t ext = 0x1101; + auto payload = std::make_shared(10000, 'a'); + + auto version = encodeMsg->version(); + int16_t headerLen = 14; + if (version > 0) + { + headerLen = 20; + } + + encodeMsg->setSeq(seq); + encodeMsg->setPacketType(packetType); + encodeMsg->setExt(ext); + encodeMsg->setPayload(payload); + + auto buffer = std::make_shared(); + auto r = encodeMsg->encode(*buffer.get()); + BOOST_CHECK_EQUAL(r, true); + + // decode default + auto decodeMsg = std::static_pointer_cast(factory->buildMessage()); + auto ret = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK_EQUAL(ret, headerLen + payload->size()); + BOOST_CHECK_EQUAL(decodeMsg->length(), headerLen + payload->size()); + BOOST_CHECK_EQUAL(decodeMsg->packetType(), packetType); + BOOST_CHECK_EQUAL(decodeMsg->seq(), seq); + BOOST_CHECK_EQUAL(decodeMsg->ext(), ext); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), payload->size()); + + // test invalid message + std::string invalidMessage = + "GET / HTTP/1.1\r\nHost: 127.0.0.1:20200\r\nUpgrade: websocket\r\nConnection: " + "upgrade\r\nSec-WebSocket-Key: lkBb9dFFu4tuMNJyXAWIfQ==\r\nSec-WebSocket-Version: " + "13\r\n\r\n"; + auto invalidMsgBytes = asBytes(invalidMessage); + auto p2pMsg = std::static_pointer_cast(factory->buildMessage()); + p2pMsg->setVersion(_version); + if (_version > 0) + { + BOOST_CHECK_THROW(p2pMsg->decode(ref(invalidMsgBytes)), std::out_of_range); + } + else + { + BOOST_CHECK_EQUAL( + p2pMsg->decode(ref(invalidMsgBytes)), MessageDecodeStatus::MESSAGE_INCOMPLETE); + } +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage_withoutOptions) +{ + auto factory = std::make_shared(); + test_P2PMessageWithoutOptions(factory); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessageV2_withoutOptions) +{ + auto factory = std::make_shared(); + test_P2PMessageWithoutOptions(factory, 1); +} + + +BOOST_AUTO_TEST_CASE(test_P2PMessage_optionsCodec) +{ + { + auto options = std::make_shared(); + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(!r); + } + + { + auto options = std::make_shared(); + std::string groupID = "group"; + options->setGroupID(groupID); + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(!r); + } + + { + auto options = std::make_shared(); + std::string groupID = std::string(100000, 'a'); + std::string srcNodeID = "nodeID"; + + options->setGroupID(groupID); + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + options->setSrcNodeID(srcNodeIDPtr); + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(!r); // groupID overflow + } + + { + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = std::string(100000, 'a'); + options->setGroupID(groupID); + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + options->setSrcNodeID(srcNodeIDPtr); + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(!r); // srcNodeID overflow + } + + { + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = "nodeID"; + std::string dstNodeID = std::string(100000, 'a'); + + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + auto dstNodeIDPtr = std::make_shared(dstNodeID.begin(), dstNodeID.end()); + + options->setGroupID(groupID); + options->setSrcNodeID(srcNodeIDPtr); + options->dstNodeIDs().push_back(dstNodeIDPtr); + + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(!r); // srcNodeID overflow + } + + { + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = "nodeID"; + uint16_t moduleID = 12345; + + options->setModuleID(moduleID); + options->setGroupID(groupID); + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + options->setSrcNodeID(srcNodeIDPtr); + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(r); + + auto decodeOptions = std::make_shared(); + auto ret = decodeOptions->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(ret > 0); + BOOST_CHECK_EQUAL(groupID, decodeOptions->groupID()); + BOOST_CHECK_EQUAL(moduleID, decodeOptions->moduleID()); + BOOST_CHECK_EQUAL(srcNodeID, + std::string(decodeOptions->srcNodeID()->begin(), decodeOptions->srcNodeID()->end())); + BOOST_CHECK_EQUAL(0, decodeOptions->dstNodeIDs().size()); + } + + { + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = "nodeID"; + std::string dstNodeID = "nodeID"; + uint16_t moduleID = 11; + + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + auto dstNodeIDPtr = std::make_shared(dstNodeID.begin(), dstNodeID.end()); + + options->setModuleID(moduleID); + options->setGroupID(groupID); + options->setSrcNodeID(srcNodeIDPtr); + auto& dstNodeIDS = options->dstNodeIDs(); + dstNodeIDS.push_back(dstNodeIDPtr); + dstNodeIDS.push_back(dstNodeIDPtr); + dstNodeIDS.push_back(dstNodeIDPtr); + + auto buffer = std::make_shared(); + auto r = options->encode(*buffer.get()); + BOOST_CHECK(r); + + auto decodeOptions = std::make_shared(); + auto ret = decodeOptions->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(ret > 0); + BOOST_CHECK_EQUAL(groupID, decodeOptions->groupID()); + BOOST_CHECK_EQUAL(moduleID, decodeOptions->moduleID()); + BOOST_CHECK_EQUAL(srcNodeID, + std::string(decodeOptions->srcNodeID()->begin(), decodeOptions->srcNodeID()->end())); + BOOST_CHECK_EQUAL(3, decodeOptions->dstNodeIDs().size()); + for (size_t i = 0; i < 3; ++i) + { + BOOST_CHECK_EQUAL(dstNodeID, std::string(decodeOptions->dstNodeIDs()[i]->begin(), + decodeOptions->dstNodeIDs()[i]->end())); + } + } +} + +void testP2PMessageCodec(std::shared_ptr factory, uint32_t _version = 0) +{ + auto encodeMsg = std::static_pointer_cast(factory->buildMessage()); + encodeMsg->setVersion(_version); + + uint16_t version = 0x1234; + uint32_t seq = 0x12345678; + uint16_t packetType = GatewayMessageType::PeerToPeerMessage; + uint16_t ext = 0x1101; + auto payload = std::make_shared(10000, 'a'); + + encodeMsg->setVersion(version); + encodeMsg->setSeq(seq); + encodeMsg->setPacketType(packetType); + encodeMsg->setExt(ext); + encodeMsg->setPayload(payload); + + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = "nodeID"; + std::string dstNodeID = "nodeID"; + + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + auto dstNodeIDPtr = std::make_shared(dstNodeID.begin(), dstNodeID.end()); + + options->setGroupID(groupID); + options->setSrcNodeID(srcNodeIDPtr); + auto& dstNodeIDS = options->dstNodeIDs(); + dstNodeIDS.push_back(dstNodeIDPtr); + dstNodeIDS.push_back(dstNodeIDPtr); + + encodeMsg->setOptions(options); + + auto buffer = std::make_shared(); + auto r = encodeMsg->encode(*buffer.get()); + BOOST_CHECK(r); + + auto decodeMsg = std::static_pointer_cast(factory->buildMessage()); + auto ret = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(ret > 0); + + BOOST_CHECK_EQUAL(decodeMsg->version(), version); + BOOST_CHECK_EQUAL(decodeMsg->packetType(), packetType); + BOOST_CHECK_EQUAL(decodeMsg->seq(), seq); + BOOST_CHECK_EQUAL((decodeMsg->ext() & ext), ext); + BOOST_CHECK_EQUAL(decodeMsg->payload()->size(), payload->size()); + + auto decodeOptions = decodeMsg->options(); + BOOST_CHECK_EQUAL(groupID, decodeOptions->groupID()); + BOOST_CHECK_EQUAL(srcNodeID, + std::string(decodeOptions->srcNodeID()->begin(), decodeOptions->srcNodeID()->end())); + BOOST_CHECK_EQUAL(2, decodeOptions->dstNodeIDs().size()); + for (size_t i = 0; i < 2; ++i) + { + BOOST_CHECK_EQUAL(dstNodeID, std::string(decodeOptions->dstNodeIDs()[i]->begin(), + decodeOptions->dstNodeIDs()[i]->end())); + } +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage_codec) +{ + auto factory = std::make_shared(); + testP2PMessageCodec(factory); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessageV2_codec) +{ + auto factory = std::make_shared(); + testP2PMessageCodec(factory, 1); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage_compress) +{ + auto factory = std::make_shared(); + auto encodeMsg = std::static_pointer_cast(factory->buildMessage()); + auto encodeMsgWithoutCompress = std::static_pointer_cast(factory->buildMessage()); + + // only version >= V2 support p2p network compress + uint16_t version = 2; + uint32_t seq = 0x12345678; + uint16_t packetType = GatewayMessageType::PeerToPeerMessage; + uint16_t ext = 0x1101; + auto payload = std::make_shared(10000, 'a'); + auto smallPayload = std::make_shared(1, 'a'); + + encodeMsg->setVersion(version); + encodeMsg->setSeq(seq); + encodeMsg->setPacketType(packetType); + encodeMsg->setExt(ext); + encodeMsg->setPayload(payload); + + auto options = std::make_shared(); + std::string groupID = "group"; + std::string srcNodeID = "nodeID"; + std::string dstNodeID = "nodeID"; + + auto srcNodeIDPtr = std::make_shared(srcNodeID.begin(), srcNodeID.end()); + auto dstNodeIDPtr = std::make_shared(dstNodeID.begin(), dstNodeID.end()); + + options->setGroupID(groupID); + options->setSrcNodeID(srcNodeIDPtr); + auto& dstNodeIDS = options->dstNodeIDs(); + dstNodeIDS.push_back(dstNodeIDPtr); + dstNodeIDS.push_back(dstNodeIDPtr); + + encodeMsg->setOptions(options); + + // compress payload + auto compressData = std::make_shared(); + auto r = encodeMsg->tryToCompressPayload(compressData); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL((encodeMsg->ext() & bcos::protocol::MessageExtFieldFlag::Compress), + bcos::protocol::MessageExtFieldFlag::Compress); + + // uncompress payload that don't compress + // size of payload smaller than 1kb, so payload don't be compressed + encodeMsg->setPayload(smallPayload); + auto buffer = std::make_shared(); + auto retWithoutCompress = encodeMsg->encode(*buffer.get()); + BOOST_CHECK(retWithoutCompress); + auto decodeMsg = std::static_pointer_cast(factory->buildMessage()); + auto ret = decodeMsg->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK_EQUAL(ret, MessageDecodeStatus::MESSAGE_ERROR); +} + +BOOST_AUTO_TEST_CASE(test_P2PMessage_attr) +{ + auto attr = std::make_shared(); + std::string group = "group0"; + uint16_t moduleID = 1001; + attr->setGroupID(group); + attr->setModuleID(moduleID); + + BOOST_CHECK_EQUAL(attr->groupID(), group); + BOOST_CHECK_EQUAL(attr->moduleID(), moduleID); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-gateway/test/unittests/GatewayNodeManagerTest.cpp b/bcos-gateway/test/unittests/GatewayNodeManagerTest.cpp new file mode 100644 index 0000000..a364067 --- /dev/null +++ b/bcos-gateway/test/unittests/GatewayNodeManagerTest.cpp @@ -0,0 +1,449 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for GatewayNodeManager + * @file GatewayNodeManagerTest.cpp + * @author: octopus + * @date 2021-05-14 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::test; +using namespace bcos::protocol; + +BOOST_FIXTURE_TEST_SUITE(GatewayNodeManagerTest, TestPromptFixture) + +class FakeGatewayNodeManager : public GatewayNodeManager +{ +public: + FakeGatewayNodeManager() : GatewayNodeManager("", nullptr, nullptr) + { + m_keyFactory = std::make_shared(); + } + ~FakeGatewayNodeManager() override {} + + bool statusChanged(std::string const& _p2pNodeID, uint32_t _seq) + { + return GatewayNodeManager::statusChanged(_p2pNodeID, _seq); + } + uint32_t statusSeq() { return GatewayNodeManager::statusSeq(); } + + bytesPointer generateNodeStatus() override { return GatewayNodeManager::generateNodeStatus(); } + void updatePeerStatus(std::string const& _p2pID, GatewayNodeStatus::Ptr _status) override + { + return GatewayNodeManager::updatePeerStatus(_p2pID, _status); + } + void setStatusSeq(std::string const& _nodeID, uint32_t _seq) { m_p2pID2Seq[_nodeID] = _seq; } + void start() override {} + void stop() override {} +}; + +inline GatewayNodeStatus::Ptr createGatewayNodeStatus( + int32_t _seq, std::string const& _uuid, std::vector _groupInfos) +{ + auto gatewayNodeStatus = std::make_shared(); + gatewayNodeStatus->setSeq(_seq); + gatewayNodeStatus->setUUID(_uuid); + gatewayNodeStatus->setGroupNodeInfos(std::move(_groupInfos)); + return gatewayNodeStatus; +} + +inline GroupNodeInfo::Ptr createGroupNodeInfo( + std::string const& _groupID, std::vector _nodeIDList) +{ + auto groupNodeInfo = std::make_shared(); + groupNodeInfo->setGroupID(_groupID); + for (auto const& nodeID : _nodeIDList) + { + auto protocolInfo = std::make_shared( + ProtocolModuleID::NodeService, ProtocolVersion::V1, ProtocolVersion::V1); + groupNodeInfo->appendProtocol(protocolInfo); + } + groupNodeInfo->setNodeIDList(std::move(_nodeIDList)); + return groupNodeInfo; +} + +class FakeGateway : public Gateway +{ +public: + FakeGateway() : Gateway() {} + ~FakeGateway() override {} + + void start() override {} + void stop() override {} +}; + +BOOST_AUTO_TEST_CASE(test_P2PMessage_statusSeqChanged) +{ + auto gatewayNodeManager = std::make_shared(); + std::string p2pID = "1"; + bool changed = false; + changed = gatewayNodeManager->statusChanged(p2pID, 1); + BOOST_CHECK(changed); +} + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_registerFrontService) +{ + auto gatewayNodeManager = std::make_shared(); + std::string groupID = "group"; + std::string strNodeID = "nodeID"; + auto keyFactory = std::make_shared(); + + auto nodeID = + keyFactory->createKey(bytesConstRef((bcos::byte*)strNodeID.data(), strNodeID.size())); + + auto frontServiceFactory = std::make_shared(); + frontServiceFactory->setGatewayInterface(std::make_shared()); + + auto frontService = frontServiceFactory->buildFrontService(groupID, nodeID); + + bool r = false; + auto seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, bcos::protocol::NodeType::CONSENSUS_NODE, + frontService, g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + auto s = gatewayNodeManager->localRouterTable()->getGroupFrontServiceList(groupID); + BOOST_CHECK(!s.empty()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, bcos::protocol::NodeType::CONSENSUS_NODE, + nullptr, g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, false); + BOOST_CHECK_EQUAL(seq, gatewayNodeManager->statusSeq()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->unregisterNode(groupID, nodeID->hex()); + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + s = gatewayNodeManager->localRouterTable()->getGroupFrontServiceList(groupID); + BOOST_CHECK(s.empty()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, bcos::protocol::NodeType::CONSENSUS_NODE, + nullptr, g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + s = gatewayNodeManager->localRouterTable()->getGroupFrontServiceList(groupID); + BOOST_CHECK(!s.empty()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, bcos::protocol::NodeType::CONSENSUS_NODE, + nullptr, g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, false); + BOOST_CHECK_EQUAL(seq, gatewayNodeManager->statusSeq()); + s = gatewayNodeManager->localRouterTable()->getGroupFrontServiceList(groupID); + BOOST_CHECK(!s.empty()); +} + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_registerFrontService_loop) +{ + auto gatewayNodeManager = std::make_shared(); + size_t loopCount = 100; + auto keyFactory = std::make_shared(); + + for (size_t i = 0; i < loopCount; i++) + { + std::string strNodeID = "nodeID" + std::to_string(i); + std::string groupID = "group" + std::to_string(i); + + auto nodeID = + keyFactory->createKey(bytesConstRef((bcos::byte*)strNodeID.data(), strNodeID.size())); + + auto seq = gatewayNodeManager->statusSeq(); + bool r = gatewayNodeManager->registerNode(groupID, nodeID, + bcos::protocol::NodeType::CONSENSUS_NODE, nullptr, + g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, + bcos::protocol::NodeType::CONSENSUS_NODE, nullptr, + g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK_EQUAL(r, false); + BOOST_CHECK_EQUAL(seq, gatewayNodeManager->statusSeq()); + + auto statusData = gatewayNodeManager->generateNodeStatus(); + BOOST_CHECK(!statusData->empty()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->unregisterNode(groupID, nodeID->hex()); + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->unregisterNode(groupID, nodeID->hex()); + BOOST_CHECK_EQUAL(r, false); + BOOST_CHECK_EQUAL(seq, gatewayNodeManager->statusSeq()); + } +} + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_onRequestNodeStatus) +{ + auto gatewayNodeManager = std::make_shared(); + auto keyFactory = std::make_shared(); + + for (size_t i = 0; i < 100; i++) + { + std::string groupID = "group" + std::to_string(i); + std::string strNodeID = "nodeID" + std::to_string(i); + + auto nodeID = + keyFactory->createKey(bytesConstRef((bcos::byte*)strNodeID.data(), strNodeID.size())); + + bool r = false; + auto seq = gatewayNodeManager->statusSeq(); + r = gatewayNodeManager->registerNode(groupID, nodeID, + bcos::protocol::NodeType::CONSENSUS_NODE, nullptr, + g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService)); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(seq + 1, gatewayNodeManager->statusSeq()); + + auto nodeStatusData = gatewayNodeManager->generateNodeStatus(); + BOOST_CHECK(!nodeStatusData->empty()); + + uint32_t statusSeq; + auto gatewayStatus = std::make_shared(); + gatewayStatus->decode(bytesConstRef(nodeStatusData->data(), nodeStatusData->size())); + BOOST_CHECK_EQUAL(seq + 1, gatewayStatus->seq()); + } +} + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_statusEncodeDecode) +{ + auto gatewayNodeManager = std::make_shared(); + auto gatewayNodeStatus = std::make_shared(); + gatewayNodeStatus->setSeq(110); + gatewayNodeStatus->setUUID("testuuid"); + std::vector groupNodeInfos; + // group1 + auto group1Info = std::make_shared(); + group1Info->setGroupID("group1"); + std::vector nodeIDList = {"a0", "b0", "c0"}; + group1Info->setNodeIDList(std::move(nodeIDList)); + groupNodeInfos.emplace_back(group1Info); + + // group2 + auto group2Info = std::make_shared(); + group2Info->setGroupID("group2"); + std::vector nodeIDList2 = {"a1", "b1", "c1"}; + group2Info->setNodeIDList(std::move(nodeIDList2)); + groupNodeInfos.emplace_back(group2Info); + + // group3 + auto group3Info = std::make_shared(); + group3Info->setGroupID("group3"); + std::vector nodeIDList3 = {"a2", "b2", "c2"}; + group3Info->setNodeIDList(std::move(nodeIDList3)); + groupNodeInfos.emplace_back(group3Info); + + gatewayNodeStatus->setGroupNodeInfos(std::move(groupNodeInfos)); + + // encode + auto encodeData = gatewayNodeStatus->encode(); + + // decode + auto decodedStatus = std::make_shared(); + decodedStatus->decode(bytesConstRef(encodeData->data(), encodeData->size())); + + // check + BOOST_CHECK_EQUAL(decodedStatus->seq(), 110); + BOOST_CHECK_EQUAL(decodedStatus->uuid(), "testuuid"); + auto const& groupInfos = decodedStatus->groupNodeInfos(); + BOOST_CHECK(groupInfos.size() == 3); + BOOST_CHECK(groupInfos[0]->groupID() == "group1"); + BOOST_CHECK(groupInfos[0]->nodeIDList().size() == 3); + BOOST_CHECK(groupInfos[0]->nodeIDList()[0] == "a0"); + BOOST_CHECK(groupInfos[0]->nodeIDList()[1] == "b0"); + BOOST_CHECK(groupInfos[0]->nodeIDList()[2] == "c0"); + + BOOST_CHECK(groupInfos[1]->groupID() == "group2"); + BOOST_CHECK(groupInfos[1]->nodeIDList().size() == 3); + BOOST_CHECK(groupInfos[1]->nodeIDList()[0] == "a1"); + BOOST_CHECK(groupInfos[1]->nodeIDList()[1] == "b1"); + BOOST_CHECK(groupInfos[1]->nodeIDList()[2] == "c1"); + + BOOST_CHECK(groupInfos[2]->groupID() == "group3"); + BOOST_CHECK(groupInfos[2]->nodeIDList().size() == 3); + BOOST_CHECK(groupInfos[2]->nodeIDList()[0] == "a2"); + BOOST_CHECK(groupInfos[2]->nodeIDList()[1] == "b2"); + BOOST_CHECK(groupInfos[2]->nodeIDList()[2] == "c2"); +} + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_onReceiveGroupNodeInfo) +{ + auto gatewayNodeManager = std::make_shared(); + auto gatewayNodeStatus = + createGatewayNodeStatus(110, "testUUID", std::vector()); + std::string p2pID = "xxxxxxxxxxxxxxxxxxxxx"; + + gatewayNodeManager->updatePeerStatus(p2pID, gatewayNodeStatus); + bool changed = false; + + changed = gatewayNodeManager->statusChanged(p2pID, 110); + BOOST_CHECK(!changed); + gatewayNodeManager->setStatusSeq(p2pID, 110); + + changed = gatewayNodeManager->statusChanged(p2pID, 111); + BOOST_CHECK(changed); + + changed = gatewayNodeManager->statusChanged(p2pID, 109); + BOOST_CHECK(!changed); +} + + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_query) +{ + auto gatewayNodeManager = std::make_shared(); + std::vector groupInfos; + std::string group1 = "group1"; + auto group1Info = createGroupNodeInfo(group1, {"a0", "b0", "c0"}); + groupInfos.emplace_back(group1Info); + + std::string group2 = "group2"; + auto group2Info = createGroupNodeInfo(group2, {"a1", "b1", "c1"}); + groupInfos.emplace_back(group2Info); + + std::string group3 = "group3"; + auto group3Info = createGroupNodeInfo(group3, {"a2", "b2", "c2"}); + groupInfos.emplace_back(group3Info); + + auto status = createGatewayNodeStatus(110, "testUUID", groupInfos); + + std::string p2pID1 = "xxxxx"; + std::string p2pID2 = "yyyyy"; + std::string p2pID3 = "zzzzz"; + + gatewayNodeManager->updatePeerStatus(p2pID1, status); + + auto p2pIDs1 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group1); + BOOST_CHECK_EQUAL(p2pIDs1.size(), 1); + BOOST_CHECK_EQUAL(*p2pIDs1.begin(), p2pID1); + + auto groupInfo = gatewayNodeManager->getGroupNodeInfoList(group1); + auto const& nodeIDList = groupInfo->nodeIDList(); + BOOST_CHECK_EQUAL(nodeIDList.size(), 3); + + auto p2pIDs2 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group1, "a0"); + BOOST_CHECK_EQUAL(p2pIDs2.size(), 1); + BOOST_CHECK_EQUAL(*p2pIDs2.begin(), p2pID1); + + gatewayNodeManager->updatePeerStatus(p2pID2, status); + + auto p2pIDs3 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group2); + BOOST_CHECK_EQUAL(p2pIDs3.size(), 2); + + auto p2pIDs4 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group2, "a1"); + BOOST_CHECK_EQUAL(p2pIDs4.size(), 2); + + gatewayNodeManager->updatePeerStatus(p2pID3, status); + + auto p2pIDs5 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group3); + BOOST_CHECK_EQUAL(p2pIDs5.size(), 3); + + auto p2pIDs6 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group3, "a2"); + BOOST_CHECK_EQUAL(p2pIDs6.size(), 3); +} + + +BOOST_AUTO_TEST_CASE(test_GatewayNodeManager_remove) +{ + auto gatewayNodeManager = std::make_shared(); + + std::vector groupInfos; + std::string group1 = "group1"; + auto group1Info = createGroupNodeInfo(group1, {"a0", "b0", "c0"}); + groupInfos.emplace_back(group1Info); + + std::string group2 = "group2"; + auto group2Info = createGroupNodeInfo(group2, {"a1", "b1", "c1"}); + groupInfos.emplace_back(group2Info); + + std::string group3 = "group3"; + auto group3Info = createGroupNodeInfo(group3, {"a2", "b2", "c2"}); + groupInfos.emplace_back(group3Info); + + auto status = createGatewayNodeStatus(110, "testUUID", groupInfos); + + std::string p2pID1 = "xxxxx"; + std::string p2pID2 = "yyyyy"; + std::string p2pID3 = "zzzzz"; + + gatewayNodeManager->updatePeerStatus(p2pID1, status); + gatewayNodeManager->updatePeerStatus(p2pID2, status); + gatewayNodeManager->updatePeerStatus(p2pID3, status); + + { + auto p2pIDs1 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group1); + BOOST_CHECK_EQUAL(p2pIDs1.size(), 3); + BOOST_CHECK(p2pIDs1.find(p2pID2) != p2pIDs1.end()); + BOOST_CHECK(p2pIDs1.find(p2pID3) != p2pIDs1.end()); + BOOST_CHECK(p2pIDs1.find(p2pID1) != p2pIDs1.end()); + + auto p2pIDs2 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group1, "a0"); + BOOST_CHECK_EQUAL(p2pIDs2.size(), 3); + BOOST_CHECK(p2pIDs2.find(p2pID2) != p2pIDs2.end()); + BOOST_CHECK(p2pIDs2.find(p2pID3) != p2pIDs2.end()); + BOOST_CHECK(p2pIDs2.find(p2pID1) != p2pIDs2.end()); + } + + gatewayNodeManager->onRemoveNodeIDs(p2pID1); + { + auto p2pIDs1 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group1); + BOOST_CHECK_EQUAL(p2pIDs1.size(), 2); + BOOST_CHECK(p2pIDs1.find(p2pID2) != p2pIDs1.end()); + BOOST_CHECK(p2pIDs1.find(p2pID3) != p2pIDs1.end()); + + auto p2pIDs2 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group1, "a0"); + BOOST_CHECK_EQUAL(p2pIDs2.size(), 2); + BOOST_CHECK(p2pIDs2.find(p2pID2) != p2pIDs2.end()); + BOOST_CHECK(p2pIDs2.find(p2pID3) != p2pIDs2.end()); + } + + gatewayNodeManager->onRemoveNodeIDs(p2pID2); + { + auto p2pIDs1 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group1); + BOOST_CHECK_EQUAL(p2pIDs1.size(), 1); + BOOST_CHECK(p2pIDs1.find(p2pID3) != p2pIDs1.end()); + + auto p2pIDs2 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group1, "a0"); + BOOST_CHECK_EQUAL(p2pIDs2.size(), 1); + BOOST_CHECK(p2pIDs2.find(p2pID3) != p2pIDs2.end()); + } + + gatewayNodeManager->onRemoveNodeIDs(p2pID3); + { + auto p2pIDs1 = gatewayNodeManager->peersRouterTable()->queryP2pIDsByGroupID(group1); + BOOST_CHECK(p2pIDs1.empty()); + + auto p2pIDs2 = gatewayNodeManager->peersRouterTable()->queryP2pIDs(group1, "a0"); + BOOST_CHECK(p2pIDs2.empty()); + } +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/unittests/ModuleWhiteListTest.cpp b/bcos-gateway/test/unittests/ModuleWhiteListTest.cpp new file mode 100644 index 0000000..0f97924 --- /dev/null +++ b/bcos-gateway/test/unittests/ModuleWhiteListTest.cpp @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for ModuleWhiteList + * @file GatewayFactoryTest.cpp + * @author: octopus + * @date 2021-05-17 + */ + +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace gateway; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(ModuleWhiteListTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_moduleWhiteList) +{ + bcos::gateway::ratelimiter::ModuleWhiteList moduleWhiteList; + + BOOST_CHECK(!moduleWhiteList.isModuleExist(1001)); + + BOOST_CHECK(moduleWhiteList.addModuleID(1001)); + BOOST_CHECK(moduleWhiteList.isModuleExist(1001)); + + BOOST_CHECK(!moduleWhiteList.addModuleID(1001)); + BOOST_CHECK(moduleWhiteList.isModuleExist(1001)); + + moduleWhiteList.removeModuleID(1001); + BOOST_CHECK(!moduleWhiteList.isModuleExist(1001)); + BOOST_CHECK(!moduleWhiteList.removeModuleID(1001)); + BOOST_CHECK(!moduleWhiteList.isModuleExist(1001)); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/unittests/RateLimiterManagerTest.cpp b/bcos-gateway/test/unittests/RateLimiterManagerTest.cpp new file mode 100644 index 0000000..f4498ce --- /dev/null +++ b/bcos-gateway/test/unittests/RateLimiterManagerTest.cpp @@ -0,0 +1,330 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for RateLimiterManager + * @file RateLimiterManagerTest.cpp + * @author: octopus + * @date 2021-05-17 + */ + +#include "bcos-gateway/libratelimit/RateLimiterManager.h" +#include "bcos-gateway/libratelimit/DistributedRateLimiter.h" +#include "bcos-gateway/libratelimit/RateLimiterFactory.h" +#include "bcos-gateway/libratelimit/TokenBucketRateLimiter.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace gateway; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(RateLimiterManagerTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_rateLimiterManager) +{ + auto gatewayFactory = std::make_shared("", ""); + bcos::gateway::GatewayConfig::RateLimiterConfig rateLimiterConfig; + bcos::gateway::GatewayConfig::RedisConfig redisConfig; + auto rateLimiterManager = gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + auto rateLimiterFactory = rateLimiterManager->rateLimiterFactory(); + + BOOST_CHECK(!rateLimiterConfig.enableRateLimit()); + BOOST_CHECK(!rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + + BOOST_CHECK(!rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(!rateLimiterConfig.enableGroupRateLimit); + BOOST_CHECK(!rateLimiterConfig.enableDistributedRatelimit); + + BOOST_CHECK(rateLimiterManager->getRateLimiter("192.108.0.0") == nullptr); + + BOOST_CHECK(rateLimiterManager->registerRateLimiter( + "192.108.0.0", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + BOOST_CHECK(!rateLimiterManager->registerRateLimiter( + "192.108.0.0", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + + BOOST_CHECK(rateLimiterManager->getRateLimiter("192.108.0.0") != nullptr); + BOOST_CHECK(rateLimiterManager->removeRateLimiter("192.108.0.0")); + BOOST_CHECK(!rateLimiterManager->removeRateLimiter("192.108.0.0")); + + BOOST_CHECK(rateLimiterManager->getRateLimiter("192.108.0.0") == nullptr); + + BOOST_CHECK(rateLimiterManager->registerRateLimiter( + "192.108.0.0", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + BOOST_CHECK(rateLimiterManager->getRateLimiter("192.108.0.0") != nullptr); +} + +BOOST_AUTO_TEST_CASE(test_rateLimiterManagerDefaultConfig) +{ + auto gatewayFactory = std::make_shared("", ""); + + bcos::gateway::GatewayConfig::RateLimiterConfig rateLimiterConfig; + auto rateLimiterManager = gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + BOOST_CHECK(!rateLimiterConfig.enableRateLimit()); + BOOST_CHECK(!rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(!rateLimiterConfig.enableGroupRateLimit); + BOOST_CHECK(!rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + + BOOST_CHECK(rateLimiterManager->getRateLimiter( + bcos::gateway::ratelimiter::RateLimiterManager::TOTAL_OUTGOING_KEY) == nullptr); + + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group0") == nullptr); + BOOST_CHECK(!rateLimiterManager->removeRateLimiter(("group0"))); + + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.1") == nullptr); + BOOST_CHECK(!rateLimiterManager->removeRateLimiter("192.108.0.1")); +} + +BOOST_AUTO_TEST_CASE(test_rateLimiterManagerConfigIPv4) +{ + std::string configIni("data/config/config_ipv4.ini"); + + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(configIni, pt); + + auto config = std::make_shared(); + config->initRateLimitConfig(pt); + + BOOST_CHECK(config->rateLimiterConfig().enableRateLimit()); + BOOST_CHECK(config->rateLimiterConfig().enableConRateLimit); + BOOST_CHECK(config->rateLimiterConfig().enableGroupRateLimit); + BOOST_CHECK(config->rateLimiterConfig().enableDistributedRatelimit); + BOOST_CHECK(config->rateLimiterConfig().enableDistributedRateLimitCache); + BOOST_CHECK_EQUAL(config->rateLimiterConfig().distributedRateLimitCachePercent, 13); + + auto rateLimiterConfig = config->rateLimiterConfig(); + auto gatewayFactory = std::make_shared("", ""); + auto rateLimiterManager = gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + auto rateLimiterFactory = rateLimiterManager->rateLimiterFactory(); + + BOOST_CHECK(rateLimiterFactory != nullptr); + + { + /* + ; default bandwidth limit for the group + group_outgoing_bw_limit=5 + ; specify group to limit bandwidth, group_groupName=n + group_outgoing_bw_limit_group0=2.0 + group_outgoing_bw_limit_group1 = 2.0 + group_outgoing_bw_limit_group2= 2.0 + */ + + BOOST_CHECK_EQUAL(config->rateLimiterConfig().groupOutgoingBwLimit, 5 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + config->rateLimiterConfig().group2BwLimit.find("group0")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + config->rateLimiterConfig().group2BwLimit.find("group1")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL( + config->rateLimiterConfig().group2BwLimit.find("group2")->second, 2 * 1024 * 1024 / 8); + BOOST_CHECK(config->rateLimiterConfig().group2BwLimit.find("group3") == + config->rateLimiterConfig().group2BwLimit.end()); + + + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group0") != nullptr); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group1") != nullptr); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group2") != nullptr); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group3") != nullptr); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group4") != nullptr); + + BOOST_CHECK(rateLimiterManager->removeRateLimiter("group3")); + BOOST_CHECK(!rateLimiterManager->removeRateLimiter("group3")); + BOOST_CHECK(rateLimiterManager->removeRateLimiter("group2")); + BOOST_CHECK(!rateLimiterManager->removeRateLimiter("group2")); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group2") != nullptr); + BOOST_CHECK(!rateLimiterManager->registerRateLimiter( + "group2", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group2") != nullptr); + BOOST_CHECK(rateLimiterManager->removeRateLimiter("group2")); + BOOST_CHECK(rateLimiterManager->getGroupRateLimiter("group2") != nullptr); + + { + auto rateLimiterManager = + gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + BOOST_CHECK(rateLimiterConfig.enableGroupRateLimit); + BOOST_CHECK(rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + + auto distributedRateLimiter0 = + std::dynamic_pointer_cast( + rateLimiterManager->getGroupRateLimiter("group0")); + + BOOST_CHECK_EQUAL( + distributedRateLimiter0->rateLimitKey(), rateLimiterFactory->toTokenKey("group0")); + BOOST_CHECK_EQUAL(distributedRateLimiter0->enableLocalCache(), true); + BOOST_CHECK_EQUAL(distributedRateLimiter0->localCachePercent(), 13); + BOOST_CHECK_EQUAL(distributedRateLimiter0->interval(), 1); + BOOST_CHECK_EQUAL(distributedRateLimiter0->maxPermits(), 2 * 1024 * 1024 / 8); + + auto distributedRateLimiter1 = + std::dynamic_pointer_cast( + rateLimiterManager->getGroupRateLimiter("group1")); + + BOOST_CHECK_EQUAL( + distributedRateLimiter1->rateLimitKey(), rateLimiterFactory->toTokenKey("group1")); + BOOST_CHECK_EQUAL(distributedRateLimiter1->enableLocalCache(), true); + BOOST_CHECK_EQUAL(distributedRateLimiter1->localCachePercent(), 13); + BOOST_CHECK_EQUAL(distributedRateLimiter1->interval(), 1); + BOOST_CHECK_EQUAL(distributedRateLimiter1->maxPermits(), 2 * 1024 * 1024 / 8); + + auto distributedRateLimiter2 = + std::dynamic_pointer_cast( + rateLimiterManager->getGroupRateLimiter("group3")); + + BOOST_CHECK_EQUAL( + distributedRateLimiter2->rateLimitKey(), rateLimiterFactory->toTokenKey("group3")); + BOOST_CHECK_EQUAL(distributedRateLimiter2->enableLocalCache(), true); + BOOST_CHECK_EQUAL(distributedRateLimiter2->localCachePercent(), 13); + BOOST_CHECK_EQUAL(distributedRateLimiter2->interval(), 1); + BOOST_CHECK_EQUAL(distributedRateLimiter2->maxPermits(), 5 * 1024 * 1024 / 8); + } + } + + { + /* + conn_outgoing_bw_limit=2 + ; specify IP to limit bandwidth, format: conn_outgoing_bw_limit_x.x.x.x=n + conn_outgoing_bw_limit_192.108.0.1=1.0 + conn_outgoing_bw_limit_192.108.0.2 =2.0 + conn_outgoing_bw_limit_192.108.0.3= 3.0 + */ + BOOST_CHECK_EQUAL(config->rateLimiterConfig().connOutgoingBwLimit, 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(config->rateLimiterConfig().ip2BwLimit.find("192.108.0.1")->second, + 1 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(config->rateLimiterConfig().ip2BwLimit.find("192.108.0.2")->second, + 2 * 1024 * 1024 / 8); + BOOST_CHECK_EQUAL(config->rateLimiterConfig().ip2BwLimit.find("192.108.0.3")->second, + 3 * 1024 * 1024 / 8); + BOOST_CHECK(config->rateLimiterConfig().ip2BwLimit.find("192.108.0.0") == + config->rateLimiterConfig().ip2BwLimit.end()); + + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.1") != nullptr); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.2") != nullptr); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.3") != nullptr); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.0") != nullptr); + + BOOST_CHECK(!rateLimiterManager->registerRateLimiter( + "192.108.0.0", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.0") != nullptr); + + BOOST_CHECK(!rateLimiterManager->registerRateLimiter( + "192.108.0.0", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + + BOOST_CHECK(rateLimiterManager->removeRateLimiter("192.108.0.2")); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.2") != nullptr); + BOOST_CHECK(rateLimiterManager->removeRateLimiter("192.108.0.2")); + + BOOST_CHECK(rateLimiterManager->registerRateLimiter( + "192.108.0.2", rateLimiterFactory->buildTokenBucketRateLimiter(10))); + BOOST_CHECK(rateLimiterManager->getConnRateLimiter("192.108.0.2") != nullptr); + + { + // rate limiter factory + auto rateLimiterManager = + gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + BOOST_CHECK(rateLimiterConfig.enableGroupRateLimit); + BOOST_CHECK(rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK(rateLimiterConfig.enableDistributedRateLimitCache); + + auto rateLimiter0 = std::dynamic_pointer_cast( + rateLimiterManager->getConnRateLimiter("192.108.0.1")); + + BOOST_CHECK_EQUAL(rateLimiter0->maxQPS(), 1 * 1024 * 1024 / 8); + + auto rateLimiter1 = std::dynamic_pointer_cast( + rateLimiterManager->getConnRateLimiter("192.108.0.2")); + + BOOST_CHECK_EQUAL(rateLimiter1->maxQPS(), 2 * 1024 * 1024 / 8); + + auto rateLimiter2 = std::dynamic_pointer_cast( + rateLimiterManager->getConnRateLimiter("192.108.0.3")); + + BOOST_CHECK_EQUAL(rateLimiter2->maxQPS(), 3 * 1024 * 1024 / 8); + + auto rateLimiter3 = std::dynamic_pointer_cast( + rateLimiterManager->getConnRateLimiter("192.108.0.4")); + + BOOST_CHECK_EQUAL(rateLimiter3->maxQPS(), 2 * 1024 * 1024 / 8); + } + } +} + +BOOST_AUTO_TEST_CASE(test_rateLimiterManagerConfigIPv6) +{ + std::string configIni("data/config/config_ipv6.ini"); + + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(configIni, pt); + + auto config = std::make_shared(); + config->initRateLimitConfig(pt); + + auto rateLimiterConfig = config->rateLimiterConfig(); + auto gatewayFactory = std::make_shared("", ""); + auto rateLimiterManager = gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + auto rateLimiterFactory = rateLimiterManager->rateLimiterFactory(); + + BOOST_CHECK(rateLimiterFactory != nullptr); + + BOOST_CHECK(rateLimiterConfig.totalOutgoingBwLimit > 0); + BOOST_CHECK(rateLimiterConfig.connOutgoingBwLimit > 0); + BOOST_CHECK(rateLimiterConfig.groupOutgoingBwLimit > 0); + + BOOST_CHECK(rateLimiterConfig.enableRateLimit()); + BOOST_CHECK(rateLimiterConfig.enableConRateLimit); + BOOST_CHECK(rateLimiterConfig.enableGroupRateLimit); + BOOST_CHECK(!rateLimiterConfig.enableDistributedRatelimit); + BOOST_CHECK_EQUAL(rateLimiterConfig.enableDistributedRateLimitCache, true); + BOOST_CHECK_EQUAL(rateLimiterConfig.distributedRateLimitCachePercent, 20); + + { + // rate limiter manager + auto rateLimiterManager = + gatewayFactory->buildRateLimiterManager(rateLimiterConfig, nullptr); + + auto tokenBucketRateLimiter0 = + std::dynamic_pointer_cast( + rateLimiterManager->getGroupRateLimiter("group0")); + + BOOST_CHECK_EQUAL(tokenBucketRateLimiter0->maxQPS(), 1024 * 1024 / 8); + + auto tokenBucketRateLimiter1 = + std::dynamic_pointer_cast( + rateLimiterManager->getConnRateLimiter("127.0.0.1")); + + BOOST_CHECK_EQUAL(tokenBucketRateLimiter1->maxQPS(), 2 * 1024 * 1024 / 8); + + auto tokenBucketRateLimiter2 = + std::dynamic_pointer_cast( + rateLimiterManager->getRateLimiter( + bcos::gateway::ratelimiter::RateLimiterManager::TOTAL_OUTGOING_KEY)); + + BOOST_CHECK_EQUAL(tokenBucketRateLimiter2->maxQPS(), 3 * 1024 * 1024 / 8); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-gateway/test/unittests/amop/AMOPMessageTest.cpp b/bcos-gateway/test/unittests/amop/AMOPMessageTest.cpp new file mode 100644 index 0000000..c290edc --- /dev/null +++ b/bcos-gateway/test/unittests/amop/AMOPMessageTest.cpp @@ -0,0 +1,104 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for AMOPMessage + * @file AMOPMessageTest.cpp + * @author: octopus + * @date 2021-06-21 + */ + +#include +#include +#include + +using namespace bcos; +using namespace bcos::amop; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(AMOPMessageTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_initAMOPMessage) +{ + auto messageFactory = std::make_shared(); + { + auto message = messageFactory->buildMessage(); + auto buffer = std::make_shared(); + message->encode(*buffer.get()); + BOOST_CHECK_EQUAL(buffer->size(), AMOPMessage::HEADER_LENGTH); + + auto decodeMessage = messageFactory->buildMessage(); + auto r = decodeMessage->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(r > 0); + BOOST_CHECK_EQUAL(decodeMessage->type(), 0); + BOOST_CHECK_EQUAL(decodeMessage->data().size(), 0); + } + + { + uint16_t type = 111; + std::string topic = "topic"; + std::string data = "Hello, FISCO-BCOS 3.0"; + auto message = messageFactory->buildMessage(); + message->setType(type); + message->setData(data); + auto buffer = std::make_shared(); + message->encode(*buffer.get()); + + auto decodeMessage = messageFactory->buildMessage(); + auto r = decodeMessage->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(r > 0); + BOOST_CHECK_EQUAL(decodeMessage->type(), type); + BOOST_CHECK_EQUAL( + data, std::string(decodeMessage->data().begin(), decodeMessage->data().end())); + } + + { + uint16_t type = 1234; + std::string topic(65535, '1'); + std::string data(10000, '1'); + auto message = messageFactory->buildMessage(); + message->setType(type); + message->setData(bytesConstRef((byte*)data.data(), data.size())); + auto buffer = std::make_shared(); + message->encode(*buffer.get()); + + auto decodeMessage = messageFactory->buildMessage(); + auto r = decodeMessage->decode(bytesConstRef(buffer->data(), buffer->size())); + BOOST_CHECK(r > 0); + BOOST_CHECK_EQUAL(decodeMessage->type(), type); + BOOST_CHECK_EQUAL( + data, std::string(decodeMessage->data().begin(), decodeMessage->data().end())); + } + + { + auto decodeMessage = messageFactory->buildMessage(); + auto r = decodeMessage->decode(bytesConstRef("")); + BOOST_CHECK(r < 0); + } +} + +BOOST_AUTO_TEST_CASE(test_AMOPMessageTopicOverflow) +{ + auto messageFactory = std::make_shared(); + + uint16_t type = 1234; + std::string data(10000, '1'); + auto message = messageFactory->buildMessage(); + message->setType(type); + message->setData(bytesConstRef((byte*)data.data(), data.size())); + auto buffer = std::make_shared(); + auto r = message->encode(*buffer.get()); + BOOST_CHECK(r); +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/unittests/amop/TopicManagerTest.cpp b/bcos-gateway/test/unittests/amop/TopicManagerTest.cpp new file mode 100644 index 0000000..9af23ce --- /dev/null +++ b/bcos-gateway/test/unittests/amop/TopicManagerTest.cpp @@ -0,0 +1,139 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for TopicManager + * @file TopicManagerTest.cpp + * @author: octopus + * @date 2021-06-21 + */ +#include "bcos-gateway/libamop/AirTopicManager.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::amop; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(TopicManagerTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_initTopicManager) +{ + auto topicManager = std::make_shared("", nullptr); + { + auto jsonValue = topicManager->queryTopicsSubByClient(); + + uint32_t topicSeq; + TopicItems topicItems; + auto b = topicManager->parseTopicItemsJson(topicSeq, topicItems, jsonValue); + BOOST_CHECK(b); + BOOST_CHECK(topicSeq == 1); + BOOST_CHECK(topicItems.empty()); + } + + { + auto seq = topicManager->topicSeq(); + BOOST_CHECK(seq == 1); + topicManager->incTopicSeq(); + BOOST_CHECK(topicManager->topicSeq() == (seq + 1)); + topicManager->incTopicSeq(); + BOOST_CHECK(topicManager->topicSeq() == (seq + 2)); + } +} + +BOOST_AUTO_TEST_CASE(test_parseTopicItemsJson) +{ + auto topicManager = std::make_shared("", nullptr); + { + uint32_t topicSeq; + TopicItems topicItems; + std::string json = ""; + auto r = topicManager->parseTopicItemsJson(topicSeq, topicItems, json); + BOOST_CHECK(!r); + } + { + uint32_t topicSeq; + TopicItems topicItems; + std::string json = "{\"topicSeq\":111,\"topicItems\":[]}"; + auto r = topicManager->parseTopicItemsJson(topicSeq, topicItems, json); + BOOST_CHECK(r); + BOOST_CHECK(topicSeq == 111); + BOOST_CHECK(topicItems.size() == 0); + } + { + uint32_t topicSeq; + TopicItems topicItems; + std::string json = "{\"topicSeq\":123,\"topicItems\":[\"a\",\"b\",\"c\"]}"; + auto r = topicManager->parseTopicItemsJson(topicSeq, topicItems, json); + BOOST_CHECK(r); + BOOST_CHECK(topicSeq == 123); + BOOST_CHECK(topicItems.size() == 3); + auto a = std::string("a"); + BOOST_CHECK(std::find_if(topicItems.begin(), topicItems.end(), + [a](const TopicItem& _topicItem) { return _topicItem.topicName() == a; }) != + topicItems.end()); + auto b = std::string("b"); + BOOST_CHECK(std::find_if(topicItems.begin(), topicItems.end(), + [b](const TopicItem& _topicItem) { return _topicItem.topicName() == b; }) != + topicItems.end()); + auto c = std::string("c"); + BOOST_CHECK(std::find_if(topicItems.begin(), topicItems.end(), + [c](const TopicItem& _topicItem) { return _topicItem.topicName() == c; }) != + topicItems.end()); + } +} + +BOOST_AUTO_TEST_CASE(test_subTopics) +{ + auto topicManager = std::make_shared("", nullptr); + + std::string clientID = "client"; + { + TopicItems topicItems; + auto r = topicManager->queryTopicItemsByClient(clientID, topicItems); + BOOST_CHECK(!r); + BOOST_CHECK(topicItems.empty()); + } + + + { + TopicItems topicItems; + std::vector topics{"topic0", "topic1", "topic2", "topic3"}; + for (const auto& topic : topics) + { + topicItems.insert(TopicItem(topic)); + } + auto seq = topicManager->topicSeq(); + // sub topics + topicManager->subTopic(clientID, topicItems); + topicItems.clear(); + auto r = topicManager->queryTopicItemsByClient(clientID, topicItems); + BOOST_CHECK(r); + BOOST_CHECK(topicItems.size() == topics.size()); + BOOST_CHECK(topicManager->topicSeq() == (seq + 1)); + + auto jsonValue = topicManager->queryTopicsSubByClient(); + BOOST_CHECK(!jsonValue.empty()); + + uint32_t topicSeqFromJson; + TopicItems topicItemsFromJson; + auto b = topicManager->parseTopicItemsJson(topicSeqFromJson, topicItemsFromJson, jsonValue); + BOOST_CHECK(b); + BOOST_CHECK(topicSeqFromJson = topicManager->topicSeq()); + BOOST_CHECK(topicItemsFromJson.size() == topicItems.size()); + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-gateway/test/unittests/data/ca/ca.crt b/bcos-gateway/test/unittests/data/ca/ca.crt new file mode 100644 index 0000000..0fd06e3 --- /dev/null +++ b/bcos-gateway/test/unittests/data/ca/ca.crt @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFVTCCAz2gAwIBAgIUQ6VUY9KboNNT74eeimEXBT/WoF4wDQYJKoZIhvcNAQEL +BQAwOjETMBEGA1UEAwwKRklTQ08tQkNPUzETMBEGA1UECgwKRklTQ08tQkNPUzEO +MAwGA1UECwwFY2hhaW4wHhcNMjEwNTIwMTE0NzI1WhcNMzEwNTE4MTE0NzI1WjA6 +MRMwEQYDVQQDDApGSVNDTy1CQ09TMRMwEQYDVQQKDApGSVNDTy1CQ09TMQ4wDAYD +VQQLDAVjaGFpbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO4KcrDe +Zo7xwM8fw0x73At+7x49xm2B35/PLKcZGteSOP/+0FhUXuDWr+TuFtCYtyRTlvlj +WeCu2W3RsaQ80iBEU/GZ/mD9eDcoI8J/AiYN049BfXi+AEtM6geLKdaQWT7QAsyP +vTNu5x7wIzA6K55q1m7oGFEvIcxIJqifC8Nx5EuNo2znOPEZD2n+4lWQCRV8wOWD +huhtx9j6Caek291b3FdesIh+JsrVvly3rQU1wk0Vw6/e9GV5nJ4nVgTCXuitsOnL ++VAP2p7UwHQ02YOFR3S7p+kDImNjWhNdRjmUObkdRy9B/SryVplEys1kD3hQ5S6K +q9Ygze8KLPx1QkhxQs6Tog86s0Zg+po5jEISwH7rty6L56RZMd4a/6YvCiaAWT7l +RrTKEKBBtjX+uD9Oo/FQfpjNNRYZHp+Bl1a0eQ9z9poD3OPtp2cDHCVtBUUAWk3g +QI3PmO2RQ+Te90jWrWv4dOdh5bccSgWISXofwcOTm+aDjUjFd+EEzpdk7TcXZy7Z +/LQEdCH4g9BPR/0Cytf4DK3fLMw3iscxD+5hQWoyfL7I01RVA47hckNU1wsR57bS +6UjIoITMiMTZU9Wn34mz8bQO9rV6lirKCm7W7+7nCDdaCowJWBDG+9hLaDWVxodq +Thn/Zxj3jZcu47DQgpeGs5Ob0gDWFkzr3N4NAgMBAAGjUzBRMB0GA1UdDgQWBBT9 +CvGcCNbgVQoB/JwjWwU8wEjbJTAfBgNVHSMEGDAWgBT9CvGcCNbgVQoB/JwjWwU8 +wEjbJTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQDGmlAsQaiM ++zLMadnPtbXs0Pjy0jamOrQ0pkfZmpSWLQ6hX6PPDw8evdqHs3U5nmdqAmizf9FO +OREaNQeR/UYexiH+98MBEXDXRcoXCnH5CpcANlI5tY90WG+lLXwNIjSZPz8jkcAu +7mnEUywGCHVrJgTLULD6Xr2piQycb5rz7Ljrt1v+GsMci4Jl6pX4wCIpEgdmXOMf +87iSSgaK2ub/hnTnlWBvuIOz8IdlrOzK129JO4Eao3pHTH4J3hRreXb5eKWP9vUI +6vz7ZqOUrYwo56pdP+u6i830qpM14VWYxHjJWWUdReM0Cfs5kn0yhHQDHxTT3pcB +wk1ACM6MJW0gpGuj3XfDFMAtPAj4ncvn237NKfTM4daDY/x+vPmyyclMFO6F8Qvq +S7B2mA9m/fcOCZqg1JTC8kND8+dv81B4DsX732XenFc80pSc5kh32RWzG4kRzDcu +2dIFWwdzLXrmYEl3HleG6daE3BX/X0TOzfTgneRTtZcOSQsbODf1wQkKpmDSOx+k +qQP5iZMWNDI45Ba/NBBxcdcL+hOzwlDzNcPf6OtDWnFFr8uaaK9MTuSQG3Z6kRpA +/E3mnheLTBsEmsY62NTytQBn2Ye2DQ1rnPztrGkgQfSfPheY1fHTNMJjiakmtiKy +g7b+mYIq6Wt4WDum5EGP9s+3nAFeYajNqg== +-----END CERTIFICATE----- diff --git a/bcos-gateway/test/unittests/data/ca/node.crt b/bcos-gateway/test/unittests/data/ca/node.crt new file mode 100644 index 0000000..d56e145 --- /dev/null +++ b/bcos-gateway/test/unittests/data/ca/node.crt @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFEzCCAvugAwIBAgIUOXkrcknudy8U2eev1i08W0WihEEwDQYJKoZIhvcNAQEL +BQAwOjETMBEGA1UEAwwKRklTQ08tQkNPUzETMBEGA1UECgwKRklTQ08tQkNPUzEO +MAwGA1UECwwFY2hhaW4wHhcNMjEwNTIwMTE0NzMwWhcNMzEwNTE4MTE0NzMwWjA7 +MRMwEQYDVQQDDApGSVNDTy1CQ09TMRMwEQYDVQQKDApmaXNjby1iY29zMQ8wDQYD +VQQLDAZhZ2VuY3kwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDPYhXC +lguLP3xQosIqs0RfQb/xYxdAOiKHNoEYkko/lnRyqTQt+8TXl6oNefMFs4bn3C02 +3jSF8LSRWNQKLqgnLFqo/VpW5zHZOLvhQNps+QRE0koJqsyxdIC011D7NYUf+U1R +Vl5JRcwQ2MDvj84GbdkfI5vrSWVCJUAIkElzaqNwrn5i16aHvEM9WtPzT5gG/qDw +E4iX9LmVwOu4phHZF6xBra6D2bmfOY5HQFM++TBQFwzUZXiVEHRzIuXkr6OfQKE1 +xCXdrN26J9MDwINa27PKZJz24Jt/e3J/JfMp77ThLjoJnd9vnmw5DjIz79QTfF6Z +Y61IztTzw0ZmEsoPCAeqJUZ2XnhbT//a/o31kZLthkITbod37cPiUc+2tpV5KlU5 +8JOX7LqtEdqccoJZ2nhOSXRu1VqFn02TMfORErSnVZSJCT5/5ZKhAi9I//uZ2pnS +0qeQMjX7zxioMlkspT4QjtaIR3lnYW5siUMbegZyjpuIPy4Zr2lFT5bhoAkGF+J1 +Pq0xK15I1SSF9PZpz2+juswfnXButhrXunHF8ABe0q7kr4kpochVo59SzFWp6qgk +iwkqxJLeZ2avAr5iTVRrsjvxwts1IeDuGsHSvOAYzICWU00MMFW5tiN0LIgtnwhp +4v+l5YvXCYx+xuwhMalc8ae/UiXKFg6g8LwwdwIDAQABoxAwDjAMBgNVHRMEBTAD +AQH/MA0GCSqGSIb3DQEBCwUAA4ICAQC4pqWoKp3XO/+Xh5FPYxvIGd4FsDiCoDTJ ++k8GCyu8gsHZ79bMJKUo/J2UpackKoDAB3nVUueuGj4ZmTJVNeU8a1oBl8RPkMet +pniHQQ2zK5FEac3mG89N75uKmRQUfudaTzL2h89N3EmeaVKVdAggYrqUU5FrSFG3 +3Lp/r4pFsSGJaq5ylX5gQ4u9mP+BS4LNgKWjPiBsSIiubiZjzcvMMI+ObEeIX/zS +lpRrpIH1aeEgbumTfNR+g0jveC9wGDOKcIH75kC5rwCXSi6VvgHEXxdo5+Ika129 +yu9AXMSYuH0Ed89fX53UrwBCKQiogJoG+j8qPRoWJJFDKt+nzvyrpda+8LooDbi1 +/zOska0TmzWUrhTi6erpKn3suY1u1sFy0OD9fhL87K53Y3tr47AadkwIGyUiened +CbIHWxhdRMCGKQTrMSInDqeQHP/U7Z29kYiru/oDZDrfHIXgFo4Q07aGftlGG5Wb +ZI/XrLZKkX1U8FmDs/9A7nYHV71uVZXA6I95TGIKmdpT4WOwXAVbG3KGcBIxrV07 +Pq3ClLwg4sLXadGoYRKW+P5PNqbLzbdSf3GPhZehChRDGJCCOhpRTlzB67kKtyUM +UPLjH2rZHeGnFb9MyOBUpazZMIH0knHJieD6sZSPwVL7ukehsNMA22aqOvL71fY/ +baXis2i1KA== +-----END CERTIFICATE----- diff --git a/bcos-gateway/test/unittests/data/ca/node.key b/bcos-gateway/test/unittests/data/ca/node.key new file mode 100644 index 0000000..9b2f75e --- /dev/null +++ b/bcos-gateway/test/unittests/data/ca/node.key @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +489TEvuAazj7512RODaWSseV5TrJ27Qt +-----END PRIVATE KEY----- diff --git a/bcos-gateway/test/unittests/data/config/config_ipv4.ini b/bcos-gateway/test/unittests/data/config/config_ipv4.ini new file mode 100644 index 0000000..b70a523 --- /dev/null +++ b/bcos-gateway/test/unittests/data/config/config_ipv4.ini @@ -0,0 +1,57 @@ +[p2p] + ; ssl or sm ssl + sm_ssl=false + listen_ip=127.0.0.1 + listen_port=12345 + nodes_path=data/config/json/ + nodes_file=nodes_ipv4.json + +[cert] + ; directory the certificates located in + ca_path=data/ca/ + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + node_key=node.key + ; the node certificate file + node_cert=node.crt + +[redis] + server_ip=127.127.127.127 + server_port=12345 + request_timeout=54321 + connection_pool_size=111 + password=abc + db=12 + + [flow_control] + enable_distributed_ratelimit=true + enable_distributed_ratelimit_cache=true + distributed_ratelimit_cache_percent=13 + stat_reporter_interval=12345 + + ; the module that does not limit bandwidth + ; list of all modules: raft,pbft,amop,block_sync,txs_sync + ; + modules_without_bw_limit=raft,pbft,txs_sync,amop + + ; restrict the outgoing bandwidth of the node + ; both integer and decimal is support, unit: Mb + ; + total_outgoing_bw_limit=10 + + ; restrict the outgoing bandwidth of the the connection + ; both integer and decimal is support, unit: Mb + ; + conn_outgoing_bw_limit=2 + ; specify IP to limit bandwidth, format: conn_outgoing_bw_limit_x.x.x.x=n + conn_outgoing_bw_limit_192.108.0.1=1.0 + conn_outgoing_bw_limit_192.108.0.2 =2.0 + conn_outgoing_bw_limit_192.108.0.3= 3.0 + + ; default bandwidth limit for the group + group_outgoing_bw_limit=5 + ; specify group to limit bandwidth, group_groupName=n + group_outgoing_bw_limit_group0=2.0 + group_outgoing_bw_limit_group1 = 2.0 + group_outgoing_bw_limit_group2= 2.0 \ No newline at end of file diff --git a/bcos-gateway/test/unittests/data/config/config_ipv6.ini b/bcos-gateway/test/unittests/data/config/config_ipv6.ini new file mode 100644 index 0000000..2461b4f --- /dev/null +++ b/bcos-gateway/test/unittests/data/config/config_ipv6.ini @@ -0,0 +1,49 @@ +[p2p] + ; ssl or sm ssl + sm_ssl=true + listen_ip=0.0.0.0 + listen_port=54321 + nodes_path=../../../bcos-gateway/test/unittests/data/config/json/ + nodes_file=nodes_ipv6.json +[cert] + ; directory the certificates located in + ca_path=../../../bcos-gateway/test/unittests/data/sm_ca/ + ; the ca certificate file + sm_ca_cert=sm_ca.crt + ; the node private key file + sm_node_key=sm_node.key + ; the node certificate file + sm_node_cert=sm_node.crt + ; the node private key file + sm_ennode_key=sm_ennode.key + ; the node certificate file + sm_ennode_cert=sm_ennode.crt + +[flow_control] + ; the module that does not limit bandwidth + ; list of all modules: raft,pbft,amop,block_sync,txs_sync + ; + ; modules_without_bw_limit=raft,pbft,txs_sync + + ; restrict the outgoing bandwidth of the node + ; both integer and decimal is support, unit: Mb + ; + total_outgoing_bw_limit=3.0 + + ; restrict the outgoing bandwidth of the the connection + ; both integer and decimal is support, unit: Mb + ; + conn_outgoing_bw_limit=2.0 + ; specify IP to limit bandwidth, format: ip_x.x.x.x=n + + ; default bandwidth limit for the group + group_outgoing_bw_limit=1.0 + ; specify group to limit bandwidth, group_groupName=n + +[redis] + server_ip=127.127.127.127 + server_port=12345 + request_timeout=54321 + connection_pool_size=111 + password=abc + db=12 \ No newline at end of file diff --git a/bcos-gateway/test/unittests/data/config/json/nodes_ipv4.json b/bcos-gateway/test/unittests/data/config/json/nodes_ipv4.json new file mode 100644 index 0000000..6edd586 --- /dev/null +++ b/bcos-gateway/test/unittests/data/config/json/nodes_ipv4.json @@ -0,0 +1 @@ +{"nodes":["127.0.0.1:30300","127.0.0.1:30301","127.0.0.1:30302"]} \ No newline at end of file diff --git a/bcos-gateway/test/unittests/data/config/json/nodes_ipv6.json b/bcos-gateway/test/unittests/data/config/json/nodes_ipv6.json new file mode 100644 index 0000000..535925a --- /dev/null +++ b/bcos-gateway/test/unittests/data/config/json/nodes_ipv6.json @@ -0,0 +1 @@ +{"nodes":["[fe80::1a9d:50ae:3207:80d9]:30300"]} \ No newline at end of file diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_ca.crt b/bcos-gateway/test/unittests/data/sm_ca/sm_ca.crt new file mode 100644 index 0000000..4dea0fa --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_ca.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBwzCCAWqgAwIBAgIJALH5EDzvxroQMAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMCAX +DTIxMDUyMDEwNDQzM1oYDzIxMjEwNDI2MTA0NDMzWjA3MRAwDgYDVQQDDAdnbWNo +YWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjBZMBMGByqG +SM49AgEGCCqBHM9VAYItA0IABFiVCiTx3zgl1SqZb2xFfFWl2SANx6/yCqfifQCT +x+JRvGustdpx1vVlMEuVUWr8qNR60eobopi83ygYdwds5WOjXTBbMB0GA1UdDgQW +BBQeINDcgl/xfjSC5QAuVb0yqYiyRjAfBgNVHSMEGDAWgBQeINDcgl/xfjSC5QAu +Vb0yqYiyRjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAKBggqgRzPVQGDdQNH +ADBEAiBvqT4UITuUz7tYu6zNh6BPiQgWuwRPiNDAjwIP6V9oAQIgOs+XfvSr4Ca2 +5Mu7qfUBZR26D7Dht93N6kxqYnPdk2Q= +-----END CERTIFICATE----- diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.crt b/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.crt new file mode 100644 index 0000000..b999e17 --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBgzCCASqgAwIBAgIJAOy1CxhahqUnMAoGCCqBHM9VAYN1MDsxEzARBgNVBAMM +CmFnZW5jeV9zb24xEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j +eTAgFw0yMTA1MjAxMDQ0MzRaGA8yMTIxMDQyNjEwNDQzNFowNjEOMAwGA1UEAwwF +bm9kZTAxEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmVubm9kZTBZMBMG +ByqGSM49AgEGCCqBHM9VAYItA0IABM+CEHxscS6uhB1qjP/1ZBioa0WvDBm2OIn9 +DoDlRA0bi9O90uKfQufh89WFma/JKIaeHdznnbRViNKMSO8BtKqjGjAYMAkGA1Ud +EwQCMAAwCwYDVR0PBAQDAgM4MAoGCCqBHM9VAYN1A0cAMEQCID3xo0UfLPeVSPsU +tmNaA5w9QHQbin91ocT3tw/KVc+MAiBE68Ibp6HScfG+eGiJTHIMgPDx9B6OeJIL +qK45DyDd4Q== +-----END CERTIFICATE----- diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.key b/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.key new file mode 100644 index 0000000..c1bcefb --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_ennode.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgPXQvW/xzm/S9w2np +OXpUZsj4Z7Gpf3feUhsHrZ3GNBShRANCAATPghB8bHEuroQdaoz/9WQYqGtFrwwZ +tjiJ/Q6A5UQNG4vTvdLin0Ln4fPVhZmvySiGnh3c5520VYjSjEjvAbSq +-----END PRIVATE KEY----- diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_node.crt b/bcos-gateway/test/unittests/data/sm_ca/sm_node.crt new file mode 100644 index 0000000..b5cba96 --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_node.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIBgzCCASigAwIBAgIJAOy1CxhahqUmMAoGCCqBHM9VAYN1MDsxEzARBgNVBAMM +CmFnZW5jeV9zb24xEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j +eTAgFw0yMTA1MjAxMDQ0MzRaGA8yMTIxMDQyNjEwNDQzNFowNDEOMAwGA1UEAwwF +bm9kZTAxEzARBgNVBAoMCmZpc2NvLWJjb3MxDTALBgNVBAsMBG5vZGUwWTATBgcq +hkjOPQIBBggqgRzPVQGCLQNCAARaDQZZVLvJbboOnuoWPZcKkYfD5fGmMp2vKJis +uIisLWaPTjs0tTjc0b54OdhqCGnKZHiRPP1ORsFRdYb5wLPAoxowGDAJBgNVHRME +AjAAMAsGA1UdDwQEAwIGwDAKBggqgRzPVQGDdQNJADBGAiEA6N06YOh+bCdjsoxA +M8XhOTZ/V1oOOieEwZ97ThzX8zcCIQDTL+Xo+s5X72VSP+970x1k3gJ1vgxksYRt +YCnkMs0hwQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBxjCCAWygAwIBAgIJALwX68WuI706MAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMB4X +DTIxMDUyMDEwNDQzM1oXDTMxMDUxODEwNDQzM1owOzETMBEGA1UEAwwKYWdlbmN5 +X3NvbjETMBEGA1UECgwKZmlzY28tYmNvczEPMA0GA1UECwwGYWdlbmN5MFkwEwYH +KoZIzj0CAQYIKoEcz1UBgi0DQgAE7n72jlrYJ0sAoDLFffStPZ7G4TsAgoCF4J/w +koSaoKt4/H2lSUINqVZTZb5O50uewnsHliGdrrsrzbmBwmXFIKNdMFswHQYDVR0O +BBYEFOS57Fr5XPgg1qIjWJDQiQZ2SMCMMB8GA1UdIwQYMBaAFB4g0NyCX/F+NILl +AC5VvTKpiLJGMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgEGMAoGCCqBHM9VAYN1 +A0gAMEUCIQDbfPxt13kaz8ey5v3C23yODyMn1ThP/QtW4jQQvEHLqwIgfUt9NPzY +XGD3x8BzGIdpJuXZIgjKzfYw0+5wTN/m9b8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBwzCCAWqgAwIBAgIJALH5EDzvxroQMAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMCAX +DTIxMDUyMDEwNDQzM1oYDzIxMjEwNDI2MTA0NDMzWjA3MRAwDgYDVQQDDAdnbWNo +YWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjBZMBMGByqG +SM49AgEGCCqBHM9VAYItA0IABFiVCiTx3zgl1SqZb2xFfFWl2SANx6/yCqfifQCT +x+JRvGustdpx1vVlMEuVUWr8qNR60eobopi83ygYdwds5WOjXTBbMB0GA1UdDgQW +BBQeINDcgl/xfjSC5QAuVb0yqYiyRjAfBgNVHSMEGDAWgBQeINDcgl/xfjSC5QAu +Vb0yqYiyRjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAKBggqgRzPVQGDdQNH +ADBEAiBvqT4UITuUz7tYu6zNh6BPiQgWuwRPiNDAjwIP6V9oAQIgOs+XfvSr4Ca2 +5Mu7qfUBZR26D7Dht93N6kxqYnPdk2Q= +-----END CERTIFICATE----- diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_node.key b/bcos-gateway/test/unittests/data/sm_ca/sm_node.key new file mode 100644 index 0000000..48dff27 --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_node.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgTMhT81W740vO5KzH +axpV+sfA0ApMBCvv9pDXuRNYqsqhRANCAARaDQZZVLvJbboOnuoWPZcKkYfD5fGm +Mp2vKJisuIisLWaPTjs0tTjc0b54OdhqCGnKZHiRPP1ORsFRdYb5wLPA +-----END PRIVATE KEY----- diff --git a/bcos-gateway/test/unittests/data/sm_ca/sm_node.nodeid b/bcos-gateway/test/unittests/data/sm_ca/sm_node.nodeid new file mode 100644 index 0000000..c56b7da --- /dev/null +++ b/bcos-gateway/test/unittests/data/sm_ca/sm_node.nodeid @@ -0,0 +1 @@ +5a0d065954bbc96dba0e9eea163d970a9187c3e5f1a6329daf2898acb888ac2d668f4e3b34b538dcd1be7839d86a0869ca6478913cfd4e46c1517586f9c0b3c0 diff --git a/bcos-leader-election/CMakeLists.txt b/bcos-leader-election/CMakeLists.txt new file mode 100644 index 0000000..84d89c8 --- /dev/null +++ b/bcos-leader-election/CMakeLists.txt @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-leader-election +# ------------------------------------------------------------------------------ +# Copyright (C) 2022 bcos-leader-election +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +if(WITH_TIKV) + + project(bcos-leader-election VERSION ${VERSION}) + + file(GLOB_RECURSE SRCS src/*.cpp) + find_package(etcd-cpp-api CONFIG REQUIRED) + find_package(gRPC REQUIRED) + add_library(${LEADER_ELECTION_TARGET} ${SRCS}) + target_link_libraries(${LEADER_ELECTION_TARGET} PUBLIC bcos-utilities bcos-framework etcd-cpp-api) +endif() \ No newline at end of file diff --git a/bcos-leader-election/src/CampaignConfig.cpp b/bcos-leader-election/src/CampaignConfig.cpp new file mode 100644 index 0000000..4bddbbe --- /dev/null +++ b/bcos-leader-election/src/CampaignConfig.cpp @@ -0,0 +1,145 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the configuration of campaign leader + * @file CampaignConfig.cpp + * @author: yujiechen + * @date 2022-04-26 + */ + +#include "CampaignConfig.h" + +using namespace bcos; +using namespace bcos::election; + +bcos::protocol::MemberInterface::Ptr CampaignConfig::fetchLeader() +{ + auto leader = getLeader(); + if (leader) + { + return leader; + } + // TODO: check the mode is sync or async + fetchLeaderInfoFromEtcd(); + return m_leader; +} + +bcos::protocol::MemberInterface::Ptr CampaignConfig::getLeader() +{ + ReadGuard l(x_leader); + return m_leader; +} + +void CampaignConfig::fetchLeaderInfoFromEtcd() +{ + try + { + ELECTION_LOG(INFO) << LOG_DESC("fetchLeaderInfoFromEtcd") << LOG_KV("key", m_leaderKey); + auto response = m_etcdClient->get(m_leaderKey).get(); + if (!checkAndUpdateLeaderKey(response)) + { + ELECTION_LOG(INFO) << LOG_DESC("fetchLeaderInfoFromEtcd failed") + << LOG_KV("key", m_leaderKey); + return; + } + ELECTION_LOG(INFO) << LOG_DESC("fetchLeaderInfoFromEtcd success") + << LOG_KV("leaderKey", m_leaderKey) + << LOG_KV("leaderID", m_leader->memberID()); + } + catch (std::exception const& e) + { + ELECTION_LOG(WARNING) << LOG_DESC("fetchLeaderInfoFromEtcd exception") + << LOG_KV("leaderKey", m_leaderKey) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +void CampaignConfig::resetLeader(bcos::protocol::MemberInterface::Ptr _leader) +{ + WriteGuard l(x_leader); + m_leader = _leader; +} + +bool CampaignConfig::checkAndUpdateLeaderKey(etcd::Response _response) +{ + if (!_response.is_ok()) + { + if (_response.error_code() != etcdv3::ERROR_KEY_NOT_FOUND) + { + ELECTION_LOG(WARNING) << LOG_DESC("checkAndUpdateLeaderKey error") + << LOG_KV("code", _response.error_code()) + << LOG_KV("msg", _response.error_message()) + << LOG_KV("key", m_leaderKey); + return false; + } + resetLeader(nullptr); + // the key has already been cleared or not has been set, calls m_triggerCampaign + if (m_triggerCampaign) + { + ELECTION_LOG(INFO) << LOG_DESC( + "checkAndUpdateLeaderKey: the leader key is not accupied " + "now, trigger campaign") + << LOG_KV("key", m_leaderKey); + m_triggerCampaign(); + } + return false; + } + auto valueVersion = _response.value().version(); + if (valueVersion == 0) + { + resetLeader(nullptr); + auto ret = m_triggerCampaign(); + ELECTION_LOG(WARNING) << LOG_DESC("The leader key is released now, trigger campaign") + << LOG_KV("key", m_leaderKey) << LOG_KV("success", ret); + return false; + } + auto leader = m_memberFactory->createMember(_response.value().as_string()); + auto seq = _response.value().modified_index(); + leader->setSeq(seq); + leader->setLeaseID(_response.value().lease()); + resetLeader(leader); + // calls campaignLeader try to tryToSwitchToBackup if the leader is not the node-self + if (m_triggerCampaign) + { + m_triggerCampaign(); + } + ELECTION_LOG(INFO) << LOG_DESC("checkAndUpdateLeaderKey success") + << LOG_KV("leaderKey", m_leaderKey) << LOG_KV("leader", m_leader->memberID()) + << LOG_KV("version", valueVersion) << LOG_KV("modifiedIndex", seq) + << LOG_KV("lease", leader->leaseID()); + return true; +} + +// Note: this handler is triggered when leaderKey changed +void CampaignConfig::onLeaderKeyChanged(etcd::Response _response) +{ + ELECTION_LOG(INFO) << LOG_DESC("onLeaderKeyChanged, checkAndUpdateLeaderKey") + << LOG_KV("leaderKey", m_leaderKey); + checkAndUpdateLeaderKey(_response); +} + + +void CampaignConfig::onElectionClusterRecover() +{ + if (m_electionClusterOk.load()) + { + return; + } + resetLeader(nullptr); + // fetch leader and trigger campaign again(Note: checkAndUpdateLeaderKey of fetchLeader will + // trigger leader campaign) + fetchLeader(); + ElectionConfig::onElectionClusterRecover(); +} \ No newline at end of file diff --git a/bcos-leader-election/src/CampaignConfig.h b/bcos-leader-election/src/CampaignConfig.h new file mode 100644 index 0000000..208dd54 --- /dev/null +++ b/bcos-leader-election/src/CampaignConfig.h @@ -0,0 +1,118 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the configuration of campaign leader + * @file CampaignConfig.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "ElectionConfig.h" + +namespace bcos +{ +namespace election +{ +class CampaignConfig : public ElectionConfig +{ +public: + using Ptr = std::shared_ptr; + CampaignConfig(bcos::protocol::MemberInterface::Ptr _self, std::string const& _etcdEndPoint, + bcos::protocol::MemberFactoryInterface::Ptr _memberFactory, std::string const& _leaderKey, + std::string const& _purpose, unsigned _leaseTTL = 3, const std::string& _caPath = "", + const std::string& _certPath = "", const std::string& _keyPath = "") + : ElectionConfig(_etcdEndPoint, _memberFactory, _purpose, _caPath, _certPath, _keyPath) + { + m_leaderKey = _leaderKey; + m_leaseTTL = _leaseTTL; + m_self = _self; + m_self->encode(m_leaderValue); + ELECTION_LOG(INFO) << LOG_DESC("CampaignConfig") << LOG_KV("selfID", m_self->memberID()) + << LOG_KV("key", m_leaderKey) << LOG_KV("leaderValue", m_leaderValue); + } + + ~CampaignConfig() override {} + + std::string const& leaderKey() const { return m_leaderKey; } + virtual bcos::protocol::MemberInterface::Ptr fetchLeader(); + virtual bcos::protocol::MemberInterface::Ptr getLeader(); + + virtual void setLeaderToSelf(int64_t _leaseID, int64_t _seq) + { + bcos::WriteGuard l(x_leader); + bcos::ReadGuard lock(x_self); + m_leader = m_memberFactory->createMember(); + m_leader->setMemberID(m_self->memberID()); + m_leader->setMemberConfig(m_self->memberConfig()); + m_leader->setSeq(_seq); + // update the lease + m_leader->setLeaseID(_leaseID); + } + + std::string const& leaderValue() const + { + ReadGuard l(x_self); + return m_leaderValue; + } + unsigned leaseTTL() const { return m_leaseTTL; } + bcos::protocol::MemberInterface::Ptr self() + { + ReadGuard l(x_self); + return m_self; + } + + void registerTriggerCampaignHandler(std::function _triggerCampaign) + { + m_triggerCampaign = _triggerCampaign; + } + + void updateSelf(bcos::protocol::MemberInterface::Ptr _self) + { + WriteGuard l(x_self); + m_self = _self; + m_self->encode(m_leaderValue); + } + +protected: + virtual void fetchLeaderInfoFromEtcd(); + virtual void onLeaderKeyChanged(etcd::Response _response); + bool checkAndUpdateLeaderKey(etcd::Response _response); + void onElectionClusterRecover() override; + void reCreateWatcher() override + { + m_watcher = std::make_shared(*m_etcdClient, m_leaderKey, + boost::bind(&CampaignConfig::onLeaderKeyChanged, this, boost::placeholders::_1)); + } + + void resetLeader(bcos::protocol::MemberInterface::Ptr _leader); + +protected: + // the leader key that multiple workers compete for, eg: "/consensus" + std::string m_leaderKey; + // default lease ttl is 3 seconds + unsigned m_leaseTTL = 5; + + // the campaign leader info, eg: the grpc/tars endpoint address + bcos::protocol::MemberInterface::Ptr m_self; + std::string m_leaderValue; + mutable SharedMutex x_self; + + bcos::protocol::MemberInterface::Ptr m_leader; + mutable bcos::SharedMutex x_leader; + + std::function m_triggerCampaign; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-leader-election/src/Common.h b/bcos-leader-election/src/Common.h new file mode 100644 index 0000000..d3313be --- /dev/null +++ b/bcos-leader-election/src/Common.h @@ -0,0 +1,21 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date 2022-04-26 + */ +#include +#define ELECTION_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("Election") \ No newline at end of file diff --git a/bcos-leader-election/src/ElectionConfig.cpp b/bcos-leader-election/src/ElectionConfig.cpp new file mode 100644 index 0000000..9fe2964 --- /dev/null +++ b/bcos-leader-election/src/ElectionConfig.cpp @@ -0,0 +1,92 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the election config + * @file ElectionConfig.cpp + * @author: yujiechen + * @date 2022-04-26 + */ +#include "ElectionConfig.h" + +using namespace bcos; +using namespace bcos::election; + +void ElectionConfig::start() +{ + reCreateWatcher(); + if (!m_watcher) + { + return; + } + m_watcherTimer = std::make_shared(5000); + auto self = std::weak_ptr(shared_from_this()); + m_watcherTimer->registerTimeoutHandler([self]() { + auto config = self.lock(); + if (!config) + { + return; + } + config->refreshWatcher(); + }); + m_watcherTimer->start(); +} + +void ElectionConfig::onElectionClusterRecover() +{ + if (m_electionClusterOk.load()) + { + return; + } + m_electionClusterOk.store(true); + if (m_onElectionClusterRecover) + { + m_onElectionClusterRecover(); + } +} + +void ElectionConfig::onElectionClusterDown() +{ + if (!m_electionClusterOk.load()) + { + return; + } + m_electionClusterOk.store(false); + if (m_onElectionClusterException) + { + m_onElectionClusterException(); + } +} + +void ElectionConfig::refreshWatcher() +{ + if (m_etcdClient->head().get().is_ok()) + { + onElectionClusterRecover(); + m_watcherTimer->restart(); + return; + } + m_watcherTimer->stop(); + ELECTION_LOG(WARNING) << LOG_DESC("The client disconnect, wait for reconnect success"); + onElectionClusterDown(); + // wait until the client connects to etcd server + while (!m_etcdClient->head().get().is_ok()) + { + boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); + } + onElectionClusterRecover(); + ELECTION_LOG(WARNING) << LOG_DESC("The client reconnect success, refreshWatcher"); + reCreateWatcher(); + m_watcherTimer->start(); +} \ No newline at end of file diff --git a/bcos-leader-election/src/ElectionConfig.h b/bcos-leader-election/src/ElectionConfig.h new file mode 100644 index 0000000..8db0c7d --- /dev/null +++ b/bcos-leader-election/src/ElectionConfig.h @@ -0,0 +1,110 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the election config + * @file ElectionConfig.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include + +#include +namespace bcos +{ +namespace election +{ +class ElectionConfig : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + ElectionConfig(std::string const& _etcdEndPoint, + bcos::protocol::MemberFactoryInterface::Ptr _memberFactory, std::string const& _purpose, + std::string const& _caPath = "", std::string const& _certPath = "", + std::string const& _keyPath = "") + : m_memberFactory(_memberFactory), m_purpose(_purpose) + { + if (!_caPath.empty() && !_certPath.empty() && !_keyPath.empty()) + { + m_etcdClient = std::make_shared( + _etcdEndPoint, _caPath, _certPath, _keyPath, "", "round_robin"); + } + else + { + m_etcdClient = std::make_shared(_etcdEndPoint); + } + } + + virtual void start(); + virtual void stop() + { + if (m_watcherTimer) + { + m_watcherTimer->stop(); + } + if (m_watcher) + { + m_watcher->Cancel(); + } + } + + virtual ~ElectionConfig() { stop(); } + + std::string const purpose() const { return m_purpose; } + std::shared_ptr etcdClient() { return m_etcdClient; } + bcos::protocol::MemberFactoryInterface::Ptr memberFactory() { return m_memberFactory; } + + bool electionClusterOk() const { return m_electionClusterOk.load(); } + void registerOnElectionClusterException(std::function _handler) + { + m_onElectionClusterException = _handler; + } + + void registerOnElectionClusterRecover(std::function _handler) + { + m_onElectionClusterRecover = _handler; + } + +protected: + virtual void refreshWatcher(); + virtual void reCreateWatcher() = 0; + virtual void onElectionClusterRecover(); + void onElectionClusterDown(); + +protected: + std::shared_ptr m_etcdClient; + std::shared_ptr m_watcher; + + bcos::protocol::MemberFactoryInterface::Ptr m_memberFactory; + std::string m_purpose; + + // regularly check the etcdClient inventory, and reset the watcher after disconnection and + // reconnection + std::shared_ptr m_watcherTimer; + + std::atomic_bool m_electionClusterOk = {true}; + + // called when the election-cluster down + std::function m_onElectionClusterException; + // called when the election-cluster recover + std::function m_onElectionClusterRecover; +}; +} // namespace election +} // namespace bcos diff --git a/bcos-leader-election/src/LeaderElection.cpp b/bcos-leader-election/src/LeaderElection.cpp new file mode 100644 index 0000000..0921ded --- /dev/null +++ b/bcos-leader-election/src/LeaderElection.cpp @@ -0,0 +1,249 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief leader-election + * @file LeaderElection.cpp + * @author: yujiechen + * @date 2022-04-26 + */ +#include "LeaderElection.h" +#include +#include + +using namespace bcos; +using namespace bcos::election; + +void LeaderElection::start() +{ + auto self = std::weak_ptr(shared_from_this()); + m_campaignTimer->registerTimeoutHandler([self]() { + auto leaderElection = self.lock(); + if (!leaderElection) + { + return; + } + leaderElection->campaignLeader(); + }); + if (m_config) + { + m_config->start(); + } + auto leader = m_config->fetchLeader(); + if (!leader) + { + return; + } + campaignLeader(); +} + +void LeaderElection::stop() +{ + if (m_campaignTimer) + { + m_campaignTimer->stop(); + } + if (m_config) + { + m_config->stop(); + } +} + +std::pair LeaderElection::grantLease() +{ + auto response = m_etcdClient->leasegrant(m_config->leaseTTL()).get(); + if (!response.is_ok()) + { + ELECTION_LOG(ERROR) << LOG_DESC("grantLease error") + << LOG_KV("msg", response.error_message()) + << LOG_KV("code", response.error_code()); + return std::make_pair(false, 0); + } + auto leaseID = response.value().lease(); + ELECTION_LOG(INFO) << LOG_DESC("grantLease success") << LOG_KV("id", leaseID) + << LOG_KV("ttl", response.value().ttl()) + << LOG_KV("purpose", m_config->purpose()); + return std::make_pair(true, leaseID); +} + +bool LeaderElection::campaignLeader() +{ + try + { + RecursiveGuard l(m_mutex); + // already has leader + if (m_config->getLeader()) + { + // tryToSwitchToBackup in case of the leader is not the node-self + tryToSwitchToBackup(); + return false; + } + auto ret = grantLease(); + if (!ret.first) + { + tryToSwitchToBackup(); + m_campaignTimer->restart(); + return false; + } + auto leaseID = ret.second; + auto tx = std::make_shared(m_config->leaderKey()); + tx->init_compare(0, etcdv3::CompareResult::EQUAL, etcdv3::CompareTarget::MOD); + tx->setup_basic_failure_operation(m_config->leaderKey()); + tx->setup_basic_create_sequence(m_config->leaderKey(), m_config->leaderValue(), leaseID); + auto response = m_etcdClient->txn(*tx).get(); + if (!response.is_ok()) + { + // failed for non-compare-failed error, restart campaign + if (response.error_code() != etcdv3::ERROR_COMPARE_FAILED) + { + m_campaignTimer->restart(); + } + else + { + // failed for compare-failed error, stop campaign + m_campaignTimer->stop(); + } + ELECTION_LOG(INFO) << LOG_DESC("campaignLeader error") + << LOG_KV("msg", response.error_message()) + << LOG_KV("code", response.error_code()) + << LOG_KV("purpose", m_config->purpose()) + << LOG_KV("lease", leaseID); + tryToSwitchToBackup(); + return false; + } + m_campaignTimer->stop(); + ELECTION_LOG(INFO) << LOG_DESC("campaignLeader success") + << LOG_KV("leaderKey", m_config->leaderKey()) + << LOG_KV("purpose", m_config->purpose()) << LOG_KV("lease", leaseID) + << LOG_KV("version", response.value().version()) + << LOG_KV("msg", response.error_message()) + << LOG_KV("value", response.value().as_string()) + << LOG_KV("key", response.value().key()); + // cancel the old keepAlive + if (m_keepAlive) + { + ELECTION_LOG(INFO) << LOG_DESC("campaignLeader: cancel keepAlive thread") + << LOG_KV("lease", m_keepAlive->Lease()) + << LOG_KV("leaderKey", m_config->leaderKey()); + m_keepAlive->Cancel(); + } + // establish new keepAlive + auto keepAliveTTL = m_config->leaseTTL() - 1; + m_keepAlive = std::make_shared(*(m_config->etcdClient()), + boost::bind(&LeaderElection::onKeepAliveException, this, boost::placeholders::_1), + keepAliveTTL, leaseID); + m_config->setLeaderToSelf(leaseID, response.value().modified_index()); + auto leader = m_config->getLeader(); + if (m_onCampaignHandler) + { + m_onCampaignHandler(true, leader); + } + ELECTION_LOG(INFO) + << LOG_DESC("campaignLeader: establish new keepAlive thread and switch to master-node") + << LOG_KV("ttl", keepAliveTTL) << LOG_KV("lease", leaseID) + << LOG_KV("leaderKey", m_config->leaderKey()); + return true; + } + catch (std::exception const& e) + { + ELECTION_LOG(WARNING) << LOG_DESC("campaignLeader exception") + << LOG_KV("error", boost::diagnostic_information(e)); + // release the leaderKey when exception + if (m_keepAlive) + { + ELECTION_LOG(INFO) << LOG_DESC("campaignLeader: cancel keepAlive thread for exception") + << LOG_KV("lease", m_keepAlive->Lease()) + << LOG_KV("leaderKey", m_config->leaderKey()); + m_keepAlive->Cancel(); + } + } + return false; +} + +void LeaderElection::onKeepAliveException(std::exception_ptr _exception) +{ + try + { + if (_exception) + { + std::rethrow_exception(_exception); + } + } + catch (const std::exception& e) + { + ELECTION_LOG(WARNING) << LOG_DESC("onKeepAliveException, restart campaign") + << LOG_KV("error", boost::diagnostic_information(e)); + } + if (m_campaignTimer) + { + m_campaignTimer->restart(); + } + if (m_onKeepAliveException) + { + m_onKeepAliveException(_exception); + } +} + +void LeaderElection::tryToSwitchToBackup() +{ + if (!m_onCampaignHandler) + { + return; + } + auto leader = m_config->getLeader(); + if (leader && m_config->self()->memberID() == leader->memberID()) + { + ELECTION_LOG(INFO) << LOG_DESC("tryToSwitchToBackup failed for the node-self is leader") + << LOG_KV("id", leader->memberID()); + return; + } + ELECTION_LOG(INFO) << LOG_DESC("tryToSwitchToBackup") + << LOG_KV("memberID", m_config->self()->memberID()) + << LOG_KV("leader", leader ? leader->memberID() : "no-leader"); + m_onCampaignHandler(false, leader); +} + +void LeaderElection::updateSelfConfig(bcos::protocol::MemberInterface::Ptr _self) +{ + RecursiveGuard l(m_mutex); + + m_config->updateSelf(_self); + ELECTION_LOG(INFO) << LOG_DESC("updateSelfConfig") << LOG_KV("ID", _self->memberID()); + // update the configuration if the node is leader + auto leader = m_config->getLeader(); + if (!leader || leader->memberID() != _self->memberID()) + { + ELECTION_LOG(INFO) << LOG_DESC("updateSelfConfig return for the node is not leader") + << LOG_KV("leaderID", leader ? leader->memberID() : "None"); + return; + } + auto leaseID = leader->leaseID(); + ELECTION_LOG(INFO) + << LOG_DESC("updateSelfConfig, the node-self is leader, sync the modified memberConfig") + << LOG_KV("lease", leaseID); + auto tx = std::make_shared(m_config->leaderKey()); + tx->init_lease_compare(leaseID, etcdv3::CompareResult::EQUAL, etcdv3::CompareTarget::LEASE); + tx->setup_basic_failure_operation(m_config->leaderKey()); + tx->setup_compare_and_swap_sequence(m_config->leaderValue(), leaseID); + auto response = m_etcdClient->txn(*tx).get(); + if (!response.is_ok()) + { + ELECTION_LOG(WARNING) << LOG_DESC("sync the modified memberConfig to storage error") + << LOG_KV("code", response.error_code()) + << LOG_KV("msg", response.error_message()) << LOG_KV("lease", leaseID) + << LOG_KV("leaderKey", m_config->leaderKey()); + return; + } + ELECTION_LOG(INFO) << LOG_DESC("updateSelfConfig success"); +} diff --git a/bcos-leader-election/src/LeaderElection.h b/bcos-leader-election/src/LeaderElection.h new file mode 100644 index 0000000..3e3acd1 --- /dev/null +++ b/bcos-leader-election/src/LeaderElection.h @@ -0,0 +1,95 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief leader-election + * @file LeaderElection.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "CampaignConfig.h" +#include +#include +#include +namespace bcos +{ +namespace election +{ +class LeaderElection : public LeaderElectionInterface, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + LeaderElection(CampaignConfig::Ptr _config) + : m_config(_config), m_etcdClient(_config->etcdClient()) + { + m_config->registerTriggerCampaignHandler( + boost::bind(&LeaderElection::campaignLeader, this)); + m_campaignTimer = std::make_shared(m_config->leaseTTL() * 1000); + } + ~LeaderElection() override { stop(); } + void start() override; + + void stop() override; + void updateSelfConfig(bcos::protocol::MemberInterface::Ptr _self) override; + bool electionClusterOk() const override { return m_config->electionClusterOk(); } + + // called when campaign success, this logic should start to work when campaign success + void registerOnCampaignHandler( + std::function _onCampaignHandler) override + { + // Note: m_onCampaignHandler can't been executed in threadPool + m_onCampaignHandler = _onCampaignHandler; + } + + // called when keep-alive exception + void registerKeepAliveExceptionHandler( + std::function _handler) override + { + m_onKeepAliveException = _handler; + } + + // handler called when the election cluster down + void registerOnElectionClusterException(std::function _handler) override + { + m_config->registerOnElectionClusterException(_handler); + } + // handler called when the election cluster recover + void registerOnElectionClusterRecover(std::function _handler) override + { + m_config->registerOnElectionClusterRecover(_handler); + } + +protected: + // campaign leader + virtual bool campaignLeader(); + // grant lease with given ttl + std::pair grantLease(); + virtual void onKeepAliveException(std::exception_ptr _exception); + virtual void tryToSwitchToBackup(); + +protected: + CampaignConfig::Ptr m_config; + std::shared_ptr m_etcdClient; + std::shared_ptr m_keepAlive; + std::function m_onKeepAliveException; + std::function m_onCampaignHandler; + mutable RecursiveMutex m_mutex; + + // for trigger campaign after disconnect + std::shared_ptr m_campaignTimer; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-leader-election/src/LeaderElectionFactory.h b/bcos-leader-election/src/LeaderElectionFactory.h new file mode 100644 index 0000000..2cd84fa --- /dev/null +++ b/bcos-leader-election/src/LeaderElectionFactory.h @@ -0,0 +1,63 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create leaderElection + * @file LeaderElectionFactory.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "LeaderElection.h" +#include +#include +#include + +namespace bcos +{ +namespace election +{ +class LeaderElectionFactory : public LeaderElectionFactoryInterface +{ +public: + using Ptr = std::shared_ptr; + LeaderElectionFactory(bcos::protocol::MemberFactoryInterface::Ptr _memberFactory) + : m_memberFactory(_memberFactory) + {} + ~LeaderElectionFactory() override {} + + LeaderElectionInterface::Ptr createLeaderElection(std::string const& _memberID, + std::string const& _memberConfig, std::string const& _etcdEndPoint, + std::string const& _leaderKey, std::string const& _purpose, unsigned _leaseTTL, + const std::string& _caPath, const std::string& _certPath, + const std::string& _keyPath) override + { + auto member = m_memberFactory->createMember(); + member->setMemberID(_memberID); + member->setMemberConfig(_memberConfig); + + auto config = std::make_shared(member, _etcdEndPoint, m_memberFactory, + _leaderKey, _purpose, _leaseTTL, _caPath, _certPath, _keyPath); + ELECTION_LOG(INFO) << LOG_DESC("createLeaderElection") << LOG_KV("memberID", _memberID) + << LOG_KV("etcdEndPoint", _etcdEndPoint) + << LOG_KV("leaderKey", _leaderKey) << LOG_KV("purpose", _purpose) + << LOG_KV("leaseTTL", _leaseTTL); + return std::make_shared(config); + } + +private: + bcos::protocol::MemberFactoryInterface::Ptr m_memberFactory; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-leader-election/src/LeaderEntryPoint.h b/bcos-leader-election/src/LeaderEntryPoint.h new file mode 100644 index 0000000..556f304 --- /dev/null +++ b/bcos-leader-election/src/LeaderEntryPoint.h @@ -0,0 +1,91 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the election config + * @file LeaderEntryPoint.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#include "WatcherConfig.h" +#include +#include + +namespace bcos +{ +namespace election +{ +class LeaderEntryPoint : public LeaderEntryPointInterface +{ +public: + using Ptr = std::shared_ptr; + LeaderEntryPoint(WatcherConfig::Ptr _config) : m_config(_config) {} + ~LeaderEntryPoint() {} + + void start() override { m_config->start(); } + void stop() override { m_config->stop(); } + bcos::protocol::MemberInterface::Ptr getLeaderByKey(std::string const& _leaderKey) override + { + return m_config->leader(_leaderKey); + } + std::map getAllLeaders() override + { + return m_config->keyToLeader(); + } + + void addMemberChangeNotificationHandler( + std::function _handler) + override + { + m_config->addMemberChangeNotificationHandler(_handler); + } + + void addMemberDeleteNotificationHandler( + std::function _handler) + override + { + m_config->addMemberDeleteNotificationHandler(_handler); + } + +private: + WatcherConfig::Ptr m_config; +}; + +class LeaderEntryPointFactoryImpl : public LeaderEntryPointFactory +{ +public: + using Ptr = std::shared_ptr(); + LeaderEntryPointFactoryImpl(bcos::protocol::MemberFactoryInterface::Ptr _memberFactory) + : m_memberFactory(_memberFactory) + {} + ~LeaderEntryPointFactoryImpl() override {} + + LeaderEntryPointInterface::Ptr createLeaderEntryPoint(std::string const& _etcdEndPoint, + std::string const& _watchDir, std::string const& _purpose, const std::string& _caPath, + const std::string& _certPath, const std::string& _keyPath) override + { + auto config = std::make_shared( + _etcdEndPoint, _watchDir, m_memberFactory, _purpose, _caPath, _certPath, _keyPath); + ELECTION_LOG(INFO) << LOG_DESC("createLeaderEntryPoint") + << LOG_KV("etcdAddr", _etcdEndPoint) << LOG_KV("watchDir", _watchDir) + << LOG_KV("purpose", _purpose); + return std::make_shared(config); + } + +private: + bcos::protocol::MemberFactoryInterface::Ptr m_memberFactory; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-leader-election/src/WatcherConfig.cpp b/bcos-leader-election/src/WatcherConfig.cpp new file mode 100644 index 0000000..53bb4c1 --- /dev/null +++ b/bcos-leader-election/src/WatcherConfig.cpp @@ -0,0 +1,150 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the config for the watcher + * @file WatcherConfig.cpp + * @author: yujiechen + * @date 2022-04-28 + */ + +#include "WatcherConfig.h" + +using namespace bcos; +using namespace bcos::election; + +void WatcherConfig::reCreateWatcher() +{ + ELECTION_LOG(INFO) << LOG_DESC("reCreateWatcher"); + // Note: set recursive to watch subdirectory change + m_watcher = std::make_shared(*m_etcdClient, m_watchDir, + boost::bind(&WatcherConfig::onWatcherKeyChanged, this, boost::placeholders::_1), true); + // fetchLeadersInfo when reCreateWatcher + fetchLeadersInfo(); +} + +void WatcherConfig::fetchLeadersInfo() +{ + ELECTION_LOG(INFO) << LOG_DESC("fetchLeadersInfo") << LOG_KV("watchDir", m_watchDir); + auto response = m_etcdClient->ls(m_watchDir).get(); + if (!response.is_ok()) + { + ELECTION_LOG(WARNING) << LOG_DESC("fetchLeadersInfo failed") + << LOG_KV("watchDir", m_watchDir); + return; + } + auto const& values = response.values(); + for (auto const& value : values) + { + updateLeaderInfo(value); + } + ELECTION_LOG(INFO) << LOG_DESC("fetchLeadersInfo success") << LOG_KV("watchDir", m_watchDir) + << LOG_KV("nodesSize", values.size()); +} + +void WatcherConfig::updateLeaderInfo(etcd::Value const& _value) +{ + try + { + auto version = _value.version(); + if (version == 0) + { + ELECTION_LOG(INFO) << LOG_DESC("updateLeaderInfo: the leaderKey has been released") + << LOG_KV("leaderKey", _value.key()); + { + auto const& leaderKey = _value.key(); + UpgradableGuard l(x_keyToLeader); + if (!m_keyToLeader.count(leaderKey)) + { + return; + } + auto member = m_keyToLeader.at(leaderKey); + UpgradeGuard ul(l); + m_keyToLeader.erase(leaderKey); + onMemberDeleted(leaderKey, member); + } + return; + } + auto const& leaderKey = _value.key(); + auto member = m_memberFactory->createMember(_value.as_string()); + auto seq = _value.modified_index(); + member->setSeq(seq); + ELECTION_LOG(INFO) << LOG_DESC("updateLeaderInfo: update leader") + << LOG_KV("leaderKey", leaderKey) << LOG_KV("member", member->memberID()) + << LOG_KV("modifiedIndex", seq); + { + WriteGuard l(x_keyToLeader); + m_keyToLeader[leaderKey] = member; + } + callNotificationHandlers(leaderKey, member); + } + catch (std::exception const& e) + { + ELECTION_LOG(WARNING) << LOG_DESC("updateLeaderInfo exception") + << LOG_KV("watchDir", m_watchDir) << LOG_KV("key", _value.key()) + << LOG_KV("value", _value.as_string()) + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +void WatcherConfig::onWatcherKeyChanged(etcd::Response _response) +{ + if (!_response.is_ok()) + { + ELECTION_LOG(WARNING) << LOG_DESC("onWatcherKeyChanged error") + << LOG_KV("code", _response.error_code()) + << LOG_KV("msg", _response.error_message()); + } + ELECTION_LOG(INFO) << LOG_DESC("onWatcherKeyChanged") << LOG_KV("key", _response.value().key()) + << LOG_KV("version", _response.value().version()); + updateLeaderInfo(_response.value()); +} + +void WatcherConfig::callNotificationHandlers( + std::string const& _key, bcos::protocol::MemberInterface::Ptr _member) +{ + ReadGuard l(x_notificationHandlers); + for (auto const& handler : m_notificationHandlers) + { + try + { + handler(_key, _member); + } + catch (std::exception const& e) + { + ELECTION_LOG(ERROR) << LOG_DESC("callNotificationHandlers exception") + << LOG_KV("key", _key) << LOG_KV("memberID", _member->memberID()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + } +} + +void WatcherConfig::onMemberDeleted( + std::string const& _key, bcos::protocol::MemberInterface::Ptr _member) +{ + ReadGuard l(x_onMemberDeleted); + for (auto const& handler : m_onMemberDeleted) + { + try + { + handler(_key, _member); + } + catch (std::exception const& e) + { + ELECTION_LOG(ERROR) << LOG_DESC("onMemberDeleted exception") << LOG_KV("key", _key) + << LOG_KV("memberID", _member->memberID()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + } +} \ No newline at end of file diff --git a/bcos-leader-election/src/WatcherConfig.h b/bcos-leader-election/src/WatcherConfig.h new file mode 100644 index 0000000..4a28e4d --- /dev/null +++ b/bcos-leader-election/src/WatcherConfig.h @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the config for the watcher + * @file WatcherConfig.h + * @author: yujiechen + * @date 2022-04-28 + */ +#pragma once +#include "ElectionConfig.h" + +namespace bcos +{ +namespace election +{ +class WatcherConfig : public ElectionConfig +{ +public: + using Ptr = std::shared_ptr; + WatcherConfig(std::string const& _etcdEndPoint, std::string const& _watchDir, + bcos::protocol::MemberFactoryInterface::Ptr _memberFactory, std::string const& _purpose, + const std::string& _caPath = "", const std::string& _certPath = "", + const std::string& _keyPath = "") + : ElectionConfig(_etcdEndPoint, _memberFactory, _purpose, _caPath, _certPath, _keyPath) + { + m_watchDir = _watchDir; + ELECTION_LOG(INFO) << LOG_DESC("WatcherConfig") << LOG_KV("watchDir", _watchDir); + } + + ~WatcherConfig() override {} + + void start() override + { + ElectionConfig::start(); + fetchLeadersInfo(); + } + + std::string const& watchDir() const { return m_watchDir; } + std::map keyToLeader() const + { + ReadGuard l(x_keyToLeader); + return m_keyToLeader; + } + + bcos::protocol::MemberInterface::Ptr leader(std::string const& _key) const + { + ReadGuard l(x_keyToLeader); + if (!m_keyToLeader.count(_key)) + { + return nullptr; + } + return m_keyToLeader.at(_key); + } + + void addMemberChangeNotificationHandler( + std::function _handler) + { + ReadGuard l(x_notificationHandlers); + m_notificationHandlers.emplace_back(_handler); + } + + void addMemberDeleteNotificationHandler( + std::function _handler) + { + ReadGuard l(x_onMemberDeleted); + m_onMemberDeleted.emplace_back(_handler); + } + +protected: + virtual void fetchLeadersInfo(); + void updateLeaderInfo(etcd::Value const& _value); + + void reCreateWatcher() override; + virtual void onWatcherKeyChanged(etcd::Response _response); + + virtual void callNotificationHandlers( + std::string const& _key, bcos::protocol::MemberInterface::Ptr _member); + virtual void onMemberDeleted( + std::string const& _key, bcos::protocol::MemberInterface::Ptr _member); + +private: + std::string m_watchDir; + std::map m_keyToLeader; + mutable SharedMutex x_keyToLeader; + + std::vector> + m_notificationHandlers; + mutable SharedMutex x_notificationHandlers; + + std::vector> + m_onMemberDeleted; + mutable SharedMutex x_onMemberDeleted; +}; +} // namespace election +} // namespace bcos \ No newline at end of file diff --git a/bcos-ledger/CMakeLists.txt b/bcos-ledger/CMakeLists.txt new file mode 100644 index 0000000..ce55518 --- /dev/null +++ b/bcos-ledger/CMakeLists.txt @@ -0,0 +1,40 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-ledger +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) + +aux_source_directory(src/libledger SRCS) +aux_source_directory(src/libledger/utilities SRCS) + +find_package(Boost REQUIRED serialization) + +add_library(${LEDGER_TARGET} ${SRCS}) +target_link_libraries(${LEDGER_TARGET} PUBLIC ${CODEC_TARGET} ${TABLE_TARGET} ${PROTOCOL_TARGET} bcos-concepts Boost::serialization) + +# test related +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("ledger-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_SOURCE_DIR}/test/mock**' '${CMAKE_SOURCE_DIR}/test/main**'") +endif () diff --git a/bcos-ledger/src/libledger/Ledger.cpp b/bcos-ledger/src/libledger/Ledger.cpp new file mode 100644 index 0000000..1775523 --- /dev/null +++ b/bcos-ledger/src/libledger/Ledger.cpp @@ -0,0 +1,1963 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Ledger.cpp + * @author: kyonRay + * @date 2021-04-13 + * @file Ledger.cpp + * @author: ancelmo + * @date 2021-09-06 + */ + +#include "Ledger.h" +#include "bcos-tool/VersionConverter.h" +#include "utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::ledger; +using namespace bcos::protocol; +using namespace bcos::storage; +using namespace bcos::crypto; +using namespace bcos::tool; + + +void Ledger::asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr _blockTxs, + bcos::protocol::Block::ConstPtr block, std::function _callback) +{ + auto txsToSaveResult = needStoreUnsavedTxs(_blockTxs, block); + bool shouldStoreTxs = std::get<0>(txsToSaveResult); + if (!shouldStoreTxs) + { + _callback(nullptr); + return; + } + auto startT = utcTime(); + auto blockTxsSize = _blockTxs->size(); + auto unstoredTxsHash = std::get<1>(txsToSaveResult); + auto unstoredTxs = std::get<2>(txsToSaveResult); + + auto blockNumber = block->blockHeaderConst()->number(); + auto total = unstoredTxs->size(); + std::vector keys(total); + std::vector values(total); + for (auto i = 0U; i < unstoredTxs->size(); ++i) + { + keys[i] = bcos::concepts::bytebuffer::toView((*unstoredTxsHash)[i]); + values[i] = bcos::concepts::bytebuffer::toView((*(*unstoredTxs)[i])); + } + { + // Note: transactions must be submitted serially, because transaction submissions are + // transactional, preventing write conflicts + RecursiveGuard l(m_mutex); + auto error = m_storage->setRows(SYS_HASH_2_TX, std::move(keys), std::move(values)); + LEDGER_LOG(INFO) << LOG_DESC("asyncPreStoreBlockTxs: store uncommitted txs") + << LOG_KV("blockNumber", blockNumber) + << LOG_KV("blockTxsSize", blockTxsSize) + << LOG_KV("unStoredTxs", unstoredTxsHash->size()) + << LOG_KV("msg", error ? error->errorMessage() : "success") + << LOG_KV("code", error ? error->errorCode() : 0) + << LOG_KV("timeCost", (utcTime() - startT)); + if (error) + { + _callback(std::make_unique(*error)); + return; + } + // set the flag when store success + for (auto const& tx : *_blockTxs) + { + tx->setStoreToBackend(true); + } + } + _callback(nullptr); +} + +void Ledger::asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) +{ + if (!block) + { + callback( + BCOS_ERROR_PTR(LedgerError::ErrorArgument, "asyncPrewriteBlock failed, empty block")); + return; + } + + if (isSysContractDeploy(block->blockHeaderConst()->number()) && block->transactionsSize() > 0) + { + // sys contract deploy + /// NOTE: write block number for 2pc storage + Entry numberEntry; + numberEntry.importFields({"0"}); + storage->asyncSetRow(SYS_CURRENT_STATE, SYS_KEY_CURRENT_NUMBER, std::move(numberEntry), + [callback](Error::Ptr&& error) { + if (error) + { + LEDGER_LOG(ERROR) << "System contract write ledger storage error " + << LOG_KV("msg", error->errorMessage()) + << LOG_KV("code", error->errorCode()); + } + callback(std::forward(error)); + }); + return; + } + auto header = block->blockHeaderConst(); + + auto blockNumberStr = boost::lexical_cast(header->number()); + + + size_t TOTAL_CALLBACK = 8; + if (writeTxsAndReceipts) + { // 9 storage callbacks and write hash=>tx + TOTAL_CALLBACK = 9; + } + auto setRowCallback = [total = std::make_shared>(TOTAL_CALLBACK), + failed = std::make_shared(false), + callback = std::move(callback)]( + Error::UniquePtr&& error, size_t count = 1) { + *total -= count; + if (error) + { + LEDGER_LOG(ERROR) << "Prewrite block error!" << boost::diagnostic_information(*error); + *failed = true; + } + + if (*total == 0) + { + // all finished + if (*failed) + { + LEDGER_LOG(ERROR) << "PrewriteBlock error"; + callback( + BCOS_ERROR_PTR(LedgerError::CollectAsyncCallbackError, "PrewriteBlock error")); + return; + } + + callback(nullptr); + } + }; + + // number 2 hash + Entry hashEntry; + hashEntry.importFields({header->hash().asBytes()}); + storage->asyncSetRow(SYS_NUMBER_2_HASH, blockNumberStr, std::move(hashEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + // hash 2 number + Entry hash2NumberEntry; + hash2NumberEntry.importFields({blockNumberStr}); + storage->asyncSetRow(SYS_HASH_2_NUMBER, bcos::concepts::bytebuffer::toView(header->hash()), + std::move(hash2NumberEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + // number 2 header + bytes headerBuffer; + header->encode(headerBuffer); + + Entry number2HeaderEntry; + number2HeaderEntry.importFields({std::move(headerBuffer)}); + storage->asyncSetRow(SYS_NUMBER_2_BLOCK_HEADER, blockNumberStr, std::move(number2HeaderEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + // number 2 nonce + auto nonceBlock = m_blockFactory->createBlock(); + nonceBlock->setNonceList(block->nonceList()); + bytes nonceBuffer; + nonceBlock->encode(nonceBuffer); + + Entry number2NonceEntry; + number2NonceEntry.importFields({std::move(nonceBuffer)}); + storage->asyncSetRow(SYS_BLOCK_NUMBER_2_NONCES, blockNumberStr, std::move(number2NonceEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + // current number + Entry numberEntry; + numberEntry.importFields({blockNumberStr}); + storage->asyncSetRow(SYS_CURRENT_STATE, SYS_KEY_CURRENT_NUMBER, std::move(numberEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + // number 2 transactions + auto transactionsBlock = m_blockFactory->createBlock(); + if (block->transactionsMetaDataSize() > 0) + { + for (size_t i = 0; i < block->transactionsMetaDataSize(); ++i) + { + auto originTransactionMetaData = block->transactionMetaData(i); + auto transactionMetaData = m_blockFactory->createTransactionMetaData( + originTransactionMetaData->hash(), std::string(originTransactionMetaData->to())); + transactionsBlock->appendTransactionMetaData(std::move(transactionMetaData)); + } + } + else if (block->transactionsSize() > 0) + { + for (size_t i = 0; i < block->transactionsSize(); ++i) + { + auto transaction = block->transaction(i); + auto transactionMetaData = m_blockFactory->createTransactionMetaData( + transaction->hash(), std::string(transaction->to())); + transactionsBlock->appendTransactionMetaData(std::move(transactionMetaData)); + } + } + else if (header->number() > 0) + { + LEDGER_LOG(WARNING) << "Empty transactions and metadata, empty block?" + << LOG_KV("blockNumber", blockNumberStr); + } + bytes transactionsBuffer; + transactionsBlock->encode(transactionsBuffer); + + Entry number2TransactionHashesEntry; + number2TransactionHashesEntry.importFields({std::move(transactionsBuffer)}); + storage->asyncSetRow(SYS_NUMBER_2_TXS, blockNumberStr, std::move(number2TransactionHashesEntry), + [setRowCallback](auto&& error) { setRowCallback(std::forward(error)); }); + + std::atomic_int64_t totalCount = 0; + std::atomic_int64_t failedCount = 0; + if (writeTxsAndReceipts) + { + // hash 2 receipts + std::vector txsHash(block->receiptsSize()); + std::vector receipts(block->receiptsSize()); + std::vector receiptsView(block->receiptsSize()); + tbb::parallel_for(tbb::blocked_range(0, block->receiptsSize()), + [&transactionsBlock, &block, &failedCount, &totalCount, &txsHash, &receipts, + &receiptsView](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) + { + auto hash = transactionsBlock->transactionHash(i); + txsHash[i] = std::string((char*)hash.data(), hash.size()); + auto receipt = block->receipt(i); + if (receipt->status() != 0) + { + failedCount++; + } + totalCount++; + receipt->encode(receipts[i]); + receiptsView[i] = bcos::concepts::bytebuffer::toView(receipts[i]); + } + }); + + auto start = utcTime(); + auto error = + m_storage->setRows(SYS_HASH_2_RECEIPT, std::move(txsHash), std::move(receiptsView)); + auto writeReceiptsTime = utcTime() - start; + if (error) + { + LEDGER_LOG(ERROR) << LOG_DESC("ledger write receipts failed") + << LOG_KV("message", error->errorMessage()); + } + + start = utcTime(); + asyncPreStoreBlockTxs(_blockTxs, block, setRowCallback); + auto writeTxsTime = utcTime() - start; + LEDGER_LOG(INFO) << LOG_DESC("asyncPrewriteBlock") + << LOG_KV("number", block->blockHeaderConst()->number()) + << LOG_KV("writeReceiptsTime(ms)", writeReceiptsTime) + << LOG_KV("writeTxsTime(ms)", writeTxsTime); + } + else + { + for (size_t i = 0; i < block->receiptsSize(); ++i) + { + auto receipt = block->receipt(i); + if (receipt->status() != 0) + { + failedCount++; + } + totalCount++; + } + } + + LEDGER_LOG(DEBUG) << LOG_DESC("Calculate tx counts in block") + << LOG_KV("number", blockNumberStr) << LOG_KV("totalCount", totalCount) + << LOG_KV("failedCount", failedCount); + + // total transaction count + asyncGetTotalTransactionCount( + [storage, block, &setRowCallback, &totalCount, &failedCount]( + Error::Ptr error, int64_t total, int64_t failed, bcos::protocol::BlockNumber) { + if (error) + { + setRowCallback(std::make_unique(*error), 2); + return; + } + auto totalTxsCount = total + totalCount; + Entry totalEntry; + totalEntry.importFields({boost::lexical_cast(totalTxsCount)}); + storage->asyncSetRow(SYS_CURRENT_STATE, SYS_KEY_TOTAL_TRANSACTION_COUNT, + std::move(totalEntry), [setRowCallback](auto&& error) { + setRowCallback(std::forward(error)); + }); + auto failedTxs = failed + failedCount; + if (failedCount != 0) + { + Entry failedEntry; + failedEntry.importFields({boost::lexical_cast(failedTxs)}); + storage->asyncSetRow(SYS_CURRENT_STATE, SYS_KEY_TOTAL_FAILED_TRANSACTION, + std::move(failedEntry), [setRowCallback](auto&& error) { + setRowCallback(std::forward(error)); + }); + } + else + { + setRowCallback({}, true); + } + LEDGER_LOG(INFO) << METRIC << LOG_DESC("asyncPrewriteBlock") + << LOG_KV("number", block->blockHeaderConst()->number()) + << LOG_KV("totalTxs", totalTxsCount) << LOG_KV("failedTxs", failedTxs) + << LOG_KV("incTxs", totalCount) << LOG_KV("incFailedTxs", failedCount); + }); +} + +std::tuple>> +Ledger::needStoreUnsavedTxs( + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr _block) +{ + // Note: in the case of block-sync, no-need to save transactions when prewriteBlock + if (!_blockTxs || _blockTxs->size() == 0) + { + LEDGER_LOG(INFO) << LOG_DESC("asyncPreStoreBlockTxs: needStoreUnsavedTxs: empty txs") + << LOG_KV("number", (_block ? _block->blockHeaderConst()->number() : -1)); + return std::make_tuple(false, nullptr, nullptr); + } + // supplement the unsaved hash_2_txs + auto txsToStore = std::make_shared>(); + size_t unstoredTxs = 0; + auto txsHash = std::make_shared(); + for (auto const& tx : (*_blockTxs)) + { + if (tx->storeToBackend()) + { + continue; + } + bcos::bytes encodeData; + tx->encode(encodeData); + unstoredTxs++; + txsHash->emplace_back(tx->hash()); + txsToStore->emplace_back(std::make_shared(std::move(encodeData))); + } + LEDGER_LOG(INFO) << LOG_DESC("asyncPreStoreBlockTxs: needStoreUnsavedTxs") + << LOG_KV("txsSize", _blockTxs->size()) << LOG_KV("unstoredTxs", unstoredTxs) + << LOG_KV("number", (_block ? _block->blockHeaderConst()->number() : -1)); + if (txsToStore->size() == 0) + { + return std::make_tuple(false, nullptr, nullptr); + } + return std::make_tuple(true, txsHash, txsToStore); +} + +bcos::Error::Ptr Ledger::storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) +{ + // node commit synced block will give empty blockTxs, the block will never be null + if (!block) + { + return BCOS_ERROR_PTR(LedgerError::ErrorArgument, "empty block"); + } + auto start = utcTime(); + bcos::Error::Ptr error = nullptr; + auto txSize = std::max(block->transactionsSize(), block->transactionsMetaDataSize()); + + std::vector txsHash(txSize); + std::vector receipts(txSize); + std::vector receiptsView(txSize); + tbb::parallel_for(tbb::blocked_range(0, txSize), + [&blockTxs, &block, &txsHash, &receipts, &receiptsView]( + const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) + { + auto hash = blockTxs ? blockTxs->at(i)->hash() : block->transaction(i)->hash(); + txsHash[i] = std::string((char*)hash.data(), hash.size()); + auto receipt = block->receipt(i); + receipt->encode(receipts[i]); + receiptsView[i] = std::string_view((char*)receipts[i].data(), receipts[i].size()); + } + }); + auto promise = std::make_shared>(); + m_threadPool->enqueue([storage = m_storage, promise, keys = std::move(txsHash), + values = std::move(receiptsView)]() mutable { + auto err = storage->setRows(SYS_HASH_2_RECEIPT, std::move(keys), std::move(values)); + promise->set_value(err); + }); + auto txsToStore = std::make_shared>(); + txsToStore->reserve(txSize); + auto txsToStoreHash = std::make_shared(); + txsToStoreHash->reserve(txSize); + std::vector keys; + keys.reserve(txSize); + std::vector values; + values.reserve(txSize); + auto blockNumber = block->blockHeaderConst()->number(); + + RecursiveGuard guard(m_mutex); + size_t unstoredTxs = 0; + for (size_t i = 0; i < txSize; i++) + { + auto tx = blockTxs ? blockTxs->at(i) : block->transaction(i); + if (blockTxs && tx->storeToBackend()) + { + continue; + } + bcos::bytes encodeData; + tx->encode(encodeData); + txsToStoreHash->emplace_back(tx->hash()); + txsToStore->emplace_back(std::move(encodeData)); + keys.push_back(bcos::concepts::bytebuffer::toView((*txsToStoreHash)[unstoredTxs])); + values.push_back(bcos::concepts::bytebuffer::toView((*txsToStore)[unstoredTxs])); + ++unstoredTxs; + } + if (!keys.empty()) + { + // asyncPreStoreBlockTxs also write txs to DB, needStoreUnsavedTxs is out of lock, so + // the transactions may be write twice + error = m_storage->setRows(SYS_HASH_2_TX, std::move(keys), std::move(values)); + if (error) + { + LEDGER_LOG(ERROR) << LOG_DESC("ledger write transactions failed") + << LOG_KV("code", error->errorCode()) + << LOG_KV("message", error->errorMessage()); + return error; + } + // set the flag when store success + if (blockTxs) + { + for (size_t i = 0; i < block->transactionsSize(); i++) + { + blockTxs->at(i)->setStoreToBackend(true); + } + } + } + auto err = promise->get_future().get(); + if (err) + { + LEDGER_LOG(ERROR) << LOG_DESC("ledger write receipts failed") + << LOG_KV("code", err->errorCode()) + << LOG_KV("message", err->errorMessage()); + return err; + } + auto writeReceiptsTime = utcTime(); + + LEDGER_LOG(INFO) << LOG_DESC("storeTransactionsAndReceipts finished") + << LOG_KV("blockNumber", blockNumber) << LOG_KV("blockTxsSize", txSize) + << LOG_KV("unStoredTxs", unstoredTxs) + << LOG_KV("timeCost", (utcTime() - start)); + return nullptr; +} + +void Ledger::asyncGetBlockDataByNumber(bcos::protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) +{ + LEDGER_LOG(TRACE) << "GetBlockDataByNumber request" << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("blockFlag", _blockFlag); + if (_blockNumber < 0 || _blockFlag < 0) + { + LEDGER_LOG(INFO) << "GetBlockDataByNumber, wrong argument"; + _onGetBlock(BCOS_ERROR_PTR(LedgerError::ErrorArgument, "Wrong argument"), nullptr); + return; + } + if (((_blockFlag & TRANSACTIONS) != 0) && ((_blockFlag & TRANSACTIONS_HASH) != 0)) + { + LEDGER_LOG(INFO) << "GetBlockDataByNumber, wrong argument, transaction already has hash"; + _onGetBlock(BCOS_ERROR_PTR(LedgerError::ErrorArgument, "Wrong argument"), nullptr); + return; + } + + std::list> fetchers; + auto block = m_blockFactory->createBlock(); + auto total = std::make_shared(0); + auto result = std::make_shared, std::atomic>>(0, 0); + + auto finally = [_blockNumber, total, result, block, _onGetBlock](Error::Ptr&& error) { + if (error) + { + ++std::get<1>(*result); + } + else + { + ++std::get<0>(*result); + } + + if (std::get<0>(*result) + std::get<1>(*result) == *total) + { + // All finished + if (std::get<0>(*result) != *total) + { + LEDGER_LOG(DEBUG) << "GetBlockDataByNumber request failed!" + << LOG_KV("number", _blockNumber); + _onGetBlock(BCOS_ERROR_PTR(LedgerError::CollectAsyncCallbackError, + "Get block failed with errors!"), + nullptr); + return; + } + + _onGetBlock(nullptr, std::move(block)); + } + }; + + if (_blockFlag & HEADER) + { + ++(*total); + + fetchers.push_back([this, _blockNumber, block, finally]() { + asyncGetBlockHeader( + block, _blockNumber, [finally](Error::Ptr&& error) { finally(std::move(error)); }); + }); + } + if ((_blockFlag & TRANSACTIONS) != 0 || (_blockFlag & TRANSACTIONS_HASH) != 0) + { + ++(*total); + } + if ((_blockFlag & RECEIPTS) != 0) + { + ++(*total); + } + if (((_blockFlag & TRANSACTIONS) != 0) || ((_blockFlag & RECEIPTS) != 0) || + (_blockFlag & TRANSACTIONS_HASH) != 0) + { + fetchers.push_back([this, block, _blockNumber, finally, _blockFlag]() { + asyncGetBlockTransactionHashes(_blockNumber, [this, _blockFlag, block, finally]( + Error::Ptr&& error, + std::vector&& hashes) { + if (error) + { + // if flag has both TRANSACTIONS and RECEIPTS, then the finally need to be + // called twice, so has below if logic + if ((_blockFlag & TRANSACTIONS) != 0 || (_blockFlag & TRANSACTIONS_HASH) != 0) + { + finally(std::move(error)); + } + if ((_blockFlag & RECEIPTS) != 0) + { + finally(std::move(error)); + } + return; + } + + LEDGER_LOG(TRACE) << "Get transactions hash list success, size:" << hashes.size(); + + auto hashesPtr = std::make_shared>(std::move(hashes)); + if ((_blockFlag & TRANSACTIONS) != 0) + { + asyncBatchGetTransactions( + hashesPtr, [block, finally](Error::Ptr&& error, + std::vector&& transactions) { + if (error) + { + LEDGER_LOG(ERROR) + << LOG_DESC( + "asyncGetBlockDataByNumber batch getTransactions error") + << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + } + for (auto& it : transactions) + { + block->appendTransaction(it); + } + finally(std::move(error)); + }); + } + if ((_blockFlag & RECEIPTS) != 0) + { + asyncBatchGetReceipts( + hashesPtr, [block, finally](Error::Ptr&& error, + std::vector&& receipts) { + for (auto& it : receipts) + { + block->appendReceipt(it); + } + finally(std::move(error)); + }); + } + if ((_blockFlag & TRANSACTIONS_HASH) != 0) + { + for (auto& hash : *hashesPtr) + { + auto txMeta = m_blockFactory->createTransactionMetaData(); + txMeta->setHash(bcos::crypto::HashType( + hash, bcos::crypto::HashType::StringDataType::FromBinary)); + block->appendTransactionMetaData(std::move(txMeta)); + } + finally(nullptr); + } + }); + }); + } + + for (auto& it : fetchers) + { + it(); + } +} + +void Ledger::asyncGetBlockNumber( + std::function _onGetBlock) +{ + asyncGetSystemTableEntry(SYS_CURRENT_STATE, SYS_KEY_CURRENT_NUMBER, + [callback = std::move(_onGetBlock)]( + Error::Ptr&& error, std::optional&& entry) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetBlockNumber failed" + << boost::diagnostic_information(error); + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, + "Get block number storage failed", *error), + -1); + return; + } + + bcos::protocol::BlockNumber blockNumber = -1; + try + { + blockNumber = boost::lexical_cast(entry->getField(0)); + } + catch (boost::bad_lexical_cast& e) + { + // Ignore the exception + LEDGER_LOG(INFO) << "Cast blockNumber failed, may be empty, set to default value -1" + << LOG_KV("blockNumber str", entry->getField(0)); + } + + LEDGER_LOG(TRACE) << "GetBlockNumber success" << LOG_KV("blockNumber", blockNumber); + callback(nullptr, blockNumber); + }); +} + +void Ledger::asyncGetBlockHashByNumber(bcos::protocol::BlockNumber _blockNumber, + std::function _onGetBlock) +{ + LEDGER_LOG(TRACE) << "GetBlockHashByNumber request" << LOG_KV("blockNumber", _blockNumber); + if (_blockNumber < 0) + { + _onGetBlock(BCOS_ERROR_PTR( + LedgerError::ErrorArgument, "GetBlockHashByNumber error, wrong argument"), + bcos::crypto::HashType()); + return; + } + + auto key = boost::lexical_cast(_blockNumber); + asyncGetSystemTableEntry(SYS_NUMBER_2_HASH, key, + [callback = std::move(_onGetBlock)]( + Error::Ptr&& error, std::optional&& entry) { + try + { + if (error) + { + LEDGER_LOG(DEBUG) + << "GetBlockHashByNumber error" << boost::diagnostic_information(error); + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, + "GetBlockHashByNumber error", *error), + bcos::crypto::HashType()); + return; + } + + auto hashStr = entry->getField(0); + bcos::crypto::HashType hash( + std::string(hashStr), bcos::crypto::HashType::FromBinary); + + callback(nullptr, std::move(hash)); + } + catch (std::exception& e) + { + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::UnknownError, "Unknown error", e), + bcos::crypto::HashType()); + return; + } + }); +} + +void Ledger::asyncGetBlockNumberByHash(const crypto::HashType& _blockHash, + std::function _onGetBlock) +{ + auto key = _blockHash; + LEDGER_LOG(TRACE) << "GetBlockNumberByHash request" << LOG_KV("hash", key.hex()); + + asyncGetSystemTableEntry(SYS_HASH_2_NUMBER, bcos::concepts::bytebuffer::toView(key), + [callback = std::move(_onGetBlock)]( + Error::Ptr&& error, std::optional&& entry) { + try + { + if (error) + { + LEDGER_LOG(DEBUG) + << "GetBlockNumberByHash error " << boost::diagnostic_information(*error); + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, + "GetBlockNumberByHash error ", *error), + -1); + return; + } + + bcos::protocol::BlockNumber blockNumber = -1; + try + { + blockNumber = + boost::lexical_cast(entry->getField(0)); + } + catch (boost::bad_lexical_cast& e) + { + // Ignore the exception + LEDGER_LOG(INFO) + << "Cast blockNumber failed, may be empty, set to default value -1" + << LOG_KV("blockNumber str", entry->getField(0)); + } + callback(nullptr, blockNumber); + } + catch (std::exception& e) + { + LEDGER_LOG(INFO) << "GetBlockNumberByHash failed " + << boost::diagnostic_information(e); + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, + "GetBlockNumberByHash failed ", std::move(e)), + -1); + } + }); +} + +void Ledger::asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) +{ + if (!_txHashList) + { + LEDGER_LOG(ERROR) << "GetBatchTxsByHashList error, wrong argument"; + _onGetTx(BCOS_ERROR_PTR(LedgerError::ErrorArgument, "Wrong argument"), nullptr, nullptr); + return; + } + + LEDGER_LOG(TRACE) << "GetBatchTxsByHashList request" << LOG_KV("hashes", _txHashList->size()) + << LOG_KV("withProof", _withProof); + + auto hexList = std::make_shared>(); + hexList->reserve(_txHashList->size()); + + for (auto& it : *_txHashList) + { + std::string hex(it.begin(), it.end()); + hexList->emplace_back(std::move(hex)); + } + + asyncBatchGetTransactions( + hexList, [this, callback = std::move(_onGetTx), _txHashList, _withProof]( + Error::Ptr&& error, std::vector&& transactions) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetBatchTxsByHashList failed: " << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_PTR( + LedgerError::GetStorageError, "GetBatchTxsByHashList error", *error), + nullptr, nullptr); + return; + } + + bcos::protocol::TransactionsPtr results = + std::make_shared(std::move(transactions)); + + if (_withProof) + { + auto con_proofMap = + std::make_shared>(); + auto count = std::make_shared(0); + auto counter = [_txList = results, _txHashList, count, con_proofMap, + callback = callback]() { + count->fetch_add(1); + if (count->load() == _txHashList->size()) + { + auto proofMap = std::make_shared>( + con_proofMap->begin(), con_proofMap->end()); + LEDGER_LOG(TRACE) << LOG_BADGE("GetBatchTxsByHashList success") + << LOG_KV("txHashListSize", _txHashList->size()) + << LOG_KV("proofMapSize", proofMap->size()); + callback(nullptr, _txList, proofMap); + } + }; + + tbb::parallel_for(tbb::blocked_range(0, _txHashList->size()), + [this, _txHashList, counter, con_proofMap]( + const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) + { + auto txHash = _txHashList->at(i); + getTxProof(txHash, [con_proofMap, txHash, counter]( + Error::Ptr _error, MerkleProofPtr _proof) { + if (!_error && _proof) + { + con_proofMap->insert(std::make_pair(txHash.hex(), _proof)); + } + counter(); + }); + } + }); + } + else + { + LEDGER_LOG(TRACE) << LOG_BADGE("GetBatchTxsByHashList success") + << LOG_KV("txHashListSize", _txHashList->size()) + << LOG_KV("withProof", _withProof); + callback(nullptr, results, nullptr); + } + }); +} + +void Ledger::asyncGetTransactionReceiptByHash(bcos::crypto::HashType const& _txHash, + bool _withProof, + std::function + _onGetTx) +{ + auto key = _txHash; + + LEDGER_LOG(TRACE) << "GetTransactionReceiptByHash" << LOG_KV("hash", key); + + asyncGetSystemTableEntry(SYS_HASH_2_RECEIPT, bcos::concepts::bytebuffer::toView(key), + [this, callback = std::move(_onGetTx), _withProof]( + Error::Ptr&& error, std::optional&& entry) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetTransactionReceiptByHash: " + << boost::diagnostic_information(error); + callback(BCOS_ERROR_WITH_PREV_PTR( + LedgerError::GetStorageError, "GetTransactionReceiptByHash", *error), + nullptr, nullptr); + + return; + } + + auto value = entry->getField(0); + auto receipt = m_blockFactory->receiptFactory()->createReceipt( + bcos::bytesConstRef((bcos::byte*)value.data(), value.size())); + + if (_withProof) + { + getReceiptProof(receipt, + [receipt, _onGetTx = callback](Error::Ptr _error, MerkleProofPtr _proof) { + if (_error) + { + LEDGER_LOG(DEBUG) << "GetTransactionReceiptByHash" + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()) + << boost::diagnostic_information(_error); + _onGetTx(std::move(_error), receipt, nullptr); + return; + } + + _onGetTx(nullptr, receipt, std::move(_proof)); + }); + } + else + { + callback(nullptr, receipt, nullptr); + } + }); +} + +void Ledger::asyncGetTotalTransactionCount( + std::function _callback) +{ + static std::string_view keys[] = { + SYS_KEY_TOTAL_TRANSACTION_COUNT, SYS_KEY_TOTAL_FAILED_TRANSACTION, SYS_KEY_CURRENT_NUMBER}; + + m_storage->asyncOpenTable(SYS_CURRENT_STATE, [this, callback = std::move(_callback)]( + auto&& error, std::optional
&& table) { + auto tableError = + checkTableValid(std::forward(error), table, SYS_CURRENT_STATE); + if (tableError) + { + LEDGER_LOG(DEBUG) << "GetTotalTransactionCount" + << boost::diagnostic_information(*tableError); + callback(std::move(tableError), -1, -1, -1); + return; + } + + table->asyncGetRows(keys, [callback = std::move(callback)]( + auto&& error, std::vector>&& entries) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetTotalTransactionCount" + << boost::diagnostic_information(*error); + callback( + BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, "Get row error", *error), + -1, -1, -1); + return; + } + + int64_t totalCount = 0, failedCount = 0, blockNumber = 0; + size_t i = 0; + for (auto& entry : entries) + { + int64_t value = 0; + if (!entry) + { + LEDGER_LOG(WARNING) + << "GetTotalTransactionCount error" << LOG_KV("index", i) << " empty"; + } + else + { + try + { + value = boost::lexical_cast(entry->getField(0)); + } + catch (boost::bad_lexical_cast& e) + { + LEDGER_LOG(ERROR) << "Lexical cast transaction count failed, entry value: " + << entry->get(); + BOOST_THROW_EXCEPTION(e); + } + } + switch (i++) + { + case 0: + totalCount = value; + break; + case 1: + failedCount = value; + break; + case 2: + blockNumber = value; + break; + } + } + + LEDGER_LOG(TRACE) << "GetTotalTransactionCount success" + << LOG_KV("totalCount", totalCount) + << LOG_KV("failedCount", failedCount) + << LOG_KV("blockNumber", blockNumber); + callback(nullptr, totalCount, failedCount, blockNumber); + }); + }); +} + +void Ledger::asyncGetSystemConfigByKey(const std::string_view& _key, + std::function _onGetConfig) +{ + LEDGER_LOG(TRACE) << "GetSystemConfigByKey request" << LOG_KV("key", _key); + + asyncGetBlockNumber([this, callback = std::move(_onGetConfig), _key]( + Error::Ptr error, bcos::protocol::BlockNumber blockNumber) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetSystemConfigByKey, " << boost::diagnostic_information(*error); + callback(std::move(error), "", -1); + return; + } + + asyncGetSystemTableEntry(SYS_CONFIG, _key, + [blockNumber, callback = std::move(callback)]( + Error::Ptr&& error, std::optional&& entry) { + try + { + // Note: should considerate the case that the compatibility_version is not + // set + if (error) + { + LEDGER_LOG(DEBUG) + << "GetSystemConfigByKey, " << boost::diagnostic_information(*error); + callback(std::move(error), "", -1); + return; + } + + if (!entry) + { + LEDGER_LOG(WARNING) << "asyncGetSystemTableEntry: entry doesn't exists"; + callback( + BCOS_ERROR_PTR(-1, "asyncGetSystemTableEntry failed for empty entry"), + "", -1); + return; + } + + LEDGER_LOG(TRACE) << "Entry value: " << toHex(entry->get()); + + auto [value, number] = entry->getObject(); + + // The param was reset at height getLatestBlockNumber(), and takes effect in + // next block. So we query the status of getLatestBlockNumber() + 1. + auto effectNumber = blockNumber + 1; + if (number > effectNumber) + { + LEDGER_LOG(INFO) << "GetSystemConfigByKey, config not available" + << LOG_KV("currentBlockNumber", effectNumber) + << LOG_KV("available number", number); + callback(BCOS_ERROR_PTR(LedgerError::ErrorArgument, "Config not available"), + "", -1); + return; + } + + LEDGER_LOG(TRACE) << "GetSystemConfigByKey success" << LOG_KV("value", value) + << LOG_KV("number", number); + callback(nullptr, std::move(value), number); + } + catch (std::exception& e) + { + LEDGER_LOG(ERROR) + << "GetSystemConfigByKey error, " << boost::diagnostic_information(e); + callback( + BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, "error", e), "", -1); + } + }); + }); +} + +void Ledger::asyncGetNonceList(bcos::protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) +{ + LEDGER_LOG(TRACE) << "GetNonceList request" << LOG_KV("startNumber", _startNumber) + << LOG_KV("offset", _offset); + + if (_startNumber < 0 || _offset < 0) + { + LEDGER_LOG(ERROR) << "GetNonceList error arguments" << LOG_KV("startNumber", _startNumber) + << LOG_KV("offset", _offset); + _onGetList(BCOS_ERROR_PTR(LedgerError::ErrorArgument, "Wrong argument"), nullptr); + return; + } + + m_storage->asyncOpenTable(SYS_BLOCK_NUMBER_2_NONCES, [this, callback = std::move(_onGetList), + _startNumber, _offset](auto&& error, + std::optional
&& table) mutable { + auto tableError = + checkTableValid(std::forward(error), table, SYS_BLOCK_NUMBER_2_NONCES); + if (tableError) + { + callback(std::move(tableError), nullptr); + return; + } + + auto numberRange = + RANGES::iota_view(_startNumber, _startNumber + _offset + 1); + auto numberList = numberRange | RANGES::views::transform([](BlockNumber blockNumber) { + return boost::lexical_cast(blockNumber); + }) | RANGES::to>(); + + table->asyncGetRows(numberList, [this, numberRange, callback = std::move(callback)]( + auto&& error, + std::vector>&& entries) { + if (error) + { + LEDGER_LOG(ERROR) << "GetNonceList error" << boost::diagnostic_information(*error); + callback( + BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, "GetNonceList", *error), + nullptr); + return; + } + + auto retMap = + std::make_shared>(); + + for (auto const& [number, entry] : RANGES::zip_view(numberRange, entries)) + { + try + { + if (!entry) + { + continue; + } + + auto value = entry->getField(0); + auto block = m_blockFactory->createBlock( + bcos::bytesConstRef((bcos::byte*)value.data(), value.size()), false, false); + + retMap->emplace(std::make_pair(number, + std::make_shared(block->nonceList() | RANGES::to()))); + } + catch (std::exception const& e) + { + LEDGER_LOG(WARNING) + << "Parse nonce list error" << boost::diagnostic_information(e); + continue; + } + } + + LEDGER_LOG(TRACE) << "GetNonceList success" << LOG_KV("retMap size", retMap->size()); + callback(nullptr, std::move(retMap)); + }); + }); +} + +void Ledger::asyncGetNodeListByType(const std::string_view& _type, + std::function _onGetConfig) +{ + LEDGER_LOG(DEBUG) << "GetNodeListByType request" << LOG_KV("type", _type); + + asyncGetBlockNumber([this, type = std::move(_type), callback = std::move(_onGetConfig)]( + Error::Ptr&& error, bcos::protocol::BlockNumber blockNumber) { + if (error) + { + LEDGER_LOG(DEBUG) << "GetNodeListByType" << boost::diagnostic_information(*error); + callback(BCOS_ERROR_WITH_PREV_PTR( + LedgerError::GetStorageError, "GetNodeListByType error", *error), + nullptr); + return; + } + + LEDGER_LOG(DEBUG) << "Get nodeList from" << LOG_KV("blockNumber", blockNumber); + + m_storage->asyncGetRow(SYS_CONSENSUS, "key", + [callback = std::move(callback), type = type, this, blockNumber]( + Error::UniquePtr error, std::optional entry) { + if (error) + { + callback(std::move(error), nullptr); + return; + } + + auto nodeList = decodeConsensusList(entry->getField(0)); + auto nodes = std::make_shared(); + + auto effectNumber = blockNumber + 1; + for (auto& it : nodeList) + { + if (it.type == type && boost::lexical_cast( + it.enableNumber) <= effectNumber) + { + crypto::NodeIDPtr nodeID = + m_blockFactory->cryptoSuite()->keyFactory()->createKey( + fromHex(it.nodeID)); + // Note: use try-catch to handle the exception case + nodes->emplace_back(std::make_shared( + nodeID, it.weight.convert_to())); + } + } + + LEDGER_LOG(DEBUG) << "GetNodeListByType success" << LOG_KV("type", type) + << LOG_KV("nodes size", nodes->size()); + callback(nullptr, std::move(nodes)); + }); + }); +} + +Error::Ptr Ledger::checkTableValid(Error::UniquePtr&& error, + const std::optional& table, const std::string_view& tableName) +{ + if (error) + { + std::stringstream ss; + ss << "Open table: " << tableName << " failed!"; + LEDGER_LOG(DEBUG) << ss.str() << boost::diagnostic_information(*error); + + return BCOS_ERROR_WITH_PREV_PTR(LedgerError::OpenTableFailed, ss.str(), *error); + } + + if (!table) + { + std::stringstream ss; + ss << "Table: " << tableName << " does not exists!"; + LEDGER_LOG(DEBUG) << ss.str(); + return BCOS_ERROR_PTR(LedgerError::OpenTableFailed, ss.str()); + } + + return nullptr; +} + +Error::Ptr Ledger::checkEntryValid(Error::UniquePtr&& error, + const std::optional& entry, const std::string_view& key) +{ + if (error) + { + std::stringstream ss; + ss << "Get row: " << key << " failed!"; + LEDGER_LOG(DEBUG) << ss.str() << boost::diagnostic_information(*error); + + return BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, ss.str(), *error); + } + + if (!entry) + { + std::stringstream ss; + ss << "Entry: " << key << " does not exists!"; + return BCOS_ERROR_PTR(LedgerError::GetStorageError, ss.str()); + } + + return nullptr; +} + +void Ledger::asyncGetBlockHeader(bcos::protocol::Block::Ptr block, + bcos::protocol::BlockNumber blockNumber, std::function callback) +{ + m_storage->asyncOpenTable(SYS_NUMBER_2_BLOCK_HEADER, + [this, blockNumber, block, callback](auto&& error, std::optional
&& table) { + auto validError = checkTableValid(std::move(error), table, SYS_NUMBER_2_BLOCK_HEADER); + if (validError) + { + callback(std::move(validError)); + return; + } + + table->asyncGetRow(boost::lexical_cast(blockNumber), + [this, blockNumber, block, callback](auto&& error, std::optional&& entry) { + auto validError = checkEntryValid( + std::move(error), entry, boost::lexical_cast(blockNumber)); + if (validError) + { + callback(std::move(validError)); + return; + } + + auto field = entry->getField(0); + auto headerPtr = m_blockFactory->blockHeaderFactory()->createBlockHeader( + bcos::bytesConstRef((bcos::byte*)field.data(), field.size())); + + block->setBlockHeader(std::move(headerPtr)); + callback(nullptr); + }); + }); +} + +void Ledger::asyncGetBlockTransactionHashes(bcos::protocol::BlockNumber blockNumber, + std::function&&)> callback) +{ + m_storage->asyncOpenTable(SYS_NUMBER_2_TXS, + [this, blockNumber, callback](auto&& error, std::optional
&& table) { + auto validError = checkTableValid(std::move(error), table, SYS_NUMBER_2_BLOCK_HEADER); + if (validError) + { + callback(std::move(validError), std::vector()); + return; + } + + table->asyncGetRow(boost::lexical_cast(blockNumber), + [this, blockNumber, callback](auto&& error, std::optional&& entry) { + auto validError = checkEntryValid( + std::move(error), entry, boost::lexical_cast(blockNumber)); + if (validError) + { + callback(std::move(validError), std::vector()); + return; + } + + auto txs = entry->getField(0); + auto blockWithTxs = m_blockFactory->createBlock( + bcos::bytesConstRef((bcos::byte*)txs.data(), txs.size())); + + std::vector hashList(blockWithTxs->transactionsHashSize()); + for (size_t i = 0; i < blockWithTxs->transactionsHashSize(); ++i) + { + auto hash = blockWithTxs->transactionHash(i); + hashList[i].assign(hash.begin(), hash.end()); + // hashList[i] = hash.hex(); + } + + callback(nullptr, std::move(hashList)); + }); + }); +} + +void Ledger::asyncBatchGetTransactions(std::shared_ptr> hashes, + std::function&&)> callback) +{ + m_storage->asyncOpenTable( + SYS_HASH_2_TX, [this, hashes, callback](auto&& error, std::optional
&& table) { + auto validError = + checkTableValid(std::forward(error), table, SYS_HASH_2_TX); + if (validError) + { + callback(std::move(validError), std::vector()); + return; + } + + std::vector hashesView; + hashesView.reserve(hashes->size()); + for (auto& hash : *hashes) + { + hashesView.push_back(hash); + } + + table->asyncGetRows(hashesView, [this, hashes, callback](auto&& error, + std::vector>&& entries) { + if (error) + { + LEDGER_LOG(DEBUG) + << "Batch get transaction failed " << boost::diagnostic_information(*error); + callback(BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, + "Batch get transaction failed ", *error), + std::vector()); + + return; + } + + std::vector transactions; + size_t i = 0; + for (auto& entry : entries) + { + if (!entry.has_value()) + { + LEDGER_LOG(TRACE) + << "Get transaction failed: " << LOG_KV("txHash", toHex((*hashes)[i])); + } + else + { + auto field = entry->getField(0); + auto transaction = m_blockFactory->transactionFactory()->createTransaction( + bcos::bytesConstRef((bcos::byte*)field.data(), field.size())); + transactions.push_back(std::move(transaction)); + } + + ++i; + } + if (transactions.size() != hashes->size()) + { + LEDGER_LOG(DEBUG) + << "Batch get transaction failed, transactions size not match hashesSize" + << LOG_KV("txsSize", transactions.size()) + << LOG_KV("hashesSize", hashes->size()); + callback(BCOS_ERROR_PTR(LedgerError::CollectAsyncCallbackError, + "Batch get transaction failed, transactions size not match " + "hashesSize, txsSize: " + + std::to_string(transactions.size()) + + ", hashesSize: " + std::to_string(hashes->size())), + std::move(transactions)); + return; + } + + callback(nullptr, std::move(transactions)); + }); + }); +} + +void Ledger::asyncBatchGetReceipts(std::shared_ptr> hashes, + std::function&&)> callback) +{ + m_storage->asyncOpenTable( + SYS_HASH_2_RECEIPT, [this, hashes, callback](auto&& error, std::optional
&& table) { + auto validError = checkTableValid(std::move(error), table, SYS_HASH_2_RECEIPT); + if (validError) + { + callback(std::move(validError), std::vector()); + return; + } + + table->asyncGetRows(*hashes, [this, hashes, callback](auto&& error, + std::vector>&& entries) { + if (error) + { + LEDGER_LOG(DEBUG) + << "Batch get receipt error!" << boost::diagnostic_information(*error); + callback(BCOS_ERROR_WITH_PREV_PTR( + LedgerError::GetStorageError, "Batch get receipt error!", *error), + std::vector()); + + return; + } + + size_t i = 0; + std::vector receipts; + receipts.reserve(hashes->size()); + for (auto& entry : entries) + { + if (!entry.has_value()) + { + LEDGER_LOG(DEBUG) << "Get receipt with empty entry: " << (*hashes)[i]; + callback(BCOS_ERROR_PTR( + LedgerError::GetStorageError, "Batch get transaction failed"), + std::vector()); + return; + } + + auto field = entry->getField(0); + auto receipt = m_blockFactory->receiptFactory()->createReceipt( + bcos::bytesConstRef((bcos::byte*)field.data(), field.size())); + receipts.push_back(std::move(receipt)); + + ++i; + } + + callback(nullptr, std::move(receipts)); + }); + }); +} + +void Ledger::asyncGetSystemTableEntry(const std::string_view& table, const std::string_view& key, + std::function&&)> callback) +{ + m_storage->asyncOpenTable(table, [this, key = std::string(key), callback = std::move(callback)]( + auto&& error, std::optional
&& table) { + auto tableError = + checkTableValid(std::forward(error), table, SYS_CURRENT_STATE); + if (tableError) + { + callback(std::move(tableError), {}); + return; + } + + table->asyncGetRow(key, [this, key, callback = std::move(callback)]( + auto&& error, std::optional&& entry) { + auto entryError = checkEntryValid(std::move(error), entry, key); + if (entryError) + { + callback(std::move(entryError), {}); + return; + } + + callback(nullptr, std::move(entry)); + }); + }); +} + +void Ledger::getTxProof( + const HashType& _txHash, std::function _onGetProof) +{ + // txHash->receipt receipt->number number->txHash + asyncGetTransactionReceiptByHash(_txHash, false, + [this, _txHash, _onGetProof = std::move(_onGetProof)]( + Error::Ptr _error, TransactionReceipt::ConstPtr _receipt, const MerkleProofPtr&) { + if (_error || !_receipt) + { + LEDGER_LOG(DEBUG) << LOG_BADGE("getTxProof") + << LOG_DESC("getReceiptByTxHash from storage failed") + << LOG_KV("txHash", _txHash.hex()); + _onGetProof(std::forward(_error), nullptr); + return; + } + asyncGetBlockTransactionHashes(_receipt->blockNumber(), + [this, _onGetProof, _txHash = std::move(_txHash)]( + Error::Ptr&& _error, std::vector&& _hashList) { + if (_error || _hashList.empty()) + { + LEDGER_LOG(DEBUG) + << LOG_BADGE("getTxProof") + << LOG_DESC("asyncGetBlockTransactionHashes from storage failed") + << LOG_KV("txHash", _txHash.hex()); + _onGetProof(std::forward(_error), nullptr); + return; + } + asyncBatchGetTransactions(std::make_shared>(_hashList), + [cryptoSuite = m_blockFactory->cryptoSuite(), _onGetProof, + _txHash = std::move(_txHash)]( + Error::Ptr&& _error, std::vector&& _txList) { + if (_error || _txList.empty()) + { + LEDGER_LOG(DEBUG) + << LOG_BADGE("getTxProof") << LOG_DESC("getTxs callback failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + _onGetProof(std::forward(_error), nullptr); + return; + } + auto merkleProofPtr = std::make_shared(); + auto anyHasher = cryptoSuite->hashImpl()->hasher(); + std::visit( + [txHash = std::move(_txHash), &_txList, &merkleProofPtr]( + auto&& hasher) { + using Hasher = std::remove_reference_t; + bcos::crypto::merkle::Merkle merkle; + auto hashesRange = + _txList | RANGES::views::transform( + [](const Transaction::Ptr& transaction) { + return transaction->hash(); + }); + merkle.template generateMerkleProof( + hashesRange, txHash, *merkleProofPtr); + }, + anyHasher); + + LEDGER_LOG(TRACE) + << LOG_BADGE("getTxProof") << LOG_DESC("get merkle proof success") + << LOG_KV("txHash", _txHash.hex()); + _onGetProof(nullptr, std::move(merkleProofPtr)); + }); + }); + }); +} + +void Ledger::getReceiptProof(protocol::TransactionReceipt::Ptr _receipt, + std::function _onGetProof) +{ + // receipt->number number->txs txs->receipts + asyncGetBlockTransactionHashes(_receipt->blockNumber(), + [this, _onGetProof = std::move(_onGetProof), receiptHash = _receipt->hash()]( + Error::Ptr&& _error, std::vector&& _hashList) { + if (_error) + { + _onGetProof(std::forward(_error), nullptr); + return; + } + + asyncBatchGetReceipts(std::make_shared>(_hashList), + [cryptoSuite = this->m_blockFactory->cryptoSuite(), _onGetProof, + receiptHash = receiptHash](Error::Ptr&& _error, + std::vector&& _receiptList) { + if (_error || _receiptList.empty()) + { + LEDGER_LOG(DEBUG) << LOG_BADGE("getReceiptProof") + << LOG_DESC("asyncBatchGetReceipts callback failed"); + _onGetProof(std::forward(_error), nullptr); + return; + } + auto merkleProofPtr = std::make_shared(); + auto anyHasher = cryptoSuite->hashImpl()->hasher(); + std::visit( + [receiptHash = std::move(receiptHash), &_receiptList, &merkleProofPtr]( + auto&& hasher) { + using Hasher = std::remove_reference_t; + bcos::crypto::merkle::Merkle merkle; + auto hashesRange = + _receiptList | RANGES::views::transform( + [](const TransactionReceipt::Ptr& receipt) { + return receipt->hash(); + }); + merkle.template generateMerkleProof( + hashesRange, std::move(receiptHash), *merkleProofPtr); + }, + anyHasher); + _onGetProof(nullptr, std::move(merkleProofPtr)); + }); + }); +} + +// sync method +bool Ledger::buildGenesisBlock(LedgerConfig::Ptr _ledgerConfig, size_t _gasLimit, + const std::string_view& _genesisData, std::string const& _compatibilityVersion) +{ + LEDGER_LOG(INFO) << LOG_DESC("[#buildGenesisBlock]"); + if (_gasLimit < TX_GAS_LIMIT_MIN) + { + LEDGER_LOG(FATAL) << LOG_BADGE("buildGenesisBlock") + << LOG_DESC("gas limit too low, return false") + << LOG_KV("gasLimit", _gasLimit) + << LOG_KV("gasLimitMin", TX_GAS_LIMIT_MIN); + return false; + } + + std::promise> getBlockPromise; + asyncGetBlockHashByNumber(0, [&](Error::Ptr error, bcos::crypto::HashType hash) { + getBlockPromise.set_value({std::move(error), hash}); + }); + + auto getBlockResult = getBlockPromise.get_future().get(); + if (std::get<0>(getBlockResult) && + std::get<0>(getBlockResult)->errorCode() != LedgerError::GetStorageError) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(getBlockResult))); + } + + if (std::get<1>(getBlockResult)) + { + // genesis block exists, quit + LEDGER_LOG(INFO) << LOG_DESC("[#buildGenesisBlock] success, block exists"); + std::promise blockHeaderFuture; + // get genesisBlockHeader + asyncGetBlockDataByNumber( + 0, HEADER, [&blockHeaderFuture](Error::Ptr error, Block::Ptr block) { + if (error) + { + LEDGER_LOG(INFO) << "Get genesisBlockHeader from storage failed"; + blockHeaderFuture.set_value(nullptr); + } + else + { + blockHeaderFuture.set_value(block->blockHeader()); + } + }); + bcos::protocol::BlockHeader::Ptr m_genesisBlockHeader = + blockHeaderFuture.get_future().get(); + auto initialGenesisData = m_genesisBlockHeader->extraData().toString(); + // check genesisData whether inconsistent with initialGenesisData + if (initialGenesisData == _genesisData) + { + auto version = bcos::tool::toVersionNumber(_compatibilityVersion); + if (version > (uint32_t)protocol::BlockVersion::MAX_VERSION || + version < (uint32_t)protocol::BlockVersion::MIN_VERSION) + { + BOOST_THROW_EXCEPTION(bcos::tool::InvalidVersion() << errinfo_comment( + "Current genesis compatibilityVersion is " + + _compatibilityVersion + ", No support this version")); + } + else + { + return true; + } + } + else + { + // GetBlockDataByNumber success but not consistent with initialGenesisData + if (m_genesisBlockHeader) + { + std::cout << "The Genesis Data is inconsistent with the initial Genesis Data. " + << std::endl + << LOG_KV("initialGenesisData", initialGenesisData) << std::endl + << LOG_KV("genesisData", _genesisData) << std::endl; + BOOST_THROW_EXCEPTION( + bcos::tool::InvalidConfig() << errinfo_comment( + "The Genesis Data is inconsistent with the initial Genesis Data")); + } + else + { + LEDGER_LOG(INFO) << "error! initialGenesisDate is null"; + } + } + } + auto versionNumber = bcos::tool::toVersionNumber(_compatibilityVersion); + // clang-format off + std::vector tables { + SYS_CONFIG, SYS_VALUE_AND_ENABLE_BLOCK_NUMBER, + SYS_CONSENSUS, SYS_VALUE, + SYS_CURRENT_STATE, SYS_VALUE, + SYS_HASH_2_TX, SYS_VALUE, + SYS_HASH_2_NUMBER, SYS_VALUE, + SYS_NUMBER_2_HASH, SYS_VALUE, + SYS_NUMBER_2_BLOCK_HEADER, SYS_VALUE, + SYS_NUMBER_2_TXS, SYS_VALUE, + SYS_HASH_2_RECEIPT, SYS_VALUE, + SYS_BLOCK_NUMBER_2_NONCES, SYS_VALUE, + }; + + if (versionNumber >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + std::vector moreTables{ + SYS_CODE_BINARY, SYS_VALUE, + SYS_CONTRACT_ABI, SYS_VALUE + }; + + for (auto v : moreTables) + { + tables.push_back(v); + } + } + // clang-format on + + size_t total = tables.size(); + + for (size_t i = 0; i < total; i += 2) + { + std::promise> createTablePromise; + m_storage->asyncCreateTable(std::string(tables[i]), std::string(tables[i + 1]), + [&createTablePromise](auto&& error, std::optional
&&) { + createTablePromise.set_value({std::move(error)}); + }); + auto createTableResult = createTablePromise.get_future().get(); + if (std::get<0>(createTableResult)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(createTableResult))); + } + } + + + createFileSystemTables(versionNumber); + if (versionNumber > (uint32_t)protocol::BlockVersion::MAX_VERSION) + { + BOOST_THROW_EXCEPTION(bcos::tool::InvalidVersion() << errinfo_comment( + "The genesis compatibilityVersion is " + _compatibilityVersion + + ", high than support maxVersion")); + } + + auto txLimit = _ledgerConfig->blockTxCountLimit(); + LEDGER_LOG(INFO) << LOG_DESC("Commit the genesis block") << LOG_KV("txLimit", txLimit) + << LOG_KV("leaderSwitchPeriod", _ledgerConfig->leaderSwitchPeriod()) + << LOG_KV("blockTxCountLimit", _ledgerConfig->blockTxCountLimit()) + << LOG_KV("compatibilityVersion", _compatibilityVersion) + << LOG_KV("minSupportedVersion", g_BCOSConfig.minSupportedVersion()) + << LOG_KV("maxSupportedVersion", g_BCOSConfig.maxSupportedVersion()); + + // build a block + auto header = m_blockFactory->blockHeaderFactory()->createBlockHeader(); + header->setNumber(0); + if (versionNumber >= (uint32_t)protocol::BlockVersion::V3_1_VERSION) + { + header->setVersion(versionNumber); + } + header->setExtraData(bcos::bytes(_genesisData.begin(), _genesisData.end())); + header->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + + auto block = m_blockFactory->createBlock(); + block->setBlockHeader(header); + + std::promise genesisBlockPromise; + asyncPrewriteBlock(m_storage, nullptr, block, [&genesisBlockPromise](Error::Ptr&& error) { + genesisBlockPromise.set_value(std::move(error)); + }); + + auto error = genesisBlockPromise.get_future().get(); + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + // write sys config + std::promise>> sysTablePromise; + m_storage->asyncOpenTable( + SYS_CONFIG, [&sysTablePromise](auto&& error, std::optional
&& table) { + sysTablePromise.set_value({std::move(error), std::move(table)}); + }); + + auto [tableError, sysTable] = sysTablePromise.get_future().get(); + if (tableError) + { + BOOST_THROW_EXCEPTION(*tableError); + } + + if (!sysTable) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(LedgerError::OpenTableFailed, "Open SYS_CONFIG failed!")); + } + + // tx count limit + Entry txLimitEntry; + txLimitEntry.setObject( + SystemConfigEntry{boost::lexical_cast(_ledgerConfig->blockTxCountLimit()), 0}); + sysTable->setRow(SYSTEM_KEY_TX_COUNT_LIMIT, std::move(txLimitEntry)); + + // tx gas limit + Entry gasLimitEntry; + gasLimitEntry.setObject(SystemConfigEntry{boost::lexical_cast(_gasLimit), 0}); + sysTable->setRow(SYSTEM_KEY_TX_GAS_LIMIT, std::move(gasLimitEntry)); + + // consensus leader period + Entry leaderPeriodEntry; + leaderPeriodEntry.setObject(SystemConfigEntry{ + boost::lexical_cast(_ledgerConfig->leaderSwitchPeriod()), 0}); + sysTable->setRow(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, std::move(leaderPeriodEntry)); + + LEDGER_LOG(INFO) << LOG_DESC("init the compatibilityVersion") + << LOG_KV("versionNumber", versionNumber); + // write compatibility version + Entry compatibilityVersionEntry; + compatibilityVersionEntry.setObject(SystemConfigEntry{_compatibilityVersion, 0}); + sysTable->setRow(SYSTEM_KEY_COMPATIBILITY_VERSION, std::move(compatibilityVersionEntry)); + + // write consensus node list + std::promise>> consensusTablePromise; + m_storage->asyncOpenTable(SYS_CONSENSUS, [&consensusTablePromise]( + auto&& error, std::optional
&& table) { + consensusTablePromise.set_value({std::forward(error), std::move(table)}); + }); + + auto [consensusError, consensusTable] = consensusTablePromise.get_future().get(); + if (consensusError) + { + BOOST_THROW_EXCEPTION(*consensusError); + } + + if (!consensusTable) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(LedgerError::OpenTableFailed, "Open SYS_CONSENSUS failed!")); + } + + ConsensusNodeList consensusNodeList; + + for (const auto& node : _ledgerConfig->consensusNodeList()) + { + consensusNodeList.emplace_back( + node->nodeID()->hex(), node->weight(), std::string{CONSENSUS_SEALER}, "0"); + } + + for (const auto& node : _ledgerConfig->observerNodeList()) + { + consensusNodeList.emplace_back( + node->nodeID()->hex(), node->weight(), std::string{CONSENSUS_OBSERVER}, "0"); + } + + Entry consensusNodeListEntry; + consensusNodeListEntry.importFields({encodeConsensusList(consensusNodeList)}); + + std::promise setConsensusNodeListPromise; + consensusTable->asyncSetRow("key", std::move(consensusNodeListEntry), + [&setConsensusNodeListPromise]( + Error::UniquePtr&& error) { setConsensusNodeListPromise.set_value(std::move(error)); }); + + auto setConsensusNodeListError = setConsensusNodeListPromise.get_future().get(); + if (setConsensusNodeListError) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR_WITH_PREV( + LedgerError::CallbackError, "Write genesis consensus node list error!", *error)); + } + + // write current state + std::promise>> stateTablePromise; + m_storage->asyncOpenTable( + SYS_CURRENT_STATE, [&stateTablePromise](auto&& error, std::optional
&& table) { + stateTablePromise.set_value({std::forward(error), std::move(table)}); + }); + + auto [stateError, stateTable] = stateTablePromise.get_future().get(); + if (stateError) + { + BOOST_THROW_EXCEPTION(*stateError); + } + + if (!stateTable) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(LedgerError::OpenTableFailed, "Open SYS_CURRENT_STATE failed!")); + } + + Entry currentNumber; + currentNumber.importFields({"0"}); + stateTable->setRow(SYS_KEY_CURRENT_NUMBER, std::move(currentNumber)); + + Entry txNumber; + txNumber.importFields({"0"}); + stateTable->setRow(SYS_KEY_TOTAL_TRANSACTION_COUNT, std::move(txNumber)); + + Entry txFailedNumber; + txFailedNumber.importFields({"0"}); + stateTable->setRow(SYS_KEY_TOTAL_FAILED_TRANSACTION, std::move(txFailedNumber)); + + Entry archivedNumber; + archivedNumber.importFields({"0"}); + stateTable->setRow(SYS_KEY_ARCHIVED_NUMBER, std::move(archivedNumber)); + + return true; +} + +void Ledger::createFileSystemTables(uint32_t blockVersion) +{ + std::array rootSubNames = { + tool::FS_APPS, tool::FS_USER, tool::FS_USER_TABLE, tool::FS_SYS_BIN}; + + /// blockVersion >= 3.1.0, use executor build + if (blockVersion >= (uint32_t)BlockVersion::V3_1_VERSION) + { + return; + } + buildDir(tool::FS_ROOT, blockVersion); + // root table must exist + + Entry rootSubEntry; + std::map rootSubMap; + for (const auto& sub : rootSubNames | RANGES::views::transform( + [](std::string_view const& sub) -> std::string_view { + return sub.substr(1); + })) + { + rootSubMap.insert(std::make_pair(sub, FS_TYPE_DIR)); + } + rootSubEntry.importFields({asString(codec::scale::encode(rootSubMap))}); + std::promise setPromise; + m_storage->asyncSetRow( + bcos::tool::FS_ROOT, FS_KEY_SUB, std::move(rootSubEntry), [&setPromise](auto&& error) { + setPromise.set_value(std::forward(error)); + }); + auto setError = setPromise.get_future().get(); + if (setError) + { + BOOST_THROW_EXCEPTION(*setError); + } + + buildDir(tool::FS_USER, blockVersion); + buildDir(tool::FS_APPS, blockVersion); + buildDir(tool::FS_USER_TABLE, blockVersion); + auto sysTable = buildDir(tool::FS_SYS_BIN, blockVersion); + Entry sysSubEntry; + std::map sysSubMap; + for (const auto& contract : + precompiled::BFS_SYS_SUBS | + RANGES::views::transform([](std::string_view const& sub) -> std::string_view { + return sub.substr(tool::FS_SYS_BIN.length() + 1); + })) + { + sysSubMap.insert(std::make_pair(contract, FS_TYPE_CONTRACT)); + } + sysSubEntry.importFields({asString(codec::scale::encode(sysSubMap))}); + sysTable->setRow(FS_KEY_SUB, std::move(sysSubEntry)); +} + +std::optional Ledger::buildDir( + const std::string_view& _absoluteDir, uint32_t blockVersion, std::string valueField) +{ + std::promise>> createPromise; + m_storage->asyncCreateTable(std::string(_absoluteDir), std::move(valueField), + [&createPromise](auto&& error, std::optional
&& _table) { + createPromise.set_value({std::forward(error), std::move(_table)}); + }); + auto [createError, table] = createPromise.get_future().get(); + if (createError) + { + BOOST_THROW_EXCEPTION(*createError); + } + if (blockVersion >= (uint32_t)BlockVersion::V3_1_VERSION) + { + // >= 3.1.0 logic + return table; + } + // 3.0.0 logic + Entry tEntry; + Entry newSubEntry; + Entry aclTypeEntry; + Entry aclWEntry; + Entry aclBEntry; + Entry extraEntry; + std::map newSubMap; + newSubEntry.importFields({asString(codec::scale::encode(newSubMap))}); + tEntry.importFields({std::string(FS_TYPE_DIR)}); + aclTypeEntry.importFields({"0"}); + aclWEntry.importFields({""}); + aclBEntry.importFields({""}); + extraEntry.importFields({""}); + table->setRow(FS_KEY_TYPE, std::move(tEntry)); + table->setRow(FS_KEY_SUB, std::move(newSubEntry)); + table->setRow(FS_ACL_TYPE, std::move(aclTypeEntry)); + table->setRow(FS_ACL_WHITE, std::move(aclWEntry)); + table->setRow(FS_ACL_BLACK, std::move(aclBEntry)); + table->setRow(FS_KEY_EXTRA, std::move(extraEntry)); + return table; +} + +void Ledger::asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) +{ + m_storage->asyncOpenTable(SYS_CURRENT_STATE, [this, callback = std::move(_callback), _key]( + auto&& error, std::optional
&& table) { + auto tableError = + checkTableValid(std::forward(error), table, SYS_CURRENT_STATE); + if (tableError) + { + LEDGER_LOG(DEBUG) << LOG_DESC("asyncGetCurrentStateByKey failed") << LOG_KV("key", _key) + << boost::diagnostic_information(*tableError); + callback(std::move(tableError), {}); + return; + } + table->asyncGetRow(_key, [_key, &callback](auto&& error, std::optional&& entry) { + if (error) + { + LEDGER_LOG(DEBUG) << LOG_DESC("asyncGetCurrentStateByKey exception") + << LOG_KV("key", _key) << boost::diagnostic_information(*error); + callback( + BCOS_ERROR_WITH_PREV_PTR(LedgerError::GetStorageError, "Get row error", *error), + {}); + return; + } + callback(nullptr, std::move(entry)); + }); + }); +} diff --git a/bcos-ledger/src/libledger/Ledger.h b/bcos-ledger/src/libledger/Ledger.h new file mode 100644 index 0000000..b8b95ea --- /dev/null +++ b/bcos-ledger/src/libledger/Ledger.h @@ -0,0 +1,157 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Ledger.h + * @author: kyonRay + * @date 2021-04-13 + */ +#pragma once +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/protocol/BlockFactory.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/storage/Common.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "utilities/Common.h" +#include +#include +#include +#include + +#define LEDGER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("LEDGER") + +namespace bcos::ledger +{ +class Ledger : public LedgerInterface, public std::enable_shared_from_this +{ +public: + Ledger(bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::storage::StorageInterface::Ptr _storage) + : m_blockFactory(std::move(_blockFactory)), + m_storage(std::move(_storage)), + m_threadPool(std::make_shared("WriteReceipts", 1)) + {} + + ~Ledger() override = default; + + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr _blockTxs, + bcos::protocol::Block::ConstPtr block, + std::function _callback) override; + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts = true) override; + + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) override; + + void asyncGetBlockDataByNumber(bcos::protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) override; + + void asyncGetBlockNumber( + std::function _onGetBlock) override; + + void asyncGetBlockHashByNumber(bcos::protocol::BlockNumber _blockNumber, + std::function _onGetBlock) override; + + void asyncGetBlockNumberByHash(const crypto::HashType& _blockHash, + std::function _onGetBlock) override; + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) override; + + void asyncGetTransactionReceiptByHash(bcos::crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) override; + + void asyncGetTotalTransactionCount( + std::function _callback) + override; + + void asyncGetSystemConfigByKey(const std::string_view& _key, + std::function _onGetConfig) + override; + + void asyncGetNonceList(bcos::protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) override; + + void asyncGetNodeListByType(const std::string_view& _type, + std::function _onGetConfig) override; + + void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) + override; + + /****** init ledger ******/ + bool buildGenesisBlock(LedgerConfig::Ptr _ledgerConfig, size_t _gasLimit, + const std::string_view& _genesisData, std::string const& _compatibilityVersion); + + void asyncGetBlockTransactionHashes(bcos::protocol::BlockNumber blockNumber, + std::function&&)> callback); + + +private: + Error::Ptr checkTableValid(Error::UniquePtr&& error, + const std::optional& table, const std::string_view& tableName); + + Error::Ptr checkEntryValid(Error::UniquePtr&& error, + const std::optional& entry, const std::string_view& key); + + void asyncGetBlockHeader(bcos::protocol::Block::Ptr block, + bcos::protocol::BlockNumber blockNumber, std::function callback); + + void asyncBatchGetTransactions(std::shared_ptr> hashes, + std::function&&)> callback); + + void asyncBatchGetReceipts(std::shared_ptr> hashes, + std::function&&)> + callback); + + void asyncGetSystemTableEntry(const std::string_view& table, const std::string_view& key, + std::function&&)> callback); + + void getTxProof(const crypto::HashType& _txHash, + std::function _onGetProof); + + void getReceiptProof(protocol::TransactionReceipt::Ptr _receipt, + std::function _onGetProof); + + void createFileSystemTables(uint32_t blockVersion); + + std::optional buildDir(const std::string_view& _absoluteDir, + uint32_t blockVersion, std::string valueField = SYS_VALUE); + + // only for /sys/ + inline std::string getSysBaseName(const std::string& _s) + { + return _s.substr(_s.find_last_of('/') + 1); + } + + std::tuple>> + needStoreUnsavedTxs( + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr _block); + + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::storage::StorageInterface::Ptr m_storage; + + mutable RecursiveMutex m_mutex; + std::shared_ptr m_threadPool; +}; +} // namespace bcos::ledger \ No newline at end of file diff --git a/bcos-ledger/src/libledger/LedgerImpl.h b/bcos-ledger/src/libledger/LedgerImpl.h new file mode 100644 index 0000000..d38c2ed --- /dev/null +++ b/bcos-ledger/src/libledger/LedgerImpl.h @@ -0,0 +1,653 @@ +#pragma once + +#include "Ledger.h" +#include "bcos-task/Task.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::ledger +{ + +// clang-format off +struct NotFoundTransaction : public bcos::error::Exception {}; +struct UnexpectedRowIndex : public bcos::error::Exception {}; +struct MismatchTransactionCount : public bcos::error::Exception {}; +struct MismatchParentHash: public bcos::error::Exception {}; +struct NotFoundBlockHeader: public bcos::error::Exception {}; +struct GetABIError : public bcos::error::Exception {}; +// clang-format on + +template +class LedgerImpl : public bcos::concepts::ledger::LedgerBase>, + public Ledger +{ + friend bcos::concepts::ledger::LedgerBase>; + +public: + LedgerImpl(Storage storage, bcos::protocol::BlockFactory::Ptr blockFactory, + bcos::storage::StorageInterface::Ptr storageInterface) + : Ledger(std::move(blockFactory), storageInterface), m_backupStorage(storageInterface), m_storage{std::move(storage)} + {} + + void setKeyPageSize(size_t keyPageSize){m_keyPageSize = keyPageSize;} + +private: + template + task::Task impl_getBlock(bcos::concepts::block::BlockNumber auto blockNumber, + bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(INFO) << "getBlock: " << blockNumber; + + auto blockNumberStr = boost::lexical_cast(blockNumber); + (co_await getBlockData(blockNumberStr, block), ...); + } + + template + task::Task impl_setBlock(bcos::concepts::block::Block auto block) + { + LEDGER_LOG(INFO) << "setBlock: " << block.blockHeader.data.blockNumber; + + auto blockNumberStr = boost::lexical_cast(block.blockHeader.data.blockNumber); + (co_await setBlockData(blockNumberStr, block), ...); + co_return; + } + + task::Task impl_getBlockNumberByHash( + bcos::concepts::bytebuffer::ByteBuffer auto const& hash, std::integral auto& number) + { + LEDGER_LOG(INFO) << "getBlockNumberByHash request"; + + auto entry = storage().getRow(SYS_HASH_2_NUMBER, bcos::concepts::bytebuffer::toView(hash)); + + if (!entry) + { + number = -1; + co_return; + } + + try + { + number = boost::lexical_cast(entry->getField(0)); + } + catch (boost::bad_lexical_cast& e) + { + // Ignore the exception + LEDGER_LOG(INFO) << "Cast blockNumber failed, may be empty, set to default value -1" + << LOG_KV("blockNumber str", entry->getField(0)); + number = -1; + } + } + + task::Task impl_getBlockHashByNumber( + std::integral auto number, bcos::concepts::bytebuffer::ByteBuffer auto& hash) + { + LEDGER_LOG(INFO) << "getBlockHashByNumber request" << LOG_KV("blockNumber", number); + + auto key = boost::lexical_cast(number); + auto entry = storage().getRow(SYS_NUMBER_2_HASH, key); + if (!entry) + { + LEDGER_LOG(WARNING) << "Not found block number: " << number; + co_return; + } + + auto hashStr = entry->getField(0); + bcos::concepts::bytebuffer::assignTo(hashStr, hash); + } + + task::Task impl_getABI(std::string _contractAddress){ + //try to get compatibilityVersion + std::string contractTableName = getContractTableName(_contractAddress); + auto versionEntry = storage().getRow(ledger::SYS_CONFIG, ledger::SYSTEM_KEY_COMPATIBILITY_VERSION); + auto [compatibilityVersionStr, number] = versionEntry->template getObject(); + if (!versionEntry) + { + LEDGER_LOG(WARNING) << "Not found compatibilityVersion: "; + BOOST_THROW_EXCEPTION(GetABIError{} + << bcos::error::ErrorMessage{"get compatibilityVersion not found"}); + } + m_compatibilityVersion = bcos::tool::toVersionNumber(compatibilityVersionStr); + LEDGER_LOG(TRACE) << "getABI contractAddress is: " << _contractAddress << ", contractTableName is: " + << contractTableName <<", m_compatibilityVersion is " << m_compatibilityVersion; + + //create keyPageStorage + auto stateStorageFactory = std::make_shared(m_keyPageSize); + auto stateStorage = stateStorageFactory->createStateStorage(m_backupStorage, m_compatibilityVersion); + + //try to get codeHash + auto codeHashEntry = stateStorage->getRow(contractTableName, "codeHash"); + if(!codeHashEntry.second)[[unlikely]] + { + LEDGER_LOG(WARNING) << "Not found codeHash contractAddress:" << _contractAddress; + BOOST_THROW_EXCEPTION(GetABIError{} + << bcos::error::ErrorMessage{"Get CodeHash not found"}); + } + auto codeHash = codeHashEntry.second->getField(0); + + //according to codeHash get abi + auto entry = stateStorage->getRow(SYS_CONTRACT_ABI, codeHash); + if(!entry.second)[[unlikely]] + { + LEDGER_LOG(WARNING) << "Not found contractAddress abi:" << _contractAddress; + BOOST_THROW_EXCEPTION( + GetABIError{} + << bcos::error::ErrorMessage{"Get Abi not found"}); + } + + std::string abiStr = std::string(entry.second->getField(0)); + LEDGER_LOG(TRACE) << "contractAddress is " << _contractAddress << "ledger impl get abi is: " << abiStr; + co_return abiStr; + } + + task::Task impl_getTransactions(RANGES::range auto const& hashes, RANGES::range auto& out) + { + bcos::concepts::resizeTo(out, RANGES::size(hashes)); + using DataType = RANGES::range_value_t>; + + constexpr auto tableName = + bcos::concepts::transaction::Transaction ? SYS_HASH_2_TX : SYS_HASH_2_RECEIPT; + + LEDGER_LOG(INFO) << "getTransactions: " << tableName << " " << RANGES::size(hashes); + auto entries = storage().getRows(std::string_view{tableName}, hashes); + + bcos::concepts::resizeTo(out, RANGES::size(hashes)); + tbb::parallel_for(tbb::blocked_range(0U, RANGES::size(entries)), + [&entries, &out](const tbb::blocked_range& range) { + for (auto index = range.begin(); index != range.end(); ++index) + { + if (!entries[index]) + { + [[unlikely]] BOOST_THROW_EXCEPTION( + NotFoundTransaction{} + << bcos::error::ErrorMessage{"Get transaction not found"}); + } + + auto field = entries[index]->getField(0); + bcos::concepts::serialize::decode(field, out[index]); + } + }); + + co_return; + } + + task::Task impl_getStatus() + { + LEDGER_LOG(TRACE) << "getStatus"; + constexpr static auto keys = std::to_array({SYS_KEY_TOTAL_TRANSACTION_COUNT, + SYS_KEY_TOTAL_FAILED_TRANSACTION, SYS_KEY_CURRENT_NUMBER}); + + bcos::concepts::ledger::Status status; + auto entries = storage().getRows(SYS_CURRENT_STATE, keys); + for (auto i = 0U; i < RANGES::size(entries); ++i) + { + auto& entry = entries[i]; + + int64_t value = 0; + if (entry) + { + [[likely]] value = boost::lexical_cast(entry->getField(0)); + } + + switch (i) + { + case 0: + status.total = value; + break; + case 1: + status.failed = value; + break; + case 2: + status.blockNumber = value; + break; + default: + BOOST_THROW_EXCEPTION( + UnexpectedRowIndex{} << bcos::error::ErrorMessage{ + "Unexpected getRows index: " + boost::lexical_cast(i)}); + break; + } + } + LEDGER_LOG(TRACE) << "getStatus result: " << status.total << " | " << status.failed << " | " + << status.blockNumber; + + co_return status; + } + + template + task::Task impl_setTransactions(RANGES::range auto hashes, RANGES::range auto buffers) + { + auto count = RANGES::size(buffers); + if (count != RANGES::size(hashes)) + { + BOOST_THROW_EXCEPTION( + MismatchTransactionCount{} << bcos::error::ErrorMessage{"No match count"}); + } + constexpr auto tableName = isTransaction ? SYS_HASH_2_TX : SYS_HASH_2_RECEIPT; + + LEDGER_LOG(INFO) << "setTransactionBuffers: " << tableName << " " << RANGES::size(hashes); + + for (auto i = 0U; i < count; ++i) + { + bcos::storage::Entry entry; + entry.importFields({std::move(buffers[i])}); + + auto const& hash = hashes[i]; + storage().setRow( + tableName, std::string_view(std::data(hash), RANGES::size(hash)), std::move(entry)); + } + + co_return; + } + + template + task::Task impl_sync(LedgerType& source, bool onlyHeader) + { + auto& sourceLedger = bcos::concepts::getRef(source); + + auto status = co_await impl_getStatus(); + auto sourceStatus = co_await sourceLedger.getStatus(); + + std::optional parentBlock; + size_t syncedBlock = 0; + for (auto blockNumber = status.blockNumber + 1; blockNumber <= sourceStatus.blockNumber; + ++blockNumber) + { + LEDGER_LOG(INFO) << "Syncing block from remote: " << blockNumber << " | " + << sourceStatus.blockNumber << " | " << onlyHeader; + BlockType block; + if (onlyHeader) + { + co_await sourceLedger.template getBlock( + blockNumber, block); + } + else + { + co_await sourceLedger.template getBlock( + blockNumber, block); + } + + if (blockNumber > 0) // Ignore verify genesis block + { + if (!parentBlock) + { + parentBlock = BlockType(); + co_await impl_getBlock( + blockNumber - 1, *parentBlock); + } + + std::array parentHash; + bcos::concepts::hash::calculate(*parentBlock, parentHash); + + if (RANGES::empty(block.blockHeader.data.parentInfo) || + (block.blockHeader.data.parentInfo[0].blockNumber != + parentBlock->blockHeader.data.blockNumber) || + !bcos::concepts::bytebuffer::equalTo( + block.blockHeader.data.parentInfo[0].blockHash, parentHash)) + { + LEDGER_LOG(ERROR) << "ParentHash mismatch!"; + BOOST_THROW_EXCEPTION( + MismatchParentHash{} << bcos::error::ErrorMessage{"No match parentHash!"}); + } + } + + if (onlyHeader) + { + co_await impl_setBlock(block); + } + else + { + co_await impl_setBlock(block); + } + + parentBlock = std::move(block); + ++syncedBlock; + } + + co_return syncedBlock; + } + + template > + task::Task getBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "getBlockData header: " << blockNumberKey; + + auto entry = storage().getRow(SYS_NUMBER_2_BLOCK_HEADER, blockNumberKey); + if (!entry) [[unlikely]] + { + BOOST_THROW_EXCEPTION( + NotFoundBlockHeader{} << bcos::error::ErrorMessage{"Not found block header!"}); + } + + auto field = entry->getField(0); + bcos::concepts::serialize::decode(field, block.blockHeader); + + co_return; + } + + template > + task::Task getBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "getBlockData transaction metadata: " << blockNumberKey; + + auto entry = storage().getRow(SYS_NUMBER_2_TXS, blockNumberKey); + if (!entry) [[unlikely]] + { + LEDGER_LOG(INFO) << "GetBlock not found transaction meta data!"; + co_return; + } + + auto field = entry->getField(0); + std::remove_reference_t metadataBlock; + bcos::concepts::serialize::decode(field, metadataBlock); + block.transactionsMetaData = std::move(metadataBlock.transactionsMetaData); + block.transactionsMerkle = std::move(metadataBlock.transactionsMerkle); + block.receiptsMerkle = std::move(metadataBlock.receiptsMerkle); + } + + template + requires std::same_as || + std::same_as + task::Task getBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "getBlockData transactions or receipts: " << blockNumberKey; + + if (RANGES::empty(block.transactionsMetaData)) + { + LEDGER_LOG(INFO) << "GetBlock not found transaction meta data!"; + co_return; + } + + auto hashesRange = block.transactionsMetaData | RANGES::views::transform([ + ](typename decltype(block.transactionsMetaData)::value_type const& metaData) -> auto& { + return metaData.hash; + }); + auto outputSize = RANGES::size(block.transactionsMetaData); + + if constexpr (std::is_same_v) + { + bcos::concepts::resizeTo(block.transactions, outputSize); + co_await impl_getTransactions(std::move(hashesRange), block.transactions); + } + else + { + bcos::concepts::resizeTo(block.receipts, outputSize); + co_await impl_getTransactions(std::move(hashesRange), block.receipts); + } + } + + template > + task::Task getBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "getBlockData nonce: " << blockNumberKey; + + auto entry = storage().getRow(SYS_BLOCK_NUMBER_2_NONCES, blockNumberKey); + if (!entry) + { + LEDGER_LOG(INFO) << "GetBlock not found nonce data!"; + co_return; + } + + std::remove_reference_t nonceBlock; + auto field = entry->getField(0); + bcos::concepts::serialize::decode(field, nonceBlock); + block.nonceList = std::move(nonceBlock.nonceList); + } + + template > + task::Task getBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "getBlockData all: " << blockNumberKey; + + co_await getBlockData(blockNumberKey, block); + co_await getBlockData(blockNumberKey, block); + co_await getBlockData(blockNumberKey, block); + co_await getBlockData(blockNumberKey, block); + co_await getBlockData(blockNumberKey, block); + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData header: " << blockNumberKey; + + // number 2 header + bcos::storage::Entry number2HeaderEntry; + std::vector number2HeaderBuffer; + bcos::concepts::serialize::encode(block.blockHeader, number2HeaderBuffer); + number2HeaderEntry.importFields({std::move(number2HeaderBuffer)}); + storage().setRow(SYS_NUMBER_2_BLOCK_HEADER, blockNumberKey, std::move(number2HeaderEntry)); + + // number 2 block hash + bcos::storage::Entry hashEntry; + hashEntry.importFields({block.blockHeader.dataHash}); + storage().setRow(SYS_NUMBER_2_HASH, blockNumberKey, std::move(hashEntry)); + + // block hash 2 number + bcos::storage::Entry hash2NumberEntry; + hash2NumberEntry.importFields({std::string(blockNumberKey)}); + storage().setRow(SYS_HASH_2_NUMBER, + std::string_view{block.blockHeader.dataHash.data(), block.blockHeader.dataHash.size()}, + std::move(hash2NumberEntry)); + + // current number + bcos::storage::Entry numberEntry; + numberEntry.importFields({std::string(blockNumberKey)}); + storage().setRow(SYS_CURRENT_STATE, SYS_KEY_CURRENT_NUMBER, std::move(numberEntry)); + + co_return; + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData nonce " << blockNumberKey; + + std::remove_cvref_t blockNonceList; + blockNonceList.nonceList = std::move(block.nonceList); + bcos::storage::Entry number2NonceEntry; + std::vector number2NonceBuffer; + bcos::concepts::serialize::encode(blockNonceList, number2NonceBuffer); + number2NonceEntry.importFields({std::move(number2NonceBuffer)}); + storage().setRow(SYS_BLOCK_NUMBER_2_NONCES, blockNumberKey, std::move(number2NonceEntry)); + + co_return; + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData transaction metadata: " << blockNumberKey; + + if (RANGES::empty(block.transactionsMetaData) && !RANGES::empty(block.transactions)) + { + block.transactionsMetaData.resize(block.transactions.size()); + tbb::parallel_for(tbb::blocked_range(0, block.transactions.size()), + [&block](const tbb::blocked_range& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + bcos::concepts::hash::calculate( + block.transactions[i], block.transactionsMetaData[i].hash); + } + }); + } + + if (std::empty(block.transactionsMetaData)) + { + LEDGER_LOG(INFO) << "setBlockData not found transaction meta data!"; + co_return; + } + + std::remove_cvref_t transactionsBlock; + std::swap(block.transactionsMetaData, transactionsBlock.transactionsMetaData); + + bcos::storage::Entry number2TransactionHashesEntry; + std::vector number2TransactionHashesBuffer; + bcos::concepts::serialize::encode(transactionsBlock, number2TransactionHashesBuffer); + number2TransactionHashesEntry.importFields({std::move(number2TransactionHashesBuffer)}); + storage().setRow( + SYS_NUMBER_2_TXS, blockNumberKey, std::move(number2TransactionHashesEntry)); + std::swap(transactionsBlock.transactionsMetaData, block.transactionsMetaData); + + co_return; + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData transactions: " << blockNumberKey; + + if (std::empty(block.transactionsMetaData)) + { + LEDGER_LOG(INFO) << "setBlockData not found transaction meta data!"; + co_return; + } + + std::vector> transactionBuffers(block.transactions.size()); + tbb::parallel_for(tbb::blocked_range(0, block.transactions.size()), + [&block, &transactionBuffers](const tbb::blocked_range& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& transaction = block.transactions[i]; + bcos::concepts::serialize::encode(transaction, transactionBuffers[i]); + } + }); + + auto hashView = block.transactionsMetaData | + RANGES::views::transform([](auto& metaData) { return metaData.hash; }); + co_await impl_setTransactions(hashView, std::move(transactionBuffers)); + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData receipts: " << blockNumberKey; + + if (std::empty(block.transactionsMetaData)) + { + LEDGER_LOG(INFO) << "setBlockData not found transaction meta data!"; + co_return; + } + + std::atomic_size_t totalTransactionCount = 0; + std::atomic_size_t failedTransactionCount = 0; + std::vector> receiptBuffers(block.receipts.size()); + tbb::parallel_for(tbb::blocked_range(0, block.receipts.size()), + [&block, &totalTransactionCount, &failedTransactionCount, &receiptBuffers]( + const tbb::blocked_range& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& receipt = block.receipts[i]; + if (receipt.data.status != 0) + { + ++failedTransactionCount; + } + ++totalTransactionCount; + + bcos::concepts::serialize::encode(receipt, receiptBuffers[i]); + } + }); + + auto hashView = block.transactionsMetaData | + RANGES::views::transform([](auto& metaData) { return metaData.hash; }); + co_await impl_setTransactions(hashView, std::move(receiptBuffers)); + + LEDGER_LOG(DEBUG) << LOG_DESC("Calculate tx counts in block") + << LOG_KV("number", blockNumberKey) + << LOG_KV("totalCount", totalTransactionCount) + << LOG_KV("failedCount", failedTransactionCount); + + auto transactionCount = co_await impl_getStatus(); + transactionCount.total += totalTransactionCount; + transactionCount.failed += failedTransactionCount; + + bcos::storage::Entry totalEntry; + totalEntry.importFields({boost::lexical_cast(transactionCount.total)}); + storage().setRow(SYS_CURRENT_STATE, SYS_KEY_TOTAL_TRANSACTION_COUNT, std::move(totalEntry)); + + if (transactionCount.failed > 0) + { + bcos::storage::Entry failedEntry; + failedEntry.importFields({boost::lexical_cast(transactionCount.failed)}); + storage().setRow( + SYS_CURRENT_STATE, SYS_KEY_TOTAL_FAILED_TRANSACTION, std::move(failedEntry)); + } + + LEDGER_LOG(INFO) << LOG_DESC("setBlock") + << LOG_KV("number", block.blockHeader.data.blockNumber) + << LOG_KV("totalTxs", transactionCount.total) + << LOG_KV("failedTxs", transactionCount.failed) + << LOG_KV("incTxs", totalTransactionCount) + << LOG_KV("incFailedTxs", failedTransactionCount); + } + + template > + task::Task setBlockData( + std::string_view blockNumberKey, bcos::concepts::block::Block auto& block) + { + LEDGER_LOG(DEBUG) << "setBlockData all: " << blockNumberKey; + + co_await setBlockData(blockNumberKey, block); + co_await setBlockData(blockNumberKey, block); + co_await setBlockData(blockNumberKey, block); + co_await setBlockData(blockNumberKey, block); + co_await setBlockData(blockNumberKey, block); + } + + task::Task impl_setupGenesisBlock(bcos::concepts::block::Block auto block) + { + try + { + decltype(block) currentBlock; + + co_await impl_getBlock(0, currentBlock); + co_return; + } + catch (NotFoundBlockHeader& e) + { + LEDGER_LOG(INFO) << "Not found genesis block, may be not initialized"; + } + + co_await impl_setBlock(std::move(block)); + } + + auto& storage() { return bcos::concepts::getRef(m_storage); } + + bcos::storage::StorageInterface::Ptr m_backupStorage; + Storage m_storage; + crypto::merkle::Merkle m_merkle; // Use the default width 2 + uint32_t m_compatibilityVersion; + size_t m_keyPageSize; +}; + +} // namespace bcos::ledger \ No newline at end of file diff --git a/bcos-ledger/src/libledger/utilities/Common.h b/bcos-ledger/src/libledger/utilities/Common.h new file mode 100644 index 0000000..9d3a0de --- /dev/null +++ b/bcos-ledger/src/libledger/utilities/Common.h @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: kyonRay + * @date 2021-04-13 + */ +#pragma once +#include +#include +#include +#include + +#define LEDGER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("LEDGER") + +namespace bcos::ledger +{ +// parent=>children +using Parent2ChildListMap = std::map>; +// child=>parent +using Child2ParentMap = tbb::concurrent_unordered_map; + +static const char* const SYS_VALUE = "value"; +static const char* const SYS_CONFIG_ENABLE_BLOCK_NUMBER = "enable_number"; +static const char* const SYS_VALUE_AND_ENABLE_BLOCK_NUMBER = "value,enable_number"; + +enum LedgerError : int32_t +{ + SUCCESS = 0, + OpenTableFailed = 3001, + CallbackError = 3002, + ErrorArgument = 3003, + DecodeError = 3004, + ErrorCommitBlock = 3005, + CollectAsyncCallbackError = 3006, + LedgerLockError = 3007, + GetStorageError = 3008, + EmptyEntry = 3009, + UnknownError = 3010, +}; + +} // namespace bcos::ledger diff --git a/bcos-ledger/test/CMakeLists.txt b/bcos-ledger/test/CMakeLists.txt new file mode 100644 index 0000000..ed31649 --- /dev/null +++ b/bcos-ledger/test/CMakeLists.txt @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-ledger +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp") + +# cmake settings +list(APPEND CMAKE_MODULE_PATH ${BCOS_CMAKE_SCRIPTS_DIR}) +set(TEST_BINARY_NAME test-bcos-ledger) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE ${CMAKE_BINARY_DIR}/bcos-framework) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${LEDGER_TARGET} ${CRYPTO_TARGET} ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) +target_compile_definitions(${TEST_BINARY_NAME} PUBLIC _TESTS_) +# add_test(NAME test-ledger WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) +include(SearchTestCases) +config_test_cases("" "${SOURCES}" ${TEST_BINARY_NAME} "${EXCLUDE_SUITES}") diff --git a/bcos-ledger/test/main/main.cpp b/bcos-ledger/test/main/main.cpp new file mode 100644 index 0000000..833452c --- /dev/null +++ b/bcos-ledger/test/main/main.cpp @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: kyonRay + * @date 2021-05-14 + */ + +#define BOOST_TEST_NO_MAIN + +#include +#include + +int main(int argc, const char* argv[]) +{ + auto fakeInit = [](int, char**) -> boost::unit_test::test_suite* { return nullptr; }; + int result = boost::unit_test::unit_test_main(fakeInit, argc, const_cast(argv)); + return result; +} diff --git a/bcos-ledger/test/mock/MockKeyFactor.h b/bcos-ledger/test/mock/MockKeyFactor.h new file mode 100644 index 0000000..0ae0ebf --- /dev/null +++ b/bcos-ledger/test/mock/MockKeyFactor.h @@ -0,0 +1,102 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file MockKeyFactor.h + * @author: kyonRay + * @date 2021-05-14 + */ + +#pragma once + +#include + +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +DERIVE_BCOS_EXCEPTION(InvalidKey); +class MockKey : public bcos::crypto::KeyInterface +{ +public: + using Ptr = std::shared_ptr; + explicit MockKey(size_t _keySize) : m_keyData(std::make_shared(_keySize)) {} + explicit MockKey(bytesConstRef _data) : m_keyData(std::make_shared()) { decode(_data); } + explicit MockKey(bytes const& _data) : MockKey(ref(_data)) {} + explicit MockKey(size_t _keySize, std::shared_ptr _data) + : m_keyData(std::make_shared()) + { + if (_data->size() < _keySize) + { + BOOST_THROW_EXCEPTION(InvalidKey() << errinfo_comment( + "invalidKey, the key size: " + std::to_string(_data->size()) + + ", expected size:" + std::to_string(_keySize))); + } + *m_keyData = *_data; + } + + bool operator==(MockKey const& _comparedKey) { return (*m_keyData == _comparedKey.data()); } + bool operator!=(MockKey const& _comparedKey) { return !operator==(_comparedKey); } + + ~MockKey() override {} + + const bytes& data() const override { return *m_keyData; } + size_t size() const override { return m_keyData->size(); } + char* mutableData() override { return (char*)m_keyData->data(); } + const char* constData() const override { return (const char*)m_keyData->data(); } + std::shared_ptr encode() const override { return m_keyData; } + void decode(bytesConstRef _data) override { *m_keyData = _data.toBytes(); } + + void decode(bytes&& _data) override { *m_keyData = std::move(_data); } + + std::string shortHex() override + { + auto startIt = m_keyData->begin(); + auto endIt = m_keyData->end(); + if (m_keyData->size() > 4) + { + endIt = startIt + 4 * sizeof(byte); + } + return *toHexString(startIt, endIt) + "..."; + } + + std::string hex() override { return *toHexString(*m_keyData); } + +private: + std::shared_ptr m_keyData; +}; + +class MockKeyFactory : public bcos::crypto::KeyFactory +{ +public: + using Ptr = std::shared_ptr; + MockKeyFactory() = default; + ~MockKeyFactory() override {} + + KeyInterface::Ptr createKey(bytesConstRef _keyData) override + { + return std::make_shared(_keyData); + } + + KeyInterface::Ptr createKey(bytes const& _keyData) override + { + return std::make_shared(_keyData); + } +}; + +} // namespace test +} // namespace bcos diff --git a/bcos-ledger/test/mock/MockStorage.h b/bcos-ledger/test/mock/MockStorage.h new file mode 100644 index 0000000..263c82b --- /dev/null +++ b/bcos-ledger/test/mock/MockStorage.h @@ -0,0 +1,460 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file MockStorage.h + * @author: kyonRay + * @date 2021-05-06 + */ + +#pragma once + +#include "bcos-framework/storage/Common.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-ledger/libledger/utilities/Common.h" +#include +#define SLEEP_MILLI_SECONDS 10 + +using namespace bcos::storage; +using namespace bcos::ledger; +namespace bcos::test +{ +class MockStorage : public StorageInterface +{ +public: + MockStorage() + { + data[storage::SYS_TABLE] = std::map(); + m_threadPool = std::make_shared("mockStorage", 4); + } + virtual ~MockStorage() { m_threadPool->stop(); } + + std::vector getPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition) const override + { + std::vector ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& kv : data.at(_tableInfo->name)) + { + if (!_condition || _condition->isValid(kv.first)) + { + ret.emplace_back(kv.first); + } + } + } + return ret; + } + std::shared_ptr getRow( + const std::shared_ptr& _tableInfo, const std::string_view& _key) override + { + std::shared_ptr ret = nullptr; + std::lock_guard lock(m_mutex); + if (data.find(_tableInfo->name) != data.end()) + { + if (data[_tableInfo->name].find(std::string(_key)) != data[_tableInfo->name].end()) + { + return data[_tableInfo->name][std::string(_key)]; + } + else + { + LEDGER_LOG(TRACE) << LOG_BADGE("getRow") << LOG_DESC("can't find key") + << LOG_KV("key", _key); + } + } + return ret; + } + std::map> getRows( + const std::shared_ptr& _tableInfo, + const std::vector& _keys) override + { + std::map> ret; + std::lock_guard lock(m_mutex); + if (data.count(_tableInfo->name)) + { + for (auto& key : _keys) + { + if (data[_tableInfo->name].count(std::string(key))) + { + ret[key] = data[_tableInfo->name][key]; + } + } + } + return ret; + } + std::pair commitBlock(protocol::BlockNumber _number, + const std::vector>& _tableInfos, + const std::vector>>& _tableDatas) override + { + size_t total = 0; + if (_tableInfos.size() != _tableDatas.size()) + { + auto error = std::make_shared(-1, ""); + return {0, error}; + } + std::shared_ptr stateTableFactory = nullptr; + if (_number != 0) + { + if (m_number2TableFactory.count(_number)) + { + stateTableFactory = m_number2TableFactory[_number]; + } + else + { + return {0, std::make_shared(StorageErrorCode::StateCacheNotFound, + std::to_string(_number) + "state cache not found")}; + } + auto stateData = stateTableFactory->exportData(_number); + stateData.first.insert(stateData.first.end(), _tableInfos.begin(), _tableInfos.end()); + stateData.second.insert(stateData.second.end(), _tableDatas.begin(), _tableDatas.end()); + std::lock_guard lock(m_mutex); + for (size_t i = 0; i < stateData.first.size(); ++i) + { + for (auto& item : *stateData.second[i]) + { + if (item.second->getStatus() == Entry::Status::NORMAL) + { + data[stateData.first[i]->name][item.first] = item.second; + ++total; + } + } + } + } + else + { + std::lock_guard lock(m_mutex); + for (size_t i = 0; i < _tableInfos.size(); ++i) + { + for (auto& item : *_tableDatas[i]) + { + if (item.second->getStatus() == Entry::Status::NORMAL) + { + data[_tableInfos[i]->name][item.first] = item.second; + ++total; + } + } + } + } + return {total, nullptr}; + } + + void asyncGetPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition, + std::function&)> _callback) override + { + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_tableInfo, _condition, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + time_t t = time(0); + auto keyList = storage->getPrimaryKeys(_tableInfo, _condition); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto success = std::make_shared(0, ""); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetPrimaryKeys") + << LOG_DESC("storage getKeys finish") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("exec_time", time(0) - t); + t = time(0); + _callback(success, keyList); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetPrimaryKeys") + << LOG_DESC("storage callback") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("callback_time", time(0) - t); + } + else + { + _callback(std::make_shared(-1, ""), {}); + } + }); + } + + void asyncGetRow(const TableInfo::Ptr& _tableInfo, const std::string_view& _key, + std::function _callback) override + { + auto key = std::string(_key); + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_tableInfo, key, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + time_t t = time(0); + auto entry = storage->getRow(_tableInfo, key); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetRow") << LOG_DESC("storage getRow finish") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("key", std::string(key)) + << LOG_KV("exec_time", time(0) - t); + t = time(0); + _callback(nullptr, entry); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetRow") << LOG_DESC("storage callback") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("key", std::string(key)) + << LOG_KV("callback_time", time(0) - t); + } + else + { + _callback(std::make_shared(-1, ""), nullptr); + } + }); + } + void asyncGetRows(const std::shared_ptr& _tableInfo, + const std::shared_ptr>& _keyList, + std::function&)> _callback) + override + { + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_tableInfo, _keyList, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + time_t t = time(0); + auto rowMap = storage->getRows(_tableInfo, *_keyList); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetRows") << LOG_DESC("storage getRows finish") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("exec_time", time(0) - t); + t = time(0); + _callback(nullptr, rowMap); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncGetRows") << LOG_DESC("storage callback") + << LOG_KV("tableName", _tableInfo->name) + << LOG_KV("callback_time", time(0) - t); + } + else + { + _callback(std::make_shared(-1, ""), {}); + } + }); + } + + void asyncCommitBlock(protocol::BlockNumber _number, + const std::shared_ptr>>& _tableInfo, + const std::shared_ptr>>>& + _tableMap, + std::function _callback) override + { + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_number, _tableInfo, _tableMap, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + time_t t = time(0); + auto retPair = storage->commitBlock(_number, *_tableInfo, *_tableMap); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncCommitBlock") + << LOG_DESC("storage commit finish") << LOG_KV("number", _number) + << LOG_KV("exec_time", time(0) - t); + t = time(0); + _callback(error, retPair.first); + LEDGER_LOG(TRACE) << LOG_BADGE("asyncCommitBlock") << LOG_DESC("storage callback") + << LOG_KV("callback_time", time(0) - t); + } + else + { + _callback(std::make_shared(-1, ""), -1); + } + }); + } + + // cache TableFactory + void asyncAddStateCache(protocol::BlockNumber _number, + const std::shared_ptr& _table, + std::function _callback) override + { + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_number, _table, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + storage->addStateCache(_number, _table); + _callback(nullptr); + } + else + { + _callback(std::make_shared(-1, "")); + } + }); + } + void asyncDropStateCache(protocol::BlockNumber, std::function) override + {} + void asyncGetStateCache(protocol::BlockNumber _blockNumber, + std::function&)> + _callback) override + { + auto self = + std::weak_ptr(std::dynamic_pointer_cast(shared_from_this())); + m_threadPool->enqueue([_blockNumber, _callback, self]() { + auto storage = self.lock(); + if (storage) + { + auto tableFactory = storage->getStateCache(_blockNumber); + boost::this_thread::sleep_for(boost::chrono::milliseconds(SLEEP_MILLI_SECONDS)); + auto error = std::make_shared(0, ""); + _callback(error, tableFactory); + } + else + { + _callback(std::make_shared(-1, ""), nullptr); + } + }); + } + + std::shared_ptr getStateCache( + protocol::BlockNumber _blockNumber) override + { + if (m_number2TableFactory.count(_blockNumber)) + { + return m_number2TableFactory[_blockNumber]; + } + return nullptr; + } + + void dropStateCache(protocol::BlockNumber) override {} + void addStateCache(protocol::BlockNumber _blockNumber, + const std::shared_ptr& _tableFactory) override + { + m_number2TableFactory[_blockNumber] = _tableFactory; + } + // KV store in split database, used to store data off-chain + Error::Ptr put( + const std::string_view&, const std::string_view&, const std::string_view&) override + { + return nullptr; + } + std::pair get( + const std::string_view&, const std::string_view&) override + { + return {"", nullptr}; + } + Error::Ptr remove(const std::string_view&, const std::string_view&) override { return nullptr; } + void asyncRemove(const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncPut(const std::string_view&, const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncGet(const std::string_view&, const std::string_view&, + std::function) override + {} + void asyncGetBatch(const std::string_view&, const std::shared_ptr>&, + std::function>&)>) + override + {} + +private: + bcos::ThreadPool::Ptr m_threadPool = nullptr; + std::map> data; + mutable std::mutex m_mutex; + std::map m_number2TableFactory; +}; + +class MockErrorStorage : public MockStorage +{ +public: + MockErrorStorage() : MockStorage() {} + std::vector getPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition) const override + { + return MockStorage::getPrimaryKeys(_tableInfo, _condition); + } + std::shared_ptr getRow( + const std::shared_ptr& _tableInfo, const std::string_view& _key) override + { + return MockStorage::getRow(_tableInfo, _key); + } + std::map> getRows( + const std::shared_ptr& _tableInfo, + const std::vector& _keys) override + { + return MockStorage::getRows(_tableInfo, _keys); + } + std::pair commitBlock(protocol::BlockNumber number, + const std::vector>& _tableInfos, + const std::vector>>& _tableDatas) override + { + return MockStorage::commitBlock(number, _tableInfos, _tableDatas); + } + std::shared_ptr getStateCache( + protocol::BlockNumber _blockNumber) override + { + return MockStorage::getStateCache(_blockNumber); + } + void addStateCache(protocol::BlockNumber _blockNumber, + const std::shared_ptr& _tableFactory) override + { + MockStorage::addStateCache(_blockNumber, _tableFactory); + } + void asyncGetPrimaryKeys(const std::shared_ptr& _tableInfo, + const Condition::Ptr& _condition, + std::function&)> _callback) override + { + MockStorage::asyncGetPrimaryKeys(_tableInfo, _condition, _callback); + } + void asyncGetRow(const TableInfo::Ptr& _tableInfo, const std::string_view& _key, + std::function _callback) override + { + MockStorage::asyncGetRow(_tableInfo, _key, _callback); + } + void asyncGetRows(const std::shared_ptr& _tableInfo, + const std::shared_ptr>& _keyList, + std::function&)> _callback) + override + { + MockStorage::asyncGetRows(_tableInfo, _keyList, _callback); + } + void asyncCommitBlock(protocol::BlockNumber, + const std::shared_ptr>>&, + const std::shared_ptr>>>&, + std::function _callback) override + { + _callback(std::make_shared(-1, ""), 0); + } + void asyncAddStateCache(protocol::BlockNumber, const std::shared_ptr&, + std::function _callback) override + { + _callback(std::make_shared(-1, "")); + } + void asyncGetStateCache(protocol::BlockNumber _number, + std::function&)> + _callback) override + { + // random get success + auto rand = random(); + if (rand & 1) + { + if (rand & 3) + { + _callback(nullptr, nullptr); + } + else + { + _callback(std::make_shared(-1, ""), nullptr); + } + } + else + { + MockStorage::asyncGetStateCache(_number, _callback); + } + } +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-ledger/test/mock/MockTable.h b/bcos-ledger/test/mock/MockTable.h new file mode 100644 index 0000000..dc63ea4 --- /dev/null +++ b/bcos-ledger/test/mock/MockTable.h @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file MockTable.h + * @author: kyonRay + * @date 2021-05-07 + */ +#pragma once + +#include "bcos-framework/storage/Common.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-ledger/libledger/utilities/Common.h" +#include + +using namespace bcos::storage; +using namespace bcos::ledger; + +namespace bcos::test +{ +class MockTable : public Table +{ +public: + using Ptr = std::shared_ptr; + + explicit MockTable(std::string const& _tableName) + : Table(nullptr, nullptr, 0), m_tableName(_tableName) + {} + + std::shared_ptr getRow(const std::string& _key) override + { + auto entry = m_fakeStorage[_key]; + if (entry) + { + return entry; + } + return nullptr; + } + + bool setRow(const std::string& _key, const std::shared_ptr& _entry) override + { + m_fakeStorage[_key] = _entry; + return true; + } + + std::vector getPrimaryKeys(const Condition::Ptr&) const override + { + std::vector keys; + keys.reserve(m_fakeStorage.size()); + std::transform(m_fakeStorage.begin(), m_fakeStorage.end(), keys.begin(), + [](auto pair) { return pair.first; }); + return keys; + } + +private: + std::string m_tableName; + std::unordered_map m_fakeStorage; +}; + +class MockErrorTableFactory : public TableStorage +{ +public: + explicit MockErrorTableFactory(storage::StorageInterface::Ptr _db) + : TableStorage(_db, nullptr, -1) + { + m_sysTables.emplace_back(TableStorage::SYS_TABLES); + } + std::shared_ptr openTable(const std::string& _tableName) override + { + if (std::find(m_sysTables.begin(), m_sysTables.end(), _tableName) != m_sysTables.end()) + { + return TableFactory::openTable(_tableName); + } + else + { + return nullptr; + } + } + bool createTable(const std::string& _tableName, const std::string& _keyField, + const std::string& _valueFields) override + { + if (_tableName.at(0) == '/') + m_sysTables.emplace_back(_tableName); + return TableFactory::createTable(_tableName, _keyField, _valueFields); + } + std::pair commit() override { return {0, std::make_shared(-1, "")}; } + + std::vector m_sysTables; +}; +} // namespace bcos::test diff --git a/bcos-ledger/test/unittests/ledger/LedgerImplTest.cpp b/bcos-ledger/test/unittests/ledger/LedgerImplTest.cpp new file mode 100644 index 0000000..6512740 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/LedgerImplTest.cpp @@ -0,0 +1,382 @@ +#include +#include +#include + +#include "bcos-ledger/src/libledger/LedgerImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::ledger; + +namespace std +{ +ostream& operator<<(ostream& os, std::vector const& buffer) +{ + auto hexBuffer = boost::algorithm::hex_lower(buffer); + os << string_view{(const char*)hexBuffer.data(), hexBuffer.size()}; + return os; +} + +ostream& operator<<( + ostream& os, std::pair, bcos::storage::Entry> const& value) +{ + auto hexBuffer = boost::algorithm::hex_lower(std::string(value.second.get())); + os << std::get<0>(value.first) << ":" << std::get<1>(value.first) << " - " << hexBuffer; + return os; +} + +ostream& operator<<(ostream& os, std::array const& buffer) +{ + std::string hex; + boost::algorithm::hex_lower((const char*)buffer.data(), + (const char*)buffer.data() + buffer.size(), std::back_inserter(hex)); + os << hex; + return os; +} + +ostream& operator<<(ostream& os, bcos::storage::Entry const&) +{ + return os; +} +} // namespace std + +struct MockMemoryStorage : bcos::concepts::storage::StorageBase +{ + MockMemoryStorage( + std::map, bcos::storage::Entry, std::less<>>& data1) + : bcos::concepts::storage::StorageBase(), data(data1){}; + + std::optional impl_getRow(std::string_view table, std::string_view key) + { + auto entryIt = data.find(std::tuple{table, key}); + if (entryIt != data.end()) + { + return entryIt->second; + } + return {}; + } + + std::vector> impl_getRows( + std::string_view table, RANGES::range auto const& keys) + { + std::vector> output; + output.reserve(RANGES::size(keys)); + for (auto&& key : keys) + { + output.emplace_back(getRow(table, bcos::concepts::bytebuffer::toView(key))); + } + return output; + } + + void impl_setRow(std::string_view table, std::string_view key, bcos::storage::Entry entry) + { + auto it = data.find(std::tuple{table, key}); + if (it != data.end()) + { + it->second = std::move(entry); + } + else + { + data.emplace(std::tuple{std::string{table}, std::string{key}}, std::move(entry)); + } + } + + void impl_createTable([[maybe_unused]] std::string_view tableName) {} + + std::map, bcos::storage::Entry, std::less<>>& data; +}; + +struct LedgerImplFixture +{ + LedgerImplFixture() : storage{data} + { + // Put some entry into data + bcostars::BlockHeader header; + header.data.blockNumber = 10086; + header.data.gasUsed = "1000"; + header.data.timestamp = 5000; + + bcos::storage::Entry headerEntry; + std::vector headerBuffer; + bcos::concepts::serialize::encode(header, headerBuffer); + headerEntry.setField(0, std::move(headerBuffer)); + data.emplace(std::tuple{SYS_NUMBER_2_BLOCK_HEADER, "10086"}, std::move(headerEntry)); + + bcostars::Block transactionsBlock; + transactionsBlock.transactionsMetaData.resize(count); + for (auto i = 0u; i < count; ++i) + { + std::string hashStr = "hash_" + boost::lexical_cast(i); + transactionsBlock.transactionsMetaData[i].hash.assign(hashStr.begin(), hashStr.end()); + + // transaction + decltype(transactionsBlock.transactions)::value_type transaction; + transaction.data.chainID = "chain"; + transaction.data.groupID = "group"; + transaction.importTime = 1000; + + std::vector txBuffer; + bcos::concepts::serialize::encode(transaction, txBuffer); + bcos::storage::Entry txEntry; + txEntry.setField(0, std::move(txBuffer)); + + data.emplace(std::tuple{SYS_HASH_2_TX, hashStr}, std::move(txEntry)); + + // receipt + decltype(transactionsBlock.receipts)::value_type receipt; + receipt.data.blockNumber = 10086; + receipt.data.contractAddress = "contract"; + + std::vector receiptBuffer; + bcos::concepts::serialize::encode(receipt, receiptBuffer); + bcos::storage::Entry receiptEntry; + receiptEntry.setField(0, std::move(receiptBuffer)); + data.emplace(std::tuple{SYS_HASH_2_RECEIPT, hashStr}, std::move(receiptEntry)); + } + + std::vector txsBuffer; + bcos::concepts::serialize::encode(transactionsBlock, txsBuffer); + bcos::storage::Entry txsEntry; + txsEntry.setField(0, std::move(txsBuffer)); + data.emplace(std::tuple{SYS_NUMBER_2_TXS, "10086"}, std::move(txsEntry)); + + bcostars::Block nonceBlock; + nonceBlock.nonceList.emplace_back(std::string("i am a nonce")); + + std::vector nonceBuffer; + bcos::concepts::serialize::encode(nonceBlock, nonceBuffer); + bcos::storage::Entry nonceEntry; + nonceEntry.setField(0, std::move(nonceBuffer)); + data.emplace(std::tuple{SYS_BLOCK_NUMBER_2_NONCES, "10086"}, std::move(nonceEntry)); + } + + std::map, bcos::storage::Entry, std::less<>> data; + MockMemoryStorage storage; + + constexpr static size_t count = 100; +}; + +BOOST_FIXTURE_TEST_SUITE(LedgerImplTest, LedgerImplFixture) + +BOOST_AUTO_TEST_CASE(getBlock) +{ + bcos::ledger::LedgerImpl + ledger{storage, nullptr, nullptr}; + + bcostars::Block block; + bcos::task::syncWait( + ledger + .getBlock( + 10086, block)); + BOOST_CHECK_EQUAL(block.blockHeader.data.blockNumber, 10086); + BOOST_CHECK_EQUAL(block.blockHeader.data.gasUsed, "1000"); + BOOST_CHECK_EQUAL(block.blockHeader.data.timestamp, 5000); + + BOOST_CHECK_EQUAL(block.transactions.size(), count); + BOOST_CHECK_EQUAL(block.receipts.size(), count); + + for (auto i = 0U; i < count; ++i) + { + BOOST_CHECK_EQUAL(block.transactions[i].data.chainID, "chain"); + BOOST_CHECK_EQUAL(block.transactions[i].data.groupID, "group"); + BOOST_CHECK_EQUAL(block.transactions[i].importTime, 1000); + + BOOST_CHECK_EQUAL(block.receipts[i].data.blockNumber, 10086); + BOOST_CHECK_EQUAL(block.receipts[i].data.contractAddress, "contract"); + } + + bcostars::Block block2; + bcos::task::syncWait(ledger.getBlock(10086, block2)); + BOOST_CHECK_EQUAL(block2.blockHeader.data.blockNumber, 10086); + BOOST_CHECK_EQUAL(block2.blockHeader.data.gasUsed, "1000"); + BOOST_CHECK_EQUAL(block2.blockHeader.data.timestamp, 5000); + + BOOST_CHECK_EQUAL(block2.transactions.size(), count); + BOOST_CHECK_EQUAL(block2.receipts.size(), count); + + for (auto i = 0u; i < count; ++i) + { + BOOST_CHECK_EQUAL(block2.transactions[i].data.chainID, "chain"); + BOOST_CHECK_EQUAL(block2.transactions[i].data.groupID, "group"); + BOOST_CHECK_EQUAL(block2.transactions[i].importTime, 1000); + + BOOST_CHECK_EQUAL(block2.receipts[i].data.blockNumber, 10086); + BOOST_CHECK_EQUAL(block2.receipts[i].data.contractAddress, "contract"); + } + + bcostars::Block block3; + BOOST_CHECK_THROW( + bcos::task::syncWait(ledger.getBlock(10087, block3)), + bcos::ledger::NotFoundBlockHeader); + BOOST_CHECK_THROW( + bcos::task::syncWait(ledger.getBlock(10087, block3)), + bcos::ledger::NotFoundBlockHeader); +} + +BOOST_AUTO_TEST_CASE(setBlockAndGetInfo) +{ + LedgerImpl ledger{ + storage, nullptr, nullptr}; + + bcostars::Block block; + block.blockHeader.data.blockNumber = 100; + + for (auto i = 0U; i < count; ++i) + { + bcostars::Transaction transaction; + transaction.data.blockLimit = 1000; + transaction.data.to = "i am to"; + transaction.data.version = i; + + bcostars::TransactionReceipt receipt; + receipt.data.contractAddress = "contract to"; + if (i >= 70) + { + // receipt.data.status = -1; // FIXME: This line cause ut failed on aarch64 + } + + block.transactions.emplace_back(std::move(transaction)); + block.receipts.emplace_back(std::move(receipt)); + } + bcos::task::syncWait(ledger.setTransactions( + block.transactions)); + + bcos::concepts::hash::calculate( + block, block.blockHeader.dataHash); + + BOOST_CHECK_NO_THROW(bcos::task::syncWait(ledger.setBlock(block))); + bcostars::Block gotBlock; + ~ledger.getBlock(100, gotBlock); + + BOOST_CHECK_EQUAL(gotBlock.blockHeader.data.blockNumber, block.blockHeader.data.blockNumber); + BOOST_CHECK_EQUAL(gotBlock.transactions.size(), block.transactions.size()); + BOOST_CHECK_EQUAL(gotBlock.receipts.size(), block.receipts.size()); + BOOST_CHECK_EQUAL_COLLECTIONS(gotBlock.transactions.begin(), gotBlock.transactions.end(), + block.transactions.begin(), block.transactions.end()); + BOOST_CHECK_EQUAL_COLLECTIONS(gotBlock.receipts.begin(), gotBlock.receipts.end(), + block.receipts.begin(), block.receipts.end()); + + std::array hash; + bcos::task::syncWait(ledger.getBlockHashByNumber(100, hash)); + + std::array blockHash; + bcos::concepts::hash::calculate( + gotBlock, blockHash); + + int64_t newNumber = 100; + bcos::task::syncWait(ledger.getBlockNumberByHash(hash, newNumber)); + BOOST_CHECK_EQUAL(newNumber, 100); + + BOOST_CHECK_EQUAL(hash, blockHash); +} + +BOOST_AUTO_TEST_CASE(notExistsBlock) +{ + LedgerImpl ledger{ + storage, nullptr, nullptr}; + + std::vector hash; + bcos::task::syncWait(ledger.getBlockHashByNumber(50, hash)); + BOOST_CHECK(RANGES::empty(hash)); + + int64_t number = 0; + bcos::task::syncWait(ledger.getBlockNumberByHash(hash, number)); + BOOST_CHECK_EQUAL(number, -1); +} + +BOOST_AUTO_TEST_CASE(ledgerSync) +{ + using Hasher = bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher; + + std::map, bcos::storage::Entry, std::less<>> fromData; + MockMemoryStorage fromStorage(fromData); + LedgerImpl fromLedger{std::move(fromStorage), nullptr, nullptr}; + + std::map, bcos::storage::Entry, std::less<>> toData; + MockMemoryStorage toStorage(toData); + LedgerImpl toLedger{std::move(toStorage), nullptr, nullptr}; + + bcostars::Block genesisBlock; + genesisBlock.blockHeader.data.blockNumber = 0; + bcos::task::syncWait(fromLedger.setupGenesisBlock(genesisBlock)); + bcos::task::syncWait(toLedger.setupGenesisBlock(genesisBlock)); + + std::array lastBlockHash; + bcos::concepts::hash::calculate(genesisBlock, lastBlockHash); + + constexpr static size_t blockCount = 10; + for (auto number = 1U; number < blockCount; ++number) + { + // write some block + bcostars::Block block; + block.blockHeader.data.blockNumber = number; + + bcostars::ParentInfo parentInfo; + parentInfo.blockNumber = number - 1; + bcos::concepts::bytebuffer::assignTo(lastBlockHash, parentInfo.blockHash); + block.blockHeader.data.parentInfo.push_back(parentInfo); + + for (auto i = 0U; i < count; ++i) + { + bcostars::Transaction transaction; + transaction.data.blockLimit = 1000; + transaction.data.to = "i am to"; + transaction.data.version = i; + + bcostars::TransactionReceipt receipt; + receipt.data.contractAddress = "contract to"; + if (i >= 70) + { + receipt.data.status = -1; + } + + bcostars::TransactionMetaData metaData; + bcos::concepts::hash::calculate(transaction, metaData.hash); + + block.transactionsMetaData.emplace_back(std::move(metaData)); + block.transactions.emplace_back(std::move(transaction)); + block.receipts.emplace_back(std::move(receipt)); + + bcos::crypto::merkle::Merkle merkler; + } + bcos::task::syncWait(fromLedger.setTransactions(block.transactions)); + bcos::task::syncWait(toLedger.setTransactions(block.transactions)); + + BOOST_CHECK_NO_THROW( + bcos::task::syncWait(fromLedger.setBlock(block))); + bcos::concepts::hash::calculate(block, lastBlockHash); + } + + bcos::task::syncWait(toLedger.sync(fromLedger, false)); + + // get all block + std::vector fromBlocks(blockCount); + std::vector toBlocks(blockCount); + for (auto i = 1U; i < blockCount; ++i) + { + bcos::task::syncWait(fromLedger.getBlock(i, fromBlocks[i])); + bcos::task::syncWait(toLedger.getBlock(i, toBlocks[i])); + } + + BOOST_CHECK_EQUAL_COLLECTIONS( + fromBlocks.begin(), fromBlocks.end(), toBlocks.begin(), toBlocks.end()); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-ledger/test/unittests/ledger/LedgerTest.cpp b/bcos-ledger/test/unittests/ledger/LedgerTest.cpp new file mode 100644 index 0000000..0173491 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/LedgerTest.cpp @@ -0,0 +1,1212 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LedgerTest.cpp + * @author: kyonRay + * @date 2021-05-07 + * @file LedgerTest.cpp + * @author: ancelmo + * @date 2021-09-07 + */ + +#include "bcos-ledger/src/libledger/Ledger.h" +#include "../../mock/MockKeyFactor.h" +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-crypto/merkle/Merkle.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-ledger/src/libledger/utilities/Common.h" +#include "bcos-tool/BfsFileFactory.h" +#include "bcos-tool/ConsensusNode.h" +#include "common/FakeBlock.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::ledger; +using namespace bcos::protocol; +using namespace bcos::storage; +using namespace bcos::crypto; +using namespace bcos::tool; + +namespace std +{ +inline ostream& operator<<(ostream& os, const std::optional& entry) +{ + os << entry.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::optional
& table) +{ + os << table.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::unique_ptr& error) +{ + os << error->what(); + return os; +} +} // namespace std + +namespace bcos::test +{ +class MockStorage : public virtual StateStorage +{ +public: + MockStorage(std::shared_ptr prev) + : storage::StateStorageInterface(prev), StateStorage(prev) + {} + bcos::Error::Ptr setRows(std::string_view table, + const std::variant, + const gsl::span>& keys, + std::variant, gsl::span> values) + { + std::visit( + [&](auto&& keys, auto&& values) { + for (size_t i = 0; i < keys.size(); ++i) + { + Entry e; + e.set(std::string(values[i])); + asyncSetRow(table, keys[i], e, [](Error::UniquePtr) {}); + } + }, + keys, values); + return nullptr; + } +}; +class LedgerFixture : public TestPromptFixture +{ +public: + LedgerFixture() : TestPromptFixture() + { + m_blockFactory = createBlockFactory(createCryptoSuite()); + auto keyFactor = std::make_shared(); + m_blockFactory->cryptoSuite()->setKeyFactory(keyFactor); + + BOOST_CHECK(m_blockFactory != nullptr); + BOOST_CHECK(m_blockFactory->blockHeaderFactory() != nullptr); + BOOST_CHECK(m_blockFactory->transactionFactory() != nullptr); + initStorage(); + } + ~LedgerFixture() = default; + + inline void initStorage() + { + auto hashImpl = std::make_shared(); + auto memoryStorage = std::make_shared(nullptr); + memoryStorage->setEnableTraverse(true); + auto storage = std::make_shared(memoryStorage); + storage->setEnableTraverse(true); + m_storage = storage; + BOOST_TEST(m_storage != nullptr); + m_ledger = std::make_shared(m_blockFactory, m_storage); + BOOST_CHECK(m_ledger != nullptr); + } + + inline void initErrorStorage() + { + auto memoryStorage = std::make_shared(nullptr); + memoryStorage->setEnableTraverse(true); + auto storage = std::make_shared(memoryStorage); + storage->setEnableTraverse(true); + m_storage = storage; + BOOST_TEST(m_storage != nullptr); + m_ledger = std::make_shared(m_blockFactory, m_storage); + BOOST_CHECK(m_ledger != nullptr); + } + + inline void initFixture(std::string version = bcos::protocol::V3_1_VERSION_STR) + { + m_param = std::make_shared(); + m_param->setBlockNumber(0); + m_param->setHash(HashType("")); + m_param->setBlockTxCountLimit(1000); + + auto signImpl = std::make_shared(); + consensus::ConsensusNodeList consensusNodeList; + consensus::ConsensusNodeList observerNodeList; + for (int i = 0; i < 4; ++i) + { + auto node = std::make_shared( + signImpl->generateKeyPair()->publicKey(), 10 + i); + consensusNodeList.emplace_back(node); + } + auto observer_node = std::make_shared( + signImpl->generateKeyPair()->publicKey(), -1); + observerNodeList.emplace_back(observer_node); + + m_param->setConsensusNodeList(consensusNodeList); + m_param->setObserverNodeList(observerNodeList); + + LEDGER_LOG(TRACE) << "build genesis for first time"; + auto result = m_ledger->buildGenesisBlock(m_param, 3000000000, "", version); + BOOST_CHECK(result); + LEDGER_LOG(TRACE) << "build genesis for second time"; + auto result2 = m_ledger->buildGenesisBlock(m_param, 3000000000, "", version); + BOOST_CHECK(result2); + } + + inline void initEmptyFixture() + { + m_param = std::make_shared(); + m_param->setBlockNumber(0); + m_param->setHash(HashType("")); + m_param->setBlockTxCountLimit(0); + + auto result1 = + m_ledger->buildGenesisBlock(m_param, 3000000000, "", bcos::protocol::V3_1_VERSION_STR); + BOOST_CHECK(result1); + auto result2 = + m_ledger->buildGenesisBlock(m_param, 30, "", bcos::protocol::V3_1_VERSION_STR); + BOOST_CHECK(!result2); + auto result3 = + m_ledger->buildGenesisBlock(m_param, 3000000000, "", bcos::protocol::V3_1_VERSION_STR); + BOOST_CHECK(result3); + } + + inline void initBlocks(int _number) + { + std::promise fakeBlockPromise; + auto future = fakeBlockPromise.get_future(); + m_ledger->asyncGetBlockHashByNumber( + 0, [=, &fakeBlockPromise, this](Error::Ptr, HashType _hash) { + m_fakeBlocks = fakeBlocks( + m_blockFactory->cryptoSuite(), m_blockFactory, 1, 1, _number, _hash.hex()); + fakeBlockPromise.set_value(true); + }); + future.get(); + for (int i = 0; i < _number; ++i) + { + auto block = m_fakeBlocks->at(i); + auto transactions = std::make_shared(); + for (size_t j = 0; j < block->transactionsSize(); ++j) + { + auto tx = block->transaction(j); + transactions->push_back(std::const_pointer_cast(tx)); + } + m_fakeTransactions.emplace_back(transactions); + } + } + + inline void initEmptyBlocks(int _number) + { + std::promise fakeBlockPromise; + auto future = fakeBlockPromise.get_future(); + m_ledger->asyncGetBlockHashByNumber( + 0, [=, &fakeBlockPromise, this](Error::Ptr, HashType _hash) { + m_fakeBlocks = fakeEmptyBlocks( + m_blockFactory->cryptoSuite(), m_blockFactory, _number, _hash.hex()); + fakeBlockPromise.set_value(true); + }); + future.get(); + } + + inline void initChain(int _number) + { + initBlocks(_number); + for (int i = 0; i < _number; ++i) + { + auto txSize = m_fakeBlocks->at(i)->transactionsSize(); + auto txDataList = std::make_shared>(); + auto txHashList = std::make_shared(); + auto txList = std::make_shared>(); + for (size_t j = 0; j < txSize; ++j) + { + bcos::bytes txData; + m_fakeBlocks->at(i)->transaction(j)->encode(txData); + auto txPointer = std::make_shared(txData.begin(), txData.end()); + txDataList->push_back(txPointer); + txHashList->push_back(m_fakeBlocks->at(i)->transaction(j)->hash()); + txList->push_back( + m_blockFactory->transactionFactory()->createTransaction(bcos::ref(txData))); + } + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncPreStoreBlockTxs( + txList, m_fakeBlocks->at(i), [=, &p1](Error::Ptr _error) { + BOOST_CHECK_EQUAL(_error, nullptr); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + auto& block = m_fakeBlocks->at(i); + + // write other meta data + std::promise prewritePromise; + m_ledger->asyncPrewriteBlock( + m_storage, nullptr, block, [&](Error::Ptr&&) { prewritePromise.set_value(true); }); + + prewritePromise.get_future().get(); + } + } + + inline void initEmptyChain(int _number) + { + initEmptyBlocks(_number); + for (int i = 0; i < _number; ++i) + { + // std::promise p2; + // auto f2 = p2.get_future(); + // m_ledger->asyncStoreReceipts(table, m_fakeBlocks->at(i), [=, &p2](Error::Ptr _error) + // { + // BOOST_CHECK_EQUAL(_error, nullptr); + // p2.set_value(true); + // }); + // BOOST_CHECK_EQUAL(f2.get(), true); + + // std::promise p3; + // auto f3 = p3.get_future(); + // m_ledger->asyncCommitBlock(m_fakeBlocks->at(i)->blockHeader(), + // [=, &p3](Error::Ptr _error, LedgerConfig::Ptr _config) { + // BOOST_CHECK_EQUAL(_error, nullptr); + // BOOST_CHECK_EQUAL(_config->blockNumber(), i + 1); + // BOOST_CHECK(!_config->consensusNodeList().empty()); + // BOOST_CHECK(!_config->observerNodeList().empty()); + // p3.set_value(true); + // }); + + // BOOST_CHECK_EQUAL(f3.get(), true); + + std::promise p3; + m_ledger->asyncPrewriteBlock( + m_storage, nullptr, m_fakeBlocks->at(i), [&](Error::Ptr&& error) { + BOOST_CHECK(!error); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(p3.get_future().get(), true); + } + } + + storage::StorageInterface::Ptr m_storage = nullptr; + BlockFactory::Ptr m_blockFactory = nullptr; + std::shared_ptr m_ledger = nullptr; + LedgerConfig::Ptr m_param; + BlocksPtr m_fakeBlocks; + std::vector m_fakeTransactions; + bcos::crypto::merkle::Merkle merkleUtility; +}; + +BOOST_FIXTURE_TEST_SUITE(LedgerTest, LedgerFixture) + +BOOST_AUTO_TEST_CASE(testFixtureLedger) +{ + initFixture(); + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBlockNumber([&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_number, 0); + p1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetBlockHashByNumber(0, [&](Error::Ptr _error, crypto::HashType _hash) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_hash != HashType("")); + m_ledger->asyncGetBlockNumberByHash(_hash, [&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_number, 0); + p2.set_value(true); + }); + }); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetBlockDataByNumber(0, HEADER, [&](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_block != nullptr); + BOOST_CHECK_EQUAL(_block->blockHeader()->number(), 0); + p3.set_value(true); + }); + + std::promise p4; + auto f4 = p4.get_future(); + m_ledger->asyncGetTotalTransactionCount( + [&](Error::Ptr _error, int64_t _totalTxCount, int64_t _failedTxCount, + protocol::BlockNumber _latestBlockNumber) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_totalTxCount, 0); + BOOST_CHECK_EQUAL(_failedTxCount, 0); + BOOST_CHECK_EQUAL(_latestBlockNumber, 0); + p4.set_value(true); + }); + + std::promise p5; + auto f5 = p5.get_future(); + m_ledger->asyncGetSystemConfigByKey( + SYSTEM_KEY_TX_COUNT_LIMIT, [&](Error::Ptr _error, std::string _value, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_value, "1000"); + BOOST_CHECK_EQUAL(_number, 0); + p5.set_value(true); + }); + + std::promise p6; + auto f6 = p6.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_OBSERVER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->at(0)->nodeID()->hex(), + m_param->observerNodeList().at(0)->nodeID()->hex()); + p6.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); + BOOST_CHECK_EQUAL(f4.get(), true); + BOOST_CHECK_EQUAL(f5.get(), true); + BOOST_CHECK_EQUAL(f6.get(), true); +} + +BOOST_AUTO_TEST_CASE(test_3_0_FixtureLedger) +{ + initFixture(V3_0_VERSION_STR); + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBlockNumber([&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_number, 0); + p1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetBlockHashByNumber(0, [&](Error::Ptr _error, crypto::HashType _hash) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_hash != HashType("")); + m_ledger->asyncGetBlockNumberByHash(_hash, [&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_number, 0); + p2.set_value(true); + }); + }); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetBlockDataByNumber(0, HEADER, [&](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_block != nullptr); + BOOST_CHECK_EQUAL(_block->blockHeader()->number(), 0); + p3.set_value(true); + }); + + std::promise p4; + auto f4 = p4.get_future(); + m_ledger->asyncGetTotalTransactionCount( + [&](Error::Ptr _error, int64_t _totalTxCount, int64_t _failedTxCount, + protocol::BlockNumber _latestBlockNumber) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_totalTxCount, 0); + BOOST_CHECK_EQUAL(_failedTxCount, 0); + BOOST_CHECK_EQUAL(_latestBlockNumber, 0); + p4.set_value(true); + }); + + std::promise p5; + auto f5 = p5.get_future(); + m_ledger->asyncGetSystemConfigByKey( + SYSTEM_KEY_TX_COUNT_LIMIT, [&](Error::Ptr _error, std::string _value, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_value, "1000"); + BOOST_CHECK_EQUAL(_number, 0); + p5.set_value(true); + }); + + std::promise p6; + auto f6 = p6.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_OBSERVER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->at(0)->nodeID()->hex(), + m_param->observerNodeList().at(0)->nodeID()->hex()); + p6.set_value(true); + }); + + std::promise p7; + std::vector v = {"apps", "usr", "sys", "tables"}; + m_storage->asyncGetRow( + tool::FS_ROOT, tool::FS_KEY_SUB, [&](Error::UniquePtr, std::optional _entry) { + std::map bfsInfos; + auto&& out = asBytes(std::string(_entry->getField(0))); + codec::scale::decode(bfsInfos, gsl::make_span(out)); + for (const auto& item : v) + { + BOOST_CHECK(bfsInfos.find(item) != bfsInfos.end()); + std::promise p; + m_storage->asyncOpenTable( + "/" + item, [&](Error::UniquePtr _error, std::optional
_table) { + BOOST_CHECK(!_error); + BOOST_CHECK(_table.has_value()); + p.set_value(true); + }); + p.get_future().get(); + } + p7.set_value(true); + }); + p7.get_future().get(); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); + BOOST_CHECK_EQUAL(f4.get(), true); + BOOST_CHECK_EQUAL(f5.get(), true); + BOOST_CHECK_EQUAL(f6.get(), true); +} + +BOOST_AUTO_TEST_CASE(getBlockNumber) +{ + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBlockNumber([&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_number, -1); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); +} + +BOOST_AUTO_TEST_CASE(getBlockHashByNumber) +{ + initFixture(); + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBlockHashByNumber(-1, [=, &p1](Error::Ptr _error, HashType _hash) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::ErrorArgument); + BOOST_CHECK_EQUAL(_hash, HashType()); + p1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetBlockHashByNumber(1000, [=, &p2](Error::Ptr _error, HashType _hash) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_hash, HashType()); + p2.set_value(true); + }); + + std::promise getRowPromise; + m_storage->asyncGetRow( + SYS_NUMBER_2_HASH, "0", [&getRowPromise](auto&& error, std::optional&& entry) { + BOOST_CHECK(!error); + getRowPromise.set_value(std::move(*entry)); + }); + + auto oldHashEntry = getRowPromise.get_future().get(); + + Entry hashEntry; + hashEntry.importFields({""}); + + // deal with version conflict + std::promise setRowPromise; + m_storage->asyncSetRow( + SYS_NUMBER_2_HASH, "0", std::move(std::move(hashEntry)), [&setRowPromise](auto&& error) { + BOOST_CHECK(!error); + + setRowPromise.set_value(std::move(error)); + }); + setRowPromise.get_future().get(); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetBlockHashByNumber(0, [=, &p3](Error::Ptr _error, HashType _hash) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_hash, HashType("")); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(getBlockNumberByHash) +{ + initFixture(); + + std::promise p1; + auto f1 = p1.get_future(); + // error hash + m_ledger->asyncGetBlockNumberByHash(HashType(), [&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_number, -1); + p1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetBlockNumberByHash( + HashType("123"), [&](Error::Ptr _error, BlockNumber _number) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_number, -1); + p2.set_value(true); + }); + + std::promise p3; + auto f3 = p3.get_future(); + + m_storage->asyncGetRow( + SYS_NUMBER_2_HASH, "0", [&](auto&& error, std::optional&& hashEntry) { + BOOST_CHECK(!error); + BOOST_CHECK(hashEntry); + auto hash = bcos::crypto::HashType( + std::string(hashEntry->getField(0)), bcos::crypto::HashType::FromBinary); + + Entry numberEntry; + m_storage->asyncSetRow(SYS_HASH_2_NUMBER, + std::string_view((const char*)hash.data(), hash.size()), std::move(numberEntry), + [&](auto&& error) { + BOOST_CHECK(!error); + + m_ledger->asyncGetBlockNumberByHash( + hash, [&](Error::Ptr error, BlockNumber number) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(number, -1); + + p3.set_value(true); + }); + }); + }); + + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(getTotalTransactionCount) +{ + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetTotalTransactionCount( + [&](Error::Ptr _error, int64_t totalCount, int64_t totalFailed, + bcos::protocol::BlockNumber _number) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK_EQUAL(totalCount, -1); + BOOST_CHECK_EQUAL(totalFailed, -1); + BOOST_CHECK_EQUAL(_number, -1); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + initFixture(); + initChain(5); + std::promise p2; + m_ledger->asyncGetTotalTransactionCount( + [&](Error::Ptr _error, int64_t totalCount, int64_t totalFailed, + bcos::protocol::BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(totalCount > 0); + BOOST_CHECK(totalFailed >= 0); + BOOST_CHECK_EQUAL(_number, 5); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(p2.get_future().get(), true); +} + +BOOST_AUTO_TEST_CASE(getNodeListByType) +{ + initEmptyFixture(); + + std::promise p1; + auto f1 = p1.get_future(); + // error type get empty node list + m_ledger->asyncGetNodeListByType( + "test", [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->size(), 0); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_SEALER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_nodeList != nullptr); + BOOST_CHECK(_nodeList->size() == 0); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(f2.get(), true); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_OBSERVER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_nodeList != nullptr); + BOOST_CHECK(_nodeList->size() == 0); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(testNodeListByType) +{ + initFixture(); + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_SEALER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->size(), 4); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + std::promise setSealer1; + m_storage->asyncGetRow( + SYS_CONSENSUS, "key", [&](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + BOOST_CHECK(entry); + + auto list = decodeConsensusList(entry->getField(0)); + list.emplace_back( + bcos::crypto::HashType("56789").hex(), 100, std::string{CONSENSUS_SEALER}, "5"); + + entry->setField(0, encodeConsensusList(list)); + m_storage->asyncSetRow( + SYS_CONSENSUS, "key", std::move(*entry), [&](Error::UniquePtr error) { + BOOST_CHECK(!error); + setSealer1.set_value(true); + }); + }); + setSealer1.get_future().get(); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_SEALER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->size(), 4); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(f2.get(), true); + + // set block number to 5 + initChain(5); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetNodeListByType( + CONSENSUS_SEALER, [&](Error::Ptr _error, consensus::ConsensusNodeListPtr _nodeList) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_nodeList->size(), 5); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(getBlockDataByNumber) +{ + initFixture(); + // test cache + initChain(20); + + std::promise p1; + auto f1 = p1.get_future(); + // error number + m_ledger->asyncGetBlockDataByNumber( + 1000, FULL_BLOCK, [=, &p1](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK_EQUAL(_block, nullptr); + p1.set_value(true); + }); + + std::promise pp1; + auto ff1 = pp1.get_future(); + m_ledger->asyncGetBlockDataByNumber( + -1, FULL_BLOCK, [=, &pp1](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK_EQUAL(_block, nullptr); + pp1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + // cache hit + m_ledger->asyncGetBlockDataByNumber( + 15, FULL_BLOCK, [=, &p2](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_block->blockHeader() != nullptr); + BOOST_CHECK(_block->transactionsSize() != 0); + BOOST_CHECK(_block->receiptsSize() != 0); + p2.set_value(true); + }); + + std::promise p3; + auto f3 = p3.get_future(); + // cache not hit + m_ledger->asyncGetBlockDataByNumber( + 3, FULL_BLOCK, [=, &p3](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_block->blockHeader() != nullptr); + BOOST_CHECK(_block->transactionsSize() != 0); + BOOST_CHECK(_block->receiptsSize() != 0); + p3.set_value(true); + }); + + std::promise p4; + auto f4 = p4.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 5, TRANSACTIONS, [=, &p4](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_block->transactionsSize() != 0); + p4.set_value(true); + }); + + std::promise p5; + auto f5 = p5.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 5, RECEIPTS, [=, &p5](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_block->receiptsSize() != 0); + p5.set_value(true); + }); + + std::promise p6; + auto f6 = p6.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 0, TRANSACTIONS, [=, &p6](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK_EQUAL(_block->transactionsSize(), 0); + p6.set_value(true); + }); + + std::promise p7; + auto f7 = p7.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 0, RECEIPTS, [=, &p7](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK_EQUAL(_block->receiptsSize(), 0); + p7.set_value(true); + }); + std::promise p8; + auto f8 = p8.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 15, TRANSACTIONS_HASH, [=, &p8](Error::Ptr _error, Block::Ptr _block) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK_EQUAL(_block->transactionsSize(), 0); + BOOST_CHECK_EQUAL(_block->receiptsSize(), 0); + BOOST_TEST(_block->transactionsMetaDataSize() != 0); + p8.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(ff1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); + BOOST_CHECK_EQUAL(f4.get(), true); + BOOST_CHECK_EQUAL(f5.get(), true); + BOOST_CHECK_EQUAL(f6.get(), true); + BOOST_CHECK_EQUAL(f7.get(), true); + BOOST_CHECK_EQUAL(f8.get(), true); +} + +BOOST_AUTO_TEST_CASE(getTransactionByHash) +{ + initFixture(); + initChain(5); + auto hashList = std::make_shared(); + auto errorHashList = std::make_shared(); + auto fullHashList = std::make_shared(); + hashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(0)); + hashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(1)); + hashList->emplace_back(m_fakeBlocks->at(4)->transactionHash(0)); + errorHashList->emplace_back(HashType("123")); + errorHashList->emplace_back(HashType("456")); + fullHashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(0)); + fullHashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(1)); + fullHashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(2)); + fullHashList->emplace_back(m_fakeBlocks->at(3)->transactionHash(3)); + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBatchTxsByHashList(hashList, true, + [=, &p1, this](Error::Ptr _error, protocol::TransactionsPtr _txList, + std::shared_ptr> _proof) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_txList != nullptr); + + auto hash = m_fakeBlocks->at(3)->transaction(0)->hash(); + BOOST_CHECK(_proof->at(hash.hex()) != nullptr); + auto ret = merkleUtility.verifyMerkleProof( + *_proof->at(hash.hex()), hash, m_fakeBlocks->at(3)->blockHeader()->txsRoot()); + BOOST_CHECK(ret); + + hash = m_fakeBlocks->at(3)->transaction(1)->hash(); + BOOST_CHECK(_proof->at(hash.hex()) != nullptr); + ret = merkleUtility.verifyMerkleProof( + *_proof->at(hash.hex()), hash, m_fakeBlocks->at(3)->blockHeader()->txsRoot()); + BOOST_CHECK(ret); + + hash = m_fakeBlocks->at(4)->transaction(0)->hash(); + BOOST_CHECK(_proof->at(hash.hex()) != nullptr); + ret = merkleUtility.verifyMerkleProof( + *_proof->at(hash.hex()), hash, m_fakeBlocks->at(4)->blockHeader()->txsRoot()); + BOOST_CHECK(ret); + + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + std::promise p2; + auto f2 = p2.get_future(); + m_ledger->asyncGetBatchTxsByHashList(fullHashList, true, + [=, &p2, this](Error::Ptr _error, protocol::TransactionsPtr _txList, + std::shared_ptr> _proof) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_txList != nullptr); + + for (auto& hash : *fullHashList) + { + BOOST_CHECK(_proof->at(hash.hex()) != nullptr); + auto ret = merkleUtility.verifyMerkleProof( + *_proof->at(hash.hex()), hash, m_fakeBlocks->at(3)->blockHeader()->txsRoot()); + BOOST_CHECK(ret); + } + + BOOST_CHECK(_proof->at(m_fakeBlocks->at(3)->transaction(0)->hash().hex()) != nullptr); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(f2.get(), true); + + std::promise p3; + auto f3 = p3.get_future(); + // error hash list + m_ledger->asyncGetBatchTxsByHashList(errorHashList, true, + [=, &p3](Error::Ptr _error, protocol::TransactionsPtr _txList, + std::shared_ptr> _proof) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK(_txList == nullptr); + + BOOST_CHECK(_proof == nullptr); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f3.get(), true); + + std::promise p4; + auto f4 = p4.get_future(); + // without proof + m_ledger->asyncGetBatchTxsByHashList(hashList, false, + [=, &p4](Error::Ptr _error, protocol::TransactionsPtr _txList, + std::shared_ptr> _proof) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_txList != nullptr); + + BOOST_CHECK(_proof == nullptr); + p4.set_value(true); + }); + BOOST_CHECK_EQUAL(f4.get(), true); + + std::promise p5; + auto f5 = p5.get_future(); + // null hash list + m_ledger->asyncGetBatchTxsByHashList(nullptr, false, + [=, &p5](Error::Ptr _error, protocol::TransactionsPtr _txList, + std::shared_ptr> _proof) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::ErrorArgument); + BOOST_CHECK(_txList == nullptr); + BOOST_CHECK(_proof == nullptr); + p5.set_value(true); + }); + BOOST_CHECK_EQUAL(f5.get(), true); +} + +BOOST_AUTO_TEST_CASE(getTransactionReceiptByHash) +{ + initFixture(); + initChain(5); + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetTransactionReceiptByHash(m_fakeBlocks->at(3)->transactionHash(0), true, + [&](Error::Ptr _error, TransactionReceipt::ConstPtr _receipt, MerkleProofPtr _proof) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK_EQUAL( + _receipt->hash().hex(), m_fakeBlocks->at(3)->receipt(0)->hash().hex()); + + auto hash = _receipt->hash(); + BOOST_CHECK(_proof != nullptr); + auto ret = merkleUtility.verifyMerkleProof( + *_proof, hash, m_fakeBlocks->at(3)->blockHeader()->receiptsRoot()); + BOOST_CHECK(ret); + + BOOST_CHECK(_proof != nullptr); + p1.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + // without proof + m_ledger->asyncGetTransactionReceiptByHash(m_fakeBlocks->at(3)->transactionHash(0), false, + [&](Error::Ptr _error, TransactionReceipt::ConstPtr _receipt, MerkleProofPtr _proof) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK_EQUAL( + _receipt->hash().hex(), m_fakeBlocks->at(3)->receipt(0)->hash().hex()); + BOOST_CHECK(_proof == nullptr); + p2.set_value(true); + }); + + std::promise p3; + auto f3 = p3.get_future(); + // error hash + m_ledger->asyncGetTransactionReceiptByHash(HashType(), false, + [&](Error::Ptr _error, TransactionReceipt::ConstPtr _receipt, MerkleProofPtr _proof) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_receipt, nullptr); + BOOST_CHECK(_proof == nullptr); + p3.set_value(true); + }); + + std::promise p4; + auto f4 = p4.get_future(); + m_ledger->asyncGetTransactionReceiptByHash(HashType("123"), true, + [&](Error::Ptr _error, TransactionReceipt::ConstPtr _receipt, MerkleProofPtr _proof) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_receipt, nullptr); + BOOST_CHECK(_proof == nullptr); + p4.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); + BOOST_CHECK_EQUAL(f4.get(), true); +} + +BOOST_AUTO_TEST_CASE(getNonceList) +{ + initFixture(); + initChain(5); + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetNonceList(3, 6, + [&](Error::Ptr _error, + std::shared_ptr> _nonceMap) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_nonceMap != nullptr); + BOOST_CHECK_EQUAL(_nonceMap->size(), 3); + p1.set_value(true); + }); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncGetNonceList(4, 2, + [&](Error::Ptr _error, + std::shared_ptr> _nonceMap) { + BOOST_CHECK_EQUAL(_error, nullptr); + BOOST_CHECK(_nonceMap != nullptr); + BOOST_CHECK_EQUAL(_nonceMap->size(), 2); + p3.set_value(true); + }); + + std::promise p2; + auto f2 = p2.get_future(); + // error param + m_ledger->asyncGetNonceList(-1, -5, + [&](Error::Ptr _error, + std::shared_ptr> _nonceMap) { + BOOST_CHECK(_error != nullptr); + BOOST_CHECK(_nonceMap == nullptr); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + BOOST_CHECK_EQUAL(f2.get(), true); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(preStoreTransaction) +{ + initFixture(); + initBlocks(5); + auto txBytesList = std::make_shared>(); + auto hashList = std::make_shared(); + auto block = m_fakeBlocks->at(3); + auto transactions = m_fakeTransactions[3]; + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncPreStoreBlockTxs(transactions, block, [&](Error::Ptr _error) { + BOOST_CHECK_EQUAL(_error, nullptr); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + +#if 0 + std::promise p2; + auto f2 = p2.get_future(); + // null pointer + m_ledger->asyncPreStoreBlockTxs(transactions, nullptr, [&](Error::Ptr _error) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::ErrorArgument); + p2.set_value(true); + }); + BOOST_CHECK_EQUAL(f2.get(), true); + + std::promise p3; + auto f3 = p3.get_future(); + m_ledger->asyncPreStoreBlockTxs(nullptr, block, [&](Error::Ptr _error) { + BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::ErrorArgument); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f3.get(), true); +#endif +} + +BOOST_AUTO_TEST_CASE(preStoreReceipt) +{ + // initFixture(); + // initBlocks(5); + + // std::promise p1; + // auto f1 = p1.get_future(); + // m_ledger->asyncStoreReceipts(nullptr, m_fakeBlocks->at(1), [&](Error::Ptr _error) { + // BOOST_CHECK_EQUAL(_error->errorCode(), LedgerError::ErrorArgument); + // p1.set_value(true); + // }); + // BOOST_CHECK_EQUAL(f1.get(), true); +} + +BOOST_AUTO_TEST_CASE(getSystemConfig) +{ + initFixture(); + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetSystemConfigByKey( + SYSTEM_KEY_TX_COUNT_LIMIT, [&](Error::Ptr _error, std::string _value, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_value, "1000"); + BOOST_CHECK_EQUAL(_number, 0); + p1.set_value(true); + }); + BOOST_CHECK_EQUAL(f1.get(), true); + + initChain(5); + + std::promise
tablePromise; + m_storage->asyncOpenTable(SYS_CONFIG, [&](auto&& error, std::optional
&& table) { + BOOST_CHECK(!error); + + tablePromise.set_value(std::move(*table)); + }); + + auto table = tablePromise.get_future().get(); + + auto oldEntry = table.getRow(SYSTEM_KEY_TX_COUNT_LIMIT); + auto [txCountLimit, enableNum] = oldEntry->getObject(); + BOOST_CHECK_EQUAL(txCountLimit, "1000"); + BOOST_CHECK_EQUAL(enableNum, 0); + + Entry newEntry = table.newEntry(); + newEntry.setObject(SystemConfigEntry{"2000", 5}); + + table.setRow(SYSTEM_KEY_TX_COUNT_LIMIT, newEntry); + + std::promise pp2; + m_ledger->asyncGetSystemConfigByKey( + SYSTEM_KEY_TX_COUNT_LIMIT, [&](Error::Ptr _error, std::string _value, BlockNumber _number) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK_EQUAL(_value, "2000"); + BOOST_CHECK_EQUAL(_number, 5); + pp2.set_value(true); + }); + BOOST_CHECK_EQUAL(pp2.get_future().get(), true); + + std::promise p3; + auto f3 = p3.get_future(); + // get error key + m_ledger->asyncGetSystemConfigByKey( + "test", [&](Error::Ptr _error, std::string _value, BlockNumber _number) { + BOOST_CHECK(_error->errorCode() == LedgerError::GetStorageError); + BOOST_CHECK_EQUAL(_value, ""); + BOOST_CHECK_EQUAL(_number, -1); + p3.set_value(true); + }); + BOOST_CHECK_EQUAL(f3.get(), true); +} + +BOOST_AUTO_TEST_CASE(testEmptyBlock) +{ + initFixture(); + initEmptyChain(20); + + std::promise p1; + auto f1 = p1.get_future(); + m_ledger->asyncGetBlockDataByNumber( + 4, FULL_BLOCK, [&](Error::Ptr _error, bcos::protocol::Block::Ptr _block) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_block != nullptr); + p1.set_value(true); + }); + BOOST_CHECK(f1.get()); +} + +BOOST_AUTO_TEST_CASE(testSyncBlock) +{ + auto block = m_blockFactory->createBlock(); + auto blockHeader = m_blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(100); + blockHeader->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + + block->setBlockHeader(blockHeader); + + std::string inputStr = "hello world!"; + bytes input(inputStr.begin(), inputStr.end()); + + bcos::crypto::KeyPairInterface::Ptr keyPair = + m_blockFactory->cryptoSuite()->signatureImpl()->generateKeyPair(); + auto tx = m_blockFactory->transactionFactory()->createTransaction( + 0, "to", input, 200, 300, "chainid", "groupid", 800, keyPair); + + block->appendTransaction(tx); + auto blockTxs = std::make_shared(); + blockTxs->push_back(tx); + auto txs = std::make_shared>(); + auto hashList = std::make_shared(); + bcos::bytes encoded; + tx->encode(encoded); + txs->emplace_back(std::make_shared(encoded.begin(), encoded.end())); + hashList->emplace_back(tx->hash()); + + initFixture(); + auto transactions = std::make_shared(); + transactions->push_back(tx); + m_ledger->asyncPrewriteBlock( + m_storage, blockTxs, block, [](Error::Ptr&& error) { BOOST_CHECK(!error); }); + + m_ledger->asyncGetBlockDataByNumber( + 100, TRANSACTIONS, [tx](Error::Ptr error, bcos::protocol::Block::Ptr block) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(block->transactionsSize(), 1); + BOOST_CHECK_EQUAL(block->transaction(0)->hash().hex(), tx->hash().hex()); + }); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-ledger/test/unittests/ledger/common/FakeBlock.h b/bcos-ledger/test/unittests/ledger/common/FakeBlock.h new file mode 100644 index 0000000..2e02188 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/common/FakeBlock.h @@ -0,0 +1,159 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeBlock.h + * @author: kyonRay + * @date 2021-04-14 + */ + +#pragma once +#include "FakeBlockHeader.h" +#include "FakeReceipt.h" +#include "FakeTransaction.h" +#include "bcos-framework/protocol/TransactionMetaData.h" +#include "bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h" +#include "bcos-tars-protocol/protocol/TransactionFactoryImpl.h" +#include "bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h" +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +inline CryptoSuite::Ptr createCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signImpl = std::make_shared(); + return std::make_shared(hashImpl, signImpl, nullptr); +} + +inline BlockFactory::Ptr createBlockFactory(CryptoSuite::Ptr _cryptoSuite) +{ + auto blockHeaderFactory = + std::make_shared(_cryptoSuite); + auto transactionFactory = + std::make_shared(_cryptoSuite); + auto receiptFactory = + std::make_shared(_cryptoSuite); + return std::make_shared( + _cryptoSuite, blockHeaderFactory, transactionFactory, receiptFactory); +} + +inline Block::Ptr fakeBlock(CryptoSuite::Ptr _cryptoSuite, BlockFactory::Ptr _blockFactory, + size_t _txsNum, size_t _receiptsNum, BlockNumber _blockNumber) +{ + auto block = _blockFactory->createBlock(); + + auto blockHeader = testPBBlockHeader(_cryptoSuite, _blockNumber); + blockHeader->calculateHash(*_blockFactory->cryptoSuite()->hashImpl()); + block->setBlockType(CompleteBlock); + // fake transactions + for (size_t i = 0; i < _txsNum; i++) + { + auto tx = fakeTransaction(_cryptoSuite); + block->appendTransaction(tx); + } + auto txRoot = block->calculateTransactionRoot(*_cryptoSuite->hashImpl()); + blockHeader->setTxsRoot(std::move(txRoot)); + // fake receipts + for (size_t i = 0; i < _receiptsNum; i++) + { + auto receipt = testPBTransactionReceipt(_cryptoSuite, _blockNumber); + block->appendReceipt(receipt); + } + auto receiptRoot = block->calculateReceiptRoot(*_cryptoSuite->hashImpl()); + blockHeader->setReceiptsRoot(std::move(receiptRoot)); + // fake txsHash + for (size_t i = 0; i < _txsNum; i++) + { + auto transactionMetaData = + _blockFactory->createTransactionMetaData(block->transaction(i)->hash(), "/abc"); + block->appendTransactionMetaData(std::move(transactionMetaData)); + } + NonceList nonceList; + for (size_t i = 0; i < _txsNum; i++) + { + nonceList.emplace_back(u256(123)); + } + block->setNonceList(nonceList); + block->setBlockHeader(blockHeader); + return block; +} + +inline Block::Ptr fakeEmptyBlock( + CryptoSuite::Ptr _cryptoSuite, BlockFactory::Ptr _blockFactory, BlockNumber _blockNumber) +{ + auto block = _blockFactory->createBlock(); + + auto blockHeader = testPBBlockHeader(_cryptoSuite, _blockNumber); + blockHeader->calculateHash(*_blockFactory->cryptoSuite()->hashImpl()); + block->setBlockHeader(blockHeader); + return block; +} + +inline BlocksPtr fakeBlocks(CryptoSuite::Ptr _cryptoSuite, BlockFactory::Ptr _blockFactory, + size_t _txsNumBegin, size_t _receiptsNumBegin, size_t _blockNumber, std::string hash = "") +{ + BlocksPtr blocks = std::make_shared(); + ParentInfo parentInfo; + parentInfo.blockNumber = 0; + parentInfo.blockHash = HashType(hash); + for (size_t i = 0; i < _blockNumber; ++i) + { + ParentInfoList parentInfos; + auto block = + fakeBlock(_cryptoSuite, _blockFactory, _txsNumBegin + i, _receiptsNumBegin + i, i + 1); + parentInfos.push_back(parentInfo); + block->blockHeader()->setNumber(1 + i); + block->blockHeader()->setParentInfo(parentInfos); + block->blockHeader()->calculateHash(*_cryptoSuite->hashImpl()); + parentInfo.blockNumber = block->blockHeader()->number(); + parentInfo.blockHash = block->blockHeader()->hash(); + blocks->emplace_back(block); + } + return blocks; +} + +inline BlocksPtr fakeEmptyBlocks(CryptoSuite::Ptr _cryptoSuite, BlockFactory::Ptr _blockFactory, + size_t _blockNumber, std::string hash = "") +{ + BlocksPtr blocks = std::make_shared(); + ParentInfo parentInfo; + parentInfo.blockNumber = 0; + parentInfo.blockHash = HashType(hash); + for (size_t i = 0; i < _blockNumber; ++i) + { + ParentInfoList parentInfos; + auto block = fakeEmptyBlock(_cryptoSuite, _blockFactory, i + 1); + parentInfos.push_back(parentInfo); + block->blockHeader()->setNumber(1 + i); + block->blockHeader()->setParentInfo(parentInfos); + block->blockHeader()->calculateHash(*_cryptoSuite->hashImpl()); + parentInfo.blockNumber = block->blockHeader()->number(); + parentInfo.blockHash = block->blockHeader()->hash(); + blocks->emplace_back(block); + } + return blocks; +} + + +} // namespace test +} // namespace bcos diff --git a/bcos-ledger/test/unittests/ledger/common/FakeBlockHeader.h b/bcos-ledger/test/unittests/ledger/common/FakeBlockHeader.h new file mode 100644 index 0000000..cb8e423 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/common/FakeBlockHeader.h @@ -0,0 +1,133 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeBlockHeader.h + * @author: kyonRay + * @date 2021-04-14 + */ + +#pragma once +#include "FakeBlockHeader.h" +#include "bcos-protocol/Common.h" +#include "bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +inline BlockHeader::Ptr fakeAndTestBlockHeader(CryptoSuite::Ptr _cryptoSuite, int32_t _version, + const ParentInfoList& _parentInfo, h256 const& _txsRoot, h256 const& _receiptsRoot, + h256 const& _stateRoot, int64_t _number, u256 const& _gasUsed, int64_t _timestamp, + int64_t _sealer, const std::vector& _sealerList, bytes const& _extraData, + SignatureList _signatureList) +{ + BlockHeaderFactory::Ptr blockHeaderFactory = + std::make_shared(_cryptoSuite); + BlockHeader::Ptr blockHeader = blockHeaderFactory->createBlockHeader(); + blockHeader->setVersion(_version); + blockHeader->setParentInfo(_parentInfo); + blockHeader->setTxsRoot(_txsRoot); + blockHeader->setReceiptsRoot(_receiptsRoot); + blockHeader->setStateRoot(_stateRoot); + blockHeader->setNumber(_number); + blockHeader->setGasUsed(_gasUsed); + blockHeader->setTimestamp(_timestamp); + blockHeader->setSealer(_sealer); + blockHeader->setSealerList(gsl::span(_sealerList)); + blockHeader->setExtraData(_extraData); + blockHeader->setSignatureList(_signatureList); + WeightList weights; + weights.push_back(0); + blockHeader->setConsensusWeights(weights); + blockHeader->calculateHash(*_cryptoSuite->hashImpl()); + return blockHeader; +} + +inline ParentInfoList fakeParentInfo(Hash::Ptr _hashImpl, size_t _size) +{ + ParentInfoList parentInfos; + for (size_t i = 0; i < _size; i++) + { + ParentInfo parentInfo; + parentInfo.blockNumber = i; + parentInfo.blockHash = _hashImpl->hash(std::to_string(i)); + parentInfos.emplace_back(parentInfo); + } + return parentInfos; +} + +inline std::vector fakeSealerList( + std::vector& _keyPairVec, SignatureCrypto::Ptr _signImpl, size_t size) +{ + std::vector sealerList; + for (size_t i = 0; i < size; i++) + { + bcos::crypto::KeyPairInterface::Ptr keyPair = _signImpl->generateKeyPair(); + _keyPairVec.emplace_back(keyPair); + sealerList.emplace_back(*(keyPair->publicKey()->encode())); + } + return sealerList; +} + +inline SignatureList fakeSignatureList(SignatureCrypto::Ptr _signImpl, + std::vector& _keyPairVec, h256 const& _hash) +{ + auto sealerIndex = 0; + SignatureList signatureList; + for (auto keyPair : _keyPairVec) + { + auto signature = _signImpl->sign(*keyPair, _hash); + Signature sig; + sig.index = sealerIndex++; + sig.signature = *signature; + signatureList.push_back(sig); + } + return signatureList; +} + +inline BlockHeader::Ptr testPBBlockHeader(CryptoSuite::Ptr _cryptoSuite, BlockNumber _blockNumber) +{ + auto hashImpl = _cryptoSuite->hashImpl(); + auto signImpl = _cryptoSuite->signatureImpl(); + auto cryptoSuite = std::make_shared(hashImpl, signImpl, nullptr); + int version = 10; + auto parentInfo = fakeParentInfo(hashImpl, 1); + auto txsRoot = hashImpl->hash((std::string) "txsRoot"); + auto receiptsRoot = hashImpl->hash((std::string) "receiptsRoot"); + auto stateRoot = hashImpl->hash((std::string) "stateRoot"); + int64_t number = _blockNumber; + u256 gasUsed = 3453456346534; + int64_t timestamp = 9234234234; + int64_t sealer = 100; + std::vector keyPairVec; + auto sealerList = fakeSealerList(keyPairVec, signImpl, 4); + bytes extraData = stateRoot.asBytes(); + auto signatureList = fakeSignatureList(signImpl, keyPairVec, receiptsRoot); + + auto blockHeader = + fakeAndTestBlockHeader(cryptoSuite, version, parentInfo, txsRoot, receiptsRoot, stateRoot, + number, gasUsed, timestamp, sealer, sealerList, extraData, signatureList); + return blockHeader; +} +} // namespace test +} // namespace bcos diff --git a/bcos-ledger/test/unittests/ledger/common/FakeReceipt.h b/bcos-ledger/test/unittests/ledger/common/FakeReceipt.h new file mode 100644 index 0000000..e5970f5 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/common/FakeReceipt.h @@ -0,0 +1,90 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeReceipt.h + * @author: kyonRay + * @date 2021-05-06 + */ + +#pragma once +#include "bcos-protocol/TransactionStatus.h" +#include "bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +inline LogEntriesPtr fakeLogEntries(Hash::Ptr _hashImpl, size_t _size) +{ + LogEntriesPtr logEntries = std::make_shared(); + for (size_t i = 0; i < _size; i++) + { + auto topic = _hashImpl->hash(std::to_string(i)); + h256s topics; + topics.push_back(topic); + auto address = right160(topic).asBytes(); + bytes output = topic.asBytes(); + LogEntry logEntry(address, topics, output); + logEntries->push_back(logEntry); + } + return logEntries; +} + +inline TransactionReceipt::Ptr testPBTransactionReceipt( + CryptoSuite::Ptr _cryptoSuite, BlockNumber _blockNumber) +{ + auto hashImpl = _cryptoSuite->hashImpl(); + u256 gasUsed = 12343242342 + random(); + auto contractAddress = "5fe3c4c3e2079879a0dba1937aca95ac16e68f0f"; + auto logEntries = fakeLogEntries(hashImpl, 2); + TransactionStatus status = TransactionStatus::BadJumpDestination; + auto contractAddressBytes = toAddress(contractAddress); + bytes output = contractAddressBytes.asBytes(); + for (int i = 0; i < (random() % 9); i++) + { + output += contractAddressBytes.asBytes(); + } + auto factory = + std::make_shared(_cryptoSuite); + auto receipt = factory->createReceipt( + gasUsed, contractAddress, *logEntries, (int32_t)status, bcos::ref(output), _blockNumber); + return receipt; +} + +inline ReceiptsPtr fakeReceipts(int _size) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + ReceiptsPtr receipts = std::make_shared(); + for (int i = 0; i < _size; ++i) + { + receipts->emplace_back(testPBTransactionReceipt(cryptoSuite, i + 1)); + } + return receipts; +} +} // namespace test +} // namespace bcos diff --git a/bcos-ledger/test/unittests/ledger/common/FakeTransaction.h b/bcos-ledger/test/unittests/ledger/common/FakeTransaction.h new file mode 100644 index 0000000..6e7bce9 --- /dev/null +++ b/bcos-ledger/test/unittests/ledger/common/FakeTransaction.h @@ -0,0 +1,112 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeTransaction.h + * @author: kyonRay + * @date 2021-05-06 + */ + +#pragma once +#include + +#include "bcos-concepts/Hash.h" +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::protocol; + +namespace bcos +{ +namespace test +{ +inline auto fakeTransaction(CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair, + std::string const& _to, bytes const& _input, u256 const& _nonce, int64_t const& _blockLimit, + std::string const& _chainId, std::string const& _groupId) +{ + bcostars::Transaction transaction; + transaction.data.to = _to; + transaction.data.input.assign(_input.begin(), _input.end()); + transaction.data.nonce = boost::lexical_cast(_nonce); + transaction.data.blockLimit = _blockLimit; + transaction.data.chainID = _chainId; + transaction.data.groupID = _groupId; + auto pbTransaction = std::make_shared( + [m_transaction = std::move(transaction)]() mutable { return &m_transaction; }); + // set signature + std::visit( + [&pbTransaction]( + auto&& hasher) { pbTransaction->calculateHash>(); }, + _cryptoSuite->hashImpl()->hasher()); + + auto signData = _cryptoSuite->signatureImpl()->sign(*_keyPair, pbTransaction->hash(), true); + pbTransaction->setSignatureData(*signData); + pbTransaction->forceSender(_keyPair->address(_cryptoSuite->hashImpl()).asBytes()); + return pbTransaction; +} + +inline Transaction::Ptr testTransaction(CryptoSuite::Ptr _cryptoSuite, + KeyPairInterface::Ptr _keyPair, std::string const& _to, bytes const& _input, u256 const& _nonce, + int64_t const& _blockLimit, std::string const& _chainId, std::string const& _groupId) +{ + auto factory = std::make_shared(_cryptoSuite); + auto pbTransaction = fakeTransaction( + _cryptoSuite, _keyPair, _to, _input, _nonce, _blockLimit, _chainId, _groupId); + return pbTransaction; +} + +inline Transaction::Ptr fakeTransaction(CryptoSuite::Ptr _cryptoSuite) +{ + bcos::crypto::KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto to = *toHexString(keyPair->address(_cryptoSuite->hashImpl()).asBytes()); + std::string inputStr = "testTransaction"; + bytes input = asBytes(inputStr); + u256 nonce = 120012323; + int64_t blockLimit = 1000023; + std::string chainId = "chainId"; + std::string groupId = "groupId"; + return testTransaction(_cryptoSuite, keyPair, to, input, nonce, blockLimit, chainId, groupId); +} +inline TransactionsPtr fakeTransactions(int _size) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + bcos::crypto::KeyPairInterface::Ptr keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + auto to = *toHexString(cryptoSuite->calculateAddress(keyPair->publicKey()).asBytes()); + + TransactionsPtr txs = std::make_shared(); + for (int i = 0; i < _size; ++i) + { + std::string inputStr = "testTransaction" + std::to_string(i); + bytes input = asBytes(inputStr); + u256 nonce = 120012323 + i; + int64_t blockLimit = 1000 + i; + std::string chainId = "chainId"; + std::string groupId = "groupId"; + txs->emplace_back( + testTransaction(cryptoSuite, keyPair, to, input, nonce, blockLimit, chainId, groupId)); + } + return txs; +} +} // namespace test +} // namespace bcos diff --git a/bcos-pbft/CMakeLists.txt b/bcos-pbft/CMakeLists.txt new file mode 100644 index 0000000..d69db7c --- /dev/null +++ b/bcos-pbft/CMakeLists.txt @@ -0,0 +1,62 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-pbft +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-pbft +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + + +project(bcos-pbft VERSION ${VERSION}) + +# proto generation +set(PROTO_INPUT_PATH ${CMAKE_SOURCE_DIR}/bcos-pbft) +set(PROTO_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/) + +set(MESSAGES_PROTOS bcos-pbft/core/proto/Consensus.proto bcos-pbft/pbft/protocol/proto/PBFT.proto) +foreach(proto_file ${MESSAGES_PROTOS}) + get_filename_component(bcos_proto_abs "${PROTO_INPUT_PATH}" ABSOLUTE) + set(proto_file_abs ${bcos_proto_abs}/${proto_file}) + get_filename_component(rel_dir ${proto_file} DIRECTORY) + get_filename_component(basename ${proto_file} NAME_WE) + set(generated_files ${PROTO_OUTPUT_PATH}/${rel_dir}/${basename}.pb.cc) + + list(APPEND MESSAGES_SRCS ${generated_files}) + + message("Command: protoc --cpp_out ${PROTO_OUTPUT_PATH} -I ${PROTO_INPUT_PATH} ${proto_file}") + add_custom_command( + OUTPUT ${generated_files} + COMMAND protobuf::protoc --cpp_out ${PROTO_OUTPUT_PATH} -I ${PROTO_INPUT_PATH} ${proto_file} + COMMENT "Generating ${generated_files} from ${proto_file_abs}" + VERBATIM + ) +endforeach() + +include_directories(${PROTO_OUTPUT_PATH}) + +find_package(Protobuf CONFIG REQUIRED) +find_package(jsoncpp CONFIG REQUIRED) + +file(GLOB_RECURSE SRCS bcos-pbft/*.cpp) +add_library(${PBFT_TARGET} ${SRCS} ${MESSAGES_SRCS}) +target_link_libraries(${PBFT_TARGET} PUBLIC ${TXPOOL_TARGET} ${UTILITIES_TARGET} ${TOOL_TARGET} ${PROTOCOL_TARGET} bcos-framework jsoncpp_static) + +if (TESTS) + # fetch bcos-test + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/Common.h b/bcos-pbft/bcos-pbft/core/Common.h new file mode 100644 index 0000000..fadd4c2 --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/Common.h @@ -0,0 +1,30 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date 2021-04-12 + */ +#pragma once +#include +#include +#include + +#define CONSENSUS_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("CONSENSUS") << LOG_BADGE("Core") +namespace bcos::consensus +{ +const IndexType NON_CONSENSUS_NODE = (IndexType)(-1); +DERIVE_BCOS_EXCEPTION(InitConsensusException); +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/ConsensusConfig.cpp b/bcos-pbft/bcos-pbft/core/ConsensusConfig.cpp new file mode 100644 index 0000000..379dd69 --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/ConsensusConfig.cpp @@ -0,0 +1,158 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Base implementation of consensus Config + * @file ConsensusConfig.cpp + * @author: yujiechen + * @date 2021-04-09 + */ +#include "ConsensusConfig.h" + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::consensus; +// the consensus node list +// Note: copy here to ensure thread safety +// And the cost of copying the pointer is more efficient +ConsensusNodeList ConsensusConfig::consensusNodeList() const +{ + ReadGuard lock(x_consensusNodeList); + return *m_consensusNodeList; +} + +NodeIDs ConsensusConfig::consensusNodeIDList(bool _excludeSelf) const +{ + ReadGuard lock(x_consensusNodeList); + std::vector nodeIDList; + for (const auto& node : *m_consensusNodeList) + { + if (_excludeSelf && node->nodeID()->data() == nodeID()->data()) + { + continue; + } + nodeIDList.push_back(node->nodeID()); + } + return nodeIDList; +} + +bool ConsensusConfig::compareConsensusNode( + ConsensusNodeList const& _left, ConsensusNodeList const& _right) +{ + if (_left.size() != _right.size()) + { + return false; + } + size_t i = 0; + for (auto const& node : _left) + { + const auto& compareNode = _right[i]; + if (node->nodeID()->data() != compareNode->nodeID()->data() || + node->weight() != compareNode->weight()) + { + return false; + } + i++; + } + return true; +} + +void ConsensusConfig::setObserverNodeList(ConsensusNodeList& _observerNodeList) +{ + std::sort(_observerNodeList.begin(), _observerNodeList.end(), ConsensusNodeComparator()); + // update the observer list + { + UpgradableGuard lock(x_observerNodeList); + // consensus node list have not been changed + if (compareConsensusNode(_observerNodeList, *m_observerNodeList)) + { + m_observerNodeListUpdated = false; + return; + } + UpgradeGuard ul(lock); + // consensus node list have been changed + *m_observerNodeList = _observerNodeList; + m_observerNodeListUpdated = true; + } +} + +void ConsensusConfig::setConsensusNodeList(ConsensusNodeList& _consensusNodeList) +{ + if (_consensusNodeList.empty()) + { + BOOST_THROW_EXCEPTION(InitConsensusException() + << errinfo_comment("Must contain at least one consensus node")); + } + + std::sort(_consensusNodeList.begin(), _consensusNodeList.end(), ConsensusNodeComparator()); + // update the consensus list + { + UpgradableGuard lock(x_consensusNodeList); + // consensus node list have not been changed + if (compareConsensusNode(_consensusNodeList, *m_consensusNodeList)) + { + m_consensusNodeListUpdated = false; + return; + } + UpgradeGuard ul(lock); + // consensus node list have been changed + *m_consensusNodeList = _consensusNodeList; + m_consensusNodeListUpdated = true; + } + { + // update the consensusNodeNum + ReadGuard lock(x_consensusNodeList); + m_consensusNodeNum.store(m_consensusNodeList->size()); + } + // update the nodeIndex + auto nodeIndex = getNodeIndexByNodeID(m_keyPair->publicKey()); + if (nodeIndex != m_nodeIndex) + { + m_nodeIndex.store(nodeIndex); + } + // update quorum + updateQuorum(); + CONSENSUS_LOG(INFO) << METRIC << LOG_DESC("updateConsensusNodeList") + << LOG_KV("nodeNum", m_consensusNodeNum) << LOG_KV("nodeIndex", nodeIndex) + << LOG_KV("committedIndex", + (committedProposal() ? committedProposal()->index() : 0)) + << decsConsensusNodeList(_consensusNodeList); +} + +IndexType ConsensusConfig::getNodeIndexByNodeID(bcos::crypto::PublicPtr _nodeID) +{ + ReadGuard lock(x_consensusNodeList); + IndexType nodeIndex = NON_CONSENSUS_NODE; + IndexType i = 0; + for (const auto& _consensusNode : *m_consensusNodeList) + { + if (_consensusNode->nodeID()->data() == _nodeID->data()) + { + nodeIndex = i; + break; + } + i++; + } + return nodeIndex; +} + +ConsensusNodeInterface::Ptr ConsensusConfig::getConsensusNodeByIndex(IndexType _nodeIndex) +{ + ReadGuard lock(x_consensusNodeList); + if (_nodeIndex < m_consensusNodeList->size()) + { + return (*m_consensusNodeList)[_nodeIndex]; + } + return nullptr; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/ConsensusConfig.h b/bcos-pbft/bcos-pbft/core/ConsensusConfig.h new file mode 100644 index 0000000..ff8fcd4 --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/ConsensusConfig.h @@ -0,0 +1,170 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of Consensus Config + * @file ConsensusConfig.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include "../framework/ConsensusConfigInterface.h" +#include "Common.h" +#include "bcos-framework/protocol/Protocol.h" +#include +#include + +namespace bcos +{ +namespace consensus +{ +class ConsensusConfig : public ConsensusConfigInterface +{ +public: + using Ptr = std::shared_ptr; + explicit ConsensusConfig(bcos::crypto::KeyPairInterface::Ptr _keyPair) + : m_keyPair(_keyPair), + m_consensusNodeList(std::make_shared()), + m_observerNodeList(std::make_shared()) + {} + virtual ~ConsensusConfig() {} + + // the NodeID of the consensus node + bcos::crypto::PublicPtr nodeID() const override { return m_keyPair->publicKey(); } + + // the nodeIndex of this node + IndexType nodeIndex() const override { return m_nodeIndex; } + + bool isConsensusNode() const override + { + return (m_nodeIndex != NON_CONSENSUS_NODE) && m_asMasterNode.load(); + } + // the consensus node list + ConsensusNodeList consensusNodeList() const override; + bcos::crypto::NodeIDs consensusNodeIDList(bool _excludeSelf = true) const override; + + uint64_t consensusTimeout() const override { return m_consensusTimeout; } + + void setConsensusNodeList(ConsensusNodeList& _consensusNodeList) override; + + void setConsensusTimeout(uint64_t _consensusTimeout) override + { + m_consensusTimeout.store(_consensusTimeout); + } + + // Note: After the block sync, + // need to set the committedProposal of the consensus in the ordering phase + void setCommittedProposal(ProposalInterface::Ptr _committedProposal) override + { + WriteGuard l(x_committedProposal); + m_committedProposal = _committedProposal; + auto index = m_committedProposal->index() + 1; + if (m_progressedIndex < index) + { + m_progressedIndex = index; + } + } + + ProposalInterface::ConstPtr committedProposal() override + { + ReadGuard l(x_committedProposal); + if (!m_committedProposal) + { + return nullptr; + } + return std::const_pointer_cast(m_committedProposal); + } + + virtual bcos::protocol::BlockNumber progressedIndex() { return m_progressedIndex; } + virtual void setProgressedIndex(bcos::protocol::BlockNumber _progressedIndex) + { + m_progressedIndex = _progressedIndex; + CONSENSUS_LOG(DEBUG) << LOG_DESC("PBFTConfig: setProgressedIndex") + << LOG_KV("progressedIndex", m_progressedIndex); + } + + virtual void updateQuorum() = 0; + IndexType getNodeIndexByNodeID(bcos::crypto::PublicPtr _nodeID); + ConsensusNodeInterface::Ptr getConsensusNodeByIndex(IndexType _nodeIndex); + bcos::crypto::KeyPairInterface::Ptr keyPair() { return m_keyPair; } + + virtual void setBlockTxCountLimit(uint64_t _blockTxCountLimit) + { + m_blockTxCountLimit = _blockTxCountLimit; + } + virtual uint64_t blockTxCountLimit() const { return m_blockTxCountLimit.load(); } + bcos::protocol::BlockNumber syncingHighestNumber() const { return m_syncingHighestNumber; } + void setSyncingHighestNumber(bcos::protocol::BlockNumber _number) + { + m_syncingHighestNumber = _number; + } + + IndexType consensusNodesNum() const { return m_consensusNodeNum.load(); } + + void setObserverNodeList(ConsensusNodeList& _observerNodeList); + + bool asMasterNode() const { return m_asMasterNode.load(); } + virtual void enableAsMasterNode(bool _isMasterNode) + { + m_asMasterNode.store(_isMasterNode); + if (m_versionNotification) + { + m_versionNotification(m_compatibilityVersion); + } + } + + virtual void registerVersionInfoNotification( + std::function _versionNotification) + { + m_versionNotification = _versionNotification; + } + + uint32_t compatibilityVersion() const { return m_compatibilityVersion; } + +private: + bool compareConsensusNode(ConsensusNodeList const& _left, ConsensusNodeList const& _right); + +protected: + bcos::crypto::KeyPairInterface::Ptr m_keyPair; + std::atomic m_nodeIndex = {0}; + std::atomic m_consensusNodeNum = {0}; + + ConsensusNodeListPtr m_consensusNodeList; + mutable bcos::SharedMutex x_consensusNodeList; + std::atomic_bool m_consensusNodeListUpdated = {false}; + + ConsensusNodeListPtr m_observerNodeList; + mutable bcos::SharedMutex x_observerNodeList; + std::atomic_bool m_observerNodeListUpdated = {false}; + + // default timeout is 3000ms + std::atomic m_consensusTimeout = {3000}; + constexpr const static uint64_t s_consensusTimeout = 3000; + // default blockTxCountLimit is 1000 + std::atomic m_blockTxCountLimit = {1000}; + + ProposalInterface::Ptr m_committedProposal; + mutable bcos::SharedMutex x_committedProposal; + + std::atomic m_progressedIndex = {0}; + std::atomic_bool m_syncingState = {false}; + bcos::protocol::BlockNumber m_syncingHighestNumber = {0}; + + std::atomic_bool m_asMasterNode = {false}; + + std::function m_versionNotification; + uint32_t m_compatibilityVersion = (uint32_t)(bcos::protocol::DEFAULT_VERSION); +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/ConsensusEngine.h b/bcos-pbft/bcos-pbft/core/ConsensusEngine.h new file mode 100644 index 0000000..742cdc7 --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/ConsensusEngine.h @@ -0,0 +1,87 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Base implementation for ConsensusEngine + * @file ConsensusEngine.cpp + * @author: yujiechen + * @date 2021-04-22 + */ +#pragma once +#include "../framework/ConsensusEngineInterface.h" +#include "Common.h" +#include + +namespace bcos +{ +namespace consensus +{ +class ConsensusEngine : public virtual ConsensusEngineInterface, public Worker +{ +public: + ConsensusEngine(std::string _name, unsigned _idleWaitMs) : Worker(_name, _idleWaitMs) {} + + ~ConsensusEngine() override { stop(); } + void start() override + { + if (m_started) + { + CONSENSUS_LOG(WARNING) << LOG_DESC("The consensusEngine has already been started"); + return; + } + CONSENSUS_LOG(INFO) << LOG_DESC("Start the consensusEngine"); + // start a thread to execute task + startWorking(); + m_started = true; + } + + void stop() override + { + if (m_started == false) + { + return; + } + CONSENSUS_LOG(INFO) << LOG_DESC("Stop consensusEngine"); + m_started = false; + finishWorker(); + if (isWorking()) + { + // stop the worker thread + stopWorking(); + terminate(); + } + CONSENSUS_LOG(INFO) << LOG_DESC("ConsensusEngine stopped"); + } + + void workerProcessLoop() override + { + while (isWorking()) + { + try + { + executeWorker(); + } + catch (std::exception const& _e) + { + CONSENSUS_LOG(ERROR) << LOG_DESC("Process consensus task exception") + << LOG_KV("error", boost::diagnostic_information(_e)); + } + } + } + +protected: + std::atomic_bool m_started = {false}; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/Proposal.h b/bcos-pbft/bcos-pbft/core/Proposal.h new file mode 100644 index 0000000..caf2fdf --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/Proposal.h @@ -0,0 +1,156 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of Proposal + * @file Proposal.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include "bcos-pbft/core/proto/Consensus.pb.h" +#include "bcos-pbft/framework/ProposalInterface.h" +#include +#include + +namespace bcos +{ +namespace consensus +{ +const bcos::protocol::BlockNumber InvalidBlockNumber = -1; +class Proposal : virtual public ProposalInterface +{ +public: + using Ptr = std::shared_ptr; + Proposal() : m_rawProposal(std::make_shared()) {} + explicit Proposal(bytesConstRef _data) : Proposal() { decode(_data); } + explicit Proposal(std::shared_ptr _rawProposal) : m_rawProposal(_rawProposal) + { + deserializeObject(); + } + ~Proposal() override {} + + // the index of the proposal + bcos::protocol::BlockNumber index() const override { return m_rawProposal->index(); } + void setIndex(bcos::protocol::BlockNumber _index) override { m_rawProposal->set_index(_index); } + + // the hash of the proposal + bcos::crypto::HashType const& hash() const override { return m_hash; } + void setHash(bcos::crypto::HashType const& _hash) override + { + m_hash = _hash; + m_rawProposal->set_hash(_hash.data(), bcos::crypto::HashType::SIZE); + } + // the payload of the proposal + bcos::bytesConstRef data() const override + { + auto const& data = m_rawProposal->data(); + return bcos::bytesConstRef((byte const*)data.c_str(), data.size()); + } + void setData(bytes const& _data) override + { + m_rawProposal->set_data(_data.data(), _data.size()); + } + + void setData(bytes&& _data) override + { + auto size = _data.size(); + m_rawProposal->set_data(std::move(_data).data(), size); + } + + void setData(bcos::bytesConstRef _data) override + { + m_rawProposal->set_data(_data.data(), _data.size()); + } + + bytesConstRef extraData() const override + { + auto const& extraData = m_rawProposal->extradata(); + return bytesConstRef((byte const*)extraData.data(), extraData.size()); + } + void setExtraData(bytes const& _data) override + { + m_rawProposal->set_extradata(_data.data(), _data.size()); + } + + void setExtraData(bytes&& _data) override + { + auto dataSize = _data.size(); + m_rawProposal->set_extradata(std::move(_data).data(), dataSize); + } + void setExtraData(bcos::bytesConstRef _data) override + { + m_rawProposal->set_extradata(_data.data(), _data.size()); + } + + bytesConstRef signature() const override + { + auto const& signature = m_rawProposal->signature(); + return bcos::bytesConstRef((byte const*)signature.c_str(), signature.size()); + } + + void setSignature(bytes const& _data) override + { + m_rawProposal->set_signature(_data.data(), _data.size()); + } + + bool operator==(Proposal const _proposal) const + { + return _proposal.index() == index() && _proposal.hash() == hash() && + _proposal.data().toBytes() == data().toBytes(); + } + bool operator!=(Proposal const _proposal) const { return !(operator==(_proposal)); } + + std::shared_ptr rawProposal() { return m_rawProposal; } + + bytesPointer encode() const override { return bcos::protocol::encodePBObject(m_rawProposal); } + void decode(bytesConstRef _data) override + { + bcos::protocol::decodePBObject(m_rawProposal, _data); + deserializeObject(); + } + + void setSealerId(int64_t _sealerId) override { m_rawProposal->set_sealerid(_sealerId); } + + int64_t sealerId() override { return m_rawProposal->sealerid(); } + + bool systemProposal() const override { return m_rawProposal->systemproposal(); } + void setSystemProposal(bool _systemProposal) override + { + m_rawProposal->set_systemproposal(_systemProposal); + } + +protected: + void setRawProposal(std::shared_ptr _rawProposal) + { + m_rawProposal = _rawProposal; + deserializeObject(); + } + virtual void deserializeObject() + { + auto const& hashData = m_rawProposal->hash(); + if (hashData.size() < bcos::crypto::HashType::SIZE) + { + return; + } + m_hash = + bcos::crypto::HashType((byte const*)hashData.c_str(), bcos::crypto::HashType::SIZE); + } + +protected: + std::shared_ptr m_rawProposal; + bcos::crypto::HashType m_hash; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/StateMachine.cpp b/bcos-pbft/bcos-pbft/core/StateMachine.cpp new file mode 100644 index 0000000..870219d --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/StateMachine.cpp @@ -0,0 +1,182 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief state machine to execute the transactions + * @file StateMachine.cpp + * @author: yujiechen + * @date 2021-05-18 + */ +#include "StateMachine.h" +#include "Common.h" + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::crypto; + +void StateMachine::asyncApply(ssize_t _timeout, ProposalInterface::ConstPtr _lastAppliedProposal, + ProposalInterface::Ptr _proposal, ProposalInterface::Ptr _executedProposal, + std::function _onExecuteFinished) +{ + auto self = weak_from_this(); + // Note: async here to increase performance + m_worker->enqueue( + [self, _timeout, _lastAppliedProposal, _proposal, _executedProposal, _onExecuteFinished]() { + auto stateMachine = self.lock(); + if (!stateMachine) + { + return; + } + stateMachine->apply( + _timeout, _lastAppliedProposal, _proposal, _executedProposal, _onExecuteFinished); + }); +} + +void StateMachine::asyncPreApply( + ProposalInterface::Ptr _proposal, std::function _onPreApplyFinished) +{ + // TODO: deal with preexec and exec, fix txpool + preApply(std::move(_proposal), std::move(_onPreApplyFinished)); +} + +void StateMachine::apply(ssize_t, ProposalInterface::ConstPtr _lastAppliedProposal, + ProposalInterface::Ptr _proposal, ProposalInterface::Ptr _executedProposal, + std::function _onExecuteFinished) +{ + if (_proposal->index() <= _lastAppliedProposal->index()) + { + CONSENSUS_LOG(WARNING) << LOG_DESC("asyncApply: the proposal has already been applied") + << LOG_KV("proposalIndex", _proposal->index()) + << LOG_KV("lastAppliedProposal", _lastAppliedProposal->index()); + if (_onExecuteFinished) + { + _onExecuteFinished(-1); + } + return; + } + auto block = m_blockFactory->createBlock(_proposal->data()); + // invalid block + auto blockHeader = block->blockHeader(); + if (!blockHeader) + { + if (_onExecuteFinished) + { + _onExecuteFinished(-1); + } + return; + } + // set the parentHash information + if (_proposal->index() == _lastAppliedProposal->index() + 1) + { + ParentInfoList parentInfoList; + ParentInfo parentInfo{_lastAppliedProposal->index(), _lastAppliedProposal->hash()}; + parentInfoList.push_back(parentInfo); + blockHeader->setParentInfo(parentInfoList); + CONSENSUS_LOG(DEBUG) << LOG_DESC("setParentInfo for the proposal") + << LOG_KV("proposalIndex", _proposal->index()) + << LOG_KV("lastAppliedProposal", _lastAppliedProposal->index()) + << LOG_KV("parentHash", _lastAppliedProposal->hash().abridged()); + } + else + { + CONSENSUS_LOG(FATAL) << LOG_DESC("invalid lastAppliedProposal") + << LOG_KV("lastAppliedIndex", _lastAppliedProposal->index()) + << LOG_KV("proposal", _proposal->index()); + } + blockHeader->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + + // calls dispatcher to execute the block + auto startT = utcTime(); + m_scheduler->executeBlock(block, false, + [startT, block, _onExecuteFinished, _proposal, _executedProposal]( + Error::Ptr&& _error, BlockHeader::Ptr&& _blockHeader, bool _sysBlock) { + if (!_onExecuteFinished) + { + return; + } + auto blockHeader = block->blockHeader(); + if (_error != nullptr) + { + CONSENSUS_LOG(WARNING) << LOG_DESC("asyncExecuteBlock failed") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorInfo", _error->errorMessage()); + _onExecuteFinished(_error->errorCode()); + return; + } + auto execT = (double)(utcTime() - startT) / (double)(block->transactionsHashSize()); + CONSENSUS_LOG(INFO) << METRIC << LOG_DESC("asyncExecuteBlock success") + << LOG_KV("sysBlock", _sysBlock) + << LOG_KV("number", _blockHeader->number()) + << LOG_KV("result", _blockHeader->hash().abridged()) + << LOG_KV("txsSize", block->transactionsHashSize()) + << LOG_KV("txsRoot", _blockHeader->txsRoot().abridged()) + << LOG_KV("receiptsRoot", _blockHeader->receiptsRoot().abridged()) + << LOG_KV("stateRoot", _blockHeader->stateRoot().abridged()) + << LOG_KV("timeCost", (utcTime() - startT)) + << LOG_KV("execPerTx", execT); + if (_blockHeader->number() != blockHeader->number()) + { + CONSENSUS_LOG(WARNING) << LOG_DESC("asyncExecuteBlock exception") + << LOG_KV("expectedNumber", blockHeader->number()) + << LOG_KV("number", _blockHeader->number()) + << LOG_KV("timeCost", (utcTime() - startT)); + return; + } + _executedProposal->setIndex(_blockHeader->number()); + _executedProposal->setHash(_blockHeader->hash()); + + bcos::bytes blockHeaderBuffer; + _blockHeader->encode(blockHeaderBuffer); + _executedProposal->setData(std::move(blockHeaderBuffer)); + // the transactions hash list + _executedProposal->setExtraData(_proposal->data()); + // The _onExecuteFinished callback itself does the asynchronous logic, so there is no + // need to use m_worker to re-synchronize it here. + _onExecuteFinished(0); + }); +} + +void StateMachine::preApply( + ProposalInterface::Ptr _proposal, std::function _onPreApplyFinished) +{ + auto block = m_blockFactory->createBlock(_proposal->data()); + + auto startT = utcTime(); + m_scheduler->preExecuteBlock(block, false, + [block, startT, _onPreApplyFinished = std::move(_onPreApplyFinished)](Error::Ptr&& error) { + if (!error) + { + CONSENSUS_LOG(DEBUG) + << LOG_BADGE("prepareBlockExecutive") << LOG_DESC("preApply") + << LOG_KV("blockNumber", block->blockHeaderConst()->number()) + << LOG_KV("blockHeader.timestamps", block->blockHeaderConst()->timestamp()) + << LOG_KV("timeCost", (utcTime() - startT)); + _onPreApplyFinished(true); + } + else + { + CONSENSUS_LOG(ERROR) + << LOG_BADGE("prepareBlockExecutive") << LOG_DESC("preApply failed!") + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()) + << LOG_KV("message", error->errorMessage()) + << LOG_KV("blockNumber", block->blockHeaderConst()->number()) + << LOG_KV("blockHeader.timestamps", block->blockHeaderConst()->timestamp()) + << LOG_KV("timeCost", (utcTime() - startT)); + _onPreApplyFinished(false); + } + }); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/StateMachine.h b/bcos-pbft/bcos-pbft/core/StateMachine.h new file mode 100644 index 0000000..b0ad524 --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/StateMachine.h @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief state machine to execute the transactions + * @file StateMachine.h + * @author: yujiechen + * @date 2021-05-18 + */ +#pragma once +#include "../framework/StateMachineInterface.h" +#include +#include +#include + +#include +namespace bcos +{ +namespace consensus +{ +class StateMachine : public StateMachineInterface, public std::enable_shared_from_this +{ +public: + StateMachine(bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::protocol::BlockFactory::Ptr _blockFactory) + : m_scheduler(std::move(_scheduler)), m_blockFactory(std::move(_blockFactory)) + { + // since execute block is serial, only use one thread to decrease the timecost + m_worker = std::make_shared("stateMachine", 1); + } + + ~StateMachine() override + { + if (m_worker) + { + m_worker->stop(); + } + } + + void asyncApply(ssize_t _execTimeout, ProposalInterface::ConstPtr _lastAppliedProposal, + ProposalInterface::Ptr _proposal, ProposalInterface::Ptr _executedProposal, + std::function _onExecuteFinished) override; + + void asyncPreApply( + ProposalInterface::Ptr _proposal, std::function _onPreApplyFinished) override; + +private: + void apply(ssize_t _execTimeout, ProposalInterface::ConstPtr _lastAppliedProposal, + ProposalInterface::Ptr _proposal, ProposalInterface::Ptr _executedProposal, + std::function _onExecuteFinished); + + void preApply(ProposalInterface::Ptr _proposal, std::function _onPreApplyFinished); + +protected: + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::ThreadPool::Ptr m_worker; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/core/proto/Consensus.proto b/bcos-pbft/bcos-pbft/core/proto/Consensus.proto new file mode 100644 index 0000000..2bf634d --- /dev/null +++ b/bcos-pbft/bcos-pbft/core/proto/Consensus.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package bcos.consensus; +message RawProposal +{ + // the index of the proposal + int64 index = 1; + // the hash of the proposal + bytes hash = 2; + // the proposal data, optional + bytes data = 3; + // the proposal signature, optional + bytes signature = 4; + bytes extraData = 5; + int64 sealerId = 6; + bool systemProposal = 7; +}; \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/framework/ConsensusConfigInterface.h b/bcos-pbft/bcos-pbft/framework/ConsensusConfigInterface.h new file mode 100644 index 0000000..cfbb836 --- /dev/null +++ b/bcos-pbft/bcos-pbft/framework/ConsensusConfigInterface.h @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Consensus Config + * @file ConsensusConfigInterface.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include "ProposalInterface.h" +#include +#include +namespace bcos::consensus +{ +class ConsensusConfigInterface +{ +public: + using Ptr = std::shared_ptr; + ConsensusConfigInterface() = default; + virtual ~ConsensusConfigInterface() = default; + + // the NodeID of the consensus node + virtual bcos::crypto::PublicPtr nodeID() const = 0; + // the nodeIndex of this node + virtual IndexType nodeIndex() const = 0; + + // the sealer list + virtual ConsensusNodeList consensusNodeList() const = 0; + virtual bcos::crypto::NodeIDs consensusNodeIDList(bool _excludeSelf = true) const = 0; + virtual bool isConsensusNode() const = 0; + + // the consensus timeout + virtual uint64_t consensusTimeout() const = 0; + + // the min valid quorum before agree on a round of consensus + virtual uint64_t minRequiredQuorum() const = 0; + + virtual void setConsensusNodeList(ConsensusNodeList& _sealerList) = 0; + virtual void setConsensusTimeout(uint64_t _consensusTimeout) = 0; + + virtual void setCommittedProposal(ProposalInterface::Ptr _committedProposal) = 0; + virtual ProposalInterface::ConstPtr committedProposal() = 0; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/framework/ConsensusEngineInterface.h b/bcos-pbft/bcos-pbft/framework/ConsensusEngineInterface.h new file mode 100644 index 0000000..8c65de7 --- /dev/null +++ b/bcos-pbft/bcos-pbft/framework/ConsensusEngineInterface.h @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for Consensus Engine + * @file ConsensusEngineInterface.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include "ConsensusConfigInterface.h" +namespace bcos +{ +namespace consensus +{ +class ConsensusEngineInterface +{ +public: + using Ptr = std::shared_ptr; + ConsensusEngineInterface() = default; + virtual ~ConsensusEngineInterface() {} + + // start the consensus engine + virtual void start() = 0; + // stop the consensus engine + virtual void stop() = 0; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/framework/ProposalInterface.h b/bcos-pbft/bcos-pbft/framework/ProposalInterface.h new file mode 100644 index 0000000..b2d6f3a --- /dev/null +++ b/bcos-pbft/bcos-pbft/framework/ProposalInterface.h @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the proposal information + * @file ProposalInterface.h + * @author: yujiechen + * @date 2021-04-09 + */ +#pragma once +#include +namespace bcos +{ +namespace consensus +{ +class ProposalInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + ProposalInterface() = default; + virtual ~ProposalInterface() = default; + + virtual bytesPointer encode() const = 0; + virtual void decode(bytesConstRef _data) = 0; + + // the index of the proposal + virtual bcos::protocol::BlockNumber index() const = 0; + virtual void setIndex(bcos::protocol::BlockNumber _index) = 0; + + // the hash of the proposal + virtual bcos::crypto::HashType const& hash() const = 0; + virtual void setHash(bcos::crypto::HashType const& _hash) = 0; + // the data of the proposal + virtual bcos::bytesConstRef data() const = 0; + virtual void setData(bytes const& _data) = 0; + virtual void setData(bytes&& _data) = 0; + virtual void setData(bcos::bytesConstRef _data) = 0; + + // the extra data of the proposal + virtual bcos::bytesConstRef extraData() const = 0; + virtual void setExtraData(bytes const& _data) = 0; + virtual void setExtraData(bytes&& _data) = 0; + virtual void setExtraData(bcos::bytesConstRef _data) = 0; + + // the sealerId + virtual void setSealerId(int64_t _sealerId) = 0; + virtual int64_t sealerId() = 0; + + // the signature to the proposal(optional) + virtual bytesConstRef signature() const = 0; + virtual void setSignature(bytes const& _signature) = 0; + + // the proposal type + virtual bool systemProposal() const = 0; + virtual void setSystemProposal(bool _systemProposal) = 0; +}; +using ProposalList = std::vector; +using ProposalListPtr = std::shared_ptr; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/framework/StateMachineInterface.h b/bcos-pbft/bcos-pbft/framework/StateMachineInterface.h new file mode 100644 index 0000000..d7940cd --- /dev/null +++ b/bcos-pbft/bcos-pbft/framework/StateMachineInterface.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for the state machine to execute the transactions + * @file StateMachineInterface.h + * @author: yujiechen + * @date 2021-05-18 + */ +#pragma once +#include "ProposalInterface.h" +#include +namespace bcos::consensus +{ +class StateMachineInterface +{ +public: + using Ptr = std::shared_ptr; + StateMachineInterface() = default; + virtual ~StateMachineInterface() = default; + + virtual void asyncApply(ssize_t _execTimeout, ProposalInterface::ConstPtr _lastAppliedProposal, + ProposalInterface::Ptr _proposal, ProposalInterface::Ptr _executedProposal, + std::function _onExecuteFinished) = 0; + + // (Not required): Just for performance, call this before "asyncApply" in the other thread. + virtual void asyncPreApply( + ProposalInterface::Ptr _proposal, std::function _onPreApplyFinished) = 0; +}; +} // namespace bcos::consensus diff --git a/bcos-pbft/bcos-pbft/pbft/PBFTFactory.cpp b/bcos-pbft/bcos-pbft/pbft/PBFTFactory.cpp new file mode 100644 index 0000000..38bcc48 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/PBFTFactory.cpp @@ -0,0 +1,82 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create the PBFTEngine + * @file PBFTFactory.cpp + * @author: yujiechen + * @date 2021-05-19 + */ +#include "PBFTFactory.h" +#include "bcos-pbft/core/StateMachine.h" +#include "engine/Validator.h" +#include "protocol/PB/PBFTCodec.h" +#include "protocol/PB/PBFTMessageFactoryImpl.h" +#include "storage/LedgerStorage.h" +#include "utilities/Common.h" +#include +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; + +PBFTFactory::PBFTFactory(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, + std::shared_ptr _frontService, + std::shared_ptr _storage, + std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, bcos::txpool::TxPoolInterface::Ptr _txpool, + bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory) + : m_cryptoSuite(std::move(_cryptoSuite)), + m_keyPair(std::move(_keyPair)), + m_frontService(std::move(_frontService)), + m_storage(std::move(_storage)), + m_ledger(std::move(_ledger)), + m_scheduler(std::move(_scheduler)), + m_txpool(std::move(_txpool)), + m_blockFactory(std::move(_blockFactory)), + m_txResultFactory(std::move(_txResultFactory)) +{} + +PBFTImpl::Ptr PBFTFactory::createPBFT() +{ + auto pbftMessageFactory = std::make_shared(); + PBFT_LOG(INFO) << LOG_DESC("create PBFTCodec"); + auto pbftCodec = std::make_shared(m_keyPair, m_cryptoSuite, pbftMessageFactory); + + PBFT_LOG(INFO) << LOG_DESC("create PBFT validator"); + auto validator = std::make_shared(m_txpool, m_blockFactory, m_txResultFactory); + + PBFT_LOG(DEBUG) << LOG_DESC("create StateMachine"); + auto stateMachine = std::make_shared(m_scheduler, m_blockFactory); + + PBFT_LOG(INFO) << LOG_DESC("create pbftStorage"); + auto pbftStorage = + std::make_shared(m_scheduler, m_storage, m_blockFactory, pbftMessageFactory); + + PBFT_LOG(INFO) << LOG_DESC("create pbftConfig"); + auto pbftConfig = std::make_shared(m_cryptoSuite, m_keyPair, pbftMessageFactory, + pbftCodec, validator, m_frontService, stateMachine, pbftStorage); + + PBFT_LOG(INFO) << LOG_DESC("create PBFTEngine"); + auto pbftEngine = std::make_shared(pbftConfig); + + PBFT_LOG(INFO) << LOG_DESC("create PBFT"); + auto ledgerFetcher = std::make_shared(m_ledger); + auto pbft = std::make_shared(pbftEngine); + pbft->setLedgerFetcher(ledgerFetcher); + return pbft; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/PBFTFactory.h b/bcos-pbft/bcos-pbft/pbft/PBFTFactory.h new file mode 100644 index 0000000..5c5b199 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/PBFTFactory.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create the PBFTEngine + * @file PBFTFactory.h + * @author: yujiechen + * @date 2021-05-19 + */ +#pragma once +#include "PBFTImpl.h" +#include "config/PBFTConfig.h" +#include +#include +#include +#include + +namespace bcos::consensus +{ +class PBFTFactory : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTFactory(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, + std::shared_ptr _frontService, + std::shared_ptr _storage, + std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::txpool::TxPoolInterface::Ptr _txpool, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory); + + virtual ~PBFTFactory() = default; + virtual PBFTImpl::Ptr createPBFT(); + +protected: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::crypto::KeyPairInterface::Ptr m_keyPair; + std::shared_ptr m_frontService; + std::shared_ptr m_storage; + std::shared_ptr m_ledger; + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/PBFTImpl.cpp b/bcos-pbft/bcos-pbft/pbft/PBFTImpl.cpp new file mode 100644 index 0000000..f01edac --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/PBFTImpl.cpp @@ -0,0 +1,190 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ConsensusInterface + * @file PBFTImpl.cpp + * @author: yujiechen + * @date 2021-05-17 + */ +#include "PBFTImpl.h" +#include +using namespace bcos; +using namespace bcos::consensus; + +void PBFTImpl::start() +{ + if (m_running) + { + PBFT_LOG(INFO) << LOG_DESC("The PBFT module has already been started!"); + return; + } + m_running = true; + m_pbftEngine->start(); + PBFT_LOG(INFO) << LOG_DESC("Start the PBFT module."); +} + +void PBFTImpl::stop() +{ + if (!m_running) + { + PBFT_LOG(INFO) << LOG_DESC("The PBFT module has already been stopped!"); + return; + } + m_blockValidator->stop(); + m_pbftEngine->stop(); + m_running = false; + PBFT_LOG(INFO) << LOG_DESC("Stop the PBFT module."); +} + +void PBFTImpl::asyncSubmitProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) +{ + return m_pbftEngine->asyncSubmitProposal( + _containSysTxs, _proposalData, _proposalIndex, _proposalHash, _onProposalSubmitted); +} + +void PBFTImpl::asyncGetPBFTView(std::function _onGetView) +{ + auto view = m_pbftEngine->pbftConfig()->view(); + if (!_onGetView) + { + return; + } + _onGetView(nullptr, view); +} + +void PBFTImpl::asyncNotifyConsensusMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) +{ + m_pbftEngine->onReceivePBFTMessage(_error, _id, _nodeID, _data); + if (!_onRecv) + { + return; + } + _onRecv(nullptr); +} + +// the sync module calls this interface to check block +void PBFTImpl::asyncCheckBlock( + bcos::protocol::Block::Ptr _block, std::function _onVerifyFinish) +{ + m_blockValidator->asyncCheckBlock(_block, _onVerifyFinish); +} + +// the sync module calls this interface to notify new block +void PBFTImpl::asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) +{ + m_pbftEngine->asyncNotifyNewBlock(_ledgerConfig, _onRecv); +} + +void PBFTImpl::notifyHighestSyncingNumber(bcos::protocol::BlockNumber _blockNumber) +{ + m_pbftEngine->pbftConfig()->setSyncingHighestNumber(_blockNumber); +} + +void PBFTImpl::asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) +{ + m_pbftEngine->pbftConfig()->setUnSealedTxsSize(_unsealedTxsSize); + if (_onRecvResponse) + { + _onRecvResponse(nullptr); + } +} + +void PBFTImpl::init() +{ + auto config = m_pbftEngine->pbftConfig(); + config->validator()->init(); + m_pbftEngine->fetchAndUpdateLedgerConfig(); + PBFT_LOG(INFO) << LOG_DESC("init PBFT success"); +} + +void PBFTImpl::asyncGetConsensusStatus( + std::function _onGetConsensusStatus) +{ + auto config = m_pbftEngine->pbftConfig(); + Json::Value consensusStatus; + consensusStatus["nodeID"] = *toHexString(config->nodeID()->data()); + consensusStatus["index"] = (Json::UInt64)config->nodeIndex(); + consensusStatus["leaderIndex"] = (Json::UInt64)config->getLeader(); + consensusStatus["consensusNodesNum"] = (Json::UInt64)config->consensusNodesNum(); + consensusStatus["maxFaultyQuorum"] = (Json::UInt64)config->maxFaultyQuorum(); + consensusStatus["minRequiredQuorum"] = (Json::UInt64)config->minRequiredQuorum(); + consensusStatus["isConsensusNode"] = config->isConsensusNode(); + consensusStatus["blockNumber"] = (Json::UInt64)config->committedProposal()->index(); + consensusStatus["hash"] = *toHexString(config->committedProposal()->hash()); + if (config->isConsensusNode()) + { + consensusStatus["timeout"] = config->timeout(); + } + else + { + consensusStatus["timeout"] = false; + } + consensusStatus["changeCycle"] = (Json::UInt64)config->timer()->changeCycle(); + consensusStatus["view"] = (Json::UInt64)config->view(); + consensusStatus["connectedNodeList"] = (Json::UInt64)((config->connectedNodeList()).size()); + + // print the nodeIndex of all other nodes + auto nodeList = config->consensusNodeList(); + Json::Value consensusNodeInfo(Json::arrayValue); + size_t i = 0; + for (auto const& node : nodeList) + { + Json::Value info; + info["nodeID"] = *toHexString(node->nodeID()->data()); + info["weight"] = (Json::UInt64)node->weight(); + info["index"] = (Json::Int64)(i); + consensusNodeInfo.append(info); + i++; + } + consensusStatus["consensusNodeList"] = consensusNodeInfo; + Json::FastWriter fastWriter; + std::string statusStr = fastWriter.write(consensusStatus); + _onGetConsensusStatus(nullptr, statusStr); +} + +void PBFTImpl::enableAsMasterNode(bool _isMasterNode) +{ + if (m_masterNode == _isMasterNode) + { + PBFT_LOG(INFO) << LOG_DESC("enableAsMasterNode: The masterNodeState is not changed") + << LOG_KV("master", _isMasterNode); + return; + } + if (!m_masterNode) + { + PBFT_LOG(INFO) << LOG_DESC( + "enableAsMasterNode: clearAllCache for the node switch into backup node"); + m_pbftEngine->clearAllCache(); + } + PBFT_LOG(INFO) << LOG_DESC("enableAsMasterNode: ") << _isMasterNode; + m_pbftEngine->pbftConfig()->enableAsMasterNode(_isMasterNode); + if (!_isMasterNode) + { + m_masterNode.store(_isMasterNode); + return; + } + PBFT_LOG(INFO) << LOG_DESC("enableAsMasterNode: init and start the consensus module"); + init(); + m_pbftEngine->recoverState(); + m_pbftEngine->restart(); + // only reset m_masterNode to true when init success + m_masterNode.store(_isMasterNode); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/PBFTImpl.h b/bcos-pbft/bcos-pbft/pbft/PBFTImpl.h new file mode 100644 index 0000000..36ef2a5 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/PBFTImpl.h @@ -0,0 +1,162 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ConsensusInterface + * @file PBFTImpl.h + * @author: yujiechen + * @date 2021-05-17 + */ +#pragma once +#include "engine/BlockValidator.h" +#include "engine/PBFTEngine.h" +#include + +#include +namespace bcos::consensus +{ +class PBFTImpl : public ConsensusInterface +{ +public: + using Ptr = std::shared_ptr; + explicit PBFTImpl(PBFTEngine::Ptr _pbftEngine) : m_pbftEngine(std::move(_pbftEngine)) + { + m_blockValidator = std::make_shared(m_pbftEngine->pbftConfig()); + } + ~PBFTImpl() override { stop(); } + + void start() override; + void stop() override; + + void asyncSubmitProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) override; + + void asyncGetPBFTView(std::function _onGetView) override; + + void asyncNotifyConsensusMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) override; + + // the sync module calls this interface to check block + void asyncCheckBlock(bcos::protocol::Block::Ptr _block, + std::function _onVerifyFinish) override; + + // the sync module calls this interface to notify new block + void asyncNotifyNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig, + std::function _onRecv) override; + + void notifyHighestSyncingNumber(bcos::protocol::BlockNumber _blockNumber) override; + void asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) override; + void setLedgerFetcher(bcos::tool::LedgerConfigFetcher::Ptr _ledgerFetcher) + { + m_pbftEngine->setLedgerFetcher(_ledgerFetcher); + } + PBFTEngine::Ptr pbftEngine() { return m_pbftEngine; } + + virtual void init(); + + // notify the sealer seal Proposal + void registerSealProposalNotifier( + std::function)> + _sealProposalNotifier) + { + m_pbftEngine->pbftConfig()->registerSealProposalNotifier(_sealProposalNotifier); + } + + // notify the sealer the latest blockNumber + void registerStateNotifier(std::function _stateNotifier) + { + m_pbftEngine->pbftConfig()->registerStateNotifier(_stateNotifier); + } + // the sync module notify the consensus module the new block + void registerNewBlockNotifier( + std::function)> + _newBlockNotifier) + { + m_pbftEngine->pbftConfig()->registerNewBlockNotifier(_newBlockNotifier); + } + + void registerFaultyDiscriminator( + std::function _faultyDiscriminator) + { + m_pbftEngine->pbftConfig()->registerFaultyDiscriminator(_faultyDiscriminator); + } + + // handler to notify the consensusing proposal index to the sync module + void registerCommittedProposalNotifier( + std::function)> + _committedProposalNotifier) + { + m_pbftEngine->registerCommittedProposalNotifier(_committedProposalNotifier); + } + + // handler to notify the sealer reset the sealing proposals + void registerSealerResetNotifier( + std::function)> _sealerResetNotifier) + { + m_pbftEngine->pbftConfig()->registerSealerResetNotifier(_sealerResetNotifier); + } + + // handler to broadcast empty-txs status and try to request txs from peers + void registerTxsStatusSyncHandler(std::function const& _txsStatusSyncHandler) + { + m_pbftEngine->pbftConfig()->registerTxsStatusSyncHandler(_txsStatusSyncHandler); + } + + ConsensusNodeList consensusNodeList() const override + { + return m_pbftEngine->pbftConfig()->consensusNodeList(); + } + uint64_t nodeIndex() const override { return m_pbftEngine->pbftConfig()->nodeIndex(); } + void asyncGetConsensusStatus( + std::function _onGetConsensusStatus) override; + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) override + { + m_pbftEngine->pbftConfig()->setConnectedNodeList(_connectedNodes); + if (_onResponse) + { + _onResponse(nullptr); + } + } + virtual void enableAsMasterNode(bool _isMasterNode); + + virtual bool masterNode() const { return m_masterNode.load(); } + + virtual void registerVersionInfoNotification( + std::function _versionNotification) + { + m_pbftEngine->pbftConfig()->registerVersionInfoNotification(_versionNotification); + } + + uint32_t compatibilityVersion() const override + { + return m_pbftEngine->pbftConfig()->compatibilityVersion(); + } + + void clearExceptionProposalState(bcos::protocol::BlockNumber _number) override + { + m_pbftEngine->clearExceptionProposalState(_number); + } + +protected: + PBFTEngine::Ptr m_pbftEngine; + BlockValidator::Ptr m_blockValidator; + std::atomic_bool m_running = {false}; + std::atomic_bool m_masterNode = {false}; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.cpp b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.cpp new file mode 100644 index 0000000..00edf11 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.cpp @@ -0,0 +1,393 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief cache for the consensus state of the proposal + * @file PBFTCache.cpp + * @author: yujiechen + * @date 2021-04-23 + */ +#include "PBFTCache.h" + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::crypto; + +PBFTCache::PBFTCache(PBFTConfig::Ptr _config, BlockNumber _index) + : m_config(std::move(_config)), m_index(_index) +{} + +void PBFTCache::onCheckPointTimeout() +{ + // Note: this logic is unreachable + if (!m_checkpointProposal) + { + return; + } + if (m_committedIndexNotifier && !m_config->timer()->running()) + { + m_committedIndexNotifier(m_config->committedProposal()->index()); + } + PBFT_LOG(WARNING) << LOG_DESC("onCheckPointTimeout: resend the checkpoint message package") + << LOG_KV("index", m_checkpointProposal->index()) + << LOG_KV("hash", m_checkpointProposal->hash().abridged()) + << m_config->printCurrentState(); + auto checkPointMsg = m_config->pbftMessageFactory()->populateFrom(PacketType::CheckPoint, + m_config->pbftMsgDefaultVersion(), m_config->view(), utcTime(), m_config->nodeIndex(), + m_checkpointProposal, m_config->cryptoSuite(), m_config->keyPair(), true); + auto encodedData = m_config->codec()->encode(checkPointMsg); + // only broadcast message to consensus node + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); +} + +bool PBFTCache::existPrePrepare(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + if (!m_prePrepare) + { + return false; + } + return (_prePrepareMsg->hash() == m_prePrepare->hash()) && + (m_prePrepare->view() >= _prePrepareMsg->view()); +} + +void PBFTCache::addCache(CollectionCacheType& _cachedReq, QuorumRecoderType& _weightInfo, + PBFTMessageInterface::Ptr _pbftCache) +{ + if (_pbftCache->index() != m_index) + { + return; + } + auto const& proposalHash = _pbftCache->hash(); + auto generatedFrom = _pbftCache->generatedFrom(); + if (_cachedReq.count(proposalHash) && _cachedReq[proposalHash].count(generatedFrom)) + { + return; + } + auto nodeInfo = m_config->getConsensusNodeByIndex(generatedFrom); + if (!nodeInfo) + { + return; + } + if (!_weightInfo.count(proposalHash)) + { + _weightInfo[proposalHash] = 0; + } + _weightInfo[proposalHash] += nodeInfo->weight(); + _cachedReq[proposalHash][generatedFrom] = _pbftCache; +} + +bool PBFTCache::conflictWithProcessedReq(PBFTMessageInterface::Ptr _msg) +{ + if (m_submitted || m_stableCommitted) + { + return true; + } + if (_msg->view() < m_config->view()) + { + return true; + } + if (!m_prePrepare) + { + return false; + } + // expired msg + if (_msg->view() < m_prePrepare->view()) + { + return true; + } + // conflict msg + if (_msg->view() == m_prePrepare->view()) + { + return (_msg->hash() != m_prePrepare->hash()); + } + return false; +} + +bool PBFTCache::checkPrePrepareProposalStatus() +{ + if (m_prePrepare == nullptr) + { + return false; + } + if (m_prePrepare->view() != m_config->view()) + { + return false; + } + return true; +} + +bool PBFTCache::collectEnoughQuorum( + bcos::crypto::HashType const& _hash, QuorumRecoderType& _weightInfo) +{ + if (!_weightInfo.count(_hash)) + { + return false; + } + return (_weightInfo[_hash] >= m_config->minRequiredQuorum()); +} + +bool PBFTCache::collectEnoughPrepareReq() +{ + if (!checkPrePrepareProposalStatus()) + { + return false; + } + return collectEnoughQuorum(m_prePrepare->hash(), m_prepareReqWeight); +} + +bool PBFTCache::collectEnoughCommitReq() +{ + if (!checkPrePrepareProposalStatus()) + { + return false; + } + return collectEnoughQuorum(m_prePrepare->hash(), m_commitReqWeight); +} + +void PBFTCache::intoPrecommit() +{ + m_precommit = m_prePrepare; + m_precommit->setGeneratedFrom(m_config->nodeIndex()); + setSignatureList(m_precommit->consensusProposal(), m_prepareCacheList); + + m_precommitWithoutData = m_precommit->populateWithoutProposal(); + auto precommitProposalWithoutData = + m_config->pbftMessageFactory()->populateFrom(m_precommit->consensusProposal(), false); + m_precommitWithoutData->setConsensusProposal(precommitProposalWithoutData); + PBFT_LOG(INFO) << LOG_DESC("intoPrecommit") << printPBFTMsgInfo(m_precommit) + << m_config->printCurrentState(); +} + +void PBFTCache::setSignatureList(PBFTProposalInterface::Ptr _proposal, CollectionCacheType& _cache) +{ + assert(_cache.count(_proposal->hash())); + _proposal->clearSignatureProof(); + for (auto const& it : _cache[_proposal->hash()]) + { + _proposal->appendSignatureProof(it.first, it.second->consensusProposal()->signature()); + } + PBFT_LOG(INFO) << LOG_DESC("setSignatureList") + << LOG_KV("signatureSize", _proposal->signatureProofSize()) + << printPBFTProposal(_proposal); +} + +bool PBFTCache::conflictWithPrecommitReq(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + if (!m_precommit) + { + return false; + } + if (m_precommit->index() < m_config->progressedIndex()) + { + return false; + } + if (_prePrepareMsg->index() == m_precommit->index() && + _prePrepareMsg->hash() != m_precommit->hash()) + { + PBFT_LOG(INFO) << LOG_DESC( + "the received pre-prepare msg is conflict with the preparedCache") + << printPBFTMsgInfo(_prePrepareMsg); + return true; + } + return false; +} + +bool PBFTCache::checkAndPreCommit() +{ + // already precommitted + if (m_precommitted) + { + return false; + } + if (!m_prePrepare) + { + return false; + } + // avoid to intoPrecommit when in timeout state + if (m_config->timeout()) + { + return false; + } + if (m_precommit && m_precommit->view() >= m_prePrepare->view()) + { + return false; + } + if (m_prePrepare && m_prePrepare->view() != m_config->view()) + { + return false; + } + if (!collectEnoughPrepareReq()) + { + return false; + } + // update and backup the proposal into precommit-status + intoPrecommit(); + // generate the commitReq + auto commitReq = m_config->pbftMessageFactory()->populateFrom(PacketType::CommitPacket, + m_config->pbftMsgDefaultVersion(), m_config->view(), utcTime(), m_config->nodeIndex(), + m_precommitWithoutData->consensusProposal(), m_config->cryptoSuite(), m_config->keyPair()); + // add the commitReq to local cache + addCommitCache(commitReq); + // broadcast the commitReq + PBFT_LOG(INFO) << LOG_DESC("checkAndPreCommit: broadcast commitMsg") + << LOG_KV("Idx", m_config->nodeIndex()) + << LOG_KV("hash", commitReq->hash().abridged()) + << LOG_KV("index", commitReq->index()); + auto encodedData = m_config->codec()->encode(commitReq, m_config->pbftMsgDefaultVersion()); + // only broadcast message to consensus nodes + //群发广播,后续删去 + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + m_precommitted = true; + // collect the commitReq and try to commit + //直接retutn m_precommitted就行。 + return checkAndCommit(); +} + +bool PBFTCache::checkAndCommit() +{ + // avoid to intoPrecommit when in timeout state + if (m_config->timeout()) + { + return false; + } + if (m_submitted) + { + return false; + } + // collect enough commit message before intoPrecommit + // can only into commit status when precommitted + if (!m_precommit) + { + return false; + } + if (m_precommit->view() != m_config->view()) + { + return false; + } + if (!collectEnoughCommitReq()) + { + return false; + } + PBFT_LOG(INFO) << LOG_DESC("checkAndCommit") + << printPBFTProposal(m_precommit->consensusProposal()) + << m_config->printCurrentState(); + m_submitted.store(true); + return true; +} + +bool PBFTCache::shouldStopTimer() +{ + if (m_index <= m_config->committedProposal()->index()) + { + return true; + } + return m_submitted; +} + +void PBFTCache::resetCache(ViewType _curView) +{ + m_submitted = false; + m_precommitted = false; + if (!m_precommit && m_prePrepare && m_prePrepare->consensusProposal() && + m_prePrepare->view() < _curView) + { + PBFT_LOG(INFO) << LOG_DESC("resetCache : asyncResetTxsFlag") + << printPBFTProposal(m_prePrepare->consensusProposal()); + // reset the sealingManager, in case of the same block has been sealed twice + m_config->notifyResetSealing(m_prePrepare->consensusProposal()->index()); + // reset the exceptioned txs to unsealed + m_config->validator()->asyncResetTxsFlag(m_prePrepare->consensusProposal()->data(), false); + m_prePrepare = nullptr; + } + // clear the expired prepare cache + resetCacheAfterViewChange(m_prepareCacheList, _curView); + // clear the expired commit cache + resetCacheAfterViewChange(m_commitCacheList, _curView); + + // recalculate m_prepareReqWeight + recalculateQuorum(m_prepareReqWeight, m_prepareCacheList); + // recalculate m_commitReqWeight + recalculateQuorum(m_commitReqWeight, m_commitCacheList); +} + +void PBFTCache::setCheckPointProposal(PBFTProposalInterface::Ptr _proposal) +{ + // expired checkpoint proposal + if (_proposal->index() <= m_config->committedProposal()->index()) + { + PBFT_LOG(WARNING) << LOG_DESC("setCheckPointProposal failed for expired checkpoint index") + << m_config->printCurrentState() << printPBFTProposal(_proposal); + return; + } + if (_proposal->index() != index()) + { + return; + } + m_checkpointProposal = _proposal; + PBFT_LOG(INFO) << LOG_DESC("setCheckPointProposal") << printPBFTProposal(m_checkpointProposal) + << m_config->printCurrentState(); +} + +bool PBFTCache::collectEnoughCheckpoint() +{ + if (!m_checkpointProposal) + { + return false; + } + return collectEnoughQuorum(m_checkpointProposal->hash(), m_checkpointCacheWeight); +} + +bool PBFTCache::checkAndCommitStableCheckPoint() +{ + if (m_stableCommitted) + { + return false; + } + // Before this proposal reach checkPoint consensus, + // it must be ensured that the dependent system transactions + // (such as transactions including dynamically addSealer/removeNode, setConsensusWeight, etc.) + // have been committed + auto committedIndex = m_config->committedProposal()->index(); + auto dependsProposal = std::min((m_index - 1), m_config->waitSealUntil()); + // wait for the sys-proposal committed to trigger checkAndCommitStableCheckPoint + if (committedIndex < dependsProposal) + { + return false; + } + if (committedIndex == dependsProposal) + { + recalculateQuorum(m_checkpointCacheWeight, m_checkpointCacheList); + } + if (!collectEnoughCheckpoint()) + { + return false; + } + setSignatureList(m_checkpointProposal, m_checkpointCacheList); + m_stableCommitted = true; + PBFT_LOG(INFO) << LOG_DESC("checkAndCommitStableCheckPoint") + << LOG_KV("index", m_checkpointProposal->index()) + << LOG_KV("hash", m_checkpointProposal->hash().abridged()) + << m_config->printCurrentState(); + if (m_config->committedProposal()->index() >= m_checkpointProposal->index()) + { + PBFT_LOG(WARNING) << LOG_DESC("checkAndCommitStableCheckPoint: expired checkpointProposal") + << LOG_KV("checkPointIndex", m_checkpointProposal->index()) + << m_config->printCurrentState(); + return false; + } + return true; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.h b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.h new file mode 100644 index 0000000..3fa9e19 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCache.h @@ -0,0 +1,222 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief cache for the consensus state of the proposal + * @file PBFTCache.h + * @author: yujiechen + * @date 2021-04-23 + */ +#pragma once +#include "../config/PBFTConfig.h" +#include "../interfaces/PBFTMessageInterface.h" + +namespace bcos::consensus +{ +class PBFTCache : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTCache(PBFTConfig::Ptr _config, bcos::protocol::BlockNumber _index); + virtual ~PBFTCache() = default; + bool existPrePrepare(PBFTMessageInterface::Ptr _prePrepareMsg); + bool conflictWithProcessedReq(PBFTMessageInterface::Ptr _msg); + bool conflictWithPrecommitReq(PBFTMessageInterface::Ptr _prePrepareMsg); + + virtual void addPrepareCache(PBFTMessageInterface::Ptr _prepareProposal) + { + addCache(m_prepareCacheList, m_prepareReqWeight, _prepareProposal); + PBFT_LOG(INFO) << LOG_DESC("addPrepareCache") << printPBFTMsgInfo(_prepareProposal) + << m_config->printCurrentState() + << LOG_KV("weight", m_prepareReqWeight[_prepareProposal->hash()]); + } + + virtual void addCommitCache(PBFTMessageInterface::Ptr _commitProposal) + { + addCache(m_commitCacheList, m_commitReqWeight, _commitProposal); + PBFT_LOG(INFO) << LOG_DESC("addCommitCache") << printPBFTMsgInfo(_commitProposal) + << m_config->printCurrentState() + << LOG_KV("weight", m_commitReqWeight[_commitProposal->hash()]); + } + + virtual void addPrePrepareCache(PBFTMessageInterface::Ptr _prePrepareMsg) + { + if (m_stableCommitted) + { + return; + } + if (m_checkpointProposal && m_prePrepare && + _prePrepareMsg->consensusProposal()->hash() != + m_prePrepare->consensusProposal()->hash()) + { + return; + } + m_prePrepare = _prePrepareMsg; + PBFT_LOG(INFO) << LOG_DESC("addPrePrepareCache") << printPBFTMsgInfo(_prePrepareMsg) + << LOG_KV("sys", _prePrepareMsg->consensusProposal()->systemProposal()) + << m_config->printCurrentState(); + } + + bcos::protocol::BlockNumber index() const { return m_index; } + + virtual PBFTMessageInterface::Ptr preCommitCache() { return m_precommit; } + // Note: only called when receive checkPoint-triggered-proposal response + virtual void setPrecommitCache(PBFTMessageInterface::Ptr _precommit) + { + PBFT_LOG(INFO) << LOG_DESC("setPrecommitCache") << printPBFTMsgInfo(_precommit); + m_precommit = _precommit; + m_precommitWithoutData = _precommit; + } + virtual PBFTMessageInterface::Ptr preCommitWithoutData() { return m_precommitWithoutData; } + virtual bool checkAndPreCommit(); + virtual bool checkAndCommit(); + virtual bool shouldStopTimer(); + // reset the cache after viewchange + virtual void resetCache(ViewType _curView); + + virtual void setCheckPointProposal(PBFTProposalInterface::Ptr _proposal); + PBFTProposalInterface::Ptr checkPointProposal() { return m_checkpointProposal; } + + virtual void addCheckPointMsg(PBFTMessageInterface::Ptr _checkPointMsg) + { + addCache(m_checkpointCacheList, m_checkpointCacheWeight, _checkPointMsg); + PBFT_LOG(INFO) << LOG_DESC("addCheckPointMsg") << printPBFTMsgInfo(_checkPointMsg) + << LOG_KV("Idx", m_config->nodeIndex()) + << LOG_KV("weight", m_checkpointCacheWeight[_checkPointMsg->hash()]) + << LOG_KV("minRequiredWeight", m_config->minRequiredQuorum()); + } + + virtual bool checkAndCommitStableCheckPoint(); + virtual void onCheckPointTimeout(); + bool stableCommitted() const { return m_stableCommitted; } + bool precommitted() const { return m_precommitted; } + + void registerCommittedIndexNotify( + std::function _committedIndexNotifier) + { + m_committedIndexNotifier = std::move(_committedIndexNotifier); + } + + uint64_t getCollectedCheckPointWeight(bcos::crypto::HashType const& _hash) + { + if (m_checkpointCacheWeight.count(_hash)) + { + return m_checkpointCacheWeight[_hash]; + } + return 0; + } + + void resetState() + { + m_stableCommitted.store(false); + m_submitted.store(false); + m_precommitted.store(false); + m_checkpointProposal = nullptr; + } + +protected: + bool checkPrePrepareProposalStatus(); + using CollectionCacheType = + std::map>; + using QuorumRecoderType = std::map; + void addCache(CollectionCacheType& _cachedReq, QuorumRecoderType& _weightInfo, + PBFTMessageInterface::Ptr _proposal); + bool collectEnoughQuorum(bcos::crypto::HashType const& _hash, QuorumRecoderType& _weightInfo); + + bool collectEnoughPrepareReq(); + bool collectEnoughCommitReq(); + bool collectEnoughCheckpoint(); + virtual void intoPrecommit(); + virtual void setSignatureList( + PBFTProposalInterface::Ptr _proposal, CollectionCacheType& _cache); + + template + void resetCacheAfterViewChange(T& _caches, ViewType _curView) + { + for (auto it = _caches.begin(); it != _caches.end();) + { + // Note: must use reference here, in case of erase nothing + auto& cache = it->second; + for (auto pcache = cache.begin(); pcache != cache.end();) + { + auto pbftMsg = pcache->second; + if (pbftMsg->view() < _curView) + { + pcache = cache.erase(pcache); + continue; + } + pcache++; + } + if (cache.size() == 0) + { + it = _caches.erase(it); + continue; + } + it++; + } + } + + template + void recalculateQuorum(QuorumRecoderType& _quorum, T const& _caches) + { + _quorum.clear(); + for (auto const& it : _caches) + { + auto hash = it.first; + if (!_quorum.count(hash)) + { + _quorum[hash] = 0; + } + auto const& cache = it.second; + for (auto pcache : cache) + { + auto generatedFrom = pcache.second->generatedFrom(); + auto nodeInfo = m_config->getConsensusNodeByIndex(generatedFrom); + if (!nodeInfo) + { + continue; + } + _quorum[hash] += nodeInfo->weight(); + } + } + } + +protected: + PBFTConfig::Ptr m_config; + // avoid submitting the same committed proposal multiple times + std::atomic_bool m_submitted = {false}; + // avoid submitting the same stable checkpoint multiple times + std::atomic_bool m_stableCommitted = {false}; + std::atomic_bool m_precommitted = {false}; + std::atomic m_index; + // prepareCacheList + CollectionCacheType m_prepareCacheList; + QuorumRecoderType m_prepareReqWeight; + + // commitCache + CollectionCacheType m_commitCacheList; + QuorumRecoderType m_commitReqWeight; + + PBFTMessageInterface::Ptr m_prePrepare = nullptr; + PBFTMessageInterface::Ptr m_precommit = nullptr; + PBFTMessageInterface::Ptr m_precommitWithoutData = nullptr; + + PBFTProposalInterface::Ptr m_checkpointProposal = nullptr; + + CollectionCacheType m_checkpointCacheList; + QuorumRecoderType m_checkpointCacheWeight; + + std::function m_committedIndexNotifier; +}; +} // namespace bcos::consensus diff --git a/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheFactory.h b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheFactory.h new file mode 100644 index 0000000..425fda6 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheFactory.h @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for PBFTCache + * @file PBFTCacheFactory.h + * @author: yujiechen + * @date 2021-06-01 + */ +#pragma once +#include "PBFTCache.h" +namespace bcos::consensus +{ +class PBFTCacheFactory +{ +public: + using Ptr = std::shared_ptr; + PBFTCacheFactory() = default; + virtual ~PBFTCacheFactory() {} + + virtual PBFTCache::Ptr createPBFTCache(PBFTConfig::Ptr _config, + bcos::protocol::BlockNumber _index, + std::function _committedIndexNotifier) + { + auto cache = std::make_shared(_config, _index); + cache->registerCommittedIndexNotify(_committedIndexNotifier); + return cache; + } +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.cpp b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.cpp new file mode 100644 index 0000000..2dc9182 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.cpp @@ -0,0 +1,1320 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief cache processor for the PBFTReq + * @file PBFTCacheProcessor.cpp + * @author: yujiechen + * @date 2021-04-21 + */ +#include "PBFTCacheProcessor.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::crypto; + +void PBFTCacheProcessor::tryToResendCheckPoint() +{ + for (auto const& cache : m_caches) + { + cache.second->onCheckPointTimeout(); + } +} + +void PBFTCacheProcessor::initState(PBFTProposalList const& _proposals, NodeIDPtr _fromNode) +{ + for (const auto& proposal : _proposals) + { + // the proposal has already been committed + if (proposal->index() <= m_config->committedProposal()->index()) + { + PBFT_LOG(DEBUG) << LOG_DESC("initState: skip committedProposal") + << LOG_KV("index", proposal->index()) + << LOG_KV("hash", proposal->hash().abridged()); + continue; + } + PBFT_LOG(DEBUG) << LOG_DESC("initState: apply committedProposal") + << LOG_KV("index", proposal->index()) + << LOG_KV("hash", proposal->hash().abridged()); + // set the txs status to be sealed + m_config->validator()->asyncResetTxsFlag(proposal->data(), true); + // try to verify and load the proposal + loadAndVerifyProposal(_fromNode, proposal); + } +} + +void PBFTCacheProcessor::loadAndVerifyProposal( + NodeIDPtr _fromNode, PBFTProposalInterface::Ptr _proposal, size_t _retryTime) +{ + if (_retryTime > 3) + { + return; + } + // Note: to fetch the remote proposal(the from node hits all transactions) + auto self = weak_from_this(); + m_config->validator()->verifyProposal(_fromNode, _proposal, + [self, _fromNode, _proposal, _retryTime](Error::Ptr _error, bool _verifyResult) { + try + { + auto cache = self.lock(); + if (!cache) + { + return; + } + if (_error && _error->errorCode() == bcos::protocol::CommonError::TIMEOUT) + { + PBFT_LOG(INFO) + << LOG_DESC("loadAndVerifyProposal failed for timeout, retry again") + << LOG_KV("msg", _error->errorMessage()); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + cache->loadAndVerifyProposal(_fromNode, _proposal, (_retryTime + 1)); + return; + } + auto config = cache->m_config; + if (_error || !_verifyResult) + { + auto waterMark = std::min(config->lowWaterMark(), _proposal->index() - 1); + waterMark = std::max(waterMark, config->progressedIndex()); + config->setLowWaterMark(waterMark); + PBFT_LOG(INFO) + << LOG_DESC("loadAndVerifyProposal failed") << printPBFTProposal(_proposal) + << LOG_KV("from", _fromNode->shortHex()) + << LOG_KV("code", _error ? _error->errorCode() : 0) + << LOG_KV("msg", _error ? _error->errorMessage() : "requestSent") + << LOG_KV("verifyRet", _verifyResult) + << LOG_KV("lowWaterMark", config->lowWaterMark()); + } + else + { + PBFT_LOG(INFO) + << LOG_DESC("loadAndVerifyProposal success") + << LOG_KV("from", _fromNode->shortHex()) << printPBFTProposal(_proposal); + } + cache->m_onLoadAndVerifyProposalFinish(_verifyResult, _error, _proposal); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("loadAndVerifyProposal exception") + << printPBFTProposal(_proposal) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} +// Note: please ensure the passed in _prePrepareMsg not be modified after addPrePrepareCache +void PBFTCacheProcessor::addPrePrepareCache(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + addCache(m_caches, _prePrepareMsg, + [](PBFTCache::Ptr _pbftCache, PBFTMessageInterface::Ptr proposal) { + _pbftCache->addPrePrepareCache(std::move(proposal)); + }); + // notify the consensusing proposal index to the sync module + notifyMaxProposalIndex(_prePrepareMsg->index()); +} + +void PBFTCacheProcessor::notifyMaxProposalIndex(bcos::protocol::BlockNumber _proposalIndex) +{ + // Note: should not notifyMaxProposalIndex when timeout-state, in-case of reset the + // committedProposalNumber of the sync-module with higher blockNumber than latest block, which + // will stop the node to syncing the latest block from other nodes + if (m_config->timeout()) + { + return; + } + // notify the consensusing proposal index to the sync module + if (m_maxNotifyIndex < _proposalIndex) + { + m_maxNotifyIndex = _proposalIndex; + notifyCommittedProposalIndex(m_maxNotifyIndex); + } +} + +bool PBFTCacheProcessor::existPrePrepare(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + if (!m_caches.contains(_prePrepareMsg->index())) + { + return false; + } + auto pbftCache = m_caches[_prePrepareMsg->index()]; + return pbftCache->existPrePrepare(_prePrepareMsg); +} + +bool PBFTCacheProcessor::tryToFillProposal(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + if (!m_caches.contains(_prePrepareMsg->index())) + { + return false; + } + auto pbftCache = m_caches[_prePrepareMsg->index()]; + auto precommit = pbftCache->preCommitCache(); + if (!precommit) + { + return false; + } + auto hit = (precommit->hash() == _prePrepareMsg->hash()) && + (precommit->index() == _prePrepareMsg->index()); + if (!hit) + { + return false; + } + auto proposalData = precommit->consensusProposal()->data(); + _prePrepareMsg->consensusProposal()->setData(proposalData); + return true; +} + +bool PBFTCacheProcessor::conflictWithProcessedReq(PBFTMessageInterface::Ptr _msg) +{ + if (!m_caches.contains(_msg->index())) + { + return false; + } + auto pbftCache = m_caches[_msg->index()]; + return pbftCache->conflictWithProcessedReq(_msg); +} + +bool PBFTCacheProcessor::conflictWithPrecommitReq(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + if (!m_caches.contains(_prePrepareMsg->index())) + { + return false; + } + auto pbftCache = m_caches[_prePrepareMsg->index()]; + return pbftCache->conflictWithPrecommitReq(_prePrepareMsg); +} + +void PBFTCacheProcessor::addCache( + PBFTCachesType& _pbftCache, PBFTMessageInterface::Ptr _pbftReq, UpdateCacheHandler _handler) + +{ + auto index = _pbftReq->index(); + if (!_pbftCache.contains(index)) + { + _pbftCache[index] = m_cacheFactory->createPBFTCache(m_config, index, + boost::bind( + &PBFTCacheProcessor::notifyCommittedProposalIndex, this, boost::placeholders::_1)); + } + _handler(_pbftCache[index], _pbftReq); +} + +void PBFTCacheProcessor::checkAndPreCommit() +{ + //使用区块号对应的cache指针进行precommit检查, + // 然后广播precommit消息 + for (auto const& cache : m_caches) + { + auto ret = cache.second->checkAndPreCommit(); + if (!ret) + { + continue; + } + updateCommitQueue(cache.second->preCommitCache()->consensusProposal()); + // refresh the timer when commit success + m_config->timer()->restart(); + m_config->resetToView(); + } + resetTimer(); +} + +void PBFTCacheProcessor::checkAndCommit() +{ + //这里直接return就行,原因是,直接跳过commit阶段 + //return ; + for (auto const& cache : m_caches) + { + auto ret = cache.second->checkAndCommit(); + if (!ret) + { + continue; + } + updateCommitQueue(cache.second->preCommitCache()->consensusProposal()); + // refresh the timer when commit success + m_config->timer()->restart(); + m_config->resetToView(); + } + resetTimer(); +} + +void PBFTCacheProcessor::resetTimer() +{ + for (auto const& cache : m_caches) + { + if (!cache.second->shouldStopTimer()) + { + // start the timer when there has proposals in consensus + if (!m_config->timer()->running()) + { + m_config->timer()->start(); + } + return; + } + } + // reset the timer when has no proposals in consensus + m_config->freshTimer(); + m_config->tryTriggerFastViewChange(m_config->getLeader()); +} + +void PBFTCacheProcessor::updateCommitQueue(PBFTProposalInterface::Ptr _committedProposal) +{ + assert(_committedProposal); + if (m_executingProposals.contains(_committedProposal->hash())) + { + return; + } + // the proposal has already been committed + //如果这个交易已经执行了,就直接返回 + auto proposalIndex = _committedProposal->index(); + if (proposalIndex <= m_config->committedProposal()->index()) + { + return; + } + notifyMaxProposalIndex(proposalIndex); + //这一段是提交到commit队列,相当于一个proposal,为后面变更状态机使用 + m_committedQueue.push(_committedProposal); + m_committedProposalList.insert(proposalIndex); + m_proposalsToStableConsensus.insert(proposalIndex); + PBFT_LOG(INFO) << LOG_DESC("######## CommitProposal") << printPBFTProposal(_committedProposal) + << LOG_KV("sys", _committedProposal->systemProposal()) + << m_config->printCurrentState(); + if (_committedProposal->systemProposal()) + { + m_config->setWaitSealUntil(proposalIndex); + PBFT_LOG(INFO) << LOG_DESC( + "Receive valid system prePrepare proposal, stop to notify sealing") + << LOG_KV("waitSealUntil", proposalIndex); + } + // Note: should notify to seal nextBlock after waitSealUntil setted, in case of the system + // proposals are generated and committed not by serial + notifyToSealNextBlock(); + //预提交状态机 + tryToPreApplyProposal(_committedProposal); // will query scheduler to encode message and fill + // txbytes in blocks + tryToApplyCommitQueue(); +} + +void PBFTCacheProcessor::notifyCommittedProposalIndex(bcos::protocol::BlockNumber _index) +{ + if (!m_committedProposalNotifier) + { + return; + } + m_committedProposalNotifier(_index, [_index](Error::Ptr _error) { + if (!_error) + { + PBFT_LOG(INFO) << LOG_DESC( + "notify the committed proposal index to the sync module success") + << LOG_KV("index", _index); + return; + } + PBFT_LOG(WARNING) << LOG_DESC( + "notify the committed proposal index to the sync module failed") + << LOG_KV("index", _index); + }); +} + +ProposalInterface::ConstPtr PBFTCacheProcessor::getAppliedCheckPointProposal( + bcos::protocol::BlockNumber _index) +{ + if (_index == m_config->committedProposal()->index()) + { + return m_config->committedProposal(); + } + + if (!m_caches.contains(_index)) + { + return nullptr; + } + return (m_caches[_index])->checkPointProposal(); +} + +bool PBFTCacheProcessor::tryToPreApplyProposal(ProposalInterface::Ptr _proposal) +{ + m_config->stateMachine()->asyncPreApply( + std::move(_proposal), [](bool success) { (void)success; }); + + return true; +} + +bool PBFTCacheProcessor::tryToApplyCommitQueue() +{ + notifyToSealNextBlock(); + while (!m_committedQueue.empty() && + m_committedQueue.top()->index() < m_config->expectedCheckPoint()) + { + PBFT_LOG(INFO) << LOG_DESC("updateCommitQueue: remove invalid proposal") + << LOG_KV("index", m_committedQueue.top()->index()) + << LOG_KV("expectedIndex", m_config->expectedCheckPoint()) + << m_config->printCurrentState(); + m_committedQueue.pop(); + } + // try to execute the proposal + if (!m_committedQueue.empty() && + m_committedQueue.top()->index() == m_config->expectedCheckPoint()) + { + auto committedIndex = m_config->committedProposal()->index(); + // must wait for the sys-proposal committed to execute new proposal + auto dependsProposal = + std::min((m_config->expectedCheckPoint() - 1), m_config->waitSealUntil()); + // enforce to serial execute if the system-proposal not committed + if (committedIndex < dependsProposal) + { + return false; + } + auto proposal = m_committedQueue.top(); + auto lastAppliedProposal = getAppliedCheckPointProposal(m_config->expectedCheckPoint() - 1); + if (!lastAppliedProposal) + { + PBFT_LOG(WARNING) << LOG_DESC("The last proposal has not been applied") + << m_config->printCurrentState(); + return false; + } + if (m_executingProposals.contains(proposal->hash())) + { + m_config->timer()->restart(); + PBFT_LOG(INFO) << LOG_DESC("the proposal is executing, not executed again") + << LOG_KV("index", proposal->index()) + << LOG_KV("hash", proposal->hash().abridged()) + << m_config->printCurrentState(); + return false; + } + // commit the proposal + m_committedQueue.pop(); + // in case of the same block execute more than once + m_executingProposals[proposal->hash()] = proposal->index(); + //真正意义上的变更状态机 + applyStateMachine(lastAppliedProposal, proposal); + return true; + } + return false; +} + +void PBFTCacheProcessor::notifyToSealNextBlock() +{ + // find the non-consecutive minimum proposal index and notify the corresponding leader to pack + // the block + auto committedIndex = m_config->committedProposal()->index(); + bcos::protocol::BlockNumber lastIndex = committedIndex; + for (auto const& proposalIndex : m_proposalsToStableConsensus) + { + if (proposalIndex <= committedIndex) + { + lastIndex = proposalIndex; + continue; + } + if (lastIndex + 1 < proposalIndex) + { + break; + } + lastIndex = proposalIndex; + } + auto nextProposalIndex = std::max(lastIndex + 1, committedIndex + 1); + m_config->notifySealer(nextProposalIndex); + PBFT_LOG(INFO) << LOG_DESC("notify to seal next proposal") + << LOG_KV("nextProposalIndex", nextProposalIndex); +} + +// execute the proposal and broadcast checkpoint message +void PBFTCacheProcessor::applyStateMachine( + ProposalInterface::ConstPtr _lastAppliedProposal, PBFTProposalInterface::Ptr _proposal) +{ + PBFT_LOG(INFO) << LOG_DESC("applyStateMachine") << LOG_KV("index", _proposal->index()) + << LOG_KV("hash", _proposal->hash().abridged()) << m_config->printCurrentState() + << LOG_KV("unAppliedProposals", m_committedQueue.size()); + auto executedProposal = m_config->pbftMessageFactory()->createPBFTProposal(); + auto self = weak_from_this(); + auto startT = utcTime(); + m_config->stateMachine()->asyncApply(m_config->timer()->timeout(), + std::move(_lastAppliedProposal), _proposal, executedProposal, + [self, startT, _proposal, executedProposal](int64_t _ret) { + try + { + auto cache = self.lock(); + if (!cache) + { + return; + } + auto config = cache->m_config; + if (config->committedProposal()->index() >= _proposal->index()) + { + PBFT_LOG(WARNING) + << LOG_DESC("applyStateMachine: give up the proposal for expired") + << config->printCurrentState() + << LOG_KV("beforeExec", _proposal->hash().abridged()) + << LOG_KV("afterExec", executedProposal->hash().abridged()) + << LOG_KV("timecost", utcTime() - startT); + return; + } + if (cache->m_proposalAppliedHandler) + { + cache->m_proposalAppliedHandler(_ret, _proposal, executedProposal); + } + PBFT_LOG(INFO) << LOG_DESC("applyStateMachine finished") + << LOG_KV("index", _proposal->index()) + << LOG_KV("beforeExec", _proposal->hash().abridged()) + << LOG_KV("afterExec", executedProposal->hash().abridged()) + << config->printCurrentState() + << LOG_KV("timecost", utcTime() - startT); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("applyStateMachine failed") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void PBFTCacheProcessor::setCheckPointProposal(PBFTProposalInterface::Ptr _proposal) +{ + auto index = _proposal->index(); + if (!m_caches.contains(index)) + { + // Note: since cache is created and freed frequently, it should be safer to use weak_ptr in + // the callback + auto self = weak_from_this(); + m_caches[index] = m_cacheFactory->createPBFTCache( + m_config, index, [self](bcos::protocol::BlockNumber _proposalIndex) { + try + { + auto cache = self.lock(); + if (!cache) + { + return; + } + cache->notifyCommittedProposalIndex(_proposalIndex); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("notifyCommittedProposalIndex error") + << LOG_KV("index", _proposalIndex) + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + }); + } + (m_caches[index])->setCheckPointProposal(_proposal); +} + +void PBFTCacheProcessor::addCheckPointMsg(PBFTMessageInterface::Ptr _checkPointMsg) +{ + addCache(m_caches, std::move(_checkPointMsg), + [](PBFTCache::Ptr _pbftCache, PBFTMessageInterface::Ptr _checkPointMsg) { + _pbftCache->addCheckPointMsg(std::move(_checkPointMsg)); + }); +} + +void PBFTCacheProcessor::addViewChangeReq(ViewChangeMsgInterface::Ptr _viewChange) +{ + auto reqView = _viewChange->view(); + auto fromIdx = _viewChange->generatedFrom(); + if (m_viewChangeCache.contains(reqView) && m_viewChangeCache[reqView].contains(fromIdx)) + { + return; + } + + auto nodeInfo = m_config->getConsensusNodeByIndex(fromIdx); + if (!nodeInfo) + { + return; + } + m_viewChangeCache[reqView][fromIdx] = _viewChange; + if (!m_viewChangeWeight.contains(reqView)) + { + m_viewChangeWeight[reqView] = 0; + } + m_viewChangeWeight[reqView] += nodeInfo->weight(); + auto committedIndex = _viewChange->committedProposal()->index(); + if (!m_maxCommittedIndex.contains(reqView) || m_maxCommittedIndex[reqView] < committedIndex) + { + m_maxCommittedIndex[reqView] = committedIndex; + } + // get the max precommitIndex + for (const auto& precommit : _viewChange->preparedProposals()) + { + auto precommitIndex = precommit->index(); + if (!m_maxPrecommitIndex.contains(reqView) || m_maxPrecommitIndex[reqView] < precommitIndex) + { + m_maxPrecommitIndex[reqView] = precommitIndex; + } + } + // print the prepared proposal info + std::stringstream preparedProposalInfo; + preparedProposalInfo << "preparedProposalInfo: "; + for (const auto& proposal : _viewChange->preparedProposals()) + { + preparedProposalInfo << LOG_KV("propIndex", proposal->index()) + << LOG_KV("propHash", proposal->hash().abridged()) + << LOG_KV("dataSize", proposal->consensusProposal()->data().size()); + } + PBFT_LOG(INFO) << LOG_DESC("addViewChangeReq") << printPBFTMsgInfo(_viewChange) + << LOG_KV("weight", m_viewChangeWeight[reqView]) + << LOG_KV("maxCommittedIndex", m_maxCommittedIndex[reqView]) + << LOG_KV("maxPrecommitIndex", m_maxPrecommitIndex[reqView]) + << LOG_DESC(preparedProposalInfo.str()) << m_config->printCurrentState(); +} + +PBFTMessageList PBFTCacheProcessor::generatePrePrepareMsg( + std::map _viewChangeCache) +{ + auto toView = m_config->toView(); + auto prePreparedIndex = m_config->committedProposal()->index(); + auto maxPreparedIndex = prePreparedIndex; + if (m_maxCommittedIndex.contains(toView)) + { + maxPreparedIndex = m_maxCommittedIndex[toView]; + } + auto maxPrecommitIndex = prePreparedIndex; + if (m_maxPrecommitIndex.contains(toView)) + { + maxPrecommitIndex = m_maxPrecommitIndex[toView]; + } + // should not handle the proposal future than the system proposal + if (m_config->waitSealUntil() > prePreparedIndex) + { + maxPrecommitIndex = std::min(m_config->waitSealUntil(), maxPrecommitIndex); + } + std::map preparedProposals; + for (const auto& it : _viewChangeCache) + { + auto viewChangeReq = it.second; + for (const auto& proposal : viewChangeReq->preparedProposals()) + { + // invalid precommit proposal + if (proposal->index() < maxPreparedIndex) + { + continue; + } + // repeated precommit proposal + if (preparedProposals.contains(proposal->index())) + { + auto precommitProposal = preparedProposals[proposal->index()]; + if (precommitProposal->index() != proposal->index() || + precommitProposal->hash() != proposal->hash()) + { + // fatal case: two proposals in the same view with different hash + if (precommitProposal->view() == proposal->view()) [[unlikely]] + { + PBFT_LOG(FATAL) + << LOG_DESC( + "generatePrePrepareMsg error: found conflict precommit " + "proposals") + << LOG_DESC("proposal already exist:") + << printPBFTProposal(precommitProposal) + << LOG_DESC("conflicted proposal:") << printPBFTProposal(proposal); + } + // newer precommit proposal + if (precommitProposal->view() < proposal->view()) + { + preparedProposals[proposal->index()] = proposal; + } + } + continue; + } + // new precommit proposal + preparedProposals[proposal->index()] = proposal; + proposal->setGeneratedFrom(viewChangeReq->generatedFrom()); + } + } + // generate prepareMsg from maxPreparedIndex to maxPrecommitIndex + PBFTMessageList prePrepareMsgList; + for (auto i = (maxPreparedIndex + 1); i <= maxPrecommitIndex; i++) + { + PBFTProposalInterface::Ptr prePrepareProposal = nullptr; + auto generatedFrom = m_config->nodeIndex(); + bool empty = false; + if (preparedProposals.contains(i)) + { + prePrepareProposal = preparedProposals[i]->consensusProposal(); + generatedFrom = preparedProposals[i]->generatedFrom(); + } + else + { + // empty prePrepare + prePrepareProposal = + m_config->validator()->generateEmptyProposal(m_config->compatibilityVersion(), + m_config->pbftMessageFactory(), i, m_config->nodeIndex()); + empty = true; + } + auto prePrepareMsg = m_config->pbftMessageFactory()->populateFrom( + PacketType::PrePreparePacket, prePrepareProposal, m_config->pbftMsgDefaultVersion(), + m_config->toView(), utcTime(), generatedFrom); + prePrepareMsgList.push_back(prePrepareMsg); + PBFT_LOG(INFO) << LOG_DESC("generatePrePrepareMsg,这是一个prepre生成过程,打印消息中:") << printPBFTMsgInfo(prePrepareMsg) + << LOG_KV("dataSize", prePrepareMsg->consensusProposal()->data().size()) + << LOG_KV("emptyProposal", empty); + } + PBFT_LOG(INFO) << LOG_DESC("当前prePrepareMsgListLength是什么") + << LOG_KV("prePrepareMsgListLength", prePrepareMsgList.size()); + + return prePrepareMsgList; +} + +PBFTMessageList PBFTCacheProcessor::generatePrePrepareMsg1( + std::map _viewChangeCache) +{ + auto toView = m_config->toView(); + auto committedIndex = m_config->committedProposal()->index(); + auto maxCommittedIndex = committedIndex; + if (m_maxCommittedIndex.contains(toView)) + { + maxCommittedIndex = m_maxCommittedIndex[toView]; + } + auto maxPrecommitIndex = committedIndex; + if (m_maxPrecommitIndex.contains(toView)) + { + maxPrecommitIndex = m_maxPrecommitIndex[toView]; + } + // should not handle the proposal future than the system proposal + if (m_config->waitSealUntil() > committedIndex) + { + maxPrecommitIndex = std::min(m_config->waitSealUntil(), maxPrecommitIndex); + } + std::map preparedProposals; + for (const auto& it : _viewChangeCache) + { + auto viewChangeReq = it.second; + for (const auto& proposal : viewChangeReq->preparedProposals()) + { + // invalid precommit proposal + if (proposal->index() < maxCommittedIndex) + { + continue; + } + // repeated precommit proposal + if (preparedProposals.contains(proposal->index())) + { + auto precommitProposal = preparedProposals[proposal->index()]; + if (precommitProposal->index() != proposal->index() || + precommitProposal->hash() != proposal->hash()) + { + // fatal case: two proposals in the same view with different hash + if (precommitProposal->view() == proposal->view()) + { + PBFT_LOG(FATAL) + << LOG_DESC( + "generatePrePrepareMsg error: found conflict precommit " + "proposals") + << LOG_DESC("proposal already exist:") + << printPBFTProposal(precommitProposal) + << LOG_DESC("conflicted proposal:") << printPBFTProposal(proposal); + } + // newer precommit proposal + if (precommitProposal->view() < proposal->view()) + { + preparedProposals[proposal->index()] = proposal; + } + } + continue; + } + // new precommit proposal + preparedProposals[proposal->index()] = proposal; + proposal->setGeneratedFrom(viewChangeReq->generatedFrom()); + } + } + // generate prepareMsg from maxCommittedIndex to maxPrecommitIndex + PBFTMessageList prePrepareMsgList; + for (auto i = (maxCommittedIndex + 1); i <= maxPrecommitIndex; i++) + { + PBFTProposalInterface::Ptr prePrepareProposal = nullptr; + auto generatedFrom = m_config->nodeIndex(); + bool empty = false; + if (preparedProposals.contains(i)) + { + prePrepareProposal = preparedProposals[i]->consensusProposal(); + generatedFrom = preparedProposals[i]->generatedFrom(); + } + else + { + // empty prePrepare + prePrepareProposal = + m_config->validator()->generateEmptyProposal(m_config->compatibilityVersion(), + m_config->pbftMessageFactory(), i, m_config->nodeIndex()); + empty = true; + } + auto prePrepareMsg = m_config->pbftMessageFactory()->populateFrom( + PacketType::PrePreparePacket, prePrepareProposal, m_config->pbftMsgDefaultVersion(), + m_config->toView(), utcTime(), generatedFrom); + prePrepareMsgList.push_back(prePrepareMsg); + PBFT_LOG(INFO) << LOG_DESC("generatePrePrepareMsg") << printPBFTMsgInfo(prePrepareMsg) + << LOG_KV("dataSize", prePrepareMsg->consensusProposal()->data().size()) + << LOG_KV("emptyProposal", empty); + } + return prePrepareMsgList; +} + +NewViewMsgInterface::Ptr PBFTCacheProcessor::checkAndTryIntoNewView() +{ + // in syncing mode, no need to try into the newView period + if (m_config->committedProposal()->index() < m_config->syncingHighestNumber()) + { + return nullptr; + } + if (m_newViewGenerated || !m_config->leaderAfterViewChange()) + { + return nullptr; + } + auto toView = m_config->toView(); + if (!m_viewChangeWeight.count(toView)) + { + return nullptr; + } + if (m_viewChangeWeight[toView] < m_config->minRequiredQuorum()) + { + return nullptr; + } + // the next leader collect enough viewChange requests + // set the viewchanges(without prePreparedProposals) + auto viewChangeCache = m_viewChangeCache[toView]; + ViewChangeMsgList viewChangeList; + for (auto const& it : viewChangeCache) + { + viewChangeList.push_back(it.second); + } + // create newView message + auto newViewMsg = m_config->pbftMessageFactory()->createNewViewMsg(); + newViewMsg->setHash(m_config->committedProposal()->hash()); + newViewMsg->setIndex(m_config->committedProposal()->index()); + newViewMsg->setPacketType(PacketType::NewViewPacket); + newViewMsg->setVersion(m_config->pbftMsgDefaultVersion()); + newViewMsg->setView(toView); + newViewMsg->setTimestamp(utcTime()); + newViewMsg->setGeneratedFrom(m_config->nodeIndex()); + // set viewchangeList + newViewMsg->setViewChangeMsgList(viewChangeList); + // set generated pre-prepare list + auto generatedPrePrepareList = generatePrePrepareMsg(viewChangeCache); + newViewMsg->setPrePrepareList(generatedPrePrepareList); + // encode and broadcast the viewchangeReq + auto encodedData = m_config->codec()->encode(newViewMsg); + // only broadcast message to the consensus nodes + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + m_newViewGenerated = true; + PBFT_LOG(INFO) << LOG_DESC("The next leader broadcast NewView request") + << printPBFTMsgInfo(newViewMsg) << LOG_KV("Idx", m_config->nodeIndex()); + return newViewMsg; +} + +ViewType PBFTCacheProcessor::tryToTriggerFastViewChange() +{ + uint64_t greaterViewWeight = 0; + ViewType viewToReach = 0; + bool findViewToReach = false; + for (auto const& it : m_viewChangeCache) + { + auto view = it.first; + if (view <= m_config->toView()) + { + continue; + } + if (viewToReach > view || (viewToReach == 0)) + { + // check the quorum + auto viewChangeCache = it.second; + greaterViewWeight = 0; + for (auto const& cache : viewChangeCache) + { + auto fromIdx = cache.first; + auto nodeInfo = m_config->getConsensusNodeByIndex(fromIdx); + if (!nodeInfo) + { + continue; + } + greaterViewWeight += nodeInfo->weight(); + } + // must ensure at least (f+1) nodes at the same view can trigger fast-viewchange + if (greaterViewWeight >= (m_config->maxFaultyQuorum() + 1)) + { + findViewToReach = true; + viewToReach = view; + } + } + } + if (!findViewToReach) + { + return 0; + } + if (m_config->toView() >= viewToReach) + { + return 0; + } + if (viewToReach > 0) + { + // set toView to (viewToReach - 1) and then trigger timeout to increase toView to + // viewToReach + m_config->setToView(viewToReach - 1); + } + PBFT_LOG(INFO) << LOG_DESC("tryToTriggerFastViewChange") << LOG_KV("viewToReach", viewToReach) + << m_config->printCurrentState(); + return viewToReach; +} + +bool PBFTCacheProcessor::checkPrecommitMsg(PBFTMessageInterface::Ptr _precommitMsg) +{ + // check the view(the first started node no need to check the view) + if (m_config->startRecovered() && (_precommitMsg->view() > m_config->toView())) + { + return false; + } + if (!_precommitMsg->consensusProposal()) + { + return false; + } + auto ret = checkPrecommitWeight(_precommitMsg); + if (ret) + { + return ret; + } + // avoid the failure to verify proposalWeight due to the modification of consensus node list and + // consensus weight + if (!m_caches.count(_precommitMsg->index())) + { + return ret; + } + auto precommit = (m_caches.at(_precommitMsg->index()))->preCommitCache(); + if (!precommit) + { + return ret; + } + // erase the cache + if (precommit->hash() == _precommitMsg->hash() && !checkPrecommitWeight(precommit)) + { + m_caches.erase(precommit->index()); + } + return ret; +} + +bool PBFTCacheProcessor::checkPrecommitWeight(PBFTMessageInterface::Ptr _precommitMsg) +{ + auto precommitProposal = _precommitMsg->consensusProposal(); + // check the signature + uint64_t weight = 0; + auto proofSize = precommitProposal->signatureProofSize(); + for (size_t i = 0; i < proofSize; i++) + { + auto proof = precommitProposal->signatureProof(i); + // check the proof + auto nodeInfo = m_config->getConsensusNodeByIndex(proof.first); + if (!nodeInfo) + { + return false; + } + // verify the signature + auto ret = m_config->cryptoSuite()->signatureImpl()->verify( + nodeInfo->nodeID(), precommitProposal->hash(), proof.second); + if (!ret) + { + return false; + } + weight += nodeInfo->weight(); + } + // check the quorum + return (weight >= m_config->minRequiredQuorum()); +} + +ViewChangeMsgInterface::Ptr PBFTCacheProcessor::fetchPrecommitData( + BlockNumber _index, bcos::crypto::HashType const& _hash) +{ + if (!m_caches.count(_index)) + { + return nullptr; + } + auto cache = m_caches[_index]; + if (cache->preCommitCache() == nullptr || cache->preCommitCache()->hash() != _hash) + { + return nullptr; + } + + PBFTMessageList precommitMessage; + precommitMessage.push_back(cache->preCommitCache()); + + auto pbftMessage = m_config->pbftMessageFactory()->createViewChangeMsg(); + pbftMessage->setPreparedProposals(precommitMessage); + return pbftMessage; +} + +void PBFTCacheProcessor::removeConsensusedCache(ViewType _view, BlockNumber _consensusedNumber) +{ + m_proposalsToStableConsensus.erase(_consensusedNumber); + for (auto pcache = m_caches.begin(); pcache != m_caches.end();) + { + // Note: can't remove stabledCommitted cache here for need to fetch + // lastAppliedProposalCheckPoint when apply the next proposal + if (pcache->first <= _consensusedNumber) + { + m_proposalsToStableConsensus.erase(pcache->first); + pcache = m_caches.erase(pcache); + continue; + } + pcache++; + } + removeInvalidViewChange(_view, _consensusedNumber); + m_newViewGenerated = false; +} + + +void PBFTCacheProcessor::resetCacheAfterViewChange( + ViewType _view, BlockNumber _latestCommittedProposal) +{ + for (auto const& it : m_caches) + { + it.second->resetCache(_view); + } + m_maxPrecommitIndex.clear(); + m_maxCommittedIndex.clear(); + m_newViewGenerated = false; + removeInvalidViewChange(_view, _latestCommittedProposal); + removeInvalidRecoverCache(_view); +} + +void PBFTCacheProcessor::removeInvalidRecoverCache(ViewType _view) +{ + for (auto it = m_recoverReqCache.begin(); it != m_recoverReqCache.end();) + { + auto view = it->first; + if (view <= _view) + { + it = m_recoverReqCache.erase(it); + m_recoverCacheWeight.erase(view); + continue; + } + it++; + } +} + +void PBFTCacheProcessor::removeInvalidViewChange( + ViewType _view, BlockNumber _latestCommittedProposal) +{ + for (auto it = m_viewChangeCache.begin(); it != m_viewChangeCache.end();) + { + auto view = it->first; + if (view <= _view) + { + it = m_viewChangeCache.erase(it); + m_viewChangeWeight.erase(view); + continue; + } + // Note: must use reference here, in case of erase nothing + auto& viewChangeCache = it->second; + for (auto pcache = viewChangeCache.begin(); pcache != viewChangeCache.end();) + { + auto index = pcache->second->index(); + if (index < _latestCommittedProposal) + { + pcache = viewChangeCache.erase(pcache); + continue; + } + pcache++; + } + it++; + } + reCalculateViewChangeWeight(); +} + +void PBFTCacheProcessor::reCalculateViewChangeWeight() +{ + m_maxPrecommitIndex.clear(); + m_maxCommittedIndex.clear(); + for (auto const& it : m_viewChangeCache) + { + auto view = it.first; + m_viewChangeWeight[view] = 0; + auto const& viewChangeCache = it.second; + for (auto const& cache : viewChangeCache) + { + auto generatedFrom = cache.second->generatedFrom(); + auto nodeInfo = m_config->getConsensusNodeByIndex(generatedFrom); + if (!nodeInfo) + { + continue; + } + m_viewChangeWeight[view] += nodeInfo->weight(); + auto viewChangeReq = cache.second; + auto committedIndex = viewChangeReq->committedProposal()->index(); + if (!m_maxCommittedIndex.count(view) || m_maxCommittedIndex[view] < committedIndex) + { + m_maxCommittedIndex[view] = committedIndex; + } + // get the max precommitIndex + for (const auto& precommit : viewChangeReq->preparedProposals()) + { + auto precommitIndex = precommit->index(); + if (!m_maxPrecommitIndex.count(view) || m_maxPrecommitIndex[view] < precommitIndex) + { + m_maxPrecommitIndex[view] = precommitIndex; + } + } + } + } +} + +void PBFTCacheProcessor::checkAndCommitStableCheckPoint() +{ + std::vector stabledCacheList; + for (auto const& it : m_caches) + { + auto ret = it.second->checkAndCommitStableCheckPoint(); + if (!ret) + { + continue; + } + stabledCacheList.emplace_back(it.second); + } + // Note: since updateStableCheckPointQueue may update m_caches after commitBlock + // must call it after iterator m_caches + for (const auto& cache : stabledCacheList) + { + updateStableCheckPointQueue(cache->checkPointProposal()); + } +} + +void PBFTCacheProcessor::updateStableCheckPointQueue(PBFTProposalInterface::Ptr _stableCheckPoint) +{ + assert(_stableCheckPoint); + m_stableCheckPointQueue.push(_stableCheckPoint); + PBFT_LOG(INFO) << LOG_DESC("updateStableCheckPointQueue: insert new checkpoint proposal") + << LOG_KV("index", _stableCheckPoint->index()) + << LOG_KV("hash", _stableCheckPoint->hash().abridged()) + << m_config->printCurrentState(); + tryToCommitStableCheckPoint(); +} + +void PBFTCacheProcessor::tryToCommitStableCheckPoint() +{ + // remove the invalid checkpoint + while (!m_stableCheckPointQueue.empty() && + m_stableCheckPointQueue.top()->index() <= m_config->committedProposal()->index()) + { + PBFT_LOG(INFO) << LOG_DESC("updateStableCheckPointQueue: remove invalid checkpoint") + << LOG_KV("index", m_stableCheckPointQueue.top()->index()) + << LOG_KV("committedIndex", m_config->committedProposal()->index()); + m_committedProposalList.erase(m_stableCheckPointQueue.top()->index()); + m_stableCheckPointQueue.pop(); + } + // submit stable-checkpoint to ledger in ordeer + if (!m_stableCheckPointQueue.empty() && + m_stableCheckPointQueue.top()->index() == m_config->committedProposal()->index() + 1) + { + PBFT_LOG(INFO) << LOG_DESC("updateStableCheckPointQueue: commit stable checkpoint") + << LOG_KV("index", m_stableCheckPointQueue.top()->index()) + << LOG_KV("committedIndex", m_config->committedProposal()->index()); + auto stableCheckPoint = m_stableCheckPointQueue.top(); + m_committedProposalList.erase(stableCheckPoint->index()); + m_stableCheckPointQueue.pop(); + m_config->storage()->asyncCommitStableCheckPoint(stableCheckPoint); + } +} + +bool PBFTCacheProcessor::shouldRequestCheckPoint(PBFTMessageInterface::Ptr _checkPointMsg) +{ + auto checkPointIndex = _checkPointMsg->index(); + auto committedIndex = m_config->committedProposal()->index(); + // expired checkpoint + if (checkPointIndex <= committedIndex || checkPointIndex <= m_config->syncingHighestNumber()) + { + return false; + } + if (checkPointIndex > (committedIndex + m_config->waterMarkLimit())) + { + return false; + } + // hit in the local committedProposalList or already been requested + if (m_committedProposalList.count(checkPointIndex)) + { + return false; + } + // the local cache already has the checkPointProposal + if (m_caches.count(checkPointIndex) && m_caches[checkPointIndex]->checkPointProposal()) + { + return false; + } + // request the checkpoint proposal when timeout + if (m_config->timeout()) + { + return true; + } + // no-timeout + // has not received any checkPoint message before, wait for generating local checkPoint + if (!m_caches.count(checkPointIndex)) + { + return false; + } + auto cache = m_caches[checkPointIndex]; + // precommitted in the local cache, wait for generating local checkPoint + if (cache->precommitted()) + { + return false; + } + // receive at least (f+1) checkPoint proposal, wait for generating local checkPoint + auto checkPointWeight = cache->getCollectedCheckPointWeight(_checkPointMsg->hash()); + auto minRequiredCheckPointWeight = m_config->maxFaultyQuorum() + 1; + if (checkPointWeight < minRequiredCheckPointWeight) + { + return false; + } + // collect more than (f+1) checkpoint message with the same hash + // in case of request again + m_committedProposalList.insert(checkPointIndex); + return true; +} + +void PBFTCacheProcessor::eraseCommittedProposalList(bcos::protocol::BlockNumber _index) +{ + if (!m_committedProposalList.count(_index)) + { + return; + } + m_committedProposalList.erase(_index); +} + +void PBFTCacheProcessor::clearExpiredExecutingProposal() +{ + auto committedIndex = m_config->committedProposal()->index(); + for (auto it = m_executingProposals.begin(); it != m_executingProposals.end();) + { + if (it->second > committedIndex) + { + it++; + continue; + } + it = m_executingProposals.erase(it); + } +} + +void PBFTCacheProcessor::addRecoverReqCache(PBFTMessageInterface::Ptr _recoverResponse) +{ + auto fromIdx = _recoverResponse->generatedFrom(); + auto view = _recoverResponse->view(); + if (m_recoverReqCache.count(view) && m_recoverReqCache[view].count(fromIdx)) + { + return; + } + m_recoverReqCache[view][fromIdx] = _recoverResponse; + // update the weight + auto nodeInfo = m_config->getConsensusNodeByIndex(fromIdx); + if (!nodeInfo) + { + return; + } + if (!m_recoverCacheWeight.count(view)) + { + m_recoverCacheWeight[view] = 0; + } + m_recoverCacheWeight[view] += nodeInfo->weight(); + PBFT_LOG(INFO) << LOG_DESC("addRecoverReqCache") << LOG_KV("weight", m_recoverCacheWeight[view]) + << printPBFTMsgInfo(_recoverResponse) << m_config->printCurrentState(); +} + +bool PBFTCacheProcessor::checkAndTryToRecover() +{ + ViewType recoveredView = 0; + for (auto const& it : m_recoverCacheWeight) + { + auto view = it.first; + // collect enough recover response with the same view + if (it.second >= m_config->minRequiredQuorum() && recoveredView < view) + { + recoveredView = view; + } + } + if (recoveredView == 0) + { + return false; + } + // the node has already been recovered + if (!m_config->timeout()) + { + return false; + } + m_config->resetNewViewState(recoveredView); + resetCacheAfterViewChange(recoveredView, m_config->committedProposal()->index()); + // clear the recoverReqCache + m_recoverReqCache.clear(); + m_recoverCacheWeight.clear(); + // try to preCommit/commit after no-timeout + // Note: the checkAndPreCommit and checkAndCommit will trigger fast-view-change + checkAndPreCommit(); + checkAndCommit(); + PBFT_LOG(INFO) << LOG_DESC("checkAndTryToRecoverView: reachNewView") + << LOG_KV("recoveredView", recoveredView) << m_config->printCurrentState(); + return true; +} + +PBFTProposalInterface::Ptr PBFTCacheProcessor::fetchPrecommitProposal( + bcos::protocol::BlockNumber _index) +{ + if (!m_caches.contains(_index)) + { + return nullptr; + } + auto cache = m_caches[_index]; + if (cache->preCommitCache() == nullptr || + cache->preCommitCache()->consensusProposal() == nullptr) + { + return nullptr; + } + return cache->preCommitCache()->consensusProposal(); +} + +void PBFTCacheProcessor::updatePrecommit(PBFTProposalInterface::Ptr _proposal) +{ + auto pbftMessage = m_config->pbftMessageFactory()->createPBFTMsg(); + pbftMessage->setConsensusProposal(_proposal); + pbftMessage->setIndex(_proposal->index()); + pbftMessage->setHash(_proposal->hash()); + addCache( + m_caches, pbftMessage, [](PBFTCache::Ptr _pbftCache, PBFTMessageInterface::Ptr _precommit) { + _pbftCache->setPrecommitCache(std::move(_precommit)); + }); +} + +PBFTMessageList PBFTCacheProcessor::preCommitCachesWithoutData() +{ + PBFTMessageList precommitCacheList; + auto waitSealUntil = m_config->waitSealUntil(); + auto committedIndex = m_config->committedProposal()->index(); + for (auto it = m_caches.begin(); it != m_caches.end();) + { + //遍历每一个blockNumber下的cacheConfig,然后取出对应的变量,这里取出的是prePre信息,当前版本为没有压缩的prepre + auto prePrePareCache = it->second->preCommitWithoutData(); + if (prePrePareCache != nullptr) + { + // should not handle the proposal future than the system proposal + if (waitSealUntil > committedIndex && prePrePareCache ->index() > waitSealUntil) + { + it = m_caches.erase(it); + continue; + } + precommitCacheList.push_back(prePrePareCache); + } + it++; + } + return precommitCacheList; +} + +void PBFTCacheProcessor::resetUnCommittedCacheState(bcos::protocol::BlockNumber _number) +{ + PBFT_LOG(INFO) << LOG_DESC("resetUnCommittedCacheState") << LOG_KV("number", _number) + << m_config->printCurrentState(); + for (auto const& it : m_caches) + { + if (it.second->index() >= _number) + { + it.second->resetState(); + } + } + m_committedProposalList.clear(); + m_executingProposals.clear(); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.h b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.h new file mode 100644 index 0000000..b2d9449 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/cache/PBFTCacheProcessor.h @@ -0,0 +1,284 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief cache processor for the PBFTReq + * @file PBFTCacheProcessor.h + * @author: yujiechen + * @date 2021-04-21 + */ +#pragma once +#include "../cache/PBFTCache.h" +#include "../config/PBFTConfig.h" +#include "../interfaces/PBFTMessageFactory.h" +#include "../interfaces/PBFTMessageInterface.h" +#include "../interfaces/ViewChangeMsgInterface.h" +#include "PBFTCacheFactory.h" +#include +#include +namespace bcos::consensus +{ +struct PBFTProposalCmp +{ + bool operator()( + const PBFTProposalInterface::Ptr& _first, const PBFTProposalInterface::Ptr& _second) + { + // increase order + return _first->index() > _second->index(); + } +}; + +class PBFTCacheProcessor : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTCacheProcessor(PBFTCacheFactory::Ptr _cacheFactory, PBFTConfig::Ptr _config) + : m_cacheFactory(std::move(_cacheFactory)), m_config(std::move(_config)) + {} + + virtual void tryToResendCheckPoint(); + + virtual ~PBFTCacheProcessor() = default; + virtual void initState( + PBFTProposalList const& _committedProposals, bcos::crypto::NodeIDPtr _fromNode); + + virtual void addPrePrepareCache(PBFTMessageInterface::Ptr _prePrepareMsg); + virtual bool existPrePrepare(PBFTMessageInterface::Ptr _prePrepareMsg); + + virtual bool tryToFillProposal(PBFTMessageInterface::Ptr _prePrepareMsg); + + virtual bool conflictWithProcessedReq(PBFTMessageInterface::Ptr _msg); + virtual bool conflictWithPrecommitReq(PBFTMessageInterface::Ptr _prePrepareMsg); + virtual void addPrepareCache(PBFTMessageInterface::Ptr _prepareReq) + { + addCache(m_caches, std::move(_prepareReq), + [](PBFTCache::Ptr _pbftCache, PBFTMessageInterface::Ptr _prepareReq) { + _pbftCache->addPrepareCache(std::move(_prepareReq)); + }); + } + + virtual void addCommitReq(PBFTMessageInterface::Ptr _commitReq) + { + addCache(m_caches, std::move(_commitReq), + [](PBFTCache::Ptr _pbftCache, PBFTMessageInterface::Ptr _commitReq) { + _pbftCache->addCommitCache(std::move(_commitReq)); + }); + } + + PBFTMessageList preCommitCachesWithData() + { + PBFTMessageList precommitCacheList; + for (auto const& it : m_caches) + { + auto precommitCache = it.second->preCommitCache(); + if (precommitCache != nullptr) + { + precommitCacheList.push_back(precommitCache); + } + } + return precommitCacheList; + } + + PBFTMessageList preCommitCachesWithoutData(); + virtual void checkAndPreCommit(); + virtual void checkAndCommit(); + + virtual void addViewChangeReq(ViewChangeMsgInterface::Ptr _viewChange); + virtual NewViewMsgInterface::Ptr checkAndTryIntoNewView(); + virtual ViewType tryToTriggerFastViewChange(); + + virtual ViewChangeMsgInterface::Ptr fetchPrecommitData( + bcos::protocol::BlockNumber _index, bcos::crypto::HashType const& _hash); + + virtual PBFTProposalInterface::Ptr fetchPrecommitProposal(bcos::protocol::BlockNumber _index); + virtual void updatePrecommit(PBFTProposalInterface::Ptr _proposal); + + virtual bool checkPrecommitMsg(PBFTMessageInterface::Ptr _precommitMsg); + + virtual void removeConsensusedCache( + ViewType _view, bcos::protocol::BlockNumber _consensusedNumber); + virtual void resetCacheAfterViewChange( + ViewType _view, bcos::protocol::BlockNumber _latestCommittedProposal); + virtual void removeInvalidViewChange( + ViewType _view, bcos::protocol::BlockNumber _latestCommittedProposal); + + virtual void setCheckPointProposal(PBFTProposalInterface::Ptr _proposal); + virtual void addCheckPointMsg(PBFTMessageInterface::Ptr _checkPointMsg); + virtual void checkAndCommitStableCheckPoint(); + virtual void tryToCommitStableCheckPoint(); + + virtual void resetTimer(); + + virtual bool shouldRequestCheckPoint(PBFTMessageInterface::Ptr _checkPointMsg); + + virtual void registerProposalAppliedHandler( + std::function + _callback) + { + m_proposalAppliedHandler = std::move(_callback); + } + + void registerCommittedProposalNotifier( + std::function)> + _committedProposalNotifier) + { + m_committedProposalNotifier = std::move(_committedProposalNotifier); + } + + bool tryToPreApplyProposal(ProposalInterface::Ptr _proposal); + bool tryToApplyCommitQueue(); + + // notify the consensusing proposal index to the sync module + void notifyCommittedProposalIndex(bcos::protocol::BlockNumber _index); + + virtual void updateCommitQueue(PBFTProposalInterface::Ptr _committedProposal); + + // TODO: ensure thread-safe here + virtual void eraseCommittedProposalList(bcos::protocol::BlockNumber _index); + + virtual void eraseExecutedProposal(bcos::crypto::HashType const& _hash) + { + if (!m_executingProposals.contains(_hash)) + { + return; + } + m_executingProposals.erase(_hash); + } + + virtual size_t executingProposalSize() { return m_executingProposals.size(); } + virtual void clearExpiredExecutingProposal(); + virtual void registerOnLoadAndVerifyProposalFinish( + std::function + _onLoadAndVerifyProposalFinish) + { + m_onLoadAndVerifyProposalFinish = std::move(_onLoadAndVerifyProposalFinish); + } + + virtual void addRecoverReqCache(PBFTMessageInterface::Ptr _recoverResponse); + virtual bool checkAndTryToRecover(); + + std::map const& executingProposals() + { + return m_executingProposals; + } + + bool proposalCommitted(bcos::protocol::BlockNumber _index) + { + return m_committedProposalList.contains(_index); + } + + void clearCacheAfterRecoverStateFailed() + { + // since request checkPoint will insert requested-proposal into m_committedProposalList, + // must clear the cache when loadAndVerifyBlock failed + m_committedProposalList.clear(); + } + + virtual uint64_t getViewChangeWeight(ViewType _view) { return m_viewChangeWeight.at(_view); } + + virtual void clearAllCache() + { + m_caches.clear(); + m_viewChangeCache.clear(); + std::priority_queue, + PBFTProposalCmp> + emptyQueue; + m_committedQueue.swap(emptyQueue); + m_executingProposals.clear(); + m_committedProposalList.clear(); + m_proposalsToStableConsensus.clear(); + + std::priority_queue, + PBFTProposalCmp> + emptyStableCheckPointQueue; + m_stableCheckPointQueue.swap(emptyStableCheckPointQueue); + m_recoverReqCache.clear(); + } + + void resetUnCommittedCacheState(bcos::protocol::BlockNumber _number); + virtual void updateStableCheckPointQueue(PBFTProposalInterface::Ptr _stableCheckPoint); + +protected: + virtual void loadAndVerifyProposal(bcos::crypto::NodeIDPtr _fromNode, + PBFTProposalInterface::Ptr _proposal, size_t _retryTime = 0); + + virtual bool checkPrecommitWeight(PBFTMessageInterface::Ptr _precommitMsg); + virtual void applyStateMachine( + ProposalInterface::ConstPtr _lastAppliedProposal, PBFTProposalInterface::Ptr _proposal); + + virtual ProposalInterface::ConstPtr getAppliedCheckPointProposal( + bcos::protocol::BlockNumber _index); + + virtual void notifyToSealNextBlock(); + +protected: + using PBFTCachesType = std::map; + using UpdateCacheHandler = + std::function; + void addCache(PBFTCachesType& _pbftCache, PBFTMessageInterface::Ptr _pbftReq, + UpdateCacheHandler _handler); + + PBFTMessageList generatePrePrepareMsg( + std::map _viewChangeCache); + PBFTMessageList generatePrePrepareMsg1( + std::map _viewChangeCache); + void reCalculateViewChangeWeight(); + void removeInvalidRecoverCache(ViewType _view); + void notifyMaxProposalIndex(bcos::protocol::BlockNumber _proposalIndex); + +protected: + PBFTCacheFactory::Ptr m_cacheFactory; + PBFTConfig::Ptr m_config; + /// map: number => PBFTCache + PBFTCachesType m_caches; + + // viewchange caches + using ViewChangeCacheType = + std::map>; + ViewChangeCacheType m_viewChangeCache; + std::map m_viewChangeWeight; + // only needed for viewchange + std::map m_maxCommittedIndex; + std::map m_maxPrecommitIndex; + + std::atomic_bool m_newViewGenerated = {false}; + + std::priority_queue, + PBFTProposalCmp> + m_committedQueue; + std::map m_executingProposals; + + std::set> m_committedProposalList; + + // ordered by the index + std::set> m_proposalsToStableConsensus; + + std::priority_queue, + PBFTProposalCmp> + m_stableCheckPointQueue; + + std::function + m_proposalAppliedHandler; + std::function)> + m_committedProposalNotifier; + std::function + m_onLoadAndVerifyProposalFinish; + + // the recover message cache + std::map> m_recoverReqCache; + std::map m_recoverCacheWeight; + + bcos::protocol::BlockNumber m_maxNotifyIndex = 0; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.cpp b/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.cpp new file mode 100644 index 0000000..945545c --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.cpp @@ -0,0 +1,476 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief config for PBFT + * @file PBFTConfig.cpp + * @author: yujiechen + * @date 2021-04-12 + */ +#include "PBFTConfig.h" + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::ledger; + +void PBFTConfig::resetConfig(LedgerConfig::Ptr _ledgerConfig, bool _syncedBlock) +{ + bcos::protocol::BlockNumber committedIndex = 0; + if (m_committedProposal) + { + committedIndex = m_committedProposal->index(); + } + if (_ledgerConfig->blockNumber() <= committedIndex && committedIndex > 0) + { + return; + } + PBFT_LOG(INFO) << METRIC << LOG_DESC("resetConfig") + << LOG_KV("committedIndex", _ledgerConfig->blockNumber()) + << LOG_KV("propHash", _ledgerConfig->hash().abridged()) + << LOG_KV("blockCountLimit", _ledgerConfig->blockTxCountLimit()) + << LOG_KV("leaderPeriod", _ledgerConfig->leaderSwitchPeriod()) + << LOG_KV( + "consensusNodesSize", _ledgerConfig->mutableConsensusNodeList().size()); + // set committed proposal + auto committedProposal = m_pbftMessageFactory->createPBFTProposal(); + committedProposal->setIndex(_ledgerConfig->blockNumber()); + committedProposal->setHash(_ledgerConfig->hash()); + setCommittedProposal(committedProposal); + // set blockTxCountLimit + setBlockTxCountLimit(_ledgerConfig->blockTxCountLimit()); + // set ConsensusNodeList + auto& consensusList = _ledgerConfig->mutableConsensusNodeList(); + setConsensusNodeList(consensusList); + auto observerList = _ledgerConfig->mutableObserverList(); + setObserverNodeList(*observerList); + // set leader_period + setLeaderSwitchPeriod(_ledgerConfig->leaderSwitchPeriod()); + // reset the timer + freshTimer(); + + if (_ledgerConfig->sealerId() == -1) + { + PBFT_LOG(INFO) << METRIC << LOG_DESC("^^^^^^^^Report") << printCurrentState(); + } + else + { + PBFT_LOG(INFO) << METRIC << LOG_DESC("^^^^^^^^Report") + << LOG_KV("sealer", _ledgerConfig->sealerId()) + << LOG_KV("txs", _ledgerConfig->txsSize()) << printCurrentState(); + } + if (m_compatibilityVersion != _ledgerConfig->compatibilityVersion()) + { + PBFT_LOG(INFO) << LOG_DESC("compatibilityVersion updated") + << LOG_KV("version", (bcos::protocol::BlockVersion)m_compatibilityVersion) + << LOG_KV("updatedVersion", (bcos::protocol::BlockVersion)( + _ledgerConfig->compatibilityVersion())); + m_compatibilityVersion = _ledgerConfig->compatibilityVersion(); + if (m_versionNotification && m_asMasterNode) + { + m_versionNotification(m_compatibilityVersion); + } + } + // notify the txpool validator to update the consensusNodeList and the observerNodeList + if (m_consensusNodeListUpdated || m_observerNodeListUpdated) + { + m_validator->updateValidatorConfig(consensusList, *observerList); + PBFT_LOG(INFO) << LOG_DESC("updateValidatorConfig") + << LOG_KV("consensusNodeListUpdated", m_consensusNodeListUpdated) + << LOG_KV("observerNodeListUpdated", m_observerNodeListUpdated) + << LOG_KV("consensusNodeSize", consensusList.size()) + << LOG_KV("observerNodeSize", observerList->size()); + } + + // notify the latest block number to the sealer + if (m_stateNotifier) + { + m_stateNotifier(_ledgerConfig->blockNumber()); + } + // notify the latest block to the sync module + if (m_newBlockNotifier && !_syncedBlock) + { + m_newBlockNotifier(_ledgerConfig, [_ledgerConfig](Error::Ptr _error) { + if (_error) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncNotifyNewBlock to sync module failed") + << LOG_KV("number", _ledgerConfig->blockNumber()) + << LOG_KV("hash", _ledgerConfig->hash().abridged()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + + // the node is syncing, reset the timeout state to false for view recovery + if (m_syncingHighestNumber > _ledgerConfig->blockNumber()) + { + m_syncingState = true; + // notify resetSealing(the syncing node should not seal block) + notifyResetSealing(); + return; + } + // after syncing finished, try to reach a new view after syncing completed + if (m_syncingState) + { + m_syncingState = false; + m_timer->start(); + } + // try to notify the sealer module to seal proposals + if (!m_timeoutState) + { + if (m_waitResealUntil == _ledgerConfig->blockNumber()) + { + auto notifyBeginIndex = std::max(sealStartIndex(), m_waitResealUntil + 1); + PBFT_LOG(INFO) << LOG_DESC("Reach reseal index") + << LOG_KV("notifyBeginIndex", notifyBeginIndex) << printCurrentState(); + reNotifySealer(notifyBeginIndex); + } + notifySealer(sealStartIndex()); + } +} + +void PBFTConfig::notifyResetSealing(std::function _callback) +{ + if (!m_sealerResetNotifier) + { + return; + } + // only notify the non-leader to reset sealing + PBFT_LOG(INFO) << LOG_DESC("notifyResetSealing") << printCurrentState(); + auto committedIndex = m_committedProposal->index(); + m_sealerResetNotifier([this, _callback, committedIndex](Error::Ptr _error) { + if (_error) + { + PBFT_LOG(INFO) << LOG_DESC("notifyResetSealing failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()) << printCurrentState(); + return; + } + if (_callback && m_waitResealUntil <= committedIndex) + { + _callback(); + } + PBFT_LOG(INFO) << LOG_DESC("notifyResetSealing success") << printCurrentState(); + }); + // reset the sealEndIndex and the sealStartIndex + m_sealEndIndex = (sealStartIndex() - 1); + m_sealStartIndex = (sealStartIndex() - 1); +} + +void PBFTConfig::reNotifySealer(bcos::protocol::BlockNumber _index) +{ + if (_index >= highWaterMark() || _index < m_committedProposal->index()) + { + PBFT_LOG(INFO) << LOG_DESC("reNotifySealer return for invalid expectedStart") + << LOG_KV("expectedStart", _index) + << LOG_KV("highWaterMark", highWaterMark()) << printCurrentState(); + return; + } + m_sealStartIndex = (_index - 1); + m_sealEndIndex = (_index - 1); + notifySealer(_index); + PBFT_LOG(INFO) << LOG_DESC("reNotifySealer") << LOG_KV("expectedStart", _index) + << LOG_KV("highWaterMark", highWaterMark()) + << LOG_KV("leader", leaderIndex(_index)) << printCurrentState(); +} + +bool PBFTConfig::canHandleNewProposal() +{ + ReadGuard lock(x_committedProposal); + bcos::protocol::BlockNumber committedIndex = 0; + if (m_committedProposal) + { + committedIndex = m_committedProposal->index(); + } + if (m_waitSealUntil > committedIndex) + { + return false; + } + if (m_waitResealUntil > committedIndex) + { + return false; + } + return true; +} + +bool PBFTConfig::canHandleNewProposal(PBFTBaseMessageInterface::Ptr _msg) +{ + if (canHandleNewProposal()) + { + return true; + } + ReadGuard lock(x_committedProposal); + auto committedIndex = m_committedProposal->index(); + return _msg->index() <= committedIndex || _msg->index() <= m_waitSealUntil || + _msg->index() <= m_waitResealUntil; +} + +bool PBFTConfig::tryTriggerFastViewChange(IndexType _leaderIndex) +{ + if (!m_fastViewChangeHandler) + { + return false; + } + auto nodeList = connectedNodeList(); + // empty connection + if (nodeList.empty()) + { + return false; + } + // the non-consensus node should not trigger fast viewchange + if (!isConsensusNode()) + { + return false; + } + // the leader is the current node + if (_leaderIndex == nodeIndex()) + { + return false; + } + auto leaderNodeInfo = getConsensusNodeByIndex(_leaderIndex); + if (!leaderNodeInfo) + { + return false; + } + // Note: must register m_faultyDiscriminator before start the PBFTEngine + if (!m_faultyDiscriminator(leaderNodeInfo->nodeID())) + { + return false; + } + PBFT_LOG(INFO) << LOG_DESC("tryTriggerFastViewChange for the faulty leader") + << LOG_KV("leaderIndex", _leaderIndex) + << LOG_KV("leader", leaderNodeInfo->nodeID()->shortHex()) << printCurrentState(); + m_fastViewChangeHandler(); + // check the newLeader connection + auto newLeader = leaderIndexInNewViewPeriod(m_toView); + return tryTriggerFastViewChange(newLeader); +} + +void PBFTConfig::notifySealer(BlockNumber _progressedIndex, bool _enforce) +{ + RecursiveGuard lock(m_mutex); + auto currentLeader = leaderIndex(_progressedIndex); + if (currentLeader != nodeIndex()) + { + return; + } + if (!canHandleNewProposal()) + { + PBFT_LOG(INFO) << LOG_DESC( + "Not notify the sealer to sealing for not reach waitResealUntil/waitToSeal limit"); + return; + } + + if (_enforce) + { + asyncNotifySealProposal(_progressedIndex, _progressedIndex, blockTxCountLimit()); + m_sealEndIndex = std::max(_progressedIndex, m_sealEndIndex.load()); + m_sealStartIndex = std::min(_progressedIndex, m_sealStartIndex.load()); + PBFT_LOG(INFO) << LOG_DESC("notifySealer: enforce notify the leader to seal block") + << LOG_KV("idx", nodeIndex()) << LOG_KV("startIndex", _progressedIndex) + << LOG_KV("endIndex", _progressedIndex) + << LOG_KV("maxTxsToSeal", blockTxCountLimit()) << printCurrentState(); + return; + } + int64_t endProposalIndex = + (_progressedIndex / m_leaderSwitchPeriod + 1) * m_leaderSwitchPeriod - 1; + // Note: the valid proposal index range should be [max(lowWaterMark, committedIndex+1, + // expectedCheckpoint), highWaterMark) + endProposalIndex = std::min(endProposalIndex, (highWaterMark() - 1)); + if (m_sealEndIndex.load() >= endProposalIndex) + { + PBFT_LOG(INFO) << LOG_DESC("notifySealer return for invalid seal range") + << LOG_KV("currentEndIndex", m_sealEndIndex) + << LOG_KV("expectedEndIndex", endProposalIndex) << printCurrentState(); + return; + } + auto startSealIndex = std::max(m_sealEndIndex.load() + 1, _progressedIndex); + if (startSealIndex > endProposalIndex) + { + PBFT_LOG(INFO) << LOG_DESC("notifySealer return for invalid seal range") + << LOG_KV("expectedStartIndex", startSealIndex) + << LOG_KV("expectedEndIndex", endProposalIndex) << printCurrentState(); + return; + } + // already notified + if (m_sealEndIndex >= endProposalIndex && m_sealStartIndex <= startSealIndex) + { + return; + } + auto committedIndex = m_committedProposal->index(); + if (m_validator->resettingProposalSize() > 0 && (startSealIndex > (committedIndex + 1))) + { + PBFT_LOG(INFO) << LOG_DESC( + "Not notify the sealer to sealing for txs of some proposals have not " + "been resetted success") + << LOG_KV("resettingProposalSize", m_validator->resettingProposalSize()) + << LOG_KV("startSealIndex", startSealIndex) << printCurrentState(); + // notify the leader to seal when all txs of all proposals have been resetted + auto self = weak_from_this(); + m_validator->setVerifyCompletedHook([self, _progressedIndex, _enforce]() { + auto config = self.lock(); + if (!config) + { + return; + } + config->notifySealer(_progressedIndex, _enforce); + }); + return; + } + asyncNotifySealProposal(startSealIndex, endProposalIndex, blockTxCountLimit()); + + m_sealStartIndex = startSealIndex; + m_sealEndIndex = endProposalIndex; + PBFT_LOG(INFO) << LOG_DESC("notifySealer: notify the new leader to seal block") + << LOG_KV("idx", nodeIndex()) << LOG_KV("startIndex", startSealIndex) + << LOG_KV("endIndex", endProposalIndex) + << LOG_KV("notifyBeginIndex", _progressedIndex) + << LOG_KV("waitSealUntil", m_waitSealUntil) + << LOG_KV("waitResealUntil", m_waitResealUntil) + << LOG_KV("maxTxsToSeal", blockTxCountLimit()) << printCurrentState(); +} + +void PBFTConfig::asyncNotifySealProposal( + size_t _proposalIndex, size_t _proposalEndIndex, size_t _maxTxsToSeal, size_t _retryTime) +{ + if (!m_sealProposalNotifier) + { + return; + } + if (_retryTime > 3) + { + return; + } + auto self = weak_from_this(); + m_sealProposalNotifier(_proposalIndex, _proposalEndIndex, _maxTxsToSeal, + [_proposalIndex, _proposalEndIndex, _maxTxsToSeal, self, _retryTime](Error::Ptr _error) { + if (_error == nullptr) + { + PBFT_LOG(INFO) << LOG_DESC("asyncNotifySealProposal success") + << LOG_KV("startIndex", _proposalIndex) + << LOG_KV("endIndex", _proposalEndIndex) + << LOG_KV("maxTxsToSeal", _maxTxsToSeal); + return; + } + try + { + auto pbftConfig = self.lock(); + if (!pbftConfig) + { + return; + } + // retry after 1 seconds + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + // retry when send failed + pbftConfig->asyncNotifySealProposal( + _proposalIndex, _proposalEndIndex, _maxTxsToSeal, _retryTime + 1); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncNotifySealProposal exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +uint64_t PBFTConfig::minRequiredQuorum() const +{ + return m_minRequiredQuorum; +} + +void PBFTConfig::updateQuorum() +{ + m_totalQuorum.store(0); + ReadGuard lock(x_consensusNodeList); + for (const auto& consensusNode : *m_consensusNodeList) + { + m_totalQuorum += consensusNode->weight(); + } + // get m_maxFaultyQuorum + m_maxFaultyQuorum = (m_totalQuorum - 1) / 3; + m_minRequiredQuorum = m_totalQuorum - m_maxFaultyQuorum; +} + +IndexType PBFTConfig::leaderIndex(BlockNumber _proposalIndex) +{ + return (_proposalIndex / m_leaderSwitchPeriod + m_view) % m_consensusNodeNum; +} + +bool PBFTConfig::leaderAfterViewChange() +{ + auto expectedLeader = leaderIndexInNewViewPeriod(m_toView); + return (m_nodeIndex == expectedLeader); +} + +IndexType PBFTConfig::leaderIndexInNewViewPeriod(ViewType _view) +{ + return leaderIndexInNewViewPeriod(m_progressedIndex, _view); +} + +IndexType PBFTConfig::leaderIndexInNewViewPeriod( + bcos::protocol::BlockNumber _proposalIndex, ViewType _view) +{ + return (_proposalIndex / m_leaderSwitchPeriod + _view) % m_consensusNodeNum; +} + +PBFTProposalInterface::Ptr PBFTConfig::populateCommittedProposal() +{ + ReadGuard lock(x_committedProposal); + if (!m_committedProposal) + { + return nullptr; + } + return m_pbftMessageFactory->populateFrom( + std::dynamic_pointer_cast(m_committedProposal)); +} + +std::string PBFTConfig::printCurrentState() +{ + std::ostringstream stringstream; + if (!committedProposal()) + { + stringstream << LOG_DESC("The storage has not been init."); + return stringstream.str(); + } + stringstream << LOG_KV("committedIndex", committedProposal()->index()) + << LOG_KV("consNum", progressedIndex()) + << LOG_KV("committedHash", committedProposal()->hash().abridged()) + << LOG_KV("view", view()) << LOG_KV("toView", toView()) + << LOG_KV("changeCycle", m_timer->changeCycle()) + << LOG_KV("expectedCheckPoint", m_expectedCheckPoint) << LOG_KV("Idx", nodeIndex()) + << LOG_KV("unsealedTxs", m_unsealedTxsSize.load()) + << LOG_KV("sealUntil", m_waitSealUntil) + << LOG_KV("waitResealUntil", m_waitResealUntil) + << LOG_KV("consensusTimeout", m_consensusTimeout.load()) + << LOG_KV("nodeId", nodeID()->shortHex()); + return stringstream.str(); +} + +void PBFTConfig::tryToSyncTxs() +{ + // should not try to request txs to peer when unsealedTxs > 0 + // only the leader need tryToSyncTxs + if (m_unsealedTxsSize > 0 || m_timer->running() || getLeader() != nodeIndex()) + { + return; + } + PBFT_LOG(INFO) << LOG_DESC("tryToSyncTxs: try to request unsealing txs from peer") + << printCurrentState(); + + if (m_txsStatusSyncHandler) + { + m_txsStatusSyncHandler(); + } +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.h b/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.h new file mode 100644 index 0000000..dddc155 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/config/PBFTConfig.h @@ -0,0 +1,470 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief config for PBFT + * @file PBFTConfig.h + * @author: yujiechen + * @date 2021-04-12 + */ +#pragma once +#include "bcos-pbft/core/ConsensusConfig.h" +#include "bcos-pbft/framework/StateMachineInterface.h" +#include "bcos-pbft/pbft/engine/PBFTTimer.h" +#include "bcos-pbft/pbft/engine/Validator.h" +#include "bcos-pbft/pbft/interfaces/PBFTCodecInterface.h" +#include "bcos-pbft/pbft/interfaces/PBFTMessageFactory.h" +#include "bcos-pbft/pbft/interfaces/PBFTStorage.h" +#include "bcos-pbft/pbft/utilities/Common.h" +#include +#include +#include + +namespace bcos::consensus +{ +class PBFTConfig : public ConsensusConfig, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTConfig(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, + std::shared_ptr _pbftMessageFactory, + std::shared_ptr _codec, std::shared_ptr _validator, + std::shared_ptr _frontService, + StateMachineInterface::Ptr _stateMachine, PBFTStorage::Ptr _storage) + : ConsensusConfig(std::move(_keyPair)), + m_cryptoSuite(std::move(_cryptoSuite)), + m_pbftMessageFactory(std::move(_pbftMessageFactory)), + m_codec(std::move(_codec)), + m_validator(std::move(_validator)), + m_frontService(std::move(_frontService)), + m_stateMachine(std::move(_stateMachine)), + m_storage(std::move(_storage)), + m_connectedNodeList(std::make_shared()) + { + m_timer = std::make_shared(consensusTimeout(), "pbftTimer"); + // Note: the pullTxsTimeout must be smaller than consensusTimeout to fetch txs before + // viewchange when there has no-synced txs pullTxsTimeout is larger than 3000ms + auto pullTxsTimeout = 2000; + m_pullTxsTimer = std::make_shared(pullTxsTimeout, "pullTxsTimer"); + m_pullTxsTimer->registerTimeoutHandler([this] { tryToSyncTxs(); }); + } + + ~PBFTConfig() override = default; + + virtual void stop() + { + // stop the validator + if (m_validator) + { + m_validator->stop(); + } + // destroy the timer + if (m_timer) + { + m_timer->destroy(); + } + if (m_pullTxsTimer) + { + m_pullTxsTimer->destroy(); + } + } + virtual void resetConfig( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, bool _syncedBlock = false); + + uint64_t minRequiredQuorum() const override; + + virtual ViewType view() const { return m_view; } + virtual void setView(ViewType _view) { m_view.store(_view); } + + virtual ViewType toView() const { return m_toView; } + virtual void setToView(ViewType _toView) { m_toView.store(_toView); } + virtual void incToView(ViewType _increasedValue) { m_toView += _increasedValue; } + + virtual IndexType leaderIndex(bcos::protocol::BlockNumber _proposalIndex); + virtual bool leaderAfterViewChange(); + IndexType leaderIndexInNewViewPeriod(ViewType _view); + IndexType leaderIndexInNewViewPeriod( + bcos::protocol::BlockNumber _proposalIndex, ViewType _view); + virtual uint64_t leaderSwitchPeriod() const { return m_leaderSwitchPeriod; } + virtual void setLeaderSwitchPeriod(uint64_t _leaderSwitchPeriod) + { + if (_leaderSwitchPeriod == m_leaderSwitchPeriod) + { + return; + } + m_leaderSwitchPeriod.store(_leaderSwitchPeriod); + // notify the sealer module to reset sealing + notifyResetSealing(sealStartIndex()); + PBFT_LOG(INFO) << METRIC + << LOG_DESC( + "updateLeaderSwitchPeriod and re-notify the sealer to seal block") + << LOG_KV("leader_period", m_leaderSwitchPeriod) + << LOG_KV("committedIndex", committedProposal()->index()); + } + + bcos::crypto::CryptoSuite::Ptr cryptoSuite() { return m_cryptoSuite; } + std::shared_ptr pbftMessageFactory() { return m_pbftMessageFactory; } + std::shared_ptr frontService() { return m_frontService; } + std::shared_ptr codec() { return m_codec; } + + PBFTProposalInterface::Ptr populateCommittedProposal(); + unsigned pbftMsgDefaultVersion() const { return c_pbftMsgDefaultVersion; } + unsigned networkTimeoutInterval() const { return c_networkTimeoutInterval; } + std::shared_ptr validator() { return m_validator; } + PBFTStorage::Ptr storage() { return m_storage; } + + std::string printCurrentState(); + int64_t highWaterMark() { return m_progressedIndex + m_waterMarkLimit; } + int64_t lowWaterMark() { return m_lowWaterMark; } + void setLowWaterMark(bcos::protocol::BlockNumber _index) { m_lowWaterMark = _index; } + + PBFTTimer::Ptr timer() { return m_timer; } + + void setConsensusTimeout(uint64_t _consensusTimeout) override + { + ConsensusConfig::setConsensusTimeout(_consensusTimeout); + m_timer->reset(_consensusTimeout); + } + + void setCommittedProposal(ProposalInterface::Ptr _committedProposal) override + { + ConsensusConfig::setCommittedProposal(_committedProposal); + auto progressedIndex = _committedProposal->index() + 1; + if (progressedIndex > m_expectedCheckPoint) + { + PBFT_LOG(INFO) << LOG_DESC("PBFTConfig: resetExpectedCheckPoint") << printCurrentState() + << LOG_KV("expectedCheckPoint", m_expectedCheckPoint); + m_expectedCheckPoint = _committedProposal->index() + 1; + } + if (progressedIndex > m_lowWaterMark) + { + setLowWaterMark(progressedIndex); + } + } + + int64_t expectedCheckPoint() { return m_expectedCheckPoint; } + void setExpectedCheckPoint(bcos::protocol::BlockNumber _expectedCheckPoint) + { + m_expectedCheckPoint = std::max(committedProposal()->index() + 1, _expectedCheckPoint); + PBFT_LOG(INFO) << LOG_DESC("PBFTConfig: setExpectedCheckPoint") << printCurrentState() + << LOG_KV("expectedCheckPoint", m_expectedCheckPoint); + } + + StateMachineInterface::Ptr stateMachine() { return m_stateMachine; } + + int64_t waterMarkLimit() const { return m_waterMarkLimit; } + void setWaterMarkLimit(int64_t _waterMarkLimit) { m_waterMarkLimit = _waterMarkLimit; } + + int64_t checkPointTimeoutInterval() const { return m_checkPointTimeoutInterval; } + void setCheckPointTimeoutInterval(int64_t _timeoutInterval) + { + m_checkPointTimeoutInterval = _timeoutInterval; + } + + void resetToView() + { + m_toView.store(m_view); + m_timer->resetChangeCycle(); + m_timeoutState.store(false); + } + + uint64_t maxFaultyQuorum() const { return m_maxFaultyQuorum; } + + virtual void notifySealer(bcos::protocol::BlockNumber _progressedIndex, bool _enforce = false); + virtual void reNotifySealer(bcos::protocol::BlockNumber _index); + virtual bool shouldResetConfig(bcos::protocol::BlockNumber _index) + { + ReadGuard l(x_committedProposal); + if (!m_committedProposal) + { + return false; + } + return m_committedProposal->index() < _index; + } + + virtual void setTimeoutState(bool _timeoutState) { m_timeoutState = _timeoutState; } + virtual bool timeout() { return m_timeoutState; } + + virtual void resetTimeoutState(bool _incTimeout = true) + { + m_timeoutState.store(true); + // update toView + incToView(1); + if (_incTimeout) + { + // increase the changeCycle + timer()->incChangeCycle(1); + } + // drop in view change status, set consensus timeout as min seal time + // NOTE: if consensusTimeout == minSealTime, and all nodes use same long minSealTime + // leader will use minSealTime to seal a proposal, and follower will be timeout after + // consensusTimeout, it will cause never reach consensus. + setConsensusTimeout( + std::max(m_consensusTimeout.load(), (uint64_t)m_minSealTime.load() + 1)); + // start the timer again(the timer here must be restarted) + timer()->restart(); + } + + virtual void resetNewViewState(ViewType _view) + { + PBFT_LOG(INFO) << LOG_DESC("resetNewViewState") << LOG_KV("m_view", m_view) + << LOG_KV("_view", _view); + if (m_view > _view) + { + return; + } + if (!m_startRecovered.load()) + { + m_startRecovered.store(true); + } + // reset the timer when reach a new-view + m_timeoutState.store(false); + // reach new view, consensus time recovery to normal + // NOTE: should not recover when reach new view + // if all nodes reach new view, and set consensusTimeout to 3000 + // and all nodes minSealTime > 3000, it will cause consensus always be timeout + // setConsensusTimeout(s_consensusTimeout); + freshTimer(); + // update the changeCycle + timer()->resetChangeCycle(); + setView(_view); + setToView(_view); + m_timeoutState.store(false); + } + virtual void setUnSealedTxsSize(size_t _unsealedTxsSize) + { + m_unsealedTxsSize = _unsealedTxsSize; + if (m_unsealedTxsSize > 0 && !m_timer->running()) + { + m_timer->start(); + } + } + + virtual void freshTimer() + { + if (m_unsealedTxsSize > 0) + { + m_timer->restart(); + m_pullTxsTimer->stop(); + } + else + { + m_timer->stop(); + m_pullTxsTimer->restart(); + } + } + + void registerSealProposalNotifier( + std::function)> + _sealProposalNotifier) + { + m_sealProposalNotifier = std::move(_sealProposalNotifier); + } + + void registerStateNotifier(std::function _stateNotifier) + { + m_stateNotifier = std::move(_stateNotifier); + } + + void registerNewBlockNotifier( + std::function)> + _newBlockNotifier) + { + m_newBlockNotifier = std::move(_newBlockNotifier); + } + + void registerSealerResetNotifier( + std::function)> _sealerResetNotifier) + { + m_sealerResetNotifier = std::move(_sealerResetNotifier); + } + + void registerFaultyDiscriminator( + std::function _faultyDiscriminator) + { + m_faultyDiscriminator = std::move(_faultyDiscriminator); + } + + virtual void notifyResetSealing(bcos::protocol::BlockNumber _consIndex) + { + auto self = weak_from_this(); + notifyResetSealing([self, _consIndex]() { + auto config = self.lock(); + if (!config) + { + return; + } + // notify the sealer to reseal + config->reNotifySealer(_consIndex); + }); + } + + virtual void notifyResetSealing(std::function _callback = nullptr); + + virtual void setWaitResealUntil(bcos::protocol::BlockNumber _waitResealUntil) + { + m_waitResealUntil = _waitResealUntil; + } + + virtual void setWaitSealUntil(bcos::protocol::BlockNumber _waitSealUntil) + { + m_waitSealUntil = std::max(m_waitSealUntil.load(), _waitSealUntil); + } + + void setConsensusNodeList(ConsensusNodeList& _consensusNodeList) override + { + ConsensusConfig::setConsensusNodeList(_consensusNodeList); + if (!m_consensusNodeListUpdated) + { + return; + } + if (committedProposal()) + { + notifyResetSealing(sealStartIndex()); + } + } + + bcos::protocol::BlockNumber sealStartIndex() + { + auto sealStartIndex = expectedCheckPoint(); + if (committedProposal()) + { + sealStartIndex = std::max(sealStartIndex, committedProposal()->index() + 1); + } + return sealStartIndex; + } + + bool canHandleNewProposal(); + bool canHandleNewProposal(PBFTBaseMessageInterface::Ptr _msg); + + void registerFastViewChangeHandler(std::function _fastViewChangeHandler) + { + m_fastViewChangeHandler = std::move(_fastViewChangeHandler); + } + + virtual void setConnectedNodeList(bcos::crypto::NodeIDSet&& _connectedNodeList) + { + WriteGuard l(x_connectedNodeList); + *m_connectedNodeList = std::move(_connectedNodeList); + PBFT_LOG(INFO) << LOG_DESC("setConnectedNodeList") + << LOG_KV("size", m_connectedNodeList->size()); + } + virtual void setConnectedNodeList(bcos::crypto::NodeIDSet const& _connectedNodeList) + { + WriteGuard l(x_connectedNodeList); + *m_connectedNodeList = _connectedNodeList; + } + + virtual bcos::crypto::NodeIDSet connectedNodeList() + { + ReadGuard l(x_connectedNodeList); + return *m_connectedNodeList; + } + + IndexType getLeader() { return leaderIndex(sealStartIndex()); } + + virtual bool tryTriggerFastViewChange(IndexType _leaderIndex); + + virtual bool startRecovered() const { return m_startRecovered; } + + bcos::protocol::BlockNumber waitSealUntil() { return m_waitSealUntil; } + + void setMinSealTime(int64_t _minSealTime) noexcept { this->m_minSealTime = _minSealTime; } + + void registerTxsStatusSyncHandler(std::function const& _txsStatusSyncHandler) + { + m_txsStatusSyncHandler = _txsStatusSyncHandler; + } + +protected: + void updateQuorum() override; + virtual void asyncNotifySealProposal(size_t _proposalIndex, size_t _proposalEndIndex, + size_t _maxTxsToSeal, size_t _retryTime = 0); + + void tryToSyncTxs(); + + +protected: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + // Factory for creating PBFT message package + std::shared_ptr m_pbftMessageFactory; + // Codec for serialization/deserialization of PBFT message packets + std::shared_ptr m_codec; + // Proposal validator + std::shared_ptr m_validator; + // FrontService, used to send/receive P2P message packages + std::shared_ptr m_frontService; + StateMachineInterface::Ptr m_stateMachine; + PBFTStorage::Ptr m_storage; + // Timer, for pbft consensus + PBFTTimer::Ptr m_timer; + // only for pull txs + // trigger start: when m_timer.stop() && unsealTxs.size()==0 + // trigger stop: m_timer.start() + PBFTTimer::Ptr m_pullTxsTimer; + // notify the sealer seal Proposal + std::function)> + m_sealProposalNotifier; + // notify the sealer to reset sealing + std::function)> m_sealerResetNotifier; + + // notify the sealer the latest blockNumber + std::function m_stateNotifier; + // the sync module notify the consensus module the new block + std::function)> + m_newBlockNotifier; + std::atomic m_maxFaultyQuorum = {0}; + std::atomic m_totalQuorum = {0}; + std::atomic m_minRequiredQuorum = {0}; + std::atomic m_view = {0}; + std::atomic m_toView = {0}; + + std::atomic m_expectedCheckPoint = {0}; + std::atomic m_lowWaterMark = {0}; + + std::atomic m_sealStartIndex = {0}; + std::atomic m_sealEndIndex = {0}; + + int64_t m_waterMarkLimit = 50; + std::atomic m_checkPointTimeoutInterval = {3000}; + std::atomic m_minSealTime = {3000}; + + std::atomic m_leaderSwitchPeriod = {1}; + const unsigned c_pbftMsgDefaultVersion = 0; + const unsigned c_networkTimeoutInterval = 1000; + // state variable that identifies whether it has timed out + std::atomic_bool m_timeoutState = {false}; + + std::atomic m_unsealedTxsSize = {0}; + // notify the sealer to reseal new block until m_waitResealUntil stable committed + std::atomic m_waitResealUntil = {0}; + // notify the sealer to seal new block until m_waitSealUntil committed + std::atomic m_waitSealUntil = {0}; + + bcos::crypto::NodeIDSetPtr m_connectedNodeList; + SharedMutex x_connectedNodeList; + + std::function m_fastViewChangeHandler; + + std::atomic_bool m_startRecovered = {false}; + + std::function m_faultyDiscriminator; + + mutable RecursiveMutex m_mutex; + + // handler to notify txs status and try to request txs from peers + std::function m_txsStatusSyncHandler; +}; +} // namespace bcos::consensus diff --git a/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.cpp b/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.cpp new file mode 100644 index 0000000..06a3786 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.cpp @@ -0,0 +1,182 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief validator for the block from the sync module + * @file BlockValidator.cpp + * @author: yujiechen + * @date 2021-05-25 + */ +#include "BlockValidator.h" +#include "../utilities/Common.h" +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; + +// check the block +void BlockValidator::asyncCheckBlock( + Block::Ptr _block, std::function _onVerifyFinish) +{ + auto self = weak_from_this(); + m_taskPool->enqueue([self, _block, _onVerifyFinish]() { + auto blockHeader = _block->blockHeader(); + // ignore the genesis block + if (blockHeader->number() == 0) + { + _onVerifyFinish(nullptr, true); + return; + } + try + { + auto validator = self.lock(); + if (!validator) + { + _onVerifyFinish(nullptr, false); + return; + } + auto config = validator->m_config; + if (blockHeader->number() <= config->committedProposal()->index()) + { + _onVerifyFinish(nullptr, false); + return; + } + if (_block->transactionsSize() == 0) + { + _onVerifyFinish(nullptr, true); + return; + } + if (!validator->checkSealerListAndWeightList(_block)) + { + _onVerifyFinish(nullptr, false); + return; + } + if (!validator->checkSignatureList(_block)) + { + _onVerifyFinish(nullptr, false); + return; + } + _onVerifyFinish(nullptr, true); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncCheckBlock exception") + << LOG_KV("error", boost::diagnostic_information(e)); + _onVerifyFinish(nullptr, false); + } + }); +} + +bool BlockValidator::checkSealerListAndWeightList(Block::Ptr _block) +{ + // Note: for tars service, blockHeader must be here to ensure the sealer list not been released + auto blockHeader = _block->blockHeader(); + // check sealer(sealer must be a consensus node) + if (!m_config->getConsensusNodeByIndex(blockHeader->sealer())) + { + PBFT_LOG(ERROR) + << LOG_DESC("checkBlock for sync module: invalid sealer for not a consensus node") + << LOG_KV("sealer", blockHeader->sealer()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("number", blockHeader->number()); + return false; + } + // check the sealer list + auto blockSealerList = blockHeader->sealerList(); + auto blockWeightList = blockHeader->consensusWeights(); + auto consensusNodeList = m_config->consensusNodeList(); + if ((size_t)blockSealerList.size() != (size_t)consensusNodeList.size() || + (size_t)blockWeightList.size() != (size_t)consensusNodeList.size()) + { + PBFT_LOG(ERROR) << LOG_DESC("checkBlock for sync module: wrong sealerList") + << LOG_KV("Nsealer", consensusNodeList.size()) + << LOG_KV("NBlockSealer", blockSealerList.size()) + << LOG_KV("NBlockWeight", blockWeightList.size()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("number", blockHeader->number()) << m_config->printCurrentState(); + return false; + } + size_t i = 0; + for (auto const& blockSealer : blockSealerList) + { + auto consNodePtr = consensusNodeList[i]; + if (consNodePtr->nodeID()->data() != blockSealer) + { + PBFT_LOG(ERROR) << LOG_DESC("checkBlock for sync module: inconsistent sealerList") + << LOG_KV("blkSealer", consNodePtr->nodeID()->shortHex()) + << LOG_KV("chainSealer", *toHexString(blockSealer)) + << LOG_KV("number", blockHeader->number()) + << LOG_KV("weight", consNodePtr->weight()) + << m_config->printCurrentState(); + return false; + } + // check weight + auto blockWeight = blockWeightList[i]; + if (consNodePtr->weight() != blockWeight) + { + PBFT_LOG(ERROR) << LOG_DESC("checkBlock for sync module: inconsistent weight") + << LOG_KV("blkWeight", blockWeight) + << LOG_KV("chainWeight", consNodePtr->weight()) + << LOG_KV("number", blockHeader->number()) + << LOG_KV("blkSealer", consNodePtr->nodeID()->shortHex()) + << LOG_KV("chainSealer", *toHexString(blockSealer)) + << m_config->printCurrentState(); + return false; + } + i++; + } + return true; +} + +bool BlockValidator::checkSignatureList(Block::Ptr _block) +{ + // check sign num + // Note: for tars service, blockHeader must be here to ensure the signatureList + auto blockHeader = _block->blockHeader(); + auto signatureList = blockHeader->signatureList(); + // check sign and weight + size_t signatureWeight = 0; + for (auto const& sign : signatureList) + { + auto nodeIndex = sign.index; + auto nodeInfo = m_config->getConsensusNodeByIndex(nodeIndex); + auto signatureData = ref(sign.signature); + if (!signatureData.data()) + { + PBFT_LOG(FATAL) << LOG_DESC("BlockValidator checkSignatureList: invalid signature") + << LOG_KV("signatureSize", signatureList.size()) + << LOG_KV("nodeIndex", nodeIndex) + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()); + } + if (!nodeInfo || !m_config->cryptoSuite()->signatureImpl()->verify( + nodeInfo->nodeID(), blockHeader->hash(), signatureData)) + { + PBFT_LOG(ERROR) << LOG_DESC("checkBlock for sync module: checkSign failed") + << LOG_KV("sealerIdx", nodeIndex) + << LOG_KV("blockHash", blockHeader->hash().abridged()) + << LOG_KV("number", blockHeader->number()); + return false; + } + signatureWeight += nodeInfo->weight(); + } + if (signatureWeight < (size_t)m_config->minRequiredQuorum()) + { + PBFT_LOG(ERROR) << LOG_DESC("checkBlock for sync module: insufficient signatures") + << LOG_KV("signNum", signatureList.size()) + << LOG_KV("sigWeight", signatureWeight) + << LOG_KV("minRequiredQuorum", m_config->minRequiredQuorum()); + return false; + } + return true; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.h b/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.h new file mode 100644 index 0000000..ec46217 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/BlockValidator.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief validator for the block from the sync module + * @file BlockValidator.h + * @author: yujiechen + * @date 2021-05-25 + */ +#pragma once +#include "../config/PBFTConfig.h" +#include +#include +namespace bcos +{ +namespace consensus +{ +class BlockValidator : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + explicit BlockValidator(PBFTConfig::Ptr _config) + : m_config(_config), m_taskPool(std::make_shared("blockValidator", 1)) + {} + virtual ~BlockValidator() {} + + virtual void asyncCheckBlock( + bcos::protocol::Block::Ptr _block, std::function _onVerifyFinish); + + virtual void stop() + { + if (m_taskPool) + { + m_taskPool->stop(); + } + } + +protected: + virtual bool checkSealerListAndWeightList(bcos::protocol::Block::Ptr _block); + virtual bool checkSignatureList(bcos::protocol::Block::Ptr _block); + +private: + PBFTConfig::Ptr m_config; + ThreadPool::Ptr m_taskPool; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.cpp b/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.cpp new file mode 100644 index 0000000..5388f42 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.cpp @@ -0,0 +1,1660 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTEngine + * @file PBFTEngine.cpp + * @author: yujiechen + * @date 2021-04-20 + */ +#include "PBFTEngine.h" +#include "../cache/PBFTCacheFactory.h" +#include "../cache/PBFTCacheProcessor.h" +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::ledger; +using namespace bcos::front; +using namespace bcos::crypto; +using namespace bcos::protocol; + +PBFTEngine::PBFTEngine(PBFTConfig::Ptr _config) + : ConsensusEngine("pbft", 0), + m_config(_config), + m_worker(std::make_shared("pbftWorker", 1)), + m_msgQueue(std::make_shared()) +{ + auto cacheFactory = std::make_shared(); + m_cacheProcessor = std::make_shared(cacheFactory, _config); + m_logSync = std::make_shared(m_config, m_cacheProcessor); + // register the timeout function + m_config->timer()->registerTimeoutHandler(boost::bind(&PBFTEngine::onTimeout, this)); + m_config->storage()->registerFinalizeHandler(boost::bind( + &PBFTEngine::finalizeConsensus, this, boost::placeholders::_1, boost::placeholders::_2)); + + m_config->storage()->registerOnStableCheckPointCommitFailed( + [this](Error::Ptr&& _error, PBFTProposalInterface::Ptr _stableProposal) { + onStableCheckPointCommitFailed(std::move(_error), std::move(_stableProposal)); + }); + + m_config->registerFastViewChangeHandler([this]() { triggerTimeout(false); }); + m_cacheProcessor->registerProposalAppliedHandler(boost::bind(&PBFTEngine::onProposalApplied, + this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3)); + + m_cacheProcessor->registerOnLoadAndVerifyProposalFinish( + boost::bind(&PBFTEngine::onLoadAndVerifyProposalFinish, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + initSendResponseHandler(); + // when the node first setup, set timeout to be true for view recovery + // set timeout to be true to in case of notify-seal before the PBFTEngine + // started + m_config->setTimeoutState(true); + + // Timer is used to manage checkpoint timeout + m_timer = + std::make_shared(m_config->checkPointTimeoutInterval(), "checkPointResendTimer"); +} + +void PBFTEngine::initSendResponseHandler() +{ + // set the sendResponse callback + std::weak_ptr weakFrontService = m_config->frontService(); + m_sendResponseHandler = [weakFrontService](std::string const& _id, int _moduleID, + NodeIDPtr _dstNode, bytesConstRef _data) { + try + { + auto frontService = weakFrontService.lock(); + if (!frontService) + { + return; + } + frontService->asyncSendResponse( + _id, _moduleID, _dstNode, _data, [_id, _moduleID, _dstNode](Error::Ptr _error) { + if (_error) + { + PBFT_LOG(WARNING) << LOG_DESC("sendResponse failed") << LOG_KV("uuid", _id) + << LOG_KV("module", std::to_string(_moduleID)) + << LOG_KV("dst", _dstNode->shortHex()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("sendResponse exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("uuid", _id) << LOG_KV("moduleID", _moduleID) + << LOG_KV("peer", _dstNode->shortHex()); + } + }; +} + +void PBFTEngine::start() +{ + ConsensusEngine::start(); + // when the node setup, start the timer for view recovery + m_config->timer()->start(); + // register timeout handler + auto self = weak_from_this(); + m_timer->registerTimeoutHandler([self]() { + try + { + auto engine = self.lock(); + if (!engine) + { + return; + } + engine->tryToResendCheckPoint(); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("tryToResendCheckPoint error") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + }); + m_timer->start(); + // trigger fast viewchange to reachNewView + if (!m_config->startRecovered()) + { + triggerTimeout(false); + } +} + +void PBFTEngine::tryToResendCheckPoint() +{ + { + RecursiveGuard l(m_mutex); + m_cacheProcessor->tryToResendCheckPoint(); + } + m_timer->restart(); +} + +void PBFTEngine::restart() +{ + PBFT_LOG(INFO) << LOG_DESC("restart the consensus module"); + m_config->enableAsMasterNode(true); + triggerTimeout(false); +} + +void PBFTEngine::stop() +{ + if (m_stopped.load()) + { + PBFT_LOG(WARNING) << LOG_DESC("The PBFTEngine already been stopped!"); + return; + } + m_stopped.store(true); + ConsensusEngine::stop(); + if (m_worker) + { + m_worker->stop(); + } + if (m_logSync) + { + m_logSync->stop(); + } + if (m_config) + { + m_config->stop(); + } + if (m_timer) + { + m_timer->stop(); + } + PBFT_LOG(INFO) << LOG_DESC("stop the PBFTEngine"); +} + +void PBFTEngine::onLoadAndVerifyProposalFinish( + bool _verifyResult, Error::Ptr _error, PBFTProposalInterface::Ptr _proposal) +{ + // loadAndVerify proposal failed + if (_error || !_verifyResult) + { + RecursiveGuard l(m_mutex); + m_cacheProcessor->clearCacheAfterRecoverStateFailed(); + return; + } + // must add lock here to ensure thread-safe + RecursiveGuard l(m_mutex); + m_cacheProcessor->updateCommitQueue(_proposal); + // Note: The node that obtains the consensus proposal by request + // proposal from othe nodes will also broadcast the checkPoint message packet, + // Therefore, the node may also be requested by other nodes. + // Therefore, it must be ensured that the obtained proposal is updated to the + // preCommitCache. + m_cacheProcessor->updatePrecommit(_proposal); + m_config->timer()->restart(); +} + +void PBFTEngine::onProposalApplyFailed(int64_t _errorCode, PBFTProposalInterface::Ptr _proposal) +{ + if (!m_config->asMasterNode()) + { + PBFT_LOG(WARNING) << LOG_DESC( + "onProposalApplyFailed: proposal execute failed, but do nothing " + "for the node-self is not " + "the master node") + << printPBFTProposal(_proposal) << m_config->printCurrentState(); + return; + } + PBFT_LOG(WARNING) << LOG_DESC("proposal execute failed") << printPBFTProposal(_proposal) + << m_config->printCurrentState(); + // Note: must add lock here to ensure thread-safe + RecursiveGuard l(m_mutex); + if (_errorCode == bcos::scheduler::SchedulerError::InvalidBlocks) + { + PBFT_LOG(INFO) << LOG_DESC("fetchAndUpdateLedgerConfig for InvalidBlocks"); + fetchAndUpdateLedgerConfig(); + } + // re-push the proposal into the queue + if (_proposal->index() >= m_config->committedProposal()->index() || + _proposal->index() >= m_config->syncingHighestNumber()) + { + m_config->timer()->restart(); + PBFT_LOG(INFO) << LOG_DESC( + "proposal execute failed and re-push the proposal " + "into the cache") + << printPBFTProposal(_proposal); + // Note: must erase the proposal firstly for updateCommitQueue will not + // receive the duplicated executing proposal + m_cacheProcessor->eraseExecutedProposal(_proposal->hash()); + // retry after 20ms + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + m_cacheProcessor->updateCommitQueue(_proposal); + return; + } + m_config->setExpectedCheckPoint(m_config->committedProposal()->index() + 1); + m_cacheProcessor->eraseExecutedProposal(_proposal->hash()); +} + +void PBFTEngine::onProposalApplySuccess( + PBFTProposalInterface::Ptr _proposal, PBFTProposalInterface::Ptr _executedProposal) +{ + // commit the proposal when execute success + m_config->storage()->asyncCommitProposal(_proposal); + + // broadcast checkpoint message + auto checkPointMsg = m_config->pbftMessageFactory()->populateFrom(PacketType::CheckPoint, + m_config->pbftMsgDefaultVersion(), m_config->view(), utcTime(), m_config->nodeIndex(), + _executedProposal, m_config->cryptoSuite(), m_config->keyPair(), true); + + auto encodedData = m_config->codec()->encode(checkPointMsg); + // only broadcast message to the consensus nodes + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + auto startT = utcTime(); + auto recordT = utcTime(); + // Note: must lock here to ensure thread safe + RecursiveGuard l(m_mutex); + auto lockT = (utcTime() - startT); + // restart the timer when proposal execute finished to in case of timeout + if (m_config->timer()->running()) + { + m_config->timer()->restart(); + } + m_cacheProcessor->addCheckPointMsg(checkPointMsg); + m_cacheProcessor->setCheckPointProposal(_executedProposal); + auto currentExpectedCheckPoint = m_config->expectedCheckPoint(); + if (currentExpectedCheckPoint < _executedProposal->index()) + { + PBFT_LOG(WARNING) << LOG_DESC( + "onProposalApplySuccess: maybe the consensus state has been " + "changed, not reset the expectedCheckPoint") + << LOG_KV("expectedCheckPoint", currentExpectedCheckPoint) + << LOG_KV("index", checkPointMsg->index()) + << LOG_KV("hash", checkPointMsg->hash().abridged()); + } + else + { + m_config->setExpectedCheckPoint(_executedProposal->index() + 1); + } + m_cacheProcessor->checkAndCommitStableCheckPoint(); + m_cacheProcessor->tryToApplyCommitQueue(); + m_cacheProcessor->eraseExecutedProposal(_proposal->hash()); + PBFT_LOG(INFO) << LOG_DESC("onProposalApplySuccess") << LOG_KV("index", checkPointMsg->index()) + << LOG_KV("hash", checkPointMsg->hash().abridged()) << LOG_KV("lockT", lockT) + << LOG_KV("timecost", (utcTime() - recordT)); +} + +// called after proposal executed successfully +void PBFTEngine::onProposalApplied(int64_t _errorCode, PBFTProposalInterface::Ptr _proposal, + PBFTProposalInterface::Ptr _executedProposal) +{ + auto self = weak_from_this(); + m_worker->enqueue([self, _errorCode, _proposal, _executedProposal]() { + try + { + auto engine = self.lock(); + if (!engine) + { + return; + } + if (_errorCode != 0) + { + engine->onProposalApplyFailed(_errorCode, _proposal); + return; + } + engine->onProposalApplySuccess(_proposal, _executedProposal); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("onProposalApplied exception") + << printPBFTProposal(_executedProposal) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void PBFTEngine::asyncSubmitProposal(bool _containSysTxs, bytesConstRef _proposalData, + BlockNumber _proposalIndex, HashType const& _proposalHash, + std::function _onProposalSubmitted) +{ + if (_onProposalSubmitted) + { + _onProposalSubmitted(nullptr); + } + onRecvProposal(_containSysTxs, _proposalData, _proposalIndex, _proposalHash); +} + +void PBFTEngine::onRecvProposal(bool _containSysTxs, bytesConstRef _proposalData, + BlockNumber _proposalIndex, HashType const& _proposalHash) +{ + if (_proposalData.size() == 0) + { + return; + } + if (!m_config->isConsensusNode()) + { + return; + } + // expired proposal + auto consProposalIndex = m_config->committedProposal()->index() + 1; + if (_proposalIndex <= m_config->syncingHighestNumber()) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncSubmitProposal failed for expired index") + << LOG_KV("index", _proposalIndex) + << LOG_KV("hash", _proposalHash.abridged()) + << m_config->printCurrentState() + << LOG_KV("syncingHighestNumber", m_config->syncingHighestNumber()); + m_config->notifyResetSealing(consProposalIndex); + m_config->validator()->asyncResetTxsFlag(_proposalData, false, true); + return; + } + if (_proposalIndex <= m_config->committedProposal()->index() || + _proposalIndex < m_config->expectedCheckPoint() || + _proposalIndex < m_config->lowWaterMark()) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncSubmitProposal failed for invalid index") + << LOG_KV("index", _proposalIndex) + << LOG_KV("hash", _proposalHash.abridged()) + << m_config->printCurrentState() + << LOG_KV("lowWaterMark", m_config->lowWaterMark()); + return; + } + auto leaderIndex = m_config->leaderIndex(_proposalIndex); + if (leaderIndex != m_config->nodeIndex()) + { + PBFT_LOG(WARNING) << LOG_DESC( + "asyncSubmitProposal failed for the node-self is not the leader") + << LOG_KV("expectedLeader", leaderIndex) + << LOG_KV("index", _proposalIndex) + << LOG_KV("hash", _proposalHash.abridged()) + << m_config->printCurrentState(); + m_config->notifyResetSealing(consProposalIndex); + m_config->validator()->asyncResetTxsFlag(_proposalData, false, true); + return; + } + PBFT_LOG(INFO) << LOG_DESC("asyncSubmitProposal") << LOG_KV("index", _proposalIndex) + << LOG_KV("hash", _proposalHash.abridged()) << m_config->printCurrentState(); + // generate the pre-prepare packet + auto pbftProposal = m_config->pbftMessageFactory()->createPBFTProposal(); + pbftProposal->setData(_proposalData); + pbftProposal->setIndex(_proposalIndex); + pbftProposal->setHash(_proposalHash); + pbftProposal->setSealerId(m_config->nodeIndex()); + pbftProposal->setSystemProposal(_containSysTxs); + + auto pbftMessage = + m_config->pbftMessageFactory()->populateFrom(PacketType::PrePreparePacket, pbftProposal, + m_config->pbftMsgDefaultVersion(), m_config->view(), utcTime(), m_config->nodeIndex()); + PBFT_LOG(INFO) << LOG_DESC("++++++++++++++++ Generating seal on") + << LOG_KV("index", pbftMessage->index()) << LOG_KV("Idx", m_config->nodeIndex()) + << LOG_KV("hash", pbftMessage->hash().abridged()) + << LOG_KV("sysProposal", pbftProposal->systemProposal()); + + // handle the pre-prepare packet + RecursiveGuard l(m_mutex); + auto ret = handlePrePrepareMsg(pbftMessage, false, false, false); + // only broadcast the prePrepareMsg when local handlePrePrepareMsg success + if (ret) + { + // broadcast the pre-prepare packet + auto encodedData = m_config->codec()->encode(pbftMessage); + // only broadcast pbft message to the consensus nodes + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + } + else + { + resetSealedTxs(pbftMessage); + } +} + +void PBFTEngine::resetSealedTxs(std::shared_ptr _prePrepareMsg) +{ + if (_prePrepareMsg->generatedFrom() != m_config->nodeIndex()) + { + return; + } + m_config->notifyResetSealing(); + m_config->validator()->asyncResetTxsFlag(_prePrepareMsg->consensusProposal()->data(), false); +} + +// receive the new block notification from the sync module +void PBFTEngine::asyncNotifyNewBlock( + LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) +{ + if (_onRecv) + { + _onRecv(nullptr); + } + if (m_config->shouldResetConfig(_ledgerConfig->blockNumber())) + { + PBFT_LOG(INFO) << LOG_DESC("The sync module notify the latestBlock") + << LOG_KV("index", _ledgerConfig->blockNumber()) + << LOG_KV("hash", _ledgerConfig->hash().abridged()); + finalizeConsensus(_ledgerConfig, true); + } +} + +void PBFTEngine::onReceivePBFTMessage( + bcos::Error::Ptr _error, std::string const& _id, NodeIDPtr _nodeID, bytesConstRef _data) +{ + auto self = weak_from_this(); + onReceivePBFTMessage( + std::move(_error), _nodeID, _data, [_id, _nodeID, self](bytesConstRef _respData) { + try + { + auto engine = self.lock(); + if (!engine) + { + return; + } + engine->m_sendResponseHandler(_id, ModuleID::PBFT, _nodeID, _respData); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("onReceivePBFTMessage exception") + << LOG_KV("fromNode", _nodeID->hex()) << LOG_KV("uuid", _id) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void PBFTEngine::onReceivePBFTMessage(Error::Ptr _error, NodeIDPtr _fromNode, bytesConstRef _data, + SendResponseCallback _sendResponseCallback) +{ + try + { + if (_error != nullptr) + { + return; + } + // the node is not the consensusNode + if (!m_config->isConsensusNode()) + { + PBFT_LOG(TRACE) << LOG_DESC( + "onReceivePBFTMessage: reject the message " + "for the node is not the consensus " + "node"); + return; + } + // decode the message and push the message into the queue + auto pbftMsg = m_config->codec()->decode(_data); + pbftMsg->setFrom(_fromNode); + // the committed proposal request message + if (pbftMsg->packetType() == PacketType::CommittedProposalRequest) + { + auto self = weak_from_this(); + m_worker->enqueue([self, pbftMsg, _sendResponseCallback]() { + try + { + auto pbftEngine = self.lock(); + if (!pbftEngine) + { + return; + } + pbftEngine->onReceiveCommittedProposalRequest(pbftMsg, _sendResponseCallback); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("onReceiveCommittedProposalRequest exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + return; + } + // the precommitted proposals request message + if (pbftMsg->packetType() == PacketType::PreparedProposalRequest) + { + auto self = weak_from_this(); + m_worker->enqueue([self, pbftMsg, _sendResponseCallback]() { + try + { + auto pbftEngine = self.lock(); + if (!pbftEngine) + { + return; + } + pbftEngine->onReceivePrecommitRequest(pbftMsg, _sendResponseCallback); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("onReceivePrecommitRequest exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + return; + } + m_msgQueue->push(pbftMsg); + m_signalled.notify_all(); + } + catch (std::exception const& _e) + { + PBFT_LOG(WARNING) << LOG_DESC("onReceivePBFTMessage exception") + << LOG_KV("fromNode", _fromNode->hex()) + << LOG_KV("Idx", m_config->nodeIndex()) + << LOG_KV("nodeId", m_config->nodeID()->hex()) + << LOG_KV("error", boost::diagnostic_information(_e)); + } +} + +void PBFTEngine::clearAllCache() +{ + RecursiveGuard l(m_mutex); + m_cacheProcessor->clearAllCache(); +} + +void PBFTEngine::executeWorker() +{ + // the node is not the consensusNode + if (!m_config->isConsensusNode()) + { + waitSignal(); + return; + } + // when the node is syncing, not handle the PBFT message + if (isSyncingHigher()) + { + waitSignal(); + return; + } + // handle the PBFT message(here will wait when the msgQueue is empty) + auto messageResult = m_msgQueue->tryPop(c_PopWaitSeconds); + auto empty = m_msgQueue->empty(); + if (messageResult.first) + { + auto pbftMsg = messageResult.second; + auto packetType = pbftMsg->packetType(); + // can't handle the future consensus messages when handling the system + // proposal + if ((c_consensusPacket.count(packetType)) && !m_config->canHandleNewProposal(pbftMsg)) + { +#if 0 + PBFT_LOG(TRACE) << LOG_DESC( + "receive consensus packet, re-push it to the msgQueue for " + "canHandleNewProposal") + << LOG_KV("index", pbftMsg->index()) << LOG_KV("type", packetType) + << m_config->printCurrentState(); +#endif + m_msgQueue->push(pbftMsg); + if (empty) + { + waitSignal(); + } + return; + } + handleMsg(pbftMsg); + } + // wait for PBFTMsg + else + { + waitSignal(); + } +} + +void PBFTEngine::handleMsg(std::shared_ptr _msg) +{ + // check the view + if (_msg->view() > MaxView) + { + PBFT_LOG(WARNING) << LOG_DESC("handleMsg: reject msg with invalid view") + << printPBFTMsgInfo(_msg); + return; + } + RecursiveGuard l(m_mutex); + switch (_msg->packetType()) + { + case PacketType::PrePreparePacket: + { + PBFT_LOG(INFO) << LOG_DESC("prePrepareMsg"); + auto prePrepareMsg = std::dynamic_pointer_cast(_msg); + handlePrePrepareMsg(prePrepareMsg, true); + break; + } + case PacketType::PreparePacket: + { + PBFT_LOG(INFO) << LOG_DESC("PrepareMsg"); + auto prepareMsg = std::dynamic_pointer_cast(_msg); + handlePrepareMsg(prepareMsg); + break; + } + case PacketType::CommitPacket: + { + PBFT_LOG(INFO) << LOG_DESC("CommitMsg+ skip------------------"); + auto commitMsg = std::dynamic_pointer_cast(_msg); + handleCommitMsg(commitMsg); + break; + } + case PacketType::ViewChangePacket: + { + PBFT_LOG(INFO) << LOG_DESC("ViewChangeMsg"); + auto viewChangeMsg = std::dynamic_pointer_cast(_msg); + handleViewChangeMsg(viewChangeMsg); + break; + } + case PacketType::NewViewPacket: + { + PBFT_LOG(INFO) << LOG_DESC("NewViewMsg"); + auto newViewMsg = std::dynamic_pointer_cast(_msg); + handleNewViewMsg(newViewMsg); + break; + } + case PacketType::CheckPoint: + { + auto checkPointMsg = std::dynamic_pointer_cast(_msg); + handleCheckPointMsg(checkPointMsg); + break; + } + case PacketType::RecoverRequest: + { + auto request = std::dynamic_pointer_cast(_msg); + handleRecoverRequest(request); + break; + } + case PacketType::RecoverResponse: + { + auto recoverResponse = std::dynamic_pointer_cast(_msg); + handleRecoverResponse(recoverResponse); + break; + } + default: + { + PBFT_LOG(WARNING) << LOG_DESC("handleMsg: unknown PBFT message") + << LOG_KV("type", std::to_string(_msg->packetType())) + << LOG_KV("genIdx", _msg->generatedFrom()) + << LOG_KV("nodeSelf", m_config->nodeID()->hex()); + return; + } + } +} + +CheckResult PBFTEngine::checkPBFTMsgState(PBFTMessageInterface::Ptr _pbftReq) const +{ + if (!_pbftReq->consensusProposal()) + { + return CheckResult::INVALID; + } + bool proposalCommitted = m_cacheProcessor->proposalCommitted(_pbftReq->index()); + if (_pbftReq->index() < m_config->lowWaterMark() || + _pbftReq->index() < m_config->expectedCheckPoint() || + _pbftReq->index() <= m_config->syncingHighestNumber() || proposalCommitted) + { + PBFT_LOG(DEBUG) << LOG_DESC("checkPBFTMsgState: invalid pbftMsg for invalid index") + << LOG_KV("highWaterMark", m_config->highWaterMark()) + << LOG_KV("lowWaterMark", m_config->lowWaterMark()) + << printPBFTMsgInfo(_pbftReq) << m_config->printCurrentState() + << LOG_KV("syncingNumber", m_config->syncingHighestNumber()) + << LOG_KV("proposalCommitted", proposalCommitted); + return CheckResult::INVALID; + } + // case index equal + if (_pbftReq->view() < m_config->view()) + { + PBFT_LOG(DEBUG) << LOG_DESC("checkPBFTMsgState: invalid pbftMsg for invalid view") + << printPBFTMsgInfo(_pbftReq) << m_config->printCurrentState(); + return CheckResult::INVALID; + } + return CheckResult::VALID; +} + +CheckResult PBFTEngine::checkPrePrepareMsg(std::shared_ptr _prePrepareMsg) +{ + if (checkPBFTMsgState(_prePrepareMsg) == CheckResult::INVALID) + { + return CheckResult::INVALID; + } + // check the existence of the msg + if (m_cacheProcessor->existPrePrepare(_prePrepareMsg)) + { + PBFT_LOG(DEBUG) << LOG_DESC("handlePrePrepareMsg: duplicated") + << LOG_KV("committedIndex", m_config->committedProposal()->index()) + << LOG_KV("recvIndex", _prePrepareMsg->index()) + << LOG_KV("hash", _prePrepareMsg->hash().abridged()) + << m_config->printCurrentState(); + return CheckResult::INVALID; + } + // already has prePrepare msg + if (m_cacheProcessor->conflictWithProcessedReq(_prePrepareMsg)) + { + return CheckResult::INVALID; + } + // check conflict + if (m_cacheProcessor->conflictWithPrecommitReq(_prePrepareMsg)) + { + return CheckResult::INVALID; + } + return CheckResult::VALID; +} + +CheckResult PBFTEngine::checkSignature(PBFTBaseMessageInterface::Ptr _req) +{ + // check the signature + auto nodeInfo = m_config->getConsensusNodeByIndex(_req->generatedFrom()); + if (!nodeInfo) + { + PBFT_LOG(WARNING) << LOG_DESC("checkSignature failed for the node is not a consensus node") + << printPBFTMsgInfo(_req); + return CheckResult::INVALID; + } + auto publicKey = nodeInfo->nodeID(); + if (!_req->verifySignature(m_config->cryptoSuite(), publicKey)) + { + PBFT_LOG(WARNING) << LOG_DESC("checkSignature failed for invalid signature") + << printPBFTMsgInfo(_req); + return CheckResult::INVALID; + } + return CheckResult::VALID; +} + +bool PBFTEngine::checkProposalSignature( + IndexType _generatedFrom, PBFTProposalInterface::Ptr _proposal) +{ + if (!_proposal || _proposal->signature().size() == 0) + { + return false; + } + auto nodeInfo = m_config->getConsensusNodeByIndex(_generatedFrom); + if (!nodeInfo) + { + PBFT_LOG(WARNING) << LOG_DESC( + "checkProposalSignature failed for the node " + "is not a consensus node") + << printPBFTProposal(_proposal); + return false; + } + + return m_config->cryptoSuite()->signatureImpl()->verify( + nodeInfo->nodeID(), _proposal->hash(), _proposal->signature()); +} + +bool PBFTEngine::isSyncingHigher() +{ + auto committedIndex = m_config->committedProposal()->index(); + auto syncNumber = m_config->syncingHighestNumber(); + if (syncNumber < (committedIndex + m_config->waterMarkLimit())) + { + return false; + } + return true; +} + +bool PBFTEngine::handlePrePrepareMsg(PBFTMessageInterface::Ptr _prePrepareMsg, + bool _needVerifyProposal, bool _generatedFromNewView, bool _needCheckSignature) +{ + if (isSyncingHigher()) + { + PBFT_LOG(INFO) << LOG_DESC( + "handlePrePrepareMsg: reject the prePrepareMsg " + "for the node is syncing") + << LOG_KV("committedIndex", m_config->committedProposal()->index()) + << LOG_KV("recvIndex", _prePrepareMsg->index()) + << LOG_KV("hash", _prePrepareMsg->hash().abridged()) + << LOG_KV("syncingNum", m_config->syncingHighestNumber()) + << m_config->printCurrentState(); + return false; + } + if (m_cacheProcessor->executingProposals().count(_prePrepareMsg->hash())) + { + PBFT_LOG(DEBUG) << LOG_DESC( + "handlePrePrepareMsg: reject the prePrepareMsg " + "for the proposal is executing") + << LOG_KV("committedIndex", m_config->committedProposal()->index()) + << LOG_KV("recvIndex", _prePrepareMsg->index()) + << LOG_KV("hash", _prePrepareMsg->hash().abridged()) + << m_config->printCurrentState(); + return false; + } + PBFT_LOG(INFO) << LOG_DESC("handlePrePrepareMsg") << printPBFTMsgInfo(_prePrepareMsg) + << m_config->printCurrentState(); + + auto result = checkPrePrepareMsg(_prePrepareMsg); + if (result == CheckResult::INVALID) + { + return false; + } + if (!_generatedFromNewView) + { + // packet can be processed in this round of consensus + // check the proposal is generated from the leader + auto expectedLeader = m_config->leaderIndex(_prePrepareMsg->index()); + if (expectedLeader != _prePrepareMsg->generatedFrom()) + { + PBFT_LOG(TRACE) << LOG_DESC( + "handlePrePrepareMsg: invalid packet for not from the leader") + << printPBFTMsgInfo(_prePrepareMsg) << m_config->printCurrentState() + << LOG_KV("expectedLeader", expectedLeader); + return false; + } + if (_needCheckSignature) + { + // check the signature + result = checkSignature(_prePrepareMsg); + if (result == CheckResult::INVALID) + { + m_config->notifySealer(_prePrepareMsg->index(), true); + return false; + } + } + } + // add the prePrepareReq to the cache + if (!_needVerifyProposal) + { + // Note: must reset the txs to be sealed no matter verify success or failed + // because some nodes may verify failed for timeout, while other nodes may + // verify success + m_config->validator()->asyncResetTxsFlag(_prePrepareMsg->consensusProposal()->data(), true); + // add the pre-prepare packet into the cache + m_cacheProcessor->addPrePrepareCache(_prePrepareMsg); + m_config->timer()->restart(); + // broadcast PrepareMsg the packet + broadcastPrepareMsg(_prePrepareMsg); + PBFT_LOG(INFO) << LOG_DESC("handlePrePrepareMsg and broadcast prepare packet") + << printPBFTMsgInfo(_prePrepareMsg) << m_config->printCurrentState(); + m_cacheProcessor->checkAndPreCommit(); + return true; + } + // verify the proposal + auto self = weak_from_this(); + auto leaderNodeInfo = m_config->getConsensusNodeByIndex(_prePrepareMsg->generatedFrom()); + if (!leaderNodeInfo) + { + return false; + } + m_config->validator()->verifyProposal(leaderNodeInfo->nodeID(), + _prePrepareMsg->consensusProposal(), + [self, _prePrepareMsg, _generatedFromNewView](Error::Ptr _error, bool _verifyResult) { + try + { + auto pbftEngine = self.lock(); + if (!pbftEngine) + { + return; + } + auto committedIndex = pbftEngine->m_config->committedProposal()->index(); + if (committedIndex >= _prePrepareMsg->index()) + { + return; + } + // Note: must reset the txs to be sealed no matter verify success or + // failed because some nodes may verify failed for timeout, while + // other nodes may verify success + pbftEngine->m_config->validator()->asyncResetTxsFlag( + _prePrepareMsg->consensusProposal()->data(), true); + + // verify exceptioned + if (_error != nullptr) + { + PBFT_LOG(WARNING) << LOG_DESC("verify proposal exceptioned") + << printPBFTMsgInfo(_prePrepareMsg) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMsg", _error->errorMessage()); + pbftEngine->m_config->notifySealer(_prePrepareMsg->index(), true); + return; + } + // verify failed + if (!_verifyResult) + { + PBFT_LOG(WARNING) + << LOG_DESC("verify proposal failed") << printPBFTMsgInfo(_prePrepareMsg); + pbftEngine->m_config->notifySealer(_prePrepareMsg->index(), true); + return; + } + // verify success + RecursiveGuard l(pbftEngine->m_mutex); + pbftEngine->handlePrePrepareMsg( + _prePrepareMsg, false, _generatedFromNewView, false); + } + catch (std::exception const& _e) + { + PBFT_LOG(WARNING) << LOG_DESC("exception when calls onVerifyFinishedHandler") + << printPBFTMsgInfo(_prePrepareMsg) + << LOG_KV("error", boost::diagnostic_information(_e)); + } + }); + return true; +} + +void PBFTEngine::broadcastPrepareMsg(PBFTMessageInterface::Ptr _prePrepareMsg) +{ + auto prepareMsg = m_config->pbftMessageFactory()->populateFrom(PacketType::PreparePacket, + m_config->pbftMsgDefaultVersion(), m_config->view(), utcTime(), m_config->nodeIndex(), + _prePrepareMsg->consensusProposal(), m_config->cryptoSuite(), m_config->keyPair()); + prepareMsg->setIndex(_prePrepareMsg->index()); + // add the message to local cache + m_cacheProcessor->addPrepareCache(prepareMsg); + + auto encodedData = m_config->codec()->encode(prepareMsg, m_config->pbftMsgDefaultVersion()); + // only broadcast to the consensus nodes + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + // try to precommit the message + m_cacheProcessor->checkAndPreCommit(); +} + +CheckResult PBFTEngine::checkPBFTMsg(std::shared_ptr _prepareMsg) +{ + auto result = checkPBFTMsgState(_prepareMsg); + if (result == CheckResult::INVALID) + { + return result; + } + if (_prepareMsg->generatedFrom() == m_config->nodeIndex()) + { + PBFT_LOG(TRACE) << LOG_DESC("checkPrepareMsg: Recv own req") + << printPBFTMsgInfo(_prepareMsg); + return CheckResult::INVALID; + } + // check the existence of Pre-Prepare request + if (m_cacheProcessor->existPrePrepare(_prepareMsg)) + { + // compare with the local pre-prepare cache + if (m_cacheProcessor->conflictWithProcessedReq(_prepareMsg)) + { + return CheckResult::INVALID; + } + } + return checkSignature(_prepareMsg); +} + +bool PBFTEngine::handlePrepareMsg(PBFTMessageInterface::Ptr _prepareMsg) +{ + PBFT_LOG(TRACE) << LOG_DESC("handlePrepareMsg") << printPBFTMsgInfo(_prepareMsg) + << m_config->printCurrentState(); + auto result = checkPBFTMsg(_prepareMsg); + if (result == CheckResult::INVALID) + { + return false; + } + if (!checkProposalSignature(_prepareMsg->generatedFrom(), _prepareMsg->consensusProposal())) + { + return false; + } + m_cacheProcessor->addPrepareCache(_prepareMsg); + m_cacheProcessor->checkAndPreCommit(); + return true; +} + +bool PBFTEngine::handleCommitMsg(PBFTMessageInterface::Ptr _commitMsg) +{ + PBFT_LOG(TRACE) << LOG_DESC("handleCommitMsg") << printPBFTMsgInfo(_commitMsg) + << m_config->printCurrentState(); + auto result = checkPBFTMsg(_commitMsg); + if (result == CheckResult::INVALID) + { + return false; + } + m_cacheProcessor->addCommitReq(_commitMsg); + m_cacheProcessor->checkAndCommit(); + return true; +} + +void PBFTEngine::onTimeout() +{ + // only restart the timer if the node is not exist in the group + if (!m_config->isConsensusNode()) + { + m_config->timer()->restart(); + return; + } + auto startT = utcTime(); + auto recordT = utcTime(); + RecursiveGuard l(m_mutex); + auto lockT = utcTime() - startT; + if (m_cacheProcessor->tryToApplyCommitQueue()) + { + PBFT_LOG(INFO) << LOG_DESC("onTimeout: apply proposal to state-machine, restart the timer") + << m_config->printCurrentState(); + m_config->timer()->restart(); + return; + } + m_cacheProcessor->clearExpiredExecutingProposal(); + // when some proposals are executing, not trigger timeout + auto executingProposalSize = m_cacheProcessor->executingProposalSize(); + if (executingProposalSize > 0) + { + PBFT_LOG(INFO) << LOG_DESC("onTimeout: Proposal is executing, restart the timer") + << LOG_KV("executingProposalSize", executingProposalSize) + << m_config->printCurrentState(); + m_config->timer()->restart(); + return; + } + triggerTimeout(true); + PBFT_LOG(WARNING) << LOG_DESC("After onTimeout") << m_config->printCurrentState() + << LOG_KV("lockT", lockT) << LOG_KV("timecost", (utcTime() - recordT)); +} + +void PBFTEngine::triggerTimeout(bool _incTimeout) +{ + m_config->resetTimeoutState(_incTimeout); + // clear the viewchange cache + m_cacheProcessor->removeInvalidViewChange( + m_config->view(), m_config->committedProposal()->index()); + // notify the latest proposal index to the sync module when timeout to enable + // syncing + m_cacheProcessor->notifyCommittedProposalIndex(m_config->committedProposal()->index()); + // broadcast viewchange and try to the new-view phase + broadcastViewChangeReq(); +} + +ViewChangeMsgInterface::Ptr PBFTEngine::generateViewChange() +{ + // broadcast the viewChangeReq + auto committedProposal = m_config->populateCommittedProposal(); + if (committedProposal == nullptr) + { + PBFT_LOG(WARNING) << LOG_DESC( + "broadcastViewChangeReq failed for the " + "latest storage state has not been loaded."); + } + auto viewChangeReq = m_config->pbftMessageFactory()->createViewChangeMsg(); + viewChangeReq->setHash(m_config->committedProposal()->hash()); + viewChangeReq->setIndex(m_config->committedProposal()->index()); + viewChangeReq->setPacketType(PacketType::ViewChangePacket); + viewChangeReq->setVersion(m_config->pbftMsgDefaultVersion()); + viewChangeReq->setView(m_config->toView()); + viewChangeReq->setTimestamp(utcTime()); + viewChangeReq->setGeneratedFrom(m_config->nodeIndex()); + // set the committed proposal + viewChangeReq->setCommittedProposal(committedProposal); + // set prepared proposals + viewChangeReq->setPreparedProposals(m_cacheProcessor->preCommitCachesWithoutData()); + return viewChangeReq; +} + +void PBFTEngine::sendViewChange(bcos::crypto::NodeIDPtr _dstNode) +{ + auto viewChangeReq = generateViewChange(); + // encode and broadcast the viewchangeReq + auto encodedData = m_config->codec()->encode(viewChangeReq); + // only broadcast to the consensus nodes + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::PBFT, std::move(_dstNode), ref(*encodedData), 0, nullptr); + // collect the viewchangeReq + m_cacheProcessor->addViewChangeReq(viewChangeReq); + auto newViewMsg = m_cacheProcessor->checkAndTryIntoNewView(); + if (newViewMsg) + { + reHandlePrePrepareProposals(newViewMsg); + } +} + +void PBFTEngine::sendRecoverResponse(bcos::crypto::NodeIDPtr _dstNode) +{ + auto response = m_config->pbftMessageFactory()->createPBFTMsg(); + response->setPacketType(PacketType::RecoverResponse); + response->setGeneratedFrom(m_config->nodeIndex()); + response->setView(m_config->view()); + response->setTimestamp(utcTime()); + response->setIndex(m_config->committedProposal()->index()); + auto encodedData = m_config->codec()->encode(response); + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::PBFT, _dstNode, ref(*encodedData), 0, nullptr); + PBFT_LOG(DEBUG) << LOG_DESC("sendRecoverResponse") << LOG_KV("peer", _dstNode->shortHex()) + << m_config->printCurrentState(); +} + +void PBFTEngine::broadcastViewChangeReq() +{ + auto viewChangeReq = generateViewChange(); + // encode and broadcast the viewchangeReq + auto encodedData = m_config->codec()->encode(viewChangeReq); + // only broadcast to the consensus nodes + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::PBFT, ref(*encodedData)); + PBFT_LOG(INFO) << LOG_DESC("broadcastViewChangeReq") << printPBFTMsgInfo(viewChangeReq); + // collect the viewchangeReq + m_cacheProcessor->addViewChangeReq(viewChangeReq); + auto newViewMsg = m_cacheProcessor->checkAndTryIntoNewView(); + if (newViewMsg) + { + reHandlePrePrepareProposals(newViewMsg); + } +} + +bool PBFTEngine::isValidViewChangeMsg(bcos::crypto::NodeIDPtr _fromNode, + std::shared_ptr _viewChangeMsg, bool _shouldCheckSig) +{ + // check the committed-proposal index + if (_viewChangeMsg->committedProposal()->index() < m_config->committedProposal()->index()) + { + PBFT_LOG(INFO) << LOG_DESC("InvalidViewChangeReq: invalid index") + << printPBFTMsgInfo(_viewChangeMsg) << m_config->printCurrentState(); + return false; + } + if (_fromNode && !isTimeout()) + { + PBFT_LOG(INFO) << LOG_DESC("sendRecoverResponse to the node try to trigger viewchange") + << LOG_KV("dst", _fromNode->shortHex()) << printPBFTMsgInfo(_viewChangeMsg) + << m_config->printCurrentState(); + sendRecoverResponse(_fromNode); + } + // check the view + if ((_viewChangeMsg->view() < m_config->view()) || + (_viewChangeMsg->view() + 1 < m_config->toView())) + { + if (_fromNode && isTimeout()) + { + PBFT_LOG(INFO) << LOG_DESC("send viewchange to the node whose view falling behind") + << LOG_KV("dst", _fromNode->shortHex()) + << printPBFTMsgInfo(_viewChangeMsg) << m_config->printCurrentState(); + sendViewChange(_fromNode); + } + } + if (_viewChangeMsg->view() < m_config->view()) + { + return false; + } + // check the committed proposal hash + if (_viewChangeMsg->committedProposal()->index() == m_config->committedProposal()->index() && + _viewChangeMsg->committedProposal()->hash() != m_config->committedProposal()->hash()) + { + PBFT_LOG(WARNING) << LOG_DESC("InvalidViewChangeReq: conflict with local committedProposal") + << LOG_DESC(", received proposal: ") + << printPBFTProposal(_viewChangeMsg->committedProposal()) + << LOG_DESC(", local committedProposal:") + << printPBFTProposal(m_config->committedProposal()); + return false; + } + // check the precommitted proposals + for (const auto& precommitMsg : _viewChangeMsg->preparedProposals()) + { + if (precommitMsg->view() > _viewChangeMsg->view()) + { + PBFT_LOG(INFO) << LOG_DESC("InvalidViewChangeReq for invalid view") + << printPBFTMsgInfo(precommitMsg) << printPBFTMsgInfo(_viewChangeMsg) + << m_config->printCurrentState(); + return false; + } + if (!m_cacheProcessor->checkPrecommitMsg(precommitMsg)) + { + PBFT_LOG(INFO) << LOG_DESC("InvalidViewChangeReq for invalid proposal") + << LOG_KV("viewChangeFrom", _viewChangeMsg->generatedFrom()) + << printPBFTMsgInfo(precommitMsg) << m_config->printCurrentState(); + return false; + } + } + if (!_shouldCheckSig) + { + return true; + } + auto ret = checkSignature(_viewChangeMsg); + if (ret == CheckResult::INVALID) + { + PBFT_LOG(INFO) << LOG_DESC("InvalidViewChangeReq: invalid signature") + << printPBFTMsgInfo(_viewChangeMsg) << m_config->printCurrentState(); + return false; + } + return true; +} + +bool PBFTEngine::handleViewChangeMsg(ViewChangeMsgInterface::Ptr _viewChangeMsg) +{ + if (!isValidViewChangeMsg(_viewChangeMsg->from(), _viewChangeMsg)) + { + return false; + } + if (!m_config->timeout() && _viewChangeMsg->from()) + { + sendRecoverResponse(_viewChangeMsg->from()); + } + m_cacheProcessor->addViewChangeReq(_viewChangeMsg); + // try to trigger fast view change if receive more than (f+1) valid view + // change messages whose view is greater than the current view: sends a + // view-change message for the smallest view in the set, even if its timer has + // not expired + auto leaderIndex = + m_config->leaderIndexInNewViewPeriod(_viewChangeMsg->index() + 1, _viewChangeMsg->index()); + if (_viewChangeMsg->generatedFrom() == leaderIndex || + (m_cacheProcessor->getViewChangeWeight(_viewChangeMsg->view()) > + m_config->maxFaultyQuorum())) + { + auto view = m_cacheProcessor->tryToTriggerFastViewChange(); + if (view > 0) + { + // trigger timeout to reach fast view change + triggerTimeout(false); + } + } + auto newViewMsg = m_cacheProcessor->checkAndTryIntoNewView(); + if (newViewMsg) + { + reHandlePrePrepareProposals(newViewMsg); + return true; + } + return true; +} + +bool PBFTEngine::isValidNewViewMsg(std::shared_ptr _newViewMsg) +{ + if (_newViewMsg->view() <= m_config->view()) + { + PBFT_LOG(INFO) << LOG_DESC("InvalidNewViewMsg for invalid view") + << printPBFTMsgInfo(_newViewMsg) << m_config->printCurrentState(); + return false; + } + // check the viewchange + uint64_t weight = 0; + auto viewChangeList = _newViewMsg->viewChangeMsgList(); + for (const auto& viewChangeReq : viewChangeList) + { + if (!isValidViewChangeMsg(_newViewMsg->from(), viewChangeReq)) + { + PBFT_LOG(WARNING) << LOG_DESC("InvalidNewViewMsg for viewChange check failed") + << printPBFTMsgInfo(viewChangeReq); + return false; + } + auto nodeInfo = m_config->getConsensusNodeByIndex(viewChangeReq->generatedFrom()); + if (!nodeInfo) + { + continue; + } + weight += nodeInfo->weight(); + } + // TODO: need to ensure the accuracy of local weight parameters + if (weight < m_config->minRequiredQuorum()) + { + PBFT_LOG(WARNING) << LOG_DESC("InvalidNewViewMsg for unenough weight") + << LOG_KV("weight", weight) + << LOG_KV("minRequiredQuorum", m_config->minRequiredQuorum()); + return false; + } + // TODO: check the prePrepared message + auto ret = checkSignature(_newViewMsg); + if (ret == CheckResult::INVALID) + { + return false; + } + return true; +} + +bool PBFTEngine::handleNewViewMsg(NewViewMsgInterface::Ptr _newViewMsg) +{ + PBFT_LOG(INFO) << LOG_DESC("handleNewViewMsg: receive newViewChangeMsg") + << printPBFTMsgInfo(_newViewMsg) << m_config->printCurrentState(); + if (!isValidNewViewMsg(_newViewMsg)) + { + return false; + } + PBFT_LOG(INFO) << LOG_DESC("handleNewViewMsg success") << printPBFTMsgInfo(_newViewMsg) + << m_config->printCurrentState(); + reHandlePrePrepareProposals(_newViewMsg); + return true; +} + +void PBFTEngine::reachNewView(ViewType _view) +{ + m_config->resetNewViewState(_view); + m_cacheProcessor->resetCacheAfterViewChange( + m_config->view(), m_config->committedProposal()->index()); + // try to preCommit/commit after no-timeout + m_cacheProcessor->checkAndPreCommit(); + m_cacheProcessor->checkAndCommit(); + PBFT_LOG(INFO) << LOG_DESC("reachNewView") << m_config->printCurrentState(); + m_cacheProcessor->tryToApplyCommitQueue(); + m_cacheProcessor->tryToCommitStableCheckPoint(); +} + +void PBFTEngine::reHandlePrePrepareProposals(NewViewMsgInterface::Ptr _newViewReq) +{ + reachNewView(_newViewReq->view()); + // note the sealer to reset after viewchange + m_config->notifyResetSealing(); + auto const& prePrepareList = _newViewReq->prePrepareList(); + auto maxProposalIndex = m_config->committedProposal()->index(); + auto self = weak_from_this(); + for (const auto& prePrepare : prePrepareList) + { + // empty block proposal + if (!prePrepare->consensusProposal()->data().empty()) + { + PBFT_LOG(INFO) << LOG_DESC("reHandlePrePrepareProposals: hit the proposal") + << printPBFTMsgInfo(prePrepare) << m_config->printCurrentState(); + handlePrePrepareMsg(prePrepare, true, true, false); + continue; + } + if (prePrepare->index() > maxProposalIndex) + { + maxProposalIndex = prePrepare->index(); + } + // hit the cache + if (m_cacheProcessor->tryToFillProposal(prePrepare)) + { + PBFT_LOG(INFO) << LOG_DESC( + "reHandlePrePrepareProposals: hit the cache, " + "into prepare phase directly") + << printPBFTMsgInfo(prePrepare) << m_config->printCurrentState(); + handlePrePrepareMsg(prePrepare, true, true, false); + continue; + } + // miss the cache, request to from node + auto from = m_config->getConsensusNodeByIndex(prePrepare->generatedFrom()); + m_logSync->requestPrecommitData( + from->nodeID(), prePrepare, [self](PBFTMessageInterface::Ptr _prePrepare) { + auto engine = self.lock(); + if (!engine) + { + return; + } + PBFT_LOG(INFO) << LOG_DESC( + "reHandlePrePrepareProposals: get the " + "missed proposal and handle now") + << printPBFTMsgInfo(_prePrepare) + << engine->m_config->printCurrentState(); + RecursiveGuard l(engine->m_mutex); + engine->handlePrePrepareMsg(_prePrepare, true, true, false); + }); + } + if (!prePrepareList.empty()) + { + // Note: in case of the reHandled proposals have system transactions, must + // wait to reseal until all reHandled proposal committed + m_config->setWaitResealUntil(maxProposalIndex); + PBFT_LOG(INFO) << LOG_DESC("reHandlePrePrepareProposals and wait to reseal new proposal") + << LOG_KV("waitResealUntil", maxProposalIndex) + << m_config->printCurrentState(); + } + else + { + m_config->reNotifySealer(maxProposalIndex + 1); + } +} + +void PBFTEngine::finalizeConsensus(LedgerConfig::Ptr _ledgerConfig, bool _syncedBlock) +{ + RecursiveGuard l(m_mutex); + // resetConfig after submit the block to ledger + m_config->resetConfig(_ledgerConfig, _syncedBlock); + m_cacheProcessor->checkAndCommitStableCheckPoint(); + m_cacheProcessor->tryToApplyCommitQueue(); + // tried to commit the stable checkpoint + m_cacheProcessor->removeConsensusedCache(m_config->view(), _ledgerConfig->blockNumber()); + m_cacheProcessor->tryToCommitStableCheckPoint(); + // Note: only the consensus-triggered finalize should resetTimer + // resetTimer will try to trigger-fast-viewchange when the leader disconnected or + // falling-far-behind + if (!_syncedBlock) + { + m_cacheProcessor->resetTimer(); + } +} + +bool PBFTEngine::handleCheckPointMsg(std::shared_ptr _checkPointMsg) +{ + // check index + if (_checkPointMsg->index() <= m_config->committedProposal()->index()) + { + PBFT_LOG(TRACE) << LOG_DESC("handleCheckPointMsg: Invalid expired checkpoint msg") + << LOG_KV("committedIndex", m_config->committedProposal()->index()) + << LOG_KV("recvIndex", _checkPointMsg->index()) + << LOG_KV("hash", _checkPointMsg->hash().abridged()) + << m_config->printCurrentState(); + return false; + } + if (isSyncingHigher()) + { + PBFT_LOG(INFO) << LOG_DESC( + "handleCheckPointMsg: reject the checkPoint for the node is " + "syncing higher block") + << LOG_KV("committedIndex", m_config->committedProposal()->index()) + << LOG_KV("recvIndex", _checkPointMsg->index()) + << LOG_KV("hash", _checkPointMsg->hash().abridged()) + << LOG_KV("syncingNum", m_config->syncingHighestNumber()) + << m_config->printCurrentState(); + return false; + } + // check signature + auto result = checkSignature(_checkPointMsg); + if (result == CheckResult::INVALID) + { + PBFT_LOG(WARNING) << LOG_DESC("handleCheckPointMsg: invalid signature") + << printPBFTMsgInfo(_checkPointMsg); + return false; + } + // check the proposal signature + if (!checkProposalSignature( + _checkPointMsg->generatedFrom(), _checkPointMsg->consensusProposal())) + { + PBFT_LOG(WARNING) << LOG_DESC("handleCheckPointMsg: invalid proposal signature") + << printPBFTMsgInfo(_checkPointMsg); + return false; + } + PBFT_LOG(INFO) << LOG_DESC( + "handleCheckPointMsg: try to add the checkpoint " + "message into the cache") + << printPBFTMsgInfo(_checkPointMsg) << m_config->printCurrentState(); + m_cacheProcessor->addCheckPointMsg(_checkPointMsg); + m_cacheProcessor->tryToApplyCommitQueue(); + m_cacheProcessor->checkAndCommitStableCheckPoint(); + if (m_cacheProcessor->shouldRequestCheckPoint(_checkPointMsg)) + { + PBFT_LOG(INFO) << LOG_DESC("request checkPoint proposal") + << LOG_KV("checkPointIndex", _checkPointMsg->index()) + << LOG_KV("checkPointHash", _checkPointMsg->hash().abridged()) + << m_config->printCurrentState(); + m_logSync->requestCommittedProposals(_checkPointMsg->from(), _checkPointMsg->index(), 1); + } + return true; +} + +void PBFTEngine::handleRecoverResponse(PBFTMessageInterface::Ptr _recoverResponse) +{ + if (checkSignature(_recoverResponse) == CheckResult::INVALID) + { + return; + } + m_cacheProcessor->addRecoverReqCache(_recoverResponse); + m_cacheProcessor->checkAndTryToRecover(); +} + +void PBFTEngine::handleRecoverRequest(PBFTMessageInterface::Ptr _request) +{ + if (checkSignature(_request) == CheckResult::INVALID) + { + return; + } + sendRecoverResponse(_request->from()); + PBFT_LOG(INFO) << LOG_DESC("handleRecoverRequest and response current state") + << LOG_KV("peer", _request->from()->shortHex()) << m_config->printCurrentState(); +} + +void PBFTEngine::sendCommittedProposalResponse( + PBFTProposalList const& _proposalList, SendResponseCallback _sendResponse) +{ + auto pbftMessage = m_config->pbftMessageFactory()->createPBFTMsg(); + pbftMessage->setPacketType(PacketType::CommittedProposalResponse); + pbftMessage->setProposals(_proposalList); + auto encodedData = m_config->codec()->encode(pbftMessage); + _sendResponse(ref(*encodedData)); +} + +void PBFTEngine::onReceiveCommittedProposalRequest( + PBFTBaseMessageInterface::Ptr _pbftMsg, SendResponseCallback _sendResponse) +{ + RecursiveGuard l(m_mutex); + auto pbftRequest = std::dynamic_pointer_cast(_pbftMsg); + PBFT_LOG(INFO) << LOG_DESC("Receive CommittedProposalRequest") + << LOG_KV("fromIndex", pbftRequest->index()) + << LOG_KV("size", pbftRequest->size()); + // hit the local cache + auto proposal = m_cacheProcessor->fetchPrecommitProposal(pbftRequest->index()); + if (pbftRequest->size() == 1 && proposal) + { + PBFTProposalList proposalList; + proposalList.emplace_back(proposal); + sendCommittedProposalResponse(proposalList, _sendResponse); + return; + } + auto self = weak_from_this(); + m_config->storage()->asyncGetCommittedProposals(pbftRequest->index(), pbftRequest->size(), + [self, pbftRequest, _sendResponse](PBFTProposalListPtr _proposalList) { + auto engine = self.lock(); + if (!engine) + { + return; + } + // empty case + if (!_proposalList || _proposalList->size() == 0) + { + PBFT_LOG(DEBUG) << LOG_DESC( + "onReceiveCommittedProposalRequest: miss " + "the expected proposal") + << LOG_KV("fromIndex", pbftRequest->index()) + << LOG_KV("size", pbftRequest->size()); + _sendResponse(bytesConstRef()); + return; + } + // hit case + engine->sendCommittedProposalResponse(*_proposalList, _sendResponse); + }); +} + +void PBFTEngine::onReceivePrecommitRequest( + std::shared_ptr _pbftMessage, SendResponseCallback _sendResponse) +{ + RecursiveGuard l(m_mutex); + // receive the precommitted proposals request message + auto pbftRequest = std::dynamic_pointer_cast(_pbftMessage); + // get the local precommitData + auto precommitMsg = + m_cacheProcessor->fetchPrecommitData(pbftRequest->index(), pbftRequest->hash()); + if (!precommitMsg) + { + PBFT_LOG(INFO) << LOG_DESC("onReceivePrecommitRequest: miss the requested precommit") + << LOG_KV("hash", pbftRequest->hash().abridged()) + << LOG_KV("index", pbftRequest->index()); + return; + } + precommitMsg->setPacketType(PacketType::PreparedProposalResponse); + auto encodedData = m_config->codec()->encode(precommitMsg); + // response the precommitData + _sendResponse(ref(*encodedData)); + PBFT_LOG(INFO) << LOG_DESC("Receive precommitRequest and send response") + << LOG_KV("hash", pbftRequest->hash().abridged()) + << LOG_KV("index", pbftRequest->index()); +} + +void PBFTEngine::onStableCheckPointCommitFailed( + Error::Ptr&& _error, PBFTProposalInterface::Ptr _stableProposal) +{ + if (!m_config->asMasterNode()) + { + PBFT_LOG(WARNING) << LOG_DESC( + "onStableCheckPointCommitFailed: but do nothing for the node-self " + "is not a master node") + << printPBFTProposal(_stableProposal) << m_config->printCurrentState(); + return; + } + + if (_stableProposal->index() <= m_config->committedProposal()->index()) + { + PBFT_LOG(INFO) << LOG_DESC( + "onStableCheckPointCommitFailed: drop the expired stable proposal") + << m_config->printCurrentState() << printPBFTProposal(_stableProposal); + return; + } + if (_error->errorCode() == bcos::scheduler::SchedulerError::BlockIsCommitting) + { + PBFT_LOG(WARNING) << LOG_DESC( + "onStableCheckPointCommitFailed for BlockIsCommitting: " + "retry to commit again") + << m_config->printCurrentState() << printPBFTProposal(_stableProposal); + // retry after 20ms + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + RecursiveGuard l(m_mutex); + m_cacheProcessor->updateStableCheckPointQueue(_stableProposal); + return; + } + if (_error->errorCode() == bcos::scheduler::SchedulerError::InvalidBlocks) + { + PBFT_LOG(WARNING) << LOG_DESC( + "onStableCheckPointCommitFailed for InvalidBlocks: " + "fetchAndUpdateLedgerConfig") + << m_config->printCurrentState() << printPBFTProposal(_stableProposal); + fetchAndUpdateLedgerConfig(); + return; + } + clearExceptionProposalState(_stableProposal->index()); +} + +void PBFTEngine::recoverState() +{ + // Note: only replay the PBFT state when all-modules ready + PBFT_LOG(INFO) << LOG_DESC("fetch PBFT state"); + auto stateProposals = m_config->storage()->loadState(m_config->committedProposal()->index()); + if (stateProposals && stateProposals->size() > 0) + { + initState(*stateProposals, m_config->keyPair()->publicKey()); + auto lowWaterMarkIndex = stateProposals->size() - 1; + auto lowWaterMark = ((*stateProposals)[lowWaterMarkIndex])->index(); + m_config->setLowWaterMark(lowWaterMark + 1); + PBFT_LOG(INFO) << LOG_DESC("recoverState") + << LOG_KV("stateProposals", stateProposals->size()) + << LOG_KV("lowWaterMark", lowWaterMark) + << LOG_KV("highWaterMark", m_config->highWaterMark()); + } + m_config->timer()->start(); +} + +void PBFTEngine::clearExceptionProposalState(bcos::protocol::BlockNumber _number) +{ + try + { + if (!m_config->asMasterNode()) + { + PBFT_LOG(INFO) << LOG_DESC( + "clearExceptionProposalState return directly for the node is the backup node"); + return; + } + RecursiveGuard l(m_mutex); + if (!m_config->committedProposal()) + { + PBFT_LOG(WARNING) << LOG_DESC( + "clearExceptionProposalState return directly for the pbft module has not been " + "inited"); + return; + } + // update the ledgerConfig when switch + fetchAndUpdateLedgerConfig(); + m_config->timer()->restart(); + m_cacheProcessor->resetUnCommittedCacheState(_number); + m_config->setExpectedCheckPoint(_number); + m_cacheProcessor->checkAndPreCommit(); + m_cacheProcessor->checkAndCommit(); + m_cacheProcessor->tryToApplyCommitQueue(); + recoverState(); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("clearExceptionProposalState exception") + << LOG_KV("number", _number) + << LOG_KV("msg", boost::diagnostic_information(e)); + } +} + +void PBFTEngine::fetchAndUpdateLedgerConfig() +{ + PBFT_LOG(INFO) << LOG_DESC("fetchAndUpdateLedgerConfig"); + m_ledgerFetcher->fetchBlockNumberAndHash(); + m_ledgerFetcher->fetchConsensusNodeList(); + // Note: must fetchObserverNode here to notify the latest sealerList and observerList to + // txpool + m_ledgerFetcher->fetchObserverNodeList(); + m_ledgerFetcher->fetchBlockTxCountLimit(); + m_ledgerFetcher->fetchConsensusLeaderPeriod(); + m_ledgerFetcher->fetchCompatibilityVersion(); + auto ledgerConfig = m_ledgerFetcher->ledgerConfig(); + PBFT_LOG(INFO) << LOG_DESC("fetchAndUpdateLedgerConfig success") + << LOG_KV("blockNumber", ledgerConfig->blockNumber()) + << LOG_KV("hash", ledgerConfig->hash().abridged()) + << LOG_KV("maxTxsPerBlock", ledgerConfig->blockTxCountLimit()) + << LOG_KV("consensusNodeList", ledgerConfig->consensusNodeList().size()); + m_config->resetConfig(ledgerConfig); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.h b/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.h new file mode 100644 index 0000000..adf34d3 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/PBFTEngine.h @@ -0,0 +1,245 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTEngine + * @file PBFTEngine.h + * @author: yujiechen + * @date 2021-04-20 + */ +#pragma once +#include "PBFTLogSync.h" +#include "bcos-pbft/core/ConsensusEngine.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace ledger +{ +class LedgerConfig; +} +namespace consensus +{ +class PBFTBaseMessageInterface; +class PBFTMessageInterface; +class ViewChangeMsgInterface; +class NewViewMsgInterface; +class PBFTConfig; +class PBFTCacheProcessor; +class PBFTProposalInterface; + +using PBFTMsgQueue = ConcurrentQueue>; +using PBFTMsgQueuePtr = std::shared_ptr; + +enum CheckResult +{ + VALID = 0, + INVALID = 1, +}; + +class PBFTEngine : public ConsensusEngine, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using SendResponseCallback = std::function; + explicit PBFTEngine(std::shared_ptr _config); + ~PBFTEngine() override { stop(); } + + void start() override; + void stop() override; + + virtual void asyncSubmitProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted); + + std::shared_ptr pbftConfig() { return m_config; } + + // Receive PBFT message package from frontService + virtual void onReceivePBFTMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data); + + virtual void initState(PBFTProposalList const& _proposals, bcos::crypto::NodeIDPtr _fromNode) + { + m_cacheProcessor->initState(_proposals, std::move(_fromNode)); + } + + virtual void asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, std::function _onRecv); + + virtual std::shared_ptr cacheProcessor() { return m_cacheProcessor; } + virtual bool isTimeout() { return m_config->timeout(); } + void registerCommittedProposalNotifier( + std::function)> + _committedProposalNotifier) + { + m_cacheProcessor->registerCommittedProposalNotifier(std::move(_committedProposalNotifier)); + } + + virtual void restart(); + + virtual void clearExceptionProposalState(bcos::protocol::BlockNumber _number); + + void clearAllCache(); + void recoverState(); + + void fetchAndUpdateLedgerConfig(); + void setLedgerFetcher(bcos::tool::LedgerConfigFetcher::Ptr _ledgerFetcher) + { + m_ledgerFetcher = std::move(_ledgerFetcher); + } + +protected: + virtual void initSendResponseHandler(); + virtual void tryToResendCheckPoint(); + virtual void onReceivePBFTMessage(bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, SendResponseCallback _sendResponse); + + virtual void onRecvProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash); + + // PBFT main processing function + void executeWorker() override; + + // General entry for message processing + virtual void handleMsg(std::shared_ptr _msg); + + // Process Pre-prepare type message packets + virtual bool handlePrePrepareMsg(std::shared_ptr _prePrepareMsg, + bool _needVerifyProposal, bool _generatedFromNewView = false, + bool _needCheckSignature = true); + // When handlePrePrepareMsg return false, then reset sealed txs + virtual void resetSealedTxs(std::shared_ptr _prePrepareMsg); + + // To check pre-prepare msg valid + virtual CheckResult checkPrePrepareMsg(std::shared_ptr _prePrepareMsg); + // To check pbft msg sign valid + virtual CheckResult checkSignature(std::shared_ptr _req); + virtual bool checkProposalSignature( + IndexType _generatedFrom, PBFTProposalInterface::Ptr _proposal); + + virtual CheckResult checkPBFTMsgState(std::shared_ptr _pbftReq) const; + + // When pre-prepare proposal seems ok, then broadcast prepare msg + virtual void broadcastPrepareMsg(std::shared_ptr _prePrepareMsg); + + // Process the Prepare type message packet + virtual bool handlePrepareMsg(std::shared_ptr _prepareMsg); + // To check 'Prepare' or 'Commit' type proposal + virtual CheckResult checkPBFTMsg(std::shared_ptr _prepareMsg); + + virtual bool handleCommitMsg(std::shared_ptr _commitMsg); + + virtual void onTimeout(); + virtual ViewChangeMsgInterface::Ptr generateViewChange(); + virtual void broadcastViewChangeReq(); + virtual void sendViewChange(bcos::crypto::NodeIDPtr _dstNode); + + virtual bool handleViewChangeMsg(std::shared_ptr _viewChangeMsg); + virtual bool isValidViewChangeMsg(bcos::crypto::NodeIDPtr _fromNode, + std::shared_ptr _viewChangeMsg, bool _shouldCheckSig = true); + + virtual bool handleNewViewMsg(std::shared_ptr _newViewMsg); + virtual void reHandlePrePrepareProposals(std::shared_ptr _newViewMsg); + virtual bool isValidNewViewMsg(std::shared_ptr _newViewMsg); + virtual void reachNewView(ViewType _view); + + // handle the checkpoint message + virtual bool handleCheckPointMsg(std::shared_ptr _checkPointMsg); + + // function called after reaching a consensus + virtual void finalizeConsensus( + std::shared_ptr _ledgerConfig, bool _syncedBlock = false); + + + virtual void onProposalApplied(int64_t _errorCode, PBFTProposalInterface::Ptr _proposal, + PBFTProposalInterface::Ptr _executedProposal); + virtual void onProposalApplySuccess( + PBFTProposalInterface::Ptr _proposal, PBFTProposalInterface::Ptr _executedProposal); + virtual void onProposalApplyFailed(int64_t _errorCode, PBFTProposalInterface::Ptr _proposal); + virtual void onLoadAndVerifyProposalFinish( + bool _verifyResult, Error::Ptr _error, PBFTProposalInterface::Ptr _proposal); + virtual void triggerTimeout(bool _incTimeout = true); + + void handleRecoverResponse(PBFTMessageInterface::Ptr _recoverResponse); + void handleRecoverRequest(PBFTMessageInterface::Ptr _request); + void sendRecoverResponse(bcos::crypto::NodeIDPtr _dstNode); + bool isSyncingHigher(); + /** + * @brief Receive proposal requests from other nodes and reply to corresponding proposals + * + * @param _pbftMsg the proposal request + * @param _sendResponse callback used to send the requested-proposals back to the node + */ + virtual void onReceiveCommittedProposalRequest( + PBFTBaseMessageInterface::Ptr _pbftMsg, SendResponseCallback _sendResponse); + + /** + * @brief Receive precommit requests from other nodes and reply to the corresponding precommit + * data + * + * @param _pbftMessage the precommit request + * @param _sendResponse callback used to send the requested-proposals back to the node + */ + virtual void onReceivePrecommitRequest( + std::shared_ptr _pbftMessage, SendResponseCallback _sendResponse); + void sendCommittedProposalResponse( + PBFTProposalList const& _proposalList, SendResponseCallback _sendResponse); + + virtual void onStableCheckPointCommitFailed( + Error::Ptr&& _error, PBFTProposalInterface::Ptr _stableProposal); + +private: + // utility functions + void waitSignal() + { + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(5)); + } + +protected: + // PBFT configuration class + // mainly maintains the node information, consensus configuration information + // such as consensus node list, consensus weight, etc. + std::shared_ptr m_config; + ThreadPool::Ptr m_worker; + + // PBFT message cache queue + PBFTMsgQueuePtr m_msgQueue; + std::shared_ptr m_cacheProcessor; + // for log syncing + PBFTLogSync::Ptr m_logSync; + + std::function + m_sendResponseHandler; + + boost::condition_variable m_signalled; + boost::mutex x_signalled; + mutable RecursiveMutex m_mutex; + + const unsigned c_PopWaitSeconds = 5; + const std::set c_consensusPacket = {PrePreparePacket, PreparePacket, CommitPacket}; + + std::atomic_bool m_stopped = {false}; + bcos::tool::LedgerConfigFetcher::Ptr m_ledgerFetcher; + + // the timer used to resend checkPointProposal + std::shared_ptr m_timer; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.cpp b/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.cpp new file mode 100644 index 0000000..9f79f30 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.cpp @@ -0,0 +1,189 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFT log syncing + * @file PBFTLogSync.cpp + * @author: yujiechen + * @date 2021-04-28 + */ +#include "PBFTLogSync.h" +#include +#include + +using namespace bcos; +using namespace bcos::front; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::consensus; + +PBFTLogSync::PBFTLogSync(PBFTConfig::Ptr _config, PBFTCacheProcessor::Ptr _pbftCache) + : m_config(std::move(_config)), + m_pbftCache(std::move(_pbftCache)), + m_requestThread(std::make_shared("pbftLogSync", 1)) +{} + +void PBFTLogSync::requestCommittedProposals( + PublicPtr _from, BlockNumber _startIndex, size_t _offset) +{ + auto pbftRequest = m_config->pbftMessageFactory()->populateFrom( + PacketType::CommittedProposalRequest, _startIndex, _offset); + auto self = weak_from_this(); + requestPBFTData(std::move(_from), pbftRequest, + [self, _startIndex, _offset](Error::Ptr _error, NodeIDPtr _nodeID, bytesConstRef _data, + std::string const&, SendResponseCallback _sendResponse) { + auto logSync = self.lock(); + if (!logSync) + { + return; + } + return logSync->onRecvCommittedProposalsResponse(std::move(_error), std::move(_nodeID), + _data, _startIndex, _offset, std::move(_sendResponse)); + }); +} + +void PBFTLogSync::requestPrecommitData(bcos::crypto::PublicPtr _from, + PBFTMessageInterface::Ptr _prePrepareMsg, HandlePrePrepareCallback _prePrepareCallback) +{ + auto pbftRequest = m_config->pbftMessageFactory()->populateFrom( + PacketType::PreparedProposalRequest, _prePrepareMsg->index(), _prePrepareMsg->hash()); + PBFT_LOG(INFO) << LOG_DESC("request the missed precommit proposal") + << LOG_KV("index", _prePrepareMsg->index()) + << LOG_KV("hash", _prePrepareMsg->hash().abridged()); + auto self = weak_from_this(); + requestPBFTData(std::move(_from), pbftRequest, + [self, _prePrepareMsg = std::move(_prePrepareMsg), + _prePrepareCallback = std::move(_prePrepareCallback)](Error::Ptr _error, + NodeIDPtr _nodeID, bytesConstRef _data, std::string const&, + SendResponseCallback _sendResponse) { + auto logSync = self.lock(); + if (!logSync) + { + return; + } + return logSync->onRecvPrecommitResponse(std::move(_error), std::move(_nodeID), _data, + _prePrepareMsg, _prePrepareCallback, std::move(_sendResponse)); + }); +} + +void PBFTLogSync::requestPBFTData( + PublicPtr _from, PBFTRequestInterface::Ptr _pbftRequest, CallbackFunc _callback) +{ + auto self = weak_from_this(); + m_requestThread->enqueue([self, _from, _pbftRequest, _callback]() { + try + { + auto pbftLogSync = self.lock(); + if (!pbftLogSync) + { + return; + } + auto config = pbftLogSync->m_config; + // encode + auto encodedData = + config->codec()->encode(_pbftRequest, config->pbftMsgDefaultVersion()); + // send the request + config->frontService()->asyncSendMessageByNodeID(ModuleID::PBFT, _from, + ref(*encodedData), config->networkTimeoutInterval(), _callback); + PBFT_LOG(INFO) << LOG_DESC("request the missed precommit proposal") + << LOG_KV("peer", _from->shortHex()) + << LOG_KV("index", _pbftRequest->index()) + << LOG_KV("hash", _pbftRequest->hash().abridged()); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("requestCommittedProposals exception") + << LOG_KV("to", _from->shortHex()) + << LOG_KV("startIndex", _pbftRequest->index()) + << LOG_KV("offset", _pbftRequest->size()) + << LOG_KV("hash", _pbftRequest->hash().abridged()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void PBFTLogSync::onRecvCommittedProposalsResponse(Error::Ptr _error, NodeIDPtr _nodeID, + bytesConstRef _data, bcos::protocol::BlockNumber _startIndex, size_t _offset, + SendResponseCallback) +{ + if (_error) + { + PBFT_LOG(WARNING) << LOG_DESC("onRecvCommittedProposalResponse error") + << LOG_KV("from", _nodeID->shortHex()) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMsg", _error->errorMessage()); + for (size_t i = 0; i < _offset; i++) + { + m_pbftCache->eraseCommittedProposalList(_startIndex + i); + } + return; + } + if (_data.size() == 0) + { + return; + } + auto response = m_config->codec()->decode(_data); + if (response->packetType() != PacketType::CommittedProposalResponse) + { + return; + } + auto proposalResponse = std::dynamic_pointer_cast(response); + // TODO: check the proposal to ensure security + // load the fetched checkpoint proposal into the cache + auto proposals = proposalResponse->proposals(); + m_pbftCache->initState(proposals, _nodeID); + PBFT_LOG(INFO) << LOG_DESC("onRecvCommittedProposalsResponse") + << LOG_KV("from", _nodeID->shortHex()) + << LOG_KV("proposalSize", proposals.size()); +} + +void PBFTLogSync::onRecvPrecommitResponse(Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, PBFTMessageInterface::Ptr _prePrepareMsg, + HandlePrePrepareCallback _prePrepareCallback, SendResponseCallback) +{ + if (_error != nullptr) + { + PBFT_LOG(WARNING) << LOG_DESC("onRecvPrecommitResponse error") + << LOG_KV("from", _nodeID->shortHex()) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMsg", _error->errorMessage()); + } + auto response = m_config->codec()->decode(_data); + if (response->packetType() != PacketType::PreparedProposalResponse) + { + return; + } + PBFT_LOG(INFO) << LOG_DESC("onRecvPrecommitResponse") << printPBFTMsgInfo(response); + auto pbftMessage = std::dynamic_pointer_cast(response); + assert(pbftMessage->preparedProposals().size() == 1); + auto precommitMsg = (pbftMessage->preparedProposals())[0]; + if (!precommitMsg->consensusProposal()) + { + return; + } + if (precommitMsg->consensusProposal()->index() != + _prePrepareMsg->consensusProposal()->index() || + precommitMsg->consensusProposal()->hash() != _prePrepareMsg->consensusProposal()->hash()) + { + return; + } + if (!m_pbftCache->checkPrecommitMsg(precommitMsg)) + { + PBFT_LOG(WARNING) << LOG_DESC("Recv invalid precommit response") + << printPBFTMsgInfo(precommitMsg); + return; + } + _prePrepareMsg->consensusProposal()->setData(precommitMsg->consensusProposal()->data()); + _prePrepareCallback(_prePrepareMsg); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.h b/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.h new file mode 100644 index 0000000..2bbacd7 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/PBFTLogSync.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFT log syncing + * @file PBFTLogSync.h + * @author: yujiechen + * @date 2021-04-28 + */ +#pragma once +#include "../cache/PBFTCacheProcessor.h" +#include "../config/PBFTConfig.h" +#include +#include +namespace bcos::consensus +{ +class PBFTLogSync : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTLogSync(PBFTConfig::Ptr _config, PBFTCacheProcessor::Ptr _pbftCache); + virtual ~PBFTLogSync() = default; + using SendResponseCallback = std::function; + using HandlePrePrepareCallback = std::function; + /** + * @brief batch request committed proposals to the given node + * + * @param _from the node that maintains the requested proposals + * @param _startIndex the start index of the request + * @param _offset the requested proposal size + */ + virtual void requestCommittedProposals( + bcos::crypto::PublicPtr _from, bcos::protocol::BlockNumber _startIndex, size_t _offset); + + /** + * @brief request precommit data from the given node + * + * @param _from the node that maintain the precommit data + * @param _index the index of the requested precommit data + * @param _hash the hash of the requested precommit data + */ + virtual void requestPrecommitData(bcos::crypto::PublicPtr _from, + PBFTMessageInterface::Ptr _prePrepareMsg, HandlePrePrepareCallback _prePrepareCallback); + + virtual void stop() { m_requestThread->stop(); } + +protected: + virtual void onRecvCommittedProposalsResponse(bcos::Error::Ptr _error, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + bcos::protocol::BlockNumber _startIndex, size_t _offset, + SendResponseCallback _sendResponse); + + virtual void onRecvPrecommitResponse(bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, PBFTMessageInterface::Ptr _prePrepareMsg, + HandlePrePrepareCallback _prePrepareCallback, SendResponseCallback _sendResponse); + + void requestPBFTData(bcos::crypto::PublicPtr _from, PBFTRequestInterface::Ptr _pbftRequest, + bcos::front::CallbackFunc _callback); + +private: + PBFTConfig::Ptr m_config; + PBFTCacheProcessor::Ptr m_pbftCache; + std::shared_ptr m_requestThread; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/PBFTTimer.h b/bcos-pbft/bcos-pbft/pbft/engine/PBFTTimer.h new file mode 100644 index 0000000..60be221 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/PBFTTimer.h @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTTimer + * @file PBFTTimer.h + * @author: yujiechen + * @date 2021-04-26 + */ +#pragma once +#include +namespace bcos::consensus +{ +class PBFTTimer : public Timer +{ +public: + using Ptr = std::shared_ptr; + explicit PBFTTimer(uint64_t _timeout, std::string const& _name = "pbftTimer") + : Timer(_timeout, _name) + { + updateAdjustedTimeout(); + } + + ~PBFTTimer() override = default; + + void updateChangeCycle(uint64_t _changeCycle) + { + m_changeCycle.store(std::min(_changeCycle, c_maxChangeCycle)); + updateAdjustedTimeout(); + } + void incChangeCycle(uint64_t _increasedValue) + { + updateChangeCycle(m_changeCycle.load() + _increasedValue); + } + void resetChangeCycle() { updateChangeCycle(0); } + uint64_t changeCycle() const { return m_changeCycle; } + + void reset(uint64_t _timeout) override + { + m_timeout = _timeout; + updateAdjustedTimeout(); + } + +protected: + // ensure that this period of time increases exponentially until some requested operation + // executes + void updateAdjustedTimeout() + { + auto changeCycle = std::min(m_changeCycle.load(), c_maxChangeCycle); + uint64_t timeout = m_timeout.load() * std::pow(m_base, changeCycle); + if (timeout == m_adjustedTimeout) + { + return; + } + m_adjustedTimeout.store(timeout); + if (running()) + { + restart(); + } + } + uint64_t adjustTimeout() override { return m_adjustedTimeout; } + +private: + std::atomic m_adjustedTimeout = {0}; + std::atomic m_changeCycle = {0}; + double const m_base = 1.5; + uint64_t c_maxChangeCycle = 10; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/Validator.cpp b/bcos-pbft/bcos-pbft/pbft/engine/Validator.cpp new file mode 100644 index 0000000..a5d92d2 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/Validator.cpp @@ -0,0 +1,132 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Validator for the consensus module + * @file Validator.cpp + * @author: yujiechen + * @date 2021-04-21 + */ +#include "Validator.h" +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; +using namespace bcos::protocol; + +void TxsValidator::verifyProposal(bcos::crypto::PublicPtr _fromNode, + PBFTProposalInterface::Ptr _proposal, + std::function _verifyFinishedHandler) +{ + // TODO: check the sealerList here + auto block = m_blockFactory->createBlock(_proposal->data()); + auto blockHeader = block->blockHeader(); + if (blockHeader->number() != _proposal->index()) + { + if (_verifyFinishedHandler) + { + auto error = std::make_shared(-1, "Invalid proposal"); + _verifyFinishedHandler(error, false); + } + return; + } + m_txPool->asyncVerifyBlock(_fromNode, _proposal->data(), _verifyFinishedHandler); +} + +void TxsValidator::asyncResetTxsFlag(bytesConstRef _data, bool _flag, bool _emptyTxBatchHash) +{ + auto block = m_blockFactory->createBlock(_data); + auto blockHeader = block->blockHeader(); + if (_flag) + { + // already has the reset request + if (!insertResettingProposal(blockHeader->hash())) + { + return; + } + } + auto self = std::weak_ptr(shared_from_this()); + m_worker->enqueue([self, blockHeader, block, _flag, _emptyTxBatchHash]() { + try + { + auto validator = self.lock(); + if (!validator) + { + return; + } + + auto txsHash = std::make_shared(); + for (size_t i = 0; i < block->transactionsHashSize(); i++) + { + txsHash->emplace_back(block->transactionHash(i)); + } + if (txsHash->empty()) + { + return; + } + PBFT_LOG(INFO) << LOG_DESC("asyncResetTxsFlag") + << LOG_KV("index", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("flag", _flag); + validator->asyncResetTxsFlag(block, txsHash, _flag, _emptyTxBatchHash); + } + catch (std::exception const& e) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncResetTxsFlag exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void TxsValidator::asyncResetTxsFlag( + bcos::protocol::Block::Ptr _block, HashListPtr _txsHashList, bool _flag, bool _emptyTxBatchHash) +{ + auto blockHeader = _block->blockHeader(); + auto proposalNumber = blockHeader->number(); + auto proposalHash = blockHeader->hash(); + if (_emptyTxBatchHash) + { + proposalNumber = -1; + proposalHash = bcos::crypto::HashType(); + } + auto self = std::weak_ptr(shared_from_this()); + m_txPool->asyncMarkTxs(_txsHashList, _flag, proposalNumber, proposalHash, + [self, _block, blockHeader, _txsHashList, _flag, _emptyTxBatchHash](Error::Ptr _error) { + auto validator = self.lock(); + if (!validator) + { + return; + } + // must ensure asyncResetTxsFlag success before seal new next blocks + if (_flag) + { + validator->eraseResettingProposal(blockHeader->hash()); + } + if (_error == nullptr) + { + PBFT_LOG(INFO) << LOG_DESC("asyncMarkTxs success") + << LOG_KV("index", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("flag", _flag) + << LOG_KV("emptyTxBatchHash", _emptyTxBatchHash); + return; + } + PBFT_LOG(WARNING) << LOG_DESC("asyncMarkTxs failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + if (_flag) + { + validator->insertResettingProposal(blockHeader->hash()); + } + }); +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/engine/Validator.h b/bcos-pbft/bcos-pbft/pbft/engine/Validator.h new file mode 100644 index 0000000..b658605 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/engine/Validator.h @@ -0,0 +1,246 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Validator for the consensus module + * @file Validator.h + * @author: yujiechen + * @date 2021-04-21 + */ +#pragma once +#include "../interfaces/PBFTMessageFactory.h" +#include "../interfaces/PBFTProposalInterface.h" +#include "bcos-framework/txpool/TxPoolInterface.h" +#include +#include +#include + +#include + +namespace bcos::consensus +{ +class ValidatorInterface +{ +public: + using Ptr = std::shared_ptr; + ValidatorInterface() = default; + virtual ~ValidatorInterface() = default; + virtual void verifyProposal(bcos::crypto::PublicPtr _fromNode, + PBFTProposalInterface::Ptr _proposal, + std::function _verifyFinishedHandler) = 0; + + virtual void asyncResetTxsFlag( + bytesConstRef _data, bool _flag, bool _emptyTxBatchHash = false) = 0; + virtual PBFTProposalInterface::Ptr generateEmptyProposal(uint32_t _proposalVersion, + PBFTMessageFactory::Ptr _factory, int64_t _index, int64_t _sealerId) = 0; + + virtual void notifyTransactionsResult( + bcos::protocol::Block::Ptr _block, bcos::protocol::BlockHeader::Ptr _header) = 0; + virtual void updateValidatorConfig(bcos::consensus::ConsensusNodeList const& _consensusNodeList, + bcos::consensus::ConsensusNodeList const& _observerNodeList) = 0; + + virtual void stop() = 0; + virtual void init() = 0; + virtual void asyncResetTxPool() = 0; + virtual ssize_t resettingProposalSize() const = 0; + virtual void setVerifyCompletedHook(std::function) = 0; +}; + +class TxsValidator : public ValidatorInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + explicit TxsValidator(bcos::txpool::TxPoolInterface::Ptr _txPool, + bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory) + : m_txPool(std::move(_txPool)), + m_blockFactory(std::move(_blockFactory)), + m_txResultFactory(std::move(_txResultFactory)), + m_worker(std::make_shared("validator", 2)) + {} + + ~TxsValidator() override = default; + + void stop() override { m_worker->stop(); } + + void init() override + { + PBFT_LOG(INFO) << LOG_DESC("asyncResetTxPool when startup"); + asyncResetTxPool(); + } + + void asyncResetTxPool() override + { + m_txPool->asyncResetTxPool([](Error::Ptr _error) { + if (_error) + { + PBFT_LOG(WARNING) << LOG_DESC("asyncResetTxPool failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + void verifyProposal(bcos::crypto::PublicPtr _fromNode, PBFTProposalInterface::Ptr _proposal, + std::function _verifyFinishedHandler) override; + + void asyncResetTxsFlag( + bytesConstRef _data, bool _flag, bool _emptyTxBatchHash = false) override; + ssize_t resettingProposalSize() const override + { + ReadGuard l(x_resettingProposals); + return m_resettingProposals.size(); + } + + PBFTProposalInterface::Ptr generateEmptyProposal(uint32_t _proposalVersion, + PBFTMessageFactory::Ptr _factory, int64_t _index, int64_t _sealerId) override + { + auto proposal = _factory->createPBFTProposal(); + proposal->setIndex(_index); + auto block = m_blockFactory->createBlock(); + auto blockHeader = m_blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->populateEmptyBlock(_index, _sealerId); + blockHeader->setVersion(_proposalVersion); + blockHeader->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + block->setBlockHeader(blockHeader); + auto encodedData = std::make_shared(); + block->encode(*encodedData); + proposal->setHash(blockHeader->hash()); + proposal->setData(std::move(*encodedData)); + return proposal; + } + + void notifyTransactionsResult( + bcos::protocol::Block::Ptr _block, bcos::protocol::BlockHeader::Ptr _header) override + { + auto results = std::make_shared(); + for (size_t i = 0; i < _block->transactionsHashSize(); i++) + { + auto txHash = _block->transactionHash(i); + auto txResult = m_txResultFactory->createTxSubmitResult(); + txResult->setBlockHash(_header->hash()); + txResult->setTxHash(txHash); + results->emplace_back(std::move(txResult)); + } + m_txPool->asyncNotifyBlockResult( + _header->number(), results, [_block, _header](Error::Ptr _error) { + if (_error == nullptr) + { + PBFT_LOG(INFO) << LOG_DESC("notify block result success") + << LOG_KV("number", _header->number()) + << LOG_KV("hash", _header->hash().abridged()) + << LOG_KV("txsSize", _block->transactionsHashSize()); + return; + } + PBFT_LOG(INFO) << LOG_DESC("notify block result failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); + } + + void updateValidatorConfig(bcos::consensus::ConsensusNodeList const& _consensusNodeList, + bcos::consensus::ConsensusNodeList const& _observerNodeList) override + { + m_txPool->notifyConsensusNodeList(_consensusNodeList, [](Error::Ptr _error) { + if (_error == nullptr) + { + PBFT_LOG(DEBUG) << LOG_DESC("notify to update consensusNodeList config success"); + return; + } + PBFT_LOG(WARNING) << LOG_DESC("notify to update consensusNodeList config failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); + + m_txPool->notifyObserverNodeList(_observerNodeList, [](Error::Ptr _error) { + if (_error == nullptr) + { + PBFT_LOG(DEBUG) << LOG_DESC("notify to update observerNodeList config success"); + return; + } + PBFT_LOG(WARNING) << LOG_DESC("notify to update observerNodeList config failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); + } + + void setVerifyCompletedHook(std::function _hook) override + { + RecursiveGuard l(x_verifyCompletedHook); + m_verifyCompletedHook = _hook; + } + +protected: + virtual void eraseResettingProposal(bcos::crypto::HashType const& _hash) + { + { + WriteGuard l(x_resettingProposals); + m_resettingProposals.erase(_hash); + if (!m_resettingProposals.empty()) + { + return; + } + } + // When all consensusing proposals are notified, call verifyCompletedHook + triggerVerifyCompletedHook(); + } + + void triggerVerifyCompletedHook() + { + RecursiveGuard l(x_verifyCompletedHook); + if (!m_verifyCompletedHook) + { + return; + } + auto callback = m_verifyCompletedHook; + m_verifyCompletedHook = nullptr; + auto self = weak_from_this(); + m_worker->enqueue([self, callback]() { + auto validator = self.lock(); + if (!validator) + { + return; + } + if (!callback) + { + return; + } + callback(); + }); + } + virtual bool insertResettingProposal(bcos::crypto::HashType const& _hash) + { + UpgradableGuard l(x_resettingProposals); + if (m_resettingProposals.count(_hash)) + { + return false; + } + UpgradeGuard ul(l); + m_resettingProposals.insert(_hash); + return true; + } + + virtual void asyncResetTxsFlag(bcos::protocol::Block::Ptr _block, + bcos::crypto::HashListPtr _txsHashList, bool _flag, bool _emptyTxBatchHash); + + bcos::txpool::TxPoolInterface::Ptr m_txPool; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + ThreadPool::Ptr m_worker; + std::set m_resettingProposals; + mutable SharedMutex x_resettingProposals; + + std::function m_verifyCompletedHook = nullptr; + mutable RecursiveMutex x_verifyCompletedHook; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/NewViewMsgInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/NewViewMsgInterface.h new file mode 100644 index 0000000..968f6dc --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/NewViewMsgInterface.h @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for NewViewMsg + * @file NewViewMsgInterface.h + * @author: yujiechen + * @date 2021-04-15 + */ +#pragma once +#include "PBFTMessageInterface.h" +#include "ViewChangeMsgInterface.h" +namespace bcos +{ +namespace consensus +{ +class NewViewMsgInterface : virtual public PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + NewViewMsgInterface() = default; + virtual ~NewViewMsgInterface() {} + + virtual ViewChangeMsgList const& viewChangeMsgList() const = 0; + virtual void setViewChangeMsgList(ViewChangeMsgList const& _viewChangeMsgs) = 0; + + virtual PBFTMessageList const& prePrepareList() = 0; + virtual void setPrePrepareList(PBFTMessageList const& _prePrepareList) = 0; +}; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTBaseMessageInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTBaseMessageInterface.h new file mode 100644 index 0000000..141a6b8 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTBaseMessageInterface.h @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for PBFTBaseMessage + * @file PBFTBaseMessageInterface.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "../utilities/Common.h" +#include +#include +#include +#include +#include +#include +namespace bcos::consensus +{ +class PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTBaseMessageInterface() = default; + virtual ~PBFTBaseMessageInterface() = default; + + virtual int64_t timestamp() const = 0; + virtual int32_t version() const = 0; + virtual ViewType view() const = 0; + virtual IndexType generatedFrom() const = 0; + virtual int64_t index() const = 0; + virtual void setIndex(int64_t _proposalStartIndex) = 0; + + virtual bcos::crypto::HashType const& hash() const = 0; + virtual PacketType packetType() const = 0; + + virtual void setTimestamp(int64_t _timestamp) = 0; + virtual void setVersion(int32_t _version) = 0; + virtual void setView(ViewType _view) = 0; + virtual void setGeneratedFrom(IndexType _generatedFrom) = 0; + virtual void setHash(bcos::crypto::HashType const& _hash) = 0; + virtual void setPacketType(PacketType _packetType) = 0; + + virtual bytesPointer encode(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair) const = 0; + virtual void decode(bytesConstRef _data) = 0; + + virtual bytesConstRef signatureData() = 0; + virtual bcos::crypto::HashType const& signatureDataHash() = 0; + + virtual void setSignatureData(bytes&& _signatureData) = 0; + + virtual void setSignatureData(bytes const& _signatureData) = 0; + virtual void setSignatureDataHash(bcos::crypto::HashType const& _hash) = 0; + virtual bool verifySignature( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, bcos::crypto::PublicPtr _pubKey) = 0; + + virtual void setFrom(bcos::crypto::PublicPtr _from) = 0; + virtual bcos::crypto::PublicPtr from() const = 0; +}; +inline std::string printPBFTMsgInfo(PBFTBaseMessageInterface::Ptr _pbftMsg) +{ + std::ostringstream stringstream; + stringstream << LOG_KV("reqHash", _pbftMsg->hash().abridged()) + << LOG_KV("reqIndex", _pbftMsg->index()) << LOG_KV("reqV", _pbftMsg->view()) + << LOG_KV("fromIdx", _pbftMsg->generatedFrom()); + return stringstream.str(); +} +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTCodecInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTCodecInterface.h new file mode 100644 index 0000000..c9df01a --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTCodecInterface.h @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for PBFTCodec + * @file PBFTCodecInterface.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "PBFTBaseMessageInterface.h" +#include +#include +namespace bcos +{ +namespace consensus +{ +class PBFTCodecInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTCodecInterface() = default; + virtual ~PBFTCodecInterface() {} + + virtual bytesPointer encode( + PBFTBaseMessageInterface::Ptr _pbftMessage, int32_t _version = 0) const = 0; + // Taking into account the situation of future blocks, verify the signature if and only when + // processing the message packet + virtual PBFTBaseMessageInterface::Ptr decode(bytesConstRef _data) const = 0; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageFactory.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageFactory.h new file mode 100644 index 0000000..f6c72fe --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageFactory.h @@ -0,0 +1,144 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for PBFTMessage + * @file PBFTMessageFactory.h + * @author: yujiechen + * @date 2021-04-20 + */ +#pragma once +#include "NewViewMsgInterface.h" +#include "PBFTMessageInterface.h" +#include "PBFTProposalInterface.h" +#include "PBFTRequestInterface.h" +#include "ViewChangeMsgInterface.h" +#include +#include +namespace bcos +{ +namespace consensus +{ +class PBFTMessageFactory +{ +public: + using Ptr = std::shared_ptr; + PBFTMessageFactory() = default; + virtual ~PBFTMessageFactory() {} + + virtual PBFTMessageInterface::Ptr createPBFTMsg() = 0; + virtual PBFTMessageInterface::Ptr createPBFTMsg( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, bytesConstRef _data) = 0; + + virtual ViewChangeMsgInterface::Ptr createViewChangeMsg() = 0; + virtual ViewChangeMsgInterface::Ptr createViewChangeMsg(bytesConstRef _data) = 0; + + virtual NewViewMsgInterface::Ptr createNewViewMsg() = 0; + virtual NewViewMsgInterface::Ptr createNewViewMsg(bytesConstRef _data) = 0; + virtual PBFTProposalInterface::Ptr createPBFTProposal() = 0; + virtual PBFTProposalInterface::Ptr createPBFTProposal(bytesConstRef _data) = 0; + + virtual PBFTRequestInterface::Ptr createPBFTRequest() = 0; + virtual PBFTRequestInterface::Ptr createPBFTRequest(bytesConstRef _data) = 0; + + virtual PBFTRequestInterface::Ptr populateFrom( + PacketType _packetType, bcos::protocol::BlockNumber _startIndex, int64_t _offset) + { + auto pbftRequest = createPBFTRequest(); + pbftRequest->setPacketType(_packetType); + pbftRequest->setIndex(_startIndex); + pbftRequest->setSize(_offset); + return pbftRequest; + } + + virtual PBFTRequestInterface::Ptr populateFrom(PacketType _packetType, + bcos::protocol::BlockNumber _index, bcos::crypto::HashType const& _hash) + { + auto pbftRequest = createPBFTRequest(); + pbftRequest->setPacketType(_packetType); + pbftRequest->setIndex(_index); + pbftRequest->setHash(_hash); + return pbftRequest; + } + + virtual PBFTMessageInterface::Ptr populateFrom(PacketType _packetType, int32_t _version, + ViewType _view, int64_t _timestamp, IndexType _generatedFrom, + PBFTProposalInterface::Ptr _proposal, bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, bool _needSign = true) + { + auto pbftMessage = createPBFTMsg(); + pbftMessage->setPacketType(_packetType); + pbftMessage->setVersion(_version); + pbftMessage->setView(_view); + pbftMessage->setTimestamp(_timestamp); + pbftMessage->setGeneratedFrom(_generatedFrom); + pbftMessage->setHash(_proposal->hash()); + pbftMessage->setIndex(_proposal->index()); + PBFTProposalList populatedProposalList; + // create the proposal + auto signedProposal = createPBFTProposal(); + signedProposal->setIndex(_proposal->index()); + signedProposal->setHash(_proposal->hash()); + signedProposal->setSealerId(_proposal->sealerId()); + if (_needSign) + { + auto signatureData = _cryptoSuite->signatureImpl()->sign(*_keyPair, _proposal->hash()); + signedProposal->setSignature(*signatureData); + } + pbftMessage->setConsensusProposal(signedProposal); + return pbftMessage; + } + + virtual PBFTMessageInterface::Ptr populateFrom(PacketType _packetType, + PBFTProposalInterface::Ptr _proposal, int32_t _version, ViewType _view, int64_t _timestamp, + IndexType _generatedFrom) + { + auto pbftMessage = createPBFTMsg(); + pbftMessage->setPacketType(_packetType); + pbftMessage->setVersion(_version); + pbftMessage->setView(_view); + pbftMessage->setTimestamp(_timestamp); + pbftMessage->setGeneratedFrom(_generatedFrom); + pbftMessage->setHash(_proposal->hash()); + pbftMessage->setIndex(_proposal->index()); + pbftMessage->setConsensusProposal(_proposal); + return pbftMessage; + } + + virtual PBFTProposalInterface::Ptr populateFrom( + PBFTProposalInterface::Ptr _proposal, bool _withData = true, bool _withProof = true) + { + auto proposal = createPBFTProposal(); + proposal->setIndex(_proposal->index()); + proposal->setHash(_proposal->hash()); + proposal->setSealerId(_proposal->sealerId()); + if (_withData) + { + proposal->setData(_proposal->data()); + } + // set the signature proof + if (_withProof) + { + auto signatureSize = _proposal->signatureProofSize(); + for (size_t i = 0; i < signatureSize; i++) + { + auto proof = _proposal->signatureProof(i); + proposal->appendSignatureProof(proof.first, proof.second); + } + } + return proposal; + } +}; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageInterface.h new file mode 100644 index 0000000..8714f8d --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTMessageInterface.h @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for PBFT Message + * @file PBFTMessageInterface.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "PBFTBaseMessageInterface.h" +#include "PBFTProposalInterface.h" +namespace bcos +{ +namespace consensus +{ +class PBFTMessageInterface : virtual public PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTMessageInterface() = default; + virtual ~PBFTMessageInterface() {} + + virtual void setConsensusProposal(PBFTProposalInterface::Ptr _consensusProposals) = 0; + virtual PBFTProposalInterface::Ptr consensusProposal() = 0; + + virtual void setProposals(PBFTProposalList const& _proposals) = 0; + virtual PBFTProposalList const& proposals() const = 0; + + virtual PBFTMessageInterface::Ptr populateWithoutProposal() = 0; +}; +using PBFTMessageList = std::vector; +using PBFTMessageListPtr = std::shared_ptr; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTProposalInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTProposalInterface.h new file mode 100644 index 0000000..0d0b77c --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTProposalInterface.h @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for PBFTProposal + * @file PBFTProposalInterfaces.h + * @author: yujiechen + * @date 2021-04-15 + */ +#pragma once +#include "../../framework/ProposalInterface.h" +#include "../utilities/Common.h" + +namespace bcos +{ +namespace consensus +{ +class PBFTProposalInterface : virtual public ProposalInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTProposalInterface() = default; + ~PBFTProposalInterface() override {} + + virtual size_t signatureProofSize() const = 0; + virtual std::pair signatureProof(size_t _index) const = 0; + virtual void appendSignatureProof(int64_t _nodeIdx, bytesConstRef _signatureData) = 0; + virtual void clearSignatureProof() = 0; +}; +using PBFTProposalList = std::vector; +using PBFTProposalListPtr = std::shared_ptr; + +template +inline std::string printPBFTProposal(T _proposal) +{ + std::ostringstream stringstream; + stringstream << LOG_KV("propHash", _proposal->hash().abridged()) + << LOG_KV("propIndex", _proposal->index()); + return stringstream.str(); +} +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTRequestInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTRequestInterface.h new file mode 100644 index 0000000..e5c2d3f --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTRequestInterface.h @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for PBFT request + * @file PBFTRequestInterface.h + * @author: yujiechen + * @date 2021-04-28 + */ +#pragma once +#include "PBFTBaseMessageInterface.h" +namespace bcos +{ +namespace consensus +{ +class PBFTRequestInterface : virtual public PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTRequestInterface() = default; + virtual ~PBFTRequestInterface() {} + + virtual void setSize(int64_t _size) = 0; + virtual int64_t size() const = 0; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTStorage.h b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTStorage.h new file mode 100644 index 0000000..685a25d --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/PBFTStorage.h @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief StorageInterface for PBFT + * @file PBFTStorage.cpp + * @author: yujiechen + * @date 2021-04-26 + */ +#pragma once +#include "PBFTMessageInterface.h" +#include "PBFTProposalInterface.h" +#include +#include +#include +#include +namespace bcos +{ +namespace consensus +{ +class PBFTStorage +{ +public: + using Ptr = std::shared_ptr; + PBFTStorage() = default; + virtual ~PBFTStorage() {} + + virtual PBFTProposalListPtr loadState(bcos::protocol::BlockNumber _stabledIndex) = 0; + virtual int64_t maxCommittedProposalIndex() = 0; + virtual void asyncCommitProposal(PBFTProposalInterface::Ptr _commitProposal) = 0; + virtual void asyncCommitStableCheckPoint(PBFTProposalInterface::Ptr _stableProposal) = 0; + virtual void asyncRemoveStabledCheckPoint(size_t _stabledCheckPointIndex) = 0; + + // get the latest committed proposal from the storage + virtual void asyncGetCommittedProposals(bcos::protocol::BlockNumber _start, size_t _offset, + std::function _onSuccess) = 0; + virtual void registerFinalizeHandler( + std::function _finalizeHandler) = 0; + virtual void registerOnStableCheckPointCommitFailed( + std::function + _onStableCheckPointCommitFailed) = 0; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/interfaces/ViewChangeMsgInterface.h b/bcos-pbft/bcos-pbft/pbft/interfaces/ViewChangeMsgInterface.h new file mode 100644 index 0000000..6dc2b08 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/interfaces/ViewChangeMsgInterface.h @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for ViewChangeMsg + * @file ViewChangeMsgInterface.h + * @author: yujiechen + * @date 2021-04-15 + */ +#pragma once +#include "PBFTMessageInterface.h" + +namespace bcos +{ +namespace consensus +{ +class ViewChangeMsgInterface : virtual public PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + ViewChangeMsgInterface() = default; + virtual ~ViewChangeMsgInterface() {} + + virtual PBFTProposalInterface::Ptr committedProposal() = 0; + virtual void setCommittedProposal(PBFTProposalInterface::Ptr _proposal) = 0; + + virtual PBFTMessageList const& preparedProposals() = 0; + virtual void setPreparedProposals(PBFTMessageList const& _preparedProposal) = 0; +}; +using ViewChangeMsgList = std::vector; +using ViewChangeMsgListPtr = std::shared_ptr; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTBaseMessage.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTBaseMessage.h new file mode 100644 index 0000000..cd49dd8 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTBaseMessage.h @@ -0,0 +1,153 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implementation for PBFTBaseMessage + * @file PBFTBaseMessage.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "bcos-pbft/pbft/interfaces/PBFTBaseMessageInterface.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" +#include +namespace bcos +{ +namespace consensus +{ +class PBFTBaseMessage : virtual public PBFTBaseMessageInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTBaseMessage() + : m_baseMessage(std::make_shared()), m_signatureData(std::make_shared()) + {} + + explicit PBFTBaseMessage(std::shared_ptr _baseMessage) + : m_baseMessage(_baseMessage), m_signatureData(std::make_shared()) + { + PBFTBaseMessage::deserializeToObject(); + } + + ~PBFTBaseMessage() override {} + + int64_t timestamp() const override { return m_baseMessage->timestamp(); } + int32_t version() const override { return m_baseMessage->version(); } + ViewType view() const override { return m_baseMessage->view(); } + IndexType generatedFrom() const override { return m_baseMessage->generatedfrom(); } + bcos::crypto::HashType const& hash() const override { return m_hash; } + + void setTimestamp(int64_t _timestamp) override { m_baseMessage->set_timestamp(_timestamp); } + void setVersion(int32_t _version) override { m_baseMessage->set_version(_version); } + void setView(ViewType _view) override { m_baseMessage->set_view(_view); } + void setGeneratedFrom(IndexType _generatedFrom) override + { + m_baseMessage->set_generatedfrom(_generatedFrom); + } + + void setHash(bcos::crypto::HashType const& _hash) override + { + m_hash = _hash; + m_baseMessage->set_hash(m_hash.data(), bcos::crypto::HashType::SIZE); + } + + PacketType packetType() const override { return m_packetType; } + void setPacketType(PacketType _packetType) override { m_packetType = _packetType; } + + bytesPointer encode( + bcos::crypto::CryptoSuite::Ptr, bcos::crypto::KeyPairInterface::Ptr) const override + { + return bcos::protocol::encodePBObject(m_baseMessage); + } + + bytesPointer encode() const { return bcos::protocol::encodePBObject(m_baseMessage); } + + void decode(bytesConstRef _data) override + { + bcos::protocol::decodePBObject(m_baseMessage, _data); + PBFTBaseMessage::deserializeToObject(); + } + + bytesConstRef signatureData() override + { + auto const& signatureData = m_baseMessage->signaturedata(); + return bytesConstRef((byte const*)signatureData.data(), signatureData.size()); + } + + bcos::crypto::HashType const& signatureDataHash() override { return m_dataHash; } + void setSignatureData(bytes&& _signatureData) override + { + auto size = _signatureData.size(); + m_baseMessage->set_signaturedata((std::move(_signatureData)).data(), size); + } + void setSignatureData(bytes const& _signatureData) override + { + m_baseMessage->set_signaturedata(_signatureData.data(), _signatureData.size()); + } + void setSignatureDataHash(bcos::crypto::HashType const& _hash) override + { + m_dataHash = _hash; + m_baseMessage->set_signaturehash(_hash.data(), bcos::crypto::HashType::SIZE); + } + bool verifySignature( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, bcos::crypto::PublicPtr _pubKey) override + { + return _cryptoSuite->signatureImpl()->verify(_pubKey, signatureDataHash(), signatureData()); + } + + int64_t index() const override { return m_baseMessage->index(); } + void setIndex(int64_t _index) override { m_baseMessage->set_index(_index); } + + bool operator==(PBFTBaseMessage const& _pbftMessage) const + { + return (timestamp() == _pbftMessage.timestamp()) && (version() == _pbftMessage.version()) && + (generatedFrom() == _pbftMessage.generatedFrom()) && + (view() == _pbftMessage.view()) && (hash() == _pbftMessage.hash()); + } + + void setFrom(bcos::crypto::PublicPtr _from) override { m_from = _from; } + bcos::crypto::PublicPtr from() const override { return m_from; } + +protected: + virtual void deserializeToObject() + { + auto const& hashData = m_baseMessage->hash(); + if (hashData.size() >= bcos::crypto::HashType::SIZE) + { + m_hash = + bcos::crypto::HashType((byte const*)hashData.c_str(), bcos::crypto::HashType::SIZE); + } + + auto const& signatureDataHash = m_baseMessage->signaturehash(); + if (signatureDataHash.size() >= bcos::crypto::HashType::SIZE) + { + m_dataHash = bcos::crypto::HashType( + (byte const*)signatureDataHash.c_str(), bcos::crypto::HashType::SIZE); + } + } + + std::shared_ptr baseMessage() { return m_baseMessage; } + void setBaseMessage(std::shared_ptr _baseMessage) { m_baseMessage = _baseMessage; } + + std::shared_ptr m_baseMessage; + bcos::crypto::HashType m_hash; + PacketType m_packetType = PacketType::PrePreparePacket; + + bcos::crypto::HashType m_dataHash; + bytesPointer m_signatureData; + + bcos::crypto::PublicPtr m_from; +}; +} // namespace consensus +} // namespace bcos diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.cpp b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.cpp new file mode 100644 index 0000000..bd43696 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.cpp @@ -0,0 +1,106 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTCodec + * @file PBFTCodec.cpp + * @author: yujiechen + * @date 2021-04-13 + */ +#include "PBFTCodec.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; + +bytesPointer PBFTCodec::encode(PBFTBaseMessageInterface::Ptr _pbftMessage, int32_t _version) const +{ + auto pbMessage = std::make_shared(); + + // set packetType + auto packetType = _pbftMessage->packetType(); + pbMessage->set_type((int32_t)packetType); + + // set payLoad + auto payLoad = _pbftMessage->encode(m_cryptoSuite, m_keyPair); + pbMessage->set_payload(payLoad->data(), payLoad->size()); + + // set signature + if (shouldHandleSignature(packetType)) + { + // get hash of the payLoad + auto hash = m_cryptoSuite->hashImpl()->hash(*payLoad); + // sign for the payload + auto signatureData = m_cryptoSuite->signatureImpl()->sign(*m_keyPair, hash, false); + pbMessage->set_signaturedata(signatureData->data(), signatureData->size()); + _pbftMessage->setSignatureDataHash(hash); + _pbftMessage->setSignatureData(*signatureData); + } + // set version + pbMessage->set_version(_version); + return bcos::protocol::encodePBObject(pbMessage); +} + +PBFTBaseMessageInterface::Ptr PBFTCodec::decode(bytesConstRef _data) const +{ + auto pbMessage = std::make_shared(); + bcos::protocol::decodePBObject(pbMessage, _data); + // get packetType + PacketType packetType = (PacketType)(pbMessage->type()); + // get payLoad + auto const& payLoad = pbMessage->payload(); + auto payLoadRefData = bytesConstRef((byte const*)payLoad.c_str(), payLoad.size()); + // decode the packet according to the packetType + PBFTBaseMessageInterface::Ptr decodedMsg = nullptr; + switch (packetType) + { + case PacketType::PrePreparePacket: + case PacketType::PreparePacket: + case PacketType::CommitPacket: + case PacketType::CommittedProposalResponse: + case PacketType::CheckPoint: + case PacketType::RecoverRequest: + case PacketType::RecoverResponse: + decodedMsg = m_pbftMessageFactory->createPBFTMsg(m_cryptoSuite, payLoadRefData); + break; + case PacketType::PreparedProposalResponse: + case PacketType::ViewChangePacket: + decodedMsg = m_pbftMessageFactory->createViewChangeMsg(payLoadRefData); + break; + case PacketType::NewViewPacket: + decodedMsg = m_pbftMessageFactory->createNewViewMsg(payLoadRefData); + break; + case PacketType::CommittedProposalRequest: + case PacketType::PreparedProposalRequest: + decodedMsg = m_pbftMessageFactory->createPBFTRequest(payLoadRefData); + break; + default: + BOOST_THROW_EXCEPTION(UnknownPBFTMsgType() << errinfo_comment( + "unknow pbft packetType: " + std::to_string(packetType))); + } + if (shouldHandleSignature(packetType)) + { + // set signature data for the message + auto hash = m_cryptoSuite->hashImpl()->hash(payLoadRefData); + decodedMsg->setSignatureDataHash(hash); + + auto const& signatureData = pbMessage->signaturedata(); + bytes signatureBytes(signatureData.begin(), signatureData.end()); + decodedMsg->setSignatureData(std::move(signatureBytes)); + } + decodedMsg->setPacketType(packetType); + return decodedMsg; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.h new file mode 100644 index 0000000..49e6488 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTCodec.h @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTCodec + * @file PBFTCodec.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "../../interfaces/PBFTCodecInterface.h" +#include "../../interfaces/PBFTMessageFactory.h" +#include +#include +namespace bcos::consensus +{ +class PBFTCodec : public PBFTCodecInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTCodec(bcos::crypto::KeyPairInterface::Ptr _keyPair, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, PBFTMessageFactory::Ptr _pbftMessageFactory) + : m_keyPair(std::move(_keyPair)), + m_cryptoSuite(std::move(_cryptoSuite)), + m_pbftMessageFactory(std::move(_pbftMessageFactory)) + {} + + ~PBFTCodec() override = default; + + bytesPointer encode( + PBFTBaseMessageInterface::Ptr _pbftMessage, int32_t _version = 0) const override; + + PBFTBaseMessageInterface::Ptr decode(bytesConstRef _data) const override; + +protected: + virtual bool shouldHandleSignature(PacketType _packetType) const + { + return (_packetType == PacketType::ViewChangePacket || + _packetType == PacketType::NewViewPacket); + } + +private: + bcos::crypto::KeyPairInterface::Ptr m_keyPair; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + + PBFTMessageFactory::Ptr m_pbftMessageFactory; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.cpp b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.cpp new file mode 100644 index 0000000..0d9a2fe --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.cpp @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implementation for PBFT Message + * @file PBFTMessage.cpp + * @author: yujiechen + * @date 2021-04-13 + */ +#include "PBFTMessage.h" +#include "PBFTProposal.h" +#include "bcos-pbft/core/Proposal.h" + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; +using namespace bcos::protocol; + +bytesPointer PBFTMessage::encode( + CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair) const +{ + // encode the PBFTBaseMessage + encodeHashFields(); + generateAndSetSignatureData(_cryptoSuite, _keyPair); + return encodePBObject(m_pbftRawMessage); +} + +void PBFTMessage::encodeHashFields() const +{ + auto hashFieldsData = PBFTBaseMessage::encode(); + m_pbftRawMessage->set_hashfieldsdata(hashFieldsData->data(), hashFieldsData->size()); +} + +void PBFTMessage::decode(bytesConstRef _data) +{ + decodePBObject(m_pbftRawMessage, _data); + PBFTMessage::deserializeToObject(); +} + +void PBFTMessage::deserializeToObject() +{ + auto const& hashFieldsData = m_pbftRawMessage->hashfieldsdata(); + auto baseMessageData = + bytesConstRef((byte const*)hashFieldsData.c_str(), hashFieldsData.size()); + PBFTBaseMessage::decode(baseMessageData); + + // decode the proposals + m_proposals->clear(); + if (m_pbftRawMessage->has_consensusproposal()) + { + auto consensusProposal = m_pbftRawMessage->mutable_consensusproposal(); + std::shared_ptr rawConsensusProposal(consensusProposal); + m_consensusProposal = std::make_shared(rawConsensusProposal); + } + for (int i = 0; i < m_pbftRawMessage->proposals_size(); i++) + { + std::shared_ptr rawProposal(m_pbftRawMessage->mutable_proposals(i)); + m_proposals->push_back(std::make_shared(rawProposal)); + } +} + +void PBFTMessage::decodeAndSetSignature(CryptoSuite::Ptr _cryptoSuite, bytesConstRef _data) +{ + decode(_data); + m_signatureDataHash = getHashFieldsDataHash(_cryptoSuite); +} + +void PBFTMessage::setConsensusProposal(PBFTProposalInterface::Ptr _consensusProposal) +{ + m_consensusProposal = _consensusProposal; + auto pbftProposal = std::dynamic_pointer_cast(_consensusProposal); + // set committed proposal + if (m_pbftRawMessage->has_consensusproposal()) + { + m_pbftRawMessage->unsafe_arena_release_consensusproposal(); + } + m_pbftRawMessage->unsafe_arena_set_allocated_consensusproposal( + pbftProposal->pbftRawProposal().get()); +} + +HashType PBFTMessage::getHashFieldsDataHash(CryptoSuite::Ptr _cryptoSuite) const +{ + auto const& hashFieldsData = m_pbftRawMessage->hashfieldsdata(); + auto hashFieldsDataRef = + bytesConstRef((byte const*)hashFieldsData.data(), hashFieldsData.size()); + return _cryptoSuite->hash(hashFieldsDataRef); +} + +void PBFTMessage::generateAndSetSignatureData( + CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair) const +{ + m_signatureDataHash = getHashFieldsDataHash(_cryptoSuite); + auto signature = _cryptoSuite->signatureImpl()->sign(*_keyPair, m_signatureDataHash, false); + // set the signature data + m_pbftRawMessage->set_signaturedata(signature->data(), signature->size()); +} + +void PBFTMessage::setProposals(PBFTProposalList const& _proposals) +{ + *m_proposals = _proposals; + m_pbftRawMessage->clear_proposals(); + for (auto proposal : _proposals) + { + auto proposalImpl = std::dynamic_pointer_cast(proposal); + assert(proposalImpl); + m_pbftRawMessage->mutable_proposals()->UnsafeArenaAddAllocated( + proposalImpl->pbftRawProposal().get()); + } +} + +bool PBFTMessage::operator==(PBFTMessage const& _pbftMessage) const +{ + if (!PBFTBaseMessage::operator==(_pbftMessage)) + { + return false; + } + // check proposal + for (size_t i = 0; i < _pbftMessage.proposals().size(); i++) + { + auto proposal = std::dynamic_pointer_cast((*m_proposals)[i]); + auto comparedProposal = + std::dynamic_pointer_cast((_pbftMessage.proposals())[i]); + if (*proposal != *comparedProposal) + { + return false; + } + } + return true; +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.h new file mode 100644 index 0000000..c950859 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessage.h @@ -0,0 +1,124 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implementation for PBFT Message + * @file PBFTMessage.h + * @author: yujiechen + * @date 2021-04-13 + */ +#pragma once +#include "../../interfaces/PBFTMessageInterface.h" +#include "PBFTBaseMessage.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" + +namespace bcos +{ +namespace consensus +{ +class PBFTMessage : public PBFTBaseMessage, public PBFTMessageInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTMessage() + : PBFTBaseMessage(), + m_pbftRawMessage(std::make_shared()), + m_proposals(std::make_shared()) + {} + + explicit PBFTMessage(std::shared_ptr _pbftRawMessage) : PBFTBaseMessage() + { + m_pbftRawMessage = _pbftRawMessage; + m_proposals = std::make_shared(); + PBFTMessage::deserializeToObject(); + } + + PBFTMessage(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, bytesConstRef _data) : PBFTMessage() + { + decodeAndSetSignature(_cryptoSuite, _data); + } + + ~PBFTMessage() override + { + // return back the ownership to m_consensusProposal + if (m_pbftRawMessage->has_consensusproposal()) + { + m_pbftRawMessage->unsafe_arena_release_consensusproposal(); + } + // return the ownership of rawProposal to the passed-in proposal + auto allocatedProposalSize = m_pbftRawMessage->proposals_size(); + for (int i = 0; i < allocatedProposalSize; i++) + { + m_pbftRawMessage->mutable_proposals()->UnsafeArenaReleaseLast(); + } + } + + std::shared_ptr pbftRawMessage() { return m_pbftRawMessage; } + bytesPointer encode(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair) const override; + void decode(bytesConstRef _data) override; + + void setProposals(PBFTProposalList const& _proposals) override; + PBFTProposalList const& proposals() const override { return *m_proposals; } + + void setConsensusProposal(PBFTProposalInterface::Ptr _consensusProposal) override; + PBFTProposalInterface::Ptr consensusProposal() override { return m_consensusProposal; } + + virtual void decodeAndSetSignature( + bcos::crypto::CryptoSuite::Ptr _pbftConfig, bytesConstRef _data); + + bool operator==(PBFTMessage const& _pbftMessage) const; + + bytesConstRef signatureData() override + { + auto const& signatureData = m_pbftRawMessage->signaturedata(); + return bytesConstRef((byte const*)signatureData.data(), signatureData.size()); + } + + bcos::crypto::HashType const& signatureDataHash() override { return m_signatureDataHash; } + + void setSignatureDataHash(bcos::crypto::HashType const& _hash) override + { + m_signatureDataHash = _hash; + } + + PBFTMessageInterface::Ptr populateWithoutProposal() override + { + auto pbftMessage = std::make_shared(); + encodeHashFields(); + auto const& hashFieldData = m_pbftRawMessage->hashfieldsdata(); + pbftMessage->pbftRawMessage()->set_hashfieldsdata( + hashFieldData.data(), hashFieldData.size()); + pbftMessage->deserializeToObject(); + return pbftMessage; + } + + void encodeHashFields() const; + void deserializeToObject() override; + +protected: + virtual bcos::crypto::HashType getHashFieldsDataHash( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) const; + virtual void generateAndSetSignatureData(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair) const; + +private: + std::shared_ptr m_pbftRawMessage; + PBFTProposalInterface::Ptr m_consensusProposal; + PBFTProposalListPtr m_proposals; + + mutable bcos::crypto::HashType m_signatureDataHash; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessageFactoryImpl.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessageFactoryImpl.h new file mode 100644 index 0000000..7ef29b6 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTMessageFactoryImpl.h @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTMessageFactory + * @file PBFTMessageFactoryImpl.h + * @author: yujiechen + * @date 2021-04-20 + */ +#pragma once +#include "../../interfaces/PBFTMessageFactory.h" +#include "PBFTMessage.h" +#include "PBFTNewViewMsg.h" +#include "PBFTProposal.h" +#include "PBFTRequest.h" +#include "PBFTViewChangeMsg.h" + +namespace bcos +{ +namespace consensus +{ +class PBFTMessageFactoryImpl : public PBFTMessageFactory +{ +public: + using Ptr = std::shared_ptr; + PBFTMessageFactoryImpl() = default; + ~PBFTMessageFactoryImpl() override {} + + PBFTMessageInterface::Ptr createPBFTMsg() override { return std::make_shared(); } + + ViewChangeMsgInterface::Ptr createViewChangeMsg() override + { + return std::make_shared(); + } + + NewViewMsgInterface::Ptr createNewViewMsg() override + { + return std::make_shared(); + } + + PBFTMessageInterface::Ptr createPBFTMsg( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, bytesConstRef _data) override + { + return std::make_shared(_cryptoSuite, _data); + } + + ViewChangeMsgInterface::Ptr createViewChangeMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } + + NewViewMsgInterface::Ptr createNewViewMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } + + PBFTProposalInterface::Ptr createPBFTProposal() override + { + return std::make_shared(); + } + + PBFTProposalInterface::Ptr createPBFTProposal(bytesConstRef _data) override + { + return std::make_shared(_data); + } + + PBFTRequestInterface::Ptr createPBFTRequest() override + { + return std::make_shared(); + } + + PBFTRequestInterface::Ptr createPBFTRequest(bytesConstRef _data) override + { + return std::make_shared(_data); + } +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.cpp b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.cpp new file mode 100644 index 0000000..82cbd2a --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.cpp @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTNewViewMsg + * @file PBFTNewViewMsg.cpp + * @author: yujiechen + * @date 2021-04-16 + */ + +#include "PBFTNewViewMsg.h" +#include "PBFTMessage.h" +#include "PBFTViewChangeMsg.h" +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::crypto; +bytesPointer PBFTNewViewMsg::encode(CryptoSuite::Ptr, KeyPairInterface::Ptr) const +{ + return encodePBObject(m_rawNewView); +} + +void PBFTNewViewMsg::decode(bytesConstRef _data) +{ + decodePBObject(m_rawNewView, _data); + setBaseMessage(std::shared_ptr(m_rawNewView->mutable_message())); + PBFTNewViewMsg::deserializeToObject(); +} + +void PBFTNewViewMsg::deserializeToObject() +{ + PBFTBaseMessage::deserializeToObject(); + // decode into m_viewChangeList + for (int i = 0; i < m_rawNewView->viewchangemsglist_size(); i++) + { + std::shared_ptr pbRawViewChange( + m_rawNewView->mutable_viewchangemsglist(i)); + m_viewChangeList->push_back(std::make_shared(pbRawViewChange)); + } + // decode into m_prePrepareList + for (int i = 0; i < m_rawNewView->prepreparelist_size(); i++) + { + std::shared_ptr pbftRawMessage(m_rawNewView->mutable_prepreparelist(i)); + m_prePrepareList->push_back(std::make_shared(pbftRawMessage)); + } +} + +void PBFTNewViewMsg::setViewChangeMsgList(ViewChangeMsgList const& _viewChangeMsgList) +{ + *m_viewChangeList = _viewChangeMsgList; + for (auto viewChangeMsg : _viewChangeMsgList) + { + auto pbViewChangeMsg = std::dynamic_pointer_cast(viewChangeMsg); + m_rawNewView->mutable_viewchangemsglist()->AddAllocated( + pbViewChangeMsg->rawViewChange().get()); + } +} + +void PBFTNewViewMsg::setPrePrepareList(PBFTMessageList const& _prePrepareList) +{ + *m_prePrepareList = _prePrepareList; + for (auto prePrepare : _prePrepareList) + { + auto pbPrePrepare = std::dynamic_pointer_cast(prePrepare); + pbPrePrepare->encodeHashFields(); + m_rawNewView->mutable_prepreparelist()->AddAllocated(pbPrePrepare->pbftRawMessage().get()); + } +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.h new file mode 100644 index 0000000..de57c2e --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.h @@ -0,0 +1,88 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTNewViewMsg + * @file PBFTNewViewMsg.h + * @author: yujiechen + * @date 2021-04-16 + */ +#pragma once +#include "../../interfaces/NewViewMsgInterface.h" +#include "../../interfaces/ViewChangeMsgInterface.h" +#include "PBFTBaseMessage.h" + +namespace bcos +{ +namespace consensus +{ +class PBFTNewViewMsg : public NewViewMsgInterface, public PBFTBaseMessage +{ +public: + using Ptr = std::shared_ptr; + PBFTNewViewMsg() : PBFTBaseMessage() + { + m_rawNewView = std::make_shared(); + m_rawNewView->set_allocated_message(PBFTBaseMessage::baseMessage().get()); + m_viewChangeList = std::make_shared(); + m_prePrepareList = std::make_shared(); + m_packetType = PacketType::NewViewPacket; + } + explicit PBFTNewViewMsg(bytesConstRef _data) : PBFTBaseMessage() + { + m_rawNewView = std::make_shared(); + m_viewChangeList = std::make_shared(); + m_prePrepareList = std::make_shared(); + m_packetType = PacketType::NewViewPacket; + decode(_data); + } + + ~PBFTNewViewMsg() override + { + // return back the ownership of message to the PBFTBaseMessage + m_rawNewView->unsafe_arena_release_message(); + // return back the ownership to m_viewChangeList + auto viewChangeSize = m_rawNewView->viewchangemsglist_size(); + for (auto i = 0; i < viewChangeSize; i++) + { + m_rawNewView->mutable_viewchangemsglist()->UnsafeArenaReleaseLast(); + } + auto preprepareSize = m_rawNewView->prepreparelist_size(); + for (auto i = 0; i < preprepareSize; i++) + { + m_rawNewView->mutable_prepreparelist()->UnsafeArenaReleaseLast(); + } + } + + bytesPointer encode(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair) const override; + void decode(bytesConstRef _data) override; + + void setViewChangeMsgList(ViewChangeMsgList const& _viewChangeMsgList) override; + ViewChangeMsgList const& viewChangeMsgList() const override { return *m_viewChangeList; } + + PBFTMessageList const& prePrepareList() override { return *m_prePrepareList; } + void setPrePrepareList(PBFTMessageList const& _preparedProposal) override; + +protected: + void deserializeToObject() override; + +private: + std::shared_ptr m_rawNewView; + // required and need to be verified + ViewChangeMsgListPtr m_viewChangeList; + PBFTMessageListPtr m_prePrepareList; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTProposal.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTProposal.h new file mode 100644 index 0000000..e8b000c --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTProposal.h @@ -0,0 +1,115 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief extend for PreparedProof + * @file PreparedPoof.h + * @author: yujiechen + * @date 2021-04-15 + */ +#pragma once +#include "bcos-pbft/core/Proposal.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" +namespace bcos +{ +namespace consensus +{ +class PBFTProposal : public Proposal, virtual public PBFTProposalInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTProposal() : Proposal() + { + m_pbftRawProposal = std::make_shared(); + m_pbftRawProposal->set_allocated_proposal(rawProposal().get()); + } + explicit PBFTProposal(bytesConstRef _data) : Proposal() + { + m_pbftRawProposal = std::make_shared(); + decode(_data); + } + explicit PBFTProposal(std::shared_ptr _pbftRawProposal) + : Proposal(std::shared_ptr(_pbftRawProposal->mutable_proposal())) + { + m_pbftRawProposal = _pbftRawProposal; + } + + ~PBFTProposal() override { m_pbftRawProposal->unsafe_arena_release_proposal(); } + + std::shared_ptr pbftRawProposal() { return m_pbftRawProposal; } + + size_t signatureProofSize() const override { return m_pbftRawProposal->signaturelist_size(); } + + std::pair signatureProof(size_t _index) const override + { + auto const& signatureData = m_pbftRawProposal->signaturelist(_index); + auto signatureDataRef = + bytesConstRef((byte const*)signatureData.c_str(), signatureData.size()); + return std::make_pair(m_pbftRawProposal->nodelist(_index), signatureDataRef); + } + + void appendSignatureProof(int64_t _nodeIdx, bytesConstRef _signatureData) override + { + m_pbftRawProposal->add_nodelist(_nodeIdx); + m_pbftRawProposal->add_signaturelist(_signatureData.data(), _signatureData.size()); + } + + void clearSignatureProof() override + { + m_pbftRawProposal->clear_nodelist(); + m_pbftRawProposal->clear_signaturelist(); + } + + bool operator==(PBFTProposal const& _proposal) const + { + if (!Proposal::operator==(_proposal)) + { + return false; + } + // check the signatureProof + if (_proposal.signatureProofSize() != signatureProofSize()) + { + return false; + } + size_t proofSize = signatureProofSize(); + for (size_t i = 0; i < proofSize; i++) + { + auto proof = _proposal.signatureProof(i); + auto comparedProof = signatureProof(i); + if (proof.first != comparedProof.first || + proof.second.toBytes() != comparedProof.second.toBytes()) + { + return false; + } + } + return true; + } + + bool operator!=(PBFTProposal const& _proposal) const { return !(operator==(_proposal)); } + + bytesPointer encode() const override + { + return bcos::protocol::encodePBObject(m_pbftRawProposal); + } + void decode(bytesConstRef _data) override + { + bcos::protocol::decodePBObject(m_pbftRawProposal, _data); + setRawProposal(std::shared_ptr(m_pbftRawProposal->mutable_proposal())); + } + +private: + std::shared_ptr m_pbftRawProposal; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTRequest.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTRequest.h new file mode 100644 index 0000000..53bd2cc --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTRequest.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFT request + * @file PBFTRequest.h + * @author: yujiechen + * @date 2021-04-28 + */ +#pragma once +#include "bcos-pbft/pbft/interfaces/PBFTRequestInterface.h" +#include "PBFTBaseMessage.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" +#include + +namespace bcos +{ +namespace consensus +{ +class PBFTRequest : virtual public PBFTRequestInterface, public PBFTBaseMessage +{ +public: + PBFTRequest() : PBFTBaseMessage() + { + m_pbRequest = std::make_shared(); + m_pbRequest->set_allocated_message(PBFTBaseMessage::baseMessage().get()); + } + explicit PBFTRequest(bytesConstRef _data) : PBFTBaseMessage() + { + m_pbRequest = std::make_shared(); + decode(_data); + } + + ~PBFTRequest() override { m_pbRequest->unsafe_arena_release_message(); } + + void setSize(int64_t _size) override { m_pbRequest->set_size(_size); } + int64_t size() const override { return m_pbRequest->size(); } + + bytesPointer encode( + bcos::crypto::CryptoSuite::Ptr, bcos::crypto::KeyPairInterface::Ptr) const override + { + return bcos::protocol::encodePBObject(m_pbRequest); + } + + void decode(bytesConstRef _data) override + { + bcos::protocol::decodePBObject(m_pbRequest, _data); + setBaseMessage(std::shared_ptr(m_pbRequest->mutable_message())); + PBFTBaseMessage::deserializeToObject(); + } + + bool operator==(PBFTRequest const& _pbftRequest) const + { + if (!PBFTBaseMessage::operator==(_pbftRequest)) + { + return false; + } + return _pbftRequest.size() == size(); + } + +private: + std::shared_ptr m_pbRequest; +}; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.cpp b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.cpp new file mode 100644 index 0000000..abc024a --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.cpp @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for PBFTViewChangeMsg + * @file PBFTViewChangeMsg.cpp + * @author: yujiechen + * @date 2021-04-15 + */ +#include "PBFTViewChangeMsg.h" +#include "PBFTMessage.h" +#include "PBFTProposal.h" +#include "bcos-pbft/pbft/protocol/proto/PBFT.pb.h" +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::protocol; +using namespace bcos::crypto; +PBFTViewChangeMsg::PBFTViewChangeMsg(std::shared_ptr _rawViewChange) + : PBFTBaseMessage(std::shared_ptr(_rawViewChange->mutable_message())) +{ + m_packetType = PacketType::ViewChangePacket; + m_preparedProposalList = std::make_shared(); + m_rawViewChange = _rawViewChange; + PBFTViewChangeMsg::deserializeToObject(); +} + +bytesPointer PBFTViewChangeMsg::encode(CryptoSuite::Ptr, KeyPairInterface::Ptr) const +{ + return encodePBObject(m_rawViewChange); +} + +void PBFTViewChangeMsg::decode(bytesConstRef _data) +{ + decodePBObject(m_rawViewChange, _data); + setBaseMessage(std::shared_ptr(m_rawViewChange->mutable_message())); + PBFTViewChangeMsg::deserializeToObject(); + m_packetType = PacketType::ViewChangePacket; +} + +void PBFTViewChangeMsg::setCommittedProposal(PBFTProposalInterface::Ptr _proposal) +{ + m_committedProposal = _proposal; + auto pbftProposal = std::dynamic_pointer_cast(_proposal); + // set committed proposal + if (m_rawViewChange->has_committedproposal()) + { + m_rawViewChange->unsafe_arena_release_committedproposal(); + } + m_rawViewChange->unsafe_arena_set_allocated_committedproposal( + pbftProposal->pbftRawProposal().get()); +} + +void PBFTViewChangeMsg::setPreparedProposals(PBFTMessageList const& _preparedProposals) +{ + *m_preparedProposalList = _preparedProposals; + for (auto proposal : *m_preparedProposalList) + { + auto pbftMessage = std::dynamic_pointer_cast(proposal); + m_rawViewChange->mutable_preparedproposals()->AddAllocated( + pbftMessage->pbftRawMessage().get()); + } +} + +void PBFTViewChangeMsg::deserializeToObject() +{ + PBFTBaseMessage::deserializeToObject(); + m_preparedProposalList->clear(); + std::shared_ptr rawCommittedProposal( + m_rawViewChange->mutable_committedproposal()); + m_committedProposal = std::make_shared(rawCommittedProposal); + for (int i = 0; i < m_rawViewChange->preparedproposals_size(); i++) + { + std::shared_ptr preparedMsg(m_rawViewChange->mutable_preparedproposals(i)); + m_preparedProposalList->push_back(std::make_shared(preparedMsg)); + } +} \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.h b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.h new file mode 100644 index 0000000..2038749 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.h @@ -0,0 +1,91 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ViewChangeMsg + * @file PBFTViewChangeMsg.h + * @author: yujiechen + * @date 2021-04-15 + */ +#pragma once +#include "../..//interfaces/ViewChangeMsgInterface.h" +#include "PBFTBaseMessage.h" +namespace bcos +{ +namespace consensus +{ +class PBFTViewChangeMsg : public ViewChangeMsgInterface, public PBFTBaseMessage +{ +public: + using Ptr = std::shared_ptr; + PBFTViewChangeMsg() : PBFTBaseMessage() + { + m_preparedProposalList = std::make_shared(); + m_rawViewChange = std::make_shared(); + m_rawViewChange->set_allocated_message(PBFTBaseMessage::baseMessage().get()); + m_packetType = PacketType::ViewChangePacket; + } + + explicit PBFTViewChangeMsg(std::shared_ptr _rawViewChange); + explicit PBFTViewChangeMsg(bytesConstRef _data) : PBFTBaseMessage() + { + m_preparedProposalList = std::make_shared(); + m_rawViewChange = std::make_shared(); + decode(_data); + } + + virtual ~PBFTViewChangeMsg() + { + // return back the ownership of message to PBFTBaseMessage + m_rawViewChange->unsafe_arena_release_message(); + // return back the ownership to m_committedProposal + if (m_rawViewChange->has_committedproposal()) + { + m_rawViewChange->unsafe_arena_release_committedproposal(); + } + // return back the ownership to m_preparedProposalList + auto preparedProposalSize = m_rawViewChange->preparedproposals_size(); + for (auto i = 0; i < preparedProposalSize; i++) + { + m_rawViewChange->mutable_preparedproposals()->UnsafeArenaReleaseLast(); + } + } + + std::shared_ptr rawViewChange() { return m_rawViewChange; } + + PBFTProposalInterface::Ptr committedProposal() override { return m_committedProposal; } + PBFTMessageList const& preparedProposals() override { return *m_preparedProposalList; } + + void setCommittedProposal(PBFTProposalInterface::Ptr _proposal) override; + void setPreparedProposals(PBFTMessageList const& _preparedProposals) override; + + bytesPointer encode( + bcos::crypto::CryptoSuite::Ptr, bcos::crypto::KeyPairInterface::Ptr) const override; + void decode(bytesConstRef _data) override; + +protected: + // deserialize RawViewChangeMessage to Object + void deserializeToObject() override; + +private: + std::shared_ptr m_rawViewChange; + // required and need to be verified + PBFTProposalInterface::Ptr m_committedProposal; + // optional + PBFTMessageListPtr m_preparedProposalList; +}; +using PBFTViewChangeMsgList = std::vector; +using PBFTViewChangeMsgListPtr = std::shared_ptr; +} // namespace consensus +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/protocol/proto/PBFT.proto b/bcos-pbft/bcos-pbft/pbft/protocol/proto/PBFT.proto new file mode 100644 index 0000000..0eb1727 --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/protocol/proto/PBFT.proto @@ -0,0 +1,69 @@ +syntax = "proto3"; +import "bcos-pbft/core/proto/Consensus.proto"; +package bcos.consensus; + +message BaseMessage +{ + int32 version = 1; + int64 index = 2; + // the hash of the proposals or the committed proposal + bytes hash = 3; + int64 view = 4; + int64 timestamp = 5; + // the index of the node that generated the request + int64 generatedFrom = 6; + bytes signatureHash = 7; + bytes signatureData = 8; +} + +message PBFTRawProposal +{ + RawProposal proposal = 1; + // proof for the prepared proposal + repeated int64 nodeList = 2; + repeated bytes signatureList = 3; +} + +message PBFTRawMessage +{ + bytes hashFieldsData = 1; + // for proposal consensus + PBFTRawProposal consensusProposal = 2; + // for fetch proposals + repeated PBFTRawProposal proposals = 3; + bytes signatureData = 4; +} + +message RawViewChangeMessage +{ + BaseMessage message = 1; + // used to verify the validity of the latest committed proposal + PBFTRawProposal committedProposal = 2; + // prepared but not commit proposals + // (no need to include the proposalsData, can obtain the missed proposal from other nodes) + repeated PBFTRawMessage preparedProposals = 3; +} + +message RawNewViewMessage +{ + BaseMessage message = 1; + // 2*f+1 view change message packets collected by the leader corresponding to toView + repeated RawViewChangeMessage viewChangeMsgList = 2; + repeated PBFTRawMessage prePrepareList = 3; +} + +message ProposalRequest +{ + BaseMessage message = 1; + int64 size = 2; +} + +message RawMessage +{ + int32 version = 1; + int32 type = 2; + // used to verify proposal-irrelevant request + // eg. ViewChange, NewView requests + bytes signatureData = 3; + bytes payLoad = 4; +} diff --git a/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.cpp b/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.cpp new file mode 100644 index 0000000..108996c --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.cpp @@ -0,0 +1,457 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Storage for the ledger + * @file LedgerStorage.cpp + * @author: yujiechen + * @date 2021-04-26 + */ +#include "LedgerStorage.h" +#include "../utilities/Common.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::ledger; +using namespace bcos::protocol; +using namespace bcos::storage; + +PBFTProposalListPtr LedgerStorage::loadState(BlockNumber _stabledIndex) +{ + m_maxCommittedProposalIndexFetched = false; + asyncGetLatestCommittedProposalIndex(); + auto startT = utcSteadyTime(); + while (utcSteadyTime() - startT < m_timeout) + { + if (m_maxCommittedProposalIndexFetched) + { + break; + } + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(10)); + } + if (!m_maxCommittedProposalIndexFetched) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC( + "loadState failed for fetch maxCommittedProposalIndex failed"); + BOOST_THROW_EXCEPTION(InitPBFTException() << errinfo_comment( + "loadState failed for fetch maxCommittedProposalIndex failed")); + } + // fetch the committed proposals + if (m_maxCommittedProposalIndex <= _stabledIndex) + { + PBFT_STORAGE_LOG(INFO) << LOG_DESC("no need to fetch committed proposal") + << LOG_KV("maxCommittedProposal", m_maxCommittedProposalIndex) + << LOG_KV("stableCheckPoint", _stabledIndex); + m_maxCommittedProposalIndex = _stabledIndex; + return nullptr; + } + auto offset = (m_maxCommittedProposalIndex - _stabledIndex); + PBFT_STORAGE_LOG(INFO) << LOG_DESC("recover committed proposal from the storage") + << LOG_KV("start", _stabledIndex + 1) + << LOG_KV("end", m_maxCommittedProposalIndex) << LOG_KV("size", offset); + + m_stateFetched = false; + auto self = weak_from_this(); + asyncGetCommittedProposals( + _stabledIndex + 1, offset, [self](PBFTProposalListPtr _proposalList) { + try + { + auto storage = self.lock(); + if (!storage) + { + return; + } + if (_proposalList) + { + storage->m_stateProposals = _proposalList; + } + storage->m_stateFetched = true; + storage->m_signalled.notify_all(); + } + catch (std::exception const& e) + { + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC( + "The committedProposals have been received, but the " + "callback is called exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + startT = utcSteadyTime(); + while (utcSteadyTime() - startT < m_timeout) + { + if (m_stateFetched) + { + break; + } + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(10)); + } + if (!m_stateFetched) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC( + "loadState failed for fetch committedProposal failed"); + BOOST_THROW_EXCEPTION(InitPBFTException() << errinfo_comment( + "loadState failed for fetch committedProposal failed")); + } + if (!m_stateProposals || m_stateProposals->empty()) + { + m_maxCommittedProposalIndex = _stabledIndex; + } + return m_stateProposals; +} + +void LedgerStorage::asyncGetCommittedProposals( + BlockNumber _start, size_t _offset, std::function _onSuccess) +{ + // Note: The called program must effectively handle exceptions + if (_start > m_maxCommittedProposalIndex) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC("asyncGetCommittedProposals failed") + << LOG_KV( + "maxCommittedProposalIndex", m_maxCommittedProposalIndex) + << LOG_KV("requestedMinIndex", _start); + return; + } + auto keys = std::make_shared>(); + auto endIndex = + std::min((int64_t)(_start + _offset - 1), (int64_t)m_maxCommittedProposalIndex.load()); + for (int64_t i = _start; i <= endIndex; i++) + { + keys->push_back(boost::lexical_cast(i)); + } + auto self = weak_from_this(); + m_storage->asyncGetBatch(m_pbftCommitDB, keys, + [self, _onSuccess]( + Error::UniquePtr&& _error, std::shared_ptr>&& _values) { + if (_error != nullptr) + { + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC("asyncGetCommittedProposals: get proposals failed") + << LOG_KV("error", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + try + { + auto storage = self.lock(); + if (!storage) + { + return; + } + auto proposalList = std::make_shared(); + for (auto const& value : *_values) + { + if (value.empty()) + { + PBFT_STORAGE_LOG(INFO) + << LOG_DESC("asyncGetCommittedProposals: empty committed proposal") + << LOG_KV("valuesSize", _values->size()); + _onSuccess(nullptr); + return; + } + auto proposalData = bytesConstRef((byte const*)value.data(), value.size()); + proposalList->push_back( + storage->m_messageFactory->createPBFTProposal(proposalData)); + } + _onSuccess(proposalList); + PBFT_STORAGE_LOG(INFO) << LOG_DESC("asyncGetCommittedProposals success") + << LOG_KV("proposals", proposalList->size()); + } + catch (std::exception const& e) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC("asyncGetCommittedProposals exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void LedgerStorage::asyncGetLatestCommittedProposalIndex() +{ + auto self = weak_from_this(); + m_storage->asyncGet(m_pbftCommitDB, m_maxCommittedProposalKey, + [self](Error::UniquePtr&& _error, std::string_view&& _value) { + try + { + auto storage = self.lock(); + if (!storage) + { + storage->m_signalled.notify_all(); + return; + } + if (_value.empty()) + { + storage->m_maxCommittedProposalIndexFetched = true; + storage->m_signalled.notify_all(); + return; + } + if (_error != nullptr) + { + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC("asyncGetLatestCommittedProposalIndex failed") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + storage->m_signalled.notify_all(); + return; + } + auto latestCommittedProposalIndex = boost::lexical_cast(_value); + if (storage->m_maxCommittedProposalIndex < latestCommittedProposalIndex) + { + storage->m_maxCommittedProposalIndex = latestCommittedProposalIndex; + } + storage->m_maxCommittedProposalIndexFetched = true; + storage->m_signalled.notify_all(); + PBFT_STORAGE_LOG(INFO) + << LOG_DESC("asyncGetLatestCommittedProposalIndex") + << LOG_KV("latestCommittedProposalIndex", storage->m_maxCommittedProposalIndex); + } + catch (std::exception const& e) + { + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC("asyncGetLatestCommittedProposalIndex exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void LedgerStorage::asyncCommitProposal(PBFTProposalInterface::Ptr _committedProposal) +{ + if (m_maxCommittedProposalIndex.load() >= _committedProposal->index()) + { + return; + } + m_maxCommittedProposalIndex.store(_committedProposal->index()); + PBFT_STORAGE_LOG(INFO) << LOG_DESC("asyncCommitProposal: write the committed proposal into db") + << LOG_KV("index", _committedProposal->index()); + // commit the max-index proposal information + auto maxIndexStr = boost::lexical_cast(m_maxCommittedProposalIndex); + auto maxIndexBytes = std::make_shared(maxIndexStr.begin(), maxIndexStr.end()); + asyncPutProposal( + m_pbftCommitDB, m_maxCommittedProposalKey, maxIndexBytes, _committedProposal->index()); + + // commit the data + auto encodedData = _committedProposal->encode(); + asyncPutProposal(m_pbftCommitDB, boost::lexical_cast(_committedProposal->index()), + encodedData, _committedProposal->index()); +} + +void LedgerStorage::asyncPutProposal(std::string const& _dbName, std::string const& _key, + bytesPointer _committedData, BlockNumber _proposalIndex, size_t _retryTime) +{ + auto startT = utcTime(); + auto self = weak_from_this(); + // TODO: optimize here to decrease copy overhead + // Note: asyncPut now is a sync implementation, but no need to async here since this + // timeout-head is only between 5-10ms + m_storage->asyncPut(_dbName, _key, + std::string((const char*)_committedData->data(), _committedData->size()), + [startT, _dbName, _committedData, _key, _proposalIndex, _retryTime, self]( + Error::UniquePtr&& _error) { + if (_error == nullptr) + { + PBFT_STORAGE_LOG(INFO) + << LOG_DESC("asyncPutProposal: commit success") << LOG_KV("dbName", _dbName) + << LOG_KV("key", _key) << LOG_KV("number", _proposalIndex) + << LOG_KV("timecost", (utcTime() - startT)) + << LOG_KV("dataSize", _committedData->size()); + return; + } + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC("asyncPutProposal failed") << LOG_KV("proposalIndex", _proposalIndex) + << LOG_KV("key", _key) << LOG_KV("dbName", _dbName) + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + try + { + auto ledgerStorage = self.lock(); + if (!ledgerStorage) + { + return; + } + if (_retryTime >= 3) + { + return; + } + ledgerStorage->asyncPutProposal( + _dbName, _key, _committedData, _proposalIndex, (_retryTime + 1)); + } + catch (std::exception const& e) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC("asyncPutProposal exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void LedgerStorage::asyncCommitStableCheckPoint(PBFTProposalInterface::Ptr _stableProposal) +{ + std::shared_ptr> signatureList = + std::make_shared>(); + for (size_t i = 0; i < _stableProposal->signatureProofSize(); i++) + { + auto proof = _stableProposal->signatureProof(i); + Signature signature; + signature.index = proof.first; + signature.signature = proof.second.toBytes(); + signatureList->push_back(signature); + } + auto blockHeader = + m_blockFactory->blockHeaderFactory()->createBlockHeader(_stableProposal->data()); + blockHeader->setSignatureList(*signatureList); + auto blockSignatureList = blockHeader->signatureList(); + PBFT_LOG(INFO) << LOG_DESC("asyncCommitStableCheckPoint: set signatureList") + << LOG_KV("index", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("proofSize", signatureList->size()) + << LOG_KV("blockProofSize", blockSignatureList.size()); + // Note: enqueue here to increase the performance since commitBlock is a sync implementation + auto self = weak_from_this(); + m_commitBlockWorker->enqueue([self, blockHeader, _stableProposal]() { + auto storage = self.lock(); + if (!storage) + { + return; + } + // get the transactions list + auto txsInfo = storage->m_blockFactory->createBlock(_stableProposal->extraData()); + storage->commitStableCheckPoint(_stableProposal, blockHeader, txsInfo); + }); +} +void LedgerStorage::onStableCheckPointCommitted( + size_t _txsSize, BlockHeader::Ptr _blockHeader, LedgerConfig::Ptr _ledgerConfig) +{ + _ledgerConfig->setSealerId(_blockHeader->sealer()); + _ledgerConfig->setTxsSize(_txsSize); + // reset the blockNumber + _ledgerConfig->setBlockNumber(_blockHeader->number()); + _ledgerConfig->setHash(_blockHeader->hash()); + // finalize consensus + if (m_finalizeHandler) + { + m_finalizeHandler(_ledgerConfig, false); + } + // remove the proposal committed into the ledger, + // don't remove the latest stabled checkpoint for checkpoint msg response consideration + if (_blockHeader->number() > c_reservedCheckPointSize) + { + asyncRemoveStabledCheckPoint(_blockHeader->number() - c_reservedCheckPointSize); + } +} +void LedgerStorage::commitStableCheckPoint(PBFTProposalInterface::Ptr _stableProposal, + BlockHeader::Ptr _blockHeader, Block::Ptr _blockInfo) +{ + auto self = weak_from_this(); + auto startT = utcTime(); + m_scheduler->commitBlock(_blockHeader, [_stableProposal, _blockHeader, _blockInfo, startT, + self](Error::Ptr&& _error, + LedgerConfig::Ptr _ledgerConfig) { + try + { + auto ledgerStorage = self.lock(); + if (!ledgerStorage) + { + return; + } + if (_error != nullptr) + { + PBFT_STORAGE_LOG(ERROR) << LOG_DESC("commitStableCheckPoint failed") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorInfo", _error->errorMessage()) + << LOG_KV("proposalIndex", _blockHeader->number()) + << LOG_KV("timecost", utcTime() - startT); + ledgerStorage->m_onStableCheckPointCommitFailed(std::move(_error), _stableProposal); + return; + } + auto commitPerTx = + (double)(utcTime() - startT) / (double)(_blockInfo->transactionsHashSize()); + PBFT_STORAGE_LOG(INFO) + << METRIC << LOG_DESC("commitStableCheckPoint success") + << LOG_KV("index", _blockHeader->number()) + << LOG_KV("hash", _ledgerConfig->hash().abridged()) + << LOG_KV("txs", _blockInfo->transactionsHashSize()) + << LOG_KV("timeCost", utcTime() - startT) << LOG_KV("commitPerTx", commitPerTx); + auto txsSize = _blockInfo->transactionsHashSize(); + // Note:Here the thread pool is used to asynchronize the operation of PBFT finalize to + // prevent the commitBlock from calling the callback synchronously and affecting the + // performance. + ledgerStorage->m_commitBlockWorker->enqueue( + [self, txsSize, _blockHeader, _ledgerConfig]() { + auto storage = self.lock(); + if (!storage) + { + return; + } + storage->onStableCheckPointCommitted(txsSize, _blockHeader, _ledgerConfig); + }); + } + catch (std::exception const& e) + { + PBFT_STORAGE_LOG(WARNING) << LOG_DESC("commitStableCheckPoint exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void LedgerStorage::asyncRemoveStabledCheckPoint(size_t _stabledCheckPointIndex) +{ + PBFT_STORAGE_LOG(INFO) << LOG_DESC("asyncRemoveStabledCheckPoint") + << LOG_KV("index", _stabledCheckPointIndex); + asyncRemove(m_pbftCommitDB, boost::lexical_cast(_stabledCheckPointIndex)); +} + +void LedgerStorage::asyncRemove(std::string const& _dbName, std::string const& _key) +{ + m_storage->asyncRemove(_dbName, _key, [_dbName, _key](const Error::Ptr& _error) { + if (_error == nullptr) + { + PBFT_STORAGE_LOG(INFO) << LOG_DESC("asyncRemove success") << LOG_KV("dbName", _dbName) + << LOG_KV("key", _key); + return; + } + // TODO: remove failed + PBFT_STORAGE_LOG(WARNING) << LOG_DESC("asyncRemove failed") << LOG_KV("dbName", _dbName) + << LOG_KV("key", _key); + }); +} + +void LedgerStorage::createKVTable(std::string const& _dbName) +{ + auto ret = std::make_shared>(); + auto future = ret->get_future(); + std::string valueFields = "value"; + m_storage->storage()->asyncCreateTable( + _dbName, valueFields, [_dbName, ret](Error::UniquePtr&& _error, std::optional
&&) { + if (_error && _error->errorCode() != bcos::storage::StorageError::TableExists) + { + PBFT_STORAGE_LOG(WARNING) + << LOG_DESC("createKVTable error") << LOG_KV("table", _dbName) + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + ret->set_value(std::move(_error)); + return; + } + ret->set_value(nullptr); + PBFT_STORAGE_LOG(INFO) << LOG_DESC("createKVTable success") << LOG_KV("table", _dbName); + }); + auto error = future.get(); + if (error) + { + BOOST_THROW_EXCEPTION( + InitPBFTException() << errinfo_comment( + "Create PBFT backup DB failed, code: " + std::to_string(error->errorCode()) + + ", message:" + error->errorMessage())); + } +} diff --git a/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.h b/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.h new file mode 100644 index 0000000..b0526fc --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/storage/LedgerStorage.h @@ -0,0 +1,122 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Storage for the ledger + * @file LedgerStorage.h + * @author: yujiechen + * @date 2021-04-26 + */ +#pragma once +#include "../interfaces/PBFTMessageFactory.h" +#include "../interfaces/PBFTStorage.h" +#include +#include +#include +#include + +#include + +namespace bcos::consensus +{ +class LedgerStorage : public PBFTStorage, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + LedgerStorage(bcos::scheduler::SchedulerInterface::Ptr _scheduler, + std::shared_ptr _storage, + bcos::protocol::BlockFactory::Ptr _blockFactory, PBFTMessageFactory::Ptr _messageFactory) + : m_scheduler(std::move(_scheduler)), + m_storage(std::move(_storage)), + m_blockFactory(std::move(_blockFactory)), + m_messageFactory(std::move(_messageFactory)) + { + createKVTable(m_pbftCommitDB); + m_commitBlockWorker = std::make_shared("blockSubmit", 1); + } + ~LedgerStorage() override + { + if (m_commitBlockWorker) + { + m_commitBlockWorker->stop(); + } + } + void createKVTable(std::string const& _dbName); + PBFTProposalListPtr loadState(bcos::protocol::BlockNumber _stabledIndex) override; + + // commit the committed proposal into the kv-storage + void asyncCommitProposal(PBFTProposalInterface::Ptr _proposal) override; + // commit the executed-block into the blockchain + void asyncCommitStableCheckPoint(PBFTProposalInterface::Ptr _stableProposal) override; + void registerFinalizeHandler( + std::function _finalizeHandler) + override + { + m_finalizeHandler = std::move(_finalizeHandler); + } + void registerOnStableCheckPointCommitFailed( + std::function + _onStableCheckPointCommitFailed) override + { + m_onStableCheckPointCommitFailed = std::move(_onStableCheckPointCommitFailed); + } + + void asyncGetCommittedProposals(bcos::protocol::BlockNumber _start, size_t _offset, + std::function _onSuccess) override; + + int64_t maxCommittedProposalIndex() override { return m_maxCommittedProposalIndex; } + + void asyncRemoveStabledCheckPoint(size_t _stabledCheckPointIndex) override; + +protected: + virtual void asyncPutProposal(std::string const& _dbName, std::string const& _key, + bytesPointer _committedData, bcos::protocol::BlockNumber _proposalIndex, + size_t _retryTime = 0); + + virtual void asyncRemove(std::string const& _dbName, std::string const& _key); + + virtual void commitStableCheckPoint(PBFTProposalInterface::Ptr _stableProposal, + bcos::protocol::BlockHeader::Ptr _blockHeader, bcos::protocol::Block::Ptr _blockInfo); + virtual void asyncGetLatestCommittedProposalIndex(); + + virtual void onStableCheckPointCommitted(size_t _txsSize, + bcos::protocol::BlockHeader::Ptr _blockHeader, + bcos::ledger::LedgerConfig::Ptr _ledgerConfig); + +protected: + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + std::shared_ptr m_storage; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + PBFTMessageFactory::Ptr m_messageFactory; + + std::string m_maxCommittedProposalKey = "max_committed_proposal"; + std::string m_pbftCommitDB = "pbftCommitDB"; + + + std::atomic m_maxCommittedProposalIndex = {0}; + std::atomic_bool m_maxCommittedProposalIndexFetched = {false}; + + PBFTProposalListPtr m_stateProposals = nullptr; + std::atomic_bool m_stateFetched = {false}; + size_t m_timeout = 10000; + bcos::protocol::BlockNumber c_reservedCheckPointSize = 5; + + boost::condition_variable m_signalled; + boost::mutex x_signalled; + std::function m_finalizeHandler; + std::function + m_onStableCheckPointCommitFailed; + std::shared_ptr m_commitBlockWorker; +}; +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/bcos-pbft/pbft/utilities/Common.h b/bcos-pbft/bcos-pbft/pbft/utilities/Common.h new file mode 100644 index 0000000..df6390a --- /dev/null +++ b/bcos-pbft/bcos-pbft/pbft/utilities/Common.h @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date 2021-04-12 + */ +#pragma once +#include +#include +#include + +#define PBFT_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("CONSENSUS") << LOG_BADGE("PBFT") +#define PBFT_STORAGE_LOG(LEVEL) \ + BCOS_LOG(LEVEL) << LOG_BADGE("CONSENSUS") << LOG_BADGE("PBFT") << LOG_BADGE("STORAGE") + +namespace bcos::consensus +{ +enum PacketType : uint32_t +{ + PrePreparePacket = 0x00, + PreparePacket = 0x01, + CommitPacket = 0x02, + ViewChangePacket = 0x03, + NewViewPacket = 0x04, + CommittedProposalRequest = 0x5, + CommittedProposalResponse = 0x6, + PreparedProposalRequest = 0x7, + PreparedProposalResponse = 0x8, + CheckPoint = 0x9, + RecoverRequest = 0xa, + RecoverResponse = 0xb, +}; +DERIVE_BCOS_EXCEPTION(UnknownPBFTMsgType); +DERIVE_BCOS_EXCEPTION(InitPBFTException); +} // namespace bcos::consensus \ No newline at end of file diff --git a/bcos-pbft/test/CMakeLists.txt b/bcos-pbft/test/CMakeLists.txt new file mode 100644 index 0000000..7dee219 --- /dev/null +++ b/bcos-pbft/test/CMakeLists.txt @@ -0,0 +1,30 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-framework +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-pbft) +find_package(Protobuf REQUIRED) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${PBFT_TARGET} ${TABLE_TARGET} bcos-crypto ${TARS_PROTOCOL_TARGET} protobuf::libprotobuf Boost::unit_test_framework) +add_test(NAME test-pbft WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-pbft/test/unittests/core/TimerTest.cpp b/bcos-pbft/test/unittests/core/TimerTest.cpp new file mode 100644 index 0000000..d8891bd --- /dev/null +++ b/bcos-pbft/test/unittests/core/TimerTest.cpp @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for Timer + * @file TimerTest.cpp + * @author: yujiechen + * @date 2021-04-26 + */ +#include "bcos-pbft/pbft/engine/PBFTTimer.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::consensus; +namespace bcos +{ +namespace test +{ +class FakeTimer : public Timer +{ +public: + explicit FakeTimer(uint64_t _timeout) : Timer(_timeout) {} + ~FakeTimer() override {} + void setTriggerTimeout(bool _triggerTimeout) { m_triggerTimeout = _triggerTimeout; } + bool triggerTimeout() { return m_triggerTimeout; } + void registerTimeoutHandler(std::function) override {} + +protected: + // invoked everytime when it reaches the timeout + void run() override + { + std::cout << "### run timeout handler now" << std::endl; + m_triggerTimeout = true; + } + +private: + std::atomic_bool m_triggerTimeout = false; +}; + +BOOST_FIXTURE_TEST_SUITE(TimerTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testTimer) +{ + uint64_t timeoutInterval = 200; + auto timer = std::make_shared(timeoutInterval); + auto startT = utcTime(); + for (size_t i = 0; i < 4; i++) + { + timer->setTriggerTimeout(false); + // start the timer + timer->start(); + // sleep + startT = utcTime(); + std::this_thread::sleep_for(std::chrono::milliseconds(timeoutInterval + 200)); + std::cout << "#### sleep eclipse:" << utcTime() - startT; + // stop the timer + timer->stop(); + // check the value + std::cout << "##### testTimer: index" << i << std::endl; + std::cout << std::endl; + auto eclipse = utcTime() - startT; + if (eclipse > timeoutInterval) + { + BOOST_CHECK(timer->triggerTimeout() == true); + } + } + + std::cout << std::endl; + std::cout << "#### case1" << std::endl; + timer->setTriggerTimeout(false); + timer->start(); + startT = utcTime(); + std::this_thread::sleep_for(std::chrono::milliseconds(timeoutInterval - 100)); + std::cout << "#### sleep eclipse:" << utcTime() - startT; + auto eclipse = utcTime() - startT; + if (eclipse < timeoutInterval) + { + BOOST_CHECK(timer->triggerTimeout() == false); + } + timer->stop(); + + std::cout << std::endl; + std::cout << "#### case2" << std::endl; + // reset the timer + timer->setTriggerTimeout(false); + timer->reset(60); + timer->start(); + startT = utcTime(); + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + std::cout << "#### sleep eclipse:" << utcTime() - startT; + BOOST_CHECK(timer->triggerTimeout() == true); + timer->stop(); +} +BOOST_AUTO_TEST_CASE(testPBFTTimer) +{ + uint64_t timeoutInterval = 100; + auto timer = std::make_shared(timeoutInterval); + timer->start(); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/test/unittests/main/main.cpp b/bcos-pbft/test/unittests/main/main.cpp new file mode 100644 index 0000000..470010c --- /dev/null +++ b/bcos-pbft/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include \ No newline at end of file diff --git a/bcos-pbft/test/unittests/pbft/PBFTConfigTest.cpp b/bcos-pbft/test/unittests/pbft/PBFTConfigTest.cpp new file mode 100644 index 0000000..6d48f3b --- /dev/null +++ b/bcos-pbft/test/unittests/pbft/PBFTConfigTest.cpp @@ -0,0 +1,173 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit tests for PBFTConfig + * @file PBFTConfigTest.cpp + * @author: yujiechen + * @date 2021-05-28 + */ +#include +#include + +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "test/unittests/pbft/PBFTFixture.h" +#include "test/unittests/protocol/FakePBFTMessage.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; +using namespace bcos::protocol; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(PBFTConfigTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testPBFTInit) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + bcos::crypto::KeyPairInterface::Ptr keyPair = signatureImpl->generateKeyPair(); + auto gateWay = std::make_shared(); + + size_t consensusTimeout = 4; + size_t txCountLimit = 2000; + auto faker = std::make_shared(cryptoSuite, keyPair, nullptr, txCountLimit); + faker->frontService()->setGateWay(gateWay); + + // case1: with zero consensus node + BOOST_CHECK_THROW(faker->init(), InitConsensusException); + + // case2: with 10 consensus nodes + auto pbftConfig = faker->pbftConfig(); + auto ledgerConfig = faker->ledger()->ledgerConfig(); + auto pbftEngine = faker->pbftEngine(); + + auto proposalIndex = ledgerConfig->blockNumber() + 1; + auto parent = (faker->ledger()->ledgerData())[ledgerConfig->blockNumber()]; + auto block = faker->ledger()->init(parent->blockHeader(), true, proposalIndex, 0, 0); + auto blockData = std::make_shared(); + block->encode(*blockData); + + faker->appendConsensusNode(faker->nodeID()); + + // case3: with expired state + auto pbftMsgFixture = std::make_shared(cryptoSuite, keyPair); + auto fakedProposal = pbftMsgFixture->fakePBFTProposal(faker->ledger()->blockNumber() - 1, + ledgerConfig->hash(), *blockData, std::vector(), std::vector()); + pbftConfig->storage()->asyncCommitProposal(fakedProposal); + faker->init(); + + BOOST_CHECK(pbftConfig->progressedIndex() == faker->ledger()->blockNumber() + 1); + auto cacheProcessor = + std::dynamic_pointer_cast(pbftEngine->cacheProcessor()); + BOOST_CHECK(cacheProcessor->stableCheckPointQueueSize() == 0); + + fakedProposal = pbftMsgFixture->fakePBFTProposal(faker->ledger()->blockNumber(), + ledgerConfig->hash(), *blockData, std::vector(), std::vector()); + pbftConfig->storage()->asyncCommitProposal(fakedProposal); + faker->init(); + + BOOST_CHECK(pbftConfig->progressedIndex() == faker->ledger()->blockNumber() + 1); + BOOST_CHECK(cacheProcessor->stableCheckPointQueueSize() == 0); + + faker->init(); + BOOST_CHECK(pbftConfig->nodeIndex() == 0); + BOOST_CHECK( + pbftConfig->getConsensusNodeByIndex(0)->nodeID()->data() == faker->nodeID()->data()); + + // check nodeIndex + size_t consensusNodesSize = 9; + for (size_t i = 0; i < consensusNodesSize; i++) + { + auto peerKeyPair = signatureImpl->generateKeyPair(); + faker->appendConsensusNode(peerKeyPair->publicKey()); + faker->init(); + auto nodeIndex = pbftConfig->nodeIndex(); + auto node = pbftConfig->getConsensusNodeByIndex(nodeIndex); + BOOST_CHECK(node->nodeID()->data() == faker->nodeID()->data()); + } + BOOST_CHECK(pbftConfig->consensusNodeList().size() == (consensusNodesSize + 1)); + BOOST_CHECK(pbftConfig->nodeID()->data() == faker->nodeID()->data()); + + // check params + BOOST_CHECK(pbftConfig->isConsensusNode()); + pbftConfig->setConsensusTimeout(consensusTimeout); + BOOST_CHECK(pbftConfig->consensusTimeout() == consensusTimeout); + BOOST_CHECK(pbftConfig->blockTxCountLimit() == txCountLimit); + // Note: should update this check if consensusNodesSize has been changed + BOOST_CHECK(pbftConfig->minRequiredQuorum() == 7); + BOOST_CHECK(pbftConfig->committedProposal()->index() == faker->ledger()->blockNumber()); + BOOST_CHECK(pbftConfig->committedProposal()->hash() == ledgerConfig->hash()); + // check PBFT related information + BOOST_CHECK(pbftConfig->progressedIndex() == faker->ledger()->blockNumber() + 1); + BOOST_CHECK(pbftConfig->view() == 0); + BOOST_CHECK(pbftConfig->toView() == 0); + // check object + BOOST_CHECK(pbftConfig->cryptoSuite()); + BOOST_CHECK(pbftConfig->pbftMessageFactory()); + BOOST_CHECK(pbftConfig->frontService()); + BOOST_CHECK(pbftConfig->codec()); + BOOST_CHECK(pbftConfig->validator()); + BOOST_CHECK(pbftConfig->storage()); + BOOST_CHECK(pbftConfig->highWaterMark() == + pbftConfig->progressedIndex() + pbftConfig->waterMarkLimit()); + BOOST_CHECK(pbftConfig->stateMachine()); + BOOST_CHECK(pbftConfig->expectedCheckPoint() == faker->ledger()->blockNumber() + 1); + + +#if 0 + // case4: with new committed index, but invalid data + auto hash = hashImpl->hash(std::string("checkpoint")); + fakedProposal = pbftMsgFixture->fakePBFTProposal(faker->ledger()->blockNumber() + 1, hash, + bytes(), std::vector(), std::vector()); + pbftConfig->storage()->asyncCommitProposal(fakedProposal); + faker->init(); + BOOST_CHECK(pbftConfig->progressedIndex() == faker->ledger()->blockNumber() + 1); + BOOST_CHECK(pbftEngine->cacheProcessor()->committedQueue() == 0); + BOOST_CHECK(pbftConfig->expectedCheckPoint() == faker->ledger()->blockNumber() + 1); +#endif + + // case5: with new committed index and valid data, collect enough checkpoint proposal and commit + // it + std::cout << "##### case5: with new committed index and valid data" << std::endl; + faker->clearConsensusNodeList(); + faker->appendConsensusNode(faker->nodeID()); + auto blockHeader = block->blockHeader(); + fakedProposal = pbftMsgFixture->fakePBFTProposal(proposalIndex, blockHeader->hash(), *blockData, + std::vector(), std::vector()); + pbftConfig->storage()->asyncCommitProposal(fakedProposal); + faker->init(); + BOOST_CHECK(pbftConfig->minRequiredQuorum() == 1); + auto startT = utcTime(); + while (pbftConfig->committedProposal()->index() != proposalIndex && + (utcTime() - startT <= 60 * 1000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(5)); + } + BOOST_CHECK(faker->ledger()->blockNumber() == proposalIndex); + BOOST_CHECK(pbftConfig->progressedIndex() == proposalIndex + 1); + BOOST_CHECK(cacheProcessor->committedQueueSize() == 0); + BOOST_CHECK(cacheProcessor->stableCheckPointQueueSize() == 0); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-pbft/test/unittests/pbft/PBFTEngineTest.cpp b/bcos-pbft/test/unittests/pbft/PBFTEngineTest.cpp new file mode 100644 index 0000000..adcd08a --- /dev/null +++ b/bcos-pbft/test/unittests/pbft/PBFTEngineTest.cpp @@ -0,0 +1,279 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit tests for PBFTEngine + * @file PBFTEngineTest.cpp + * @author: yujiechen + * @date 2021-05-31 + */ +#include +#include + +#include "test/unittests/pbft/PBFTFixture.h" +#include "test/unittests/protocol/FakePBFTMessage.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::consensus; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(PBFTEngineTest, TestPromptFixture) +inline bool shouldExit(std::map& _consensusNodes, + BlockNumber _expectedNumber, size_t _connectedNodes) +{ + for (IndexType i = 0; i < _connectedNodes; i++) + { + auto faker = _consensusNodes[i]; + if (faker->ledger()->blockNumber() != _expectedNumber) + { + return false; + } + } + return true; +} + +void testPBFTEngineWithFaulty(size_t _consensusNodes, size_t _connectedNodes) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + BlockNumber currentBlockNumber = 19; + std::cout << "### createFakers: " << currentBlockNumber << std::endl; + auto fakerMap = createFakers(cryptoSuite, _consensusNodes, currentBlockNumber, _connectedNodes); + std::cout << "### createFakers: " << currentBlockNumber << " success" << std::endl; + // check the leader notify the sealer to seal proposals + IndexType leaderIndex = 0; + auto leaderFaker = fakerMap[leaderIndex]; + size_t expectedProposal = (size_t)(leaderFaker->ledger()->blockNumber() + 1); + + // the leader submit proposals + auto pbftMsgFixture = std::make_shared(cryptoSuite, leaderFaker->keyPair()); + auto block = fakeBlock(cryptoSuite, leaderFaker, expectedProposal, 10); + auto blockData = std::make_shared(); + block->encode(*blockData); + auto blockHeader = block->blockHeader(); + BOOST_CHECK(blockHeader); + // handle pre-prepare message ,broadcast prepare messages and handle the collectted + // prepare-request + // check the duplicated case + for (size_t i = 0; i < 3; i++) + { + leaderFaker->pbftEngine()->asyncSubmitProposal( + false, ref(*blockData), blockHeader->number(), blockHeader->hash(), nullptr); + } + // Discontinuous case + auto faker = fakerMap[3]; + block = fakeBlock(cryptoSuite, faker, currentBlockNumber + 4, 10); + blockHeader = block->blockHeader(); + blockData = std::make_shared(); + block->encode(*blockData); + faker->pbftEngine()->asyncSubmitProposal( + false, ref(*blockData), blockHeader->number(), blockHeader->hash(), nullptr); + + // the next leader seal the next block + IndexType nextLeaderIndex = 1; + auto nextLeaderFacker = fakerMap[nextLeaderIndex]; + auto nextBlock = expectedProposal + 1; + block = fakeBlock(cryptoSuite, nextLeaderFacker, nextBlock, 10); + blockHeader = block->blockHeader(); + blockData = std::make_shared(); + block->encode(*blockData); + nextLeaderFacker->pbftEngine()->asyncSubmitProposal( + false, ref(*blockData), blockHeader->number(), blockHeader->hash(), nullptr); + + // handle prepare message and broadcast commit messages + auto startT = utcTime(); + while (!shouldExit(fakerMap, currentBlockNumber + 2, _connectedNodes) && + (utcTime() - startT <= 60 * 1000)) + { + for (auto const& node : fakerMap) + { + node.second->pbftEngine()->executeWorkerByRoundbin(); + } + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + // supplement expectedProposal + 2 + faker = fakerMap[2]; + block = fakeBlock(cryptoSuite, faker, currentBlockNumber + 3, 10); + blockHeader = block->blockHeader(); + blockData = std::make_shared(); + block->encode(*blockData); + faker->pbftEngine()->asyncSubmitProposal( + false, ref(*blockData), blockHeader->number(), blockHeader->hash(), nullptr); + + startT = utcTime(); + while (!shouldExit(fakerMap, currentBlockNumber + 4, _connectedNodes) && + (utcTime() - startT <= 60 * 1000)) + { + for (auto const& node : fakerMap) + { + node.second->pbftEngine()->executeWorkerByRoundbin(); + } + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } +} + +// TODO: Remove this test due to memory access violation +BOOST_AUTO_TEST_CASE(testPBFTEngineWithAllNonFaulty) +{ + size_t consensusNodeSize = 10; + // case1: all non-faulty + std::cout << "testPBFTEngineWithFaulty with 10 non-faulty" << std::endl; + testPBFTEngineWithFaulty(consensusNodeSize, consensusNodeSize); + std::cout << "testPBFTEngineWithFaulty with 10 non-faulty success" << std::endl; + // case2: with f=3 faulty + std::cout << "testPBFTEngineWithFaulty with 7 non-faulty" << std::endl; + testPBFTEngineWithFaulty(consensusNodeSize, 7); + std::cout << "testPBFTEngineWithFaulty with 7 non-faulty success" << std::endl; +} + +BOOST_AUTO_TEST_CASE(testHandlePrePrepareMsg) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + size_t consensusNodeSize = 2; + size_t currentBlockNumber = 10; + auto fakerMap = + createFakers(cryptoSuite, consensusNodeSize, currentBlockNumber, consensusNodeSize); + + auto expectedIndex = (fakerMap[0])->pbftConfig()->progressedIndex(); + auto expectedLeader = (fakerMap[0])->pbftConfig()->leaderIndex(expectedIndex); + auto leaderFaker = fakerMap[expectedLeader]; + auto nonLeaderFaker = fakerMap[(expectedLeader + 1) % consensusNodeSize]; + + auto ledgerConfig = leaderFaker->ledger()->ledgerConfig(); + auto parent = (leaderFaker->ledger()->ledgerData())[ledgerConfig->blockNumber()]; + auto block = leaderFaker->ledger()->init(parent->blockHeader(), true, expectedIndex, 0, 0); + auto blockData = std::make_shared(); + block->encode(*blockData); + + // case1: invalid block number + auto hash = hashImpl->hash(std::string("invalidCase")); + auto leaderMsgFixture = + std::make_shared(cryptoSuite, leaderFaker->keyPair()); + auto index = (expectedIndex - 1); + + auto pbftMsg = fakePBFTMessage(utcTime(), 1, leaderFaker->pbftConfig()->view(), expectedLeader, + hash, index, bytes(), 0, leaderMsgFixture, PacketType::PrePreparePacket); + + auto fakedProposal = + leaderMsgFixture->fakePBFTProposal(leaderFaker->ledger()->blockNumber() + 1, hash, + *blockData, std::vector(), std::vector()); + pbftMsg->setConsensusProposal(fakedProposal); + auto data = leaderFaker->pbftConfig()->codec()->encode(pbftMsg); + + nonLeaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, nonLeaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + nonLeaderFaker->pbftEngine()->executeWorker(); + BOOST_CHECK(!nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + + // case2: invalid view + index = expectedIndex; + ViewType view = 10; + for (auto node : fakerMap) + { + node.second->pbftConfig()->setView(view); + node.second->pbftConfig()->setToView(view); + } + expectedLeader = (fakerMap[0])->pbftConfig()->leaderIndex(index); + leaderFaker = fakerMap[expectedLeader]; + pbftMsg = fakePBFTMessage(utcTime(), 1, (leaderFaker->pbftConfig()->view() - 1), expectedLeader, + hash, index, bytes(), 0, leaderMsgFixture, PacketType::PrePreparePacket); + pbftMsg->setConsensusProposal(fakedProposal); + + data = leaderFaker->pbftConfig()->codec()->encode(pbftMsg); + nonLeaderFaker = fakerMap[(expectedLeader + 1) % consensusNodeSize]; + nonLeaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, nonLeaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + nonLeaderFaker->pbftEngine()->executeWorker(); + BOOST_CHECK(!nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + + // case3: not from the leader + pbftMsg = fakePBFTMessage(utcTime(), 1, (nonLeaderFaker->pbftConfig()->view()), + (expectedLeader + 1) % consensusNodeSize, hash, index, bytes(), 0, leaderMsgFixture, + PacketType::PrePreparePacket); + pbftMsg->setConsensusProposal(fakedProposal); + + data = nonLeaderFaker->pbftConfig()->codec()->encode(pbftMsg); + leaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, leaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + leaderFaker->pbftEngine()->executeWorker(); + BOOST_CHECK(!leaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + + // case4: invalid signature + pbftMsg = fakePBFTMessage(utcTime(), 1, (leaderFaker->pbftConfig()->view()), expectedLeader, + hash, index, bytes(), 0, leaderMsgFixture, PacketType::PrePreparePacket); + pbftMsg->setConsensusProposal(fakedProposal); + + data = nonLeaderFaker->pbftConfig()->codec()->encode(pbftMsg); + nonLeaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, nonLeaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + nonLeaderFaker->pbftEngine()->executeWorker(); + BOOST_CHECK(!nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + + // case5: invalid pre-prepare for txpool verify failed + data = leaderFaker->pbftConfig()->codec()->encode(pbftMsg); + nonLeaderFaker->txpool()->setVerifyResult(false); + nonLeaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, nonLeaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + nonLeaderFaker->pbftEngine()->executeWorker(); + BOOST_CHECK(!nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + + // case6: valid pre-prepare + nonLeaderFaker->txpool()->setVerifyResult(true); + nonLeaderFaker->pbftEngine()->onReceivePBFTMessage( + nullptr, nonLeaderFaker->keyPair()->publicKey(), ref(*data), nullptr); + nonLeaderFaker->pbftEngine()->executeWorker(); + auto startT = utcTime(); + while (!nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg) && + (utcTime() - startT <= 60 * 1000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + BOOST_CHECK(nonLeaderFaker->pbftEngine()->cacheProcessor()->existPrePrepare(pbftMsg)); + nonLeaderFaker->pbftConfig()->setConsensusTimeout(200); + leaderFaker->pbftConfig()->setConsensusTimeout(200); + leaderFaker->pbftConfig()->timer()->start(); + startT = utcTime(); + while ( + (!leaderFaker->pbftEngine()->isTimeout() || !nonLeaderFaker->pbftEngine()->isTimeout()) && + (utcTime() - startT <= 60 * 1000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + // wait to trigger viewchange since not reach consensus + startT = utcTime(); + while ((leaderFaker->pbftEngine()->isTimeout() || nonLeaderFaker->pbftEngine()->isTimeout()) && + (utcTime() - startT <= 60 * 1000)) + { + nonLeaderFaker->pbftEngine()->executeWorkerByRoundbin(); + leaderFaker->pbftEngine()->executeWorkerByRoundbin(); + } +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/test/unittests/pbft/PBFTFixture.h b/bcos-pbft/test/unittests/pbft/PBFTFixture.h new file mode 100644 index 0000000..5b5f342 --- /dev/null +++ b/bcos-pbft/test/unittests/pbft/PBFTFixture.h @@ -0,0 +1,418 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fixture for the PBFT + * @file PBFTFixture.h + * @author: yujiechen + * @date 2021-05-28 + */ +#pragma once +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-framework/storage/KVStorageHelper.h" +#include "bcos-pbft/core/StateMachine.h" +#include "bcos-pbft/pbft/PBFTFactory.h" +#include "bcos-pbft/pbft/PBFTImpl.h" +#include "bcos-pbft/pbft/storage/LedgerStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include +// #include +// #include +// #include +// #include +#include +#include +#include +#include +#include + +using namespace bcos::crypto; +using namespace bcos::front; +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace bcos::txpool; +using namespace bcos::sealer; +using namespace bcos::protocol; +using namespace bcos::scheduler; +using namespace bcos::consensus; + +namespace bcos +{ +namespace test +{ +class FakePBFTConfig : public PBFTConfig +{ +public: + using Ptr = std::shared_ptr; + FakePBFTConfig(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, + std::shared_ptr _pbftMessageFactory, + std::shared_ptr _codec, std::shared_ptr _validator, + std::shared_ptr _frontService, + StateMachineInterface::Ptr _stateMachine, PBFTStorage::Ptr _storage) + : PBFTConfig(_cryptoSuite, _keyPair, _pbftMessageFactory, _codec, _validator, _frontService, + _stateMachine, _storage) + {} + + ~FakePBFTConfig() override {} + + virtual void setMinRequiredQuorum(uint64_t _quorum) { m_minRequiredQuorum = _quorum; } +}; +class FakePBFTCache : public PBFTCache +{ +public: + using Ptr = std::shared_ptr; + FakePBFTCache(PBFTConfig::Ptr _config, BlockNumber _index) : PBFTCache(_config, _index) {} + ~FakePBFTCache() override {} + + PBFTMessageInterface::Ptr prePrepare() { return m_prePrepare; } + void intoPrecommit() override { PBFTCache::intoPrecommit(); } +}; + +class FakePBFTCacheFactory : public PBFTCacheFactory +{ +public: + using Ptr = std::shared_ptr; + FakePBFTCacheFactory() = default; + ~FakePBFTCacheFactory() override {} + + PBFTCache::Ptr createPBFTCache(PBFTConfig::Ptr _config, BlockNumber _index, + std::function) override + { + return std::make_shared(_config, _index); + } +}; + +class FakeCacheProcessor : public PBFTCacheProcessor +{ +public: + using Ptr = std::shared_ptr; + explicit FakeCacheProcessor(PBFTCacheFactory::Ptr _cacheFactory, PBFTConfig::Ptr _config) + : PBFTCacheProcessor(_cacheFactory, _config) + {} + + ~FakeCacheProcessor() override {} + + PBFTCachesType& caches() { return m_caches; } + size_t stableCheckPointQueueSize() const { return m_stableCheckPointQueue.size(); } + size_t committedQueueSize() const { return m_committedQueue.size(); } + bool checkPrecommitWeight(PBFTMessageInterface::Ptr _precommitMsg) override + { + PBFTCacheProcessor::checkPrecommitWeight(_precommitMsg); + return true; + } +}; + + +class FakePBFTEngine : public PBFTEngine +{ +public: + using Ptr = std::shared_ptr; + explicit FakePBFTEngine(PBFTConfig::Ptr _config) : PBFTEngine(_config) + { + auto cacheFactory = std::make_shared(); + m_cacheProcessor = std::make_shared(cacheFactory, _config); + m_logSync = std::make_shared(_config, m_cacheProcessor); + m_cacheProcessor->registerProposalAppliedHandler( + boost::bind(&FakePBFTEngine::onProposalApplied, this, boost::placeholders::_1, + boost::placeholders::_2, boost::placeholders::_3)); + m_cacheProcessor->registerOnLoadAndVerifyProposalFinish( + boost::bind(&FakePBFTEngine::onLoadAndVerifyProposalFinish, this, + boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3)); + initSendResponseHandler(); + _config->enableAsMasterNode(true); + } + ~FakePBFTEngine() override {} + + void onReceivePBFTMessage(bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, std::function _sendResponse) override + { + PBFTEngine::onReceivePBFTMessage(_error, _nodeID, _data, _sendResponse); + } + + // PBFT main processing function + void executeWorker() override + { + while (!msgQueue()->empty()) + { + PBFTEngine::executeWorker(); + } + } + + void executeWorkerByRoundbin() { return PBFTEngine::executeWorker(); } + + void onRecvProposal(bool _containSysTxs, bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, + bcos::crypto::HashType const& _proposalHash) override + { + PBFTEngine::onRecvProposal(_containSysTxs, _proposalData, _proposalIndex, _proposalHash); + } + + bool handlePrePrepareMsg(std::shared_ptr _prePrepareMsg, + bool _needVerifyProposal = true, bool _generatedFromNewView = false, + bool _needCheckSignature = true) override + { + return PBFTEngine::handlePrePrepareMsg( + _prePrepareMsg, _needVerifyProposal, _generatedFromNewView, _needCheckSignature); + } + + PBFTMsgQueuePtr msgQueue() { return m_msgQueue; } +}; + +class FakePBFTImpl : public PBFTImpl +{ +public: + explicit FakePBFTImpl(PBFTEngine::Ptr _pbftEngine) : PBFTImpl(_pbftEngine) + { + m_running = true; + m_masterNode.store(true); + } + void start() override { m_pbftEngine->recoverState(); } + void init() override + { + PBFTImpl::init(); + start(); + } + ~FakePBFTImpl() {} +}; + +class FakePBFTFactory : public PBFTFactory +{ +public: + using Ptr = std::shared_ptr; + FakePBFTFactory(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::crypto::KeyPairInterface::Ptr _keyPair, + std::shared_ptr _frontService, + std::shared_ptr _storage, + std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::txpool::TxPoolInterface::Ptr _txpool, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory) + : PBFTFactory(_cryptoSuite, _keyPair, _frontService, _storage, _ledger, _scheduler, _txpool, + _blockFactory, _txResultFactory) + {} + + PBFTImpl::Ptr createPBFT() override + { + auto pbft = PBFTFactory::createPBFT(); + auto orgPBFTConfig = pbft->pbftEngine()->pbftConfig(); + auto stateMachine = std::make_shared(m_scheduler, m_blockFactory); + + PBFT_LOG(DEBUG) << LOG_DESC("create pbftStorage"); + auto pbftStorage = std::make_shared( + m_scheduler, m_storage, m_blockFactory, orgPBFTConfig->pbftMessageFactory()); + + auto pbftConfig = std::make_shared(m_cryptoSuite, m_keyPair, + orgPBFTConfig->pbftMessageFactory(), orgPBFTConfig->codec(), orgPBFTConfig->validator(), + orgPBFTConfig->frontService(), stateMachine, pbftStorage); + PBFT_LOG(DEBUG) << LOG_DESC("create PBFTEngine"); + auto pbftEngine = std::make_shared(pbftConfig); + + PBFT_LOG(INFO) << LOG_DESC("create PBFT"); + auto fakedPBFT = std::make_shared(pbftEngine); + auto ledgerFetcher = std::make_shared(m_ledger); + fakedPBFT->setLedgerFetcher(ledgerFetcher); + pbftConfig->setTimeoutState(false); + pbftConfig->timer()->stop(); + return fakedPBFT; + } +}; + +class PBFTFixture +{ +public: + using Ptr = std::shared_ptr; + PBFTFixture(CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair, + FakeLedger::Ptr _ledger = nullptr, size_t _txCountLimit = 1000) + : m_cryptoSuite(_cryptoSuite), m_keyPair(_keyPair), m_nodeId(_keyPair->publicKey()) + { + // create block factory + m_blockFactory = createBlockFactory(_cryptoSuite); + + // create fakeFrontService + m_frontService = std::make_shared(_keyPair->publicKey()); + + // create KVStorageHelper + m_storage = std::make_shared(std::make_shared(nullptr)); + + // create fakeLedger + if (_ledger == nullptr) + { + m_ledger = std::make_shared(m_blockFactory, 20, 10, 10); + m_ledger->setSystemConfig(SYSTEM_KEY_TX_COUNT_LIMIT, std::to_string(_txCountLimit)); + m_ledger->setSystemConfig(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, std::to_string(1)); + // m_ledger->ledgerConfig()->setConsensusTimeout(_consensusTimeout * 20); + m_ledger->ledgerConfig()->setBlockTxCountLimit(_txCountLimit); + } + else + { + m_ledger = _ledger; + } + // create fakeTxPool + m_txpool = std::make_shared(); + // create FakeScheduler + m_scheduler = std::make_shared(m_ledger, m_blockFactory); + + auto txResultFactory = std::make_shared(); + + auto pbftFactory = std::make_shared(_cryptoSuite, _keyPair, m_frontService, + m_storage, m_ledger, m_scheduler, m_txpool, m_blockFactory, txResultFactory); + m_pbft = pbftFactory->createPBFT(); + m_pbftEngine = std::dynamic_pointer_cast(m_pbft->pbftEngine()); + m_pbft->registerFaultyDiscriminator([](bcos::crypto::NodeIDPtr) { return false; }); + } + + virtual ~PBFTFixture() {} + + void init() { m_pbft->init(); } + + void appendConsensusNode(ConsensusNode::Ptr _node) + { + m_ledger->ledgerConfig()->mutableConsensusNodeList().push_back(_node); + pbftConfig()->setConsensusNodeList(m_ledger->ledgerConfig()->mutableConsensusNodeList()); + bcos::crypto::NodeIDSet connectedNodeList; + for (auto const& node : m_ledger->ledgerConfig()->mutableConsensusNodeList()) + { + connectedNodeList.insert(node->nodeID()); + } + pbftConfig()->setConnectedNodeList(connectedNodeList); + m_frontService->setNodeIDList(connectedNodeList); + } + + void appendConsensusNode(PublicPtr _nodeId) + { + auto node = std::make_shared(_nodeId, 1); + appendConsensusNode(node); + } + + void updateSwitchPerid() {} + + void clearConsensusNodeList() { m_ledger->ledgerConfig()->mutableConsensusNodeList().clear(); } + + FakeFrontService::Ptr frontService() { return m_frontService; } + std::shared_ptr storage() { return m_storage; } + FakeLedger::Ptr ledger() { return m_ledger; } + FakeTxPool::Ptr txpool() { return m_txpool; } + FakeScheduler::Ptr scheduler() { return m_scheduler; } + PBFTImpl::Ptr pbft() { return m_pbft; } + PBFTConfig::Ptr pbftConfig() { return m_pbft->pbftEngine()->pbftConfig(); } + PublicPtr nodeID() { return m_nodeId; } + + FakePBFTEngine::Ptr pbftEngine() { return m_pbftEngine; } + KeyPairInterface::Ptr keyPair() { return m_keyPair; } + + void setFrontService(FakeFrontService::Ptr _fakeFrontService) + { + m_frontService = _fakeFrontService; + } + + BlockFactory::Ptr blockFactory() { return m_blockFactory; } + +private: + CryptoSuite::Ptr m_cryptoSuite; + KeyPairInterface::Ptr m_keyPair; + PublicPtr m_nodeId; + BlockFactory::Ptr m_blockFactory; + + FakeFrontService::Ptr m_frontService; + std::shared_ptr m_storage; + FakeLedger::Ptr m_ledger; + FakeTxPool::Ptr m_txpool; + FakeScheduler::Ptr m_scheduler; + FakePBFTEngine::Ptr m_pbftEngine; + PBFTImpl::Ptr m_pbft; +}; +using PBFTFixtureList = std::vector; + +inline PBFTFixture::Ptr createPBFTFixture( + CryptoSuite::Ptr _cryptoSuite, FakeLedger::Ptr _ledger = nullptr, size_t _txCountLimit = 1000) +{ + bcos::crypto::KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + return std::make_shared(_cryptoSuite, keyPair, _ledger, _txCountLimit); +} + +inline std::map createFakers(CryptoSuite::Ptr _cryptoSuite, + size_t _consensusNodeSize, size_t _currentBlockNumber, size_t _connectedNodes, + size_t _txCountLimit = 1000) +{ + PBFTFixtureList fakerList; + // create block factory + auto blockFactory = createBlockFactory(_cryptoSuite); + + auto ledger = std::make_shared(blockFactory, _currentBlockNumber + 1, 10, 0); + for (size_t i = 0; i < _consensusNodeSize; i++) + { + // ensure all the block are consistent + auto fakedLedger = std::make_shared( + blockFactory, _currentBlockNumber + 1, 10, 0, ledger->sealerList()); + fakedLedger->setSystemConfig(SYSTEM_KEY_TX_COUNT_LIMIT, std::to_string(_txCountLimit)); + fakedLedger->setSystemConfig(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, std::to_string(1)); + // fakedLedger->ledgerConfig()->setConsensusTimeout(_consensusTimeout * 1000); + fakedLedger->ledgerConfig()->setBlockTxCountLimit(_txCountLimit); + auto peerFaker = createPBFTFixture(_cryptoSuite, fakedLedger, _txCountLimit); + fakerList.push_back(peerFaker); + } + + for (size_t i = 0; i < _consensusNodeSize; i++) + { + auto faker = fakerList[i]; + for (size_t j = 0; j < _consensusNodeSize; j++) + { + faker->appendConsensusNode(fakerList[j]->keyPair()->publicKey()); + } + } + // init the fakers + auto fakeGateWay = std::make_shared(); + for (size_t i = 0; i < _consensusNodeSize; i++) + { + auto faker = fakerList[i]; + faker->init(); + } + std::map indexToFakerMap; + for (size_t i = 0; i < _consensusNodeSize; i++) + { + auto faker = fakerList[i]; + indexToFakerMap[faker->pbftConfig()->nodeIndex()] = faker; + faker->frontService()->setGateWay(fakeGateWay); + } + for (IndexType i = 0; i < _connectedNodes; i++) + { + auto faker = indexToFakerMap[i]; + fakeGateWay->addConsensusInterface(faker->keyPair()->publicKey(), faker->pbft()); + } + return indexToFakerMap; +} + +inline Block::Ptr fakeBlock(CryptoSuite::Ptr _cryptoSuite, PBFTFixture::Ptr _faker, + size_t _proposalIndex, size_t _txsHashSize) +{ + auto ledgerConfig = _faker->ledger()->ledgerConfig(); + auto parent = (_faker->ledger()->ledgerData())[ledgerConfig->blockNumber()]; + auto block = _faker->ledger()->init(parent->blockHeader(), true, _proposalIndex, 0, 0); + for (size_t i = 0; i < _txsHashSize; i++) + { + auto hash = _cryptoSuite->hashImpl()->hash(std::to_string(i)); + auto txMetaData = _faker->blockFactory()->createTransactionMetaData(hash, hash.abridged()); + block->appendTransactionMetaData(txMetaData); + } + return block; +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/test/unittests/pbft/PBFTViewChangeTest.cpp b/bcos-pbft/test/unittests/pbft/PBFTViewChangeTest.cpp new file mode 100644 index 0000000..344c352 --- /dev/null +++ b/bcos-pbft/test/unittests/pbft/PBFTViewChangeTest.cpp @@ -0,0 +1,159 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit tests for PBFT viewchange + * @file PBFTViewChangeTest.cpp + * @author: yujiechen + * @date 2021-06-01 + */ +#include +#include + +#include "test/unittests/pbft/PBFTFixture.h" +#include "test/unittests/protocol/FakePBFTMessage.h" +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(PBFTViewChangeTest, TestPromptFixture) +bool shouldExit(std::map& _fakers, BlockNumber _number) +{ + for (IndexType i = 0; i < _fakers.size(); i++) + { + auto faker = _fakers[i]; + if (faker->ledger()->blockNumber() != _number) + { + return false; + } + } + return true; +} +BOOST_AUTO_TEST_CASE(testViewChangeWithPrecommitProposals) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + size_t consensusNodeSize = 10; + size_t _connectedNodes = 10; + size_t currentBlockNumber = 11; + auto fakerMap = + createFakers(cryptoSuite, consensusNodeSize, currentBlockNumber, _connectedNodes); + + // check the leader notify the sealer to seal proposals + BlockNumber expectedProposal = (size_t)(fakerMap[0]->ledger()->blockNumber() + 1); + IndexType leaderIndex = fakerMap[0]->pbftConfig()->leaderIndex(expectedProposal); + auto leaderFaker = fakerMap[leaderIndex]; + + auto pbftMsgFixture = std::make_shared(cryptoSuite, leaderFaker->keyPair()); + auto block = fakeBlock(cryptoSuite, leaderFaker, expectedProposal, 10); + auto blockData = std::make_shared(); + block->encode(*blockData); + + // blockNumber + 3 + BlockNumber futureBlockIndex = expectedProposal + 2; + IndexType futureLeaderIndex = fakerMap[0]->pbftConfig()->leaderIndex(futureBlockIndex); + auto futureLeader = fakerMap[futureLeaderIndex]; + auto futureBlock = fakeBlock(cryptoSuite, futureLeader, futureBlockIndex, 10); + auto futureBlockData = std::make_shared(); + futureBlock->encode(*futureBlockData); + + auto blockHeader = block->blockHeader(); + // the leader submit proposal + leaderFaker->pbftEngine()->asyncSubmitProposal( + false, ref(*blockData), blockHeader->number(), blockHeader->hash(), nullptr); + // the future leader submit the proposal + auto futureBlockHeader = futureBlock->blockHeader(); + futureLeader->pbftEngine()->asyncSubmitProposal(false, ref(*futureBlockData), + futureBlockHeader->number(), futureBlockHeader->hash(), nullptr); + + auto cacheProcessor = + std::dynamic_pointer_cast(leaderFaker->pbftEngine()->cacheProcessor()); + BOOST_CHECK(cacheProcessor->caches().size() == 1); + auto cache = + std::dynamic_pointer_cast((cacheProcessor->caches())[expectedProposal]); + BOOST_CHECK(cache->prePrepare()); + BOOST_CHECK(cache->index() == expectedProposal); + BOOST_CHECK(cache->prePrepare()); + + auto futureCacheProcessor = + std::dynamic_pointer_cast(futureLeader->pbftEngine()->cacheProcessor()); + auto futureCache = std::dynamic_pointer_cast( + (futureCacheProcessor->caches())[futureBlockIndex]); + BOOST_CHECK(futureCacheProcessor->caches().size() == 1); + BOOST_CHECK(futureCache->prePrepare()); + BOOST_CHECK(futureCache->index() == futureBlockIndex); + BOOST_CHECK(futureCache->prePrepare()); + + for (auto const& otherNode : fakerMap) + { + otherNode.second->pbftEngine()->executeWorker(); + } + // assume five nodes into preCommit + size_t precommitSize = 5; + for (size_t i = 0; i < std::min(precommitSize, fakerMap.size()); i++) + { + auto faker = fakerMap[i]; + FakeCacheProcessor::Ptr cacheProcessor = + std::dynamic_pointer_cast(faker->pbftEngine()->cacheProcessor()); + BOOST_CHECK(cacheProcessor->caches().size() == 2); + auto cache = + std::dynamic_pointer_cast((cacheProcessor->caches())[expectedProposal]); + BOOST_CHECK(cache->prePrepare()); + BOOST_CHECK(cache->index() == expectedProposal); + cache->intoPrecommit(); + + auto futureCache = + std::dynamic_pointer_cast((cacheProcessor->caches())[futureBlockIndex]); + BOOST_CHECK(futureCache->prePrepare()); + BOOST_CHECK(futureCache->index() == futureBlockIndex); + BOOST_CHECK(futureCache->prePrepare()); + futureCache->intoPrecommit(); + } + + for (size_t i = 0; i < fakerMap.size(); i++) + { + auto faker = fakerMap[i]; + faker->pbftConfig()->setConsensusTimeout(1000); + } + auto startT = utcTime(); + while (!shouldExit(fakerMap, futureBlockIndex) && (utcTime() - startT <= 10 * 3000)) + { + for (size_t i = 0; i < fakerMap.size(); i++) + { + auto faker = fakerMap[i]; + faker->pbftEngine()->executeWorkerByRoundbin(); + } + } + // check reach new view + for (size_t i = 0; i < fakerMap.size(); i++) + { + auto faker = fakerMap[i]; + BOOST_CHECK(faker->pbftConfig()->view() > 0); + BOOST_CHECK(faker->pbftConfig()->toView() == (faker->pbftConfig()->view())); + BOOST_CHECK(faker->pbftConfig()->timer()->changeCycle() == 0); + BOOST_CHECK(faker->pbftEngine()->isTimeout() == false); + BOOST_CHECK(faker->ledger()->blockNumber() == futureBlockIndex); + } +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/test/unittests/protocol/FakePBFTMessage.h b/bcos-pbft/test/unittests/protocol/FakePBFTMessage.h new file mode 100644 index 0000000..929159c --- /dev/null +++ b/bcos-pbft/test/unittests/protocol/FakePBFTMessage.h @@ -0,0 +1,589 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Fake the PBFT related messages + * @file FakePBFTMessage.h + * @author: yujiechen + * @date 2021-04-16 + */ +#pragma once +#include "bcos-pbft/core/Proposal.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTCodec.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTMessage.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTMessageFactoryImpl.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTNewViewMsg.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTProposal.h" +#include "bcos-pbft/pbft/protocol/PB/PBFTViewChangeMsg.h" +#include + +using namespace bcos::consensus; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos; + +namespace bcos +{ +namespace test +{ +class PBFTMessageFixture +{ +public: + using Ptr = std::shared_ptr; + PBFTMessageFixture(CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair) + : m_cryptoSuite(_cryptoSuite), m_keyPair(_keyPair) + {} + + ~PBFTMessageFixture() {} + + PBFTProposal::Ptr fakePBFTProposal(BlockNumber _index, HashType const& _hash, + bytes const& _data, std::vector const& _nodeList, + std::vector const& _signatureData) + { + auto pbftProposal = std::make_shared(); + pbftProposal->setIndex(_index); + pbftProposal->setHash(_hash); + pbftProposal->setData(_data); + // set signatureProof + for (size_t i = 0; i < _nodeList.size(); i++) + { + pbftProposal->appendSignatureProof(_nodeList[i], ref(_signatureData[i])); + } + // test proposal encode/decode + auto encodedData = pbftProposal->encode(); + auto decodedProposal = std::make_shared(ref(*encodedData)); + BOOST_CHECK(decodedProposal->index() == pbftProposal->index()); + BOOST_CHECK(decodedProposal->hash() == pbftProposal->hash()); + BOOST_CHECK(decodedProposal->data().toBytes() == pbftProposal->data().toBytes()); + BOOST_CHECK(decodedProposal->signatureProofSize() == pbftProposal->signatureProofSize()); + return decodedProposal; + } + + void fakeBasePBFTMessage(PBFTBaseMessageInterface::Ptr pfbtMessage, int64_t _timestamp, + int32_t _version, int64_t _view, int64_t _generatedFrom, HashType _hash) + { + pfbtMessage->setTimestamp(_timestamp); + pfbtMessage->setVersion(_version); + pfbtMessage->setView(_view); + pfbtMessage->setGeneratedFrom(_generatedFrom); + pfbtMessage->setHash(_hash); + } + + void checkBaseMessageField( + PBFTBaseMessage::Ptr _pfbtMessage, PBFTBaseMessage::Ptr _decodedPBFTMsg) + { + BOOST_CHECK(_pfbtMessage->timestamp() == _decodedPBFTMsg->timestamp()); + BOOST_CHECK(_pfbtMessage->version() == _decodedPBFTMsg->version()); + BOOST_CHECK(_pfbtMessage->view() == _decodedPBFTMsg->view()); + BOOST_CHECK(_pfbtMessage->generatedFrom() == _decodedPBFTMsg->generatedFrom()); + BOOST_CHECK(_pfbtMessage->hash() == _decodedPBFTMsg->hash()); + } + + void checkProposals( + PBFTProposalList const& _pbftProposals, PBFTProposalList const& _decodedProposals) + { + size_t i = 0; + for (auto proposal : _pbftProposals) + { + auto comparedProposal = std::dynamic_pointer_cast(_decodedProposals[i++]); + BOOST_CHECK(*(std::dynamic_pointer_cast(proposal)) == *comparedProposal); + } + } + + PBFTMessage::Ptr fakePBFTMessage(int64_t _timestamp, int32_t _version, int64_t _view, + int64_t _generatedFrom, HashType _hash, PBFTProposalList const& _proposals) + { + auto pfbtMessage = std::make_shared(); + fakeBasePBFTMessage(pfbtMessage, _timestamp, _version, _view, _generatedFrom, _hash); + pfbtMessage->setProposals(_proposals); + // encode + auto encodedData = pfbtMessage->encode(m_cryptoSuite, m_keyPair); + // decode + auto decodedPBFTMsg = std::make_shared(m_cryptoSuite, ref(*encodedData)); + // check the data fields + checkBaseMessageField(pfbtMessage, decodedPBFTMsg); + // check proposals + checkProposals(_proposals, pfbtMessage->proposals()); + return decodedPBFTMsg; + } + + PBFTNewViewMsg::Ptr fakePBFTNewViewMsg(int64_t _timestamp, int32_t _version, int64_t _view, + int64_t _generatedFrom, HashType _hash, ViewChangeMsgList const& _viewChangeList, + PBFTMessage::Ptr _generatedPrepare) + { + auto pbftNewViewChangeMsg = std::make_shared(); + fakeBasePBFTMessage( + pbftNewViewChangeMsg, _timestamp, _version, _view, _generatedFrom, _hash); + pbftNewViewChangeMsg->setViewChangeMsgList(_viewChangeList); + // encode + auto encodedData = pbftNewViewChangeMsg->encode(nullptr, nullptr); + // decode + auto decodedNewViewMsg = std::make_shared(ref(*encodedData)); + // check the basic field + checkBaseMessageField(pbftNewViewChangeMsg, decodedNewViewMsg); + BOOST_CHECK(decodedNewViewMsg->prePrepareList().size() == 0); + + // encode: with generatedPrePrepare + PBFTMessageList prePrepareList; + prePrepareList.push_back(_generatedPrepare); + pbftNewViewChangeMsg->setPrePrepareList(prePrepareList); + encodedData = pbftNewViewChangeMsg->encode(nullptr, nullptr); + // decode + decodedNewViewMsg = std::make_shared(ref(*encodedData)); + // check the basic field + checkBaseMessageField(pbftNewViewChangeMsg, decodedNewViewMsg); + prePrepareList = decodedNewViewMsg->prePrepareList(); + BOOST_CHECK(prePrepareList.size() == 1); + auto decodedPrePrepareMsg = std::dynamic_pointer_cast(prePrepareList[0]); + BOOST_CHECK(*_generatedPrepare == *decodedPrePrepareMsg); + return pbftNewViewChangeMsg; + } + + PBFTViewChangeMsg::Ptr fakePBFTViewChangeMsg(int64_t _timestamp, int32_t _version, + int64_t _view, int64_t _generatedFrom, HashType _hash, + PBFTProposalInterface::Ptr _committedProposal, PBFTProposalList const& _preparedProposals) + { + auto pbftViewChangeMsg = std::make_shared(); + // fake the base PBFT message + fakeBasePBFTMessage(pbftViewChangeMsg, _timestamp, _version, _view, _generatedFrom, _hash); + // fake the commmitted proposal + + auto committedProposal2 = std::dynamic_pointer_cast(_committedProposal); + pbftViewChangeMsg->setCommittedProposal(_committedProposal); + auto committedProposal = + std::dynamic_pointer_cast(pbftViewChangeMsg->committedProposal()); + // the preparedProposals + PBFTMessageList preparedMsgs; + for (size_t i = 0; i < _preparedProposals.size(); i++) + { + auto message = std::make_shared(); + message->setConsensusProposal(_preparedProposals[i]); + preparedMsgs.push_back(message); + } + pbftViewChangeMsg->setPreparedProposals(preparedMsgs); + // encode + auto encodedData = pbftViewChangeMsg->encode(nullptr, nullptr); + // decode + auto decodedViewChange = std::make_shared(ref(*encodedData)); + // check the basic field + checkBaseMessageField(pbftViewChangeMsg, decodedViewChange); + // check committedProposal + auto decodedCommittedProposal = + std::dynamic_pointer_cast(decodedViewChange->committedProposal()); + BOOST_CHECK(*committedProposal2 == *decodedCommittedProposal); + // check prepared proposals + preparedMsgs = decodedViewChange->preparedProposals(); + PBFTProposalList decodedProposalList; + for (auto msg : preparedMsgs) + { + decodedProposalList.push_back(msg->consensusProposal()); + } + checkProposals(_preparedProposals, decodedProposalList); + return decodedViewChange; + } + CryptoSuite::Ptr cryptoSuite() { return m_cryptoSuite; } + KeyPairInterface::Ptr keyPair() { return m_keyPair; } + +private: + CryptoSuite::Ptr m_cryptoSuite; + KeyPairInterface::Ptr m_keyPair; +}; + +inline PBFTProposalInterface::Ptr fakeSingleProposal(CryptoSuite::Ptr _cryptoSuite, + PBFTMessageFixture::Ptr faker, + std::vector> const& _nodeKeyPairList, + BlockNumber _index, HashType const& _hash, bytes const& _data) +{ + // sign for the proposal + std::vector nodeList; + std::vector signatureList; + for (auto const& _nodeKeypairInfo : _nodeKeyPairList) + { + auto signatureData = _cryptoSuite->signatureImpl()->sign(*_nodeKeypairInfo.second, _hash); + nodeList.push_back(_nodeKeypairInfo.first); + signatureList.push_back(*signatureData); + } + return faker->fakePBFTProposal(_index, _hash, _data, nodeList, signatureList); +} + +inline PBFTProposalList fakeProposals(CryptoSuite::Ptr _cryptoSuite, PBFTMessageFixture::Ptr faker, + std::vector> const& _nodeKeyPairList, + BlockNumber _index, bytes const& _data, size_t proposalSize) +{ + PBFTProposalList proposals; + auto index = _index; + auto data = _data; + for (size_t i = 0; i < proposalSize; i++) + { + auto hash = _cryptoSuite->hashImpl()->hash(std::to_string(index)); + proposals.push_back( + fakeSingleProposal(_cryptoSuite, faker, _nodeKeyPairList, index, hash, data)); + index++; + if (data.size() > 0) + { + data[0] += 1; + } + } + return proposals; +} + +inline void checkFakedBasePBFTMessage(PBFTBaseMessageInterface::Ptr fakedMessage, + int64_t orgTimestamp, int32_t version, ViewType view, IndexType generatedFrom, + HashType const& proposalHash) +{ + // check the content + BOOST_CHECK(fakedMessage->timestamp() == orgTimestamp); + BOOST_CHECK(fakedMessage->version() == version); + BOOST_CHECK(fakedMessage->hash() == proposalHash); + BOOST_CHECK(fakedMessage->view() == view); + BOOST_CHECK(fakedMessage->generatedFrom() == generatedFrom); +} + +inline void checkSingleProposal(PBFTProposalInterface::Ptr _proposal, HashType const& _hash, + BlockNumber _index, bytes const& /*_data*/) +{ + BOOST_CHECK(_proposal->index() == _index); + BOOST_CHECK(_proposal->hash() == _hash); + // BOOST_CHECK(_proposal->data().toBytes() == _data); +} + +inline void checkProposals(PBFTProposalList _proposals, CryptoSuite::Ptr _cryptoSuite, + BlockNumber _index, bytes const& _data) +{ + // check the proposal + auto data = _data; + auto index = _index; + for (auto proposal : _proposals) + { + auto hash = _cryptoSuite->hashImpl()->hash(std::to_string(index)); + checkSingleProposal(proposal, hash, index, data); + if (data.size() > 0) + { + data[0] += 1; + } + index++; + } +} + +inline void checkPBFTMessage(PBFTMessage::Ptr fakedMessage, int64_t orgTimestamp, int32_t version, + ViewType view, IndexType generatedFrom, HashType const& proposalHash, size_t proposalSize, + CryptoSuite::Ptr cryptoSuite, BlockNumber _index, bytes const& _data) +{ + checkFakedBasePBFTMessage( + fakedMessage, orgTimestamp, version, view, generatedFrom, proposalHash); + BOOST_CHECK(fakedMessage->proposals().size() == proposalSize); + // check the proposal + checkProposals(fakedMessage->proposals(), cryptoSuite, _index, _data); +} + +inline PBFTMessage::Ptr fakePBFTMessage(int64_t orgTimestamp, int32_t version, ViewType view, + IndexType generatedFrom, HashType const& proposalHash, BlockNumber _index, bytes const& _data, + size_t proposalSize, std::shared_ptr _faker, PacketType _packetType) +{ + auto cryptoSuite = _faker->cryptoSuite(); + size_t signatureProofSize = 4; + std::vector> nodeKeyPairList; + for (size_t i = 0; i < signatureProofSize; i++) + { + nodeKeyPairList.push_back( + std::make_pair(i, cryptoSuite->signatureImpl()->generateKeyPair())); + } + auto proposals = + fakeProposals(cryptoSuite, _faker, nodeKeyPairList, _index, _data, proposalSize); + auto fakedMessage = _faker->fakePBFTMessage( + orgTimestamp, version, view, generatedFrom, proposalHash, proposals); + fakedMessage->setIndex(_index); + fakedMessage->setPacketType(_packetType); + checkPBFTMessage(fakedMessage, orgTimestamp, version, view, generatedFrom, proposalHash, + proposalSize, cryptoSuite, _index, _data); + return fakedMessage; +} + + +inline void checkViewChangeMessage(PBFTViewChangeMsg::Ptr fakedViewChangeMessage, + int64_t orgTimestamp, int32_t version, ViewType view, IndexType generatedFrom, + HashType const& proposalHash, BlockNumber _index, bytes const& _data, + BlockNumber _committedIndex, HashType const& _committedHash, size_t _proposalSize, + CryptoSuite::Ptr _cryptoSuite) +{ + checkFakedBasePBFTMessage( + fakedViewChangeMessage, orgTimestamp, version, view, generatedFrom, proposalHash); + + // check prepared proposal + BOOST_CHECK(fakedViewChangeMessage->preparedProposals().size() == _proposalSize); + PBFTProposalList fakedProposals; + for (auto msg : fakedViewChangeMessage->preparedProposals()) + { + fakedProposals.push_back(msg->consensusProposal()); + } + checkProposals(fakedProposals, _cryptoSuite, _index, _data); + // check committed proposal + checkSingleProposal( + fakedViewChangeMessage->committedProposal(), _committedHash, _committedIndex, bytes()); +} + +inline PBFTViewChangeMsg::Ptr fakeViewChangeMessage(int64_t orgTimestamp, int32_t version, + ViewType view, IndexType generatedFrom, HashType const& proposalHash, BlockNumber _index, + bytes const& _data, BlockNumber _committedIndex, HashType const& _committedHash, + size_t _proposalSize, std::shared_ptr _faker) +{ + auto cryptoSuite = _faker->cryptoSuite(); + std::vector> nodeKeyPairList; + size_t signatureProofSize = 4; + for (size_t i = 0; i < signatureProofSize; i++) + { + nodeKeyPairList.push_back( + std::make_pair(i, cryptoSuite->signatureImpl()->generateKeyPair())); + } + auto preparedProposals = + fakeProposals(cryptoSuite, _faker, nodeKeyPairList, _index, _data, _proposalSize); + std::vector> nodeKeyPairList2; + auto committedProposal = fakeSingleProposal( + cryptoSuite, _faker, nodeKeyPairList2, _committedIndex, _committedHash, bytes()); + + auto fakedViewChangeMessage = _faker->fakePBFTViewChangeMsg(orgTimestamp, version, view, + generatedFrom, proposalHash, committedProposal, preparedProposals); + + checkViewChangeMessage(fakedViewChangeMessage, orgTimestamp, version, view, generatedFrom, + proposalHash, _index, _data, _committedIndex, _committedHash, _proposalSize, cryptoSuite); + return fakedViewChangeMessage; +} + +inline void testPBFTMessage(PacketType _packetType, CryptoSuite::Ptr _cryptoSuite) +{ + int64_t orgTimestamp = utcTime(); + int32_t version = 10; + ViewType view = 103423423423; + IndexType generatedFrom = 10; + auto proposalHash = _cryptoSuite->hashImpl()->hash("proposal"); + size_t proposalSize = 3; + KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto faker = std::make_shared(_cryptoSuite, keyPair); + // for the proposal + BlockNumber index = 100; + std::string dataStr = "werldksjflaskjffakesdfastadfakedaat"; + bytes data(dataStr.begin(), dataStr.end()); + + auto fakedMessage = fakePBFTMessage(orgTimestamp, version, view, generatedFrom, proposalHash, + index, data, proposalSize, faker, _packetType); + + // test PBFTCodec + PBFTMessageFactory::Ptr pbftMessageFactory = std::make_shared(); + auto pbftCodec = std::make_shared(keyPair, _cryptoSuite, pbftMessageFactory); + // encode and sign + auto encodedData = pbftCodec->encode(fakedMessage, 1); + // decode + auto message = pbftCodec->decode(ref(*encodedData)); + PBFTMessage::Ptr decodedMsg = std::dynamic_pointer_cast(message); + BOOST_CHECK(decodedMsg->packetType() == _packetType); + // check the decoded message + checkFakedBasePBFTMessage(decodedMsg, orgTimestamp, version, view, generatedFrom, proposalHash); + // verify the signature + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == true); + // case: another node fake the decodedMsg with error view + KeyPairInterface::Ptr keyPair2 = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto pbftCodec2 = std::make_shared(keyPair2, _cryptoSuite, pbftMessageFactory); + decodedMsg->setView(view + 1); + encodedData = pbftCodec2->encode(decodedMsg, 1); + auto decodedMsg2 = + std::dynamic_pointer_cast(pbftCodec2->decode(ref(*encodedData))); + BOOST_CHECK(decodedMsg2->verifySignature(_cryptoSuite, keyPair->publicKey()) == false); + + // the signatureHash has been updated + auto fakedHash = _cryptoSuite->hashImpl()->hash("fakedHash"); + decodedMsg->setSignatureDataHash(fakedHash); + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == false); +} + +inline void testPBFTViewChangeMessage(CryptoSuite::Ptr _cryptoSuite) +{ + int64_t orgTimestamp = utcTime(); + int32_t version = 11; + ViewType view = 23423423432; + IndexType generatedFrom = 200; + auto proposalHash = _cryptoSuite->hashImpl()->hash("testPBFTViewChangeMessage"); + size_t proposalSize = 4; + BlockNumber index = 10003; + std::string dataStr = "werldksjflaskjffakesdfastadfakedaat"; + bytes data(dataStr.begin(), dataStr.end()); + + BlockNumber committedIndex = 10002; + HashType committedHash = _cryptoSuite->hash("10002"); + KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto faker = std::make_shared(_cryptoSuite, keyPair); + + auto fakedViewChangeMsg = fakeViewChangeMessage(orgTimestamp, version, view, generatedFrom, + proposalHash, index, data, committedIndex, committedHash, proposalSize, faker); + BOOST_CHECK(fakedViewChangeMsg->packetType() == PacketType::ViewChangePacket); + + // test PBFTCodec + PBFTMessageFactory::Ptr pbftMessageFactory = std::make_shared(); + auto pbftCodec = std::make_shared(keyPair, _cryptoSuite, pbftMessageFactory); + // encode and sign + auto encodedData = pbftCodec->encode(fakedViewChangeMsg, 1); + // decode + auto message = pbftCodec->decode(ref(*encodedData)); + auto decodedMsg = std::dynamic_pointer_cast(message); + // check + BOOST_CHECK(decodedMsg->packetType() == PacketType::ViewChangePacket); + // check the decoded message + checkViewChangeMessage(fakedViewChangeMsg, orgTimestamp, version, view, generatedFrom, + proposalHash, index, data, committedIndex, committedHash, proposalSize, _cryptoSuite); + // verify the signature + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == true); + // case: another node fake the decodedMsg with error view + KeyPairInterface::Ptr keyPair2 = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto pbftCodec2 = std::make_shared(keyPair2, _cryptoSuite, pbftMessageFactory); + decodedMsg->setView(view - 100); + encodedData = pbftCodec2->encode(decodedMsg, 1); + auto decodedMsg2 = + std::dynamic_pointer_cast(pbftCodec2->decode(ref(*encodedData))); + BOOST_CHECK(decodedMsg2->verifySignature(_cryptoSuite, keyPair->publicKey()) == false); + + // the signatureHash has been updated + auto fakedHash = _cryptoSuite->hashImpl()->hash("fakedHash"); + decodedMsg->setSignatureDataHash(fakedHash); + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == false); +} + +inline void checkNewViewMessage(PBFTNewViewMsg::Ptr fakedNewViewMessage, int64_t orgTimestamp, + int32_t version, ViewType view, IndexType generatedFrom, HashType const& proposalHash, + BlockNumber _index, bytes const& _data, int64_t viewChangeSize, int64_t proposalSize, + BlockNumber committedIndex, CryptoSuite::Ptr _cryptoSuite) +{ + checkFakedBasePBFTMessage( + fakedNewViewMessage, orgTimestamp, version, view, generatedFrom, proposalHash); + + // check viewChangeMsgs + BOOST_CHECK((int64_t)(fakedNewViewMessage->viewChangeMsgList().size()) == viewChangeSize); + for (int64_t i = 0; i < viewChangeSize; i++) + { + auto committedHash = _cryptoSuite->hash(std::to_string(committedIndex)); + auto fakedViewChange = fakedNewViewMessage->viewChangeMsgList()[i]; + checkViewChangeMessage(std::dynamic_pointer_cast(fakedViewChange), + orgTimestamp, version, view, generatedFrom, proposalHash, _index, _data, committedIndex, + committedHash, proposalSize, _cryptoSuite); + committedIndex++; + committedHash = _cryptoSuite->hash(std::to_string(committedIndex)); + generatedFrom++; + view++; + } +} + +inline void testPBFTNewViewMessage(CryptoSuite::Ptr _cryptoSuite) +{ + int64_t orgTimestamp = utcTime(); + int32_t version = 11; + ViewType view = 23423423432; + auto orgView = view; + + IndexType generatedFrom = 200; + auto orgGeneratedFrom = generatedFrom; + + auto proposalHash = _cryptoSuite->hashImpl()->hash("testPBFTViewChangeMessage"); + size_t proposalSize = 4; + BlockNumber index = 10003; + std::string dataStr = "werldksjflaskjffakesdfastadfakedaat"; + bytes data(dataStr.begin(), dataStr.end()); + + BlockNumber committedIndex = 10002; + auto orgCommittedIndex = committedIndex; + + KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto faker = std::make_shared(_cryptoSuite, keyPair); + + int64_t viewChangeSize = 4; + ViewChangeMsgList viewChangeList; + for (int64_t i = 0; i < viewChangeSize; i++) + { + auto committedHash = _cryptoSuite->hash(std::to_string(committedIndex)); + viewChangeList.push_back(fakeViewChangeMessage(orgTimestamp, version, view, generatedFrom, + proposalHash, index, data, committedIndex, committedHash, proposalSize, faker)); + committedIndex++; + committedHash = _cryptoSuite->hash(std::to_string(committedIndex)); + generatedFrom++; + view++; + } + // fake NewViewMsg + auto fakedPreparedMsg = fakePBFTMessage(orgTimestamp, version, view, generatedFrom, + proposalHash, index, data, proposalSize, faker, PacketType::PrePreparePacket); + auto fakedNewViewMsg = faker->fakePBFTNewViewMsg(orgTimestamp, version, orgView, + orgGeneratedFrom, proposalHash, viewChangeList, fakedPreparedMsg); + BOOST_CHECK(int64_t(fakedNewViewMsg->viewChangeMsgList().size()) == viewChangeSize); + + // test PBFTCodec + PBFTMessageFactory::Ptr pbftMessageFactory = std::make_shared(); + auto pbftCodec = std::make_shared(keyPair, _cryptoSuite, pbftMessageFactory); + // encode and sign + auto encodedData = pbftCodec->encode(fakedNewViewMsg, 1); + // decode + auto message = pbftCodec->decode(ref(*encodedData)); + auto decodedMsg = std::dynamic_pointer_cast(message); + // check + BOOST_CHECK(decodedMsg->packetType() == PacketType::NewViewPacket); + // check the decoded message + checkNewViewMessage(decodedMsg, orgTimestamp, version, orgView, orgGeneratedFrom, proposalHash, + index, data, viewChangeSize, proposalSize, orgCommittedIndex, _cryptoSuite); + // verify the signature + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == true); + // the signatureHash has been updated + auto fakedHash = _cryptoSuite->hashImpl()->hash("fakedHash"); + decodedMsg->setSignatureDataHash(fakedHash); + BOOST_CHECK(decodedMsg->verifySignature(_cryptoSuite, keyPair->publicKey()) == false); +} + +inline void testPBFTRequest(CryptoSuite::Ptr _cryptoSuite, PacketType _packetType) +{ + auto timeStamp = utcTime(); + int32_t version = 12; + ViewType view = 234234234; + IndexType generatedFrom = 200; + + auto proposalHash = _cryptoSuite->hashImpl()->hash("testPBFTRequest"); + KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto faker = std::make_shared(_cryptoSuite, keyPair); + auto pbftMessageFactory = std::make_shared(); + + auto pbftRequest = pbftMessageFactory->createPBFTRequest(); + faker->fakeBasePBFTMessage(pbftRequest, timeStamp, version, view, generatedFrom, proposalHash); + int64_t startIndex = 1435345; + int64_t size = 10; + pbftRequest->setSize(size); + pbftRequest->setIndex(startIndex); + pbftRequest->setPacketType(_packetType); + // encode + auto encodedData = pbftRequest->encode(_cryptoSuite, keyPair); + // decode + auto decodedPBFTRequest = pbftMessageFactory->createPBFTRequest(ref(*encodedData)); + BOOST_CHECK(*(std::dynamic_pointer_cast(decodedPBFTRequest)) == + *(std::dynamic_pointer_cast(pbftRequest))); + checkFakedBasePBFTMessage( + decodedPBFTRequest, timeStamp, version, view, generatedFrom, proposalHash); + BOOST_CHECK(decodedPBFTRequest->index() == startIndex); + BOOST_CHECK(decodedPBFTRequest->size() == size); + + // encode/decode with codec + auto pbftCodec = std::make_shared(keyPair, _cryptoSuite, pbftMessageFactory); + // encode and sign + encodedData = pbftCodec->encode(pbftRequest, 1); + // decode + auto message = pbftCodec->decode(ref(*encodedData)); + auto decodedMsg = std::dynamic_pointer_cast(message); + // check the decoded message + checkFakedBasePBFTMessage(decodedMsg, timeStamp, version, view, generatedFrom, proposalHash); + BOOST_CHECK(decodedMsg->index() == startIndex); + BOOST_CHECK(decodedMsg->size() == size); +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-pbft/test/unittests/protocol/PBFTMessageTest.cpp b/bcos-pbft/test/unittests/protocol/PBFTMessageTest.cpp new file mode 100644 index 0000000..ac85ff6 --- /dev/null +++ b/bcos-pbft/test/unittests/protocol/PBFTMessageTest.cpp @@ -0,0 +1,111 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for pbft related messages + * @file PBFTMessageTest.h + * @author: yujiechen + * @date 2021-04-16 + */ +#include "FakePBFTMessage.h" +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(PBFTMessageTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testNormalPBFTMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTMessage(PacketType::PrePreparePacket, cryptoSuite); + testPBFTMessage(PacketType::PreparePacket, cryptoSuite); + testPBFTMessage(PacketType::CommitPacket, cryptoSuite); + testPBFTMessage(PacketType::CommittedProposalResponse, cryptoSuite); + testPBFTMessage(PacketType::CheckPoint, cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testSMPBFTMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTMessage(PacketType::PrePreparePacket, cryptoSuite); + testPBFTMessage(PacketType::PreparePacket, cryptoSuite); + testPBFTMessage(PacketType::CommitPacket, cryptoSuite); + testPBFTMessage(PacketType::CommittedProposalResponse, cryptoSuite); + testPBFTMessage(PacketType::CheckPoint, cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testNormalViewChangeMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTViewChangeMessage(cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testSMViewChangeMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTViewChangeMessage(cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testNormalNewViewMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTNewViewMessage(cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testSMNewViewMessage) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTNewViewMessage(cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testNormalPBFTRequest) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTRequest(cryptoSuite, PacketType::CommittedProposalRequest); + testPBFTRequest(cryptoSuite, PacketType::PreparedProposalRequest); +} + +BOOST_AUTO_TEST_CASE(testSMPBFTRequest) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testPBFTRequest(cryptoSuite, PacketType::CommittedProposalRequest); + testPBFTRequest(cryptoSuite, PacketType::PreparedProposalRequest); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-protocol/CMakeLists.txt b/bcos-protocol/CMakeLists.txt new file mode 100644 index 0000000..9ce8b03 --- /dev/null +++ b/bcos-protocol/CMakeLists.txt @@ -0,0 +1,41 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-protocol +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-pbft +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +add_subdirectory(bcos-protocol) + +add_library(bcos-protocol INTERFACE) +target_include_directories(bcos-protocol INTERFACE + $ + $ + $ +) +target_link_libraries(bcos-protocol INTERFACE ${CODEC_TARGET}) + +if (TESTS) + # fetch bcos-test + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +include(GNUInstallDirs) +install(TARGETS bcos-protocol EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-protocol" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-protocol/bcos-protocol/CMakeLists.txt b/bcos-protocol/bcos-protocol/CMakeLists.txt new file mode 100644 index 0000000..0c1eeec --- /dev/null +++ b/bcos-protocol/bcos-protocol/CMakeLists.txt @@ -0,0 +1,15 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +aux_source_directory(. SRC_LIST) +aux_source_directory(./amop SRC_LIST) + +find_package(Threads REQUIRED) +add_library(${PROTOCOL_TARGET} ${SRC_LIST} ${HEADERS}) + +find_package(TBB CONFIG REQUIRED) +target_link_libraries(${PROTOCOL_TARGET} PUBLIC ${CRYPTO_TARGET} ${CODEC_TARGET} bcos-framework TBB::tbb) + +include(GNUInstallDirs) +install(TARGETS ${PROTOCOL_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +# install(DIRECTORY "bcos-protocol" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-protocol/bcos-protocol/Common.h b/bcos-protocol/bcos-protocol/Common.h new file mode 100644 index 0000000..b4ffdae --- /dev/null +++ b/bcos-protocol/bcos-protocol/Common.h @@ -0,0 +1,89 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date 2021-04-12 + */ +#pragma once + +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +DERIVE_BCOS_EXCEPTION(PBObjectEncodeException); +DERIVE_BCOS_EXCEPTION(PBObjectDecodeException); +template +bytesPointer encodePBObject(T _pbObject) +{ + auto encodedData = std::make_shared(); + encodedData->resize(_pbObject->ByteSizeLong()); + if (_pbObject->SerializeToArray(encodedData->data(), encodedData->size())) + { + return encodedData; + } + BOOST_THROW_EXCEPTION( + PBObjectEncodeException() << errinfo_comment("encode PBObject into bytes data failed")); +} + +template +void encodePBObject(bytes& _encodedData, T _pbObject) +{ + auto encodedData = std::make_shared(); + _encodedData.resize(_pbObject->ByteSizeLong()); + if (!_pbObject->SerializeToArray(_encodedData.data(), _encodedData.size())) + { + BOOST_THROW_EXCEPTION( + PBObjectEncodeException() << errinfo_comment("encode PBObject into bytes data failed")); + } +} + +template +void decodePBObject(T _pbObject, bytesConstRef _data) +{ + if (!_pbObject->ParseFromArray(_data.data(), _data.size())) + { + BOOST_THROW_EXCEPTION( + PBObjectDecodeException() << errinfo_comment( + "decode bytes data into PBObject failed, data: " + *toHexString(_data))); + } +} + +inline std::vector encodeToCalculateRoot( + size_t _listSize, std::function _hashFunc) +{ + std::vector encodedList(_listSize); + tbb::parallel_for( + tbb::blocked_range(0, _listSize), [&](const tbb::blocked_range& _r) { + for (auto i = _r.begin(); i < _r.end(); ++i) + { + bcos::codec::scale::ScaleEncoderStream stream; + stream << i; + bytes encodedData = stream.data(); + auto hash = _hashFunc(i); + encodedData.insert(encodedData.end(), hash.begin(), hash.end()); + encodedList[i] = std::move(encodedData); + } + }); + return encodedList; +} +} // namespace protocol +} // namespace bcos diff --git a/bcos-protocol/bcos-protocol/ParallelMerkleProof.cpp b/bcos-protocol/bcos-protocol/ParallelMerkleProof.cpp new file mode 100644 index 0000000..b2ef690 --- /dev/null +++ b/bcos-protocol/bcos-protocol/ParallelMerkleProof.cpp @@ -0,0 +1,119 @@ +/** + * Copyright (C) 2020 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: calc trie hash with merkle tree + * + * @file: ParallelMerkleProof.cpp + * @author: darrenyin + * @date 2019-09-24 + */ + +#include "ParallelMerkleProof.h" +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +const uint32_t MAX_CHILD_COUNT = 16; + +HashType bcos::protocol::calculateMerkleProofRoot( + CryptoSuite::Ptr _cryptoSuite, const std::vector& _bytesCaches) +{ + if (_bytesCaches.empty()) + { + return _cryptoSuite->hash(bytes()); + } + std::vector bytesCachesTemp; + bytesCachesTemp.insert(bytesCachesTemp.end(), + std::make_move_iterator(const_cast&>(_bytesCaches).begin()), + std::make_move_iterator(const_cast&>(_bytesCaches).end())); + + while (bytesCachesTemp.size() > 1) + { + std::vector higherLevelList; + int size = (bytesCachesTemp.size() + MAX_CHILD_COUNT - 1) / MAX_CHILD_COUNT; + higherLevelList.resize(size); + tbb::parallel_for( + tbb::blocked_range(0, size), [&](const tbb::blocked_range& _r) { + for (uint32_t i = _r.begin(); i < _r.end(); ++i) + { + bytes byteValue; + for (uint32_t j = 0; j < MAX_CHILD_COUNT; j++) + { + uint32_t index = i * MAX_CHILD_COUNT + j; + if (index < bytesCachesTemp.size()) + { + byteValue.insert(byteValue.end(), bytesCachesTemp[index].begin(), + bytesCachesTemp[index].end()); + } + } + higherLevelList[i] = _cryptoSuite->hash(byteValue).asBytes(); + } + }); + bytesCachesTemp = std::move(higherLevelList); + } + return _cryptoSuite->hash(bytesCachesTemp[0]); +} + +void bcos::protocol::calculateMerkleProof(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + const std::vector& _bytesCaches, + std::shared_ptr>> _parent2ChildList) +{ + if (_bytesCaches.empty()) + { + return; + } + std::vector bytesCachesTemp; + bytesCachesTemp.insert(bytesCachesTemp.end(), + std::make_move_iterator(const_cast&>(_bytesCaches).begin()), + std::make_move_iterator(const_cast&>(_bytesCaches).end())); + std::mutex mapMutex; + while (bytesCachesTemp.size() > 1) + { + std::vector higherLevelList; + int size = (bytesCachesTemp.size() + MAX_CHILD_COUNT - 1) / MAX_CHILD_COUNT; + higherLevelList.resize(size); + tbb::parallel_for( + tbb::blocked_range(0, size), [&](const tbb::blocked_range& _r) { + for (uint32_t i = _r.begin(); i < _r.end(); ++i) + { + bytes byteValue; + std::vector childList; + for (uint32_t j = 0; j < MAX_CHILD_COUNT; j++) + { + uint32_t index = i * MAX_CHILD_COUNT + j; + if (index < bytesCachesTemp.size()) + { + byteValue.insert(byteValue.end(), bytesCachesTemp[index].begin(), + bytesCachesTemp[index].end()); + childList.push_back(bytesCachesTemp[index]); + } + } + higherLevelList[i] = _cryptoSuite->hash(byteValue).asBytes(); + std::lock_guard l(mapMutex); + std::string parentNode = *toHexString(higherLevelList[i]); + for (const auto& child : childList) + { + (*_parent2ChildList)[parentNode].emplace_back(*toHexString(child)); + } + } + }); + bytesCachesTemp = std::move(higherLevelList); + } + + (*_parent2ChildList)[*toHexString(_cryptoSuite->hash(bytesCachesTemp[0]).asBytes())].push_back( + *toHexString(bytesCachesTemp[0])); +} diff --git a/bcos-protocol/bcos-protocol/ParallelMerkleProof.h b/bcos-protocol/bcos-protocol/ParallelMerkleProof.h new file mode 100644 index 0000000..5d8f8b7 --- /dev/null +++ b/bcos-protocol/bcos-protocol/ParallelMerkleProof.h @@ -0,0 +1,38 @@ +/** + * Copyright (C) 2020 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: calc trie hash with merkle tree + * + * @file: ParallelMerkleProof.h + * @author: darrenyin + * @date 2019-09-24 + */ +#pragma once + +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +bcos::crypto::HashType calculateMerkleProofRoot( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, const std::vector& _bytesCaches); +void calculateMerkleProof(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + const std::vector& _bytesCaches, + std::shared_ptr>> _parent2ChildList); +} // namespace protocol +} // namespace bcos diff --git a/bcos-protocol/bcos-protocol/TransactionStatus.h b/bcos-protocol/bcos-protocol/TransactionStatus.h new file mode 100644 index 0000000..217d7db --- /dev/null +++ b/bcos-protocol/bcos-protocol/TransactionStatus.h @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file: TransactionStatus.h + * @author: xingqiangbai + * @date: 20200608 + */ + +#pragma once +#include +#include + +namespace bcos +{ +struct Exception; +namespace protocol +{ +enum class TransactionStatus : int32_t +{ + None = 0, + Unknown = 1, + OutOfGasLimit = 2, ///< Too little gas to pay for the base transaction cost. + NotEnoughCash = 7, // TODO: remove this? + BadInstruction = 10, + BadJumpDestination = 11, + OutOfGas = 12, ///< Ran out of gas executing code of the transaction. + OutOfStack = 13, ///< Ran out of stack executing code of the transaction. + StackUnderflow = 14, + PrecompiledError = 15, + RevertInstruction = 16, + ContractAddressAlreadyUsed = 17, + PermissionDenied = 18, + CallAddressError = 19, + GasOverflow = 20, + ContractFrozen = 21, + AccountFrozen = 22, + AccountAbolished = 23, + ContractAbolished = 24, + WASMValidationFailure = 32, + WASMArgumentOutOfRange = 33, + WASMUnreachableInstruction = 34, + WASMTrap = 35, + NonceCheckFail = 10000, /// txPool related errors + BlockLimitCheckFail = 10001, + TxPoolIsFull = 10002, + Malform = 10003, + AlreadyInTxPool = 10004, + TxAlreadyInChain = 10005, + InvalidChainId = 10006, + InvalidGroupId = 10007, + InvalidSignature = 10008, + RequestNotBelongToTheGroup = 10009, + TransactionPoolTimeout = 10010 +}; + +inline std::ostream& operator<<(std::ostream& _out, bcos::protocol::TransactionStatus const& _er) +{ + switch (_er) + { + case bcos::protocol::TransactionStatus::None: + _out << "None"; + break; + case bcos::protocol::TransactionStatus::OutOfGasLimit: + _out << "OutOfGasLimit"; + break; + case bcos::protocol::TransactionStatus::NotEnoughCash: + _out << "NotEnoughCash"; + break; + case bcos::protocol::TransactionStatus::BadInstruction: + _out << "BadInstruction"; + break; + case bcos::protocol::TransactionStatus::BadJumpDestination: + _out << "BadJumpDestination"; + break; + case bcos::protocol::TransactionStatus::OutOfGas: + _out << "OutOfGas"; + break; + case bcos::protocol::TransactionStatus::OutOfStack: + _out << "OutOfStack"; + break; + case bcos::protocol::TransactionStatus::StackUnderflow: + _out << "StackUnderflow"; + break; + case bcos::protocol::TransactionStatus::NonceCheckFail: + _out << "NonceCheckFail"; + break; + case bcos::protocol::TransactionStatus::BlockLimitCheckFail: + _out << "BlockLimitCheckFail"; + break; + case bcos::protocol::TransactionStatus::PrecompiledError: + _out << "PrecompiledError"; + break; + case bcos::protocol::TransactionStatus::RevertInstruction: + _out << "RevertInstruction"; + break; + case bcos::protocol::TransactionStatus::ContractAddressAlreadyUsed: + _out << "ContractAddressAlreadyUsed"; + break; + case bcos::protocol::TransactionStatus::PermissionDenied: + _out << "PermissionDenied"; + break; + case bcos::protocol::TransactionStatus::CallAddressError: + _out << "CallAddressError"; + break; + case bcos::protocol::TransactionStatus::GasOverflow: + _out << "GasOverflow"; + break; + case bcos::protocol::TransactionStatus::ContractFrozen: + _out << "ContractFrozen"; + break; + case bcos::protocol::TransactionStatus::AccountFrozen: + _out << "AccountFrozen"; + break; + case TransactionStatus::AccountAbolished: + _out << "AccountAbolished"; + break; + case TransactionStatus::ContractAbolished: + _out << "ContractAbolished"; + break; + case TransactionStatus::WASMValidationFailure: + _out << "WASMValidationFailure"; + break; + case TransactionStatus::WASMArgumentOutOfRange: + _out << "WASMArgumentOutOfRange"; + break; + case TransactionStatus::WASMUnreachableInstruction: + _out << "WASMUnreachableInstruction"; + break; + case TransactionStatus::WASMTrap: + _out << "WASMTrap"; + break; + case bcos::protocol::TransactionStatus::TxPoolIsFull: + _out << "TxPoolIsFull"; + break; + case bcos::protocol::TransactionStatus::Malform: + _out << "MalformTx"; + break; + case bcos::protocol::TransactionStatus::AlreadyInTxPool: + _out << "AlreadyInTxPool"; + break; + case bcos::protocol::TransactionStatus::TxAlreadyInChain: + _out << "TxAlreadyInChain"; + break; + case bcos::protocol::TransactionStatus::InvalidChainId: + _out << "InvalidChainId"; + break; + case bcos::protocol::TransactionStatus::InvalidGroupId: + _out << "InvalidGroupId"; + break; + case bcos::protocol::TransactionStatus::InvalidSignature: + _out << "InvalidSignature"; + break; + case bcos::protocol::TransactionStatus::RequestNotBelongToTheGroup: + _out << "RequestNotBelongToTheGroup"; + break; + case TransactionStatus::TransactionPoolTimeout: + _out << "TransactionPoolTimeout"; + break; + case TransactionStatus::Unknown: + default: + _out << "Unknown"; + break; + } + return _out; +} + +inline std::string toString(protocol::TransactionStatus const& _i) +{ + std::stringstream stream; + stream << _i; + return stream.str(); +} + +} // namespace protocol +} // namespace bcos diff --git a/bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h b/bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h new file mode 100644 index 0000000..0d5cf50 --- /dev/null +++ b/bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TransactionSubmitResultFactoryImpl.h + * @author: yujiechen + * @date: 2021-05-08 + */ +#pragma once +#include "TransactionSubmitResultImpl.h" +#include + +namespace bcos +{ +namespace protocol +{ +class TransactionSubmitResultFactoryImpl : public TransactionSubmitResultFactory +{ +public: + using Ptr = std::shared_ptr; + TransactionSubmitResultFactoryImpl() = default; + ~TransactionSubmitResultFactoryImpl() override {} + + TransactionSubmitResult::Ptr createTxSubmitResult() override + { + return std::make_shared(); + } +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-protocol/bcos-protocol/TransactionSubmitResultImpl.h b/bcos-protocol/bcos-protocol/TransactionSubmitResultImpl.h new file mode 100644 index 0000000..ca1b43f --- /dev/null +++ b/bcos-protocol/bcos-protocol/TransactionSubmitResultImpl.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TransactionSubmitResultImpl.h + * @author: yujiechen + * @date: 2021-04-07 + */ +#pragma once +#include "bcos-protocol/TransactionStatus.h" +#include +#include +#include + +namespace bcos +{ +namespace protocol +{ +class TransactionSubmitResultImpl : public TransactionSubmitResult +{ +public: + using Ptr = std::shared_ptr; + ~TransactionSubmitResultImpl() override {} + + uint32_t status() const override { return m_status; } + void setStatus(uint32_t status) override { m_status = status; } + + bcos::crypto::HashType txHash() const override { return m_txHash; } + void setTxHash(bcos::crypto::HashType txHash) override { m_txHash = txHash; } + + bcos::crypto::HashType blockHash() const override { return m_blockHash; } + void setBlockHash(bcos::crypto::HashType blockHash) override { m_blockHash = blockHash; } + + int64_t transactionIndex() const override { return m_transactionIndex; } + void setTransactionIndex(int64_t transactionIndex) override + { + m_transactionIndex = transactionIndex; + } + + NonceType nonce() const override { return m_nonce; } + void setNonce(NonceType nonce) override { m_nonce = nonce; } + + TransactionReceipt::Ptr transactionReceipt() const override { return m_receipt; } + void setTransactionReceipt(TransactionReceipt::Ptr transactionReceipt) override + { + m_receipt = std::move(transactionReceipt); + } + + std::string const& sender() const override { return m_sender; } + void setSender(std::string const& _sender) override { m_sender = _sender; } + + std::string const& to() const override { return m_to; } + void setTo(std::string const& _to) override { m_to = _to; } + +private: + uint32_t m_status = (uint32_t)TransactionStatus::None; + bcos::crypto::HashType m_txHash; + bcos::crypto::HashType m_blockHash; + int64_t m_transactionIndex; + NonceType m_nonce = -1; + TransactionReceipt::Ptr m_receipt; + std::string m_sender; + std::string m_to; +}; +} // namespace protocol +} // namespace bcos \ No newline at end of file diff --git a/bcos-protocol/bcos-protocol/amop/TopicItem.h b/bcos-protocol/bcos-protocol/amop/TopicItem.h new file mode 100644 index 0000000..3ea24a9 --- /dev/null +++ b/bcos-protocol/bcos-protocol/amop/TopicItem.h @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TopicItem.h + * @author: octopus + * @date 2021-06-21 + */ +#pragma once +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace protocol +{ +class TopicItem +{ +public: + using Ptr = std::shared_ptr; + TopicItem() {} + TopicItem(const std::string& _topicName) : m_topicName(_topicName) {} + std::string topicName() const { return m_topicName; } + void setTopicName(const std::string& _topicName) { m_topicName = _topicName; } + +private: + std::string m_topicName; +}; + +inline bool operator<(const TopicItem& _topicItem0, const TopicItem& _topicItem1) +{ + return _topicItem0.topicName() < _topicItem1.topicName(); +} +using TopicItems = std::set; + +inline bool parseSubTopicsJson(const std::string& _json, TopicItems& _topicItems) +{ + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(_json, root)) + { + BCOS_LOG(ERROR) << LOG_BADGE("parseSubTopicsJson") << LOG_DESC("unable to parse json") + << LOG_KV("json:", _json); + return false; + } + + TopicItems topicItems; + + auto topicItemsSize = root["topics"].size(); + + for (unsigned int i = 0; i < topicItemsSize; i++) + { + std::string topic = root["topics"][i].asString(); + topicItems.insert(TopicItem(topic)); + } + + _topicItems = topicItems; + + BCOS_LOG(INFO) << LOG_BADGE("parseSubTopicsJson") + << LOG_KV("topicItems size", topicItems.size()) << LOG_KV("json", _json); + return true; + } + catch (const std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("parseSubTopicsJson") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("json:", _json); + return false; + } +} +} // namespace protocol +} // namespace bcos diff --git a/bcos-protocol/test/CMakeLists.txt b/bcos-protocol/test/CMakeLists.txt new file mode 100644 index 0000000..f5751f3 --- /dev/null +++ b/bcos-protocol/test/CMakeLists.txt @@ -0,0 +1,29 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-protocol +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") +# cmake settings +set(TEST_BINARY_NAME test-bcos-protocol) + +# No need to test pb protocol +# add_executable(${TEST_BINARY_NAME} ${SOURCES}) +# target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +# find_package(Boost QUIET REQUIRED unit_test_framework) + +# target_link_libraries(${TEST_BINARY_NAME} ${PROTOCOL_TARGET} ${PBPROTOCOL_TARGET} ${UTILITIES_TARGET} ${CRYPTO_TARGET} Boost::unit_test_framework) +# add_test(NAME test-protocol WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-protocol/test/unittests/main/main.cpp b/bcos-protocol/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-protocol/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-rpc/CMakeLists.txt b/bcos-rpc/CMakeLists.txt new file mode 100644 index 0000000..62ceeb6 --- /dev/null +++ b/bcos-rpc/CMakeLists.txt @@ -0,0 +1,46 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-rpc +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-rpc +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + + +project(bcos-rpc VERSION ${VERSION}) + +find_package(jsoncpp CONFIG REQUIRED) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB_RECURSE SRCS bcos-rpc/*.cpp) + +find_package(tarscpp REQUIRED) + +add_library(${RPC_TARGET} ${SRCS} ${HEADERS}) +target_link_libraries(${RPC_TARGET} PUBLIC bcos-boostssl ${CRYPTO_TARGET} ${TARS_PROTOCOL_TARGET} jsoncpp_static ${CRYPTO_TARGET} tarscpp::tarsservant tarscpp::tarsutil) + +# if (TESTS) +# enable_testing() +# set(CTEST_OUTPUT_ON_FAILURE TRUE) +# add_subdirectory(test) +# endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("rpc-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_SOURCE_DIR}/test/mock**' '${CMAKE_SOURCE_DIR}/test/main**'") +endif () diff --git a/bcos-rpc/bcos-rpc/Common.h b/bcos-rpc/bcos-rpc/Common.h new file mode 100644 index 0000000..28d1daf --- /dev/null +++ b/bcos-rpc/bcos-rpc/Common.h @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-07-02 + */ +#pragma once +#include +#include +#include + +#define RPC_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("RPC") + +namespace bcos +{ +namespace rpc +{ +enum AMOPClientMessageType +{ + AMOP_SUBTOPIC = 0x110, // 272 + AMOP_REQUEST = 0x111, // 273 + AMOP_BROADCAST = 0x112, // 274 + AMOP_RESPONSE = 0x113 // 275 +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/Rpc.cpp b/bcos-rpc/bcos-rpc/Rpc.cpp new file mode 100644 index 0000000..fb399f2 --- /dev/null +++ b/bcos-rpc/bcos-rpc/Rpc.cpp @@ -0,0 +1,251 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for RPC + * @file Rpc.cpp + * @author: octopus + * @date 2021-07-15 + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::group; +using namespace bcos::protocol; +using namespace bcos::boostssl::ws; + +Rpc::Rpc(std::shared_ptr _wsService, + bcos::rpc::JsonRpcImpl_2_0::Ptr _jsonRpcImpl, bcos::event::EventSub::Ptr _eventSub, + AMOPClient::Ptr _amopClient) + : m_wsService(_wsService), + m_jsonRpcImpl(_jsonRpcImpl), + m_eventSub(_eventSub), + m_amopClient(_amopClient), + m_groupManager(m_jsonRpcImpl->groupManager()) +{ + // init the local protocol + m_localProtocol = g_BCOSConfig.protocolInfo(ProtocolModuleID::RpcService); + // group information notification + m_jsonRpcImpl->groupManager()->registerGroupInfoNotifier( + [this](bcos::group::GroupInfo::Ptr _groupInfo) { notifyGroupInfo(_groupInfo); }); + // block number notification + m_jsonRpcImpl->groupManager()->registerBlockNumberNotifier( + [this](std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber) { + asyncNotifyBlockNumber(_groupID, _nodeName, _blockNumber, [](Error::Ptr _error) { + if (_error) + { + RPC_LOG(ERROR) << LOG_DESC("asyncNotifyBlockNumber error") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + }); + + // handshake msgHandler + m_wsService->registerMsgHandler(bcos::protocol::MessageType::HANDESHAKE, + boost::bind( + &Rpc::onRecvHandshakeRequest, this, boost::placeholders::_1, boost::placeholders::_2)); +} + +void Rpc::start() +{ + // start event sub + m_eventSub->start(); + // start websocket service + m_wsService->start(); + m_amopClient->start(); + RPC_LOG(INFO) << LOG_DESC("start rpc successfully"); +} + +void Rpc::stop() +{ + // stop ws service + if (m_wsService) + { + m_wsService->stop(); + } + + // stop event sub + if (m_eventSub) + { + m_eventSub->stop(); + } + if (m_amopClient) + { + m_amopClient->stop(); + } + + RPC_LOG(INFO) << LOG_DESC("[RPC][RPC][stop]") << LOG_DESC("stop rpc successfully"); +} + +/** + * @brief: notify blockNumber to rpc + * @param _blockNumber: blockNumber + * @param _callback: resp callback + * @return void + */ +void Rpc::asyncNotifyBlockNumber(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber, std::function _callback) +{ + auto ss = m_wsService->sessions(); + for (const auto& s : ss) + { + if (s && s->isConnected()) + { + std::string group; + // eg: {"blockNumber": 11, "group": "group"} + Json::Value response; + response["group"] = _groupID; + response["nodeName"] = _nodeName; + response["blockNumber"] = _blockNumber; + auto resp = response.toStyledString(); + auto message = m_wsService->messageFactory()->buildMessage(); + message->setPacketType(bcos::protocol::MessageType::BLOCK_NOTIFY); + message->setPayload(std::make_shared(resp.begin(), resp.end())); + s->asyncSendMessage(message); + } + } + + if (_callback) + { + _callback(nullptr); + } + m_jsonRpcImpl->groupManager()->updateGroupBlockInfo(_groupID, _nodeName, _blockNumber); + RPC_LOG(TRACE) << LOG_BADGE("asyncNotifyBlockNumber") << LOG_KV("group", _groupID) + << LOG_KV("blockNumber", _blockNumber) << LOG_KV("sessions", ss.size()); +} + +void Rpc::asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr _groupInfo, std::function _callback) +{ + m_jsonRpcImpl->groupManager()->updateGroupInfo(_groupInfo); + if (_callback) + { + _callback(nullptr); + } +} + +void Rpc::notifyGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + // notify the groupInfo to SDK + auto sdkSessions = m_wsService->sessions(); + for (auto const& session : sdkSessions) + { + if (!session || !session->isConnected()) + { + continue; + } + Json::Value groupInfoJson; + groupInfoToJson(groupInfoJson, _groupInfo); + auto response = groupInfoJson.toStyledString(); + auto message = m_wsService->messageFactory()->buildMessage(); + message->setPacketType(bcos::protocol::MessageType::GROUP_NOTIFY); + message->setPayload(std::make_shared(response.begin(), response.end())); + session->asyncSendMessage(message); + } +} + +bool Rpc::negotiatedVersion( + std::shared_ptr _msg, std::shared_ptr _session) +{ + auto seq = _msg->seq(); + HandshakeRequest handshakeRequest; + auto ret = handshakeRequest.decode(*(_msg->payload())); + if (!ret) + { + RPC_LOG(WARNING) << LOG_DESC( + "negotiatedVersion error for receive invalid handshake request") + << LOG_KV("seq", seq); + return false; + } + // negotiated protocol Version + auto const& protocolInfo = handshakeRequest.protocol(); + // negotiated failed + if (protocolInfo.minVersion() > m_localProtocol->maxVersion() || + protocolInfo.maxVersion() < m_localProtocol->minVersion()) + { + RPC_LOG(WARNING) << LOG_DESC("negotiatedVersion failed, disconnect the session") + << LOG_KV("peer", _session->endPoint()) + << LOG_KV("minVersion", protocolInfo.minVersion()) + << LOG_KV("maxVersion", protocolInfo.maxVersion()) + << LOG_KV("supportMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportMaxVersion", m_localProtocol->maxVersion()) + << LOG_KV("seq", seq); + _session->drop(WsError::UserDisconnect); + } + auto version = std::min(m_localProtocol->maxVersion(), protocolInfo.maxVersion()); + _session->setVersion(version); + RPC_LOG(INFO) << LOG_DESC("negotiatedVersion success") << LOG_KV("peer", _session->endPoint()) + << LOG_KV("minVersion", protocolInfo.minVersion()) + << LOG_KV("maxVersion", protocolInfo.maxVersion()) + << LOG_KV("supportMinVersion", m_localProtocol->minVersion()) + << LOG_KV("supportMaxVersion", m_localProtocol->maxVersion()) + << LOG_KV("negotiatedVersion", version) << LOG_KV("seq", seq); + return true; +} + +void Rpc::onRecvHandshakeRequest( + std::shared_ptr _msg, std::shared_ptr _session) +{ + if (!negotiatedVersion(_msg, _session)) + { + return; + } + auto self = std::weak_ptr(shared_from_this()); + + // notify the handshakeResponse + m_jsonRpcImpl->getGroupInfoList([_msg, _session, self]( + bcos::Error::Ptr _error, Json::Value& _groupListResponse) { + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + RPC_LOG(ERROR) + << LOG_BADGE( + "onRecvHandshakeRequest and response failed for get groupInfoList failed") + << LOG_KV("endpoint", _session ? _session->endPoint() : "unknown") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + auto rpc = self.lock(); + if (!rpc) + { + return; + } + rpc->m_jsonRpcImpl->getGroupBlockNumber( + [_groupListResponse, _session, _msg](bcos::Error::Ptr, Json::Value& _blockNumber) { + Json::Value handshakeResponse; + handshakeResponse["groupInfoList"] = _groupListResponse; + handshakeResponse["groupBlockNumber"] = _blockNumber; + handshakeResponse["protocolVersion"] = _session->version(); + Json::FastWriter writer; + auto response = writer.write(handshakeResponse); + + _msg->setPayload(std::make_shared(response.begin(), response.end())); + _session->asyncSendMessage(_msg); + RPC_LOG(INFO) << LOG_DESC("onRecvHandshakeRequest success") + << LOG_KV("version", _session->version()) + << LOG_KV("endpoint", _session ? _session->endPoint() : "unknown") + << LOG_KV("handshakeResponse", response); + }); + }); +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/Rpc.h b/bcos-rpc/bcos-rpc/Rpc.h new file mode 100644 index 0000000..af21fe3 --- /dev/null +++ b/bcos-rpc/bcos-rpc/Rpc.h @@ -0,0 +1,110 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for RPC + * @file Rpc.h + * @author: octopus + * @date 2021-07-15 + */ + +#pragma once +#include "bcos-rpc/groupmgr/GroupManager.h" +#include +#include +#include +#include +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsSession; +class WsService; +} // namespace ws +} // namespace boostssl +namespace rpc +{ +class Rpc : public RPCInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + Rpc(std::shared_ptr _wsService, + bcos::rpc::JsonRpcImpl_2_0::Ptr _jsonRpcImpl, bcos::event::EventSub::Ptr _eventSub, + AMOPClient::Ptr _amopClient); + + virtual ~Rpc() { stop(); } + + void start() override; + void stop() override; + + /** + * @brief: notify blockNumber to rpc + * @param _blockNumber: blockNumber + * @param _callback: resp callback + * @return void + */ + void asyncNotifyBlockNumber(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber, + std::function _callback) override; + + void asyncNotifyGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo, + std::function _callback) override; + + std::shared_ptr wsService() const { return m_wsService; } + bcos::rpc::JsonRpcImpl_2_0::Ptr jsonRpcImpl() const { return m_jsonRpcImpl; } + bcos::event::EventSub::Ptr eventSub() const { return m_eventSub; } + + void asyncNotifyAMOPMessage(int16_t _type, std::string const& _topic, + bytesConstRef _requestData, + std::function _callback) override + { + m_amopClient->asyncNotifyAMOPMessage(_type, _topic, _requestData, _callback); + } + + void setClientID(std::string const& _clientID) + { + m_jsonRpcImpl->setClientID(_clientID); + m_amopClient->setClientID(_clientID); + } + void asyncNotifySubscribeTopic( + std::function _callback) override + { + m_amopClient->asyncNotifySubscribeTopic(_callback); + } + + GroupManager::Ptr groupManager() { return m_groupManager; } + +protected: + virtual void notifyGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo); + + virtual void onRecvHandshakeRequest(std::shared_ptr _msg, + std::shared_ptr _session); + + virtual bool negotiatedVersion(std::shared_ptr _msg, + std::shared_ptr _session); + +private: + std::shared_ptr m_wsService; + bcos::rpc::JsonRpcImpl_2_0::Ptr m_jsonRpcImpl; + bcos::event::EventSub::Ptr m_eventSub; + AMOPClient::Ptr m_amopClient; + GroupManager::Ptr m_groupManager; + + bcos::protocol::ProtocolInfo::ConstPtr m_localProtocol; +}; + +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/RpcFactory.cpp b/bcos-rpc/bcos-rpc/RpcFactory.cpp new file mode 100644 index 0000000..b2d99ef --- /dev/null +++ b/bcos-rpc/bcos-rpc/RpcFactory.cpp @@ -0,0 +1,455 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief RpcFactory + * @file RpcFactory.h + * @author: octopus + * @date 2021-07-15 + */ + +#include "bcos-framework/gateway/GatewayTypeDef.h" +#include "bcos-rpc/groupmgr/TarsGroupManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::gateway; +using namespace bcos::group; +using namespace bcos::boostssl::ws; +using namespace bcos::protocol; +using namespace bcos::security; + +RpcFactory::RpcFactory(std::string const& _chainID, GatewayInterface::Ptr _gatewayInterface, + KeyFactory::Ptr _keyFactory, bcos::security::DataEncryptInterface::Ptr _dataEncrypt) + : m_chainID(_chainID), + m_gateway(_gatewayInterface), + m_keyFactory(_keyFactory), + m_dataEncrypt(_dataEncrypt) +{} + +std::shared_ptr RpcFactory::initConfig( + bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + auto wsConfig = std::make_shared(); + wsConfig->setModel(bcos::boostssl::ws::WsModel::Server); + + wsConfig->setListenIP(_nodeConfig->rpcListenIP()); + wsConfig->setListenPort(_nodeConfig->rpcListenPort()); + wsConfig->setThreadPoolSize(_nodeConfig->rpcThreadPoolSize()); + wsConfig->setDisableSsl(_nodeConfig->rpcDisableSsl()); + if (_nodeConfig->rpcDisableSsl()) + { + RPC_LOG(INFO) << LOG_BADGE("initConfig") << LOG_DESC("rpc work in disable ssl model") + << LOG_KV("listenIP", wsConfig->listenIP()) + << LOG_KV("listenPort", wsConfig->listenPort()) + << LOG_KV("threadCount", wsConfig->threadPoolSize()) + << LOG_KV("asServer", wsConfig->asServer()); + return wsConfig; + } + + auto contextConfig = std::make_shared(); + if (!_nodeConfig->rpcSmSsl()) + { // ssl + boostssl::context::ContextConfig::CertConfig certConfig; + + std::shared_ptr keyContent; + + // caCert + if (false == _nodeConfig->caCert().empty()) + { + try + { + keyContent = readContents(boost::filesystem::path(_nodeConfig->caCert())); + if (nullptr != keyContent) + { + certConfig.caCert.resize(keyContent->size()); + memcpy(certConfig.caCert.data(), keyContent->data(), keyContent->size()); + } + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open caCert failed") + << LOG_KV("file", _nodeConfig->caCert()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->caCert())); + } + } + + // nodeCert + if (false == _nodeConfig->nodeCert().empty()) + { + try + { + keyContent = readContents(boost::filesystem::path(_nodeConfig->nodeCert())); + if (nullptr != keyContent) + { + certConfig.nodeCert.resize(keyContent->size()); + memcpy(certConfig.nodeCert.data(), keyContent->data(), keyContent->size()); + } + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open nodeCert failed") + << LOG_KV("file", _nodeConfig->nodeCert()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeCert())); + } + } + + // nodeKey + if (false == _nodeConfig->nodeKey().empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + keyContent = readContents(boost::filesystem::path(_nodeConfig->nodeKey())); + else + keyContent = m_dataEncrypt->decryptFile(_nodeConfig->nodeKey()); + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open nodeKey failed") + << LOG_KV("file", _nodeConfig->nodeKey()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeKey())); + } + } + certConfig.nodeKey.resize(keyContent->size()); + memcpy(certConfig.nodeKey.data(), keyContent->data(), keyContent->size()); + + contextConfig->setIsCertPath(false); + + contextConfig->setCertConfig(certConfig); + contextConfig->setSslType("ssl"); + + RPC_LOG(INFO) << LOG_DESC("rpc work in ssl model") + << LOG_KV("listenIP", wsConfig->listenIP()) + << LOG_KV("listenPort", wsConfig->listenPort()) + << LOG_KV("threadCount", wsConfig->threadPoolSize()) + << LOG_KV("asServer", wsConfig->asServer()) + << LOG_KV("caCert", _nodeConfig->caCert()) + << LOG_KV("nodeCert", _nodeConfig->nodeCert()) + << LOG_KV("nodeKey", _nodeConfig->nodeKey()); + } + else + { // sm ssl + boostssl::context::ContextConfig::SMCertConfig certConfig; + + std::shared_ptr keyContent; + + // caCert + if (false == _nodeConfig->smCaCert().empty()) + { + try + { + keyContent = readContents(boost::filesystem::path(_nodeConfig->smCaCert())); + if (nullptr != keyContent) + { + certConfig.caCert.resize(keyContent->size()); + memcpy(certConfig.caCert.data(), keyContent->data(), keyContent->size()); + } + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open smCaCert failed") + << LOG_KV("file", _nodeConfig->caCert()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->caCert())); + } + } + + // nodeCert + if (false == _nodeConfig->smNodeCert().empty()) + { + try + { + keyContent = readContents(boost::filesystem::path(_nodeConfig->smNodeCert())); + if (nullptr != keyContent) + { + certConfig.nodeCert.resize(keyContent->size()); + memcpy(certConfig.nodeCert.data(), keyContent->data(), keyContent->size()); + } + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open smNodeCert failed") + << LOG_KV("file", _nodeConfig->nodeCert()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeCert())); + } + } + + // nodeKey + if (false == _nodeConfig->smNodeKey().empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + keyContent = readContents(boost::filesystem::path(_nodeConfig->smNodeKey())); + else + keyContent = m_dataEncrypt->decryptFile(_nodeConfig->smNodeKey()); + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open smNodeKey failed") + << LOG_KV("file", _nodeConfig->nodeKey()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeKey())); + } + } + certConfig.nodeKey.resize(keyContent->size()); + memcpy(certConfig.nodeKey.data(), keyContent->data(), keyContent->size()); + + // enNodeCert + if (false == _nodeConfig->enSmNodeCert().empty()) + { + try + { + keyContent = readContents(boost::filesystem::path(_nodeConfig->enSmNodeCert())); + if (nullptr != keyContent) + { + certConfig.enNodeCert.resize(keyContent->size()); + memcpy(certConfig.enNodeCert.data(), keyContent->data(), keyContent->size()); + } + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open enSmNodeCert failed") + << LOG_KV("file", _nodeConfig->nodeCert()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeCert())); + } + } + + // enNodeKey + if (false == _nodeConfig->enSmNodeKey().empty()) + { + try + { + if (nullptr == m_dataEncrypt) // storage_security.enable = false + keyContent = readContents(boost::filesystem::path(_nodeConfig->enSmNodeKey())); + else + keyContent = m_dataEncrypt->decryptFile(_nodeConfig->enSmNodeKey()); + } + catch (std::exception& e) + { + BCOS_LOG(ERROR) << LOG_BADGE("RpcFactory") << LOG_DESC("open enSmNodeKey failed") + << LOG_KV("file", _nodeConfig->nodeKey()); + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "RpcFactory::initConfig: unable read content of key:" + + _nodeConfig->nodeKey())); + } + } + certConfig.enNodeKey.resize(keyContent->size()); + memcpy(certConfig.enNodeKey.data(), keyContent->data(), keyContent->size()); + + contextConfig->setIsCertPath(false); + + contextConfig->setSmCertConfig(certConfig); + contextConfig->setSslType("sm_ssl"); + + RPC_LOG(INFO) << LOG_DESC("rpc work in sm ssl model") + << LOG_KV("listenIP", wsConfig->listenIP()) + << LOG_KV("listenPort", wsConfig->listenPort()) + << LOG_KV("threadCount", wsConfig->threadPoolSize()) + << LOG_KV("asServer", wsConfig->asServer()) + << LOG_KV("caCert", _nodeConfig->smCaCert()) + << LOG_KV("nodeCert", _nodeConfig->smNodeCert()) + << LOG_KV("nodeKey", _nodeConfig->smNodeKey()) + << LOG_KV("enNodeCert", _nodeConfig->enSmNodeCert()) + << LOG_KV("enNodeKey", _nodeConfig->enSmNodeKey()); + } + + wsConfig->setContextConfig(contextConfig); + + return wsConfig; +} + +bcos::boostssl::ws::WsService::Ptr RpcFactory::buildWsService( + bcos::boostssl::ws::WsConfig::Ptr _config) +{ + auto wsService = std::make_shared(); + auto initializer = std::make_shared(); + + initializer->setConfig(_config); + initializer->initWsService(wsService); + + return wsService; +} + +bcos::rpc::JsonRpcImpl_2_0::Ptr RpcFactory::buildJsonRpc(int sendTxTimeout, + std::shared_ptr _wsService, GroupManager::Ptr _groupManager) +{ + // JsonRpcImpl_2_0 + //* + auto jsonRpcInterface = + std::make_shared(_groupManager, m_gateway, _wsService); + jsonRpcInterface->setSendTxTimeout(sendTxTimeout); + auto httpServer = _wsService->httpServer(); + if (httpServer) + { + httpServer->setHttpReqHandler(std::bind(&bcos::rpc::JsonRpcInterface::onRPCRequest, + jsonRpcInterface, std::placeholders::_1, std::placeholders::_2)); + } + return jsonRpcInterface; +} + +bcos::event::EventSub::Ptr RpcFactory::buildEventSub( + std::shared_ptr _wsService, GroupManager::Ptr _groupManager) +{ + auto eventSubFactory = std::make_shared(); + auto eventSub = eventSubFactory->buildEventSub(_wsService); + + auto matcher = std::make_shared(); + eventSub->setGroupManager(_groupManager); + eventSub->setMessageFactory(_wsService->messageFactory()); + eventSub->setMatcher(matcher); + RPC_LOG(INFO) << LOG_DESC("create event sub obj"); + return eventSub; +} + +Rpc::Ptr RpcFactory::buildRpc(std::string const& _gatewayServiceName, + std::string const& _rpcServiceName, bcos::election::LeaderEntryPointInterface::Ptr _entryPoint) +{ + auto config = initConfig(m_nodeConfig); + auto wsService = buildWsService(config); + auto groupManager = buildGroupManager(_rpcServiceName, _entryPoint); + auto amopClient = buildAMOPClient(wsService, _gatewayServiceName); + + RPC_LOG(INFO) << LOG_KV("listenIP", config->listenIP()) + << LOG_KV("listenPort", config->listenPort()) + << LOG_KV("threadCount", config->threadPoolSize()) + << LOG_KV("gatewayServiceName", _gatewayServiceName); + auto rpc = buildRpc(m_nodeConfig->sendTxTimeout(), wsService, groupManager, amopClient); + return rpc; +} + +Rpc::Ptr RpcFactory::buildLocalRpc( + bcos::group::GroupInfo::Ptr _groupInfo, NodeService::Ptr _nodeService) +{ + auto config = initConfig(m_nodeConfig); + auto wsService = buildWsService(config); + auto groupManager = buildAirGroupManager(_groupInfo, _nodeService); + auto amopClient = buildAirAMOPClient(wsService); + auto rpc = buildRpc(m_nodeConfig->sendTxTimeout(), wsService, groupManager, amopClient); + // Note: init groupManager after create rpc and register the handlers + groupManager->init(); + return rpc; +} + +Rpc::Ptr RpcFactory::buildRpc(int sendTxTimeout, + std::shared_ptr _wsService, GroupManager::Ptr _groupManager, + AMOPClient::Ptr _amopClient) +{ + // JsonRpc + auto jsonRpc = buildJsonRpc(sendTxTimeout, _wsService, _groupManager); + // EventSub + auto es = buildEventSub(_wsService, _groupManager); + return std::make_shared(_wsService, jsonRpc, es, _amopClient); +} + +// Note: _rpcServiceName is used to check the validation of groupInfo when groupManager update +// groupInfo +GroupManager::Ptr RpcFactory::buildGroupManager( + std::string const& _rpcServiceName, bcos::election::LeaderEntryPointInterface::Ptr _entryPoint) +{ + auto nodeServiceFactory = std::make_shared(); + if (!_entryPoint) + { + RPC_LOG(INFO) << LOG_DESC("buildGroupManager: using tars to manager the node info"); + return std::make_shared( + _rpcServiceName, m_chainID, nodeServiceFactory, m_nodeConfig); + } + RPC_LOG(INFO) << LOG_DESC("buildGroupManager with leaderEntryPoint to manager the node info"); + auto groupManager = std::make_shared( + _rpcServiceName, m_chainID, nodeServiceFactory, m_nodeConfig); + auto groupInfoCodec = std::make_shared(); + _entryPoint->addMemberChangeNotificationHandler( + [groupManager, groupInfoCodec]( + std::string const& _key, bcos::protocol::MemberInterface::Ptr _member) { + auto const& groupInfoStr = _member->memberConfig(); + auto groupInfo = groupInfoCodec->deserialize(groupInfoStr); + groupManager->updateGroupInfo(groupInfo); + RPC_LOG(INFO) << LOG_DESC("The leader entryPoint changed") << LOG_KV("key", _key) + << LOG_KV("memberID", _member->memberID()) + << LOG_KV("modifyIndex", _member->seq()) + << LOG_KV("groupID", groupInfo->groupID()); + }); + + _entryPoint->addMemberDeleteNotificationHandler( + [groupManager, groupInfoCodec]( + std::string const& _leaderKey, bcos::protocol::MemberInterface::Ptr _leader) { + auto const& groupInfoStr = _leader->memberConfig(); + auto groupInfo = groupInfoCodec->deserialize(groupInfoStr); + RPC_LOG(INFO) << LOG_DESC("The leader entryPoint has been deleted") + << LOG_KV("key", _leaderKey) << LOG_KV("memberID", _leader->memberID()) + << LOG_KV("modifyIndex", _leader->seq()) + << LOG_KV("groupID", groupInfo->groupID()); + groupManager->removeGroupNodeList(groupInfo); + }); + return groupManager; +} + +AirGroupManager::Ptr RpcFactory::buildAirGroupManager( + GroupInfo::Ptr _groupInfo, NodeService::Ptr _nodeService) +{ + return std::make_shared(m_chainID, _groupInfo, _nodeService); +} + +AMOPClient::Ptr RpcFactory::buildAMOPClient( + std::shared_ptr _wsService, std::string const& _gatewayServiceName) +{ + auto wsFactory = std::make_shared(); + auto requestFactory = std::make_shared(); + return std::make_shared( + _wsService, wsFactory, requestFactory, m_gateway, _gatewayServiceName); +} + +AMOPClient::Ptr RpcFactory::buildAirAMOPClient(std::shared_ptr _wsService) +{ + auto wsFactory = std::make_shared(); + auto requestFactory = std::make_shared(); + return std::make_shared(_wsService, wsFactory, requestFactory, m_gateway); +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/RpcFactory.h b/bcos-rpc/bcos-rpc/RpcFactory.h new file mode 100644 index 0000000..b8b5db9 --- /dev/null +++ b/bcos-rpc/bcos-rpc/RpcFactory.h @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for RPC + * @file Rpc.h + * @author: octopus + * @date 2021-07-15 + */ + +#pragma once +#include "bcos-rpc/amop/AMOPClient.h" +#include "bcos-rpc/amop/AirAMOPClient.h" +#include "bcos-rpc/groupmgr/AirGroupManager.h" +#include "bcos-rpc/groupmgr/GroupManager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace boostssl +{ +namespace ws +{ +class WsService; +class WsSession; +} // namespace ws +} // namespace boostssl + +namespace rpc +{ +class RpcFactory : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + RpcFactory(std::string const& _chainID, bcos::gateway::GatewayInterface::Ptr _gatewayInterface, + bcos::crypto::KeyFactory::Ptr _keyFactory, + bcos::security::DataEncryptInterface::Ptr _dataEncrypt = nullptr); + virtual ~RpcFactory() {} + + std::shared_ptr initConfig(bcos::tool::NodeConfig::Ptr _nodeConfig); + std::shared_ptr buildWsService( + bcos::boostssl::ws::WsConfig::Ptr _config); + + Rpc::Ptr buildRpc(std::string const& _gatewayServiceName, std::string const& _rpcServiceName, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint); + Rpc::Ptr buildLocalRpc(bcos::group::GroupInfo::Ptr _groupInfo, NodeService::Ptr _nodeService); + + Rpc::Ptr buildRpc(int sendTxTimeout, std::shared_ptr _wsService, + GroupManager::Ptr _groupManager, AMOPClient::Ptr _amopClient); + + bcos::tool::NodeConfig::Ptr nodeConfig() const { return m_nodeConfig; } + void setNodeConfig(bcos::tool::NodeConfig::Ptr _nodeConfig) { m_nodeConfig = _nodeConfig; } + +protected: + // for groupManager builder + GroupManager::Ptr buildGroupManager(std::string const& _rpcServiceName, + bcos::election::LeaderEntryPointInterface::Ptr _entryPoint); + AirGroupManager::Ptr buildAirGroupManager( + bcos::group::GroupInfo::Ptr _groupInfo, NodeService::Ptr _nodeService); + + // for AMOP builder + AMOPClient::Ptr buildAMOPClient(std::shared_ptr _wsService, + std::string const& _gatewayServiceName); + AMOPClient::Ptr buildAirAMOPClient(std::shared_ptr _wsService); + + + bcos::rpc::JsonRpcImpl_2_0::Ptr buildJsonRpc(int sendTxTimeout, + std::shared_ptr _wsService, GroupManager::Ptr _groupManager); + bcos::event::EventSub::Ptr buildEventSub( + std::shared_ptr _wsService, GroupManager::Ptr _groupManager); + +private: + std::string m_chainID; + bcos::gateway::GatewayInterface::Ptr m_gateway; + std::shared_ptr m_keyFactory; + bcos::tool::NodeConfig::Ptr m_nodeConfig; + bcos::security::DataEncryptInterface::Ptr m_dataEncrypt; +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/amop/AMOPClient.cpp b/bcos-rpc/bcos-rpc/amop/AMOPClient.cpp new file mode 100644 index 0000000..aefc8bb --- /dev/null +++ b/bcos-rpc/bcos-rpc/amop/AMOPClient.cpp @@ -0,0 +1,570 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief AMOP client + * @file AMOPClient.cpp + * @author: yujiechen + * @date 2021-10-28 + */ +#include + +#include "AMOPClient.h" +#include "bcos-tars-protocol/Common.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::boostssl::ws; +using namespace bcostars; +using namespace tars; +using namespace bcos::gateway; +using namespace bcos::protocol; + +void AMOPClient::initMsgHandler() +{ + m_wsService->registerMsgHandler(AMOPClientMessageType::AMOP_SUBTOPIC, + boost::bind( + &AMOPClient::onRecvSubTopics, this, boost::placeholders::_1, boost::placeholders::_2)); + m_wsService->registerMsgHandler( + AMOPClientMessageType::AMOP_REQUEST, boost::bind(&AMOPClient::onRecvAMOPRequest, this, + boost::placeholders::_1, boost::placeholders::_2)); + m_wsService->registerMsgHandler(AMOPClientMessageType::AMOP_BROADCAST, + boost::bind(&AMOPClient::onRecvAMOPBroadcast, this, boost::placeholders::_1, + boost::placeholders::_2)); + m_wsService->registerDisconnectHandler( + boost::bind(&AMOPClient::onClientDisconnect, this, boost::placeholders::_1)); +} + +bool AMOPClient::updateTopicInfos( + std::string const& _topicInfo, std::shared_ptr _session) +{ + TopicItems topicItems; + auto ret = parseSubTopicsJson(_topicInfo, topicItems); + if (!ret) + { + return false; + } + { + WriteGuard l(x_topicToSessions); + for (auto const& item : topicItems) + { + m_topicToSessions[item.topicName()][_session->endPoint()] = _session; + } + } + return true; +} +/** + * @brief: receive sub topic message from sdk + */ +void AMOPClient::onRecvSubTopics( + std::shared_ptr _msg, std::shared_ptr _session) +{ + auto topicInfo = std::string(_msg->payload()->begin(), _msg->payload()->end()); + auto seq = _msg->seq(); + + if (gatewayInactivated()) + { + AMOP_CLIENT_LOG(WARNING) << LOG_BADGE("onRecvSubTopics: the gateway in-activated") + << LOG_KV("topicInfo", topicInfo) + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); + } + + auto ret = updateTopicInfos(topicInfo, _session); + if (!ret) + { + AMOP_CLIENT_LOG(WARNING) << LOG_BADGE("onRecvSubTopics: invalid topic info") + << LOG_KV("topicInfo", topicInfo) + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); + return; + } + subscribeTopicToAllNodes(); + AMOP_CLIENT_LOG(INFO) << LOG_BADGE("onRecvSubTopics") << LOG_KV("topicInfo", topicInfo) + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); +} + +/** + * @brief: receive amop request message from sdk + */ +void AMOPClient::onRecvAMOPRequest( + std::shared_ptr _msg, std::shared_ptr _session) +{ + auto seq = _msg->seq(); + auto amopReq = m_requestFactory->buildRequest( + bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + AMOP_CLIENT_LOG(DEBUG) << LOG_DESC("onRecvAMOPRequest") << LOG_KV("seq", seq) + << LOG_KV("topic", amopReq->topic()); + + auto topic = amopReq->topic(); + // gateway inactivated + if (onGatewayInactivated(_msg, _session)) + { + // try to send to local node + if (trySendAMOPRequestToLocalNode(_session, topic, _msg)) + { + return; + } + AMOP_CLIENT_LOG(WARNING) << LOG_BADGE( + "onRecvAMOPRequest: the gateway in-activated and try to " + "request to local nodes failed") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); + return; + } + auto self = std::weak_ptr(shared_from_this()); + m_gateway->asyncSendMessageByTopic(amopReq->topic(), + bytesConstRef(_msg->payload()->data(), _msg->payload()->size()), + [self, seq, _msg, topic, _session]( + bcos::Error::Ptr&& _error, int16_t, bytesPointer _responseData) { + try + { + auto amopClient = self.lock(); + if (!amopClient) + { + return; + } + auto responseMsg = amopClient->m_wsMessageFactory->buildMessage(); + auto orgSeq = seq; + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + auto ret = amopClient->trySendAMOPRequestToLocalNode(_session, topic, _msg); + // to local node + if (ret) + { + return; + } + // tars timeout + auto errorCode = _error->errorCode(); + auto errorMsg = _error->errorMessage(); + if ((_error->errorCode() == -7) || (_error->errorCode() == -8)) + { + errorMsg = "Access to gateway timed out, please check gateway alive"; + } + std::dynamic_pointer_cast(responseMsg) + ->setStatus(errorCode); + // constructor the response + responseMsg->setPayload( + std::make_shared(errorMsg.begin(), errorMsg.end())); + // recover the seq + responseMsg->setSeq(orgSeq); + AMOP_CLIENT_LOG(ERROR) + << LOG_BADGE("onRecvAMOPRequest error") + << LOG_DESC("AMOP async send message callback") << LOG_KV("seq", seq) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + _session->asyncSendMessage(responseMsg); + return; + } + // Note: the decode function will recover m_seq of wsMessage, so it should be + // better not set orgSeq into the responseMsg before decode + auto size = responseMsg->decode(ref(*_responseData)); + AMOP_CLIENT_LOG(DEBUG) + << LOG_BADGE("onRecvAMOPRequest") + << LOG_DESC("AMOP async send message: receive message response for sdk") + << LOG_KV("size", size) << LOG_KV("seq", seq) + << LOG_KV("type", responseMsg->packetType()); + // recover the seq + responseMsg->setSeq(orgSeq); + _session->asyncSendMessage(responseMsg); + } + catch (std::exception const& e) + { + AMOP_CLIENT_LOG(WARNING) << LOG_DESC("onRecvAMOPRequest exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +bool AMOPClient::trySendAMOPRequestToLocalNode(std::shared_ptr _session, + std::string const& _topic, std::shared_ptr _msg) +{ + // the local node has no client subscribe to the topic + auto selectedSession = randomChooseSession(_topic); + if (!selectedSession) + { + return false; + } + auto self = std::weak_ptr(shared_from_this()); + sendMessageToClient( + _topic, selectedSession, _msg, [self, _session](Error::Ptr&&, bytesPointer _responseData) { + try + { + auto amopClient = self.lock(); + if (!amopClient) + { + return; + } + auto responseMsg = amopClient->m_wsMessageFactory->buildMessage(); + auto size = responseMsg->decode(ref(*_responseData)); + auto seq = responseMsg->seq(); + _session->asyncSendMessage(responseMsg); + AMOP_CLIENT_LOG(DEBUG) + << LOG_BADGE("trySendAMOPRequestToLocalNode") + << LOG_DESC("AMOP async send message: receive message response for sdk") + << LOG_KV("size", size) << LOG_KV("seq", seq) + << LOG_KV("type", responseMsg->packetType()); + } + catch (std::exception const& e) + { + AMOP_CLIENT_LOG(WARNING) << LOG_DESC("trySendAMOPRequestToLocalNode exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + return true; +} + +/** + * @brief: receive amop broadcast message from sdk + */ +void AMOPClient::onRecvAMOPBroadcast( + std::shared_ptr _msg, std::shared_ptr) +{ + auto seq = _msg->seq(); + auto amopReq = m_requestFactory->buildRequest( + bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + // broadcast message to the sdks connected to the local node + broadcastAMOPMessage(amopReq->topic(), _msg); + // broadcast messsage to sdks connected to other nodes + m_gateway->asyncSendBroadcastMessageByTopic( + amopReq->topic(), bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + AMOP_CLIENT_LOG(DEBUG) << LOG_BADGE("onRecvAMOPBroadcast") << LOG_KV("seq", seq) + << LOG_KV("topic", amopReq->topic()); +} + +void AMOPClient::sendMessageToClient(std::string const& _topic, + std::shared_ptr _selectSession, std::shared_ptr _msg, + std::function _callback) +{ + _selectSession->asyncSendMessage(_msg, Options(30000), + [_msg, _topic, _callback](bcos::Error::Ptr _error, + std::shared_ptr _responseMsg, + std::shared_ptr _session) { + auto seq = _msg->seq(); + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + AMOP_CLIENT_LOG(WARNING) + << LOG_BADGE("asyncNotifyAMOPMessage") + << LOG_DESC("asyncSendMessage callback error") + << LOG_KV("endpoint", (_session ? _session->endPoint() : std::string(""))) + << LOG_KV("topic", _topic) << LOG_KV("seq", seq) + << LOG_KV("errorCode", _error ? _error->errorCode() : -1) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + AMOP_CLIENT_LOG(DEBUG) + << LOG_BADGE("asyncNotifyAMOPMessage") + << LOG_DESC("asyncSendMessage callback response") << LOG_KV("seq", seq) + << LOG_KV("data size", _responseMsg ? _responseMsg->payload()->size() : 0); + auto buffer = std::make_shared(); + if (_responseMsg) + { + _responseMsg->encode(*buffer); + } + + if (_error) + { + _callback( + std::make_shared(_error->errorCode(), _error->errorMessage()), + std::move(buffer)); + } + else + { + _callback(nullptr, std::move(buffer)); + } + }); +} + +void AMOPClient::asyncNotifyAMOPMessage(std::string const& _topic, bytesConstRef _amopRequestData, + std::function _callback) +{ + auto clientSession = randomChooseSession(_topic); + + if (!clientSession) + { + auto responseMessage = m_wsMessageFactory->buildMessage(); + std::dynamic_pointer_cast(responseMessage) + ->setStatus(bcos::protocol::CommonError::NotFoundClientByTopicDispatchMsg); + responseMessage->setPacketType(AMOPClientMessageType::AMOP_RESPONSE); + auto buffer = std::make_shared(); + // Note: encode the message into buffer, response to the request-sdk + responseMessage->encode(*buffer); + _callback(std::make_shared(CommonError::NotFoundClientByTopicDispatchMsg, + "NotFoundClientByTopicDispatchMsg"), + buffer); + AMOP_CLIENT_LOG(DEBUG) << LOG_BADGE("asyncNotifyAMOPMessage: no client found") + << LOG_KV("topic", _topic); + return; + } + AMOP_CLIENT_LOG(DEBUG) << LOG_BADGE("asyncNotifyAMOPMessage") << LOG_KV("topic", _topic) + << LOG_KV("choosedSession", clientSession->endPoint()); + auto requestMsg = m_wsMessageFactory->buildMessage(); + // Note: m_wsMessageFactory buildMessage won't generate seq automatically, we should setSeq + // manually when need trigger callback after receive response message from the client + requestMsg->setSeq(m_wsMessageFactory->newSeq()); + requestMsg->setPacketType(AMOPClientMessageType::AMOP_REQUEST); + auto requestPayLoad = std::make_shared(_amopRequestData.begin(), _amopRequestData.end()); + requestMsg->setPayload(requestPayLoad); + sendMessageToClient(_topic, clientSession, requestMsg, _callback); +} + +void AMOPClient::asyncNotifyAMOPBroadcastMessage(std::string const& _topic, bytesConstRef _data, + std::function _callback) +{ + AMOP_CLIENT_LOG(DEBUG) << LOG_DESC("asyncNotifyAMOPBroadcastMessage") + << LOG_KV("topic", _topic); + auto requestMsg = m_wsMessageFactory->buildMessage(); + requestMsg->setPacketType(AMOPClientMessageType::AMOP_BROADCAST); + requestMsg->setPayload(std::make_shared(_data.begin(), _data.end())); + broadcastAMOPMessage(_topic, requestMsg); + if (_callback) + { + _callback(nullptr, nullptr); + } +} + +void AMOPClient::broadcastAMOPMessage( + std::string const& _topic, std::shared_ptr _msg) +{ + AMOP_CLIENT_LOG(DEBUG) << LOG_DESC("broadcastAMOPMessage") << LOG_KV("topic", _topic); + auto sessions = querySessionsByTopic(_topic); + for (auto const& session : sessions) + { + session.second->asyncSendMessage(_msg, Options(30000)); + } +} +std::shared_ptr AMOPClient::randomChooseSession(std::string const& _topic) +{ + ReadGuard l(x_topicToSessions); + AMOP_CLIENT_LOG(DEBUG) << LOG_DESC("randomChooseSession:") + << LOG_KV("sessionSize", m_topicToSessions.size()) + << LOG_KV("topic", _topic); + if (!m_topicToSessions.count(_topic)) + { + return nullptr; + } + std::shared_ptr selectedSession = nullptr; + auto const& sessions = m_topicToSessions[_topic]; + // no client subscribe the topic + if (sessions.size() == 0) + { + return selectedSession; + } + size_t retryTime = 0; + do + { + srand(utcTime()); + auto selectedClient = rand() % sessions.size(); + auto it = sessions.begin(); + if (selectedClient > 0) + { + std::advance(it, selectedClient); + } + selectedSession = it->second; + retryTime++; + } while ( + (!selectedSession || !(selectedSession->isConnected())) && (retryTime <= sessions.size())); + return selectedSession; +} + +void AMOPClient::onClientDisconnect(std::shared_ptr _session) +{ + std::vector topicsToRemove; + { + WriteGuard l(x_topicToSessions); + for (auto it = m_topicToSessions.begin(); it != m_topicToSessions.end();) + { + auto& sessions = it->second; + if (sessions.count(_session->endPoint())) + { + sessions.erase(_session->endPoint()); + } + if (sessions.size() == 0) + { + topicsToRemove.emplace_back(it->first); + it = m_topicToSessions.erase(it); + continue; + } + it++; + } + } + if (topicsToRemove.size() == 0) + { + return; + } + removeTopicFromAllNodes(topicsToRemove); +} + +std::vector AMOPClient::getActiveGatewayEndPoints() +{ + auto gatewayClient = std::dynamic_pointer_cast(m_gateway); + + auto endPoints = tarsProxyAvailableEndPoints(gatewayClient->prx()); + return std::vector(endPoints.begin(), endPoints.end()); +} + +void AMOPClient::subscribeTopicToAllNodes() +{ + auto activeEndPoints = getActiveGatewayEndPoints(); + auto topicInfo = generateTopicInfo(); + // set the notify topic flag to true when subscribeTopicToAllNodes + m_notifyTopicSuccess.store(true); + AMOP_CLIENT_LOG(INFO) << LOG_DESC("subscribeTopicToAllNodes") << LOG_KV("topicInfo", topicInfo) + << LOG_KV("activeEndPoints", activeEndPoints.size()); + for (auto const& endPoint : activeEndPoints) + { + auto servicePrx = bcostars::createServantProxy( + m_gatewayServiceName, endPoint.getEndpoint()); + + auto serviceClient = + std::make_shared(servicePrx, m_gatewayServiceName); + serviceClient->asyncSubscribeTopic( + m_clientID, topicInfo, [this, endPoint](Error::Ptr&& _error) { + if (_error) + { + AMOP_CLIENT_LOG(WARNING) << LOG_DESC("asyncSubScribeTopic error") + << LOG_KV("gateway", endPoint.getEndpoint().toString()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + // set the notify topic flag to false when subscribeTopic failed + m_notifyTopicSuccess.store(false); + return; + } + AMOP_CLIENT_LOG(INFO) << LOG_DESC("asyncSubScribeTopic success") + << LOG_KV("gateway", endPoint.getEndpoint().toString()); + }); + } +} +void AMOPClient::removeTopicFromAllNodes(std::vector const& topicsToRemove) +{ + auto activeEndPoints = getActiveGatewayEndPoints(); + for (auto const& endPoint : activeEndPoints) + { + auto servicePrx = bcostars::createServantProxy( + m_gatewayServiceName, endPoint.getEndpoint()); + + auto serviceClient = + std::make_shared(servicePrx, m_gatewayServiceName); + serviceClient->asyncRemoveTopic( + m_clientID, topicsToRemove, [topicsToRemove, endPoint](Error::Ptr&& _error) { + AMOP_CLIENT_LOG(INFO) << LOG_DESC("asyncRemoveTopic") + << LOG_KV("gateway", endPoint.getEndpoint().toString()) + << LOG_KV("removedSize", topicsToRemove.size()) + << LOG_KV("code", _error ? _error->errorCode() : 0) + << LOG_KV("msg", _error ? _error->errorMessage() : "success"); + }); + } +} + +void AMOPClient::pingGatewayAndNotifyTopics() +{ + m_gatewayStatusDetector->restart(); + auto activeEndPoints = getActiveGatewayEndPoints(); + // the gateway become inactived from active status + if (activeEndPoints.size() == 0) + { + if (m_gatewayActivated.load() == true) + { + AMOP_CLIENT_LOG(INFO) << LOG_DESC( + "pingGatewayAndNotifyTopics: gateway inactived, reset the status"); + m_gatewayActivated.store(false); + } + return; + } + // the gateway in active status, return directly + if (m_gatewayActivated.load() == true && m_notifyTopicSuccess) + { + return; + } + // if gateway become activated or notify topic failed before, should subscribeTopicToAllNodes + subscribeTopicToAllNodes(); + + AMOP_CLIENT_LOG(INFO) << LOG_DESC( + "pingGatewayAndNotifyTopics: the gateway become activated from " + "in-active status, re-subscribe the topics") + << LOG_KV("gatewayNodesSize", activeEndPoints.size()) + << LOG_KV("topicsSize", m_topicToSessions.size()); + m_gatewayActivated.store(true); +} + +bool AMOPClient::onGatewayInactivated( + std::shared_ptr _msg, std::shared_ptr _session) +{ + auto activeEndPoints = getActiveGatewayEndPoints(); + // the gateway is in-activated + if (activeEndPoints.size() > 0) + { + return false; + } + auto seq = _msg->seq(); + auto responseMsg = m_wsMessageFactory->buildMessage(); + // set error status + std::dynamic_pointer_cast(responseMsg)->setStatus(-1); + std::string errorMsg = "error for the gateway is in-activated"; + // set errorMesg + responseMsg->setPayload(std::make_shared(errorMsg.begin(), errorMsg.end())); + // set seq + responseMsg->setSeq(seq); + _session->asyncSendMessage(responseMsg); + + AMOP_CLIENT_LOG(INFO) << LOG_DESC( + "Gateway inactivated, notify error message to the client directly") + << LOG_KV("endPoint", _session->endPoint()) << LOG_KV("seq", seq); + + return true; +} + +bool AMOPClient::gatewayInactivated() +{ + auto activeEndPoints = getActiveGatewayEndPoints(); + return (activeEndPoints.size() == 0); +} + +std::string AMOPClient::generateTopicInfo() +{ + Json::Value topicInfo; + Json::Value topicItems(Json::arrayValue); + std::set topicList; + ReadGuard l(x_topicToSessions); + for (auto const& it : m_topicToSessions) + { + if (topicList.count(it.first)) + { + continue; + } + topicList.insert(it.first); + } + for (auto const& topicName : topicList) + { + topicItems.append(topicName); + } + topicInfo["topics"] = topicItems; + return topicInfo.toStyledString(); +} + +void AMOPClient::asyncNotifySubscribeTopic( + std::function _callback) +{ + auto topicInfo = generateTopicInfo(); + AMOP_CLIENT_LOG(INFO) << LOG_DESC( + "Receive asyncNotifySubscribeTopic request from the gateway, " + "re-subscribe topics now") + << LOG_KV("topic", topicInfo); + if (_callback) + { + _callback(nullptr, topicInfo); + } +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/amop/AMOPClient.h b/bcos-rpc/bcos-rpc/amop/AMOPClient.h new file mode 100644 index 0000000..8493631 --- /dev/null +++ b/bcos-rpc/bcos-rpc/amop/AMOPClient.h @@ -0,0 +1,193 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief AMOP client + * @file AMOPClient.h + * @author: yujiechen + * @date 2021-10-28 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +#define AMOP_CLIENT_LOG(level) BCOS_LOG(level) << LOG_BADGE("AMOPClient") +namespace bcos +{ +namespace rpc +{ +class AMOPClient : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + AMOPClient(std::shared_ptr _wsService, + std::shared_ptr _wsMessageFactory, + std::shared_ptr _requestFactory, + bcos::gateway::GatewayInterface::Ptr _gateway, std::string const& _gatewayServiceName) + : m_wsService(_wsService), + m_wsMessageFactory(_wsMessageFactory), + m_requestFactory(_requestFactory), + m_gateway(_gateway), + m_gatewayServiceName(_gatewayServiceName) + { + initMsgHandler(); + // create gatewayStatusDetector to detect status of gateway periodically + m_gatewayStatusDetector = std::make_shared(5000, "gatewayDetector"); + m_gatewayStatusDetector->registerTimeoutHandler([this]() { pingGatewayAndNotifyTopics(); }); + } + + virtual ~AMOPClient() {} + /** + * @brief receive amop request message from the gateway + * + */ + virtual void asyncNotifyAMOPMessage(int16_t _type, std::string const& _topic, + bytesConstRef _data, std::function _callback) + { + try + { + switch (_type) + { + case AMOPNotifyMessageType::Unicast: + asyncNotifyAMOPMessage(_topic, _data, _callback); + break; + case AMOPNotifyMessageType::Broadcast: + asyncNotifyAMOPBroadcastMessage(_topic, _data, _callback); + break; + default: + BCOS_LOG(WARNING) << LOG_DESC("asyncNotifyAMOPMessage: unknown message type") + << LOG_KV("type", _type); + } + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("asyncNotifyAMOPMessage exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + } + + void setClientID(std::string const& _clientID) { m_clientID = _clientID; } + + // start m_gatewayStatusDetector + virtual void start() + { + if (m_gatewayStatusDetector) + { + auto activeEndPoints = getActiveGatewayEndPoints(); + if (activeEndPoints.size() == 0) + { + m_gatewayActivated.store(false); + } + m_gatewayStatusDetector->start(); + } + } + + virtual void stop() + { + if (m_gatewayStatusDetector) + { + m_gatewayStatusDetector->stop(); + } + } + + // the gateway notify the RPC client to subscribe topic if receive publish + virtual void asyncNotifySubscribeTopic( + std::function _callback); + +protected: + /// for AMOP requests from SDK + virtual void onRecvSubTopics(std::shared_ptr _msg, + std::shared_ptr _session); + /** + * @brief: receive amop request message from sdk + */ + virtual void onRecvAMOPRequest(std::shared_ptr _msg, + std::shared_ptr _session); + /** + * @brief: receive amop broadcast message from sdk + */ + virtual void onRecvAMOPBroadcast(std::shared_ptr _msg, + std::shared_ptr _session); + + std::shared_ptr randomChooseSession(std::string const& _topic); + + virtual void asyncNotifyAMOPMessage(std::string const& _topic, bytesConstRef _data, + std::function _callback); + virtual void asyncNotifyAMOPBroadcastMessage(std::string const& _topic, bytesConstRef _data, + std::function _callback); + + std::map> querySessionsByTopic( + std::string const& _topic) const + { + ReadGuard l(x_topicToSessions); + if (m_topicToSessions.count(_topic)) + { + return m_topicToSessions.at(_topic); + } + return std::map>(); + } + + void onClientDisconnect(std::shared_ptr _session); + + bool updateTopicInfos( + std::string const& _topicInfo, std::shared_ptr _session); + std::vector getActiveGatewayEndPoints(); + virtual bool gatewayInactivated(); + + virtual void subscribeTopicToAllNodes(); + virtual void removeTopicFromAllNodes(std::vector const& _topicName); + + virtual void initMsgHandler(); + + void sendMessageToClient(std::string const& _topic, + std::shared_ptr _selectSession, + std::shared_ptr _msg, + std::function _callback); + + bool trySendAMOPRequestToLocalNode(std::shared_ptr _session, + std::string const& _topic, std::shared_ptr _msg); + + void broadcastAMOPMessage( + std::string const& _topic, std::shared_ptr _msg); + + virtual void pingGatewayAndNotifyTopics(); + + virtual bool onGatewayInactivated(std::shared_ptr _msg, + std::shared_ptr _session); + std::string generateTopicInfo(); + +protected: + std::shared_ptr m_wsService; + std::shared_ptr m_wsMessageFactory; + std::shared_ptr m_requestFactory; + + bcos::gateway::GatewayInterface::Ptr m_gateway; + std::string m_clientID = "localAMOP"; + std::string m_gatewayServiceName; + + // for AMOP: [topic->[endpoint->session]] + std::map>> + m_topicToSessions; + mutable SharedMutex x_topicToSessions; + + std::shared_ptr m_gatewayStatusDetector; + std::atomic_bool m_gatewayActivated = {true}; + std::atomic_bool m_notifyTopicSuccess = {true}; +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/amop/AirAMOPClient.h b/bcos-rpc/bcos-rpc/amop/AirAMOPClient.h new file mode 100644 index 0000000..278ebd3 --- /dev/null +++ b/bcos-rpc/bcos-rpc/amop/AirAMOPClient.h @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief AMOP client + * @file AirAMOPClient.h + * @author: yujiechen + * @date 2021-10-28 + */ +#pragma once +#include "AMOPClient.h" + +namespace bcos +{ +namespace rpc +{ +class AirAMOPClient : public AMOPClient +{ +public: + using Ptr = std::shared_ptr; + AirAMOPClient(std::shared_ptr _wsService, + std::shared_ptr _wsMessageFactory, + std::shared_ptr _requestFactory, + bcos::gateway::GatewayInterface::Ptr _gateway) + : AMOPClient(_wsService, _wsMessageFactory, _requestFactory, _gateway, "localGateway") + {} + + // Note: must with empty implementation to in case of start the m_gatewayStatusDetector + void start() override { m_gatewayActivated.store(true); } + + bool onGatewayInactivated( + std::shared_ptr, std::shared_ptr) override + { + return false; + } + + bool gatewayInactivated() override { return false; } + +protected: + void subscribeTopicToAllNodes() override + { + auto topicInfo = generateTopicInfo(); + AMOP_CLIENT_LOG(INFO) << LOG_DESC("subscribeTopicToAllNodes") + << LOG_KV("topicInfo", topicInfo); + m_gateway->asyncSubscribeTopic(m_clientID, topicInfo, [](Error::Ptr&& _error) { + if (_error) + { + BCOS_LOG(WARNING) << LOG_DESC("asyncSubScribeTopic error") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + + void removeTopicFromAllNodes(std::vector const& _topicsToRemove) override + { + m_gateway->asyncRemoveTopic( + m_clientID, _topicsToRemove, [_topicsToRemove](Error::Ptr&& _error) { + BCOS_LOG(INFO) << LOG_DESC("asyncRemoveTopic") + << LOG_KV("removedSize", _topicsToRemove.size()) + << LOG_KV("code", _error ? _error->errorCode() : 0) + << LOG_KV("msg", _error ? _error->errorMessage() : ""); + }); + } +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/event/Common.h b/bcos-rpc/bcos-rpc/event/Common.h new file mode 100644 index 0000000..50c38b6 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/Common.h @@ -0,0 +1,39 @@ +/** + * @file Common.h + * @author: octopuswang + * @date 2019-08-13 + */ + +#pragma once + +#include + +// The largest number of topic in one event log +#define EVENT_LOG_TOPICS_MAX_INDEX (4) + +#define EVENT_REQUEST(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][REQUEST]" +#define EVENT_RESPONSE(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][RESPONSE]" +#define EVENT_TASK(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][TASK]" +#define EVENT_SUB(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][SUB]" +#define EVENT_MATCH(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][MATCH]" + +namespace bcos +{ +namespace event +{ +enum EP_STATUS_CODE +{ + SUCCESS = 0, + PUSH_COMPLETED = 1, + INVALID_PARAMS = -41000, + INVALID_REQUEST = -41001, + GROUP_NOT_EXIST = -41002, + INVALID_REQUEST_RANGE = -41003, + INVALID_RESPONSE = -41004, + REQUST_TIMEOUT = -41005, + SDK_PERMISSION_DENIED = -41006, + NONEXISTENT_EVENT = -41007, +}; + +} // namespace event +} // namespace bcos diff --git a/bcos-rpc/bcos-rpc/event/EventSub.cpp b/bcos-rpc/bcos-rpc/event/EventSub.cpp new file mode 100644 index 0000000..9a9adad --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSub.cpp @@ -0,0 +1,551 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EventSub.cpp + * @author: octopus + * @date 2021-09-07 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::event; + +EventSub::EventSub(std::shared_ptr _wsService) + : bcos::Worker("t_event_sub"), m_wsService(_wsService) +{ + m_wsService->registerMsgHandler(bcos::protocol::MessageType::EVENT_SUBSCRIBE, + boost::bind(&EventSub::onRecvSubscribeEvent, this, boost::placeholders::_1, + boost::placeholders::_2)); + m_wsService->registerMsgHandler(bcos::protocol::MessageType::EVENT_UNSUBSCRIBE, + boost::bind(&EventSub::onRecvUnsubscribeEvent, this, boost::placeholders::_1, + boost::placeholders::_2)); +} + +void EventSub::start() +{ + if (m_running.load()) + { + EVENT_SUB(INFO) << LOG_BADGE("start") << LOG_DESC("event sub is running"); + return; + } + m_running.store(true); + startWorking(); + + EVENT_SUB(INFO) << LOG_BADGE("start") << LOG_DESC("start event sub successfully"); +} + +void EventSub::stop() +{ + if (!m_running.load()) + { + EVENT_SUB(INFO) << LOG_BADGE("stop") << LOG_DESC("event sub is not running"); + return; + } + m_running.store(false); + + finishWorker(); + stopWorking(); + // will not restart worker, so terminate it + terminate(); + + EVENT_SUB(INFO) << LOG_BADGE("stop") << LOG_DESC("stop event sub successfully"); +} + +void EventSub::onRecvSubscribeEvent(std::shared_ptr _msg, + std::shared_ptr _session) +{ + std::string seq = _msg->seq(); + std::string request = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + EVENT_SUB(INFO) << LOG_BADGE("onRecvSubscribeEvent") << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("seq", seq) << LOG_KV("request", request); + + auto eventSubRequest = std::make_shared(); + if (!eventSubRequest->fromJson(request)) + { + sendResponse(_session, _msg, eventSubRequest->id(), EP_STATUS_CODE::INVALID_PARAMS); + return; + } + + auto nodeService = m_groupManager->getNodeService(eventSubRequest->group(), ""); + if (!nodeService) + { + sendResponse(_session, _msg, eventSubRequest->id(), EP_STATUS_CODE::GROUP_NOT_EXIST); + EVENT_SUB(ERROR) << LOG_BADGE("onRecvSubscribeEvent") << LOG_DESC("group not exist") + << LOG_KV("group", eventSubRequest->group()); + return; + } + + auto state = std::make_shared(); + + // TODO: check request parameters + auto task = std::make_shared(); + task->setGroup(eventSubRequest->group()); + task->setId(eventSubRequest->id()); + task->setParams(eventSubRequest->params()); + task->setState(state); + + auto eventSubWeakPtr = std::weak_ptr(shared_from_this()); + task->setCallback([eventSubWeakPtr, _session](const std::string& _id, bool _complete, + const Json::Value& _result) -> bool { + auto eventSub = eventSubWeakPtr.lock(); + if (eventSub) + { + return eventSub->sendEvents(_session, _complete, _id, _result); + } + return false; + }); + + subscribeEventSub(task); + sendResponse(_session, _msg, eventSubRequest->id(), EP_STATUS_CODE::SUCCESS); + return; +} + +void EventSub::onRecvUnsubscribeEvent(std::shared_ptr _msg, + std::shared_ptr _session) +{ + std::string seq = _msg->seq(); + std::string request = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + EVENT_SUB(INFO) << LOG_BADGE("onRecvUnsubscribeEvent") << LOG_KV("seq", seq) + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("request", request); + + auto esRes = std::make_shared(); + if (!esRes->fromJson(request)) + { + sendResponse(_session, _msg, esRes->id(), EP_STATUS_CODE::INVALID_PARAMS); + return; + } + + unsubscribeEventSub(esRes->id()); + sendResponse(_session, _msg, esRes->id(), EP_STATUS_CODE::SUCCESS); + return; +} + + +/** + * @brief: send response + * @param _session: the peer session + * @param _msg: the msg + * @param _status: the response status + * @return bool: if _session is inactive, false will be return + */ +bool EventSub::sendResponse(std::shared_ptr _session, + std::shared_ptr _msg, const std::string& _id, int32_t _status) +{ + if (!_session->isConnected()) + { + EVENT_SUB(WARNING) << LOG_BADGE("sendResponse") << LOG_DESC("session has been inactive") + << LOG_KV("id", _id) << LOG_KV("status", _status) + << LOG_KV("endpoint", _session->endPoint()); + return false; + } + + auto esResp = std::make_shared(); + esResp->setId(_id); + esResp->setStatus(_status); + auto result = esResp->generateJson(); + + auto data = std::make_shared(result.begin(), result.end()); + _msg->setPayload(data); + + _session->asyncSendMessage(_msg); + return true; +} + +/** + * @brief: send event log list to client + * @param _session: the peer + * @param _complete: if task _completed + * @param _id: the EventSub id + * @param _result: + * @return bool: if _session is inactive, false will be return + */ +bool EventSub::sendEvents(std::shared_ptr _session, bool _complete, + const std::string& _id, const Json::Value& _result) +{ + // session disconnected + if (!_session->isConnected()) + { + EVENT_SUB(WARNING) << LOG_BADGE("sendEvents") << LOG_DESC("session has been inactive") + << LOG_KV("id", _id) << LOG_KV("endpoint", _session->endPoint()); + return false; + } + + // task completed + if (_complete) + { + auto msg = m_messageFactory->buildMessage(); + msg->setPacketType(bcos::protocol::MessageType::EVENT_LOG_PUSH); + sendResponse(_session, msg, _id, EP_STATUS_CODE::PUSH_COMPLETED); + return true; + } + + // null + if (0 == _result.size()) + { + return true; + } + + auto esResp = std::make_shared(); + esResp->setId(_id); + esResp->setStatus(EP_STATUS_CODE::SUCCESS); + esResp->generateJson(); + + auto jResp = esResp->jResp(); + jResp["result"] = _result; + + Json::FastWriter writer; + std::string strEventInfo = writer.write(jResp); + auto data = std::make_shared(strEventInfo.begin(), strEventInfo.end()); + + auto msg = m_messageFactory->buildMessage(); + msg->setPacketType(bcos::protocol::MessageType::EVENT_LOG_PUSH); + msg->setPayload(data); + _session->asyncSendMessage(msg); + + EVENT_SUB(TRACE) << LOG_BADGE("sendEvents") << LOG_DESC("send events to client") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("id", _id) + << LOG_KV("events", strEventInfo); + + return true; +} + +void EventSub::subscribeEventSub(EventSubTask::Ptr _task) +{ + EVENT_SUB(INFO) << LOG_BADGE("subscribeEventSub") << LOG_KV("id", _task->id()) + << LOG_KV("startBlk", _task->state()->currentBlockNumber()); + std::unique_lock lock(x_addTasks); + m_addTasks.push_back(_task); + m_addTaskCount++; +} + +void EventSub::unsubscribeEventSub(const std::string& _id) +{ + EVENT_SUB(INFO) << LOG_BADGE("unsubscribeEventSub") << LOG_KV("id", _id); + std::unique_lock lock(x_cancelTasks); + m_cancelTasks.push_back(_id); + m_cancelTaskCount++; +} + +void EventSub::executeWorker() +{ + executeCancelTasks(); + executeAddTasks(); + executeEventSubTasks(); + reportEventSubTasks(); +} + +void EventSub::reportEventSubTasks() +{ + static auto start = std::chrono::high_resolution_clock::now(); + auto now = std::chrono::high_resolution_clock::now(); + auto elapsedMs = std::chrono::duration_cast(now - start).count(); + // + if (elapsedMs > 10 * 1000) + { + auto taskSize = m_tasks.size(); + if (taskSize > 0) + { + EVENT_SUB(INFO) << LOG_BADGE("eventSubTasks") + << LOG_DESC("all event sub tasks subscribed by client") + << LOG_KV("count", m_tasks.size()); + } + + start = std::chrono::high_resolution_clock::now(); + } +} + +void EventSub::executeAddTasks() +{ + if (m_addTaskCount.load() == 0) + { + return; + } + + std::unique_lock lock(x_addTasks); + for (auto& task : m_addTasks) + { + auto id = task->id(); + if (m_tasks.find(id) == m_tasks.end()) + { + m_tasks[id] = task; + EVENT_SUB(INFO) << LOG_BADGE("executeAddTasks") << LOG_KV("id", task->id()); + } + else + { + EVENT_SUB(ERROR) << LOG_BADGE("executeAddTasks") + << LOG_DESC("event sub task already exist") + << LOG_KV("id", task->id()); + } + } + m_addTaskCount.store(0); + m_addTasks.clear(); + + auto taskCount = m_tasks.size(); + EVENT_SUB(INFO) << LOG_BADGE("executeAddTasks") << LOG_DESC("event subscribe tasks ") + << LOG_KV("count", taskCount); +} + +void EventSub::executeCancelTasks() +{ + if (m_cancelTaskCount.load() == 0) + { + return; + } + + std::unique_lock lock(x_cancelTasks); + for (const auto& id : m_cancelTasks) + { + auto r = m_tasks.erase(id); + if (r) + { + EVENT_SUB(INFO) << LOG_BADGE("executeCancelTasks") << LOG_KV("id", id); + } + else + { + EVENT_SUB(WARNING) << LOG_BADGE("executeCancelTasks") + << LOG_DESC("event sub task not exist") << LOG_KV("id", id); + } + } + m_cancelTaskCount.store(0); + m_cancelTasks.clear(); + + auto taskCount = m_tasks.size(); + EVENT_SUB(INFO) << LOG_BADGE("executeCancelTasks") << LOG_DESC("event subscribe tasks ") + << LOG_KV("count", taskCount); +} + +bool EventSub::checkConnAvailable(EventSubTask::Ptr _task) +{ + Json::Value jResp(Json::arrayValue); + return _task->callback()(_task->id(), false, jResp); +} + +void EventSub::onTaskComplete(EventSubTask::Ptr _task) +{ + Json::Value jResp(Json::arrayValue); + _task->callback()(_task->id(), true, jResp); + + EVENT_SUB(INFO) << LOG_BADGE("onTaskComplete") << LOG_DESC("event sub completed") + << LOG_KV("id", _task->id()) + << LOG_KV("fromBlock", _task->params()->fromBlock()) + << LOG_KV("toBlock", _task->params()->toBlock()) + << LOG_KV("currentBlock", _task->state()->currentBlockNumber()); +} + +int64_t EventSub::executeEventSubTask(EventSubTask::Ptr _task, int64_t _blockNumber) +{ + bcos::protocol::BlockNumber currentBlockNumber = _task->state()->currentBlockNumber(); + if (currentBlockNumber < 0) + { + currentBlockNumber = + _task->params()->fromBlock() > 0 ? _task->params()->fromBlock() : _blockNumber; + } + + if (_blockNumber < currentBlockNumber) + { + _task->freeWork(); + // waiting for block to be sealed + return 0; + } + + /* + EVENT_SUB(TRACE) << LOG_BADGE("executeEventSubTask") << LOG_DESC("running") + << LOG_KV("id", _task->id()) + << LOG_KV("fromBlock", _task->params()->fromBlock()) + << LOG_KV("toBlock", _task->params()->toBlock()) + << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("currentBlockNumber", _task->state()->currentBlockNumber()); + */ + + int64_t toBlockNumber = _task->params()->toBlock(); + if (toBlockNumber > 0 && toBlockNumber < _blockNumber) + { + _blockNumber = toBlockNumber; + } + + int64_t blockCanProcess = _blockNumber - currentBlockNumber + 1; + int64_t maxBlockProcessPerLoop = m_maxBlockProcessPerLoop; + blockCanProcess = + (blockCanProcess > maxBlockProcessPerLoop ? maxBlockProcessPerLoop : blockCanProcess); + + class RecursiveProcess : public std::enable_shared_from_this + { + public: + void process(int64_t _blockNumber) + { + if (_blockNumber > m_endBlockNumber) + { // all block has been proccessed + m_task->freeWork(); + return; + } + + EVENT_SUB(TRACE) << LOG_BADGE("executeEventSubTask:process") + << LOG_KV("id", m_task->id()) + << LOG_KV("fromBlock", m_task->params()->fromBlock()) + << LOG_KV("toBlock", m_task->params()->toBlock()) + << LOG_KV("blockNumber", _blockNumber); + + auto eventSub = m_eventSub; + auto task = m_task; + auto p = shared_from_this(); + eventSub->processNextBlock( + _blockNumber, task, [task, _blockNumber, p](Error::Ptr _error) { + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + // error occur, wait for the next loop ??? + task->freeWork(); + return; + } + // next block + task->state()->setCurrentBlockNumber(_blockNumber + 1); + p->process(_blockNumber + 1); + }); + } + + public: + bcos::protocol::BlockNumber m_endBlockNumber; + std::shared_ptr m_eventSub; + EventSubTask::Ptr m_task; + }; + + auto p = std::make_shared(); + p->m_endBlockNumber = currentBlockNumber + blockCanProcess - 1; + p->m_eventSub = shared_from_this(); + p->m_task = _task; + p->process(currentBlockNumber); + + return blockCanProcess; +} + +int64_t EventSub::executeEventSubTask(EventSubTask::Ptr _task) +{ + // tests whether the connection of the session is available first + auto connAvailable = checkConnAvailable(_task); + if (!connAvailable) + { + unsubscribeEventSub(_task->id()); + return -1; + } + + if (_task->isCompleted()) + { + unsubscribeEventSub(_task->id()); + onTaskComplete(_task); + return 0; + } + + // task is working, waiting for done + if (!_task->tryWork()) + { + EVENT_SUB(DEBUG) << LOG_BADGE("executeEventSubTask") + << LOG_DESC("tryWork false, the previous is still going on") + << LOG_KV("id", _task->id()) << LOG_KV("group", _task->group()); + return 0; + } + + std::string group = _task->group(); + auto blockNumber = m_groupManager->getBlockNumberByGroup(group); + if (blockNumber < 0) + { // group not exist ??? + EVENT_SUB(ERROR) + << LOG_BADGE("executeEventSubTask") + << LOG_DESC("Cannot getBlockNumber from groupManager, maybe the group has been removed") + << LOG_KV("group", group); + unsubscribeEventSub(_task->id()); + return -1; + } + + executeEventSubTask(_task, blockNumber); + + return 0; +} + +void EventSub::processNextBlock( + int64_t _blockNumber, EventSubTask::Ptr _task, std::function _callback) +{ + auto self = std::weak_ptr(shared_from_this()); + auto matcher = m_matcher; + + std::string group = _task->group(); + auto nodeService = m_groupManager->getNodeService(group, ""); + if (!nodeService) + { + // group not exist??? + EVENT_SUB(ERROR) + << LOG_BADGE("processNextBlock") + << LOG_DESC("cannot get node service of the group maybe the group has been removed") + << LOG_KV("id", _task->id()) << LOG_KV("group", _task->group()); + unsubscribeEventSub(_task->id()); + return; + } + + auto ledger = nodeService->ledger(); + ledger->asyncGetBlockDataByNumber(_blockNumber, + bcos::ledger::RECEIPTS | bcos::ledger::TRANSACTIONS, + [matcher, _task, _blockNumber, _callback, self]( + Error::Ptr _error, protocol::Block::Ptr _block) { + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + // Note: wait for next time + EVENT_SUB(ERROR) << LOG_BADGE("processNextBlock") + << LOG_DESC("asyncGetBlockDataByNumber") + << LOG_KV("id", _task->id()) << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + _callback(_error); + return; + } + + Json::Value jResp(Json::arrayValue); + auto count = matcher->matches(_task->params(), _block, jResp); + if (count) + { + EVENT_SUB(TRACE) << LOG_BADGE("processNextBlock") + << LOG_DESC("asyncGetBlockDataByNumber") + << LOG_KV("blockNumber", _blockNumber) << LOG_KV("id", _task->id()) + << LOG_KV("count", count); + + _task->callback()(_task->id(), false, jResp); + } + + _callback(nullptr); + }); +} + +void EventSub::executeEventSubTasks() +{ + for (auto& task : m_tasks) + { + executeEventSubTask(task.second); + } + + // limiting speed + std::this_thread::sleep_for(std::chrono::milliseconds(1)); +} diff --git a/bcos-rpc/bcos-rpc/event/EventSub.h b/bcos-rpc/bcos-rpc/event/EventSub.h new file mode 100644 index 0000000..cbe98f0 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSub.h @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EventSub.h + * @author: octopus + * @date 2021-09-07 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace ws +{ +class WsSession; +} // namespace ws +namespace boostssl +{ +class MessageFace; +} + +namespace event +{ +class EventSubMatcher; +class EventSub : bcos::Worker, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + EventSub(std::shared_ptr _wsService); + virtual ~EventSub() { stop(); } + +public: + virtual void start(); + virtual void stop(); + + void executeWorker() override; + +public: + virtual void onRecvSubscribeEvent(std::shared_ptr _msg, + std::shared_ptr _session); + virtual void onRecvUnsubscribeEvent(std::shared_ptr _msg, + std::shared_ptr _session); + +public: + /** + * @brief: send response + * @param _session: the peer + * @param _msg: the msg + * @param _id: the EventSub id + * @param _status: the response status + * @return bool: if _session is inactive, false will be return + */ + bool sendResponse(std::shared_ptr _session, + std::shared_ptr _msg, const std::string& _id, int32_t _status); + + /** + * @brief: send event log list to client + * @param _session: the peer + * @param _complete: if task _completed + * @param _id: the event sub id + * @param _result: + * @return bool: if _session is inactive, false will be return + */ + bool sendEvents(std::shared_ptr _session, bool _complete, + const std::string& _id, const Json::Value& _result); + +public: + void executeAddTasks(); + void executeCancelTasks(); + void executeEventSubTasks(); + void reportEventSubTasks(); + +public: + int64_t executeEventSubTask(EventSubTask::Ptr _task); + void subscribeEventSub(EventSubTask::Ptr _task); + void unsubscribeEventSub(const std::string& _id); + +public: + int64_t executeEventSubTask(EventSubTask::Ptr _task, int64_t _currentBlockNumber); + void onTaskComplete(bcos::event::EventSubTask::Ptr _task); + bool checkConnAvailable(bcos::event::EventSubTask::Ptr _task); + void processNextBlock(int64_t _blockNumber, bcos::event::EventSubTask::Ptr _task, + std::function _callback); + +public: + std::shared_ptr matcher() const { return m_matcher; } + void setMatcher(std::shared_ptr _matcher) { m_matcher = _matcher; } + + int64_t maxBlockProcessPerLoop() const { return m_maxBlockProcessPerLoop; } + void setMaxBlockProcessPerLoop(int64_t _maxBlockProcessPerLoop) + { + m_maxBlockProcessPerLoop = _maxBlockProcessPerLoop; + } + + bcos::rpc::GroupManager::Ptr groupManager() { return m_groupManager; } + void setGroupManager(bcos::rpc::GroupManager::Ptr _groupManager) + { + m_groupManager = _groupManager; + } + + std::shared_ptr messageFactory() const + { + return m_messageFactory; + } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + +private: + // group manager + bcos::rpc::GroupManager::Ptr m_groupManager; + // match for event log compare + std::shared_ptr m_matcher; + // message factory + std::shared_ptr m_messageFactory; + +private: + std::shared_ptr m_wsService; + + std::atomic m_running{false}; + + // lock for m_addTasks + mutable std::shared_mutex x_addTasks; + // tasks to be add + std::vector m_addTasks; + // the number of tasks to be add + std::atomic m_addTaskCount{0}; + + // lock for m_cancelTasks + mutable std::shared_mutex x_cancelTasks; + // tasks to be cancel + std::vector m_cancelTasks; + // the number of tasks to be cancel + std::atomic m_cancelTaskCount{0}; + + // all subscribe event tasks + std::unordered_map m_tasks; + + // + int64_t m_maxBlockProcessPerLoop = 10; +}; + +class EventSubFactory : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + +public: + EventSub::Ptr buildEventSub(std::shared_ptr _wsService) + { + auto es = std::make_shared(_wsService); + return es; + } +}; + +} // namespace event +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/event/EventSubMatcher.cpp b/bcos-rpc/bcos-rpc/event/EventSubMatcher.cpp new file mode 100644 index 0000000..ad6315e --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubMatcher.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushMatcher.cpp + * @author: octopus + * @date 2021-09-10 + */ + +#include +#include +#include + +using namespace bcos; +using namespace bcos::event; + +uint32_t EventSubMatcher::matches( + EventSubParams::ConstPtr _params, bcos::protocol::Block::ConstPtr _block, Json::Value& _result) +{ + uint32_t count = 0; + for (std::size_t index = 0; index < _block->transactionsSize(); index++) + { + count += + matches(_params, _block->receipt(index), _block->transaction(index), index, _result); + } + + return count; +} + +uint32_t EventSubMatcher::matches(EventSubParams::ConstPtr _params, + bcos::protocol::TransactionReceipt::ConstPtr _receipt, + bcos::protocol::Transaction::ConstPtr _tx, std::size_t _txIndex, Json::Value& _result) +{ + uint32_t count = 0; + const auto& logEntries = _receipt->logEntries(); + std::size_t logIndex = 0; + for (const auto& logEntry : logEntries) + { + if (matches(_params, logEntry)) + { + count++; + + Json::Value jResp; + jResp["blockNumber"] = _receipt->blockNumber(); + jResp["address"] = std::string(logEntry.address()); + jResp["data"] = toHexStringWithPrefix(logEntry.data()); + jResp["logIndex"] = (uint64_t)logIndex; + jResp["transactionHash"] = _tx->hash().hexPrefixed(); + jResp["transactionIndex"] = (uint64_t)_txIndex; + jResp["topics"] = Json::Value(Json::arrayValue); + for (const auto& topic : logEntry.topics()) + { + jResp["topics"].append(topic.hexPrefixed()); + } + _result.append(jResp); + } + + logIndex += 1; + } + + return count; +} + +bool EventSubMatcher::matches( + EventSubParams::ConstPtr _params, const bcos::protocol::LogEntry& _logEntry) +{ + const auto& addresses = _params->addresses(); + const auto& topics = _params->topics(); + + // EVENT_MATCH(TRACE) << LOG_BADGE("matches") << LOG_KV("address", _logEntry.address()) + // << LOG_KV("logEntry topics", _logEntry.topics().size()); + + // An empty address array matches all values otherwise log.address must be in addresses + if (!addresses.empty() && !addresses.count(std::string(_logEntry.address()))) + { + return false; + } + + bool isMatch = true; + for (unsigned i = 0; i < EVENT_LOG_TOPICS_MAX_INDEX; ++i) + { + const auto& logTopics = _logEntry.topics(); + if (topics.size() > i && !topics[i].empty() && + (logTopics.size() <= i || !topics[i].count(logTopics[i].hex()))) + { + isMatch = false; + break; + } + } + + return isMatch; +} diff --git a/bcos-rpc/bcos-rpc/event/EventSubMatcher.h b/bcos-rpc/bcos-rpc/event/EventSubMatcher.h new file mode 100644 index 0000000..c3d4e19 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubMatcher.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushMatcher.h + * @author: octopus + * @date 2021-09-10 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace event +{ +class EventSubMatcher +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + virtual ~EventSubMatcher() {} + +public: + virtual bool matches( + EventSubParams::ConstPtr _params, const bcos::protocol::LogEntry& _logEntry); + +public: + uint32_t matches(EventSubParams::ConstPtr _params, + bcos::protocol::TransactionReceipt::ConstPtr _receipt, + bcos::protocol::Transaction::ConstPtr _tx, std::size_t _txIndex, Json::Value& _result); + uint32_t matches(EventSubParams::ConstPtr _params, bcos::protocol::Block::ConstPtr _block, + Json::Value& _result); +}; + +} // namespace event +} // namespace bcos diff --git a/bcos-rpc/bcos-rpc/event/EventSubParams.h b/bcos-rpc/bcos-rpc/event/EventSubParams.h new file mode 100644 index 0000000..13ce6e7 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubParams.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenSubParams.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace event +{ +class EventSubParams +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + int64_t fromBlock() const { return m_fromBlock; } + int64_t toBlock() const { return m_toBlock; } + const std::set& addresses() const { return m_addresses; } + std::set& addresses() { return m_addresses; } + const std::vector>& topics() const { return m_topics; } + std::vector>& topics() { return m_topics; } + + void setFromBlock(int64_t _fromBlock) { m_fromBlock = _fromBlock; } + void setToBlock(int64_t _toBlock) { m_toBlock = _toBlock; } + void addAddress(const std::string& _address) { m_addresses.insert(_address); } + bool addTopic(std::size_t _index, const std::string& _topic) + { + if (_index >= EVENT_LOG_TOPICS_MAX_INDEX) + { + return false; + } + + m_topics.resize(_index + 1); + m_topics[_index].insert(_topic); + return true; + } + +private: + bcos::protocol::BlockNumber m_fromBlock = -1; + bcos::protocol::BlockNumber m_toBlock = -1; + std::set m_addresses; + std::vector> m_topics; +}; + +} // namespace event +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/event/EventSubRequest.cpp b/bcos-rpc/bcos-rpc/event/EventSubRequest.cpp new file mode 100644 index 0000000..fc32e57 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubRequest.cpp @@ -0,0 +1,296 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushRequest.cpp + * @author: octopus + * @date 2021-09-03 + */ + +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::event; + +std::string EventSubUnsubRequest::generateJson() const +{ + /* + { + "id": "", + "group": "" + } + */ + Json::Value jResult; + // id + jResult["id"] = m_id; + // group + jResult["group"] = m_group; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubUnsubRequest::fromJson(const std::string& _request) +{ + std::string id; + std::string group; + EventSubParams::Ptr params = std::make_shared(); + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_request, root)) + { + errorMessage = "invalid json object, parse request failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("group")) + { + // group field not exist + errorMessage = "\'group\' field not exist"; + break; + } + group = root["group"].asString(); + + m_id = id; + m_group = group; + + EVENT_REQUEST(INFO) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub request success") + << LOG_KV("group", m_group) << LOG_KV("id", m_id); + + return true; + } while (0); + + EVENT_REQUEST(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub request") + << LOG_KV("request", _request) << LOG_KV("errorMessage", errorMessage); + } + catch (const std::exception& e) + { + EVENT_REQUEST(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + + << LOG_KV("request", _request) + << LOG_KV("error", std::string(e.what())); + } + + return false; +} + + +std::string EventSubRequest::generateJson() const +{ + /* + { + "id": "", + "group": "", + "params": { + "fromBlock": -1, + "toBlock": -1, + "addresses": [ + "0xca5ed56862869c25da0bdf186e634aac6c6361ee" + ], + "topics": [ + "0x91c95f04198617c60eaf2180fbca88fc192db379657df0e412a9f7dd4ebbe95d" + ] + } + } + */ + Json::Value jResult; + // id + jResult["id"] = id(); + // group + jResult["group"] = group(); + + Json::Value jParams; + // fromBlock + jParams["fromBlock"] = m_state->currentBlockNumber() > 0 ? m_state->currentBlockNumber() + 1 : + m_params->fromBlock(); + // toBlock + jParams["toBlock"] = m_params->toBlock(); + // addresses + Json::Value jAddresses(Json::arrayValue); + for (const auto& addr : m_params->addresses()) + { + jAddresses.append(addr); + } + jParams["addresses"] = jAddresses; + // topics + Json::Value jTopics(Json::arrayValue); + for (const auto& inTopics : m_params->topics()) + { + if (inTopics.empty()) + { + Json::Value jInTopics(Json::nullValue); + jTopics.append(jInTopics); + continue; + } + + Json::Value jInTopics(Json::arrayValue); + for (const auto& topic : inTopics) + { + jInTopics.append(topic); + } + jTopics.append(jInTopics); + } + + jParams["topics"] = jTopics; + jResult["params"] = jParams; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubRequest::fromJson(const std::string& _request) +{ + std::string id; + std::string group; + EventSubParams::Ptr params = std::make_shared(); + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_request, root)) + { + errorMessage = "invalid json object, parse request failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("group")) + { + // group field not exist + errorMessage = "\'group\' field not exist"; + break; + } + group = root["group"].asString(); + + if (!root.isMember("params")) + { // params field not exist + errorMessage = "\'params\' field not exist"; + break; + } + + auto& jParams = root["params"]; + if (jParams.isMember("fromBlock")) + { + params->setFromBlock(jParams["fromBlock"].asInt64()); + } + + if (jParams.isMember("toBlock")) + { + params->setToBlock(jParams["toBlock"].asInt64()); + } + + if (jParams.isMember("addresses")) + { + auto& jAddresses = jParams["addresses"]; + for (Json::Value::ArrayIndex index = 0; index < jAddresses.size(); ++index) + { + std::string address = jAddresses[index].asString(); + if ((address.compare(0, 2, "0x") == 0) || (address.compare(0, 2, "0X") == 0)) + { + address = address.substr(2); + } + // std::transform(address.begin(), address.end(), address.begin(), ::tolower); + params->addAddress(address); + } + } + + if (jParams.isMember("topics")) + { + auto& jTopics = jParams["topics"]; + + for (Json::Value::ArrayIndex index = 0; index < jTopics.size(); ++index) + { + auto& jIndex = jTopics[index]; + if (jIndex.isNull()) + { + continue; + } + + if (jIndex.isArray()) + { // array topics + for (Json::Value::ArrayIndex innerIndex = 0; innerIndex < jIndex.size(); + ++innerIndex) + { + std::string topic = jIndex[innerIndex].asString(); + if ((topic.compare(0, 2, "0x") == 0) || + (topic.compare(0, 2, "0XC") == 0)) + { + topic = topic.substr(2); + } + std::transform(topic.begin(), topic.end(), topic.begin(), ::tolower); + params->addTopic(index, topic); + } + } + else + { // single topic, string value + params->addTopic(index, jIndex.asString()); + } + } + } + + setId(id); + setGroup(group); + setParams(params); + + EVENT_REQUEST(INFO) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub request success") + << LOG_KV("group", group) << LOG_KV("id", id); + + return true; + } while (0); + + EVENT_REQUEST(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub request") + << LOG_KV("request", _request) << LOG_KV("errorMessage", errorMessage); + } + catch (const std::exception& e) + { + EVENT_REQUEST(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + + << LOG_KV("request", _request) + << LOG_KV("error", std::string(e.what())); + } + + return false; +} diff --git a/bcos-rpc/bcos-rpc/event/EventSubRequest.h b/bcos-rpc/bcos-rpc/event/EventSubRequest.h new file mode 100644 index 0000000..22a5d5e --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubRequest.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushRequest.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include + +namespace bcos +{ +namespace event +{ +class EventSubTaskState; +class EventSubUnsubRequest +{ +public: + using Ptr = std::shared_ptr; + + virtual ~EventSubUnsubRequest() {} + +public: + void setId(const std::string& _id) { m_id = _id; } + std::string id() const { return m_id; } + + void setGroup(const std::string& _group) { m_group = _group; } + std::string group() const { return m_group; } + + virtual std::string generateJson() const; + virtual bool fromJson(const std::string& _request); + +private: + std::string m_id; + std::string m_group; +}; + +class EventSubRequest : public EventSubUnsubRequest +{ +public: + using Ptr = std::shared_ptr; + + virtual ~EventSubRequest() {} + +public: + void setParams(std::shared_ptr _params) { m_params = _params; } + std::shared_ptr params() const { return m_params; } + + std::string generateJson() const override; + bool fromJson(const std::string& _request) override; + +private: + std::shared_ptr m_params; + std::shared_ptr m_state; +}; + +} // namespace event +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/event/EventSubResponse.cpp b/bcos-rpc/bcos-rpc/event/EventSubResponse.cpp new file mode 100644 index 0000000..4008b98 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubResponse.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushResponse.cpp + * @author: octopus + * @date 2021-09-09 + */ +#include +#include +#include + +using namespace bcos; +using namespace bcos::event; + +std::string EventSubResponse::generateJson() +{ + /* + { + "id": "0x123", + "status": 0, + "result": { + "blockNumber": 111, + "events":[] + } + } + */ + Json::Value jResult; + // id + jResult["id"] = m_id; + // status + jResult["status"] = m_status; + + m_jResp = jResult; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubResponse::fromJson(const std::string& _response) +{ + std::string id; + int status; + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_response, root)) + { + errorMessage = "invalid json object, parse response failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("status")) + { + // group field not exist + errorMessage = "\'status\' field not exist"; + break; + } + status = root["status"].asInt(); + + m_id = id; + m_status = status; + m_jResp = root; + + EVENT_RESPONSE(TRACE) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub response success") + << LOG_KV("id", m_id) << LOG_KV("status", m_status); + + return true; + } while (0); + + EVENT_RESPONSE(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub response") + << LOG_KV("response", _response) << LOG_KV("error", errorMessage); + } + catch (const std::exception& e) + { + EVENT_RESPONSE(ERROR) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + << LOG_KV("response", _response) + << LOG_KV("error", std::string(e.what())); + } + + return false; +} diff --git a/bcos-rpc/bcos-rpc/event/EventSubResponse.h b/bcos-rpc/bcos-rpc/event/EventSubResponse.h new file mode 100644 index 0000000..c771ede --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubResponse.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushResponse.h + * @author: octopus + * @date 2021-09-09 + */ + +#pragma once + +#include +#include +#include +namespace bcos +{ +namespace event +{ +class EventSubResponse +{ +public: + using Ptr = std::shared_ptr; + +public: + std::string id() const { return m_id; } + void setId(const std::string& _id) { m_id = _id; } + int status() const { return m_status; } + void setStatus(int _status) { m_status = _status; } + + void setJResp(const Json::Value& _jResp) { m_jResp = _jResp; } + Json::Value jResp() const { return m_jResp; } + +public: + std::string generateJson(); + bool fromJson(const std::string& _response); + +private: + std::string m_id; + int m_status; + + Json::Value m_jResp; +}; +} // namespace event +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/event/EventSubTask.h b/bcos-rpc/bcos-rpc/event/EventSubTask.h new file mode 100644 index 0000000..9d13902 --- /dev/null +++ b/bcos-rpc/bcos-rpc/event/EventSubTask.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushRequest.h + * @author: octopus + * @date 2021-09-07 + */ + +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace event +{ +using Callback = std::function; + +class EventSubTaskState +{ +public: + using Ptr = std::shared_ptr; + +public: + int64_t currentBlockNumber() const { return m_currentBlockNumber.load(); } + void setCurrentBlockNumber(int64_t _currentBlockNumber) + { + if (_currentBlockNumber > m_currentBlockNumber.load()) + { + m_currentBlockNumber.store(_currentBlockNumber); + } + } + +private: + std::atomic m_currentBlockNumber = -1; +}; + +class EventSubTask +{ +public: + using Ptr = std::shared_ptr; + EventSubTask() { EVENT_TASK(INFO) << LOG_KV("[NEWOBJ][EventSubTask]", this); } + ~EventSubTask() { EVENT_TASK(INFO) << LOG_KV("[DELOBJ][EventSubTask]", this); } + +public: + void setSession(std::shared_ptr _session) + { + m_session = _session; + } + std::shared_ptr session() const { return m_session; } + + void setId(const std::string& _id) { m_id = _id; } + std::string id() const { return m_id; } + + void setGroup(const std::string& _group) { m_group = _group; } + std::string group() const { return m_group; } + + void setParams(std::shared_ptr _params) { m_params = _params; } + std::shared_ptr params() const { return m_params; } + + void setState(std::shared_ptr _state) { m_state = _state; } + std::shared_ptr state() const { return m_state; } + + void setCallback(Callback _callback) { m_callback = _callback; } + Callback callback() const { return m_callback; } + + bool work() { return m_work.load(); } + + bool tryWork() + { + bool trueValue = true; + bool falseValue = false; + return m_work.compare_exchange_strong(falseValue, trueValue); + } + + void freeWork() { m_work.store(false); } + + bool isCompleted() + { + if (m_params->toBlock() < 0) + { + return false; + } + + return m_state->currentBlockNumber() > m_params->toBlock(); + } + +private: + std::atomic m_work{false}; + + std::string m_id; + std::string m_group; + + std::shared_ptr m_session; + std::shared_ptr m_params; + std::shared_ptr m_state; + +private: + Callback m_callback; +}; + +using EventSubTaskPtrs = std::vector; +} // namespace event +} // namespace bcos diff --git a/bcos-rpc/bcos-rpc/groupmgr/AirGroupManager.h b/bcos-rpc/bcos-rpc/groupmgr/AirGroupManager.h new file mode 100644 index 0000000..a66401f --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/AirGroupManager.h @@ -0,0 +1,104 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief AirGroupManager.h + * @file AirGroupManager.h + * @author: yujiechen + * @date 2021-10-11 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace rpc +{ +class AirGroupManager : public GroupManager +{ +public: + using Ptr = std::shared_ptr; + AirGroupManager(std::string const& _chainID, bcos::group::GroupInfo::Ptr _groupInfo, + NodeService::Ptr _nodeService) + : GroupManager(_chainID), m_nodeService(_nodeService), m_groupInfo(_groupInfo) + {} + + ~AirGroupManager() override {} + virtual void init() { initNodeInfo(m_groupInfo->groupID(), "localNode", m_nodeService); } + + NodeService::Ptr getNodeService(std::string_view _groupID, std::string_view) const override + { + ReadGuard l(x_groupInfo); + if (_groupID.size() > 0 && _groupID != m_groupInfo->groupID()) + { + return nullptr; + } + return m_nodeService; + } + + std::set groupList() override + { + ReadGuard l(x_groupInfo); + return std::set{m_groupInfo->groupID()}; + } + + bcos::group::GroupInfo::Ptr getGroupInfo(std::string_view _groupID) override + { + ReadGuard l(x_groupInfo); + if (m_groupInfo->groupID() == _groupID) + { + return m_groupInfo; + } + return nullptr; + } + + bcos::group::ChainNodeInfo::Ptr getNodeInfo( + std::string_view _groupID, std::string_view _nodeName) override + { + ReadGuard l(x_groupInfo); + if (m_groupInfo->groupID() != _groupID) + { + return nullptr; + } + return m_groupInfo->nodeInfo(_nodeName); + } + + std::vector groupInfoList() override + { + std::vector groupList; + groupList.emplace_back(m_groupInfo); + return groupList; + } + + bool updateGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) override + { + { + WriteGuard l(x_groupInfo); + m_groupInfo = _groupInfo; + } + ReadGuard l(x_groupInfo); + if (m_groupInfoNotifier) + { + m_groupInfoNotifier(_groupInfo); + } + return true; + } + +private: + NodeService::Ptr m_nodeService; + bcos::group::GroupInfo::Ptr m_groupInfo; + mutable SharedMutex x_groupInfo; +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/Common.h b/bcos-rpc/bcos-rpc/groupmgr/Common.h new file mode 100644 index 0000000..6a3bb47 --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/Common.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Common.h + * @file Common.h + * @author: yujiechen + * @date 2021-10-11 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +namespace bcos +{ +namespace rpc +{ +inline bcos::crypto::CryptoSuite::Ptr createCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto encryptImpl = std::make_shared(); + return std::make_shared(hashImpl, signatureImpl, encryptImpl); +} + +inline bcos::crypto::CryptoSuite::Ptr createSMCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto encryptImpl = std::make_shared(); + return std::make_shared(hashImpl, signatureImpl, encryptImpl); +} + +inline bcos::protocol::BlockFactory::Ptr createBlockFactory( + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) +{ + auto blockHeaderFactory = + std::make_shared(_cryptoSuite); + auto transactionFactory = + std::make_shared(_cryptoSuite); + auto receiptFactory = + std::make_shared(_cryptoSuite); + return std::make_shared( + _cryptoSuite, blockHeaderFactory, transactionFactory, receiptFactory); +} +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/GroupManager.cpp b/bcos-rpc/bcos-rpc/groupmgr/GroupManager.cpp new file mode 100644 index 0000000..761f5c2 --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/GroupManager.cpp @@ -0,0 +1,363 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief GroupManager.cpp + * @file GroupManager.cpp + * @author: yujiechen + * @date 2021-10-11 + */ +#include "GroupManager.h" +#include +#include +using namespace bcos; +using namespace bcos::group; +using namespace bcos::rpc; +using namespace bcos::protocol; + +bool GroupManager::updateGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + if (!checkGroupInfo(_groupInfo)) + { + return false; + } + bool enforceUpdate = false; + { + UpgradableGuard l(x_nodeServiceList); + auto const& groupID = _groupInfo->groupID(); + if (!m_groupInfos.count(groupID)) + { + UpgradeGuard ul(l); + m_groupInfos[groupID] = _groupInfo; + GROUP_LOG(INFO) << LOG_DESC("updateGroupInfo") << printGroupInfo(_groupInfo); + m_groupInfoNotifier(_groupInfo); + enforceUpdate = true; + } + } + return updateGroupServices(_groupInfo, enforceUpdate); +} + +bool GroupManager::checkGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + // check the serviceName + auto nodeList = _groupInfo->nodeInfos(); + for (auto const& node : nodeList) + { + auto const& expectedRpcService = node.second->serviceName(bcos::protocol::ServiceType::RPC); + if (expectedRpcService != m_rpcServiceName) + { + GROUP_LOG(INFO) << LOG_DESC("unfollowed groupInfo for inconsistent rpc service name") + << LOG_KV("expected", expectedRpcService) + << LOG_KV("selfName", m_rpcServiceName); + return false; + } + } + return true; +} +bool GroupManager::updateGroupServices(bcos::group::GroupInfo::Ptr _groupInfo, bool _enforce) +{ + auto ret = false; + auto nodeInfos = _groupInfo->nodeInfos(); + for (auto const& it : nodeInfos) + { + if (updateNodeService(_groupInfo->groupID(), it.second, _enforce)) + { + ret = true; + } + } + return ret; +} + +void GroupManager::removeGroupNodeList(bcos::group::GroupInfo::Ptr _groupInfo) +{ + GROUP_LOG(INFO) << LOG_DESC("removeGroupNodeList") << printGroupInfo(_groupInfo); + std::map> groupToUnreachableNodes; + std::set unreachableNodes; + auto nodeList = _groupInfo->nodeInfos(); + for (auto const& node : nodeList) + { + unreachableNodes.insert(node.second->nodeName()); + } + groupToUnreachableNodes[_groupInfo->groupID()] = unreachableNodes; + removeGroupBlockInfo(groupToUnreachableNodes); + removeUnreachableNodeService(groupToUnreachableNodes); +} + +bool GroupManager::shouldRebuildNodeService( + std::string const& _groupID, bcos::group::ChainNodeInfo::Ptr _nodeInfo) +{ + auto const& nodeAppName = _nodeInfo->nodeName(); + if (!m_nodeServiceList.count(_groupID) || !m_nodeServiceList[_groupID].count(nodeAppName)) + { + return true; + } + auto nodeInfo = m_groupInfos.at(_groupID)->nodeInfo(nodeAppName); + // update the compatibilityVersion(Note: the compatibility version maybe updated in-runtime) + if (nodeInfo->compatibilityVersion() != _nodeInfo->compatibilityVersion()) + { + GROUP_LOG(INFO) << LOG_DESC("update compatibilityVersion to ") + << _nodeInfo->compatibilityVersion(); + nodeInfo->setCompatibilityVersion(_nodeInfo->compatibilityVersion()); + } + // check the serviceInfo + auto const& originServiceInfo = nodeInfo->serviceInfo(); + auto const& serviceInfo = _nodeInfo->serviceInfo(); + if (originServiceInfo.size() != serviceInfo.size()) + { + GROUP_LOG(INFO) << LOG_DESC("shouldRebuildNodeService for serviceInfo changed") + << LOG_KV("originServiceInfo", originServiceInfo.size()) + << LOG_KV("serviceInfo", serviceInfo.size()); + return true; + } + for (auto const& it : serviceInfo) + { + if (!originServiceInfo.count(it.first) || originServiceInfo.at(it.first) != it.second) + { + GROUP_LOG(INFO) << LOG_DESC("shouldRebuildNodeService for serviceInfo changed") + << LOG_KV("orgService", originServiceInfo.at(it.first)) + << LOG_KV("updatedService", it.second); + return true; + } + } + return false; +} + +bool GroupManager::updateNodeService( + std::string const& _groupID, ChainNodeInfo::Ptr _nodeInfo, bool _enforceUpdate) +{ + UpgradableGuard l(x_nodeServiceList); + auto const& nodeAppName = _nodeInfo->nodeName(); + if (!_enforceUpdate && !shouldRebuildNodeService(_groupID, _nodeInfo)) + { + return false; + } + // a started node + auto nodeService = + m_nodeServiceFactory->buildNodeService(m_chainID, _groupID, _nodeInfo, m_nodeConfig); + if (!nodeService) + { + return false; + } + // fetch blockNumber to the node + initNodeInfo(_groupID, _nodeInfo->nodeName(), nodeService); + UpgradeGuard ul(l); + m_nodeServiceList[_groupID][nodeAppName] = nodeService; + auto groupInfo = m_groupInfos[_groupID]; + // will cover the old NodeInfo + groupInfo->updateNodeInfo(_nodeInfo); + m_groupInfoNotifier(groupInfo); + GROUP_LOG(INFO) << LOG_DESC("buildNodeService for the master node") << printNodeInfo(_nodeInfo) + << printGroupInfo(groupInfo) + << LOG_KV("nodeServiceObj", m_nodeServiceList.at(_groupID).at(nodeAppName)) + << LOG_KV("nodeServiceSize", m_nodeServiceList.size()); + return true; +} + +bcos::protocol::BlockNumber GroupManager::getBlockNumberByGroup(const std::string& _groupID) +{ + ReadGuard l(x_groupBlockInfos); + if (!m_groupBlockInfos.count(_groupID)) + { + return -1; + } + + return m_groupBlockInfos.at(_groupID); +} + +NodeService::Ptr GroupManager::selectNode(std::string_view _groupID) const +{ + auto nodeName = selectNodeByBlockNumber(_groupID); + if (nodeName.size() == 0) + { + return selectNodeRandomly(_groupID); + } + return queryNodeService(_groupID, nodeName); +} + +std::string GroupManager::selectNodeByBlockNumber(std::string_view _groupID) const +{ + ReadGuard l(x_groupBlockInfos); + + auto it = m_nodesWithLatestBlockNumber.find(_groupID); + if (it == m_nodesWithLatestBlockNumber.end() || it->second.size() == 0) + { + return ""; + } + srand(utcTime()); + + auto nodeListIt = m_nodesWithLatestBlockNumber.find(_groupID); + auto const& nodesList = nodeListIt->second; + auto selectNodeIndex = rand() % nodesList.size(); + auto nodeIt = nodesList.begin(); + if (selectNodeIndex > 0) + { + std::advance(nodeIt, selectNodeIndex); + } + return *nodeIt; +} + +NodeService::Ptr GroupManager::selectNodeRandomly(std::string_view _groupID) const +{ + ReadGuard l(x_nodeServiceList); + if (!m_groupInfos.count(_groupID)) + { + return nullptr; + } + if (!m_nodeServiceList.count(_groupID)) + { + return nullptr; + } + + auto it = m_groupInfos.find(_groupID); + auto const& groupInfo = it->second; + auto const& nodeInfos = groupInfo->nodeInfos(); + for (auto const& it : nodeInfos) + { + auto const& node = it.second; + auto serviceIt = m_nodeServiceList.find(_groupID); + if (serviceIt != m_nodeServiceList.end() && !serviceIt->second.empty()) + { + auto nodeService = serviceIt->second.at(node->nodeName()); + if (nodeService) + { + return nodeService; + } + } + } + return nullptr; +} + +NodeService::Ptr GroupManager::queryNodeService( + std::string_view _groupID, std::string_view _nodeName) const +{ + ReadGuard l(x_nodeServiceList); + auto it = m_nodeServiceList.find(_groupID); + if (it != m_nodeServiceList.end()) + { + auto const& serviceList = it->second; + auto it2 = serviceList.find(_nodeName); + if (it2 != serviceList.end()) + { + return it2->second; + } + } + return nullptr; +} + +NodeService::Ptr GroupManager::getNodeService( + std::string_view _groupID, std::string_view _nodeName) const +{ + if (_nodeName.size() > 0) + { + return queryNodeService(_groupID, _nodeName); + } + return selectNode(_groupID); +} + +void GroupManager::initNodeInfo( + std::string const& _groupID, std::string const& _nodeName, NodeService::Ptr _nodeService) +{ + GROUP_LOG(INFO) << LOG_DESC("initNodeInfo") << LOG_KV("group", _groupID) + << LOG_KV("nodeName", _nodeName); + auto ledger = _nodeService->ledger(); + auto self = std::weak_ptr(shared_from_this()); + ledger->asyncGetBlockNumber( + [self, _groupID, _nodeName](Error::Ptr _error, BlockNumber _blockNumber) { + if (_error) + { + GROUP_LOG(WARNING) + << LOG_DESC("initNodeInfo error") << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()) << LOG_KV("groupID", _groupID) + << LOG_KV("nodeName", _nodeName); + return; + } + try + { + auto groupMgr = self.lock(); + if (!groupMgr) + { + return; + } + groupMgr->updateGroupBlockInfo(_groupID, _nodeName, _blockNumber); + if (groupMgr->m_blockNumberNotifier) + { + groupMgr->m_blockNumberNotifier(_groupID, _nodeName, _blockNumber); + } + GROUP_LOG(INFO) << LOG_DESC("initNodeInfo success") << LOG_KV("group", _groupID) + << LOG_KV("nodeName", _nodeName) << LOG_KV("number", _blockNumber); + } + catch (std::exception const& e) + { + GROUP_LOG(WARNING) << LOG_DESC("initNodeInfo exception") + << LOG_KV("group", _groupID) << LOG_KV("nodeName", _nodeName) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void GroupManager::removeUnreachableNodeService( + std::map> const& _unreachableNodes) +{ + WriteGuard l(x_nodeServiceList); + for (auto const& it : _unreachableNodes) + { + auto groupID = it.first; + auto& groupInfo = m_groupInfos[groupID]; + if (!m_nodeServiceList.count(groupID)) + { + continue; + } + auto const& nodeList = it.second; + for (auto const& node : nodeList) + { + GROUP_LOG(INFO) << LOG_DESC("GroupManager: removeUnreachablNodeService") + << LOG_KV("group", groupID) << LOG_KV("node", node); + m_nodeServiceList[groupID].erase(node); + groupInfo->removeNodeInfo(node); + } + if (m_nodeServiceList[groupID].size() == 0) + { + m_nodeServiceList.erase(groupID); + } + } +} +void GroupManager::removeGroupBlockInfo( + std::map> const& _unreachableNodes) +{ + WriteGuard l(x_groupBlockInfos); + for (auto const& it : _unreachableNodes) + { + auto group = it.first; + if (!m_nodesWithLatestBlockNumber.count(group)) + { + m_groupBlockInfos.erase(group); + continue; + } + if (!m_groupBlockInfos.count(group)) + { + m_nodesWithLatestBlockNumber.erase(group); + continue; + } + auto const& nodeList = it.second; + for (auto const& node : nodeList) + { + m_nodesWithLatestBlockNumber[group].erase(node); + } + if (m_nodesWithLatestBlockNumber[group].size() == 0) + { + m_groupBlockInfos.erase(group); + m_nodesWithLatestBlockNumber.erase(group); + } + } +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/GroupManager.h b/bcos-rpc/bcos-rpc/groupmgr/GroupManager.h new file mode 100644 index 0000000..c0d087c --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/GroupManager.h @@ -0,0 +1,212 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief GroupManager.h + * @file GroupManager.h + * @author: yujiechen + * @date 2021-10-11 + */ +#pragma once +#include "NodeService.h" +#include +#include +namespace bcos +{ +namespace rpc +{ +class GroupManager : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + GroupManager(std::string _rpcServiceName, std::string const& _chainID, + NodeServiceFactory::Ptr _nodeServiceFactory, bcos::tool::NodeConfig::Ptr _nodeConfig) + : m_rpcServiceName(_rpcServiceName), + m_chainID(_chainID), + m_nodeServiceFactory(_nodeServiceFactory), + m_nodeConfig(_nodeConfig) + {} + virtual ~GroupManager() {} + virtual bool updateGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo); + virtual void removeGroupNodeList(bcos::group::GroupInfo::Ptr _groupInfo); + + virtual NodeService::Ptr getNodeService( + std::string_view _groupID, std::string_view _nodeName) const; + + std::string const& chainID() const { return m_chainID; } + + virtual bcos::group::GroupInfo::Ptr getGroupInfo(std::string_view _groupID) + { + ReadGuard l(x_nodeServiceList); + auto it = m_groupInfos.find(_groupID); + if (it != m_groupInfos.end()) + { + return it->second; + } + return nullptr; + } + + virtual bcos::group::ChainNodeInfo::Ptr getNodeInfo( + std::string_view _groupID, std::string_view _nodeName) + { + ReadGuard l(x_nodeServiceList); + auto it = m_groupInfos.find(_groupID); + if (it == m_groupInfos.end()) + { + return nullptr; + } + auto groupInfo = it->second; + + auto nodeInfos = groupInfo->nodeInfos(); + auto nodeIt = nodeInfos.find(_nodeName); + return nodeIt->second; + } + + virtual std::set groupList() + { + std::set groupList; + ReadGuard l(x_nodeServiceList); + for (auto const& it : m_groupInfos) + { + if (it.second->nodesNum() == 0) + { + continue; + } + groupList.insert(it.first); + } + return groupList; + } + + virtual std::vector groupInfoList() + { + std::vector groupList; + ReadGuard l(x_nodeServiceList); + for (auto const& it : m_groupInfos) + { + groupList.push_back(it.second); + } + return groupList; + } + + virtual void updateGroupBlockInfo(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber) + { + UpgradableGuard l(x_groupBlockInfos); + if (m_groupBlockInfos.count(_groupID)) + { + // expired block + if (m_groupBlockInfos[_groupID] > _blockNumber) + { + return; + } + // has already in the m_nodesWithLatestBlockNumber + if (m_groupBlockInfos[_groupID] == _blockNumber && + m_nodesWithLatestBlockNumber.count(_groupID) && + m_nodesWithLatestBlockNumber[_groupID].count(_nodeName)) + { + return; + } + } + UpgradeGuard ul(l); + bcos::protocol::BlockNumber oldBlockNumber = 0; + if (m_groupBlockInfos.count(_groupID)) + { + oldBlockNumber = m_groupBlockInfos[_groupID]; + } + if (!m_nodesWithLatestBlockNumber.count(_groupID)) + { + m_nodesWithLatestBlockNumber[_groupID] = std::set(); + } + if (!m_groupBlockInfos.count(_groupID)) + { + m_groupBlockInfos[_groupID] = _blockNumber; + } + // nodes with newer highest block + if (oldBlockNumber < _blockNumber) + { + m_groupBlockInfos[_groupID] = _blockNumber; + m_nodesWithLatestBlockNumber[_groupID].clear(); + } + + // nodes with the same highest block + (m_nodesWithLatestBlockNumber[_groupID]).insert(_nodeName); + BCOS_LOG(DEBUG) << LOG_DESC("updateGroupBlockInfo for receive block notify") + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName) + << LOG_KV("block", _blockNumber); + } + + virtual void registerGroupInfoNotifier( + std::function _callback) + { + m_groupInfoNotifier = _callback; + } + + void registerBlockNumberNotifier( + std::function + _blockNumberNotifier) + { + m_blockNumberNotifier = _blockNumberNotifier; + } + virtual bcos::protocol::BlockNumber getBlockNumberByGroup(const std::string& _groupID); + +protected: + GroupManager(std::string const& _chainID) : m_chainID(_chainID) {} + + bool updateGroupServices(bcos::group::GroupInfo::Ptr _groupInfo, bool _enforceUpdate); + bool updateNodeService(std::string const& _groupID, bcos::group::ChainNodeInfo::Ptr _nodeInfo, + bool _enforceUpdate); + bool shouldRebuildNodeService( + std::string const& _groupID, bcos::group::ChainNodeInfo::Ptr _nodeInfo); + virtual NodeService::Ptr selectNode(std::string_view _groupID) const; + virtual std::string selectNodeByBlockNumber(std::string_view _groupID) const; + virtual NodeService::Ptr selectNodeRandomly(std::string_view _groupID) const; + virtual NodeService::Ptr queryNodeService( + std::string_view _groupID, std::string_view _nodeName) const; + + virtual void initNodeInfo( + std::string const& _groupID, std::string const& _nodeName, NodeService::Ptr _nodeService); + + virtual void removeGroupBlockInfo( + std::map> const& _unreachableNodes); + virtual void removeUnreachableNodeService( + std::map> const& _unreachableNodes); + + bool checkGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo); + +protected: + std::string m_rpcServiceName; + std::string m_chainID; + NodeServiceFactory::Ptr m_nodeServiceFactory; + + bcos::tool::NodeConfig::Ptr m_nodeConfig; + + // map between groupID to groupInfo + std::map> m_groupInfos; + + // map between nodeName to NodeService + std::map>, std::less<>> + m_nodeServiceList; + mutable SharedMutex x_nodeServiceList; + + std::map, std::less<>> m_nodesWithLatestBlockNumber; + std::map> m_groupBlockInfos; + mutable SharedMutex x_groupBlockInfos; + + std::function m_groupInfoNotifier; + + std::function + m_blockNumberNotifier; +}; +} // namespace rpc +} // namespace bcos diff --git a/bcos-rpc/bcos-rpc/groupmgr/NodeService.cpp b/bcos-rpc/bcos-rpc/groupmgr/NodeService.cpp new file mode 100644 index 0000000..91852b8 --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/NodeService.cpp @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief NodeService + * @file NodeService.cpp + * @author: yujiechen + * @date 2021-10-11 + */ +#include "NodeService.h" +#include "Common.h" +#include "bcos-tool/NodeConfig.h" +#include +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::crypto; +using namespace bcos::group; +using namespace bcos::protocol; + +NodeService::Ptr NodeServiceFactory::buildNodeService(std::string const&, std::string const&, + bcos::group::ChainNodeInfo::Ptr _nodeInfo, bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + auto appName = _nodeInfo->nodeName(); + // create cryptoSuite + auto const& type = _nodeInfo->nodeCryptoType(); + CryptoSuite::Ptr cryptoSuite = nullptr; + if (type == NodeCryptoType::SM_NODE) + { + cryptoSuite = createSMCryptoSuite(); + } + else + { + cryptoSuite = createCryptoSuite(); + } + auto keyFactory = std::make_shared(); + cryptoSuite->setKeyFactory(keyFactory); + + auto blockFactory = createBlockFactory(cryptoSuite); + + auto ledgerClient = createServicePrx( + LEDGER, _nodeInfo, _nodeConfig, blockFactory); + if (!ledgerClient.first) + { + return nullptr; + } + + auto schedulerClient = + createServicePrx( + SCHEDULER, _nodeInfo, _nodeConfig, cryptoSuite); + if (!schedulerClient.first) + { + return nullptr; + } + + // create txpool client + auto txpoolClient = createServicePrx( + TXPOOL, _nodeInfo, _nodeConfig, cryptoSuite, blockFactory); + if (!txpoolClient.first) + { + return nullptr; + } + + // create consensus client + auto consensusClient = createServicePrx( + CONSENSUS, _nodeInfo, _nodeConfig); + if (!consensusClient.first) + { + return nullptr; + } + + // create sync client + auto syncClient = createServicePrx( + CONSENSUS, _nodeInfo, _nodeConfig); + if (!syncClient.first) + { + return nullptr; + } + + auto nodeService = std::make_shared(ledgerClient.first, schedulerClient.first, + txpoolClient.first, consensusClient.first, syncClient.first, blockFactory); + + nodeService->setLedgerPrx(ledgerClient.second); + return nodeService; +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/NodeService.h b/bcos-rpc/bcos-rpc/groupmgr/NodeService.h new file mode 100644 index 0000000..a854c30 --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/NodeService.h @@ -0,0 +1,115 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief NodeService.h + * @file NodeService.h + * @author: yujiechen + * @date 2021-10-11 + */ +#pragma once +#include "bcos-tars-protocol/Common.h" +#include "bcos-tool/NodeConfig.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace rpc +{ +class NodeService +{ +public: + using Ptr = std::shared_ptr; + NodeService(bcos::ledger::LedgerInterface::Ptr _ledger, + std::shared_ptr _scheduler, + bcos::txpool::TxPoolInterface::Ptr _txpool, + bcos::consensus::ConsensusInterface::Ptr _consensus, + bcos::sync::BlockSyncInterface::Ptr _sync, bcos::protocol::BlockFactory::Ptr _blockFactory) + : m_ledger(_ledger), + m_scheduler(_scheduler), + m_txpool(_txpool), + m_consensus(_consensus), + m_sync(_sync), + m_blockFactory(_blockFactory) + {} + virtual ~NodeService() {} + + bcos::ledger::LedgerInterface::Ptr ledger() { return m_ledger; } + std::shared_ptr scheduler() { return m_scheduler; } + bcos::txpool::TxPoolInterface::Ptr txpool() { return m_txpool; } + bcos::consensus::ConsensusInterface::Ptr consensus() { return m_consensus; } + bcos::sync::BlockSyncInterface::Ptr sync() { return m_sync; } + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + + void setLedgerPrx(bcostars::LedgerServicePrx const& _ledgerPrx) { m_ledgerPrx = _ledgerPrx; } + + bool unreachable() + { + return !bcostars::checkConnection( + "NodeService", "unreachable", m_ledgerPrx, nullptr, false); + } + +private: + bcos::ledger::LedgerInterface::Ptr m_ledger; + std::shared_ptr m_scheduler; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + bcos::consensus::ConsensusInterface::Ptr m_consensus; + bcos::sync::BlockSyncInterface::Ptr m_sync; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + + bcostars::LedgerServicePrx m_ledgerPrx; +}; + +class NodeServiceFactory +{ +public: + using Ptr = std::shared_ptr; + NodeServiceFactory() = default; + virtual ~NodeServiceFactory() {} + NodeService::Ptr buildNodeService(std::string const& _chainID, std::string const& _groupID, + bcos::group::ChainNodeInfo::Ptr _nodeInfo, bcos::tool::NodeConfig::Ptr _nodeConfig); + + template + inline std::pair, S> createServicePrx(bcos::protocol::ServiceType _type, + bcos::group::ChainNodeInfo::Ptr _nodeInfo, bcos::tool::NodeConfig::Ptr _nodeConfig, + const Args&... _args) + { + auto withoutTarsFramework = _nodeConfig->withoutTarsFramework(); + auto serviceName = _nodeInfo->serviceName(_type); + if (serviceName.size() == 0) + { + if (!withoutTarsFramework) + { + return std::make_pair(nullptr, nullptr); + } + } + auto prx = bcostars::createServantProxy(serviceName); + auto client = std::make_shared(prx, _args...); + + return std::make_pair(client, prx); + } +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.cpp b/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.cpp new file mode 100644 index 0000000..8c7789d --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.cpp @@ -0,0 +1,80 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief TarsGroupManager.cpp + * @file TarsGroupManager.cpp + * @author: yujiechen + * @date 2021-10-11 + */ +#include "TarsGroupManager.h" +#include +#include +using namespace bcos; +using namespace bcos::group; +using namespace bcos::rpc; +using namespace bcos::protocol; + +bool TarsGroupManager::updateGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + auto ret = GroupManager::updateGroupInfo(_groupInfo); + if (ret) + { + m_groupStatusUpdater->restart(); + } + return ret; +} + +void TarsGroupManager::updateGroupStatus() +{ + m_groupStatusUpdater->restart(); + auto unreachableNodes = checkNodeStatus(); + if (unreachableNodes.size() == 0) + { + return; + } + removeUnreachableNodeService(unreachableNodes); + removeGroupBlockInfo(unreachableNodes); +} + +std::map> TarsGroupManager::checkNodeStatus() +{ + ReadGuard l(x_nodeServiceList); + // groupID => {unreachableNodes} + std::map> unreachableNodes; + for (auto const& it : m_groupInfos) + { + bool groupInfoUpdated = false; + auto groupInfo = it.second; + auto groupID = groupInfo->groupID(); + auto const& groupNodeList = groupInfo->nodeInfos(); + for (auto const& nodeInfo : groupNodeList) + { + if (!m_nodeServiceList.count(groupID) || + !m_nodeServiceList[groupID].count(nodeInfo.first) || + m_nodeServiceList[groupID][nodeInfo.first]->unreachable()) + { + unreachableNodes[groupID].insert(nodeInfo.first); + groupInfoUpdated = true; + continue; + } + } + // notify the updated groupInfo to the sdk + if (m_groupInfoNotifier && groupInfoUpdated) + { + m_groupInfoNotifier(groupInfo); + } + } + return unreachableNodes; +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.h b/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.h new file mode 100644 index 0000000..81c4487 --- /dev/null +++ b/bcos-rpc/bcos-rpc/groupmgr/TarsGroupManager.h @@ -0,0 +1,63 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief TarsGroupManager + * @file TarsGroupManager.h + * @author: yujiechen + * @date 2021-10-11 + */ +#pragma once +#include "GroupManager.h" +#include "NodeService.h" +#include +namespace bcos +{ +namespace rpc +{ +class TarsGroupManager : public GroupManager +{ +public: + using Ptr = std::shared_ptr; + TarsGroupManager(std::string _rpcServiceName, std::string const& _chainID, + NodeServiceFactory::Ptr _nodeServiceFactory, bcos::tool::NodeConfig::Ptr _nodeConfig) + : GroupManager(_rpcServiceName, _chainID, _nodeServiceFactory, _nodeConfig) + { + m_groupStatusUpdater = std::make_shared(c_tarsAdminRefreshTime, "gmrTimer"); + m_groupStatusUpdater->start(); + m_groupStatusUpdater->registerTimeoutHandler( + boost::bind(&TarsGroupManager::updateGroupStatus, this)); + } + virtual ~TarsGroupManager() + { + if (m_groupStatusUpdater) + { + m_groupStatusUpdater->stop(); + } + } + + bool updateGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) override; + +protected: + virtual void updateGroupStatus(); + virtual std::map> checkNodeStatus(); + +protected: + std::shared_ptr m_groupStatusUpdater; + // Note: since tars need at-least 1min to update the endpoint info, we schedule + // updateGroupStatus every 1min + uint64_t c_tarsAdminRefreshTime = 60 * 1000; +}; +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/jsonrpc/Common.h b/bcos-rpc/bcos-rpc/jsonrpc/Common.h new file mode 100644 index 0000000..219e402 --- /dev/null +++ b/bcos-rpc/bcos-rpc/jsonrpc/Common.h @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-07-02 + */ +#pragma once + +#include +#include +#include +#include + +#define RPC_IMPL_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPC][JSONRPC]" + +namespace bcos +{ +namespace rpc +{ +struct NodeInfo +{ + std::string version; + std::string supportedVersion; + std::string nodeID; + std::string chainID; + std::string groupID; + std::string agency; + std::string buildTime; + std::string gitCommitHash; + bool isWasm; + bool isSM; +}; + +class JsonRpcException : public std::exception +{ +public: + JsonRpcException(int32_t _code, std::string const& _msg) : m_code(_code), m_msg(_msg) {} + const char* what() const noexcept override { return m_msg.c_str(); } + +public: + int32_t code() const noexcept { return m_code; } + std::string msg() const noexcept { return m_msg; } + +private: + int32_t m_code; + std::string m_msg; +}; + +enum JsonRpcError : int32_t +{ + ParseError = -32700, + InvalidRequest = -32600, + MethodNotFound = -32601, + InvalidParams = -32602, + InternalError = -32603, + // -32000 to -32099: Server error Reserved for implementation-defined server-errors. + NodeNotExistOrNotStarted = -32000, + GroupAlreadyExists = -32001, + NodeAlreadyExists = -32002, + OperationNotAllowed = -32003, + ServiceNotInitCompleted = -32004, + GroupNotExist = -32005, +}; + +struct JsonRequest +{ + std::string jsonrpc; + std::string method; + int64_t id; + Json::Value params; +}; + +struct JsonResponse +{ + struct Error + { + int32_t code{0}; + std::string message{"success"}; + + std::string toString() const + { + return "{\"code\":" + std::to_string(code) + "\"message\":" + message + "}"; + } + }; + std::string jsonrpc; + int64_t id; + Error error; + Json::Value result; +}; + +inline Json::Value generateResponse(Error::Ptr _error) +{ + Json::Value response; + response["code"] = _error ? _error->errorCode() : 0; + response["msg"] = _error ? _error->errorMessage() : "success"; + return response; +} + +inline void nodeInfoToJson(Json::Value& _response, bcos::group::ChainNodeInfo::Ptr _nodeInfo) +{ + _response["name"] = _nodeInfo->nodeName(); + _response["nodeID"] = _nodeInfo->nodeID(); + _response["type"] = _nodeInfo->nodeCryptoType(); + _response["microService"] = _nodeInfo->microService(); + _response["iniConfig"] = _nodeInfo->iniConfig(); + // set deployInfo + _response["serviceInfo"] = Json::Value(Json::arrayValue); + auto const& infos = _nodeInfo->serviceInfo(); + for (auto const& it : infos) + { + Json::Value item; + item["type"] = it.first; + item["serviceName"] = it.second; + _response["serviceInfo"].append(item); + } + // set protocol info + auto protocol = _nodeInfo->nodeProtocol(); + Json::Value protocolResponse; + protocolResponse["minSupportedVersion"] = protocol->minVersion(); + protocolResponse["maxSupportedVersion"] = protocol->maxVersion(); + protocolResponse["compatibilityVersion"] = _nodeInfo->compatibilityVersion(); + _response["protocol"] = protocolResponse; +} + +inline void groupInfoToJson(Json::Value& _response, bcos::group::GroupInfo::Ptr _groupInfo) +{ + _response["chainID"] = _groupInfo->chainID(); + _response["groupID"] = _groupInfo->groupID(); + _response["genesisConfig"] = _groupInfo->genesisConfig(); + _response["iniConfig"] = _groupInfo->iniConfig(); + _response["nodeList"] = Json::Value(Json::arrayValue); + auto nodeInfos = _groupInfo->nodeInfos(); + for (auto const& it : nodeInfos) + { + Json::Value nodeInfoResponse; + nodeInfoToJson(nodeInfoResponse, it.second); + _response["nodeList"].append(nodeInfoResponse); + } +} + +inline void groupInfoListToJson( + Json::Value& _response, const std::vector _groupInfoList) +{ + for (const auto& groupInfo : _groupInfoList) + { + Json::Value item; + groupInfoToJson(item, groupInfo); + _response.append(item); + } +} +} // namespace rpc +} // namespace bcos \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.cpp b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.cpp new file mode 100644 index 0000000..deaddf0 --- /dev/null +++ b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.cpp @@ -0,0 +1,1352 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: implement for the RPC + * @file: JsonRpcImpl_2_0.h + * @author: octopus + * @date: 2021-07-09 + */ +#include "bcos-crypto/ChecksumAddress.h" +#include "bcos-crypto/interfaces/crypto/CommonType.h" +#include "bcos-crypto/interfaces/crypto/Hash.h" +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::group; +using namespace boost::iterators; +using namespace boost::archive::iterators; + +JsonRpcImpl_2_0::JsonRpcImpl_2_0(GroupManager::Ptr _groupManager, + bcos::gateway::GatewayInterface::Ptr _gatewayInterface, + std::shared_ptr _wsService) + : m_groupManager(_groupManager), m_gatewayInterface(_gatewayInterface), m_wsService(_wsService) +{ + m_wsService->registerMsgHandler(bcos::protocol::MessageType::RPC_REQUEST, + boost::bind(&JsonRpcImpl_2_0::handleRpcRequest, this, boost::placeholders::_1, + boost::placeholders::_2)); +} + +void JsonRpcImpl_2_0::handleRpcRequest( + std::shared_ptr _msg, std::shared_ptr _session) +{ + auto buffer = _msg->payload(); + auto req = std::string_view((const char*)buffer->data(), buffer->size()); + + auto start = std::chrono::high_resolution_clock::now(); + auto endpoint = _session->endPoint(); + auto seq = _msg->seq(); + auto version = _msg->version(); + auto ext = _msg->ext(); + + auto weakptrSession = std::weak_ptr(_session); + auto messageFactory = m_wsService->messageFactory(); + + onRPCRequest(req, [ext, seq, version, weakptrSession, messageFactory, start](bcos::bytes resp) { + auto session = weakptrSession.lock(); + + auto end = std::chrono::high_resolution_clock::now(); + auto total = std::chrono::duration_cast(end - start).count(); + + if (!session) + { + BCOS_LOG(TRACE) << LOG_DESC("[RPC][FACTORY][buildJsonRpc]") + << LOG_DESC("unable to send response for session has been destroyed") + << LOG_KV("seq", seq) << LOG_KV("totalTime", total); + return; + } + + if (session->isConnected()) + { + // TODO: no need to copy resp + auto buffer = std::make_shared(std::move(resp)); + + auto msg = messageFactory->buildMessage(); + msg->setPayload(buffer); + msg->setVersion(version); + msg->setSeq(seq); + msg->setExt(ext); + session->asyncSendMessage(msg); + } + else + { + BCOS_LOG(TRACE) << LOG_DESC("[RPC][FACTORY][buildJsonRpc]") + << LOG_DESC("unable to send response for session has been inactive") + << LOG_KV("seq", seq) << LOG_KV("totalTime", total) + << LOG_KV("endpoint", session->endPoint()) + << LOG_KV("refCount", session.use_count()); + } + }); +} + +bcos::bytes JsonRpcImpl_2_0::decodeData(std::string_view _data) +{ + auto begin = _data.begin(); + auto end = _data.end(); + auto length = _data.size(); + + if ((length == 0) || (length % 2 != 0)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"Unexpect hex string"}); + } + + if (*begin == '0' && *(begin + 1) == 'x') + { + begin += 2; + length -= 2; + } + + bcos::bytes data; + data.reserve(length / 2); + boost::algorithm::unhex(begin, end, std::back_inserter(data)); + return data; +} + +void JsonRpcImpl_2_0::parseRpcResponseJson( + std::string_view _responseBody, JsonResponse& _jsonResponse) +{ + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + + try + { + do + { + if (!jsonReader.parse(_responseBody.begin(), _responseBody.end(), root)) + { + errorMessage = "invalid response json object"; + break; + } + + if (!root.isMember("jsonrpc")) + { + errorMessage = "response has no jsonrpc field"; + break; + } + _jsonResponse.jsonrpc = root["jsonrpc"].asString(); + + if (!root.isMember("id")) + { + errorMessage = "response has no id field"; + break; + } + _jsonResponse.id = root["id"].asInt64(); + + if (root.isMember("error")) + { + auto jError = root["error"]; + _jsonResponse.error.code = jError["code"].asInt64(); + _jsonResponse.error.message = jError["message"].asString(); + } + + if (root.isMember("result")) + { + _jsonResponse.result = root["result"]; + } + + RPC_IMPL_LOG(TRACE) << LOG_BADGE("parseRpcResponseJson") + << LOG_KV("jsonrpc", _jsonResponse.jsonrpc) + << LOG_KV("id", _jsonResponse.id) + << LOG_KV("error", _jsonResponse.error.toString()) + << LOG_KV("responseBody", _responseBody); + + return; + } while (0); + } + catch (std::exception& e) + { + RPC_IMPL_LOG(ERROR) << LOG_BADGE("parseRpcResponseJson") + << LOG_KV("response", _responseBody) + << LOG_KV("error", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION( + JsonRpcException(JsonRpcError::ParseError, "Invalid JSON was received by the server.")); + } + + RPC_IMPL_LOG(ERROR) << LOG_BADGE("parseRpcResponseJson") << LOG_KV("response", _responseBody) + << LOG_KV("errorMessage", errorMessage); + + BOOST_THROW_EXCEPTION(JsonRpcException( + JsonRpcError::InvalidRequest, "The JSON sent is not a valid Response object.")); +} + +void bcos::rpc::toJsonResp( + Json::Value& jResp, bcos::protocol::Transaction::ConstPtr _transactionPtr) +{ + // transaction version + jResp["version"] = _transactionPtr->version(); + // transaction hash + jResp["hash"] = toHexStringWithPrefix(_transactionPtr->hash()); + // transaction nonce + jResp["nonce"] = _transactionPtr->nonce().str(16); + // blockLimit + jResp["blockLimit"] = _transactionPtr->blockLimit(); + // the receiver address + jResp["to"] = string(_transactionPtr->to()); + // the sender address + jResp["from"] = toHexStringWithPrefix(_transactionPtr->sender()); + // the input data + jResp["input"] = toHexStringWithPrefix(_transactionPtr->input()); + // importTime + jResp["importTime"] = _transactionPtr->importTime(); + // the chainID + jResp["chainID"] = std::string(_transactionPtr->chainId()); + // the groupID + jResp["groupID"] = std::string(_transactionPtr->groupId()); + // the abi + jResp["abi"] = std::string(_transactionPtr->abi()); + // extraData + jResp["extraData"] = std::string(_transactionPtr->extraData()); + // the signature + jResp["signature"] = toHexStringWithPrefix(_transactionPtr->signatureData()); +} + +void bcos::rpc::toJsonResp(Json::Value& jResp, std::string_view _txHash, + protocol::TransactionStatus status, + bcos::protocol::TransactionReceipt const& transactionReceipt, bool _isWasm, + crypto::Hash& hashImpl) +{ + jResp["version"] = transactionReceipt.version(); + std::string contractAddress = string(transactionReceipt.contractAddress()); + + if (!contractAddress.empty() && !_isWasm) + { + std::string checksumContractAddr = contractAddress; + toChecksumAddress(checksumContractAddr, hashImpl.hash(contractAddress).hex()); + + if (!contractAddress.starts_with("0x") && !contractAddress.starts_with("0X")) + { + contractAddress = "0x" + contractAddress; + } + + if (!checksumContractAddr.starts_with("0x") && !checksumContractAddr.starts_with("0X")) + { + checksumContractAddr = "0x" + checksumContractAddr; + } + + jResp["contractAddress"] = contractAddress; + jResp["checksumContractAddress"] = checksumContractAddr; + } + else + { + jResp["contractAddress"] = contractAddress; + jResp["checksumContractAddress"] = contractAddress; + } + + jResp["gasUsed"] = transactionReceipt.gasUsed().str(16); + jResp["status"] = transactionReceipt.status(); + jResp["blockNumber"] = transactionReceipt.blockNumber(); + jResp["output"] = toHexStringWithPrefix(transactionReceipt.output()); + jResp["message"] = transactionReceipt.message(); + jResp["transactionHash"] = std::string(_txHash); + + if (status == protocol::TransactionStatus::None) + { + jResp["hash"] = transactionReceipt.hash().hexPrefixed(); + } + else + { + jResp["hash"] = "0x"; + } + + jResp["logEntries"] = Json::Value(Json::arrayValue); + for (const auto& logEntry : transactionReceipt.logEntries()) + { + Json::Value jLog; + jLog["address"] = std::string(logEntry.address()); + jLog["topics"] = Json::Value(Json::arrayValue); + for (const auto& topic : logEntry.topics()) + { + jLog["topics"].append(topic.hexPrefixed()); + } + jLog["data"] = toHexStringWithPrefix(logEntry.data()); + jResp["logEntries"].append(jLog); + } +} + + +void bcos::rpc::toJsonResp(Json::Value& jResp, bcos::protocol::BlockHeader::Ptr _blockHeaderPtr) +{ + if (!_blockHeaderPtr) + { + return; + } + + jResp["hash"] = toHexStringWithPrefix(_blockHeaderPtr->hash()); + jResp["version"] = _blockHeaderPtr->version(); + jResp["txsRoot"] = toHexStringWithPrefix(_blockHeaderPtr->txsRoot()); + jResp["receiptsRoot"] = toHexStringWithPrefix(_blockHeaderPtr->receiptsRoot()); + jResp["stateRoot"] = toHexStringWithPrefix(_blockHeaderPtr->stateRoot()); + jResp["number"] = _blockHeaderPtr->number(); + jResp["gasUsed"] = _blockHeaderPtr->gasUsed().str(16); + jResp["timestamp"] = _blockHeaderPtr->timestamp(); + jResp["sealer"] = _blockHeaderPtr->sealer(); + jResp["extraData"] = toHexStringWithPrefix(_blockHeaderPtr->extraData()); + + jResp["consensusWeights"] = Json::Value(Json::arrayValue); + for (const auto& wei : _blockHeaderPtr->consensusWeights()) + { + jResp["consensusWeights"].append(wei); + } + + jResp["sealerList"] = Json::Value(Json::arrayValue); + for (const auto& sealer : _blockHeaderPtr->sealerList()) + { + jResp["sealerList"].append(toHexStringWithPrefix(sealer)); + } + + Json::Value jParentInfo(Json::arrayValue); + for (const auto& p : _blockHeaderPtr->parentInfo()) + { + Json::Value jp; + jp["blockNumber"] = p.blockNumber; + jp["blockHash"] = toHexStringWithPrefix(p.blockHash); + jParentInfo.append(jp); + } + jResp["parentInfo"] = jParentInfo; + + Json::Value jSignList(Json::arrayValue); + for (const auto& sign : _blockHeaderPtr->signatureList()) + { + Json::Value jSign; + jSign["sealerIndex"] = sign.index; + jSign["signature"] = toHexStringWithPrefix(sign.signature); + jSignList.append(jSign); + } + jResp["signatureList"] = jSignList; +} + +void bcos::rpc::toJsonResp(Json::Value& jResp, bcos::protocol::Block& block, bool _onlyTxHash) +{ + // header + toJsonResp(jResp, block.blockHeader()); + auto txSize = _onlyTxHash ? block.transactionsMetaDataSize() : block.transactionsSize(); + + Json::Value jTxs(Json::arrayValue); + for (std::size_t index = 0; index < txSize; ++index) + { + Json::Value jTx; + if (_onlyTxHash) + { + // Note: should not call transactionHash for in the common cases transactionHash maybe + // empty + jTx = toHexStringWithPrefix(block.transactionMetaData(index)->hash()); + } + else + { + toJsonResp(jTx, block.transaction(index)); + } + jTxs.append(jTx); + } + + jResp["transactions"] = jTxs; +} + +void JsonRpcImpl_2_0::call(std::string_view _groupID, std::string_view _nodeName, + std::string_view _to, std::string_view _data, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("call") << LOG_KV("to", _to) << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName) << LOG_KV("data", _data); + + auto nodeService = getNodeService(_groupID, _nodeName, "call"); + auto transactionFactory = nodeService->blockFactory()->transactionFactory(); + auto transaction = transactionFactory->createTransaction( + 0, std::string(_to), decodeData(_data), u256(0), 0, std::string(), std::string(), 0); + nodeService->scheduler()->call(std::move(transaction), + [m_to = std::string(_to), m_respFunc = std::move(_respFunc)]( + Error::Ptr&& _error, protocol::TransactionReceipt::Ptr&& _transactionReceiptPtr) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp["blockNumber"] = _transactionReceiptPtr->blockNumber(); + jResp["status"] = _transactionReceiptPtr->status(); + jResp["output"] = toHexStringWithPrefix(_transactionReceiptPtr->output()); + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("call") << LOG_KV("to", m_to) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::sendTransaction(std::string_view groupID, std::string_view nodeName, + std::string_view data, bool requireProof, RespFunc respFunc) +{ + task::wait( + [](JsonRpcImpl_2_0* self, std::string_view groupID, std::string_view nodeName, + std::string_view data, bool requireProof, RespFunc respFunc) -> task::Task { + auto nodeService = self->getNodeService(groupID, nodeName, "sendTransaction"); + + auto txpool = nodeService->txpool(); + if (!txpool) [[unlikely]] + { + BOOST_THROW_EXCEPTION( + JsonRpcException(JsonRpcError::InternalError, "TXPool not available!")); + } + + auto groupInfo = self->m_groupManager->getGroupInfo(groupID); + if (!groupInfo) [[unlikely]] + { + BOOST_THROW_EXCEPTION(JsonRpcException(JsonRpcError::GroupNotExist, + "The group " + std::string(groupID) + " does not exist!")); + } + + + Json::Value jResp; + try + { + auto isWasm = groupInfo->wasm(); + auto transactionData = decodeData(data); + auto transaction = nodeService->blockFactory()->transactionFactory()->createTransaction( + bcos::ref(transactionData), false, true); + + if (c_fileLogLevel <= TRACE) + { + RPC_IMPL_LOG(TRACE) << LOG_DESC("sendTransaction") << LOG_KV("group", groupID) + << LOG_KV("node", nodeName) << LOG_KV("isWasm", isWasm); + } + + std::string extraData = std::string(transaction->extraData()); + auto start = utcSteadyTime(); + co_await txpool->broadcastPushTransaction(*transaction); + auto submitResult = co_await txpool->submitTransaction(transaction); + + auto txHash = submitResult->txHash(); + auto hexPreTxHash = txHash.hexPrefixed(); + auto status = submitResult->status(); + + auto totalTime = utcSteadyTime() - start; // ms + if (c_fileLogLevel <= TRACE) + { + RPC_IMPL_LOG(TRACE) + << LOG_BADGE("sendTransaction") << LOG_DESC("submit callback") + << LOG_KV("hexPreTxHash", hexPreTxHash) + << LOG_KV("status", status) + << LOG_KV("requireProof", requireProof) << LOG_KV("txCostTime", totalTime); + } + + toJsonResp(jResp, hexPreTxHash, (protocol::TransactionStatus)submitResult->status(), + *(submitResult->transactionReceipt()), isWasm, + *(nodeService->blockFactory()->cryptoSuite()->hashImpl())); + jResp["to"] = submitResult->to(); + jResp["from"] = toHexStringWithPrefix(submitResult->sender()); + jResp["extraData"] = extraData; + + // TODO: check if needed + // jResp["input"] = toHexStringWithPrefix(transaction->input()); + + respFunc(nullptr, jResp); + } + catch (bcos::Error& e) + { + auto info = boost::diagnostic_information(e); + if (e.errorCode() == (int64_t)bcos::protocol::TransactionStatus::TxPoolIsFull) + { + RPC_IMPL_LOG(DEBUG) << "sendTransaction error" + << LOG_KV("errCode", e.errorCode()) << LOG_KV("msg", info); + } + else + { + RPC_IMPL_LOG(WARNING) << "sendTransaction error" + << LOG_KV("errCode", e.errorCode()) << LOG_KV("msg", info); + } + respFunc(std::make_shared(std::move(e)), jResp); + } + catch (std::exception& e) + { + auto info = boost::diagnostic_information(e); + RPC_IMPL_LOG(WARNING) << "RPC common error: " << info; + respFunc(std::make_shared(-1, std::move(info)), jResp); + } + }(this, groupID, nodeName, data, requireProof, std::move(respFunc))); +} + + +void JsonRpcImpl_2_0::addProofToResponse( + Json::Value& jResp, const std::string& _key, ledger::MerkleProofPtr _merkleProofPtr) +{ + if (!_merkleProofPtr) + { + return; + } + + RPC_IMPL_LOG(TRACE) << LOG_DESC("addProofToResponse") << LOG_KV("key", _key) + << LOG_KV("key", _key) << LOG_KV("merkleProofPtr", _merkleProofPtr->size()); + + uint32_t index = 0; + jResp[_key] = Json::arrayValue; + std::for_each(_merkleProofPtr->begin(), _merkleProofPtr->end(), + [&jResp, &_key](const auto& item) { jResp[_key].append(item.hex()); }); +} + +void JsonRpcImpl_2_0::getTransaction(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getTransaction") << LOG_KV("txHash", _txHash) + << LOG_KV("requireProof", _requireProof) << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto hashListPtr = std::make_shared(); + + // TODO: Error hash here, need hex2bin + hashListPtr->push_back(bcos::crypto::HashType(_txHash, bcos::crypto::HashType::FromHex)); + + auto nodeService = getNodeService(_groupID, _nodeName, "getTransaction"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetBatchTxsByHashList(hashListPtr, _requireProof, + [m_txHash = std::string(_txHash), _requireProof, m_respFunc = std::move(_respFunc)]( + Error::Ptr _error, bcos::protocol::TransactionsPtr _transactionsPtr, + std::shared_ptr> _transactionProofsPtr) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + if (!_transactionsPtr->empty()) + { + auto transactionPtr = (*_transactionsPtr)[0]; + toJsonResp(jResp, transactionPtr); + } + + RPC_IMPL_LOG(TRACE) + << LOG_DESC("getTransaction") << LOG_KV("txHash", m_txHash) + << LOG_KV("requireProof", _requireProof) + << LOG_KV("transactionProofsPtr size", + (_transactionProofsPtr ? (int64_t)_transactionProofsPtr->size() : -1)); + + + if (_requireProof && _transactionProofsPtr && !_transactionProofsPtr->empty()) + { + auto transactionProofPtr = _transactionProofsPtr->begin()->second; + // for compatibility + addProofToResponse( + jResp, "transactionProof", std::make_shared()); + addProofToResponse(jResp, "txProof", transactionProofPtr); + } + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getTransaction") << LOG_KV("txHash", m_txHash) + << LOG_KV("requireProof", _requireProof) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getTransactionReceipt(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getTransactionReceipt") << LOG_KV("txHash", _txHash) + << LOG_KV("requireProof", _requireProof) << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto hash = bcos::crypto::HashType(_txHash, bcos::crypto::HashType::FromHex); + + auto nodeService = getNodeService(_groupID, _nodeName, "getTransactionReceipt"); + auto ledger = nodeService->ledger(); + + checkService(ledger, "ledger"); + auto hashImpl = nodeService->blockFactory()->cryptoSuite()->hashImpl(); + + auto groupInfo = m_groupManager->getGroupInfo(_groupID); + if (!groupInfo) + { + BOOST_THROW_EXCEPTION(JsonRpcException(JsonRpcError::GroupNotExist, + "The group " + std::string(_groupID) + " does not exist!")); + } + + bool isWasm = groupInfo->wasm(); + + auto self = std::weak_ptr(shared_from_this()); + ledger->asyncGetTransactionReceiptByHash(hash, _requireProof, + [m_group = std::string(_groupID), m_nodeName = std::string(_nodeName), + m_txHash = std::string(_txHash), hash, _requireProof, m_respFunc = std::move(_respFunc), + self, hashImpl, isWasm](Error::Ptr _error, + protocol::TransactionReceipt::ConstPtr _transactionReceiptPtr, + ledger::MerkleProofPtr _merkleProofPtr) { + auto rpc = self.lock(); + if (!rpc) + { + return; + } + Json::Value jResp; + if (_error && (_error->errorCode() != bcos::protocol::CommonError::SUCCESS)) + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getTransactionReceipt") << LOG_KV("txHash", m_txHash) + << LOG_KV("requireProof", _requireProof) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + + m_respFunc(_error, jResp); + return; + } + + toJsonResp(jResp, hash.hexPrefixed(), protocol::TransactionStatus::None, + *_transactionReceiptPtr, isWasm, *hashImpl); + + RPC_IMPL_LOG(TRACE) << LOG_DESC("getTransactionReceipt") << LOG_KV("txHash", m_txHash) + << LOG_KV("requireProof", _requireProof) + << LOG_KV("merkleProofPtr", _merkleProofPtr); + + if (_requireProof && _merkleProofPtr) + { + addProofToResponse(jResp, "receiptProof", std::make_shared()); + // for compatibility + addProofToResponse(jResp, "txReceiptProof", _merkleProofPtr); + } + + // fetch transaction proof + rpc->getTransaction(m_group, m_nodeName, m_txHash, _requireProof, + [m_jResp = std::move(jResp), m_txHash, m_respFunc = std::move(m_respFunc)]( + bcos::Error::Ptr _error, Json::Value& _jTx) mutable { + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + RPC_IMPL_LOG(WARNING) + << LOG_BADGE("getTransactionReceipt") << LOG_DESC("getTransaction") + << LOG_KV("hexPreTxHash", m_txHash) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + m_jResp["input"] = _jTx["input"]; + m_jResp["from"] = _jTx["from"]; + m_jResp["to"] = _jTx["to"]; + m_jResp["extraData"] = _jTx["extraData"]; + m_jResp["transactionProof"] = _jTx["transactionProof"]; + + m_respFunc(nullptr, m_jResp); + }); + }); +} + +void JsonRpcImpl_2_0::getBlockByHash(std::string_view _groupID, std::string_view _nodeName, + std::string_view _blockHash, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getBlockByHash") << LOG_KV("blockHash", _blockHash) + << LOG_KV("onlyHeader", _onlyHeader) << LOG_KV("onlyTxHash", _onlyTxHash) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getBlockByHash"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + auto self = std::weak_ptr(shared_from_this()); + ledger->asyncGetBlockNumberByHash( + bcos::crypto::HashType(_blockHash, bcos::crypto::HashType::FromHex), + [m_groupID = std::string(_groupID), m_nodeName = std::string(_nodeName), + m_blockHash = std::string(_blockHash), _onlyHeader, _onlyTxHash, + m_respFunc = std::move(_respFunc), + self](Error::Ptr _error, protocol::BlockNumber blockNumber) { + if (!_error || _error->errorCode() == bcos::protocol::CommonError::SUCCESS) + { + auto rpc = self.lock(); + if (rpc) + { + // call getBlockByNumber + return rpc->getBlockByNumber(m_groupID, m_nodeName, blockNumber, _onlyHeader, + _onlyTxHash, std::move(m_respFunc)); + } + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getBlockByHash") << LOG_KV("blockHash", m_blockHash) + << LOG_KV("onlyHeader", _onlyHeader) << LOG_KV("onlyTxHash", _onlyTxHash) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + Json::Value jResp; + m_respFunc(_error, jResp); + } + }); +} + +void JsonRpcImpl_2_0::getBlockByNumber(std::string_view _groupID, std::string_view _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getBlockByNumber") << LOG_KV("_blockNumber", _blockNumber) + << LOG_KV("onlyHeader", _onlyHeader) << LOG_KV("onlyTxHash", _onlyTxHash) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getBlockByNumber"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + auto flag = _onlyHeader ? + bcos::ledger::HEADER : + (_onlyTxHash ? bcos::ledger::HEADER | bcos::ledger::TRANSACTIONS_HASH : + bcos::ledger::HEADER | bcos::ledger::TRANSACTIONS); + ledger->asyncGetBlockDataByNumber(_blockNumber, flag, + [_blockNumber, _onlyHeader, _onlyTxHash, m_respFunc = std::move(_respFunc)]( + Error::Ptr _error, protocol::Block::Ptr _block) { + Json::Value jResp; + if (_error && _error->errorCode() != bcos::protocol::CommonError::SUCCESS) + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getBlockByNumber") << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("onlyHeader", _onlyHeader) << LOG_KV("onlyTxHash", _onlyTxHash) + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + else + { + if (_onlyHeader) + { + toJsonResp(jResp, _block ? _block->blockHeader() : nullptr); + } + else + { + toJsonResp(jResp, *_block, _onlyTxHash); + } + } + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getBlockHashByNumber( + std::string_view _groupID, std::string_view _nodeName, int64_t _blockNumber, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getBlockHashByNumber") << LOG_KV("blockNumber", _blockNumber) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getBlockHashByNumber"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetBlockHashByNumber(_blockNumber, + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, crypto::HashType const& _hashValue) { + if (_error && (_error->errorCode() != bcos::protocol::CommonError::SUCCESS)) + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getBlockHashByNumber") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + Json::Value jResp = _hashValue.hexPrefixed(); + m_respFunc(nullptr, jResp); + }); +} + +void JsonRpcImpl_2_0::getBlockNumber( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getBlockNumber") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getBlockNumber"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetBlockNumber( + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, protocol::BlockNumber _blockNumber) { + if (_error && (_error->errorCode() != bcos::protocol::CommonError::SUCCESS)) + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getBlockNumber") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success") + << LOG_KV("blockNumber", _blockNumber); + } + + Json::Value jResp = _blockNumber; + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getCode(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _callback) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getCode") << LOG_KV("contractAddress", _contractAddress) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getCode"); + + auto groupInfo = m_groupManager->getGroupInfo(_groupID); + if (!groupInfo) [[unlikely]] + { + BOOST_THROW_EXCEPTION(JsonRpcException(JsonRpcError::GroupNotExist, + "The group " + std::string(_groupID) + " does not exist!")); + } + + auto isWasm = groupInfo->wasm(); + // trim 0x prefix for solidity contract + if (!isWasm && (_contractAddress.starts_with("0x") || _contractAddress.starts_with("0X"))) + { + _contractAddress = _contractAddress.substr(2); + } + + auto lowerAddress = boost::to_lower_copy(std::string(_contractAddress)); + + auto scheduler = nodeService->scheduler(); + scheduler->getCode(std::string_view(lowerAddress), + [lowerAddress, callback = std::move(_callback)](Error::Ptr _error, bcos::bytes _codeData) { + std::string code; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + if (!_codeData.empty()) + { + code = toHexStringWithPrefix( + bcos::bytesConstRef(_codeData.data(), _codeData.size())); + } + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getCode") << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success") + << LOG_KV("contractAddress", lowerAddress); + } + + Json::Value jResp = std::move(code); + callback(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getABI(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _callback) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getABI") << LOG_KV("contractAddress", _contractAddress) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getABI"); + + auto groupInfo = m_groupManager->getGroupInfo(_groupID); + if (!groupInfo) [[unlikely]] + { + BOOST_THROW_EXCEPTION(JsonRpcException(JsonRpcError::GroupNotExist, + "The group " + std::string(_groupID) + " does not exist!")); + } + + auto isWasm = groupInfo->wasm(); + // trim 0x prefix for solidity contract address + if (!isWasm && (_contractAddress.starts_with("0x") || _contractAddress.starts_with("0X"))) + { + _contractAddress = _contractAddress.substr(2); + } + + + auto lowerAddress = boost::to_lower_copy(std::string(_contractAddress)); + + auto scheduler = nodeService->scheduler(); + scheduler->getABI(std::string_view(lowerAddress), + [lowerAddress, callback = std::move(_callback)](Error::Ptr _error, std::string _abi) { + if (_error) + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getABI") << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success") + << LOG_KV("contractAddress", lowerAddress); + } + Json::Value jResp = _abi; + callback(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getSealerList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getSealerList") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getSealerList"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetNodeListByType( + bcos::ledger::CONSENSUS_SEALER, [m_respFunc = std::move(_respFunc)](Error::Ptr _error, + consensus::ConsensusNodeListPtr _consensusNodeListPtr) { + Json::Value jResp = Json::Value(Json::arrayValue); + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + if (_consensusNodeListPtr) + { + for (const auto& consensusNodePtr : *_consensusNodeListPtr) + { + Json::Value node; + node["nodeID"] = consensusNodePtr->nodeID()->hex(); + node["weight"] = consensusNodePtr->weight(); + jResp.append(node); + } + } + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getSealerList") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getObserverList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getObserverList") << LOG_KV("group", _groupID) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getObserverList"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetNodeListByType(bcos::ledger::CONSENSUS_OBSERVER, + [m_respFunc = std::move(_respFunc)]( + Error::Ptr _error, consensus::ConsensusNodeListPtr _consensusNodeListPtr) { + Json::Value jResp = Json::Value(Json::arrayValue); + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + if (_consensusNodeListPtr) + { + for (const auto& consensusNodePtr : *_consensusNodeListPtr) + { + jResp.append(consensusNodePtr->nodeID()->hex()); + } + } + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getObserverList") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getPbftView( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getPbftView") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getPbftView"); + auto consensus = nodeService->consensus(); + checkService(consensus, "consensus"); + consensus->asyncGetPBFTView([m_respFunc = std::move(_respFunc)]( + Error::Ptr _error, bcos::consensus::ViewType _viewValue) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp = _viewValue; + } + else + { + RPC_IMPL_LOG(ERROR) << LOG_BADGE("getPbftView") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV( + "errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getPendingTxSize( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getPendingTxSize") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getPendingTxSize"); + auto txpool = nodeService->txpool(); + checkService(txpool, "txpool"); + txpool->asyncGetPendingTransactionSize( + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, size_t _pendingTxSize) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp = (int64_t)_pendingTxSize; + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getPendingTxSize") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getSyncStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getSyncStatus") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getSyncStatus"); + auto sync = nodeService->sync(); + checkService(sync, "sync"); + sync->asyncGetSyncInfo( + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, std::string _syncStatus) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp = _syncStatus; + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getSyncStatus") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getConsensusStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_BADGE("getConsensusStatus") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getConsensusStatus"); + auto consensus = nodeService->consensus(); + checkService(consensus, "consensus"); + consensus->asyncGetConsensusStatus( + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, std::string _consensusStatus) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp = _consensusStatus; + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getConsensusStatus") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getSystemConfigByKey(std::string_view _groupID, std::string_view _nodeName, + std::string_view _keyValue, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getSystemConfigByKey") << LOG_KV("keyValue", _keyValue) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getSystemConfigByKey"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetSystemConfigByKey( + _keyValue, [m_respFunc = std::move(_respFunc)]( + Error::Ptr _error, std::string _value, protocol::BlockNumber _blockNumber) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp["blockNumber"] = _blockNumber; + jResp["value"] = _value; + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("asyncGetSystemConfigByKey") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +void JsonRpcImpl_2_0::getTotalTransactionCount( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getTotalTransactionCount") << LOG_KV("group", _groupID) + << LOG_KV("node", _nodeName); + + auto nodeService = getNodeService(_groupID, _nodeName, "getTotalTransactionCount"); + auto ledger = nodeService->ledger(); + checkService(ledger, "ledger"); + ledger->asyncGetTotalTransactionCount( + [m_respFunc = std::move(_respFunc)](Error::Ptr _error, int64_t _totalTxCount, + int64_t _failedTxCount, protocol::BlockNumber _latestBlockNumber) { + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + jResp["blockNumber"] = _latestBlockNumber; + jResp["transactionCount"] = _totalTxCount; + jResp["failedTransactionCount"] = _failedTxCount; + } + else + { + RPC_IMPL_LOG(ERROR) + << LOG_BADGE("getTotalTransactionCount") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} +void JsonRpcImpl_2_0::getPeers(RespFunc _respFunc) +{ + RPC_IMPL_LOG(TRACE) << LOG_DESC("getPeers"); + auto self = std::weak_ptr(shared_from_this()); + m_gatewayInterface->asyncGetPeers([m_respFunc = std::move(_respFunc), self](Error::Ptr _error, + bcos::gateway::GatewayInfo::Ptr _localP2pInfo, + bcos::gateway::GatewayInfosPtr _peersInfo) { + auto rpc = self.lock(); + if (!rpc) + { + return; + } + Json::Value jResp; + if (!_error || (_error->errorCode() == bcos::protocol::CommonError::SUCCESS)) + { + rpc->gatewayInfoToJson(jResp, _localP2pInfo, _peersInfo); + } + else + { + RPC_IMPL_LOG(ERROR) << LOG_BADGE("getPeers") + << LOG_KV("errorCode", _error ? _error->errorCode() : 0) + << LOG_KV( + "errorMessage", _error ? _error->errorMessage() : "success"); + } + + m_respFunc(_error, jResp); + }); +} + +NodeService::Ptr JsonRpcImpl_2_0::getNodeService( + std::string_view _groupID, std::string_view _nodeName, std::string_view _command) +{ + auto nodeService = m_groupManager->getNodeService(_groupID, _nodeName); + if (!nodeService) + { + std::stringstream errorMsg; + errorMsg << LOG_DESC( + "Invalid request for the specified node of doesn't exist or doesn't " + "started!") + << LOG_KV("request", _command) << LOG_KV("chain", m_groupManager->chainID()) + << LOG_KV("group", _groupID) << LOG_KV("node", _nodeName); + RPC_IMPL_LOG(WARNING) << errorMsg.str(); + BOOST_THROW_EXCEPTION( + JsonRpcException(JsonRpcError::NodeNotExistOrNotStarted, errorMsg.str())); + } + return nodeService; +} + +// get all the groupID list +void JsonRpcImpl_2_0::getGroupList(RespFunc _respFunc) +{ + auto response = generateResponse(nullptr); + auto groupList = m_groupManager->groupList(); + for (auto const& it : groupList) + { + response["groupList"].append(it); + } + _respFunc(nullptr, response); +} + +// get the group information of the given group +void JsonRpcImpl_2_0::getGroupInfo(std::string_view _groupID, RespFunc _respFunc) +{ + auto groupInfo = m_groupManager->getGroupInfo(_groupID); + Json::Value response; + if (groupInfo) + { + // can only recover the deleted group + groupInfoToJson(response, groupInfo); + } + _respFunc(nullptr, response); +} + +// get all the group info list +void JsonRpcImpl_2_0::getGroupInfoList(RespFunc _respFunc) +{ + auto groupInfoList = m_groupManager->groupInfoList(); + Json::Value response(Json::arrayValue); + groupInfoListToJson(response, groupInfoList); + _respFunc(nullptr, response); +} + +void JsonRpcImpl_2_0::getGroupBlockNumber(RespFunc _respFunc) +{ + Json::Value response(Json::arrayValue); + auto groupInfoList = m_groupManager->groupInfoList(); + for (auto groupInfo : groupInfoList) + { + auto blockNumber = m_groupManager->getBlockNumberByGroup(groupInfo->groupID()); + if (blockNumber < 0) + { + RPC_IMPL_LOG(WARNING) << LOG_BADGE("getGroupBlockNumber") + << LOG_DESC("getBlockNumberByGroup failed") + << LOG_KV("groupID", groupInfo->groupID()); + continue; + } + + Json::Value jValue; + jValue[groupInfo->groupID()] = blockNumber; + response.append(jValue); + } + + _respFunc(nullptr, response); +} + +// get the information of a given node +void JsonRpcImpl_2_0::getGroupNodeInfo( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) +{ + auto nodeInfo = m_groupManager->getNodeInfo(_groupID, _nodeName); + Json::Value response; + // hit the cache, response directly + if (nodeInfo) + { + nodeInfoToJson(response, nodeInfo); + } + _respFunc(nullptr, response); +} +void JsonRpcImpl_2_0::gatewayInfoToJson( + Json::Value& _response, bcos::gateway::GatewayInfo::Ptr _gatewayInfo) +{ + auto p2pInfo = _gatewayInfo->p2pInfo(); + _response["p2pNodeID"] = p2pInfo.p2pID; + if (!p2pInfo.nodeIPEndpoint.address().empty()) + { + _response["endPoint"] = + p2pInfo.nodeIPEndpoint.address() + ":" + std::to_string(p2pInfo.nodeIPEndpoint.port()); + } + // set the groupNodeIDInfo + auto groupNodeIDInfo = _gatewayInfo->nodeIDInfo(); + Json::Value groupInfo(Json::arrayValue); + for (auto const& it : groupNodeIDInfo) + { + Json::Value item; + item["group"] = it.first; + auto const& nodeIDInfos = it.second; + Json::Value nodeIDInfo(Json::arrayValue); + for (auto const& nodeInfo : nodeIDInfos) + { + nodeIDInfo.append(Json::Value(nodeInfo.first)); + } + item["nodeIDList"] = nodeIDInfo; + groupInfo.append(item); + } + _response["groupNodeIDInfo"] = groupInfo; +} + +void JsonRpcImpl_2_0::gatewayInfoToJson(Json::Value& _response, + bcos::gateway::GatewayInfo::Ptr _localP2pInfo, bcos::gateway::GatewayInfosPtr _peersInfo) +{ + if (_localP2pInfo) + { + gatewayInfoToJson(_response, _localP2pInfo); + } + if (!_peersInfo) + { + return; + } + Json::Value peersInfo(Json::arrayValue); + for (auto const& it : *_peersInfo) + { + Json::Value peerInfo; + gatewayInfoToJson(peerInfo, it); + peersInfo.append(peerInfo); + } + _response["peers"] = peersInfo; +} + +void JsonRpcImpl_2_0::getGroupPeers(Json::Value& _response, std::string_view _groupID, + bcos::gateway::GatewayInfo::Ptr _localP2pInfo, bcos::gateway::GatewayInfosPtr _peersInfo) +{ + _peersInfo->emplace_back(_localP2pInfo); + std::set nodeIDList; + for (auto const& info : *_peersInfo) + { + auto groupNodeIDInfo = info->nodeIDInfo(); + for(auto const& nodeIDInfo : groupNodeIDInfo) + { + auto groupID = nodeIDInfo.first; + auto nodeInfo = nodeIDInfo.second; + for(auto const& peerInfo : nodeInfo) + { + nodeIDList.insert(peerInfo.first); + } + + } + } + + if (nodeIDList.size() == 0) + { + return; + } + for (auto const& nodeID : nodeIDList) + { + _response.append((Json::Value)(nodeID)); + } +} + +void JsonRpcImpl_2_0::getGroupPeers(std::string_view _groupID, RespFunc _respFunc) +{ + auto self = std::weak_ptr(shared_from_this()); + m_gatewayInterface->asyncGetPeers([_respFunc, group = std::string(_groupID), self]( + Error::Ptr _error, + bcos::gateway::GatewayInfo::Ptr _localP2pInfo, + bcos::gateway::GatewayInfosPtr _peersInfo) { + Json::Value jResp(Json::arrayValue); + if (_error) + { + RPC_IMPL_LOG(ERROR) << LOG_BADGE("getGroupPeers") << LOG_KV("code", _error->errorCode()) + << LOG_KV("message", _error->errorMessage()); + _respFunc(_error, jResp); + return; + } + auto rpc = self.lock(); + if (!rpc) + { + return; + } + rpc->getGroupPeers(jResp, std::string_view(group), _localP2pInfo, _peersInfo); + _respFunc(_error, jResp); + }); +} diff --git a/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h new file mode 100644 index 0000000..b959c48 --- /dev/null +++ b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h @@ -0,0 +1,189 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: implement for the RPC + * @file: JsonRpcImpl_2_0.h + * @author: octopus + * @date: 2021-07-09 + */ + +#pragma once +#include "bcos-protocol/TransactionStatus.h" +#include "bcos-rpc/groupmgr/GroupManager.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::rpc +{ +class JsonRpcImpl_2_0 : public JsonRpcInterface, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + JsonRpcImpl_2_0(GroupManager::Ptr _groupManager, + bcos::gateway::GatewayInterface::Ptr _gatewayInterface, + std::shared_ptr _wsService); + ~JsonRpcImpl_2_0() override = default; + + void setClientID(std::string_view _clientID) { m_clientID = _clientID; } + + void call(std::string_view _groupID, std::string_view _nodeName, std::string_view _to, + std::string_view _data, RespFunc _respFunc) override; + + void sendTransaction(std::string_view _groupID, std::string_view _nodeName, + std::string_view _data, bool _requireProof, RespFunc _respFunc) override; + + void getTransaction(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) override; + + void getTransactionReceipt(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) override; + + void getBlockByHash(std::string_view _groupID, std::string_view _nodeName, + std::string_view _blockHash, bool _onlyHeader, bool _onlyTxHash, + RespFunc _respFunc) override; + + void getBlockByNumber(std::string_view _groupID, std::string_view _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) override; + + void getBlockHashByNumber(std::string_view _groupID, std::string_view _nodeName, + int64_t _blockNumber, RespFunc _respFunc) override; + + void getBlockNumber( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getCode(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) override; + + void getABI(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) override; + + void getSealerList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getObserverList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getPbftView( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getPendingTxSize( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getSyncStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getConsensusStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getSystemConfigByKey(std::string_view _groupID, std::string_view _nodeName, + std::string_view _keyValue, RespFunc _respFunc) override; + + void getTotalTransactionCount( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getPeers(RespFunc _respFunc) override; + + // get all the groupID list + void getGroupList(RespFunc _respFunc) override; + // get the group information of the given group + void getGroupInfo(std::string_view _groupID, RespFunc _respFunc) override; + // get all the group info list + void getGroupInfoList(RespFunc _respFunc) override; + // get the information of a given node + void getGroupNodeInfo( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override; + + void getGroupBlockNumber(RespFunc _respFunc) override; + + void setNodeInfo(const NodeInfo& _nodeInfo) { m_nodeInfo = _nodeInfo; } + NodeInfo nodeInfo() const { return m_nodeInfo; } + GroupManager::Ptr groupManager() { return m_groupManager; } + + int sendTxTimeout() const { return m_sendTxTimeout; } + void setSendTxTimeout(int _sendTxTimeout) { m_sendTxTimeout = _sendTxTimeout; } + +protected: + static bcos::bytes decodeData(std::string_view _data); + + static void parseRpcResponseJson(std::string_view _responseBody, JsonResponse& _jsonResponse); + + static void addProofToResponse( + Json::Value& jResp, const std::string& _key, ledger::MerkleProofPtr _merkleProofPtr); + + virtual void handleRpcRequest(std::shared_ptr _msg, + std::shared_ptr _session); + + // TODO: check perf influence + NodeService::Ptr getNodeService( + std::string_view _groupID, std::string_view _nodeName, std::string_view _command); + + template + void checkService(T _service, std::string_view _serviceName) + { + if (!_service) + { + BOOST_THROW_EXCEPTION(JsonRpcException( + JsonRpcError::ServiceNotInitCompleted, "The service " + std::string(_serviceName) + + " has not been initted completed yet!")); + } + } + +private: + void gatewayInfoToJson(Json::Value& _response, bcos::gateway::GatewayInfo::Ptr _gatewayInfo); + void gatewayInfoToJson(Json::Value& _response, bcos::gateway::GatewayInfo::Ptr _localP2pInfo, + bcos::gateway::GatewayInfosPtr _peersInfo); + void getGroupPeers(Json::Value& _response, std::string_view _groupID, + bcos::gateway::GatewayInfo::Ptr _localP2pInfo, bcos::gateway::GatewayInfosPtr _peersInfo); + void getGroupPeers(std::string_view _groupID, RespFunc _respFunc) override; + + // ms + int m_sendTxTimeout = -1; + + GroupManager::Ptr m_groupManager; + bcos::gateway::GatewayInterface::Ptr m_gatewayInterface; + std::shared_ptr m_wsService; + + NodeInfo m_nodeInfo; + // Note: here clientID must non-empty for the rpc will set clientID as source for the tx for + // tx-notify and the scheduler will not notify the tx-result if the tx source is empty + std::string m_clientID = "localRpc"; + + struct TxHasher + { + size_t hash(const bcos::crypto::HashType& hash) const { return hasher(hash); } + + bool equal(const bcos::crypto::HashType& lhs, const bcos::crypto::HashType& rhs) const + { + return lhs == rhs; + } + + std::hash hasher; + }; +}; + +void toJsonResp(Json::Value& jResp, bcos::protocol::Transaction::ConstPtr _transactionPtr); +void toJsonResp(Json::Value& jResp, bcos::protocol::BlockHeader::Ptr _blockHeaderPtr); +void toJsonResp(Json::Value& jResp, bcos::protocol::Block& block, bool _onlyTxHash); +void toJsonResp(Json::Value& jResp, std::string_view _txHash, protocol::TransactionStatus status, + bcos::protocol::TransactionReceipt const& transactionReceiptPtr, bool _isWasm, + crypto::Hash& hashImpl); + +} // namespace bcos::rpc \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.cpp b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.cpp new file mode 100644 index 0000000..206b511 --- /dev/null +++ b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.cpp @@ -0,0 +1,265 @@ +#include "JsonRpcInterface.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::rpc; + +void JsonRpcInterface::initMethod() +{ + m_methodToFunc["call"] = + std::bind(&JsonRpcInterface::callI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["sendTransaction"] = std::bind( + &JsonRpcInterface::sendTransactionI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getTransaction"] = std::bind( + &JsonRpcInterface::getTransactionI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getTransactionReceipt"] = std::bind(&JsonRpcInterface::getTransactionReceiptI, + this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getBlockByHash"] = std::bind( + &JsonRpcInterface::getBlockByHashI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getBlockByNumber"] = std::bind( + &JsonRpcInterface::getBlockByNumberI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getBlockHashByNumber"] = std::bind(&JsonRpcInterface::getBlockHashByNumberI, + this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getBlockNumber"] = std::bind( + &JsonRpcInterface::getBlockNumberI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getCode"] = + std::bind(&JsonRpcInterface::getCodeI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getABI"] = + std::bind(&JsonRpcInterface::getABII, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getSealerList"] = std::bind( + &JsonRpcInterface::getSealerListI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getObserverList"] = std::bind( + &JsonRpcInterface::getObserverListI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getPbftView"] = std::bind( + &JsonRpcInterface::getPbftViewI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getPendingTxSize"] = std::bind( + &JsonRpcInterface::getPendingTxSizeI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getSyncStatus"] = std::bind( + &JsonRpcInterface::getSyncStatusI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getConsensusStatus"] = std::bind( + &JsonRpcInterface::getConsensusStatusI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getSystemConfigByKey"] = std::bind(&JsonRpcInterface::getSystemConfigByKeyI, + this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getTotalTransactionCount"] = + std::bind(&JsonRpcInterface::getTotalTransactionCountI, this, std::placeholders::_1, + std::placeholders::_2); + m_methodToFunc["getPeers"] = + std::bind(&JsonRpcInterface::getPeersI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getGroupPeers"] = std::bind( + &JsonRpcInterface::getGroupPeersI, this, std::placeholders::_1, std::placeholders::_2); + + m_methodToFunc["getGroupList"] = std::bind( + &JsonRpcInterface::getGroupListI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getGroupInfo"] = std::bind( + &JsonRpcInterface::getGroupInfoI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getGroupInfoList"] = std::bind( + &JsonRpcInterface::getGroupInfoListI, this, std::placeholders::_1, std::placeholders::_2); + m_methodToFunc["getGroupNodeInfo"] = std::bind( + &JsonRpcInterface::getGroupNodeInfoI, this, std::placeholders::_1, std::placeholders::_2); + + for (const auto& method : m_methodToFunc) + { + RPC_IMPL_LOG(INFO) << LOG_BADGE("initMethod") << LOG_KV("method", method.first); + } + RPC_IMPL_LOG(INFO) << LOG_BADGE("initMethod") << LOG_KV("size", m_methodToFunc.size()); +} + +void JsonRpcInterface::onRPCRequest(std::string_view _requestBody, Sender _sender) +{ + JsonRequest request; + JsonResponse response; + try + { + parseRpcRequestJson(_requestBody, request); + + response.jsonrpc = request.jsonrpc; + response.id = request.id; + + const auto& method = request.method; + auto it = m_methodToFunc.find(method); + if (it == m_methodToFunc.end()) + { + BOOST_THROW_EXCEPTION(JsonRpcException( + JsonRpcError::MethodNotFound, "The method does not exist/is not available.")); + } + RPC_IMPL_LOG(TRACE) << LOG_BADGE("onRPCRequest") << LOG_KV("request", _requestBody); + it->second( + request.params, [response, _sender](Error::Ptr _error, Json::Value& _result) mutable { + if (_error && (_error->errorCode() != bcos::protocol::CommonError::SUCCESS)) + { + // error + response.error.code = _error->errorCode(); + response.error.message = _error->errorMessage(); + } + else + { + response.result.swap(_result); + } + auto strResp = toStringResponse(std::move(response)); + RPC_IMPL_LOG(TRACE) + << LOG_BADGE("onRPCRequest") + << LOG_KV("response", + std::string_view((const char*)strResp.data(), strResp.size())); + _sender(std::move(strResp)); + }); + + // success response + return; + } + catch (const JsonRpcException& e) + { + response.error.code = e.code(); + response.error.message = std::string(e.what()); + } + catch (const std::exception& e) + { + // server internal error or unexpected error + response.error.code = JsonRpcError::InvalidRequest; + response.error.message = std::string(e.what()); + } + + auto strResp = toStringResponse(response); + + RPC_IMPL_LOG(DEBUG) << LOG_BADGE("onRPCRequest") << LOG_DESC("response with exception") + << LOG_KV("request", _requestBody) + << LOG_KV("response", + std::string_view((const char*)strResp.data(), strResp.size())); + _sender(strResp); +} + +void bcos::rpc::parseRpcRequestJson(std::string_view _requestBody, JsonRequest& _jsonRequest) +{ + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + + try + { + std::string jsonrpc = ""; + std::string method = ""; + int64_t id = 0; + do + { + if (!jsonReader.parse(_requestBody.begin(), _requestBody.end(), root)) + { + errorMessage = "invalid request json object"; + break; + } + + if (!root.isMember("jsonrpc")) + { + errorMessage = "request has no jsonrpc field"; + break; + } + jsonrpc = root["jsonrpc"].asString(); + + if (!root.isMember("method")) + { + errorMessage = "request has no method field"; + break; + } + method = root["method"].asString(); + + if (root.isMember("id")) + { + id = root["id"].asInt64(); + } + + if (!root.isMember("params")) + { + errorMessage = "request has no params field"; + break; + } + + if (!root["params"].isArray()) + { + errorMessage = "request params is not array object"; + break; + } + + auto jParams = root["params"]; + + _jsonRequest.jsonrpc = jsonrpc; + _jsonRequest.method = method; + _jsonRequest.id = id; + _jsonRequest.params = jParams; + + // RPC_IMPL_LOG(DEBUG) << LOG_BADGE("parseRpcRequestJson") << LOG_KV("method", method) + // << LOG_KV("requestMessage", _requestBody); + + // success return + return; + } while (0); + } + catch (const std::exception& e) + { + RPC_IMPL_LOG(ERROR) << LOG_BADGE("parseRpcRequestJson") << LOG_KV("request", _requestBody) + << LOG_KV("error", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION( + JsonRpcException(JsonRpcError::ParseError, "Invalid JSON was received by the server.")); + } + + RPC_IMPL_LOG(ERROR) << LOG_BADGE("parseRpcRequestJson") << LOG_KV("request", _requestBody) + << LOG_KV("errorMessage", errorMessage); + + BOOST_THROW_EXCEPTION(JsonRpcException( + JsonRpcError::InvalidRequest, "The JSON sent is not a valid Request object.")); +} + + +bcos::bytes bcos::rpc::toStringResponse(JsonResponse _jsonResponse) +{ + auto jResp = toJsonResponse(std::move(_jsonResponse)); + std::unique_ptr writer(Json::StreamWriterBuilder().newStreamWriter()); + class JsonSink + { + public: + typedef char char_type; + typedef boost::iostreams::sink_tag category; + + JsonSink(bcos::bytes& buffer) : m_buffer(buffer) {} + + std::streamsize write(const char* s, std::streamsize n) + { + m_buffer.insert(m_buffer.end(), (bcos::byte*)s, (bcos::byte*)s + n); + return n; + } + + bcos::bytes& m_buffer; + }; + + bcos::bytes out; + boost::iostreams::stream outputStream(out); + + writer->write(jResp, &outputStream); + writer.reset(); + return out; +} + +Json::Value bcos::rpc::toJsonResponse(JsonResponse _jsonResponse) +{ + Json::Value jResp; + jResp["jsonrpc"] = std::move(_jsonResponse.jsonrpc); + jResp["id"] = std::move(_jsonResponse.id); + + if (_jsonResponse.error.code == 0) + { // success + jResp["result"] = std::move(_jsonResponse.result); + } + else + { // error + Json::Value jError; + jError["code"] = std::move(_jsonResponse.error.code); + jError["message"] = std::move(_jsonResponse.error.message); + jResp["error"] = std::move(jError); + } + + return jResp; +} \ No newline at end of file diff --git a/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h new file mode 100644 index 0000000..89adb7f --- /dev/null +++ b/bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h @@ -0,0 +1,277 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for JsonRPC + * @file JsonRpcInterface.h + * @author: octopus + * @date 2021-07-09 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::rpc +{ +using Sender = std::function; +using RespFunc = std::function; + +class JsonRpcInterface +{ +public: + using Ptr = std::shared_ptr; + JsonRpcInterface() { initMethod(); } + JsonRpcInterface(const JsonRpcInterface&) = default; + JsonRpcInterface(JsonRpcInterface&&) = default; + JsonRpcInterface& operator=(const JsonRpcInterface&) = default; + JsonRpcInterface& operator=(JsonRpcInterface&&) = default; + virtual ~JsonRpcInterface() {} + +public: + virtual void call(std::string_view _groupID, std::string_view _nodeName, std::string_view _to, + std::string_view _data, RespFunc _respFunc) = 0; + + virtual void sendTransaction(std::string_view _groupID, std::string_view _nodeName, + std::string_view _data, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getTransaction(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getTransactionReceipt(std::string_view _groupID, std::string_view _nodeName, + std::string_view _txHash, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getBlockByHash(std::string_view _groupID, std::string_view _nodeName, + std::string_view _blockHash, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) = 0; + + virtual void getBlockByNumber(std::string_view _groupID, std::string_view _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) = 0; + + virtual void getBlockHashByNumber(std::string_view _groupID, std::string_view _nodeName, + int64_t _blockNumber, RespFunc _respFunc) = 0; + + virtual void getBlockNumber( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getCode(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) = 0; + + virtual void getABI(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) = 0; + + virtual void getSealerList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getObserverList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getPbftView( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getPendingTxSize( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getSyncStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + virtual void getConsensusStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getSystemConfigByKey(std::string_view _groupID, std::string_view _nodeName, + std::string_view _keyValue, RespFunc _respFunc) = 0; + + virtual void getTotalTransactionCount( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getGroupPeers(std::string_view _groupID, RespFunc _respFunc) = 0; + virtual void getPeers(RespFunc _respFunc) = 0; + // get all the groupID list + virtual void getGroupList(RespFunc _respFunc) = 0; + // get the group information of the given group + virtual void getGroupInfo(std::string_view _groupID, RespFunc _respFunc) = 0; + // get all the group info list + virtual void getGroupInfoList(RespFunc _respFunc) = 0; + // get the information of a given node + virtual void getGroupNodeInfo( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) = 0; + + virtual void getGroupBlockNumber(RespFunc _respFunc) = 0; + +public: + void onRPCRequest(std::string_view _requestBody, Sender _sender); + +private: + void initMethod(); + + std::unordered_map> m_methodToFunc; + + + std::string_view toView(const Json::Value& value) + { + const char* begin = nullptr; + const char* end = nullptr; + if (!value.getString(&begin, &end)) + { + return {}; + } + std::string_view view(begin, end - begin); + return view; + } + + void callI(const Json::Value& req, RespFunc _respFunc) + { + call(toView(req[0u]), toView(req[1u]), toView(req[2u]), toView(req[3u]), + std::move(_respFunc)); + } + + void sendTransactionI(const Json::Value& req, RespFunc _respFunc) + { + sendTransaction(toView(req[0u]), toView(req[1u]), toView(req[2u]), req[3u].asBool(), + std::move(_respFunc)); + } + + void getTransactionI(const Json::Value& req, RespFunc _respFunc) + { + getTransaction(toView(req[0u]), toView(req[1u]), toView(req[2u]), req[3u].asBool(), + std::move(_respFunc)); + } + + void getTransactionReceiptI(const Json::Value& req, RespFunc _respFunc) + { + getTransactionReceipt(toView(req[0u]), toView(req[1u]), toView(req[2u]), req[3u].asBool(), + std::move(_respFunc)); + } + + void getBlockByHashI(const Json::Value& req, RespFunc _respFunc) + { + getBlockByHash(toView(req[0u]), toView(req[1u]), toView(req[2u]), + (req.size() > 3 ? req[3u].asBool() : true), (req.size() > 4 ? req[4u].asBool() : true), + std::move(_respFunc)); + } + + void getBlockByNumberI(const Json::Value& req, RespFunc _respFunc) + { + getBlockByNumber(toView(req[0u]), toView(req[1u]), req[2u].asInt64(), + (req.size() > 3 ? req[3u].asBool() : true), (req.size() > 4 ? req[4u].asBool() : true), + std::move(_respFunc)); + } + + void getBlockHashByNumberI(const Json::Value& req, RespFunc _respFunc) + { + getBlockHashByNumber( + toView(req[0u]), toView(req[1u]), req[2u].asInt64(), std::move(_respFunc)); + } + + void getBlockNumberI(const Json::Value& req, RespFunc _respFunc) + { + getBlockNumber(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getCodeI(const Json::Value& req, RespFunc _respFunc) + { + getCode(toView(req[0u]), toView(req[1u]), toView(req[2u]), std::move(_respFunc)); + } + + void getABII(const Json::Value& req, RespFunc _respFunc) + { + getABI(toView(req[0u]), toView(req[1u]), toView(req[2u]), std::move(_respFunc)); + } + + void getSealerListI(const Json::Value& req, RespFunc _respFunc) + { + getSealerList(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getObserverListI(const Json::Value& req, RespFunc _respFunc) + { + getObserverList(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getPbftViewI(const Json::Value& req, RespFunc _respFunc) + { + getPbftView(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getPendingTxSizeI(const Json::Value& req, RespFunc _respFunc) + { + getPendingTxSize(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getSyncStatusI(const Json::Value& req, RespFunc _respFunc) + { + getSyncStatus(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getConsensusStatusI(const Json::Value& _req, RespFunc _respFunc) + { + getConsensusStatus(toView(_req[0u]), toView(_req[1u]), std::move(_respFunc)); + } + + void getSystemConfigByKeyI(const Json::Value& req, RespFunc _respFunc) + { + getSystemConfigByKey( + toView(req[0u]), toView(req[1u]), toView(req[2u]), std::move(_respFunc)); + } + + void getTotalTransactionCountI(const Json::Value& req, RespFunc _respFunc) + { + getTotalTransactionCount(toView(req[0u]), toView(req[1u]), std::move(_respFunc)); + } + + void getPeersI(const Json::Value& req, RespFunc _respFunc) + { + boost::ignore_unused(req); + getPeers(std::move(_respFunc)); + } + + void getGroupPeersI(const Json::Value& req, RespFunc _respFunc) + { + getGroupPeers(toView(req[0u]), std::move(_respFunc)); + } + + // get all the groupID list + void getGroupListI(const Json::Value& _req, RespFunc _respFunc) + { + (void)_req; + getGroupList(std::move(_respFunc)); + } + // get the group information of the given group + void getGroupInfoI(const Json::Value& _req, RespFunc _respFunc) + { + (void)_req; + getGroupInfo(toView(_req[0u]), std::move(_respFunc)); + } + // get the group information of the given group + void getGroupInfoListI(const Json::Value& _req, RespFunc _respFunc) + { + (void)_req; + getGroupInfoList(std::move(_respFunc)); + } + // get the information of a given node + void getGroupNodeInfoI(const Json::Value& _req, RespFunc _respFunc) + { + getGroupNodeInfo(toView(_req[0u]), toView(_req[1u]), std::move(_respFunc)); + } +}; +void parseRpcRequestJson(std::string_view _requestBody, JsonRequest& _jsonRequest); +bcos::bytes toStringResponse(JsonResponse _jsonResponse); +Json::Value toJsonResponse(JsonResponse _jsonResponse); + + +} // namespace bcos::rpc diff --git a/bcos-rpc/test/CMakeLists.txt b/bcos-rpc/test/CMakeLists.txt new file mode 100644 index 0000000..968dbc8 --- /dev/null +++ b/bcos-rpc/test/CMakeLists.txt @@ -0,0 +1,30 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-rpc +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "unittests/*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-rpc) + +find_package(Boost REQUIRED unit_test_framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE .) +target_compile_options(${TEST_BINARY_NAME} PRIVATE -Wno-unused-variable) + +target_link_libraries(${TEST_BINARY_NAME} ${RPC_TARGET} Boost::unit_test_framework) +add_test(NAME ${TEST_BINARY_NAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-rpc/test/unittests/main/main.cpp b/bcos-rpc/test/unittests/main/main.cpp new file mode 100644 index 0000000..0e27edc --- /dev/null +++ b/bcos-rpc/test/unittests/main/main.cpp @@ -0,0 +1,3 @@ +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/bcos-scheduler/CMakeLists.txt b/bcos-scheduler/CMakeLists.txt new file mode 100644 index 0000000..9a6361c --- /dev/null +++ b/bcos-scheduler/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.14) + + +project(bcos-scheduler VERSION ${VERSION}) + +aux_source_directory(src SRCS) + +add_library(${SCHEDULER_TARGET} ${SRCS}) +target_link_libraries(${SCHEDULER_TARGET} PUBLIC ${TABLE_TARGET} ${TARS_PROTOCOL_TARGET}) + +if(TESTS) + enable_testing() + add_subdirectory(test) +endif() + +if (COVERAGE) + include(Coverage) + config_coverage("scheduler-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () \ No newline at end of file diff --git a/bcos-scheduler/src/BlockExecutive.cpp b/bcos-scheduler/src/BlockExecutive.cpp new file mode 100644 index 0000000..df77c53 --- /dev/null +++ b/bcos-scheduler/src/BlockExecutive.cpp @@ -0,0 +1,1703 @@ +#include "BlockExecutive.h" +#include "Common.h" +#include "DmcExecutor.h" +#include "SchedulerImpl.h" +#include "bcos-crypto/bcos-crypto/ChecksumAddress.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/executor/PrecompiledTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::scheduler; +using namespace bcos::ledger; + +BlockExecutive::BlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool) + : m_dmcRecorder(std::make_shared()), + m_block(std::move(block)), + m_scheduler(scheduler), + m_schedulerTermId(scheduler->getSchedulerTermId()), + m_startContextID(startContextID), + m_transactionSubmitResultFactory(std::move(transactionSubmitResultFactory)), + m_blockFactory(std::move(_blockFactory)), + m_txPool(std::move(_txPool)), + m_staticCall(staticCall) +{ + m_hashImpl = m_blockFactory->cryptoSuite()->hashImpl(); + start(); +} + +void BlockExecutive::prepare() +{ + if (m_hasPrepared) + { + return; + } + WriteGuard lock(x_prepareLock); + if (m_hasPrepared) + { + return; + } + + auto startT = utcTime(); + + if (m_block->transactionsMetaDataSize() > 0) + { + buildExecutivesFromMetaData(); + } + else if (m_block->transactionsSize() > 0) + { + buildExecutivesFromNormalTransaction(); + } + else + { + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) << "BlockExecutive prepare: empty block"; + } + + // prepare all executors + if (!m_hasDAG) + { + // prepare DMC executor + serialPrepareExecutor(); + } + + m_hasPrepared = true; + + SCHEDULER_LOG(INFO) << METRIC << LOG_BADGE("BlockTrace") << "preExeBlock success" + << BLOCK_NUMBER(number()) + << LOG_KV("blockHeader.timestamp", m_block->blockHeaderConst()->timestamp()) + << LOG_KV("metaTxCount", m_block->transactionsMetaDataSize()) + << LOG_KV("timeCost", (utcTime() - startT)); +} + +bcos::protocol::ExecutionMessage::UniquePtr BlockExecutive::buildMessage( + ContextID contextID, bcos::protocol::Transaction::ConstPtr tx) +{ + auto message = m_scheduler->m_executionMessageFactory->createExecutionMessage(); + message->setType(protocol::ExecutionMessage::MESSAGE); + message->setContextID(contextID); + message->setTransactionHash(tx->hash()); + message->setOrigin(toHex(tx->sender())); + message->setFrom(std::string(message->origin())); + + if (!m_isSysBlock) + { + auto toAddress = tx->to(); + if (bcos::precompiled::c_systemTxsAddress.count( + std::string(toAddress.begin(), toAddress.end()))) + { + m_isSysBlock.store(true); + } + } + + if (tx->attribute() & bcos::protocol::Transaction::Attribute::LIQUID_SCALE_CODEC) + { + // LIQUID + if (tx->attribute() & bcos::protocol::Transaction::Attribute::LIQUID_CREATE) + { + message->setCreate(true); + } + message->setTo(std::string(tx->to())); + } + else + { + // SOLIDITY + if (tx->to().empty()) + { + message->setCreate(true); + } + else + { + if (m_scheduler->m_isAuthCheck && !m_staticCall && + isSysContractDeploy(m_block->blockHeaderConst()->number()) && + tx->to() == precompiled::AUTH_COMMITTEE_ADDRESS) + { + // if enable auth check, and first deploy auth contract + message->setCreate(true); + } + message->setTo(preprocessAddress(tx->to())); + } + } + message->setDepth(0); + message->setGasAvailable(m_gasLimit); + if (precompiled::c_systemTxsAddress.count({tx->to().data(), tx->to().size()})) + { + message->setGasAvailable(TRANSACTION_GAS); + } + message->setData(tx->input().toBytes()); + message->setStaticCall(m_staticCall); + + if (message->create()) + { + message->setABI(std::string(tx->abi())); + } + + return message; +} + +void BlockExecutive::buildExecutivesFromMetaData() +{ + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) + << "BlockExecutive prepare: buildExecutivesFromMetaData" + << LOG_KV("tx meta count", m_block->transactionsMetaDataSize()); + + m_blockTxs = fetchBlockTxsFromTxPool(m_block, m_txPool); // no need to async + m_executiveResults.resize(m_block->transactionsMetaDataSize()); + std::vector> results( + m_block->transactionsMetaDataSize()); + + if (m_blockTxs) + { + tbb::parallel_for(tbb::blocked_range(0U, m_block->transactionsMetaDataSize()), + [&](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto metaData = m_block->transactionMetaData(i); + if (metaData) + { + m_executiveResults[i].transactionHash = metaData->hash(); + m_executiveResults[i].source = metaData->source(); + } + auto contextID = i + m_startContextID; + + auto& [toAddress, message, enableDAG] = results[i]; + message = buildMessage(contextID, (*m_blockTxs)[i]); + toAddress = {message->to().data(), message->to().size()}; + enableDAG = metaData->attribute() & bcos::protocol::Transaction::Attribute::DAG; + } + }); + } + else + { + tbb::parallel_for(tbb::blocked_range(0U, m_block->transactionsMetaDataSize()), + [&](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto metaData = m_block->transactionMetaData(i); + if (metaData) + { + m_executiveResults[i].transactionHash = metaData->hash(); + m_executiveResults[i].source = metaData->source(); + } + + auto contextID = i + m_startContextID; + + auto& [to, message, enableDAG] = results[i]; + message = m_scheduler->m_executionMessageFactory->createExecutionMessage(); + message->setContextID(contextID); + message->setType(protocol::ExecutionMessage::TXHASH); + // Note: set here for fetching txs when send_back + message->setTransactionHash(metaData->hash()); + + if (metaData->attribute() & + bcos::protocol::Transaction::Attribute::LIQUID_SCALE_CODEC) + { + // LIQUID + if (metaData->attribute() & + bcos::protocol::Transaction::Attribute::LIQUID_CREATE) + { + message->setCreate(true); + } + message->setTo(std::string(metaData->to())); + } + else + { + // SOLIDITY + if (metaData->to().empty()) + { + message->setCreate(true); + } + else + { + message->setTo(preprocessAddress(metaData->to())); + } + } + + message->setDepth(0); + message->setGasAvailable(m_gasLimit); + if (precompiled::c_systemTxsAddress.count( + {metaData->to().data(), metaData->to().size()})) + { + message->setGasAvailable(TRANSACTION_GAS); + } + message->setStaticCall(false); + enableDAG = metaData->attribute() & bcos::protocol::Transaction::Attribute::DAG; + to = {message->to().data(), message->to().size()}; + } + }); + } + + for (auto& it : results) + { + auto& [to, message, enableDAG] = it; + if (message) + { + m_hasDAG = m_hasDAG || enableDAG; + saveMessage(std::move(to), std::move(message), enableDAG); + } + } +} + +void BlockExecutive::buildExecutivesFromNormalTransaction() +{ + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) + << "BlockExecutive prepare: buildExecutivesFromNormalTransaction" + << LOG_KV("block number", m_block->blockHeaderConst()->number()) + << LOG_KV("txCount", m_block->transactionsSize()); + + m_executiveResults.resize(m_block->transactionsSize()); + std::vector> results( + m_block->transactionsSize()); + + tbb::parallel_for( + tbb::blocked_range(0U, m_block->transactionsSize()), [&](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto tx = m_block->transaction(i); + m_executiveResults[i].transactionHash = tx->hash(); + + auto contextID = i + m_startContextID; + auto& [to, message, enableDAG] = results[i]; + message = buildMessage(contextID, tx); + to = {message->to().data(), message->to().size()}; + enableDAG = tx->attribute() & bcos::protocol::Transaction::Attribute::DAG; + } + }); + + for (auto& it : results) + { + auto& [to, message, enableDAG] = it; + if (message) + { + m_hasDAG = m_hasDAG || enableDAG; + saveMessage(std::move(to), std::move(message), enableDAG); + } + } +} + +bcos::protocol::TransactionsPtr BlockExecutive::fetchBlockTxsFromTxPool( + bcos::protocol::Block::Ptr block, bcos::txpool::TxPoolInterface::Ptr txPool) +{ + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) << "BlockExecutive prepare: fillBlock start" + << LOG_KV("txNum", block->transactionsMetaDataSize()); + bcos::protocol::TransactionsPtr txs = nullptr; + auto lastT = utcTime(); + if (txPool != nullptr) + { + // Get tx hash list + auto txHashes = std::make_shared(); + for (size_t i = 0; i < block->transactionsMetaDataSize(); ++i) + { + txHashes->emplace_back(block->transactionMetaData(i)->hash()); + } + if (c_fileLogLevel <= TRACE) [[unlikely]] + { + for (auto const& tx : *txHashes) + { + SCHEDULER_LOG(TRACE) << "fetch: " << tx.abridged(); + } + } + std::shared_ptr> txsPromise = + std::make_shared>(); + txPool->asyncFillBlock( + txHashes, [txsPromise](Error::Ptr error, bcos::protocol::TransactionsPtr txs) { + if (!txsPromise) + { + return; + } + + if (error) + { + txsPromise->set_value(nullptr); + } + else + { + txsPromise->set_value(txs); + } + }); + auto future = txsPromise->get_future(); + if (future.wait_for(std::chrono::milliseconds(10 * 1000)) != std::future_status::ready) + { + // 10s timeout + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number()) + << "BlockExecutive prepare: fillBlock timeout/error" + << LOG_KV("txNum", block->transactionsMetaDataSize()) + << LOG_KV("cost", utcTime() - lastT) + << LOG_KV("fetchNum", txs ? txs->size() : 0); + return nullptr; + } + txs = future.get(); + txsPromise = nullptr; + } + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) << "BlockExecutive prepare: fillBlock end" + << LOG_KV("txNum", block->transactionsMetaDataSize()) + << LOG_KV("cost", utcTime() - lastT) + << LOG_KV("fetchNum", txs ? txs->size() : 0); + return txs; +} + +void BlockExecutive::asyncCall( + std::function callback) +{ + asyncExecute([executive = shared_from_this(), callback]( + Error::UniquePtr&& _error, protocol::BlockHeader::Ptr, bool) { + // auto executive = self.lock(); + if (!executive) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::UnknownError, "get block executive failed"), + nullptr); + return; + } + auto receipt = + std::const_pointer_cast(executive->block()->receipt(0)); + callback(std::move(_error), std::move(receipt)); + }); +} + +void BlockExecutive::asyncExecute( + std::function callback) +{ + if (m_result) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidStatus, "Invalid status"), nullptr, + m_isSysBlock); + return; + } + + if (m_scheduler->executorManager()->size() == 0) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::ExecutorNotEstablishedError, "The executor has not started!"), + nullptr, m_isSysBlock); + } + m_currentTimePoint = std::chrono::system_clock::now(); + + auto startT = utcTime(); + prepare(); + + auto createMsgT = utcTime() - startT; + startT = utcTime(); + if (!m_staticCall) + { + // Execute nextBlock + bool hasDAG = m_hasDAG; + batchNextBlock([this, hasDAG, startT, createMsgT, callback = std::move(callback)]( + Error::UniquePtr error) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Next block with error!" << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + SchedulerError::NextBlockError, "Next block error!", *error), + nullptr, m_isSysBlock); + return; + } + + if (hasDAG) + { + DAGExecute([this, startT, createMsgT, callback = std::move(callback)]( + Error::UniquePtr error) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "DAG execute block with error!" + << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + SchedulerError::DAGError, "DAG execute error!", *error), + nullptr, m_isSysBlock); + return; + } + auto blockHeader = m_block->blockHeader(); + blockHeader->calculateHash(*m_hashImpl); + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_DESC("DAGExecute success") + << LOG_KV("createMsgT", createMsgT) + << LOG_KV("dagExecuteT", (utcTime() - startT)) + << LOG_KV("hash", blockHeader->hash().abridged()); + + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("DMCExecute begin after DAGExecute"); + DMCExecute(std::move(callback)); + }); + } + else + { + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("DMCExecute begin without DAGExecute"); + DMCExecute(std::move(callback)); + } + }); + } + else + { + SCHEDULER_LOG(TRACE) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("DMCExecute begin for call"); + DMCExecute(std::move(callback)); + } +} + +void BlockExecutive::asyncCommit(std::function callback) +{ + auto stateStorage = std::make_shared(m_scheduler->m_storage); + + m_currentTimePoint = std::chrono::system_clock::now(); + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) << LOG_DESC("BlockExecutive commit block"); + + m_scheduler->m_ledger->asyncPrewriteBlock( + stateStorage, m_blockTxs, m_block, + [this, stateStorage, callback = std::move(callback)](Error::Ptr&& error) mutable { + if (error) + { + SCHEDULER_LOG(ERROR) << "Prewrite block error!" << error->errorMessage(); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(SchedulerError::PrewriteBlockError, + "Prewrite block error: " + error->errorMessage(), *error)); + + return; + } + + auto status = std::make_shared(); + // self + ledger(txs receipts) + executors = 1 + 1 + executors + status->total = 2 + m_scheduler->m_executorManager->size(); + status->checkAndCommit = [this, callback](const CommitStatus& status) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::Stopped, "BlockExecutive is stopped")); + return; + } + + if (status.failed > 0) + { + std::string errorMessage = "Prepare with errors, begin rollback, status: " + + boost::lexical_cast(status.failed); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(number()) << errorMessage; + batchBlockRollback( + status.startTS, [this, callback, errorMessage](Error::UniquePtr&& error) { + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Rollback storage failed!" + << LOG_KV("number", number()) << " " << error->errorMessage(); + // FATAL ERROR, NEED MANUAL FIX! + + callback(std::move(error)); + return; + } + else + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::CommitError, errorMessage)); + return; + } + }); + + return; + } + + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number()) << "batchCommitBlock begin"; + batchBlockCommit(status.startTS, [this, callback](Error::UniquePtr&& error) { + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Commit block to storage failed!" + << error->errorMessage(); + + if (error->errorCode() == + bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + + // FATAL ERROR, NEED MANUAL FIX! + callback(std::move(error)); + + return; + } + + m_commitElapsed = std::chrono::duration_cast( + std::chrono::system_clock::now() - m_currentTimePoint); + SCHEDULER_LOG(DEBUG) + << BLOCK_NUMBER(number()) << "CommitBlock: " + << "success, execute elapsed: " << m_executeElapsed.count() + << "ms hash elapsed: " << m_hashElapsed.count() + << "ms commit elapsed: " << m_commitElapsed.count() << "ms"; + + callback(nullptr); + }); + }; + + bcos::protocol::TwoPCParams params; + params.number = number(); + params.primaryKey = ""; + m_scheduler->m_storage->asyncPrepare(params, *stateStorage, + [status, this, callback]( + Error::Ptr&& error, uint64_t startTimeStamp, const std::string& primaryKey) { + if (error) + { + ++status->failed; + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) + << "scheduler asyncPrepare storage error: " << error->errorMessage(); + callback(BCOS_ERROR_UNIQUE_PTR(error->errorCode(), + "asyncPrepare block error: " + error->errorMessage())); + return; + } + ++status->success; + + SCHEDULER_LOG(DEBUG) + << BLOCK_NUMBER(number()) + << "primary prepare finished, call executor prepare" + << LOG_KV("startTimeStamp", startTimeStamp) + << LOG_KV("executors", m_scheduler->m_executorManager->size()) + << LOG_KV("success", status->success) << LOG_KV("failed", status->failed); + bcos::protocol::TwoPCParams executorParams; + executorParams.number = number(); + executorParams.primaryKey = primaryKey; + executorParams.timestamp = startTimeStamp; + status->startTS = startTimeStamp; + for (const auto& executorIt : *(m_scheduler->m_executorManager)) + { + executorIt->prepare(executorParams, [this, status](Error::Ptr&& error) { + { + WriteGuard lock(status->x_lock); + if (error) + { + ++status->failed; + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) + << "asyncPrepare executor failed: " << error->what(); + + if (error->errorCode() == + bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + } + else + { + ++status->success; + SCHEDULER_LOG(DEBUG) + << BLOCK_NUMBER(number()) + << "asyncPrepare executor success, success: " + << status->success; + } + if (status->success + status->failed < status->total) + { + return; + } + } + + status->checkAndCommit(*status); + }); + } + }); + // write transactions and receipts in another DB txn + auto err = m_scheduler->m_ledger->storeTransactionsAndReceipts( + m_blockTxs, std::const_pointer_cast(m_block)); + { + WriteGuard lock(status->x_lock); + if (err) + { + ++status->failed; + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "write txs and receipts failed: " + << LOG_KV("message", err->errorMessage()); + } + else + { + ++status->success; + } + if (status->success + status->failed < status->total) + { + return; + } + } + status->checkAndCommit(*status); + }, + false); +} + +void BlockExecutive::asyncNotify( + std::function)>& notifier, + std::function _callback) +{ + if (!notifier) + { + return; + } + auto results = std::make_shared(); + auto blockHeader = m_block->blockHeaderConst(); + auto blockHash = blockHeader->hash(); + size_t index = 0; + for (auto& it : m_executiveResults) + { + auto submitResult = m_transactionSubmitResultFactory->createTxSubmitResult(); + submitResult->setTransactionIndex(index); + submitResult->setBlockHash(blockHash); + submitResult->setTxHash(it.transactionHash); + submitResult->setStatus(it.receipt->status()); + submitResult->setTransactionReceipt(it.receipt); + if (m_syncBlock) + { + auto tx = m_block->transaction(index); + submitResult->setNonce(tx->nonce()); + } + index++; + results->emplace_back(submitResult); + } + auto txsSize = m_executiveResults.size(); + notifier(blockHeader->number(), results, [_callback, blockHeader, txsSize](Error::Ptr _error) { + if (_callback) + { + _callback(_error); + } + if (_error == nullptr) + { + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(blockHeader->number()) + << LOG_DESC("notify block result success") + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("txsSize", txsSize); + return; + } + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(blockHeader->number()) + << LOG_DESC("notify block result failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); +} + +void BlockExecutive::saveMessage( + std::string address, protocol::ExecutionMessage::UniquePtr message, bool withDAG) +{ + registerAndGetDmcExecutor(address)->submit(std::move(message), withDAG); +} + +void BlockExecutive::DAGExecute(std::function callback) +{ + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped")); + return; + } + + // dump executive states from DmcExecutor + for (auto it : m_dmcExecutors) + { + auto& address = it.first; + auto dmcExecutor = it.second; + dmcExecutor->forEachExecutive( + [this, &address](ContextID contextID, ExecutiveState::Ptr executiveState) { + m_executiveStates.emplace(std::make_tuple(address, contextID), executiveState); + }); + } + + // map< string => => ExecutiveState::Ptr>::it > + std::multimap requests; + + // filter enableDAG request to map + for (auto it = m_executiveStates.begin(); it != m_executiveStates.end(); ++it) + { + if (it->second->enableDAG) + { + requests.emplace(std::get<0>(it->first), it); + } + } + + if (requests.empty()) + { + callback(nullptr); + return; + } + + auto totalCount = std::make_shared(requests.size()); + auto failed = std::make_shared(0); + auto callbackPtr = std::make_shared(std::move(callback)); + SCHEDULER_LOG(INFO) << LOG_BADGE("DAG") << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << LOG_BADGE("BlockTrace") << "DAGExecute.0:\t>>> Start send to executor"; + + // string => => ExecutiveState::Ptr>::it + for (auto it = requests.begin(); it != requests.end(); it = requests.upper_bound(it->first)) + { + auto contractAddress = it->first; + auto startT = utcTime(); + + auto executor = m_scheduler->m_executorManager->dispatchExecutor(contractAddress); + auto count = requests.count(it->first); + // get all same address request, + auto range = requests.equal_range(it->first); + + auto messages = std::make_shared>(count); + auto iterators = std::vector(count); + size_t i = 0; + // traverse range, messageIt: => + // ExecutiveState::Ptr>::it>::it + for (auto messageIt = range.first; messageIt != range.second; ++messageIt) + { + SCHEDULER_LOG(TRACE) << "DAG message: " << messageIt->second->second->message.get() + << " to: " << messageIt->first; + messageIt->second->second->callStack.push(messageIt->second->second->currentSeq++); + messages->at(i) = std::move(messageIt->second->second->message); + iterators[i] = messageIt->second; + + ++i; + } + SCHEDULER_LOG(INFO) << LOG_BADGE("DAG") << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DAGExecute.1:\t--> Send to executor\t" + << LOG_KV("contract", contractAddress) + << LOG_KV("txNum", messages->size()); + auto prepareT = utcTime() - startT; + startT = utcTime(); + executor->dagExecuteTransactions(*messages, + [this, contractAddress, messages, startT, prepareT, iterators = std::move(iterators), + totalCount, failed, callbackPtr](bcos::Error::UniquePtr error, + std::vector responseMessages) { + SCHEDULER_LOG(INFO) + << LOG_BADGE("DAG") << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DAGExecute.2:\t<-- Receive from executor\t" + << LOG_KV("contract", contractAddress) << LOG_KV("txNum", messages->size()) + << LOG_KV("costT", utcTime() - startT) << LOG_KV("failed", *failed) + << LOG_KV("totalCount", *totalCount) << LOG_KV("blockNumber", number()); + if (error) + { + ++(*failed); + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "DAG execute error: " << error->errorMessage() + << LOG_KV("failed", *failed) << LOG_KV("totalCount", *totalCount) + << LOG_KV("blockNumber", number()); + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + } + else if (messages->size() != responseMessages.size()) + { + ++(*failed); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number()) + << "DAG messages size and response size mismatch!"; + } + else + { + tbb::parallel_for(tbb::blocked_range(0U, responseMessages.size()), + [&responseMessages, &iterators](auto const& range) { + for (auto j = range.begin(); j < range.end(); ++j) + { + assert(responseMessages[j]); + iterators[j]->second->message = std::move(responseMessages[j]); + } + }); + } + + if (totalCount->fetch_sub(messages->size()) == messages->size()) + { + // only one thread can get in this field + SCHEDULER_LOG(DEBUG) + << LOG_BADGE("DAG") << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DAGExecute.3:\t<<< Joint all contract result\t" + << LOG_KV("costT", utcTime() - startT) << LOG_KV("failed", *failed) + << LOG_KV("totalCount", *totalCount) << LOG_KV("blockNumber", number()); + + if (*failed > 0) + { + (*callbackPtr)(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::DAGError, "Execute dag with errors")); + return; + } + + SCHEDULER_LOG(INFO) + << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("DAGExecute finish") << LOG_KV("prepareT", prepareT) + << LOG_KV("execT", (utcTime() - startT)); + (*callbackPtr)(nullptr); + } + }); + } +} + +void BlockExecutive::DMCExecute( + std::function callback) +{ + try + { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + // update DMC recorder for debugging + m_dmcRecorder->nextDmcRound(); + + auto lastT = utcTime(); + DMC_LOG(INFO) << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DMCExecute.0:\t [+] Start\t\t\t" + << LOG_KV("round", m_dmcRecorder->getRound()) + << LOG_KV("checksum", m_dmcRecorder->getChecksum()); + + // prepare all dmcExecutor + serialPrepareExecutor(); + DMC_LOG(INFO) << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DMCExecute.1:\t [-] PrepareExecutor finish\t" + << LOG_KV("round", m_dmcRecorder->getRound()) + << LOG_KV("checksum", m_dmcRecorder->getChecksum()) + << LOG_KV("cost", utcTime() - lastT); + lastT = utcTime(); + + // dump address for omp parallelization + std::vector contractAddress; + contractAddress.reserve(m_dmcExecutors.size()); + for (auto it = m_dmcExecutors.begin(); it != m_dmcExecutors.end(); it++) + { + contractAddress.push_back(it->first); + } + auto batchStatus = std::make_shared(); + batchStatus->total = contractAddress.size(); + + // if is empty block, just return + if (contractAddress.size() == 0) + { + onDmcExecuteFinish(std::move(callback)); + return; + } + + auto executorCallback = [this, lastT, batchStatus = std::move(batchStatus), + callback = std::move(callback)]( + bcos::Error::UniquePtr error, DmcExecutor::Status status) { + if (error || status == DmcExecutor::Status::ERROR) + { + batchStatus->error++; + batchStatus->errorMessage = error.get()->errorMessage(); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number()) << LOG_BADGE("DmcExecutor") + << "dmcExecutor->go() with error" + << LOG_KV("code", error ? error->errorCode() : -1) + << LOG_KV("msg", error ? error.get()->errorMessage() : "null"); + } + else if (status == DmcExecutor::Status::PAUSED || + status == DmcExecutor::Status::NEED_PREPARE) + { + batchStatus->paused++; + } + else if (status == DmcExecutor::Status::FINISHED) + { + batchStatus->finished++; + } + + // check batch + if ((batchStatus->error + batchStatus->paused + batchStatus->finished) != + batchStatus->total) + { + return; + } + + // block many threads + if (batchStatus->callbackExecuted) + { + return; + } + { + WriteGuard lock(batchStatus->x_lock); + if (batchStatus->callbackExecuted) + { + return; + } + batchStatus->callbackExecuted = true; + } + + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + // handle batch result(only one thread can get in here) + DMC_LOG(INFO) << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DMCExecute.5:\t <<< Join all executor result\t" + << LOG_KV("round", m_dmcRecorder->getRound()) + << LOG_KV("checksum", m_dmcRecorder->getChecksum()) + << LOG_KV("sendChecksum", m_dmcRecorder->getSendChecksum()) + << LOG_KV("receiveChecksum", m_dmcRecorder->getReceiveChecksum()) + << LOG_KV("cost(after prepare finish)", utcTime() - lastT); + + if (batchStatus->error != 0) + { + DMC_LOG(ERROR) << BLOCK_NUMBER(number()) + << "DMCExecute with errors: " << batchStatus->errorMessage; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::DMCError, batchStatus->errorMessage), + nullptr, m_isSysBlock); + } + else if (batchStatus->paused != 0) // new contract + { + // Start next DMC round + DMCExecute(std::move(callback)); + } + else if (batchStatus->finished == batchStatus->total) + { + onDmcExecuteFinish(std::move(callback)); + } + else + { + // assume never goes here + SCHEDULER_LOG(FATAL) << "Invalid type"; + assert(false); + } + }; + + DMC_LOG(INFO) << LOG_BADGE("Stat") << BLOCK_NUMBER(number()) + << "DMCExecute.2:\t >>> Start send to executors\t" + << LOG_KV("round", m_dmcRecorder->getRound()) + << LOG_KV("checksum", m_dmcRecorder->getChecksum()) + << LOG_KV("cost", utcTime() - lastT) + << LOG_KV("contractNum", contractAddress.size()); + + // for each dmcExecutor + // Use isolate task_arena to avoid error + tbb::this_task_arena::isolate([this, &contractAddress, &executorCallback] { + tbb::parallel_for(tbb::blocked_range(0U, contractAddress.size()), + [this, &contractAddress, &executorCallback](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto dmcExecutor = m_dmcExecutors[contractAddress[i]]; + dmcExecutor->go(executorCallback); + } + }); + }); + } + catch (bcos::Error& e) + { + DMC_LOG(WARNING) << "DMCExecute exception: " << LOG_KV("code", e.errorCode()) + << LOG_KV("message", e.errorMessage()); + callback( + std::make_unique(e.errorCode(), e.errorMessage()), nullptr, m_isSysBlock); + } + catch (std::exception& e) + { + DMC_LOG(WARNING) << "DMCExecute exception " << boost::diagnostic_information(e); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::UnknownError, "DMCExecute exception"), + nullptr, m_isSysBlock); + } + catch (...) + { + DMC_LOG(WARNING) << "DMCExecute exception. "; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::UnknownError, "DMCExecute exception"), + nullptr, m_isSysBlock); + } +} + +void BlockExecutive::onDmcExecuteFinish( + std::function callback) +{ + auto dmcChecksum = m_dmcRecorder->dumpAndClearChecksum(); + if (m_staticCall) + { + DMC_LOG(TRACE) << LOG_BADGE("Stat") << "DMCExecute.6:" + << "\t " << LOG_BADGE("DMCRecorder") << " DMCExecute for call finished " + << LOG_KV("blockNumber", number()) << LOG_KV("checksum", dmcChecksum); + } + else + { + DMC_LOG(INFO) << LOG_BADGE("Stat") << "DMCExecute.6:" + << "\t " << LOG_BADGE("DMCRecorder") + << " DMCExecute for transaction finished " << LOG_KV("blockNumber", number()) + << LOG_KV("checksum", dmcChecksum); + + DMC_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_BADGE("DMCRecorder") << " DMCExecute for transaction finished " + << LOG_KV("checksum", dmcChecksum); + } + + onExecuteFinish(std::move(callback)); +} + +void BlockExecutive::onExecuteFinish( + std::function callback) +{ + auto now = std::chrono::system_clock::now(); + m_executeElapsed = + std::chrono::duration_cast(now - m_currentTimePoint); + m_currentTimePoint = now; + + + if (m_staticCall) + { + // Set result to m_block + for (size_t i = 0; i < m_executiveResults.size(); i++) + { + if (i < m_block->receiptsSize()) + { + // bugfix: force update receipt of last executeBlock() remaining + m_block->setReceipt(i, m_executiveResults[i].receipt); + } + else + { + m_block->appendReceipt(m_executiveResults[i].receipt); + } + } + callback(nullptr, nullptr, m_isSysBlock); + } + else + { + // All Transaction finished, get hash + batchGetHashes([this, callback = std::move(callback)]( + Error::UniquePtr error, crypto::HashType hash) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + if (error) + { + SCHEDULER_LOG(ERROR) << "batchGetHashes error: " << error->errorMessage(); + callback(std::move(error), nullptr, m_isSysBlock); + return; + } + + m_hashElapsed = std::chrono::duration_cast( + std::chrono::system_clock::now() - m_currentTimePoint); + + // Set result to m_block + for (size_t i = 0; i < m_executiveResults.size(); i++) + { + if (i < m_block->receiptsSize()) + { + // bugfix: force update receipt of last executeBlock() remaining + m_block->setReceipt(i, m_executiveResults[i].receipt); + } + else + { + m_block->appendReceipt(m_executiveResults[i].receipt); + } + } + auto executedBlockHeader = + m_blockFactory->blockHeaderFactory()->populateBlockHeader(m_block->blockHeader()); + executedBlockHeader->setStateRoot(hash); + executedBlockHeader->setGasUsed(m_gasUsed); + executedBlockHeader->setTxsRoot(m_block->calculateTransactionRoot(*m_hashImpl)); + executedBlockHeader->setReceiptsRoot(m_block->calculateReceiptRoot(*m_hashImpl)); + executedBlockHeader->calculateHash(*m_hashImpl); + + m_result = executedBlockHeader; + callback(nullptr, m_result, m_isSysBlock); + }); + } +} + +void BlockExecutive::batchNextBlock(std::function callback) +{ + auto startTime = utcTime(); + auto status = std::make_shared(); + status->total = m_scheduler->m_executorManager->size(); + status->checkAndCommit = [this, startTime, callback = std::move(callback)]( + const CommitStatus& status) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped")); + return; + } + + if (status.failed > 0) + { + auto message = "Next block:" + boost::lexical_cast(number()) + + " with errors! " + boost::lexical_cast(status.failed); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number()) << message; + + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::BatchError, std::move(message))); + return; + } + + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << "NextBlock success" + << LOG_KV("executorNum", m_scheduler->m_executorManager->size()) + << LOG_KV("timeCost", utcTime() - startTime); + callback(nullptr); + }; + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") << "NextBlock request" + << LOG_KV("executorNum", m_scheduler->m_executorManager->size()); + + // for (auto& it : *(m_scheduler->m_executorManager)) + m_scheduler->m_executorManager->forEachExecutor( + [this, status]( + std::string, bcos::executor::ParallelTransactionExecutorInterface::Ptr executor) { + auto blockHeader = m_block->blockHeaderConst(); + executor->nextBlockHeader( + m_schedulerTermId, blockHeader, [this, status](bcos::Error::Ptr&& error) { + { + WriteGuard lock(status->x_lock); + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Next block executor error!" + << error->errorMessage(); + ++status->failed; + + if (error->errorCode() == + bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + } + else + { + ++status->success; + } + + if (status->success + status->failed < status->total) + { + return; + } + } + status->checkAndCommit(*status); + }); + }); +} + +void BlockExecutive::batchGetHashes( + std::function callback) +{ + auto totalHash = std::make_shared(); + + auto status = std::make_shared(); + status->total = m_scheduler->m_executorManager->size(); // all executors + status->checkAndCommit = [this, totalHash, callback = std::move(callback)]( + const CommitStatus& status) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), {}); + return; + } + + if (status.failed > 0) + { + auto message = "batchGetHashes" + boost::lexical_cast(number()) + + " with errors! " + boost::lexical_cast(status.failed); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(number()) << message; + + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::BatchError, std::move(message)), h256(0)); + return; + } + + callback(nullptr, std::move(*totalHash)); + }; + + // for (auto& it : *(m_scheduler->m_executorManager)) + + m_scheduler->m_executorManager->forEachExecutor( + [this, status, totalHash]( + std::string, bcos::executor::ParallelTransactionExecutorInterface::Ptr executor) { + executor->getHash( + number(), [status, totalHash](bcos::Error::Ptr&& error, crypto::HashType&& hash) { + { + WriteGuard lock(status->x_lock); + if (error) + { + SCHEDULER_LOG(ERROR) << "GetHash error!" << error->errorMessage(); + ++status->failed; + } + else + { + ++status->success; + SCHEDULER_LOG(DEBUG) << "GetHash success, success: " << status->success; + + *totalHash ^= hash; + } + + if (status->success + status->failed < status->total) + { + return; + } + } + status->checkAndCommit(*status); + }); + }); +} + +void BlockExecutive::batchBlockCommit( + uint64_t rollbackVersion, std::function callback) +{ + auto status = std::make_shared(); + status->total = 1 + m_scheduler->m_executorManager->size(); // self + all executors + status->checkAndCommit = [this, callback](const CommitStatus& status) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped")); + return; + } + + if (status.failed > 0) + { + auto message = "Commit block:" + boost::lexical_cast(number()) + + " with errors! " + boost::lexical_cast(status.failed); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(number()) << message; + + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CommitError, std::move(message))); + return; + } + + callback(nullptr); + }; + + bcos::protocol::TwoPCParams params; + params.number = number(); + params.timestamp = 0; + m_scheduler->m_storage->asyncCommit( + params, [rollbackVersion, status, this, callback](Error::Ptr&& error, uint64_t commitTS) { + if (error) + { +//#define COMMIT_FAILED_NEED_ROLLBACK +#ifdef COMMIT_FAILED_NEED_ROLLBACK + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Commit node storage error! need rollback" + << error->errorMessage(); + + batchBlockRollback(rollbackVersion, [this, callback](Error::UniquePtr&& error) { + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) + << "Rollback storage(for commit scheduler storage error) failed!" + << LOG_KV("number", number()) << " " << error->errorMessage(); + // FATAL ERROR, NEED MANUAL FIX! + + callback(std::move(error)); + return; + } + else + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CommitError, + "Commit scheduler storage error, rollback")); + return; + } + }); +#else + SCHEDULER_LOG(WARNING) + << BLOCK_NUMBER(number()) + << "Commit scheduler storage error, just return with no rollback" << LOG_KV("message", error->errorMessage()) + << LOG_KV("rollbackVersion", rollbackVersion); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CommitError, + "Commit scheduler storage error, just return with no rollback")); +#endif + return; + } + else + { + ++status->success; + } + + bcos::protocol::TwoPCParams executorParams; + executorParams.number = number(); + executorParams.timestamp = commitTS; + tbb::parallel_for_each(m_scheduler->m_executorManager->begin(), + m_scheduler->m_executorManager->end(), [&](auto const& executorIt) { + SCHEDULER_LOG(TRACE) << "Commit executor for block " << executorParams.number; + + executorIt->commit(executorParams, [this, status](bcos::Error::Ptr&& error) { + { + WriteGuard lock(status->x_lock); + if (error) + { + SCHEDULER_LOG(ERROR) + << BLOCK_NUMBER(number()) << "Commit executor error!" + << error->errorMessage(); + + // executor failed is also success++ + // because commit has been successful after ledger commit + // this executorIt->commit is just for clear storage cache. + ++status->success; + + if (error->errorCode() == + bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + } + else + { + ++status->success; + SCHEDULER_LOG(DEBUG) + << BLOCK_NUMBER(number()) + << "Commit executor success, success: " << status->success; + } + + if (status->success + status->failed < status->total) + { + return; + } + } + status->checkAndCommit(*status); + }); + }); + }); +} + +void BlockExecutive::batchBlockRollback( + uint64_t version, std::function callback) +{ + auto status = std::make_shared(); + status->total = 1 + m_scheduler->m_executorManager->size(); // self + all executors + status->checkAndCommit = [this, callback = std::move(callback)](const CommitStatus& status) { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped")); + return; + } + + if (status.failed > 0) + { + auto message = "Rollback block:" + boost::lexical_cast(number()) + + " with errors! " + boost::lexical_cast(status.failed); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(number()) << message; + + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::RollbackError, std::move(message))); + return; + } + + callback(nullptr); + }; + + bcos::protocol::TwoPCParams params; + params.number = number(); + params.timestamp = version; + m_scheduler->m_storage->asyncRollback( + params, [this, version, number = params.number, status](Error::Ptr&& error) { + { + WriteGuard lock(status->x_lock); + if (error) + { + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number) << "Rollback node storage error!" + << error->errorMessage(); + + ++status->failed; + } + else + { + ++status->success; + } + } + + if (status->failed > 0) + { + status->checkAndCommit(*status); + } + else + { + // for (auto& it : *(m_scheduler->m_executorManager)) + m_scheduler->m_executorManager->forEachExecutor( + [this, version, number, status](std::string, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor) { + bcos::protocol::TwoPCParams executorParams; + executorParams.number = number; + executorParams.timestamp = version; + executor->rollback( + executorParams, [this, number, status](bcos::Error::Ptr&& error) { + { + WriteGuard lock(status->x_lock); + if (error) + { + if (error->errorCode() == + bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + SCHEDULER_LOG(INFO) + << BLOCK_NUMBER(number) + << "Rollback a restarted executor. Ignore." + << error->errorMessage(); + ++status->success; + triggerSwitch(); + } + else + { + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number) + << "Rollback executor error!" + << error->errorMessage(); + ++status->failed; + } + } + else + { + ++status->success; + } + + if (status->success + status->failed < status->total) + { + return; + } + } + status->checkAndCommit(*status); + }); + }); + } + }); +} + + +DmcExecutor::Ptr BlockExecutive::registerAndGetDmcExecutor(std::string contractAddress) +{ + { + bcos::ReadGuard l(x_dmcExecutorLock); + auto dmcExecutorIt = m_dmcExecutors.find(contractAddress); + if (dmcExecutorIt != m_dmcExecutors.end()) + { + return dmcExecutorIt->second; + } + } + { + bcos::WriteGuard lock(x_dmcExecutorLock); + auto dmcExecutorIt = m_dmcExecutors.find(contractAddress); + if (dmcExecutorIt != m_dmcExecutors.end()) + { + return dmcExecutorIt->second; + } + + std::string dispatchAddress; + if (number() == 0) + { + dispatchAddress = "genesis block use same executor to init"; + } + else + { + dispatchAddress = contractAddress; + } + + auto executor = m_scheduler->executorManager()->dispatchExecutor(dispatchAddress); + auto executorInfo = m_scheduler->executorManager()->getExecutorInfo(dispatchAddress); + + if (executor == nullptr || executorInfo == nullptr) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR( + SchedulerError::ExecutorNotEstablishedError, "The executor has not started!")); + } + + if (!m_dmcRecorder) + { + m_dmcRecorder = std::make_shared(); + } + + auto dmcExecutor = std::make_shared(executorInfo->name, contractAddress, + m_block, executor, m_keyLocks, m_scheduler->m_hashImpl, m_dmcRecorder); + m_dmcExecutors.emplace(contractAddress, dmcExecutor); + + // register functions + dmcExecutor->setSchedulerOutHandler([this](ExecutiveState::Ptr executiveState) { + scheduleExecutive(std::move(executiveState)); + }); + + dmcExecutor->setOnTxFinishedHandler( + [this](bcos::protocol::ExecutionMessage::UniquePtr output) { + onTxFinish(std::move(output)); + }); + dmcExecutor->setOnNeedSwitchEventHandler([this]() { triggerSwitch(); }); + + // TODO: Slow wait! + dmcExecutor->setOnGetCodeHandler([this](std::string_view address) { + auto executor = m_scheduler->executorManager()->dispatchExecutor(address); + if (!executor) + { + SCHEDULER_LOG(ERROR) << "Could not dispatch correspond executor during getCode(). " + << LOG_KV("address", address); + return bcos::bytes(); + } + + // getCode from executor + std::promise codeFuture; + executor->getCode( + address, [&codeFuture, this](bcos::Error::Ptr error, bcos::bytes codes) { + if (error) + { + SCHEDULER_LOG(ERROR) + << "Could not getCode from correspond executor. Trigger switch." + << LOG_KV("code", error->errorCode()) + << LOG_KV("message", error->errorMessage()); + triggerSwitch(); + codeFuture.set_value(bcos::bytes()); + } + else + { + codeFuture.set_value(std::move(codes)); + } + }); + bcos::bytes codes = codeFuture.get_future().get(); + + return codes; + }); + + return dmcExecutor; + } +} + +void BlockExecutive::scheduleExecutive(ExecutiveState::Ptr executiveState) +{ + DmcExecutor::Ptr dmcExecutor = + registerAndGetDmcExecutor(std::string(executiveState->message->to())); + dmcExecutor->scheduleIn(std::move(executiveState)); +} + +void BlockExecutive::onTxFinish(bcos::protocol::ExecutionMessage::UniquePtr output) +{ + auto txGasUsed = m_gasLimit - output->gasAvailable(); + // Calc the gas set to header + if (bcos::precompiled::c_systemTxsAddress.find(output->from()) != + bcos::precompiled::c_systemTxsAddress.end()) + { + txGasUsed = 0; + } + m_gasUsed += txGasUsed; + auto receipt = m_scheduler->m_blockFactory->receiptFactory()->createReceipt(txGasUsed, + std::string(output->newEVMContractAddress()), output->takeLogEntries(), output->status(), + output->data(), m_block->blockHeaderConst()->number()); + + // write receipt in results + SCHEDULER_LOG(TRACE) << " 6.GenReceipt:\t [^^] " << output->toString() + << " -> contextID:" << output->contextID() - m_startContextID + << ", receipt: " << receipt->hash() << ", gasUsed: " << receipt->gasUsed() + << ", version: " << receipt->version() + << ", status: " << receipt->status(); + m_executiveResults[output->contextID() - m_startContextID].receipt = std::move(receipt); +} + + +void BlockExecutive::serialPrepareExecutor() +{ + // Notice: + // For the same DMC lock priority + // m_dmcExecutors must be prepared in contractAddress less<> serial order + + /// Handle normal message + bool hasScheduleOutMessage = false; + do + { + hasScheduleOutMessage = false; + // dump current DmcExecutor (m_dmcExecutors may be modified during traversing) + std::set> currentExecutors; + for (auto& it : m_dmcExecutors) + { + it.second->releaseOutdatedLock(); // release last round's lock + currentExecutors.insert(it.first); + } + + // for each current DmcExecutor + for (const auto& address : currentExecutors) + { + DMC_LOG(TRACE) << " 0.Pre-DmcExecutor: \t----------------- addr:" << address + << " | number:" << m_block->blockHeaderConst()->number() + << " -----------------"; + hasScheduleOutMessage |= + m_dmcExecutors[address]->prepare(); // may generate new contract in m_dmcExecutors + } + + // must all schedule out message has been handled. + } while (hasScheduleOutMessage); + + + /// try to handle locked message + // try to unlock some locked tx + bool needDetectDeadlock = true; + bool allFinished = true; + for (auto& it : m_dmcExecutors) + { + const auto& address = it.first; + auto dmcExecutor = m_dmcExecutors[address]; + if (dmcExecutor->hasFinished()) + { + continue; // must jump finished executor + } + DMC_LOG(TRACE) << " 3.UnlockPrepare: \t |---------------- addr:" << address + << " | number:" << std::to_string(m_block->blockHeaderConst()->number()) + << " ----------------|"; + + allFinished = false; + bool need = dmcExecutor->unlockPrepare(); + needDetectDeadlock &= need; + // if there is an executor need detect deadlock, noNeedDetectDeadlock = false + } + + if (needDetectDeadlock && !allFinished) + { + bool needRevert = false; + // detect deadlock and revert the first tx TODO: revert many tx in one DMC round + for (auto& it : m_dmcExecutors) + { + const auto& address = it.first; + DMC_LOG(TRACE) << " --detect--revert-- " << address << " | " + << m_block->blockHeaderConst()->number() << " -----------------"; + if (m_dmcExecutors[address]->detectLockAndRevert()) + { + needRevert = true; + break; // Just revert the first found tx + } + } + + if (!needRevert) + { + std::string errorMsg = "Need detect deadlock but no deadlock detected! block: " + + toString(m_block->blockHeaderConst()->number()); + DMC_LOG(ERROR) << errorMsg; + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, errorMsg)); + } + } +} + +std::string BlockExecutive::preprocessAddress(const std::string_view& address) +{ + std::string out; + if (address[0] == '0' && address[1] == 'x') + { + out = std::string(address.substr(2)); + } + else + { + out = std::string(address); + } + + // boost::to_lower(out); no need to be lower + return out; +} diff --git a/bcos-scheduler/src/BlockExecutive.h b/bcos-scheduler/src/BlockExecutive.h new file mode 100644 index 0000000..144c871 --- /dev/null +++ b/bcos-scheduler/src/BlockExecutive.h @@ -0,0 +1,203 @@ +#pragma once + +#include "Executive.h" +#include "ExecutorManager.h" +#include "GraphKeyLocks.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/TransactionMetaData.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ +class SchedulerImpl; +class DmcExecutor; +class DmcStepRecorder; + +class BlockExecutive : public std::enable_shared_from_this +{ +public: + using UniquePtr = std::unique_ptr; + using Ptr = std::shared_ptr; + + BlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool); + + BlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock) + : BlockExecutive(std::move(block), scheduler, startContextID, + std::move(transactionSubmitResultFactory), staticCall, std::move(_blockFactory), + std::move(_txPool)) + { + m_syncBlock = _syncBlock; + m_gasLimit = _gasLimit; + } + + BlockExecutive(const BlockExecutive&) = delete; + BlockExecutive(BlockExecutive&&) = delete; + BlockExecutive& operator=(const BlockExecutive&) = delete; + BlockExecutive& operator=(BlockExecutive&&) = delete; + + virtual ~BlockExecutive() { stop(); }; + + virtual void prepare(); + virtual void asyncExecute( + std::function callback); + virtual void asyncCall( + std::function callback); + virtual void asyncCommit(std::function callback); + + virtual void asyncNotify( + std::function)>& notifier, + std::function _callback); + + virtual void saveMessage( + std::string address, protocol::ExecutionMessage::UniquePtr message, bool withDAG); + + inline bcos::protocol::BlockNumber number() { return m_block->blockHeaderConst()->number(); } + + inline bcos::protocol::Block::Ptr block() { return m_block; } + inline bcos::protocol::BlockHeader::Ptr result() { return m_result; } + + bool isCall() { return m_staticCall; } + bool sysBlock() const { return m_isSysBlock; } + + void start() { m_isRunning = true; } + void stop() { m_isRunning = false; } + + void setOnNeedSwitchEventHandler(std::function onNeedSwitchEvent) + { + f_onNeedSwitchEvent = std::move(onNeedSwitchEvent); + } + + void triggerSwitch() + { + if (f_onNeedSwitchEvent) + { + f_onNeedSwitchEvent(); + } + } + + bool isSysBlock() { return m_isSysBlock; } + +protected: + struct CommitStatus + { + std::atomic_size_t total; + std::atomic_size_t success = 0; + std::atomic_size_t failed = 0; + uint64_t startTS = 0; + std::function checkAndCommit; + mutable SharedMutex x_lock; + }; + void batchNextBlock(std::function callback); + void batchGetHashes(std::function callback); + void batchBlockCommit(uint64_t rollbackVersion, std::function callback); + void batchBlockRollback(uint64_t version, std::function callback); + + struct BatchStatus // Batch state per batch + { + using Ptr = std::shared_ptr; + std::atomic_size_t total = 0; + std::atomic_size_t paused = 0; + std::atomic_size_t finished = 0; + std::atomic_size_t error = 0; + + std::atomic_bool callbackExecuted = false; + mutable SharedMutex x_lock; + std::string errorMessage; + }; + + void DAGExecute(std::function callback); // only used for DAG + std::map, ExecutiveState::Ptr, std::less<>> + m_executiveStates; // only used for DAG + + void DMCExecute( + std::function callback); + virtual std::shared_ptr registerAndGetDmcExecutor(std::string contractAddress); + void scheduleExecutive(ExecutiveState::Ptr executiveState); + void onTxFinish(bcos::protocol::ExecutionMessage::UniquePtr output); + void onDmcExecuteFinish( + std::function callback); + virtual void onExecuteFinish( + std::function callback); + + bcos::protocol::ExecutionMessage::UniquePtr buildMessage( + ContextID contextID, bcos::protocol::Transaction::ConstPtr tx); + void buildExecutivesFromMetaData(); + void buildExecutivesFromNormalTransaction(); + + virtual void serialPrepareExecutor(); + bcos::protocol::TransactionsPtr fetchBlockTxsFromTxPool( + bcos::protocol::Block::Ptr block, bcos::txpool::TxPoolInterface::Ptr txPool); + std::string preprocessAddress(const std::string_view& address); + + std::map, std::less<>> m_dmcExecutors; + std::shared_ptr m_dmcRecorder; + + std::vector m_executiveResults; + + size_t m_gasUsed = 0; + + GraphKeyLocks::Ptr m_keyLocks = std::make_shared(); + + std::chrono::system_clock::time_point m_currentTimePoint; + + std::chrono::milliseconds m_executeElapsed; + std::chrono::milliseconds m_hashElapsed; + std::chrono::milliseconds m_commitElapsed; + + bcos::protocol::Block::Ptr m_block; + bcos::protocol::TransactionsPtr m_blockTxs; + + bcos::protocol::BlockHeader::Ptr m_result; + SchedulerImpl* m_scheduler; + int64_t m_schedulerTermId; + size_t m_startContextID; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_transactionSubmitResultFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::txpool::TxPoolInterface::Ptr m_txPool; + + size_t m_gasLimit = TRANSACTION_GAS; + std::atomic_bool m_isSysBlock = false; + + bool m_staticCall = false; + bool m_syncBlock = false; + bool m_hasPrepared = false; + bool m_hasDAG = false; + mutable SharedMutex x_prepareLock; + mutable SharedMutex x_dmcExecutorLock; + + bool m_isRunning = false; + + std::function f_onNeedSwitchEvent; + crypto::Hash::Ptr m_hashImpl; +}; + +} // namespace bcos::scheduler \ No newline at end of file diff --git a/bcos-scheduler/src/BlockExecutiveFactory.cpp b/bcos-scheduler/src/BlockExecutiveFactory.cpp new file mode 100644 index 0000000..71e9762 --- /dev/null +++ b/bcos-scheduler/src/BlockExecutiveFactory.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The block executive(context) for serial transaction execution + * @file SerialBlockExecutive.h + * @author: wenlinli + * @date: 2022-07-13 + */ + +#include "BlockExecutiveFactory.h" +#include "BlockExecutive.h" +#include "SerialBlockExecutive.h" + + +using namespace std; +using namespace bcos::protocol; +using namespace bcos::scheduler; + + +std::shared_ptr BlockExecutiveFactory::build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool) +{ + if (m_isSerialExecute) + { + auto serialBlockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool); + return serialBlockExecutive; + } + else + { + auto blockExecutive = std::make_shared(block, scheduler, startContextID, + transactionSubmitResultFactory, staticCall, _blockFactory, _txPool); + return blockExecutive; + } +} + +std::shared_ptr BlockExecutiveFactory::build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock) +{ + if (m_isSerialExecute) + { + auto serialBlockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool, + _gasLimit, _syncBlock); + return serialBlockExecutive; + } + else + { + auto blockExecutive = std::make_shared(block, scheduler, startContextID, + transactionSubmitResultFactory, staticCall, _blockFactory, _txPool, _gasLimit, + _syncBlock); + return blockExecutive; + } +} \ No newline at end of file diff --git a/bcos-scheduler/src/BlockExecutiveFactory.h b/bcos-scheduler/src/BlockExecutiveFactory.h new file mode 100644 index 0000000..343d147 --- /dev/null +++ b/bcos-scheduler/src/BlockExecutiveFactory.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The block executive(context) for serial transaction execution + * @file SerialBlockExecutive.h + * @author: wenlinli + * @date: 2022-07-13 + */ + +#pragma once +#include "BlockExecutive.h" +#include "Common.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include +#include +#include + +namespace bcos::scheduler +{ +class BlockExecutiveFactory +{ +public: + using Ptr = std::shared_ptr; + BlockExecutiveFactory(bool isSerialExecute) : m_isSerialExecute(isSerialExecute) {} + virtual ~BlockExecutiveFactory() {} + + virtual std::shared_ptr build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool); + + virtual std::shared_ptr build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock); + +private: + bool m_isSerialExecute; +}; +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/Common.h b/bcos-scheduler/src/Common.h new file mode 100644 index 0000000..cfff579 --- /dev/null +++ b/bcos-scheduler/src/Common.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include +#include +#define SCHEDULER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("SCHEDULER") +#define SCHEDULER_BLK_LOG(LEVEL, NUMBER) \ + BCOS_LOG(LEVEL) << LOG_BADGE("SCHEDULER") << BLOCK_NUMBER(NUMBER) +namespace bcos::scheduler +{ +using ContextID = int64_t; +using Seq = int64_t; +using Context = std::tuple; +inline const uint64_t TRANSACTION_GAS = 3000000000; + +} // namespace bcos::scheduler \ No newline at end of file diff --git a/bcos-scheduler/src/DmcExecutor.cpp b/bcos-scheduler/src/DmcExecutor.cpp new file mode 100644 index 0000000..885a125 --- /dev/null +++ b/bcos-scheduler/src/DmcExecutor.cpp @@ -0,0 +1,467 @@ +#include "DmcExecutor.h" +#include "bcos-crypto/bcos-crypto/ChecksumAddress.h" +#include "bcos-framework/executor/ExecuteError.h" +#include + + +using namespace bcos::scheduler; + +void DmcExecutor::releaseOutdatedLock() +{ + m_executivePool.forEach( + MessageHint::NEED_PREPARE, [this](int64_t, ExecutiveState::Ptr executiveState) { + auto& message = executiveState->message; + if (message->type() == bcos::protocol::ExecutionMessage::FINISHED || + message->type() == bcos::protocol::ExecutionMessage::REVERT) + { + m_keyLocks->releaseKeyLocks(message->contextID(), message->seq()); + } + return true; + }); +} + +bool DmcExecutor::prepare() +{ + // clear env + m_executivePool.refresh(); + + // logging + m_executivePool.forEach(MessageHint::ALL, [](int64_t, ExecutiveState::Ptr executiveState) { + DMC_LOG(TRACE) << " 1.PendingMsg: \t\t [--] " << executiveState->toString(); + return true; + }); + + // prepare all that need to + m_executivePool.forEachAndClear(ExecutivePool::MessageHint::NEED_PREPARE, + [this](int64_t contextID, ExecutiveState::Ptr executiveState) { + auto hint = handleExecutiveMessage(executiveState); + m_executivePool.markAs(contextID, hint); + DMC_LOG(TRACE) << " 2.AfterPrepare: \t [..] " << executiveState->toString() << " " + << ExecutivePool::toString(hint); + return true; + }); + + bool hasScheduleOut = !m_executivePool.empty(MessageHint::NEED_SCHEDULE_OUT) || + !m_executivePool.empty(MessageHint::NEED_PREPARE); + + // handle schedule out message + m_executivePool.forEach(ExecutivePool::MessageHint::NEED_SCHEDULE_OUT, + [this](int64_t, ExecutiveState::Ptr executiveState) { + scheduleOut(executiveState); + return true; + }); + + // clear env + m_executivePool.refresh(); + return hasScheduleOut; +} + +bool DmcExecutor::unlockPrepare() +{ + m_executivePool.forEach( + MessageHint::LOCKED, [this](int64_t contextID, ExecutiveState::Ptr executiveState) { + auto& message = executiveState->message; + auto seq = message->seq(); + + if (message->type() != protocol::ExecutionMessage::KEY_LOCK) + { + DMC_LOG(FATAL) << "Handle a normal message in locking pool" << message->toString(); + assert(false); + } + + // Try to acquire key lock + if (!m_keyLocks->acquireKeyLock( + message->from(), message->keyLockAcquired(), contextID, seq)) + { + DMC_LOG(TRACE) << " Waiting key, contract: " << contextID << " | " << seq << " | " + << message->from() + << " keyLockAcquired: " << toHex(message->keyLockAcquired()); + } + else + { + DMC_LOG(TRACE) << " Wait key lock success, " << contextID << " | " << seq << " | " + << message->from() + << " keyLockAcquired: " << toHex(message->keyLockAcquired()); + + m_executivePool.markAs(contextID, MessageHint::NEED_SEND); + DMC_LOG(TRACE) << " 3.AfterPrepare: \t [..] " << executiveState->toString() + << " UNLOCK"; + } + return true; + }); + + return m_executivePool.empty(MessageHint::NEED_SEND); // has locked tx but nothing to send, + // need to detect deadlock +} + +bool DmcExecutor::detectLockAndRevert() +{ + bool found = false; + m_executivePool.forEach( + MessageHint::LOCKED, [this, &found](int64_t contextID, ExecutiveState::Ptr executiveState) { + if (m_keyLocks->detectDeadLock(contextID)) + { + auto& message = executiveState->message; + + SCHEDULER_LOG(INFO) << "Detected dead lock at " << contextID << " | " + << message->seq() << " , revert"; + + message->setType(protocol::ExecutionMessage::REVERT); + message->setCreate(false); + message->setKeyLocks({}); + + m_executivePool.markAs(contextID, MessageHint::NEED_SEND); + DMC_LOG(TRACE) << " 3.AfterPrepare: \t [..] " << executiveState->toString() + << " REVERT"; + found = true; + return false; // break at once found a tx can be revert + // just detect one TODO: detect and unlock more deadlock + } + else + { + return true; // continue forEach + } + }); + + return found; // no detected +} + +void DmcExecutor::submit(protocol::ExecutionMessage::UniquePtr message, bool withDAG) +{ + auto contextID = message->contextID(); + /* + DMC_LOG(TRACE) << std::endl + << " ////// " << message->contextID() << " | " << message->seq() << " | " << + std::hex + << message->transactionHash() << " | " << message->to(); + */ + { + // bcos::ReadGuard lock(x_concurrentLock); + m_executivePool.add( + contextID, std::make_shared(contextID, std::move(message), withDAG)); + } +} + +void DmcExecutor::scheduleIn(ExecutiveState::Ptr executive) +{ + assert(executive->message->to() == m_contractAddress); // message must belongs to this executor + auto contextID = executive->message->contextID(); + m_executivePool.add(contextID, executive); +} + +void DmcExecutor::go(std::function callback) +{ + /* + this code may lead to inconsistency, because in parallel for go(), + some message sent by other DMCExecutor will be executed in executor and return before this + instance go(), so some needs send messages will be ignored in the code below + + if (!m_executivePool.empty(MessageHint::NEED_PREPARE)) + { + callback(nullptr, NEED_PREPARE); + return; + } + */ + + if (hasFinished()) + { + callback(nullptr, FINISHED); + return; + } + + if (m_executivePool.empty(MessageHint::NEED_SEND)) + { + callback(nullptr, PAUSED); + return; + } + + assert(f_onSchedulerOut != nullptr); + + auto messages = std::make_shared>(); + + m_executivePool.forEachAndClear(MessageHint::NEED_SEND, + [this, messages](int64_t contextID, ExecutiveState::Ptr executiveState) { + auto& message = executiveState->message; + + auto keyLocks = m_keyLocks->getKeyLocksNotHoldingByContext(message->to(), contextID); + message->setKeyLocks(std::move(keyLocks)); + DMC_LOG(TRACE) << " 4.SendToExecutor:\t >>>> " << executiveState->toString() + << " >>>> [" << m_name << "]:" << m_contractAddress + << ", staticCall:" << message->staticCall(); + messages->push_back(std::move(message)); + + return true; + }); + + // record all send message for debug + m_dmcRecorder->recordSends(m_contractAddress, *messages); + + if (messages->size() == 1 && (*messages)[0]->staticCall()) + { + DMC_LOG(TRACE) << "send call request, address:" << m_contractAddress + << LOG_KV("executor", m_name) << LOG_KV("to", (*messages)[0]->to()) + << LOG_KV("contextID", (*messages)[0]->contextID()) + << LOG_KV("internalCall", (*messages)[0]->internalCall()) + << LOG_KV("type", (*messages)[0]->type()); + // is static call + m_executor->dmcCall(std::move((*messages)[0]), + [this, callback = std::move(callback)]( + bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr output) { + if (error) + { + SCHEDULER_LOG(ERROR) << "Call error: " << boost::diagnostic_information(*error); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + callback(std::move(error), ERROR); + } + else + { + std::vector outputs; + outputs.push_back(std::move(output)); + handleExecutiveOutputs(std::move(outputs)); + callback(nullptr, PAUSED); + } + }); + } + else + { + // is transaction + auto lastT = utcTime(); + DMC_LOG(DEBUG) << LOG_BADGE("Stat") << "DMCExecute.3:\t --> Send to executor\t\t" + << LOG_KV("round", m_dmcRecorder->getRound()) << LOG_KV("name", m_name) + << LOG_KV("contract", m_contractAddress) << LOG_KV("txNum", messages->size()) + << LOG_KV("blockNumber", m_block->blockHeader()->number()) + << LOG_KV("cost", utcTime() - lastT); + + m_executor->dmcExecuteTransactions(m_contractAddress, *messages, + [this, lastT, messages, callback = std::move(callback)](bcos::Error::UniquePtr error, + std::vector outputs) { + // update batch + DMC_LOG(DEBUG) << LOG_BADGE("Stat") << "DMCExecute.4:\t <-- Receive from executor\t" + << LOG_KV("round", m_dmcRecorder ? m_dmcRecorder->getRound() : 0) + << LOG_KV("name", m_name) << LOG_KV("contract", m_contractAddress) + << LOG_KV("txNum", messages->size()) + << LOG_KV("blockNumber", m_block && m_block->blockHeader() ? + m_block->blockHeader()->number() : + 0) + << LOG_KV("cost", utcTime() - lastT); + + if (error) + { + SCHEDULER_LOG(ERROR) << "Execute transaction error: " << error->errorMessage(); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + + callback(std::move(error), Status::ERROR); + } + else + { + handleExecutiveOutputs(std::move(outputs)); + callback(nullptr, PAUSED); + } + }); + } +} + +void DmcExecutor::handleCreateMessage(ExecutiveState::Ptr executiveState) +{ + auto& message = executiveState->message; + auto contextID = message->contextID(); + + if (message->type() == protocol::ExecutionMessage::SEND_BACK) + { + // must clear callstack + executiveState->callStack = std::stack>(); + + if (message->transactionHash() != h256(0)) + { + message->setType(protocol::ExecutionMessage::TXHASH); + } + else + { + message->setType(protocol::ExecutionMessage::MESSAGE); + } + } + + switch (message->type()) + { + case protocol::ExecutionMessage::MESSAGE: + case protocol::ExecutionMessage::TXHASH: + { + if (message->to().empty()) + { + auto newSeq = executiveState->currentSeq; + if (message->createSalt()) + { + // TODO: Add sender in this process(consider compat with ethereum) + message->setTo( + newEVMAddress(message->from(), message->data(), *(message->createSalt()))); + } + else + { + // TODO: Add sender in this process(consider compat with ethereum) + message->setTo( + newEVMAddress(m_block->blockHeaderConst()->number(), contextID, newSeq)); + } + } + break; + } + default: + break; + } +} + +DmcExecutor::MessageHint DmcExecutor::handleExecutiveMessage(ExecutiveState::Ptr executiveState) +{ + // handle create message first, create address and convert to normal message + handleCreateMessage(executiveState); + + // handle normal message + auto& message = executiveState->message; + + if (message->to() != m_contractAddress) + { + return MessageHint::NEED_SCHEDULE_OUT; + } + + switch (message->type()) + { + // Request type, push stack + case protocol::ExecutionMessage::MESSAGE: + case protocol::ExecutionMessage::TXHASH: + { + if (executiveState->message->data().toBytes() == bcos::protocol::GET_CODE_INPUT_BYTES) + { + auto newSeq = executiveState->currentSeq++; + executiveState->callStack.push(newSeq); + executiveState->message->setSeq(newSeq); + + // getCode + DMC_LOG(DEBUG) << "Get external code in scheduler" + << LOG_KV("codeAddress", executiveState->message->delegateCallAddress()); + bytes code = f_onGetCodeEvent(executiveState->message->delegateCallAddress()); + DMC_LOG(TRACE) << "Get external code success in scheduler" + << LOG_KV("codeAddress", executiveState->message->delegateCallAddress()) + << LOG_KV("codeSize", code.size()); + executiveState->message->setData(code); + executiveState->message->setType(protocol::ExecutionMessage::FINISHED); + return MessageHint::NEED_PREPARE; + } + + // update my key locks in m_keyLocks + m_keyLocks->batchAcquireKeyLock( + message->from(), message->keyLocks(), message->contextID(), message->seq()); + + auto newSeq = executiveState->currentSeq++; + executiveState->callStack.push(newSeq); + executiveState->message->setSeq(newSeq); + + if (executiveState->message->delegateCall()) + { + bytes code = f_onGetCodeEvent(message->delegateCallAddress()); + if (code.empty()) + { + DMC_LOG(DEBUG) + << "Could not getCode() from correspond executor during delegateCall: " + << message->toString(); + message->setType(protocol::ExecutionMessage::REVERT); + message->setCreate(false); + message->setKeyLocks({}); + return MessageHint::NEED_PREPARE; + } + + executiveState->message->setDelegateCallCode(code); + } + + return MessageHint::NEED_SEND; + } + // Return type, pop stack + case protocol::ExecutionMessage::FINISHED: + case protocol::ExecutionMessage::REVERT: + { + executiveState->callStack.pop(); + if (executiveState->callStack.empty()) + { + // Empty stack, execution is finished + f_onTxFinished(std::move(message)); + return MessageHint::END; + } + + message->setSeq(executiveState->callStack.top()); + message->setCreate(false); + return MessageHint::NEED_SEND; + } + // Retry type, send again + case protocol::ExecutionMessage::KEY_LOCK: + { + m_keyLocks->batchAcquireKeyLock( + message->from(), message->keyLocks(), message->contextID(), message->seq()); + + executiveState->message = std::move(message); + + return MessageHint::LOCKED; + } + default: + { + DMC_LOG(FATAL) << "Unrecognized message type: " << message->toString(); + assert(false); + break; + } + } + + // never goes here + DMC_LOG(FATAL) << "Message end with illegal manner" << message->toString(); + assert(false); + return MessageHint::END; +} + +void DmcExecutor::handleExecutiveOutputs( + std::vector outputs) +{ + m_dmcRecorder->recordReceives(m_contractAddress, outputs); + + for (auto& output : outputs) + { + std::string to = {output->to().data(), output->to().size()}; + auto contextID = output->contextID(); + + // bcos::ReadGuard lock(x_concurrentLock); + ExecutiveState::Ptr executiveState = m_executivePool.get(contextID); + executiveState->message = std::move(output); + DMC_LOG(TRACE) << " 5.RecvFromExecutor: <<<< [" << m_name << "]:" << m_contractAddress + << " <<<< " << executiveState->toString(); + if (to == m_contractAddress) + { + // bcos::ReadGuard lock(x_concurrentLock); + // is my output + m_executivePool.markAs(contextID, MessageHint::NEED_PREPARE); + } + else + { + m_executivePool.markAs(contextID, MessageHint::NEED_SCHEDULE_OUT); + scheduleOut(executiveState); + } + } +} + +void DmcExecutor::scheduleOut(ExecutiveState::Ptr executiveState) +{ + f_onSchedulerOut(std::move(executiveState)); // schedule out +} + +std::string DmcExecutor::newEVMAddress(int64_t blockNumber, int64_t contextID, int64_t seq) +{ + return bcos::newEVMAddress(m_hashImpl, blockNumber, contextID, seq); +} + +std::string DmcExecutor::newEVMAddress( + const std::string_view& _sender, bytesConstRef _init, u256 const& _salt) +{ + return bcos::newEVMAddress(m_hashImpl, _sender, _init, _salt); +} diff --git a/bcos-scheduler/src/DmcExecutor.h b/bcos-scheduler/src/DmcExecutor.h new file mode 100644 index 0000000..3751f71 --- /dev/null +++ b/bcos-scheduler/src/DmcExecutor.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The executor of a contract + * @file DmcExecutor.h + * @author: jimmyshi + * @date: 2022-03-23 + */ + + +#pragma once +#include "DmcStepRecorder.h" +#include "Executive.h" +#include "ExecutivePool.h" +#include "ExecutorManager.h" +#include "GraphKeyLocks.h" +#include +#include +#include +#include + +#define DMC_LOG(LEVEL) SCHEDULER_LOG(LEVEL) << LOG_BADGE("DMC") +//#define DMC_LOG(LEVEL) std::cout << LOG_BADGE("DMC") +namespace bcos::scheduler +{ +class DmcExecutor +{ +public: + using MessageHint = bcos::scheduler::ExecutivePool::MessageHint; + + enum Status : int8_t + { + ERROR, + NEED_PREPARE = 1, + PAUSED = 2, + FINISHED = 3 + }; + + using Ptr = std::shared_ptr; + + DmcExecutor(std::string name, std::string contractAddress, bcos::protocol::Block::Ptr block, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + GraphKeyLocks::Ptr keyLocks, bcos::crypto::Hash::Ptr hashImpl, + DmcStepRecorder::Ptr dmcRecorder) + : m_name(name), + m_contractAddress(contractAddress), + m_block(block), + m_executor(executor), + m_keyLocks(keyLocks), + m_hashImpl(hashImpl), + m_dmcRecorder(dmcRecorder) + {} + + void submit(protocol::ExecutionMessage::UniquePtr message, bool withDAG); + bool prepare(); // return true if has schedule out message + bool unlockPrepare(); // return true if need to detect deadlock + void releaseOutdatedLock(); + bool detectLockAndRevert(); // return true if detect a tx and revert + + void go(std::function callback); + bool hasFinished() { return m_executivePool.empty(); } + + void scheduleIn(ExecutiveState::Ptr executive); + + void setSchedulerOutHandler(std::function onSchedulerOut) + { + f_onSchedulerOut = std::move(onSchedulerOut); + }; + + void setOnTxFinishedHandler( + std::function onTxFinished) + { + f_onTxFinished = std::move(onTxFinished); + } + + void setOnNeedSwitchEventHandler(std::function onNeedSwitchEvent) + { + f_onNeedSwitchEvent = std::move(onNeedSwitchEvent); + } + + void setOnGetCodeHandler(std::function onGetCodeEvent) + { + f_onGetCodeEvent = std::move(onGetCodeEvent); + } + + void triggerSwitch() + { + if (f_onNeedSwitchEvent) + { + f_onNeedSwitchEvent(); + } + } + + void forEachExecutive(std::function handler) + { + m_executivePool.forEach( + ExecutivePool::MessageHint::ALL, [handler = std::move(handler)](ContextID contextID, + ExecutiveState::Ptr executiveState) { + handler(contextID, executiveState); + return true; + }); + } + +private: + MessageHint handleExecutiveMessage(ExecutiveState::Ptr executive); + void handleExecutiveOutputs(std::vector outputs); + void scheduleOut(ExecutiveState::Ptr executiveState); + + void handleCreateMessage(ExecutiveState::Ptr executive); + std::string newEVMAddress(int64_t blockNumber, int64_t contextID, int64_t seq); + std::string newEVMAddress( + const std::string_view& _sender, bytesConstRef _init, u256 const& _salt); + +private: + std::string m_name; + std::string m_contractAddress; + bcos::protocol::Block::Ptr m_block; + bcos::executor::ParallelTransactionExecutorInterface::Ptr m_executor; + GraphKeyLocks::Ptr m_keyLocks; + bcos::crypto::Hash::Ptr m_hashImpl; + DmcStepRecorder::Ptr m_dmcRecorder; + ExecutivePool m_executivePool; + + + mutable SharedMutex x_concurrentLock; + + std::function f_onTxFinished; + std::function f_onNeedSwitchEvent; + std::function f_onSchedulerOut; + std::function f_onGetCodeEvent; +}; + +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/DmcStepRecorder.cpp b/bcos-scheduler/src/DmcStepRecorder.cpp new file mode 100644 index 0000000..6b9c2a7 --- /dev/null +++ b/bcos-scheduler/src/DmcStepRecorder.cpp @@ -0,0 +1,96 @@ +// +// Created by Jimmy Shi on 2022/6/6. +// + +#include "DmcStepRecorder.h" + +using namespace bcos::scheduler; + +uint32_t DmcStepRecorder::getMessageChecksum(const protocol::ExecutionMessage::UniquePtr& message) +{ + bool staticCall = message->staticCall(); + + uint32_t type = (uint32_t)message->type(); + uint32_t contextID = (uint32_t)message->contextID(); + uint32_t seq = (uint32_t)message->seq(); + uint32_t from = getAddressChecksum(message->from()); + uint32_t to = getAddressChecksum(message->to()); + uint32_t origin = getAddressChecksum(message->origin()); + + uint32_t sufferSum = (~from + type) * (~to + contextID) ^ (~origin + seq); + + return staticCall ? sufferSum : ~sufferSum; +} + +uint32_t DmcStepRecorder::getAddressChecksum(std::string_view address) +{ + uint32_t ret = 0; + + for (int i = 0; i < 4; i++) + { + ret <<= 8; + ret |= (uint8_t)address[i]; + } + return ret; +} + +uint32_t DmcStepRecorder::getRecordSum( + std::string_view address, uint32_t id, const protocol::ExecutionMessage::UniquePtr& message) +{ + uint32_t addrSum = getAddressChecksum(address); + uint32_t msgSum = getMessageChecksum(message); + + return addrSum * msgSum * (id + 1); +} + +void DmcStepRecorder::recordSend( + std::string_view address, uint32_t id, const protocol::ExecutionMessage::UniquePtr& message) +{ + uint32_t sum = getRecordSum(address, id, message); + + m_sendChecksum.fetch_add(sum); +} + +void DmcStepRecorder::recordReceive( + std::string_view address, uint32_t id, const protocol::ExecutionMessage::UniquePtr& message) +{ + uint32_t sum = getRecordSum(address, id, message); + + m_receiveChecksum.fetch_add(sum); +} + +void DmcStepRecorder::recordSends( + std::string_view address, const std::vector& message) +{ + size_t size = message.size(); + + uint32_t sum = 0; + // #pragma omp parallel for schedule(static, 1000) reduction(+ : sum) + for (size_t id = 0; id < size; id++) + { + sum += getRecordSum(address, id, message[id]); + } + + m_sendChecksum.fetch_add(sum); +} + +void DmcStepRecorder::recordReceives( + std::string_view address, const std::vector& message) +{ + size_t size = message.size(); + uint32_t sum = 0; + // #pragma omp parallel for schedule(static, 1000) reduction(+ : sum) + for (size_t id = 0; id < size; id++) + { + sum += getRecordSum(address, id, message[id]); + } + + m_receiveChecksum.fetch_add(sum); +} + + +void DmcStepRecorder::nextDmcRound() +{ + m_round++; + m_checksum = m_sendChecksum.fetch_xor(m_receiveChecksum.fetch_xor(m_checksum)) + m_round; +} diff --git a/bcos-scheduler/src/DmcStepRecorder.h b/bcos-scheduler/src/DmcStepRecorder.h new file mode 100644 index 0000000..758c53e --- /dev/null +++ b/bcos-scheduler/src/DmcStepRecorder.h @@ -0,0 +1,83 @@ +// +// Created by Jimmy Shi on 2022/6/6. +// + +#pragma once +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ + +class DmcStepRecorder +{ + // Record DMC step for debugging inconsistency bug + +public: + using Ptr = std::shared_ptr; + + void recordSend(std::string_view address, uint32_t id, + const protocol::ExecutionMessage::UniquePtr& message); + + void recordReceive(std::string_view address, uint32_t id, + const protocol::ExecutionMessage::UniquePtr& message); + + void recordSends(std::string_view address, + const std::vector& message); + + void recordReceives(std::string_view address, + const std::vector& message); + + void nextDmcRound(); + + uint32_t getRound() { return m_round; } + + std::string toHex(uint32_t x) + { + std::stringstream ss; + ss << std::setbase(16) << x; // to hex + return ss.str(); + } + + std::string getChecksum() + { + return toHex(m_checksum) + ":" + getSendChecksum() + ":" + getReceiveChecksum(); + } + + std::string getSendChecksum() { return toHex(m_sendChecksum); } + + std::string getReceiveChecksum() { return toHex(m_receiveChecksum); } + + void clear() + { + m_sendChecksum = 0; + m_receiveChecksum = 0; + m_checksum = 0; + m_round = 0; + } + + std::string dumpAndClearChecksum() + { + std::string checksum = getChecksum(); + clear(); + return checksum; + } + + // TODO: record execute history + + +private: + std::atomic m_sendChecksum = 0; + std::atomic m_receiveChecksum = 0; + uint32_t m_round = 0; + uint32_t m_checksum = 0; + + uint32_t getMessageChecksum(const protocol::ExecutionMessage::UniquePtr& message); + uint32_t getAddressChecksum(std::string_view address); + uint32_t getRecordSum(std::string_view address, uint32_t id, + const protocol::ExecutionMessage::UniquePtr& message); +}; +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/Executive.h b/bcos-scheduler/src/Executive.h new file mode 100644 index 0000000..bfa2293 --- /dev/null +++ b/bcos-scheduler/src/Executive.h @@ -0,0 +1,46 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ +struct ExecutiveState // Executive state per tx +{ + using Ptr = std::shared_ptr; + ExecutiveState( + int64_t _contextID, bcos::protocol::ExecutionMessage::UniquePtr _message, bool _enableDAG) + : contextID(_contextID), message(std::move(_message)), enableDAG(_enableDAG), id(_contextID) + {} + + int64_t contextID; + std::stack> callStack; + bcos::protocol::ExecutionMessage::UniquePtr message; + bcos::Error::UniquePtr error; + int64_t currentSeq = 0; + bool enableDAG; + bool skip = false; + int64_t id; + + std::string toString() + { + std::stringstream ss; + ss << " " << contextID << " | " << callStack.size() << " | " + << (message ? message->toString() : "null"); + return ss.str(); + } +}; + +using ExecutiveStates = std::shared_ptr>; + +struct ExecutiveResult +{ + using Ptr = std::shared_ptr; + bcos::protocol::TransactionReceipt::Ptr receipt; + bcos::crypto::HashType transactionHash; + std::string source; +}; +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/ExecutivePool.cpp b/bcos-scheduler/src/ExecutivePool.cpp new file mode 100644 index 0000000..efa972b --- /dev/null +++ b/bcos-scheduler/src/ExecutivePool.cpp @@ -0,0 +1,190 @@ +// +// Created by Jimmy Shi on 2022/5/5. +// + +#include "ExecutivePool.h" + +using namespace bcos::scheduler; + +bool ExecutivePool::add(ContextID contextID, ExecutiveState::Ptr executiveState) +{ + m_pendingExecutives.insert({contextID, executiveState}); + return m_needPrepare->insert(contextID).second; // return if insert success +} + + +ExecutiveState::Ptr ExecutivePool::get(ContextID contextID) +{ + auto it = m_pendingExecutives.find(contextID); + if (it != m_pendingExecutives.end()) + { + return it->second; + } + else + { + return nullptr; + } +} + +void ExecutivePool::markAs(ContextID contextID, MessageHint type) +{ + switch (type) + { + case NEED_PREPARE: + { + m_needPrepare->insert(contextID); + break; + } + case LOCKED: + { + m_hasLocked->insert(contextID); + break; + } + case NEED_SEND: + { + m_needSend->insert(contextID); + break; + } + case NEED_SCHEDULE_OUT: + { + m_needScheduleOut->insert(contextID); + break; + } + case END: + { + m_needRemove->insert(contextID); + break; + } + case ALL: // do nothing + default: + break; + } +} + +void ExecutivePool::refresh() +{ + // handle need send + for (auto contextID : *m_needSend) + { + m_hasLocked->unsafe_erase(contextID); + } + + // remove all need remove + for (auto contextID : *m_needRemove) + { + m_pendingExecutives.unsafe_erase(contextID); + m_hasLocked->unsafe_erase(contextID); + m_needPrepare->unsafe_erase(contextID); + } + m_needRemove->clear(); + + for (auto contextID : *m_needScheduleOut) + { + m_pendingExecutives.unsafe_erase(contextID); + m_hasLocked->unsafe_erase(contextID); + m_needPrepare->unsafe_erase(contextID); + } + m_needScheduleOut->clear(); +} + +bool ExecutivePool::empty(MessageHint type) +{ + switch (type) + { + case NEED_PREPARE: + { + return m_needPrepare->empty(); + } + case LOCKED: + { + return m_hasLocked->empty(); + } + case NEED_SEND: + { + return m_needSend->empty(); + } + case NEED_SCHEDULE_OUT: + { + return m_needScheduleOut->empty(); + } + case END: + { + return m_needRemove->empty(); + } + case ALL: + { + return m_pendingExecutives.empty(); + } + } + return true; +} + + +void ExecutivePool::forEach(MessageHint type, ExecutiveStateHandler handler, bool needClear) +{ + SetPtr pool = nullptr; + switch (type) + { + case NEED_PREPARE: + { + pool = m_needPrepare; + break; + } + case LOCKED: + { + pool = m_hasLocked; + break; + } + case NEED_SEND: + { + pool = m_needSend; + break; + } + case END: + { + pool = m_needRemove; + break; + } + case NEED_SCHEDULE_OUT: + { + pool = m_needScheduleOut; + break; + } + case ALL: + { + SetPtr allID = std::make_shared>(); + for (auto it : m_pendingExecutives) + { + allID->insert(it.first); + } + pool = allID; + break; + } + default: + break; + } + + tbb::concurrent_set currentPool = *pool; + + if (needClear) + { + pool->clear(); + } + for (auto contextID : currentPool) + { + auto executiveState = get(contextID); + if (executiveState != nullptr) + { + if (!handler(contextID, executiveState)) + { + // break if no need to continue + break; + } + } + } +} + +void ExecutivePool::forEachAndClear(MessageHint type, ExecutiveStateHandler handler) +{ + forEach(type, std::move(handler), true); +} diff --git a/bcos-scheduler/src/ExecutivePool.h b/bcos-scheduler/src/ExecutivePool.h new file mode 100644 index 0000000..5598f14 --- /dev/null +++ b/bcos-scheduler/src/ExecutivePool.h @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The pool for executive states + * @file ExecutivePool.h + * @author: jimmyshi + * @date: 2022-05-05 + */ + + +#pragma once +#include "Common.h" +#include "Executive.h" + +#define TBB_PREVIEW_CONCURRENT_ORDERED_CONTAINERS 1 +#include +#include +#include + +namespace bcos::scheduler +{ +class ExecutivePool +{ +public: + using Ptr = std::shared_ptr; + using ExecutiveStateHandler = std::function; // return needContinue + using SetPtr = std::shared_ptr>; + enum MessageHint : int8_t + { + ALL = 0, + NEED_PREPARE = 1, + LOCKED = 2, + NEED_SEND = 3, + NEED_SCHEDULE_OUT = 4, + END = 5 + }; + + bool add(ContextID contextID, ExecutiveState::Ptr executiveState); // return if add success + ExecutiveState::Ptr get(ContextID contextID); + void markAs(ContextID contextID, MessageHint type); + void refresh(); + bool empty() { return m_pendingExecutives.empty() && m_hasLocked->empty(); } + bool empty(MessageHint type); + void forEach(MessageHint type, ExecutiveStateHandler handler, bool needClear = false); + void forEachAndClear(MessageHint type, ExecutiveStateHandler handler); + + static std::string toString(MessageHint type) + { + switch (type) + { + case NEED_PREPARE: + { + return "NEED_PREPARE"; + } + case LOCKED: + { + return "LOCKED"; + } + case NEED_SEND: + { + return "NEED_SEND"; + } + case NEED_SCHEDULE_OUT: + { + return "NEED_SCHEDULE_OUT"; + } + case END: + { + return "END"; + } + case ALL: + { + return "ALL"; + } + } + return "Unknown"; + } + +private: + tbb::concurrent_unordered_map m_pendingExecutives; + + SetPtr m_needPrepare = std::make_shared>(); + SetPtr m_hasLocked = std::make_shared>(); + SetPtr m_needScheduleOut = std::make_shared>(); + SetPtr m_needSend = std::make_shared>(); + SetPtr m_needRemove = std::make_shared>(); +}; +} // namespace bcos::scheduler \ No newline at end of file diff --git a/bcos-scheduler/src/ExecutorManager.cpp b/bcos-scheduler/src/ExecutorManager.cpp new file mode 100644 index 0000000..69279df --- /dev/null +++ b/bcos-scheduler/src/ExecutorManager.cpp @@ -0,0 +1,242 @@ +#include "ExecutorManager.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::scheduler; + +bool ExecutorManager::addExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, int64_t seq) +{ + { + UpgradableGuard l(m_mutex); + if (m_name2Executors.count(name)) + { + return false; + } + + auto executorInfo = std::make_shared(); + executorInfo->name = std::move(name); + executorInfo->executor = std::move(executor); + executorInfo->seq = seq; + + UpgradeGuard ul(l); + auto [it, exists] = m_name2Executors.emplace(executorInfo->name, executorInfo); + boost::ignore_unused(it); + + if (!exists) + { + return false; + } + + m_executorPriorityQueue.emplace(std::move(executorInfo)); + } + + if (seq >= 0 && m_executorChangeHandler) + { + m_executorChangeHandler(); + } + + return true; +} + +bcos::executor::ParallelTransactionExecutorInterface::Ptr ExecutorManager::dispatchExecutor( + const std::string_view& _contract) +{ + auto contract = toLowerAddress(_contract); + UpgradableGuard l(m_mutex); + if (m_name2Executors.empty()) + { + return nullptr; + } + auto executorIt = m_contract2ExecutorInfo.find(contract); + if (executorIt != m_contract2ExecutorInfo.end()) + { + return executorIt->second->executor; + } + UpgradeGuard ul(l); + auto executorInfo = m_executorPriorityQueue.top(); + m_executorPriorityQueue.pop(); + + auto [contractStr, success] = executorInfo->contracts.insert(std::string(contract)); + if (!success) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Insert into contracts fail!")); + } + m_executorPriorityQueue.push(executorInfo); + + (void)m_contract2ExecutorInfo.emplace(*contractStr, executorInfo); + + return executorInfo->executor; +} + +bcos::executor::ParallelTransactionExecutorInterface::Ptr +ExecutorManager::dispatchCorrespondExecutor(const std::string_view& _contract) +{ + auto contract = toLowerAddress(_contract); + UpgradableGuard l(m_mutex); + auto executorIt = m_contract2ExecutorInfo.find(contract); + if (executorIt != m_contract2ExecutorInfo.end()) + { + return executorIt->second->executor; + } + else + { + return nullptr; + } +} + + +bcos::scheduler::ExecutorManager::ExecutorInfo::Ptr ExecutorManager::getExecutorInfo( + const std::string_view& _contract) +{ + auto contract = toLowerAddress(_contract); + ReadGuard l(m_mutex); + auto it = m_contract2ExecutorInfo.find(contract); + if (it == m_contract2ExecutorInfo.end()) + { + return nullptr; + } + else + { + return it->second; + } +} + +bool ExecutorManager::removeExecutor(const std::string_view& name) +{ + bool notify = false; + WriteGuard lock(m_mutex); + auto it = m_name2Executors.find(name); + if (it != m_name2Executors.end()) + { + auto& executorInfo = it->second; + + for (auto contractIt = executorInfo->contracts.begin(); + contractIt != executorInfo->contracts.end(); ++contractIt) + { + auto count = m_contract2ExecutorInfo.unsafe_erase(*contractIt); + if (count < 1) + { + BOOST_THROW_EXCEPTION(bcos::Exception("Can't find contract in container")); + } + } + + m_name2Executors.erase(it); + notify = true; + + m_executorPriorityQueue = std::priority_queue, ExecutorInfoComp>(); + + for (auto& it : m_name2Executors) + { + m_executorPriorityQueue.push(it.second); + } + } + else + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Not found executor: " + std::string(name))); + } + + if (notify && m_executorChangeHandler) + { + m_executorChangeHandler(); + } + + return notify; +} + + +std::pair ExecutorManager::getExecutorStatus( + const std::string& _executorName, + const bcos::executor::ParallelTransactionExecutorInterface::Ptr& _executor) +{ + // fetch status + EXECUTOR_MANAGER_LOG(TRACE) << "Query executor status" << LOG_KV("executorName", _executorName); + std::promise statusPromise; + _executor->status([&_executorName, &statusPromise](bcos::Error::UniquePtr error, + bcos::protocol::ExecutorStatus::UniquePtr status) { + if (error) + { + EXECUTOR_MANAGER_LOG(ERROR) + << LOG_BADGE("getExecutorStatus") << "Could not get executor status" + << LOG_KV("executorName", _executorName) << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + statusPromise.set_value(nullptr); + } + else + { + statusPromise.set_value(std::move(status)); + } + }); + + bcos::protocol::ExecutorStatus::UniquePtr status = statusPromise.get_future().get(); + if (status == nullptr) + { + return {false, nullptr}; + } + else + { + EXECUTOR_MANAGER_LOG(TRACE) + << "Get executor status success" << LOG_KV("executorName", _executorName) + << LOG_KV("statusSeq", status->seq()); + return {true, std::move(status)}; + } +} + + +void ExecutorManager::checkExecutorStatus() +{ + bool notify = false; + + { + ReadGuard lock(m_mutex); + for (auto& [executorNameView, executorInfo] : m_name2Executors) + { + const std::string& executorName = executorInfo->name; + auto [success, status] = getExecutorStatus(executorName, executorInfo->executor); + if (!success) + { + EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("checkExecutorStatus") << LOG_DESC("getExecutorStatus failed") + << LOG_KV("executorName", executorInfo->name); + notify = true; + break; + } + + int64_t oldSeq = executorInfo->seq; + int64_t newSeq = status->seq(); + // reset seq to newSeq + executorInfo->seq = newSeq; + if (newSeq != oldSeq) + { + EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("checkExecutorStatus") << LOG_DESC("executor seq has been changed") + << LOG_KV("executorName", executorInfo->name) << LOG_KV("oldSeq", oldSeq) + << LOG_KV("newSeq", newSeq); + notify = true; + break; + } + } + } + + if (notify && m_executorChangeHandler) + { + m_executorChangeHandler(); + } + + EXECUTOR_MANAGER_LOG(TRACE) << LOG_BADGE("checkExecutorStatus") << LOG_KV("notify", notify); + + if (m_timer) + { + m_timer->restart(); + } +} \ No newline at end of file diff --git a/bcos-scheduler/src/ExecutorManager.h b/bcos-scheduler/src/ExecutorManager.h new file mode 100644 index 0000000..1b6a09e --- /dev/null +++ b/bcos-scheduler/src/ExecutorManager.h @@ -0,0 +1,218 @@ +#pragma once + +#include "bcos-utilities/Timer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ + +#define EXECUTOR_MANAGER_CHECK_PERIOD (5000) + +#define EXECUTOR_MANAGER_LOG(LEVEL) \ + BCOS_LOG(LEVEL) << LOG_BADGE("EXECUTOR_MANAGER") << LOG_BADGE("Switch") + +class ExecutorManager +{ +public: + using Ptr = std::shared_ptr; + + ExecutorManager() + { + m_timer = std::make_shared(EXECUTOR_MANAGER_CHECK_PERIOD, "executorMgr"); + m_timer->registerTimeoutHandler([this]() { checkExecutorStatus(); }); + } + + virtual ~ExecutorManager() { stopTimer(); } + + /** + * Only used in max version + */ + void startTimer() + { + if (m_timer) + { + m_timer->start(); + } + } + + void stopTimer() + { + if (m_timer) + { + m_timer->stop(); + } + } + + bool addExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, int64_t seq = -1); + + bcos::executor::ParallelTransactionExecutorInterface::Ptr dispatchExecutor( + const std::string_view& contract); + + // return nullptr if there is no executor dispatched in this contract before + bcos::executor::ParallelTransactionExecutorInterface::Ptr dispatchCorrespondExecutor( + const std::string_view& contract); + + bool removeExecutor(const std::string_view& name); + + void checkExecutorStatus(); + + std::pair getExecutorStatus( + const std::string& _executorName, + const bcos::executor::ParallelTransactionExecutorInterface::Ptr& _executor); + + auto begin() const + { + return boost::make_transform_iterator(m_name2Executors.cbegin(), + std::bind(&ExecutorManager::executorView, this, std::placeholders::_1)); + } + + auto end() const + { + return boost::make_transform_iterator(m_name2Executors.cend(), + std::bind(&ExecutorManager::executorView, this, std::placeholders::_1)); + } + + void forEachExecutor( + std::function + handleExecutor) + { + ReadGuard lock(m_mutex); + if (m_name2Executors.empty()) + { + return; + } + + for (auto it : m_name2Executors) + { + handleExecutor(std::string(it.first), it.second->executor); + } + } + + size_t size() const + { + ReadGuard lock(m_mutex); + return m_name2Executors.size(); + } + + void clear() + { + bool notify = false; + { + WriteGuard lock(m_mutex); + if (!m_name2Executors.empty()) + { + notify = true; + m_contract2ExecutorInfo.clear(); + m_name2Executors.clear(); + m_executorPriorityQueue = std::priority_queue, ExecutorInfoComp>(); + } + } + + if (notify && m_executorChangeHandler) + { + m_executorChangeHandler(); + } + }; + + virtual void stop() + { + EXECUTOR_MANAGER_LOG(INFO) << "Try to stop ExecutorManager"; + + + std::vector executors; + { + if (m_name2Executors.empty()) + { + return; + } + + WriteGuard lock(m_mutex); + for (auto it : m_name2Executors) + { + executors.push_back(it.second->executor); + } + } + + // no lock blocking to stop + for (auto& executor : executors) + { + executor->stop(); + } + + stopTimer(); + } + + virtual void setExecutorChangeHandler(std::function _handler) + { + m_executorChangeHandler = _handler; + } + + std::function executorChangeHandler() { return m_executorChangeHandler; } + + struct ExecutorInfo + { + using Ptr = std::shared_ptr; + + std::string name; + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor; + std::set contracts; + int64_t seq{0}; + }; + + ExecutorInfo::Ptr getExecutorInfo(const std::string_view& contract); + ExecutorInfo::Ptr getExecutorInfoByName(const std::string_view& name) + { + return m_name2Executors[name]; + } + +private: + std::shared_ptr m_timer; + + mutable SharedMutex m_mutex; + std::unordered_map> + m_name2Executors; + + struct ExecutorInfoComp + { + bool operator()(const ExecutorInfo::Ptr& lhs, const ExecutorInfo::Ptr& rhs) const + { + return lhs->contracts.size() > rhs->contracts.size(); + } + }; + + inline std::string toLowerAddress(const std::string_view& address) + { + return boost::algorithm::hex_lower(std::string(address)); + } + + std::function m_executorChangeHandler; + + tbb::concurrent_unordered_map> + m_contract2ExecutorInfo; + + std::priority_queue, ExecutorInfoComp> + m_executorPriorityQueue; + + + bcos::executor::ParallelTransactionExecutorInterface::Ptr const& executorView( + const decltype(m_name2Executors)::value_type& value) const + { + return value.second->executor; + } +}; +} // namespace bcos::scheduler \ No newline at end of file diff --git a/bcos-scheduler/src/GraphKeyLocks.cpp b/bcos-scheduler/src/GraphKeyLocks.cpp new file mode 100644 index 0000000..02a0735 --- /dev/null +++ b/bcos-scheduler/src/GraphKeyLocks.cpp @@ -0,0 +1,277 @@ +#include "GraphKeyLocks.h" +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::scheduler; + +bool GraphKeyLocks::batchAcquireKeyLock( + std::string_view contract, gsl::span keys, ContextID contextID, Seq seq) +{ + if (!keys.empty()) + { + for (auto& it : keys) + { + if (!acquireKeyLock(contract, it, contextID, seq)) + { + auto message = (boost::format("Batch acquire lock failed, contract: %s" + ", key: %s, contextID: %ld, seq: %ld") % + contract % toHex(it) % contextID % seq) + .str(); + SCHEDULER_LOG(ERROR) << message; + BOOST_THROW_EXCEPTION(BCOS_ERROR(UnexpectedKeyLockError, message)); + } + } + } + + return true; +} + +bool GraphKeyLocks::acquireKeyLock( + std::string_view contract, std::string_view key, int64_t contextID, int64_t seq) +{ + auto keyVertex = touchKeyLock(std::make_tuple(contract, key)); + auto contextVertex = touchContext(contextID); + + auto range = boost::out_edges(keyVertex, m_graph); + for (auto it = range.first; it != range.second; ++it) + { + auto vertex = boost::get(VertexPropertyTag(), boost::target(*it, m_graph)); + if (std::get<0>(*vertex) != contextID) + { + KEY_LOCK_LOG(TRACE) << boost::format( + "Acquire key lock failed, request: [%s, %s, %ld, %ld] " + "exists: [%ld]") % + contract % toHex(key) % contextID % seq % + std::get<0>(*vertex); + + // Key lock holding by another context + addEdge(contextVertex, keyVertex, seq); + KEY_LOCK_LOG(TRACE) << " [[" << std::string(contract) << ":" << toHex(key) << "]] -> " + << contextID << " | " << seq; + return false; + } + } + + // Remove all request edge + boost::remove_edge(contextVertex, keyVertex, m_graph); + + // Add an own edge + addEdge(keyVertex, contextVertex, seq); + KEY_LOCK_LOG(TRACE) << " [" << std::string(contract) << ":" << toHex(key) << "] -> " + << contextID << " | " << seq; + + SCHEDULER_LOG(TRACE) << "Acquire key lock success, contract: " << contract << " key: " << key + << " contextID: " << contextID << " seq: " << seq; + + return true; +} + + +std::vector GraphKeyLocks::getKeyLocksNotHoldingByContext( + std::string_view contract, int64_t excludeContextID) const +{ + std::set uniqueKeyLocks; + + auto range = boost::edges(m_graph); + for (auto it = range.first; it != range.second; ++it) + { + auto sourceVertex = boost::get(VertexPropertyTag(), boost::source(*it, m_graph)); + auto targetVertex = boost::get(VertexPropertyTag(), boost::target(*it, m_graph)); + + if (targetVertex->index() == 0 && std::get<0>(*targetVertex) != excludeContextID && + sourceVertex->index() == 1 && std::get<0>(std::get<1>(*sourceVertex)) == contract) + { + uniqueKeyLocks.emplace(std::get<1>(std::get<1>(*sourceVertex))); + } + } + + std::vector keyLocks; + keyLocks.reserve(uniqueKeyLocks.size()); + for (auto& it : uniqueKeyLocks) + { + keyLocks.emplace_back(std::move(it)); + } + + return keyLocks; +} + +void GraphKeyLocks::releaseKeyLocks(int64_t contextID, int64_t seq) +{ + if (m_vertexes.count(Vertex(contextID)) == 0) + { + return; + } + + SCHEDULER_LOG(TRACE) << "Release key lock, contextID: " << contextID << " seq: " << seq; + + KEY_LOCK_LOG(TRACE) << " [*****] -> " << contextID << " | " << seq; + auto vertex = touchContext(contextID); + + auto edgeRemoveFunc = [seq, graph = &m_graph](auto range) mutable -> bool { + size_t total = 0; + size_t removed = 0; + + for (auto next = range.first; range.first != range.second; range.first = next) + { + ++total; + ++next; + auto edgeSeq = boost::get(EdgePropertyTag(), *range.first); + if (edgeSeq == seq) + { + ++removed; + if (bcos::LogLevel::TRACE <= bcos::c_fileLogLevel) + { + auto source = + boost::get(VertexPropertyTag(), boost::source(*range.first, *graph)); + auto target = + boost::get(VertexPropertyTag(), boost::target(*range.first, *graph)); + if (target->index() == 1) + { + source = target; + } + + const auto& [contract, key] = std::get<1>(*source); + SCHEDULER_LOG(TRACE) << "Releasing key lock, contract: " << contract + << " key: " << bcos::toHexString(key); + } + boost::remove_edge(*range.first, *graph); + } + } + + return total == removed; + }; + + auto clearedIn = edgeRemoveFunc(boost::in_edges(vertex, m_graph)); + auto clearedOut = edgeRemoveFunc(boost::out_edges(vertex, m_graph)); + + if (clearedIn && clearedOut) + { + // All edge had removed, delete the vertex + boost::remove_vertex(vertex, m_graph); + m_vertexes.erase(contextID); + } +} + +bool GraphKeyLocks::detectDeadLock(ContextID contextID) +{ + struct GraphVisitor + { + GraphVisitor(bool& backEdge) : m_backEdge(backEdge) {} + + void initialize_vertex(VertexID, const Graph&) {} + void start_vertex(VertexID, const Graph&) {} + void discover_vertex(VertexID, const Graph&) {} + void examine_edge(EdgeID, const Graph&) {} + void tree_edge(EdgeID, const Graph&) {} + void forward_or_cross_edge(EdgeID, const Graph&) {} + void finish_edge(EdgeID, const Graph&) {} + void finish_vertex(VertexID, const Graph&) {} + + void back_edge(EdgeID edgeID, const Graph&) const + { + auto edgeSeq = boost::get(EdgePropertyTag(), edgeID); + SCHEDULER_LOG(TRACE) << "Detected back edge seq: " << edgeSeq; + + m_backEdge = true; + } + + bool& m_backEdge; + }; + + auto it = m_vertexes.find(bcos::scheduler::GraphKeyLocks::Vertex(contextID)); + if (it == m_vertexes.end()) + { + // No vertex, may be removed + return false; + } + + if (boost::in_degree(it->second, m_graph) == 0) + { + // No in degree, not holding key lock + return false; + } + + std::map vertexColors; + bool hasDeadLock = false; + boost::depth_first_visit(m_graph, it->second, GraphVisitor(hasDeadLock), + boost::make_assoc_property_map(vertexColors), + [&hasDeadLock](VertexID, const Graph&) { return hasDeadLock; }); + + + return hasDeadLock; +} + +GraphKeyLocks::VertexID GraphKeyLocks::touchContext(int64_t contextID) +{ + auto [it, inserted] = m_vertexes.emplace(Vertex(contextID), VertexID()); + if (inserted) + { + it->second = boost::add_vertex(&(it->first), m_graph); + } + auto contextVertexID = it->second; + + return contextVertexID; +} + +GraphKeyLocks::VertexID GraphKeyLocks::touchKeyLock(KeyLockView keyLockView) +{ + auto contractKeyView = keyLockView; + auto it = m_vertexes.lower_bound(contractKeyView); + if (it != m_vertexes.end() && it->first == contractKeyView) + { + return it->second; + } + + auto inserted = m_vertexes.emplace_hint(it, + Vertex(std::make_tuple( + std::string(std::get<0>(contractKeyView)), std::string(std::get<1>(contractKeyView)))), + VertexID()); + inserted->second = boost::add_vertex(&(inserted->first), m_graph); + return inserted->second; +} + +void GraphKeyLocks::addEdge(VertexID source, VertexID target, int64_t seq) +{ + bool exists = false; + + auto range = boost::edge_range(source, target, m_graph); + for (auto it = range.first; it != range.second; ++it) + { + auto edgeSeq = boost::get(EdgePropertyTag(), *it); + if (edgeSeq == seq) + { + exists = true; + } + } + + if (!exists) + { + boost::add_edge(source, target, seq, m_graph); + } +} + +void GraphKeyLocks::removeEdge(VertexID source, VertexID target, int64_t seq) +{ + auto range = boost::edge_range(source, target, m_graph); + for (auto it = range.first; it != range.second; ++it) + { + auto edgeSeq = boost::get(EdgePropertyTag(), *it); + if (edgeSeq == seq) + { + boost::remove_edge(*it, m_graph); + break; + } + } +} \ No newline at end of file diff --git a/bcos-scheduler/src/GraphKeyLocks.h b/bcos-scheduler/src/GraphKeyLocks.h new file mode 100644 index 0000000..e13a672 --- /dev/null +++ b/bcos-scheduler/src/GraphKeyLocks.h @@ -0,0 +1,127 @@ +#pragma once + +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define KEY_LOCK_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("SCHEDULER") << LOG_BADGE("KEY_LOCK") +// #define KEY_LOCK_LOG(LEVEL) std::cout << LOG_BADGE("KEY_LOCK") + +namespace bcos::scheduler +{ +class GraphKeyLocks +{ +public: + using Ptr = std::shared_ptr; + using KeyLock = std::tuple; + using KeyLockView = std::tuple; + + using ContractView = std::string_view; + using KeyView = std::string_view; + + GraphKeyLocks() = default; + GraphKeyLocks(const GraphKeyLocks&) = delete; + GraphKeyLocks(GraphKeyLocks&&) = delete; + GraphKeyLocks& operator=(const GraphKeyLocks&) = delete; + GraphKeyLocks& operator=(GraphKeyLocks&&) = delete; + + bool batchAcquireKeyLock(std::string_view contract, gsl::span keyLocks, + ContextID contextID, Seq seq); + + bool acquireKeyLock( + std::string_view contract, std::string_view key, ContextID contextID, Seq seq); + + std::vector getKeyLocksNotHoldingByContext( + std::string_view contract, ContextID excludeContextID) const; + + void releaseKeyLocks(ContextID contextID, Seq seq); + + bool detectDeadLock(ContextID contextID); + + struct Vertex : public std::variant + { + using std::variant::variant; + + bool operator==(const KeyLockView& rhs) const + { + if (index() != 1) + { + return false; + } + + auto view = std::make_tuple(std::string_view(std::get<0>(std::get<1>(*this))), + std::string_view(std::get<1>(std::get<1>(*this)))); + return view == rhs; + } + }; + +private: + struct VertexIterator + { + using kind = boost::vertex_property_tag; + }; + using VertexProperty = boost::property; + struct EdgeSeq + { + using kind = boost::edge_property_tag; + }; + using EdgeProperty = boost::property; + + using Graph = boost::adjacency_list; + using VertexPropertyTag = boost::property_map::const_type; + using EdgePropertyTag = boost::property_map::const_type; + using VertexID = Graph::vertex_descriptor; + using EdgeID = Graph::edge_descriptor; + + Graph m_graph; + std::map> m_vertexes; + + VertexID touchContext(ContextID contextID); + VertexID touchKeyLock(KeyLockView keylockView); + + void addEdge(VertexID source, VertexID target, Seq seq); + void removeEdge(VertexID source, VertexID target, Seq seq); +}; + +} // namespace bcos::scheduler + +namespace std +{ +inline bool operator<(const bcos::scheduler::GraphKeyLocks::Vertex& lhs, + const bcos::scheduler::GraphKeyLocks::KeyLockView& rhs) +{ + if (lhs.index() != 1) + { + return true; + } + + auto view = std::make_tuple(std::string_view(std::get<0>(std::get<1>(lhs))), + std::string_view(std::get<1>(std::get<1>(lhs)))); + return view < rhs; +} + +inline bool operator<(const bcos::scheduler::GraphKeyLocks::KeyLockView& lhs, + const bcos::scheduler::GraphKeyLocks::Vertex& rhs) +{ + if (rhs.index() != 1) + { + return false; + } + + auto view = std::make_tuple(std::string_view(std::get<0>(std::get<1>(rhs))), + std::string_view(std::get<1>(std::get<1>(rhs)))); + return lhs < view; +} +} // namespace std \ No newline at end of file diff --git a/bcos-scheduler/src/SchedulerFactory.h b/bcos-scheduler/src/SchedulerFactory.h new file mode 100644 index 0000000..dd465d2 --- /dev/null +++ b/bcos-scheduler/src/SchedulerFactory.h @@ -0,0 +1,80 @@ +#pragma once +#include "SchedulerImpl.h" + + +namespace bcos::scheduler +{ +class SchedulerFactory +{ +public: + using Ptr = std::shared_ptr; + + SchedulerFactory(ExecutorManager::Ptr executorManager, + bcos::ledger::LedgerInterface::Ptr ledger, + bcos::storage::TransactionalStorageInterface::Ptr storage, + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + bcos::protocol::BlockFactory::Ptr blockFactory, bcos::txpool::TxPoolInterface::Ptr txPool, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bcos::crypto::Hash::Ptr hashImpl, bool isAuthCheck, bool isWasm, bool isSerialExecute) + : m_executorManager(executorManager), + m_ledger(ledger), + m_storage(storage), + m_executionMessageFactory(executionMessageFactory), + m_blockFactory(blockFactory), + m_txPool(txPool), + m_transactionSubmitResultFactory(transactionSubmitResultFactory), + m_hashImpl(hashImpl), + m_isAuthCheck(isAuthCheck), + m_isWasm(isWasm), + m_isSerialExecute(isSerialExecute) + + {} + + scheduler::SchedulerImpl::Ptr build(int64_t schedulerTermId) + { + auto scheduler = std::make_shared(m_executorManager, m_ledger, + m_storage, m_executionMessageFactory, m_blockFactory, m_txPool, + m_transactionSubmitResultFactory, m_hashImpl, m_isAuthCheck, m_isWasm, + m_isSerialExecute, schedulerTermId); + scheduler->fetchGasLimit(); + + scheduler->registerBlockNumberReceiver(m_blockNumberReceiver); + scheduler->registerTransactionNotifier(m_txNotifier); + + return scheduler; + } + + void setBlockNumberReceiver(std::function callback) + { + m_blockNumberReceiver = std::move(callback); + } + + void setTransactionNotifier(std::function)> + txNotifier) + { + m_txNotifier = std::move(txNotifier); + } + + bcos::ledger::LedgerInterface::Ptr getLedger() { return m_ledger; } + +private: + ExecutorManager::Ptr m_executorManager; + bcos::ledger::LedgerInterface::Ptr m_ledger; + bcos::storage::TransactionalStorageInterface::Ptr m_storage; + bcos::protocol::ExecutionMessageFactory::Ptr m_executionMessageFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::txpool::TxPoolInterface::Ptr m_txPool; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_transactionSubmitResultFactory; + bcos::crypto::Hash::Ptr m_hashImpl; + bool m_isAuthCheck; + bool m_isWasm; + bool m_isSerialExecute; + + std::function m_blockNumberReceiver; + std::function)> + m_txNotifier; +}; + +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/SchedulerImpl.cpp b/bcos-scheduler/src/SchedulerImpl.cpp new file mode 100644 index 0000000..bf99dd7 --- /dev/null +++ b/bcos-scheduler/src/SchedulerImpl.cpp @@ -0,0 +1,1030 @@ +#include "SchedulerImpl.h" +#include "BlockExecutive.h" +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace bcos::scheduler; + +void SchedulerImpl::handleBlockQueue(bcos::protocol::BlockNumber requestBlockNumber, + std::function whenOlder, // whenOlder(frontNumber) + std::function whenQueueFront, std::function afterFront, + std::function whenNotFrontInQueue, std::function beforeBack, + std::function whenQueueBack, + std::function whenNewer, // whenNewer(backNumber) + std::function whenException) +{ + // [--------------- block queue --------------] + // ..95 96 97 [ 98 | 99 100 101 102 103 ] 104 | 105 106... + // whenOlder(98) [whenQueueFront() | whenNotFrontInQueue()..] whenQueueBack() | whenNewer(104) + // whenQueueFront() -> afterFront() + // beforeBack() -> whenQueueBack() + + bcos::protocol::BlockNumber currentNumber = getCurrentBlockNumber(); + std::unique_lock blocksLock(m_blocksMutex); + + try + { + if (m_blocks->empty()) + { + bcos::protocol::BlockNumber number = currentNumber; + if (requestBlockNumber == 0) + { + // handle genesis block, to execute or commit + beforeBack(); + blocksLock.unlock(); + whenQueueBack(); + } + else if (requestBlockNumber <= number) + { + blocksLock.unlock(); + whenOlder(number); + } + else if (requestBlockNumber == number + 1) + { + beforeBack(); + blocksLock.unlock(); + whenQueueBack(); + } + else + { + blocksLock.unlock(); + whenNewer(number); + } + } + else + { + // has block cache + bcos::protocol::BlockNumber frontNumber = m_blocks->front()->number(); + bcos::protocol::BlockNumber backNumber = m_blocks->back()->number(); + + if (requestBlockNumber < frontNumber) + { + blocksLock.unlock(); + whenOlder(frontNumber); + } + else if (requestBlockNumber == frontNumber) + { + auto frontBlock = m_blocks->front(); + blocksLock.unlock(); + whenQueueFront(frontBlock); + + blocksLock.lock(); + afterFront(); + blocksLock.unlock(); + } + else if (requestBlockNumber <= backNumber) + { + auto it = ++m_blocks->begin(); // it is begin next + while (it != m_blocks->end() && it->get()->number() != requestBlockNumber) + { + ++it; + } + if (it != m_blocks->end()) + { + blocksLock.unlock(); + whenNotFrontInQueue(*it); + } + } + else if (requestBlockNumber == backNumber + 1) + { + // Notice that whenQueueBack is backNumber + 1 + beforeBack(); + blocksLock.unlock(); + whenQueueBack(); + } + else + { + blocksLock.unlock(); + whenNewer(backNumber); + } + } + } + catch (std::exception const& e) + { + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << "handleBlockQueue exception" + << boost::diagnostic_information(e); + blocksLock.unlock(); + whenException(e); + } +} + + +void SchedulerImpl::executeBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function + _callback) +{ + if (block->blockHeader()->version() > (uint32_t)g_BCOSConfig.maxSupportedVersion()) + { + auto errorMessage = "The block version is larger than maxSupportedVersion"; + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(block->blockHeaderConst()->number()) << errorMessage + << LOG_KV("version", block->version()) + << LOG_KV("maxSupportedVersion", g_BCOSConfig.maxSupportedVersion()); + _callback(std::make_shared(SchedulerError::InvalidBlockVersion, errorMessage), + nullptr, false); + return; + } + uint64_t waitT = 0; + if (m_lastExecuteFinishTime > 0) + { + waitT = utcTime() - m_lastExecuteFinishTime; + } + if (waitT > 3000) + { + waitT = 0; + m_lastExecuteFinishTime = 0; + } + auto signature = block->blockHeaderConst()->signatureList(); + auto requestBlockNumber = block->blockHeader()->number(); + try + { + fetchGasLimit(requestBlockNumber); + } + catch (std::exception& e) + { + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(block->blockHeaderConst()->number()) + << "fetchGasLimit exception: " << boost::diagnostic_information(e); + _callback(BCOS_ERROR_WITH_PREV_PTR( + SchedulerError::fetchGasLimitError, "fetchGasLimitError exception", e), + nullptr, false); + return; + } + + SCHEDULER_LOG(INFO) << METRIC << BLOCK_NUMBER(requestBlockNumber) << "ExecuteBlock request" + << LOG_KV("gasLimit", m_gasLimit) << LOG_KV("verify", verify) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("txCount", block->transactionsSize()) + << LOG_KV("metaTxCount", block->transactionsMetaDataSize()) + << LOG_KV("version", (bcos::protocol::BlockVersion)(block->version())) + << LOG_KV("waitT", waitT); + + auto callback = [requestBlockNumber, _callback = std::move(_callback)](bcos::Error::Ptr&& error, + bcos::protocol::BlockHeader::Ptr&& blockHeader, bool _sysBlock) { + SCHEDULER_LOG(DEBUG) << METRIC << BLOCK_NUMBER(requestBlockNumber) + << "ExecuteBlock response" + << LOG_KV(error ? "error" : "ok", error ? error->what() : "ok"); + _callback(error == nullptr ? nullptr : std::move(error), std::move(blockHeader), _sysBlock); + }; + + + auto whenOlder = [requestBlockNumber, callback](bcos::protocol::BlockNumber number) { + auto message = (boost::format("Execute an history block %d, current number is %d") % + requestBlockNumber % number) + .str(); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(number) << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlocks, message), nullptr, false); + }; + + auto whenInQueue = [this, callback, block, requestBlockNumber, &signature, verify]( + BlockExecutive::Ptr blockExecutive) { + auto blockHeader = blockExecutive->result(); + + if (blockHeader == nullptr) + { + auto message = "hit block cache, but block is executing!"; + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << "ExecuteBlock error, " + << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidStatus, message), nullptr, false); + } + else + { + if (verify && blockHeader->hash() != block->blockHeader()->hash()) + { + SCHEDULER_LOG(WARNING) + << BLOCK_NUMBER(requestBlockNumber) + << "ExecuteBlock failed. The executed block has been cached " + "but request header hash is not the same. Trigger switch." + << LOG_KV("cachedHeaderHash", blockHeader->hash().abridged()) + << LOG_KV("requestHeaderHash", block->blockHeader()->hash().abridged()) + << LOG_KV("verify", verify); + triggerSwitch(); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlocks, + "request header not the same with cached"), + nullptr, false); + } + else + { + SCHEDULER_LOG(INFO) + << BLOCK_NUMBER(requestBlockNumber) << LOG_BADGE("BlockTrace") + << "ExecuteBlock success, return executed block" + << LOG_KV("signatureSize", signature.size()) << LOG_KV("verify", verify); + callback(nullptr, std::move(blockHeader), blockExecutive->sysBlock()); + } + } + }; + + auto whenQueueFront = [whenInQueue]( + BlockExecutive::Ptr blockExecutive) { whenInQueue(blockExecutive); }; + + auto afterFront = []() { + // do nothing + }; + + auto whenNotFrontInQueue = [whenInQueue](BlockExecutive::Ptr blockExecutive) { + whenInQueue(blockExecutive); + }; + + auto whenNewer = [requestBlockNumber, callback](bcos::protocol::BlockNumber backNumber) { + auto message = + (boost::format( + "Try to execute an discontinuous block: %ld, queue back blockNumber: %ld") % + requestBlockNumber % backNumber) + .str(); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << "ExecuteBlock error, " + << message; + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlockNumber, message), nullptr, false); + }; + auto whenException = [requestBlockNumber, callback](std::exception const& e) { + auto message = (boost::format("ExecuteBlock exception %s") % e.what()).str(); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(requestBlockNumber) << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::UnknownError, message), nullptr, false); + }; + + std::shared_ptr> executeLock = nullptr; + BlockExecutive::Ptr blockExecutive = nullptr; + + auto beforeBack = [this, block, verify, &executeLock, &blockExecutive, callback]() { + // update m_block + blockExecutive = getPreparedBlock( + block->blockHeaderConst()->number(), block->blockHeaderConst()->timestamp()); + + if (blockExecutive == nullptr) + { + // the block has not been prepared, just make a new one here + SCHEDULER_LOG(DEBUG) << LOG_BADGE("preExeBlock") + << BLOCK_NUMBER(block->blockHeaderConst()->number()) + << "Not hit prepared block executive, create."; + // blockExecutive = std::make_shared(std::move(block), this, 0, + // m_transactionSubmitResultFactory, false, m_blockFactory, m_txPool, m_gasLimit, + // verify); + blockExecutive = m_blockExecutiveFactory->build(std::move(block), this, 0, + m_transactionSubmitResultFactory, false, m_blockFactory, m_txPool, m_gasLimit, + verify); + + blockExecutive->setOnNeedSwitchEventHandler([this]() { triggerSwitch(); }); + } + else + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("preExeBlock") + << BLOCK_NUMBER(block->blockHeaderConst()->number()) + << "Hit prepared block executive cache, use it."; + blockExecutive->block()->setBlockHeader(block->blockHeader()); + } + + // acquire lock + executeLock = + std::make_shared>(m_executeMutex, std::try_to_lock); + if (!executeLock->owns_lock()) + { + executeLock = nullptr; + return; + } + + m_blocks->emplace_back(blockExecutive); + + // blockExecutive = m_blocks->back(); + }; + + // to execute the block + auto whenQueueBack = [this, &executeLock, &blockExecutive, callback, requestBlockNumber]() { + if (!executeLock) + { + // if not acquire the lock, return error + auto message = + "Another block is executing, maybe consensus and sync execute same block"; + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(requestBlockNumber) << "ExecuteBlock error, " + << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidStatus, message), nullptr, false); + return; + } + + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(requestBlockNumber) << LOG_BADGE("BlockTrace") + << "ExecuteBlock start"; + auto startTime = utcTime(); + blockExecutive->asyncExecute( + [this, startTime, requestBlockNumber, callback = std::move(callback), executeLock]( + Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool _sysBlock) { + if (!m_isRunning) + { + executeLock->unlock(); + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "Scheduler is not running"), + nullptr, false); + return; + } + + if (error) + { + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) + << "executeBlock error: " << error->what(); + { + std::unique_lock blocksLock(m_blocksMutex); + if (!m_blocks->empty() && m_blocks->back()->number() == requestBlockNumber) + { + m_blocks->pop_back(); + } + blocksLock.unlock(); + } + executeLock->unlock(); + callback(BCOS_ERROR_WITH_PREV_PTR( + SchedulerError::UnknownError, "executeBlock error:", *error), + nullptr, _sysBlock); + return; + } + auto signature = header->signatureList(); + SCHEDULER_LOG(INFO) + << BLOCK_NUMBER(header->number()) << LOG_BADGE("BlockTrace") + << "ExecuteBlock success" << LOG_KV("hash", header->hash().abridged()) + << LOG_KV("state root", header->stateRoot().hex()) + << LOG_KV("receiptRoot", header->receiptsRoot().hex()) + << LOG_KV("txsRoot", header->txsRoot().abridged()) + << LOG_KV("gasUsed", header->gasUsed()) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("timeCost", utcTime() - startTime) + << LOG_KV("blockVersion", header->version()); + + m_lastExecuteFinishTime = utcTime(); + executeLock->unlock(); + callback(std::move(error), std::move(header), _sysBlock); + }); + }; + + // run all handler + handleBlockQueue(requestBlockNumber, whenOlder, whenQueueFront, afterFront, whenNotFrontInQueue, + beforeBack, whenQueueBack, whenNewer, whenException); +} + +void SchedulerImpl::commitBlock(bcos::protocol::BlockHeader::Ptr header, + std::function _callback) +{ + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(header->number()) << "CommitBlock request"; + + auto requestBlockNumber = header->number(); + auto callback = [requestBlockNumber, _callback = std::move(_callback)]( + bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + SCHEDULER_LOG(DEBUG) << METRIC << BLOCK_NUMBER(requestBlockNumber) << "CommitBlock response" + << LOG_KV(error ? "error" : "ok", error ? error->what() : "ok"); + _callback(error == nullptr ? nullptr : std::move(error), std::move(config)); + }; + + auto whenOlder = [requestBlockNumber, callback]( + bcos::protocol::BlockNumber currentBlockNumber) { + auto message = (boost::format("commit an history block %d, current number is %d") % + requestBlockNumber % currentBlockNumber) + .str(); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlocks, message), nullptr); + }; + + auto whenAfterFront = [this, requestBlockNumber, callback]() { + auto message = + "A smaller block need to commit, requestBlockNumber " + + std::to_string(requestBlockNumber) + + +", need to commit blockNumber: " + std::to_string(getCurrentBlockNumber() + 1); + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << "CommitBlock error, " + << message; + + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlockNumber, message), nullptr); + }; + + auto whenNotFrontInQueue = [whenAfterFront](BlockExecutive::Ptr) { whenAfterFront(); }; + + auto beforeBack = []() { + // do nothing + }; + + auto whenQueueBack = [whenAfterFront]() { whenAfterFront(); }; + + auto whenNewer = [whenAfterFront](bcos::protocol::BlockNumber) { whenAfterFront(); }; + auto whenException = [callback, requestBlockNumber](std::exception const& e) { + auto message = (boost::format("CommitBlock exception %s") % e.what()).str(); + SCHEDULER_LOG(WARNING) << BLOCK_NUMBER(requestBlockNumber) << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::UnknownError, message), nullptr); + }; + + auto whenQueueFront = [this, requestBlockNumber, header = std::move(header), callback]( + BlockExecutive::Ptr blockExecutive) { + // acquire lock + std::shared_ptr> commitLock = + std::make_shared>(m_commitMutex, std::try_to_lock); + + if (!commitLock->owns_lock()) + { + std::string message = (boost::format("commitBlock: Another block is committing! Block " + "number: %ld, hash: %s") % + requestBlockNumber % header->hash().abridged()) + .str(); + + + SCHEDULER_LOG(ERROR) << BLOCK_NUMBER(requestBlockNumber) << "CommitBlock error, " + << message; + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::BlockIsCommitting, message), nullptr); + return; + } + + auto currentBlockNumber = getCurrentBlockNumber(); + if (currentBlockNumber + 1 != requestBlockNumber) + { + // happens in some multi-thread scenario, the block has been commited + auto message = (boost::format("commit an committed block %d, current number is %d") % + requestBlockNumber % currentBlockNumber) + .str(); + SCHEDULER_LOG(ERROR) << message; + commitLock->unlock(); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidBlocks, message), nullptr); + return; + } + + if (!blockExecutive->result()) + { + auto message = "Block is executing, number=" + std::to_string(blockExecutive->number()); + SCHEDULER_LOG(ERROR) << "CommitBlock error, " << message; + + commitLock->unlock(); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::BlockIsCommitting, message), nullptr); + return; + } + + // Note: only when the signatureList is empty need to reset the header + // in case of the signatureList of the header is accessing by the sync module while + // frontBlock is setting newBlockHeader, which will cause the signatureList ilegal + auto executedHeader = blockExecutive->block()->blockHeader(); + auto signature = executedHeader->signatureList(); + if (signature.empty()) + { + blockExecutive->block()->setBlockHeader(std::move(header)); + } + + SCHEDULER_LOG(INFO) << BLOCK_NUMBER(requestBlockNumber) << LOG_BADGE("BlockTrace") + << "CommitBlock start"; + auto startTime = utcTime(); + blockExecutive->asyncCommit([this, startTime, callback = std::move(callback), + blockExecutive, block = blockExecutive->block(), + commitLock](Error::UniquePtr&& error) { + if (!m_isRunning) + { + commitLock->unlock(); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "Scheduler is not running"), + nullptr); + return; + } + + if (error) + { + SCHEDULER_LOG(ERROR) << "CommitBlock error, " << error->errorMessage(); + { + std::unique_lock blocksLock(m_blocksMutex); + // refresh block cache + bcos::protocol::BlockNumber currentNumber = getBlockNumberFromStorage(); + // note that genesis sysBlock is blockNumber 0, we need to ignore it + while (!m_blocks->empty() && currentNumber >= m_blocks->front()->number() && + currentNumber != 0) + { + SCHEDULER_LOG(DEBUG) << "Remove committed block on commit failed : " + << m_blocks->front()->number() << " success"; + m_blocks->pop_front(); + } + } + fetchGasLimit(); + commitLock->unlock(); + callback(BCOS_ERROR_UNIQUE_PTR( + error->errorCode(), "CommitBlock error: " + error->errorMessage()), + nullptr); + return; + } + { + std::unique_lock blocksLock(m_blocksMutex); + auto number = block->blockHeaderConst()->number(); + if (m_blocks && !m_blocks->empty() && m_blocks->front()->number() == number) + { + m_blocks->pop_front(); + SCHEDULER_LOG(DEBUG) + << "Remove committed block after commit: " << number << " success"; + } + removeAllOldPreparedBlock(number); + } + + + asyncGetLedgerConfig([this, startTime, commitLock = std::move(commitLock), + blockExecutive, callback = std::move(callback)]( + Error::Ptr error, ledger::LedgerConfig::Ptr ledgerConfig) { + if (!m_isRunning) + { + commitLock->unlock(); + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "Scheduler is not running"), + nullptr); + return; + } + if (error) + { + SCHEDULER_LOG(ERROR) << "Get system config error, " << error->errorMessage(); + + commitLock->unlock(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + SchedulerError::UnknownError, "Get system config error", *error), + nullptr); + return; + } + + auto blockNumber = ledgerConfig->blockNumber(); + auto gasNumber = ledgerConfig->gasLimit(); + // Note: takes effect in next block. we query the enableNumber of blockNumber + // + 1. + if (std::get<1>(gasNumber) <= (blockNumber + 1)) + { + m_gasLimit = std::get<0>(gasNumber); + } + + if (blockExecutive->isSysBlock()) + { + removeAllPreparedBlock(); // must clear prepared cacche + } + + SCHEDULER_LOG(INFO) + << BLOCK_NUMBER(blockNumber) << LOG_BADGE("BlockTrace") << "CommitBlock success" + << LOG_KV("gas limit", m_gasLimit) << LOG_KV("timeCost", utcTime() - startTime); + + commitLock->unlock(); // just unlock here + + + // Note: blockNumber = 0, means system deploy, and tx is not existed in txpool. + // So it should not exec tx notifier + if (m_txNotifier && blockNumber != 0) + { + SCHEDULER_LOG(DEBUG) << "Start notify block result: " << blockNumber; + blockExecutive->asyncNotify(m_txNotifier, + [this, blockNumber, callback = std::move(callback), + ledgerConfig = std::move(ledgerConfig)](Error::Ptr _error) mutable { + if (!m_isRunning) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::Stopped, "Scheduler is not running"), + nullptr); + return; + } + + if (m_blockNumberReceiver) + { + m_blockNumberReceiver(blockNumber); + } + + SCHEDULER_LOG(INFO) + << LOG_BADGE("BlockTrace") << "Notify block result success" + << LOG_KV("blockNumber", blockNumber); + // Note: only after the block notify finished can call the callback + callback(std::move(_error), std::move(ledgerConfig)); + }); + } + else + { + callback(nullptr, std::move(ledgerConfig)); + } + }); + }); + }; + + auto afterFront = []() { + // do nothing + }; + + // run all handler + handleBlockQueue(requestBlockNumber, whenOlder, whenQueueFront, afterFront, whenNotFrontInQueue, + beforeBack, whenQueueBack, whenNewer, whenException); +} + +void SchedulerImpl::status( + std::function callback) +{ + (void)callback; +} + +void SchedulerImpl::call(protocol::Transaction::Ptr tx, + std::function callback) +{ + // call but to is empty, + // it will cause tx message be marked as 'create' falsely when asyncExecute tx + if (tx->to().empty()) + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("call") << LOG_DESC("call address empty"); + callback(BCOS_ERROR_PTR(SchedulerError::UnknownError, "Call address is empty"), nullptr); + return; + } + + auto blockNumber = getCurrentBlockNumber(); + SCHEDULER_LOG(DEBUG) << "Call request: " << LOG_KV("blockNumber", blockNumber) + << LOG_KV("address", tx->to()); + + // set attribute before call + tx->setAttribute(m_isWasm ? bcos::protocol::Transaction::Attribute::LIQUID_SCALE_CODEC : + bcos::protocol::Transaction::Attribute::EVM_ABI_CODEC); + // Create temp block + auto block = m_blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + block->blockHeader()->calculateHash(*m_blockFactory->cryptoSuite()->hashImpl()); + block->appendTransaction(std::move(tx)); + + // Create temp executive + + // auto blockExecutive = std::make_shared(std::move(block), this, + // m_calledContextID.fetch_add(1), m_transactionSubmitResultFactory, true, m_blockFactory, + // m_txPool, m_gasLimit, false); + auto blockExecutive = + m_blockExecutiveFactory->build(std::move(block), this, m_calledContextID.fetch_add(1), + m_transactionSubmitResultFactory, true, m_blockFactory, m_txPool, m_gasLimit, false); + blockExecutive->setOnNeedSwitchEventHandler([this]() { triggerSwitch(); }); + + blockExecutive->asyncCall([callback = std::move(callback)](Error::UniquePtr&& error, + protocol::TransactionReceipt::Ptr&& receipt) { + if (error) + { + std::string errorMessage = "asyncCall error: " + error->errorMessage(); + SCHEDULER_LOG(DEBUG) << errorMessage; + callback(BCOS_ERROR_WITH_PREV_PTR(error->errorCode(), errorMessage, *error), nullptr); + return; + } + SCHEDULER_LOG(DEBUG) << "Call success"; + callback(nullptr, std::move(receipt)); + }); +} + +void SchedulerImpl::registerExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + std::function callback) +{ + // TODO: to be removed, it should not be called + try + { + SCHEDULER_LOG(INFO) << "registerExecutor request: " << LOG_KV("name", name); + m_executorManager->addExecutor(name, executor); + } + catch (std::exception& e) + { + SCHEDULER_LOG(ERROR) << "registerExecutor error: " << boost::diagnostic_information(e); + callback(BCOS_ERROR_WITH_PREV_PTR(-1, "addExecutor error", e)); + return; + } + + SCHEDULER_LOG(INFO) << "registerExecutor success" << LOG_KV("name", name); + callback(nullptr); +} + +void SchedulerImpl::unregisterExecutor( + const std::string& name, std::function callback) +{ + (void)name; + (void)callback; +} + +void SchedulerImpl::reset(std::function callback) +{ + (void)callback; +} +// register a blockNumber receiver +void SchedulerImpl::registerBlockNumberReceiver( + std::function callback) +{ + m_blockNumberReceiver = [callback = std::move(callback)]( + protocol::BlockNumber blockNumber) { callback(blockNumber); }; +} + +void SchedulerImpl::getCode( + std::string_view contract, std::function callback) +{ + auto executor = m_executorManager->dispatchExecutor(contract); + executor->getCode(contract, [this, callback = std::move(callback)]( + Error::Ptr error, bcos::bytes code) { + if (error && error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + callback(std::move(error), std::move(code)); + }); +} + +void SchedulerImpl::getABI( + std::string_view contract, std::function callback) +{ + auto executor = m_executorManager->dispatchExecutor(contract); + executor->getABI(contract, [this, callback = std::move(callback)]( + Error::Ptr error, std::string abi) { + if (error && error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + callback(std::move(error), std::move(abi)); + }); +} + +void SchedulerImpl::registerTransactionNotifier(std::function)> + txNotifier) +{ + m_txNotifier = [callback = std::move(txNotifier)](bcos::protocol::BlockNumber blockNumber, + bcos::protocol::TransactionSubmitResultsPtr resultsPtr, + std::function _callback) { + callback(blockNumber, resultsPtr, std::move(_callback)); + }; +} + +BlockExecutive::Ptr SchedulerImpl::getPreparedBlock( + bcos::protocol::BlockNumber blockNumber, int64_t timestamp) +{ + bcos::ReadGuard readGuard(x_preparedBlockMutex); + + if (m_preparedBlocks.count(blockNumber) != 0 && + m_preparedBlocks[blockNumber].count(timestamp) != 0) + { + return m_preparedBlocks[blockNumber][timestamp]; + } + else + { + return nullptr; + } +} + +void SchedulerImpl::setPreparedBlock( + bcos::protocol::BlockNumber blockNumber, int64_t timestamp, BlockExecutive::Ptr blockExecutive) +{ + bcos::WriteGuard writeGuard(x_preparedBlockMutex); + + m_preparedBlocks[blockNumber][timestamp] = blockExecutive; +} + +void SchedulerImpl::removeAllOldPreparedBlock(bcos::protocol::BlockNumber oldBlockNumber) +{ + bcos::WriteGuard writeGuard(x_preparedBlockMutex); + + // erase all preparedBlock <= oldBlockNumber + for (auto itr = m_preparedBlocks.begin(); itr != m_preparedBlocks.end();) + { + if (itr->first <= oldBlockNumber) + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("prepareBlockExecutive") + << LOG_DESC("removeAllOldPreparedBlock") + << LOG_KV("blockNumber", itr->first); + itr = m_preparedBlocks.erase(itr); + } + else + { + itr++; + } + } +} + +void SchedulerImpl::removeAllPreparedBlock() +{ + bcos::WriteGuard writeGuard(x_preparedBlockMutex); + m_preparedBlocks.clear(); + + SCHEDULER_LOG(DEBUG) << LOG_BADGE("prepareBlockExecutive") + << LOG_DESC("removeAllPreparedBlock"); +} + +void SchedulerImpl::preExecuteBlock( + bcos::protocol::Block::Ptr block, bool verify, std::function _callback) +{ + auto startT = utcTime(); + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(block->blockHeaderConst()->number()) + << "preExeBlock request" + << LOG_KV("txCount", + block->transactionsSize() + block->transactionsMetaDataSize()) + << LOG_KV("startT(ms)", startT); + + auto callback = [startT, _callback = std::move(_callback), + number = block->blockHeaderConst()->number()](bcos::Error::Ptr&& error) { + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(number) << METRIC << "preExeBlock response" + << LOG_KV("message", error ? error->what() : "ok") + << LOG_KV("cost(ms)", utcTime() - startT); + _callback(error == nullptr ? nullptr : std::move(error)); + }; + + try + { + auto blockNumber = block->blockHeaderConst()->number(); + int64_t timestamp = block->blockHeaderConst()->timestamp(); + BlockExecutive::Ptr blockExecutive = getPreparedBlock(blockNumber, timestamp); + if (blockExecutive != nullptr) + { + SCHEDULER_LOG(DEBUG) << BLOCK_NUMBER(blockNumber) << LOG_BADGE("prepareBlockExecutive") + << "Duplicate block to prepare, dropped." + << LOG_KV("blockHeader.timestamp", timestamp); + callback(nullptr); // also success + return; + } + + // blockExecutive = std::make_shared(std::move(block), this, 0, + // m_transactionSubmitResultFactory, false, m_blockFactory, m_txPool, m_gasLimit, + // verify); + fetchGasLimit(); + blockExecutive = m_blockExecutiveFactory->build(std::move(block), this, 0, + m_transactionSubmitResultFactory, false, m_blockFactory, m_txPool, m_gasLimit, verify); + + blockExecutive->setOnNeedSwitchEventHandler([this]() { triggerSwitch(); }); + + blockExecutive->prepare(); + + setPreparedBlock(blockNumber, timestamp, blockExecutive); + + callback(nullptr); + } + catch (bcos::Error& e) + { + SCHEDULER_LOG(WARNING) << "preExeBlock exception: " << LOG_KV("code", e.errorCode()) + << LOG_KV("message", e.errorMessage()); + callback(std::make_shared(e.errorCode(), e.errorMessage())); + } +} + +template +struct overloaded : Ts... +{ + using Ts::operator()...; +}; +// explicit deduction guide (not needed as of C++20) +template +overloaded(Ts...) -> overloaded; + +void SchedulerImpl::asyncGetLedgerConfig( + std::function callback) +{ + auto ledgerConfig = std::make_shared(); + auto callbackPtr = std::make_shared(std::move(callback)); + auto summary = + std::make_shared>(8, 0, 0); + + auto collector = [this, summary = std::move(summary), ledgerConfig = std::move(ledgerConfig), + callback = std::move(callbackPtr)](Error::Ptr error, + std::variant, + std::tuple, + bcos::protocol::BlockNumber, bcos::crypto::HashType>&& + result) mutable { + auto& [total, success, failed] = *summary; + + if (error) + { + SCHEDULER_LOG(ERROR) << "Get ledger config with errors: " << error->errorMessage(); + ++failed; + } + else + { + std::visit( + overloaded{ + [&ledgerConfig](std::tuple& nodeList) { + auto& [isSealer, list] = nodeList; + + if (isSealer) + { + ledgerConfig->setConsensusNodeList(*list); + } + else + { + ledgerConfig->setObserverNodeList(*list); + } + }, + [&ledgerConfig](std::tuple config) { + auto& [type, value, blockNumber] = config; + switch (type) + { + case 0: + ledgerConfig->setBlockTxCountLimit( + boost::lexical_cast(value)); + break; + case 1: + ledgerConfig->setLeaderSwitchPeriod( + boost::lexical_cast(value)); + break; + case 2: + ledgerConfig->setGasLimit( + std::make_tuple(boost::lexical_cast(value), blockNumber)); + break; + case 3: + try + { + auto version = bcos::tool::toVersionNumber(value); + ledgerConfig->setCompatibilityVersion(version); + } + catch (std::exception const& e) + { + SCHEDULER_LOG(WARNING) << LOG_DESC("invalidVersionNumber") << value; + } + break; + default: + BOOST_THROW_EXCEPTION(BCOS_ERROR(SchedulerError::UnknownError, + "Unknown type: " + boost::lexical_cast(type))); + } + }, + [&ledgerConfig](bcos::protocol::BlockNumber number) { + ledgerConfig->setBlockNumber(number); + }, + [&ledgerConfig](bcos::crypto::HashType hash) { ledgerConfig->setHash(hash); }}, + result); + + ++success; + } + + // Collect done + if (success + failed == total) + { + if (!m_isRunning) + { + (*callback)( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "Scheduler is not running"), + nullptr); + return; + } + + if (failed > 0) + { + SCHEDULER_LOG(ERROR) << "Get ledger config with error: " << failed; + (*callback)( + BCOS_ERROR_PTR(SchedulerError::UnknownError, "Get ledger config with error"), + nullptr); + + return; + } + + (*callback)(nullptr, std::move(ledgerConfig)); + } + }; + + m_ledger->asyncGetNodeListByType(ledger::CONSENSUS_SEALER, + [collector](Error::Ptr error, consensus::ConsensusNodeListPtr list) mutable { + collector(std::move(error), std::tuple{true, std::move(list)}); + }); + m_ledger->asyncGetNodeListByType(ledger::CONSENSUS_OBSERVER, + [collector](Error::Ptr error, consensus::ConsensusNodeListPtr list) mutable { + collector(std::move(error), std::tuple{false, std::move(list)}); + }); + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_TX_COUNT_LIMIT, + [collector](Error::Ptr error, std::string config, protocol::BlockNumber _number) mutable { + collector(std::move(error), std::tuple{0, std::move(config), _number}); + }); + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_CONSENSUS_LEADER_PERIOD, + [collector](Error::Ptr error, std::string config, protocol::BlockNumber _number) mutable { + collector(std::move(error), std::tuple{1, std::move(config), _number}); + }); + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_TX_GAS_LIMIT, + [collector](Error::Ptr error, std::string config, protocol::BlockNumber _number) mutable { + collector(std::move(error), std::tuple{2, std::move(config), _number}); + }); + m_ledger->asyncGetBlockNumber( + [collector, ledger = m_ledger](Error::Ptr error, protocol::BlockNumber number) mutable { + ledger->asyncGetBlockHashByNumber( + number, [collector](Error::Ptr error, const crypto::HashType& hash) mutable { + collector(std::move(error), std::move(hash)); + }); + collector(std::move(error), std::move(number)); + }); + + // Note: The consensus module ensures serial execution and submit of system txs + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_COMPATIBILITY_VERSION, + [collector](Error::Ptr error, std::string config, protocol::BlockNumber _number) mutable { + collector(std::move(error), std::tuple{3, std::move(config), _number}); + }); +} + +bcos::protocol::BlockNumber SchedulerImpl::getBlockNumberFromStorage() +{ + std::promise blockNumberFuture; + m_ledger->asyncGetBlockNumber( + [&blockNumberFuture](Error::Ptr error, protocol::BlockNumber number) { + if (error) + { + SCHEDULER_LOG(ERROR) + << "Get blockNumber from storage failed" << LOG_KV("msg", error->errorMessage()) + << LOG_KV("code", error->errorCode()); + blockNumberFuture.set_value(-1); + } + else + { + blockNumberFuture.set_value(number); + } + }); + + return blockNumberFuture.get_future().get(); +} + +bcos::protocol::BlockNumber SchedulerImpl::getCurrentBlockNumber() +{ + std::unique_lock blocksLock(m_blocksMutex); + if (m_blocks->empty()) + { + blocksLock.unlock(); + return getBlockNumberFromStorage(); + } + return m_blocks->front()->number() - 1; +} diff --git a/bcos-scheduler/src/SchedulerImpl.h b/bcos-scheduler/src/SchedulerImpl.h new file mode 100644 index 0000000..b6bd9ad --- /dev/null +++ b/bcos-scheduler/src/SchedulerImpl.h @@ -0,0 +1,268 @@ +#pragma once + +#include "BlockExecutive.h" +#include "BlockExecutiveFactory.h" +#include "ExecutorManager.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace bcos::scheduler +{ +class SchedulerImpl : public SchedulerInterface, public std::enable_shared_from_this +{ +public: + friend class BlockExecutive; + using Ptr = std::shared_ptr; + SchedulerImpl(ExecutorManager::Ptr executorManager, bcos::ledger::LedgerInterface::Ptr ledger, + bcos::storage::TransactionalStorageInterface::Ptr storage, + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + bcos::protocol::BlockFactory::Ptr blockFactory, bcos::txpool::TxPoolInterface::Ptr txPool, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bcos::crypto::Hash::Ptr hashImpl, bool isAuthCheck, bool isWasm, int64_t schedulerTermId) + : SchedulerImpl(executorManager, ledger, storage, executionMessageFactory, blockFactory, + txPool, transactionSubmitResultFactory, hashImpl, isAuthCheck, isWasm, false, + schedulerTermId) + {} + + + SchedulerImpl(ExecutorManager::Ptr executorManager, bcos::ledger::LedgerInterface::Ptr ledger, + bcos::storage::TransactionalStorageInterface::Ptr storage, + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + bcos::protocol::BlockFactory::Ptr blockFactory, bcos::txpool::TxPoolInterface::Ptr txPool, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bcos::crypto::Hash::Ptr hashImpl, bool isAuthCheck, bool isWasm, bool isSerialExecute, + int64_t schedulerTermId) + : m_executorManager(std::move(executorManager)), + m_ledger(std::move(ledger)), + m_storage(std::move(storage)), + m_executionMessageFactory(std::move(executionMessageFactory)), + m_blockExecutiveFactory( + std::make_shared(isSerialExecute)), + m_blockFactory(std::move(blockFactory)), + m_txPool(txPool), + m_transactionSubmitResultFactory(std::move(transactionSubmitResultFactory)), + m_hashImpl(std::move(hashImpl)), + m_isAuthCheck(isAuthCheck), + m_isWasm(isWasm), + m_isSerialExecute(isSerialExecute), + m_schedulerTermId(schedulerTermId) + { + start(); + } + + SchedulerImpl(const SchedulerImpl&) = delete; + SchedulerImpl(SchedulerImpl&&) = delete; + SchedulerImpl& operator=(const SchedulerImpl&) = delete; + SchedulerImpl& operator=(SchedulerImpl&&) = delete; + + void executeBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function + callback) override; + + void commitBlock(bcos::protocol::BlockHeader::Ptr header, + std::function callback) + override; + + void status( + std::function callback) override; + + void call(protocol::Transaction::Ptr tx, + std::function) override; + + [[deprecated("Use SchedulerImpl::registerExecutor")]] void registerExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + std::function callback) override; + + void unregisterExecutor( + const std::string& name, std::function callback) override; + + void reset(std::function callback) override; + // register a block number receiver + virtual void registerBlockNumberReceiver( + std::function callback); + + void getCode( + std::string_view contract, std::function callback) override; + + void getABI( + std::string_view contract, std::function callback) override; + + void registerTransactionNotifier(std::function)> + txNotifier); + + // TODO: Add async interface + void preExecuteBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function callback) override; + + ExecutorManager::Ptr executorManager() { return m_executorManager; } + + inline void fetchGasLimit(protocol::BlockNumber _number = -1) + { + if (m_gasLimit > 0) + { + return; + } + SCHEDULER_LOG(INFO) << LOG_DESC("fetch gas limit from storage before execute block") + << LOG_KV("requestBlockNumber", _number); + if (_number == -1) + { + std::promise> numberPromise; + m_ledger->asyncGetBlockNumber( + [&numberPromise](Error::Ptr _error, protocol::BlockNumber _number) { + numberPromise.set_value(std::make_tuple(std::move(_error), _number)); + }); + Error::Ptr error; + std::tie(error, _number) = numberPromise.get_future().get(); + if (error) + { + return; + } + } + + std::promise> p; + m_ledger->asyncGetSystemConfigByKey(ledger::SYSTEM_KEY_TX_GAS_LIMIT, + [&p](Error::Ptr _e, std::string _value, protocol::BlockNumber) { + p.set_value(std::make_tuple(std::move(_e), std::move(_value))); + return; + }); + auto [e, value] = p.get_future().get(); + if (e) + { + SCHEDULER_LOG(WARNING) + << BLOCK_NUMBER(_number) << LOG_DESC("fetchGasLimit failed") + << LOG_KV("code", e->errorCode()) << LOG_KV("message", e->errorMessage()); + BOOST_THROW_EXCEPTION( + BCOS_ERROR(SchedulerError::fetchGasLimitError, e->errorMessage())); + } + + // cast must be success + m_gasLimit = boost::lexical_cast(value); + } + + int64_t getSchedulerTermId() { return m_schedulerTermId; } + + void start() + { + m_isRunning = true; + for (auto& blockExecutive : *m_blocks) + { + blockExecutive->start(); + } + + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") + << "Start with termId: " << getSchedulerTermId(); + } + void stop() override + { + SCHEDULER_LOG(INFO) << "Try to stop SchedulerImpl"; + m_isRunning = false; + std::unique_lock blocksLock(m_blocksMutex); + for (auto& blockExecutive : *m_blocks) + { + blockExecutive->stop(); + } + } + + void setBlockExecutiveFactory(bcos::scheduler::BlockExecutiveFactory::Ptr blockExecutiveFactory) + { + m_blockExecutiveFactory = blockExecutiveFactory; + } + + void setOnNeedSwitchEventHandler(std::function onNeedSwitchEvent) + { + f_onNeedSwitchEvent = std::move(onNeedSwitchEvent); + } + + void triggerSwitch() + { + if (f_onNeedSwitchEvent) + { + f_onNeedSwitchEvent(m_schedulerTermId); + } + } + + bcos::crypto::Hash::Ptr getHashImpl() { return m_hashImpl; } + +private: + void handleBlockQueue(bcos::protocol::BlockNumber requestBlockNumber, + std::function whenOlder, // whenOlder(frontNumber) + std::function whenQueueFront, std::function afterFront, + std::function whenNotFrontInQueue, + std::function beforeBack, std::function whenQueueBack, + std::function whenNewer, // whenNewer(backNumber) + std::function whenException); + + bcos::protocol::BlockNumber getCurrentBlockNumber(); + + void asyncGetLedgerConfig( + std::function callback); + + BlockExecutive::Ptr getPreparedBlock( + bcos::protocol::BlockNumber blockNumber, int64_t timestamp); + + void setPreparedBlock(bcos::protocol::BlockNumber blockNumber, int64_t timestamp, + BlockExecutive::Ptr blockExecutive); + + // remove prepared all block <= oldBlockNumber + void removeAllOldPreparedBlock(bcos::protocol::BlockNumber oldBlockNumber); + void removeAllPreparedBlock(); + + bcos::protocol::BlockNumber getBlockNumberFromStorage(); + + std::shared_ptr> m_blocks = + std::make_shared>(); + + std::shared_ptr> m_stoppedBlockExecutives; + + std::map> + m_preparedBlocks; // blockNumber -> BlockExecutive> + mutable SharedMutex x_preparedBlockMutex; + + std::mutex m_blocksMutex; + + std::mutex m_executeMutex; + std::mutex m_commitMutex; + + std::atomic_int64_t m_calledContextID = 1; + + uint64_t m_gasLimit = 0; + + ExecutorManager::Ptr m_executorManager; + bcos::ledger::LedgerInterface::Ptr m_ledger; + // BlockExecutive will use the storage of scheduler + bcos::storage::TransactionalStorageInterface::Ptr m_storage; + bcos::protocol::ExecutionMessageFactory::Ptr m_executionMessageFactory; + bcos::scheduler::BlockExecutiveFactory::Ptr m_blockExecutiveFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::txpool::TxPoolInterface::Ptr m_txPool; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_transactionSubmitResultFactory; + bcos::crypto::Hash::Ptr m_hashImpl; + bool m_isAuthCheck = false; + bool m_isWasm = false; + bool m_isSerialExecute = false; + + std::function m_blockNumberReceiver; + std::function)> + m_txNotifier; + uint64_t m_lastExecuteFinishTime = 0; + + int64_t m_schedulerTermId; + + bool m_isRunning = false; + + std::function f_onNeedSwitchEvent; +}; +} // namespace bcos::scheduler \ No newline at end of file diff --git a/bcos-scheduler/src/SchedulerManager.cpp b/bcos-scheduler/src/SchedulerManager.cpp new file mode 100644 index 0000000..8e03c36 --- /dev/null +++ b/bcos-scheduler/src/SchedulerManager.cpp @@ -0,0 +1,451 @@ +#include "SchedulerManager.h" + +using namespace bcos::scheduler; + +// by pbft & sync +void SchedulerManager::executeBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function + callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + SCHEDULER_LOG(DEBUG) << LOG_DESC("executeBlock: checkAndInit not ok") + << LOG_KV("message", message); + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}, false); + return; + } + + auto _holdSchedulerCallback = + [schedulerHolder = m_scheduler, callback = std::move(callback)](bcos::Error::Ptr&& error, + bcos::protocol::BlockHeader::Ptr&& blockHeader, bool _sysBlock) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(blockHeader), _sysBlock); + }; + + m_scheduler->executeBlock(block, verify, std::move(_holdSchedulerCallback)); +} + +// by pbft & sync +void SchedulerManager::commitBlock(bcos::protocol::BlockHeader::Ptr header, + std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + SCHEDULER_LOG(DEBUG) << LOG_DESC("commitBlock: checkAndInit not ok") + << LOG_KV("message", message); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error, + bcos::ledger::LedgerConfig::Ptr&& ledger) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(ledger)); + }; + + m_scheduler->commitBlock(header, std::move(_holdSchedulerCallback)); +} + +// by console, query committed and committing executing +void SchedulerManager::status( + std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + SCHEDULER_LOG(DEBUG) << LOG_DESC("status: checkAndInit not ok") + << LOG_KV("message", message); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error, + bcos::protocol::Session::ConstPtr&& session) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(session)); + }; + m_scheduler->status(std::move(_holdSchedulerCallback)); +} + +// by rpc +void SchedulerManager::call(protocol::Transaction::Ptr tx, + std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + SCHEDULER_LOG(DEBUG) << LOG_DESC("call: checkAndInit not ok") << LOG_KV("message", message); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error, + protocol::TransactionReceipt::Ptr&& receipt) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(receipt)); + }; + + m_scheduler->call(tx, std::move(_holdSchedulerCallback)); +} + +// by executor +void SchedulerManager::registerExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + std::function callback) +{ + initSchedulerIfNotExist(); + m_scheduler->registerExecutor(name, executor, std::move(callback)); +} + +void SchedulerManager::unregisterExecutor( + const std::string& name, std::function callback) +{ + initSchedulerIfNotExist(); + m_scheduler->unregisterExecutor(name, std::move(callback)); +} + +// clear all status +void SchedulerManager::reset(std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + SCHEDULER_LOG(DEBUG) << LOG_DESC("reset: checkAndInit not ok") + << LOG_KV("message", message); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message)); + return; + } + + m_scheduler->reset(std::move(callback)); +} + +void SchedulerManager::getCode( + std::string_view contract, std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error, bcos::bytes bytes) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(bytes)); + }; + + + m_scheduler->getCode(contract, std::move(_holdSchedulerCallback)); +} + +void SchedulerManager::getABI( + std::string_view contract, std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message), {}); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error, std::string str) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error), std::move(str)); + }; + + m_scheduler->getABI(contract, std::move(_holdSchedulerCallback)); +} + +void SchedulerManager::preExecuteBlock( + bcos::protocol::Block::Ptr block, bool verify, std::function callback) +{ + auto [ok, message] = checkAndInit(); + + if (!ok) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::ExecutorNotEstablishedError, message)); + return; + } + + auto _holdSchedulerCallback = [schedulerHolder = m_scheduler, callback = std::move(callback)]( + bcos::Error::Ptr&& error) { + SCHEDULER_LOG(TRACE) << "Release scheduler holder" + << LOG_KV("ptr count", schedulerHolder.use_count()); + callback(std::move(error)); + }; + + m_scheduler->preExecuteBlock(block, verify, std::move(_holdSchedulerCallback)); +} + +std::pair SchedulerManager::checkAndInit() +{ + if (m_status == STOPPED) + { + return {false, "Scheduler has stopped"}; + } + + initSchedulerIfNotExist(); + + if (m_executorManager->size() == 0) + { + return {false, "Waiting to connect some executors..."}; + } + + if (m_status == INITIALING) + { + return {false, "Scheduler is initialing, please wait and retry"}; + } + + if (m_status == SWITCHING) + { + return {false, "Scheduler is switching, please wait and retry"}; + } + + return {true, "ok"}; +} + +void SchedulerManager::asyncSwitchTerm( + int64_t schedulerSeq, std::function callback) +{ + if (m_status == STOPPED) + { + return; + } + + // Will update scheduler session, clear all scheduler & executor block pipeline cache and + // re-dispatch executor + m_pool.enqueue([this, callback = std::move(callback), schedulerSeq]() { + switchTerm(schedulerSeq); + callback(nullptr); + }); +} + + +void SchedulerManager::initSchedulerIfNotExist() +{ + try + { + if (!m_scheduler || m_status == INITIALING) + { + static bcos::SharedMutex mutex; + bcos::WriteGuard lock(mutex); + if (!m_scheduler || m_status == INITIALING) + { + updateScheduler(m_schedulerTerm.getSchedulerTermID()); + m_status.store(RUNNING); + } + } + } + catch (Exception const& _e) + { + SCHEDULER_LOG(FATAL) << "initSchedulerIfNotExist failed" << diagnostic_information(_e); + exit(-1); + } +} + +void SchedulerManager::registerOnSwitchTermHandler( + std::function onSwitchTerm) +{ + // onSwitchTerm(latest Uncommitted blockNumber) + m_onSwitchTermHandlers.push_back(std::move(onSwitchTerm)); +} + +void SchedulerManager::handleNeedSwitchEvent(int64_t oldSchedulerTermID) +{ + auto currentSchedulerTermID = m_schedulerTerm.getSchedulerTermID(); + if (m_status == SWITCHING) + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") + << "handleNeedSwitchEvent: SchedulerManager is switching. Ignore." + << LOG_KV("currentSchedulerTermID", currentSchedulerTermID) + << LOG_KV("oldSchedulerTermID", oldSchedulerTermID); + return; + } + else if (currentSchedulerTermID > oldSchedulerTermID) + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") + << "handleNeedSwitchEvent: Ignore outdated oldSchedulerTermID" + << LOG_KV("currentSchedulerTermID", currentSchedulerTermID) + << LOG_KV("oldSchedulerTermID", oldSchedulerTermID); + return; + } + else + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") << "handleNeedSwitchEvent: Trigger switch " + << LOG_KV("currentSchedulerTermID", currentSchedulerTermID) + << LOG_KV("oldSchedulerTermID", oldSchedulerTermID); + + + asyncSelfSwitchTerm(); + } +} + +void SchedulerManager::testTriggerSwitch() +{ + static std::set blockNumberHasSwitch; + if (utcTime() - m_scheduler->getSchedulerTermId() > 30000) + { + static bcos::SharedMutex mutex; + bcos::WriteGuard l(mutex); + + // Get current blockNumber + std::promise blockNumberFuture; + m_factory->getLedger()->asyncGetBlockNumber( + [&blockNumberFuture](Error::Ptr error, protocol::BlockNumber number) { + if (error) + { + SCHEDULER_LOG(ERROR) << "Scheduler get blockNumber from storage failed"; + blockNumberFuture.set_value(-1); + } + else + { + blockNumberFuture.set_value(number); + } + }); + auto blockNumber = blockNumberFuture.get_future().get(); + + // trigger switch + if (utcTime() - m_scheduler->getSchedulerTermId() > 30000 && + blockNumberHasSwitch.count(blockNumber) == 0) + { + selfSwitchTerm(); + blockNumberHasSwitch.insert(blockNumber); + } + } +} + + +void SchedulerManager::updateScheduler(int64_t schedulerTermId) +{ + if (m_scheduler) + { + if (m_scheduler->getSchedulerTermId() == schedulerTermId) + { + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") + << "SchedulerSwitch: scheduler has just switched, ignore trigger." + << m_scheduler->getSchedulerTermId() << " == " << schedulerTermId; + return; + } + } + auto newScheduler = m_factory->build(schedulerTermId); + + if (m_scheduler) + { + m_scheduler->stop(); + SCHEDULER_LOG(DEBUG) << LOG_BADGE("Switch") << "SchedulerSwitch: scheduler term switch " + << m_scheduler->getSchedulerTermId() << "->" << schedulerTermId; + } + + + m_scheduler = newScheduler; + m_scheduler->setOnNeedSwitchEventHandler( + [this](int64_t oldSchedulerTermID) { handleNeedSwitchEvent(oldSchedulerTermID); }); +} + +void SchedulerManager::switchTerm(int64_t schedulerSeq) +{ + if (m_status == STOPPED) + { + return; + } + + m_status.store(SWITCHING); + try + { + auto newTerm = SchedulerTerm(schedulerSeq); + updateScheduler(newTerm.getSchedulerTermID()); // may throw exception + m_schedulerTerm = newTerm; + + m_status.store(RUNNING); + onSwitchTermNotify(); + } + catch (Exception const& _e) + { + m_status.store(RUNNING); + SCHEDULER_LOG(ERROR) << "switchTerm failed. Re-push to task pool" + << diagnostic_information(_e); + asyncSwitchTerm(schedulerSeq, {}); + } +} + +void SchedulerManager::selfSwitchTerm() +{ + if (m_status == STOPPED) + { + return; + } + + if (m_status == SWITCHING) + { + // is self-switching, just return + return; + } + + m_status.store(SWITCHING); + try + { + auto newTerm = m_schedulerTerm.next(); + updateScheduler(newTerm.getSchedulerTermID()); // may throw exception + m_schedulerTerm = newTerm; + + + m_status.store(RUNNING); + onSwitchTermNotify(); + } + catch (Exception const& _e) + { + m_status.store(RUNNING); + SCHEDULER_LOG(ERROR) << "selfSwitchTerm failed. Re-push to task pool" + << diagnostic_information(_e); + asyncSelfSwitchTerm(); + } +} + +void SchedulerManager::asyncSelfSwitchTerm() +{ + m_pool.enqueue([this]() { selfSwitchTerm(); }); +} + +void SchedulerManager::onSwitchTermNotify() +{ + if (m_status == STOPPED) + { + return; + } + + m_factory->getLedger()->asyncGetBlockNumber( + [this](Error::Ptr error, protocol::BlockNumber blockNumber) { + if (error) + { + SCHEDULER_LOG(ERROR) + << "Could not get blockNumber from ledger on scheduler switch term"; + return; + } + + for (auto& onSwitchTerm : m_onSwitchTermHandlers) + { + onSwitchTerm(blockNumber + 1); + } + }); +} diff --git a/bcos-scheduler/src/SchedulerManager.h b/bcos-scheduler/src/SchedulerManager.h new file mode 100644 index 0000000..00dd8d1 --- /dev/null +++ b/bcos-scheduler/src/SchedulerManager.h @@ -0,0 +1,160 @@ +#pragma once +#include "bcos-scheduler/src/SchedulerFactory.h" +#include "bcos-scheduler/src/SchedulerImpl.h" +#include + +namespace bcos::scheduler +{ +class SchedulerManager : public SchedulerInterface +{ +public: + SchedulerManager( + int64_t schedulerSeq, SchedulerFactory::Ptr factory, ExecutorManager::Ptr executorManager) + : m_factory(factory), + m_schedulerTerm(schedulerSeq), + m_executorManager(executorManager), + m_pool("SchedulerManager", 1), // Must set to 1 for serial execution + m_status(INITIALING) + { + executorManager->setExecutorChangeHandler([this]() { + // trigger switch + asyncSelfSwitchTerm(); + }); + + // Notice: Not to initSchedulerIfNotExist here, because factory need to bind notifier after + // this constructor + } + + // by pbft & sync + void executeBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function + callback) override; + // by pbft & sync + void commitBlock(bcos::protocol::BlockHeader::Ptr header, + std::function callback) + override; + void status( + std::function callback) override; + void call(protocol::Transaction::Ptr tx, + std::function callback) override; + void registerExecutor(std::string name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor, + std::function callback) override; + void unregisterExecutor( + const std::string& name, std::function callback) override; + void reset(std::function callback) override; + void getCode( + std::string_view contract, std::function callback) override; + void getABI( + std::string_view contract, std::function callback) override; + + void preExecuteBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function callback) override; + + void asyncSwitchTerm(int64_t schedulerSeq, std::function callback); + + void initSchedulerIfNotExist(); + + void registerOnSwitchTermHandler(std::function onSwitchTerm); + + void handleNeedSwitchEvent(int64_t oldSchedulerTermID); + + void testTriggerSwitch(); + + SchedulerFactory::Ptr getFactory() { return m_factory; } + + class SchedulerTerm + { + public: + SchedulerTerm(int64_t schedulerSeq) + : m_schedulerSeq(schedulerSeq), m_executorSeq(utcTime() / 1000) + {} + + SchedulerTerm next() { return SchedulerTerm(m_schedulerSeq); } + int64_t getSchedulerTermID() + { + int64_t id = (m_schedulerSeq << 32) + m_executorSeq; + if (id <= 0) + { + BCOS_LOG(FATAL) << "SchedulerTermID overflow!" + << LOG_KV("m_schedulerSeq", m_schedulerSeq) + << LOG_KV("m_executorSeq", m_executorSeq) + << LOG_KV("SchedulerTermID", id); + } + BCOS_LOG(DEBUG) << "Build SchedulerTermID" << LOG_KV("m_schedulerSeq", m_schedulerSeq) + << LOG_KV("m_executorSeq", m_executorSeq) + << LOG_KV("SchedulerTermID", id); + + return id; + } + + + private: + int64_t m_schedulerSeq; + int64_t m_executorSeq; + }; + + enum Status : uint8_t + { + INITIALING = 1, + RUNNING = 2, + SWITCHING = 3, + STOPPED = 4, + }; + + std::pair checkAndInit(); + void stop() override + { + if (m_status == STOPPED) + { + SCHEDULER_LOG(INFO) << "scheduler has just stopped." << std::endl; + return; + } + + SCHEDULER_LOG(INFO) << "Try to stop SchedulerManager"; + + m_status.store(STOPPED); + + if (m_scheduler) + { + m_scheduler->stop(); + } + + if (m_executorManager) + { + m_executorManager->stop(); + } + + // waiting for stopped + while (m_scheduler.use_count() > 1) + { + SCHEDULER_LOG(DEBUG) << "Scheduler is stopping.. " + << LOG_KV("unfinishedTaskNum", m_scheduler.use_count() - 1); + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } + SCHEDULER_LOG(INFO) << "scheduler has stopped."; + m_scheduler = nullptr; + } + + void triggerSwitch() { asyncSelfSwitchTerm(); }; + +private: + void updateScheduler(int64_t schedulerTermId); + void switchTerm(int64_t schedulerSeq); + void selfSwitchTerm(); + void asyncSelfSwitchTerm(); + void onSwitchTermNotify(); + +private: + SchedulerImpl::Ptr m_scheduler; + SchedulerFactory::Ptr m_factory; + SchedulerTerm m_schedulerTerm; + ExecutorManager::Ptr m_executorManager; + std::vector> m_onSwitchTermHandlers; + + bcos::ThreadPool m_pool; + + std::atomic m_status; +}; + +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/SerialBlockExecutive.cpp b/bcos-scheduler/src/SerialBlockExecutive.cpp new file mode 100644 index 0000000..10dd00d --- /dev/null +++ b/bcos-scheduler/src/SerialBlockExecutive.cpp @@ -0,0 +1,276 @@ +#include "SerialBlockExecutive.h" +#include "DmcExecutor.h" +#include "SchedulerImpl.h" +#include "bcos-crypto/bcos-crypto/ChecksumAddress.h" +#include "bcos-framework/executor/ExecuteError.h" +#include "bcos-framework/executor/ExecutionMessage.h" + + +using namespace bcos::scheduler; + + +void SerialBlockExecutive::prepare() +{ + { + if (m_hasPrepared) + { + return; + } + WriteGuard lock(x_prepareLock); + if (m_hasPrepared) + { + return; + } + + uint64_t txSize = 0; + if (m_block->transactionsMetaDataSize() > 0) + { + txSize = m_block->transactionsMetaDataSize(); + } + else if (m_block->transactionsSize() > 0) + { + txSize = m_block->transactionsSize(); + } + else + { + SCHEDULER_LOG(DEBUG) << "BlockExecutive prepare: empty block" + << LOG_KV("block number", m_block->blockHeaderConst()->number()); + } + m_transactions.resize(txSize); + + if (m_executor == nullptr) + { + m_executor = m_scheduler->executorManager()->dispatchExecutor(SERIAL_EXECUTOR_NAME); + m_executorInfo = m_scheduler->executorManager()->getExecutorInfo(SERIAL_EXECUTOR_NAME); + } + } + + BlockExecutive::prepare(); +} + +void SerialBlockExecutive::saveMessage( + std::string, protocol::ExecutionMessage::UniquePtr message, bool) +{ + auto idx = message->contextID() - m_startContextID; + + if (m_transactions.size() <= idx) + { + m_transactions.resize(idx + 1); + } + m_transactions[idx] = std::move(message); +} + +void SerialBlockExecutive::asyncExecute( + std::function callback) +{ + SERIAL_EXECUTE_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("serialExecute execute block"); + if (m_result) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidStatus, "Invalid status"), nullptr, + m_isSysBlock); + return; + } + + if (m_scheduler->executorManager()->size() == 0) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::ExecutorNotEstablishedError, "The executor has not started!"), + nullptr, m_isSysBlock); + return; + } + m_currentTimePoint = std::chrono::system_clock::now(); + + auto startT = utcTime(); + prepare(); + + auto createMsgT = utcTime() - startT; + startT = utcTime(); + + if (!m_staticCall) + { + SERIAL_EXECUTE_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("serialExecute batch next block"); + // Execute nextBlock + batchNextBlock([this, startT, createMsgT, callback = std::move(callback)]( + Error::UniquePtr error) { + if (!m_isRunning) + { + callback( + BCOS_ERROR_UNIQUE_PTR(SchedulerError::Stopped, "BlockExecutive is stopped"), + nullptr, m_isSysBlock); + return; + } + + if (error) + { + SERIAL_EXECUTE_LOG(ERROR) << "Next block with error!" << error->errorMessage(); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + SchedulerError::NextBlockError, "Next block error!", *error), + nullptr, m_isSysBlock); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + SERIAL_EXECUTE_LOG(ERROR) << "Next block with error! SCHEDULER_TERM_ID_ERROR:" + << error->errorMessage() << ". trigger switch"; + triggerSwitch(); + } + return; + } + + SERIAL_EXECUTE_LOG(INFO) << BLOCK_NUMBER(number()) << LOG_BADGE("BlockTrace") + << LOG_DESC("serialExecute block begin"); + + serialExecute([this, createMsgT, startT, callback = std::move(callback)]( + bcos::Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool isSysBlock) { + if (error) + { + SERIAL_EXECUTE_LOG(ERROR) + << BLOCK_NUMBER(number()) << LOG_DESC("serialExecute block failed") + << LOG_KV("createMsgT", createMsgT) + << LOG_KV("executeT", (utcTime() - startT)) + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + callback(std::move(error), nullptr, isSysBlock); + return; + } + + SERIAL_EXECUTE_LOG(DEBUG) + << BLOCK_NUMBER(number()) << LOG_DESC("serialExecute success") + << LOG_KV("createMsgT", createMsgT) << LOG_KV("executeT", (utcTime() - startT)) + << LOG_KV("hash", header->hash().abridged()); + callback(nullptr, header, isSysBlock); + }); + }); + } + else + { + serialExecute(std::move(callback)); + } +} + +void SerialBlockExecutive::serialExecute( + std::function callback) +{ + // if is empty block just return + if (m_transactions.empty()) + { + SERIAL_EXECUTE_LOG(INFO) << BLOCK_NUMBER(number()) << "Empty block, just return."; + onExecuteFinish(std::move(callback)); + return; + } + + + SERIAL_EXECUTE_LOG(DEBUG) << "Send Transaction, size: " << m_transactions.size(); + // handle create message, to generate address + for (auto& tx : m_transactions) + { + if (tx->to().empty()) + { + auto newSeq = tx->seq(); + if (tx->createSalt()) + { + // TODO: Add sender in this process(consider compat with ethereum) + tx->setTo(bcos::newEVMAddress( + m_scheduler->getHashImpl(), tx->from(), tx->data(), *(tx->createSalt()))); + } + else + { + // TODO: Add sender in this process(consider compat with ethereum) + tx->setTo(bcos::newEVMAddress(m_scheduler->getHashImpl(), + m_block->blockHeaderConst()->number(), tx->contextID(), newSeq)); + } + } + + SERIAL_EXECUTE_LOG(DEBUG) << BLOCK_NUMBER(number()) << "0.Send:\t >>>> [" + << m_executorInfo->name << "]: " << tx->toString(); + } + + // send one tx + if (m_staticCall) + { + if (m_transactions.size() != 1) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CallError, + "The block of call should only has 1 request, but has " + + std::to_string(m_transactions.size())), + nullptr, m_syncBlock); + return; + } + + if (!m_executor) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CallError, "no executor found"), nullptr, + m_syncBlock); + return; + } + + m_executor->call(std::move(m_transactions[0]), + [this, callback = std::move(callback)]( + bcos::Error::UniquePtr error, bcos::protocol::ExecutionMessage::UniquePtr output) { + if (error) + { + SERIAL_EXECUTE_LOG(DEBUG) + << BLOCK_NUMBER(number()) + << "serialExecute:\t Error: " << error->errorMessage(); + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::SerialExecuteError, error->errorMessage()), + nullptr, m_syncBlock); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + return; + } + + onTxFinish(std::move(output)); + onExecuteFinish(std::move(callback)); + }); + } + else + { + m_executor->executeTransactions(bcos::protocol::SERIAL_EXECUTIVE_FLOW_ADDRESS, + m_transactions, + [this, callback = std::move(callback)](bcos::Error::UniquePtr error, + std::vector outputs) { + if (error) + { + SERIAL_EXECUTE_LOG(DEBUG) + << BLOCK_NUMBER(number()) + << "serialExecute:\t Error: " << error->errorMessage(); + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::SerialExecuteError, error->errorMessage()), + nullptr, m_syncBlock); + + if (error->errorCode() == bcos::executor::ExecuteError::SCHEDULER_TERM_ID_ERROR) + { + triggerSwitch(); + } + return; + } + + for (auto& output : outputs) + { + SERIAL_EXECUTE_LOG(DEBUG) + << BLOCK_NUMBER(number()) << "1.Receive:\t <<<< [" << m_executorInfo->name + << "]: " << output->toString(); + onTxFinish(std::move(output)); + } + onExecuteFinish(std::move(callback)); + }); + } +} + +void SerialBlockExecutive::onExecuteFinish( + std::function callback) +{ + if (!m_staticCall) + { + SERIAL_EXECUTE_LOG(DEBUG) << BLOCK_NUMBER(number()) << "2.Receipt:\t [^^]" + << LOG_KV("receiptsSize", m_executiveResults.size()) + << LOG_KV("blockNumber", number()); + } + BlockExecutive::onExecuteFinish(std::move(callback)); +} diff --git a/bcos-scheduler/src/SerialBlockExecutive.h b/bcos-scheduler/src/SerialBlockExecutive.h new file mode 100644 index 0000000..11878d2 --- /dev/null +++ b/bcos-scheduler/src/SerialBlockExecutive.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief The block executive(context) for serial transaction execution + * @file SerialBlockExecutive.h + * @author: jimmyshi + * @date: 2022-07-12 + */ + + +#pragma once +#include "BlockExecutive.h" + +#define SERIAL_EXECUTE_LOG(LEVEL) SCHEDULER_LOG(LEVEL) << LOG_BADGE("serialExecute") + +namespace bcos::scheduler +{ + +static const std::string SERIAL_EXECUTOR_NAME = "serial_executor"; + +class SerialBlockExecutive : public BlockExecutive +{ +public: + SerialBlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool) + : BlockExecutive(block, scheduler, startContextID, transactionSubmitResultFactory, staticCall, + _blockFactory, _txPool){}; + + SerialBlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock) + : BlockExecutive(block, scheduler, startContextID, transactionSubmitResultFactory, staticCall, + _blockFactory, _txPool, _gasLimit, _syncBlock) + {} + virtual ~SerialBlockExecutive(){}; + + + void prepare() override; + void asyncExecute( + std::function callback) override; + + void saveMessage( + std::string address, protocol::ExecutionMessage::UniquePtr message, bool withDAG) override; + +private: + void serialExecute( + std::function callback); + + void onExecuteFinish( + std::function callback) override; + + void serialPrepareExecutor() override{ + // do nothing + }; + + std::vector m_transactions; + bcos::executor::ParallelTransactionExecutorInterface::Ptr m_executor; + bcos::scheduler::ExecutorManager::ExecutorInfo::Ptr m_executorInfo; +}; +} // namespace bcos::scheduler diff --git a/bcos-scheduler/src/TarsExecutorManager.cpp b/bcos-scheduler/src/TarsExecutorManager.cpp new file mode 100644 index 0000000..28853c1 --- /dev/null +++ b/bcos-scheduler/src/TarsExecutorManager.cpp @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Tars manager executor + * @file TarsExecutorManager.cpp + * @author: octopuswang + * @date: 2022-08-01 + */ + +#include "bcos-scheduler/src/TarsExecutorManager.h" + +using namespace bcos; +using namespace bcos::scheduler; + +void TarsExecutorManager::start() +{ + if (m_running) + { + TARS_EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("start") << LOG_DESC("tars executor manager is already running") + << LOG_KV("executorServiceName", m_executorServiceName); + return; + } + + m_running = true; + + TARS_EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("start") << LOG_KV("executorServiceName", m_executorServiceName); + + auto self = std::weak_ptr(shared_from_this()); + + std::string executorServiceName = m_executorServiceName; + + if (m_nodeConfig->withoutTarsFramework()) + { + std::vector endpoints; + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::EXECUTOR_NAME, endpoints); + + executorServiceName = bcostars::endPointToString(executorServiceName, endpoints); + + TARS_EXECUTOR_MANAGER_LOG(INFO) << LOG_BADGE("start") << LOG_DESC("without tars framework") + << LOG_KV("executorServiceName", m_executorServiceName); + } + + m_executorServicePrx = bcostars::createServantProxy( + tars::Application::getCommunicator().get(), executorServiceName, + [self, executorServiceName](const tars::TC_Endpoint& _ep) { + auto executorManager = self.lock(); + if (!executorManager) + { + return; + } + + auto executorServicePrx = bcostars::createServantProxy( + executorManager->executorServiceName(), _ep.getHost(), _ep.getPort()); + + auto executorName = "executor-" + _ep.getHost() + "-" + std::to_string(_ep.getPort()); + auto executor = std::make_shared(executorServicePrx); + + try + { + executor->status([executorName, executor, self](bcos::Error::UniquePtr error, + bcos::protocol::ExecutorStatus::UniquePtr status) { + auto executorManager = self.lock(); + if (!executorManager) + { + return; + } + + if (error) + { + TARS_EXECUTOR_MANAGER_LOG(WARNING) + << LOG_BADGE("start") << LOG_DESC("getExecutorStatus failed") + << LOG_KV("executorName", executorName); + } + else + { + bool result = executorManager->addExecutor(executorName, executor); + TARS_EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("start") << LOG_DESC("addExecutor") + << LOG_KV("executorName", executorName) << LOG_KV("seq", status->seq()) + << LOG_KV("suc", result); + } + }); + } + catch (...) + {} + }, + [self](const tars::TC_Endpoint& _ep) { + auto executorManager = self.lock(); + if (!executorManager) + { + return; + } + + auto executorName = "executor-" + _ep.getHost() + "-" + std::to_string(_ep.getPort()); + + TARS_EXECUTOR_MANAGER_LOG(INFO) << LOG_BADGE("start") << LOG_DESC("removeExecutor") + << LOG_KV("executorName", executorName); + try + { + executorManager->removeExecutor(executorName); + } + catch (...) + {} + }); + + waitForExecutorConnection(); + + startTimer(); +} + +void TarsExecutorManager::waitForExecutorConnection() +{ + int retryTimes = 1; + do + { + auto s = size(); + if (s > 0) + { + TARS_EXECUTOR_MANAGER_LOG(INFO) + << LOG_BADGE("waitForExecutorConnection") << LOG_DESC("executor exist") + << LOG_KV("executor size", s); + break; + } + + std::string message = + "Waiting for connecting some executors, try times: " + std::to_string(retryTimes) + + ", max retry times: " + std::to_string(m_waitingExecutorMaxRetryTimes); + + std::cout << message << std::endl; + EXECUTOR_MANAGER_LOG(INFO) << message; + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); // wait for 1s + + } while (size() == 0 && ++retryTimes <= m_waitingExecutorMaxRetryTimes); + + if (retryTimes > m_waitingExecutorMaxRetryTimes) + { + // throw error + throw std::runtime_error("Error: Could not connect any executor after " + + std::to_string(m_waitingExecutorMaxRetryTimes) + " times retry"); + } +} diff --git a/bcos-scheduler/src/TarsExecutorManager.h b/bcos-scheduler/src/TarsExecutorManager.h new file mode 100644 index 0000000..32dc63a --- /dev/null +++ b/bcos-scheduler/src/TarsExecutorManager.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Tars manager executor + * @file TarsExecutorManager.h + * @author: octopuswang + * @date: 2022-08-01 + */ +#pragma once +#include "bcos-scheduler/src/ExecutorManager.h" +#include "bcos-tars-protocol/client/ExecutorServiceClient.h" +#include "bcos-tars-protocol/tars/ExecutorService.h" +#include "bcos-tool/NodeConfig.h" +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Timer.h" +#include "deps/src/wabt_project/src/result.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include + +#define TARS_EXECUTOR_MANAGER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TARS_EXECUTOR_MANAGER") + +namespace bcos::scheduler +{ +class TarsExecutorManager : public ExecutorManager, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using EndPointSet = std::shared_ptr>>; + + TarsExecutorManager( + const std::string& _executorServiceName, bcos::tool::NodeConfig::Ptr& _nodeConfig) + : m_nodeConfig(_nodeConfig) + { + m_executorServiceName = _executorServiceName + "." + bcos::protocol::EXECUTOR_SERVANT_NAME; + + TARS_EXECUTOR_MANAGER_LOG(INFO) + << "Initialize " << LOG_KV("executorServiceName", m_executorServiceName); + } + + TarsExecutorManager(TarsExecutorManager&&) = delete; + TarsExecutorManager(const TarsExecutorManager&) = delete; + const TarsExecutorManager& operator=(const TarsExecutorManager&) = delete; + TarsExecutorManager&& operator=(TarsExecutorManager&&) = delete; + + ~TarsExecutorManager() override = default; + + void start(); + void stop() override { m_running = false; } + + void waitForExecutorConnection(); + + std::string executorServiceName() { return m_executorServiceName; } + +private: + bool m_running = false; + + bcos::tool::NodeConfig::Ptr m_nodeConfig; + std::string m_executorServiceName; + bcostars::ExecutorServicePrx m_executorServicePrx; + int m_waitingExecutorMaxRetryTimes = 10; +}; +} // namespace bcos::scheduler diff --git a/bcos-scheduler/test/CMakeLists.txt b/bcos-scheduler/test/CMakeLists.txt new file mode 100644 index 0000000..c7e8aa5 --- /dev/null +++ b/bcos-scheduler/test/CMakeLists.txt @@ -0,0 +1,17 @@ +file(GLOB_RECURSE SOURCES main.cpp testExecutorManager.cpp testKeyLocks.cpp testScheduler.cpp testChecksumAddress.cpp testDmcStepRecorder.cpp testExecutivePool.cpp testDmcExecutor.cpp testSchedulerImpl.cpp testBlockExecutive.cpp) + +# cmake settings +set(TEST_BINARY_NAME test-scheduler) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}/bcos-scheduler/src) +target_compile_options(${TEST_BINARY_NAME} PRIVATE -Wno-unused-variable) + +find_package(Boost REQUIRED unit_test_framework serialization) + +target_link_libraries(${TEST_BINARY_NAME} ${SCHEDULER_TARGET} ${CRYPTO_TARGET} +Boost::unit_test_framework ${TARS_PROTOCOL_TARGET} Boost::serialization ${STORAGE_TARGET} ${SECURITY_TARGET}) + +add_test(NAME test-scheduler WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) +# include(SearchTestCases) +# config_test_cases("" "${SOURCES}" ${TEST_BINARY_NAME} "${EXCLUDE_SUITES}") diff --git a/bcos-scheduler/test/main.cpp b/bcos-scheduler/test/main.cpp new file mode 100644 index 0000000..0e27edc --- /dev/null +++ b/bcos-scheduler/test/main.cpp @@ -0,0 +1,3 @@ +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockBlockExecutive.h b/bcos-scheduler/test/mock/MockBlockExecutive.h new file mode 100644 index 0000000..f2db63b --- /dev/null +++ b/bcos-scheduler/test/mock/MockBlockExecutive.h @@ -0,0 +1,168 @@ +#pragma once +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/BlockHeader.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/TransactionMetaData.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "bcos-scheduler/src/BlockExecutive.h" +#include "bcos-scheduler/test/mock/MockLedger3.h" +#include "bcos-tars-protocol/bcos-tars-protocol/protocol/BlockFactoryImpl.h" +#include "bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h" +#include "mock/MockLedger.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace bcos; +using namespace bcostars::protocol; +using namespace bcos::crypto; +using namespace bcos::scheduler; + +namespace bcos::test +{ +class MockBlockExecutive : public bcos::scheduler::BlockExecutive +{ +public: + using Ptr = std::shared_ptr; + MockBlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool) + : BlockExecutive(block, scheduler, startContextID, transactionSubmitResultFactory, staticCall, + _blockFactory, _txPool) + {} + + MockBlockExecutive(bcos::protocol::Block::Ptr block, SchedulerImpl* scheduler, + size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock) + : BlockExecutive(block, scheduler, startContextID, transactionSubmitResultFactory, staticCall, + _blockFactory, _txPool) + { + m_blockNumber = block->blockHeader()->number(); + m_syncBlock = _syncBlock; + m_gasLimit = _gasLimit; + } + virtual ~MockBlockExecutive(){}; + + void prepare() override + { + // do nothing + } + void asyncCall( + std::function callback) + override + { + asyncExecute([executive = shared_from_this(), callback]( + Error::UniquePtr&& _error, protocol::BlockHeader::Ptr, bool) { + if (!executive) + { + callback(BCOS_ERROR_UNIQUE_PTR( + SchedulerError::UnknownError, "get block executive failed"), + nullptr); + return; + } + auto receipt = std::const_pointer_cast( + executive->block()->receipt(0)); + callback(std::move(_error), std::move(receipt)); + }); + } + void asyncNotify( + std::function)>&, + std::function _callback) override + { + // do nothing + _callback(nullptr); + } + void asyncExecute( + std::function callback) override + { + if (m_result) + { + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::InvalidStatus, "Invalid status"), + nullptr, m_isSysBlock); + SCHEDULER_LOG(DEBUG) << "i am asyncExecute error"; + return; + } + else + { + SCHEDULER_LOG(DEBUG) << "MockBlockExecutive asyncExecute begin"; + bcos::crypto::Hash::Ptr hashImpl = std::make_shared(); + bcos::crypto::SignatureCrypto::Ptr signature = std::make_shared(); + bcos::crypto::CryptoSuite::Ptr suite = + std::make_shared(hashImpl, signature, nullptr); + m_blockHeaderFactory = + std::make_shared(suite); + auto blockHeader = m_blockHeaderFactory->createBlockHeader(); + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockNumber", m_blockNumber) + << LOG_KV("blockHeader", blockHeader); + blockHeader->setNumber(m_blockNumber); + blockHeader->calculateHash(*hashImpl); + m_result = blockHeader; + callback(nullptr, blockHeader, false); + return; + } + } + void asyncCommit(std::function callback) override + { + if (m_blockNumber <= 5) + { + // m_ledger->commitSuccess(false); + callback(BCOS_ERROR_UNIQUE_PTR(SchedulerError::CommitError, "asyncCommit errors!")); + } + else + { + // m_ledger->commitSuccess(true); + callback(nullptr); + } + } + bcos::protocol::BlockNumber number() { return m_block->blockHeaderConst()->number(); } + bcos::protocol::Block::Ptr block() { return m_block; } + bool sysBlock() const { return m_isSysBlock; } + + void triggerSwitch() + { + if (f_onNeedSwitchEvent) + { + f_onNeedSwitchEvent(); + } + } + void setOnNeedSwitchEventHandler(std::function onNeedSwitchEvent) + { + f_onNeedSwitchEvent = std::move(onNeedSwitchEvent); + } + +private: + bcos::protocol::Block::Ptr m_block; + bcostars::protocol::BlockHeaderFactoryImpl::Ptr m_blockHeaderFactory; + bcos::protocol::BlockNumber m_blockNumber; + bcos::test::MockLedger3::Ptr m_ledger; + size_t m_gasLimit = TRANSACTION_GAS; + bool m_isSysBlock; + bool m_syncBlock = false; + +public: + struct CommitStatus + { + std::atomic_size_t total; + std::atomic_size_t success = 0; + std::atomic_size_t failed = 0; + std::function checkAndCommit; + mutable SharedMutex x_lock; + }; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockBlockExecutiveFactory.h b/bcos-scheduler/test/mock/MockBlockExecutiveFactory.h new file mode 100644 index 0000000..5684bf2 --- /dev/null +++ b/bcos-scheduler/test/mock/MockBlockExecutiveFactory.h @@ -0,0 +1,78 @@ +#pragma once +#include "bcos-framework/protocol/Block.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "bcos-scheduler/src/BlockExecutive.h" +#include "bcos-scheduler/src/BlockExecutiveFactory.h" +#include "bcos-scheduler/src/Common.h" +#include "bcos-scheduler/src/SerialBlockExecutive.h" +#include "bcos-scheduler/test/mock/MockBlockExecutive.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::scheduler; +using namespace bcos::protocol; + +namespace bcos::test +{ +class MockBlockExecutiveFactory : public bcos::scheduler::BlockExecutiveFactory +{ +public: + using Ptr = std::shared_ptr; + MockBlockExecutiveFactory(bool isSerialExecute) : BlockExecutiveFactory(isSerialExecute) {} + virtual ~MockBlockExecutiveFactory() {} + + std::shared_ptr build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool) override + { + if (m_isSerialExecute) + { + SCHEDULER_LOG(DEBUG) << "-----building MockSerialBlockExecutive-----"; + auto serialBlockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool); + return serialBlockExecutive; + } + else + { + SCHEDULER_LOG(DEBUG) << "-----building MockBlockExecutive-----"; + auto blockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool); + return blockExecutive; + } + } + + std::shared_ptr build(bcos::protocol::Block::Ptr block, + SchedulerImpl* scheduler, size_t startContextID, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + bool staticCall, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txPool, uint64_t _gasLimit, bool _syncBlock) override + { + if (m_isSerialExecute) + { + SCHEDULER_LOG(DEBUG) << "-----building MockSerialBlockExecutive-----" + << LOG_KV("serialExecuteFlag", m_isSerialExecute); + auto serialBlockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool, + _gasLimit, _syncBlock); + return serialBlockExecutive; + } + else + { + SCHEDULER_LOG(DEBUG) << "-----building MockBlockExecutive-----" + << LOG_KV("serialExecuteFlag", m_isSerialExecute); + auto blockExecutive = std::make_shared(block, scheduler, + startContextID, transactionSubmitResultFactory, staticCall, _blockFactory, _txPool, + _gasLimit, _syncBlock); + return blockExecutive; + } + } + +private: + bool m_isSerialExecute = false; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockDeadLockExecutor.h b/bcos-scheduler/test/mock/MockDeadLockExecutor.h new file mode 100644 index 0000000..7e68962 --- /dev/null +++ b/bcos-scheduler/test/mock/MockDeadLockExecutor.h @@ -0,0 +1,117 @@ +#pragma once +#include "MockExecutor.h" +#include "bcos-framework/executor/ExecutionMessage.h" + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockDeadLockParallelExecutor : public MockParallelExecutor +{ +public: + using MockParallelExecutor::MockParallelExecutor; + + ~MockDeadLockParallelExecutor() override {} + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + std::set> contracts = {"contract1", "contract2"}; + BOOST_CHECK(contracts.count(input->to()) == 1); + BOOST_CHECK(input->contextID() == 0 || input->contextID() == 1); + + if (input->type() == protocol::ExecutionMessage::REVERT) + { + if (input->contextID() == 1) + { + if (input->seq() == 1) + { + BOOST_CHECK_EQUAL(input->to(), "contract1"); + BOOST_CHECK_EQUAL(input->from(), "contract1"); + } + else if (input->seq() == 0) + { + BOOST_CHECK_EQUAL(input->to(), "contract1"); + BOOST_CHECK_EQUAL(input->from(), "contract1"); + } + else + { + BOOST_FAIL("Unexecuted seq"); + } + } + else + { + if (input->seq() == 1) + { + BOOST_CHECK_EQUAL(input->to(), "contract2"); + BOOST_CHECK_EQUAL(input->from(), "contract2"); + } + else if (input->seq() == 0) + { + BOOST_CHECK_EQUAL(input->to(), "contract2"); + BOOST_CHECK_EQUAL(input->from(), "contract2"); + } + else + { + BOOST_FAIL("Unexecuted seq"); + } + } + } + else if (input->type() == protocol::ExecutionMessage::TXHASH) + { + BOOST_CHECK_EQUAL(input->seq(), 0); + input->setType(protocol::ExecutionMessage::MESSAGE); + if (input->to() == "contract1") + { + input->setFrom("contract1"); + input->setTo("contract2"); + input->setKeyLocks({"key1"}); + } + else + { + input->setFrom("contract2"); + input->setTo("contract1"); + input->setKeyLocks({"key2"}); + } + } + else if (input->type() == protocol::ExecutionMessage::MESSAGE) + { + BOOST_CHECK_GT(input->seq(), 0); + input->setType(protocol::ExecutionMessage::KEY_LOCK); + + if (input->contextID() == 1) + { + BOOST_CHECK_EQUAL(input->keyLocks()[0], "key1"); + input->setFrom(std::string(input->to())); + input->setKeyLocks({}); + input->setKeyLockAcquired("key1"); + } + else + { + BOOST_CHECK_EQUAL(input->keyLocks()[0], "key2"); + input->setFrom(std::string(input->to())); + input->setKeyLocks({}); + input->setKeyLockAcquired("key2"); + } + } + else if (input->type() == protocol::ExecutionMessage::KEY_LOCK) + { + std::set> contracts = {"contract1", "contract2"}; + BOOST_CHECK_EQUAL(contracts.count(input->to()), 1); + input->setType(protocol::ExecutionMessage::FINISHED); + } + else if (input->type() == protocol::ExecutionMessage::FINISHED) + { + std::set> contracts = {"contract1", "contract2"}; + BOOST_CHECK_EQUAL(contracts.count(input->to()), 1); + } + + callback(nullptr, std::move(input)); + } + + std::string m_name; + bcos::protocol::BlockNumber m_blockNumber = 0; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockDmcExecutor.h b/bcos-scheduler/test/mock/MockDmcExecutor.h new file mode 100644 index 0000000..e8abee4 --- /dev/null +++ b/bcos-scheduler/test/mock/MockDmcExecutor.h @@ -0,0 +1,239 @@ +#pragma once +#include "Common.h" +#include "bcos-framework/executor/ExecuteError.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/NativeExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-scheduler/src/DmcExecutor.h" +#include +#include + + +using namespace std; +using namespace bcos; +using namespace bcos::executor; +using namespace bcos::scheduler; +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockDmcExecutor : public bcos::executor::ParallelTransactionExecutorInterface +{ +public: + using executorStatus = bcos::scheduler::DmcExecutor::Status; + using Ptr = std::shared_ptr(); + MockDmcExecutor(const std::string& name) : m_name(name) {} + + virtual ~MockDmcExecutor() {} + // const std::string& name() const { return m_name; } + + void status( + std::function) + override + {} + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + // auto output = std::make_unique(); + // output = std::move(input); + SCHEDULER_LOG(DEBUG) << LOG_KV(",input type ", input->type()); + if (input->type() == bcos::protocol::ExecutionMessage::TXHASH) + { + std::string str = "Call error, Need Switch!"; + input->setData(bcos::bytes(str.begin(), str.end())); + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, "Call is error"), + std::move(input)); + SCHEDULER_LOG(DEBUG) << LOG_KV("call error, input type is ", input->type()); + return; + } + else + { + if (input->to() == "0xaabbccdd") + { + std::string str = "Call Finished!"; + input->setType(protocol::ExecutionMessage::FINISHED); + input->setData(bcos::bytes(str.begin(), str.end())); + input->setGasAvailable(123456); + SCHEDULER_LOG(DEBUG) << LOG_KV("call finished, input type is ", input->type()); + callback(nullptr, std::move(input)); + } + else + { + DMC_LOG(FATAL) << "Error! Need schedulerOut, But perform Call!"; + assert(false); + callback( + BCOS_ERROR_UNIQUE_PTR(ExecuteError::SCHEDULER_TERM_ID_ERROR, "Call is error"), + std::move(input)); + return; + } + } + } + + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override + { + SCHEDULER_LOG(DEBUG) << LOG_KV("inputs size ", inputs.size()); + std::vector results(inputs.size()); + for (auto i = 0u; i < inputs.size(); i++) + { + SCHEDULER_LOG(DEBUG) << "begin dmcExecute" << LOG_KV("input type ", inputs[i]->type()); + results.at(i) = std::move(inputs[i]); + if (results.at(i)->to() == "aabbccdd") + { + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, "execute is error"), + std::move(results)); + return; + } + + if (results[i]->type() == bcos::protocol::ExecutionMessage::KEY_LOCK) + { + SCHEDULER_LOG(DEBUG) << "setData, " + << "type is keyLocks"; + std::string str = "DMCExecuteTransaction Finish, I am keyLock!"; + results[i]->setData(bcos::bytes(str.begin(), str.end())); + } + else + { + SCHEDULER_LOG(DEBUG) << "setData, " + << "type is not keyLocks"; + results[i]->setType(bcos::protocol::ExecutionMessage::FINISHED); + std::string str = "DMCExecuteTransaction Finish!"; + results[i]->setData(bcos::bytes(str.begin(), str.end())); + } + } + SCHEDULER_LOG(DEBUG) << LOG_KV("results size ", results.size()); + callback(nullptr, std::move(results)); + }; + + void nextBlockHeader(int64_t, const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + SCHEDULER_LOG(TRACE) << "Receiving nextBlock: " << blockHeader->number(); + m_blockNumber = blockHeader->number(); + callback(nullptr); // always success + } + + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (input->to() == "0xaabbccdd") + { + callback(BCOS_ERROR_UNIQUE_PTR(-1, "i am an error!!!!"), nullptr); + return; + } + + // Always success + BOOST_CHECK(input); + if (input->type() == bcos::protocol::ExecutionMessage::TXHASH) + { + BOOST_CHECK_NE(input->transactionHash(), bcos::crypto::HashType()); + } + + input->setStatus(0); + input->setMessage(""); + + std::string data = "Hello world!"; + input->setData(bcos::bytes(data.begin(), data.end())); + input->setType(bcos::protocol::ExecutionMessage::FINISHED); + + callback(nullptr, std::move(input)); + } + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void executeTransactions(std::string, gsl::span, + std::function)>) override + {} + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override + { + std::vector messages(inputs.size()); + for (auto i = 0u; i < inputs.size(); ++i) + { + auto [it, inserted] = m_dagHashes.emplace(inputs[i]->transactionHash()); + boost::ignore_unused(it); + BOOST_TEST(inserted); + if (inputs[i]->to() == "aabbccdd") + { + callback(BCOS_ERROR_UNIQUE_PTR(ExecuteError::EXECUTE_ERROR, + "Execute failed with empty blockContext!"), + {}); + return; + } + + // SCHEDULER_LOG(TRACE) << "Executing: " << inputs[i].get(); + BOOST_TEST(inputs[i].get()); + messages.at(i) = std::move(inputs[i]); + if (i < 5) + { + messages[i]->setType(protocol::ExecutionMessage::SEND_BACK); + } + else + { + messages[i]->setType(protocol::ExecutionMessage::FINISHED); + std::string result = "OK!"; + messages[i]->setData(bcos::bytes(result.begin(), result.end())); + } + } + + callback(nullptr, std::move(messages)); + } + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + callback(nullptr, h256(12345)); + } + + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void getCode(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void getABI(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void reset(std::function callback) override { callback(nullptr); } + + + std::string m_name; + bcos::protocol::BlockNumber m_blockNumber = 0; + std::set m_dagHashes; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockExecutor.h b/bcos-scheduler/test/mock/MockExecutor.h new file mode 100644 index 0000000..de33669 --- /dev/null +++ b/bcos-scheduler/test/mock/MockExecutor.h @@ -0,0 +1,185 @@ +#pragma once +#include "../../src/Common.h" +#include "Common.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include +#include + +using namespace bcos; +using namespace bcos::executor; +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockParallelExecutor : public bcos::executor::ParallelTransactionExecutorInterface +{ +public: + MockParallelExecutor(const std::string& name) : m_name(name) {} + + ~MockParallelExecutor() override {} + + const std::string& name() const { return m_name; } + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + SCHEDULER_LOG(TRACE) << "Receiving nextBlock: " << blockHeader->number(); + m_blockNumber = blockHeader->number(); + callback(nullptr); // always success + } + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (input->transactionHash() == h256(10086)) + { + callback(BCOS_ERROR_UNIQUE_PTR(-1, "i am an error!!!!"), nullptr); + return; + } + + // Always success + BOOST_CHECK(input); + if (input->type() == bcos::protocol::ExecutionMessage::TXHASH) + { + BOOST_CHECK_NE(input->transactionHash(), bcos::crypto::HashType()); + } + + input->setStatus(0); + input->setMessage(""); + + std::string data = "Hello world!"; + input->setData(bcos::bytes(data.begin(), data.end())); + input->setType(bcos::protocol::ExecutionMessage::FINISHED); + + callback(nullptr, std::move(input)); + } + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + + void executeTransactions(std::string contractAddress, + gsl::span inputs, + + std::function)> + callback) override + { + std::vector results(inputs.size()); + for (auto i = 0u; i < inputs.size(); i++) + { + executeTransaction(std::move(inputs[i]), + [&](bcos::Error::UniquePtr, bcos::protocol::ExecutionMessage::UniquePtr result) { + results[i] = std::move(result); + }); + } + callback(nullptr, std::move(results)); + }; + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override + { + BOOST_CHECK_EQUAL(inputs.size(), 100); + + std::vector messages(inputs.size()); + for (auto i = 0u; i < inputs.size(); ++i) + { + auto [it, inserted] = m_dagHashes.emplace(inputs[i]->transactionHash()); + boost::ignore_unused(it); + BOOST_TEST(inserted); + + // SCHEDULER_LOG(TRACE) << "Executing: " << inputs[i].get(); + BOOST_TEST(inputs[i].get()); + BOOST_CHECK_EQUAL(inputs[i]->type(), protocol::ExecutionMessage::TXHASH); + messages.at(i) = std::move(inputs[i]); + if (i < 50) + { + messages[i]->setType(protocol::ExecutionMessage::SEND_BACK); + } + else + { + messages[i]->setType(protocol::ExecutionMessage::FINISHED); + + std::string result = "OK!"; + messages[i]->setData(bcos::bytes(result.begin(), result.end())); + } + } + + callback(nullptr, std::move(messages)); + } + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + + std::function)> + callback) override + { + std::vector results(inputs.size()); + for (auto i = 0u; i < inputs.size(); i++) + { + executeTransaction(std::move(inputs[i]), + [&](bcos::Error::UniquePtr, bcos::protocol::ExecutionMessage::UniquePtr result) { + results[i] = std::move(result); + }); + } + callback(nullptr, std::move(results)); + }; + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + callback(nullptr, h256(12345)); + } + + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void getCode(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void getABI(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void reset(std::function callback) override {} + + void clear() { m_dagHashes.clear(); } + + std::string m_name; + bcos::protocol::BlockNumber m_blockNumber = 0; + std::set m_dagHashes; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test diff --git a/bcos-scheduler/test/mock/MockExecutor3.h b/bcos-scheduler/test/mock/MockExecutor3.h new file mode 100644 index 0000000..cc61fb8 --- /dev/null +++ b/bcos-scheduler/test/mock/MockExecutor3.h @@ -0,0 +1,119 @@ +#pragma once +#include "Common.h" +#include "MockExecutor.h" +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockParallelExecutor3 : public MockParallelExecutor +{ +public: + MockParallelExecutor3(const std::string& name) : MockParallelExecutor(name) {} + + ~MockParallelExecutor3() override {} + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + BOOST_CHECK_EQUAL(input->type(), protocol::ExecutionMessage::TXHASH); + BOOST_CHECK_GE(input->contextID(), 0); + + // if (input->transactionHash() == h256(9)) + // { + // BOOST_CHECK(input->to().find("contract") == std::string::npos); + // } + + // Always success + SCHEDULER_LOG(TRACE) << "Input, hash:" << input->transactionHash().hex() + << " contract:" << input.get() << " to:" << input->to(); + BOOST_CHECK(input); + BOOST_CHECK(!input->to().empty()); + BOOST_CHECK_EQUAL(input->depth(), 0); + BOOST_CHECK_EQUAL(input->gasAvailable(), gasLimit); + + input->setType(bcos::protocol::ExecutionMessage::FINISHED); + input->setStatus(0); + input->setMessage(""); + + std::string data = "Hello world!"; + input->setData(bcos::bytes(data.begin(), data.end())); + + auto [it, inserted] = txHashes.emplace(input->transactionHash()); + (void)it; + if (!inserted) + { + BOOST_FAIL("Duplicate hash: " + input->transactionHash().hex()); + } + + auto [it3, inserted3] = contextIDs.emplace(input->contextID()); + (void)it3; + if (!inserted3) + { + BOOST_FAIL( + "Duplicate contextID: " + boost::lexical_cast(input->contextID())); + } + + auto inputShared = + std::make_shared(std::move(input)); + + auto [it2, inserted2] = batchContracts.emplace(std::string((*inputShared)->to()), + [callback, inputShared]() { callback(nullptr, std::move(*inputShared)); }); + + (void)it2; + if (!inserted2) + { + BOOST_FAIL("Duplicate contract: " + std::string((*inputShared)->to())); + } + + if (batchContracts.size() == 3) + { + // current batch is finished + std::map> results; + results.swap(batchContracts); + + for (auto& it : results) + { + (it.second)(); + } + } + } + + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + BOOST_CHECK_EQUAL(params.number, 100); + callback(nullptr); + } + + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + BOOST_CHECK_EQUAL(params.number, 100); + callback(nullptr); + } + + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + BOOST_CHECK_EQUAL(params.number, 100); + callback(nullptr); + } + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + BOOST_CHECK_EQUAL(number, 100); + callback(nullptr, h256(255)); + } + + std::map> batchContracts; + std::set txHashes; + std::set contextIDs; + size_t gasLimit = 300000000; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockExecutorForCall.h b/bcos-scheduler/test/mock/MockExecutorForCall.h new file mode 100644 index 0000000..a5c4977 --- /dev/null +++ b/bcos-scheduler/test/mock/MockExecutorForCall.h @@ -0,0 +1,87 @@ +#pragma once + +#include "Common.h" +#include "MockExecutor.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockParallelExecutorForCall : public MockParallelExecutor +{ +public: + using Ptr = std::shared_ptr(); + MockParallelExecutorForCall(const std::string& name) : MockParallelExecutor(name) {} + + ~MockParallelExecutorForCall() override {} + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + BOOST_FAIL("Unexpected nextBlockHeader!"); + } + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + BOOST_FAIL("Unexpected execute!"); + } + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + if (input->to() == precompiled::AUTH_COMMITTEE_ADDRESS) + { + if (input->create()) + { + callback(BCOS_ERROR_UNIQUE_PTR(-1, "deploy sys contract!"), nullptr); + return; + } + input->setType(protocol::ExecutionMessage::FINISHED); + std::string data = "Hello world! response"; + input->setData(bcos::bytes(data.begin(), data.end())); + input->setStatus(0); + input->setGasAvailable(123456); + callback(nullptr, std::move(input)); + return; + } + + BOOST_CHECK_EQUAL(input->type(), protocol::ExecutionMessage::MESSAGE); + BOOST_CHECK_EQUAL(input->to(), "address_to"); + // BOOST_CHECK_EQUAL(input->from().size(), 40); + + auto inputBytes = input->data(); + std::string inputStr((char*)inputBytes.data(), inputBytes.size()); + + BOOST_CHECK_EQUAL(inputStr, "Hello world! request"); + + input->setType(protocol::ExecutionMessage::FINISHED); + + std::string data = "Hello world! response"; + input->setData(bcos::bytes(data.begin(), data.end())); + input->setStatus(0); + input->setGasAvailable(123456); + callback(nullptr, std::move(input)); + } + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + BOOST_CHECK_GT(number, 0); + callback(nullptr, h256(255)); + } + + std::map> batchContracts; + std::set txHashes; + std::set contextIDs; + int count = 0; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockExecutorForCreate.h b/bcos-scheduler/test/mock/MockExecutorForCreate.h new file mode 100644 index 0000000..c0c8e9a --- /dev/null +++ b/bcos-scheduler/test/mock/MockExecutorForCreate.h @@ -0,0 +1,90 @@ +#pragma once + +#include "Common.h" +#include "MockExecutor.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockParallelExecutorForCreate : public MockParallelExecutor +{ +public: + using Ptr = std::shared_ptr(); + MockParallelExecutorForCreate(const std::string& name) : MockParallelExecutor(name) {} + + ~MockParallelExecutorForCreate() override {} + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + SCHEDULER_LOG(TRACE) << "Execute, type: " << input->type() + << " contextID: " << input->contextID() << " seq: " << input->seq(); + + if (count == 0) + { + BOOST_CHECK_EQUAL(input->type(), protocol::ExecutionMessage::TXHASH); + } + else if (count == 1) + { + BOOST_CHECK_EQUAL(input->type(), protocol::ExecutionMessage::MESSAGE); + } + else + { + BOOST_CHECK_EQUAL(input->type(), protocol::ExecutionMessage::FINISHED); + } + BOOST_CHECK_GE(input->contextID(), 0); + + SCHEDULER_LOG(TRACE) << "contract address: " << input->to(); + BOOST_CHECK(input->to().find("contract") == std::string::npos); + BOOST_CHECK_EQUAL(input->to().size(), 40); + + // Always success + SCHEDULER_LOG(TRACE) << "Input, hash:" << input->transactionHash().hex() + << " contract:" << input.get() << " to:" << input->to(); + BOOST_CHECK(input); + BOOST_CHECK(!input->to().empty()); + BOOST_CHECK_EQUAL(input->depth(), 0); + BOOST_CHECK_EQUAL(input->gasAvailable(), gasLimit); + + if (count == 0) + { + input->setType(bcos::protocol::ExecutionMessage::MESSAGE); + input->setTo(""); + } + else + { + input->setType(bcos::protocol::ExecutionMessage::FINISHED); + } + input->setStatus(0); + input->setMessage(""); + + std::string data = "Hello world!"; + + input->setData(bcos::bytes(data.begin(), data.end())); + + ++count; + + callback(nullptr, std::move(input)); + } + + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + BOOST_CHECK_GT(number, 0); + callback(nullptr, h256(255)); + } + + std::map> batchContracts; + std::set txHashes; + std::set contextIDs; + int count = 0; + size_t gasLimit = 300000000; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockExecutorForMessageDAG.h b/bcos-scheduler/test/mock/MockExecutorForMessageDAG.h new file mode 100644 index 0000000..9e80956 --- /dev/null +++ b/bcos-scheduler/test/mock/MockExecutorForMessageDAG.h @@ -0,0 +1,163 @@ +#pragma once +#include "Common.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockParallelExecutorByMessage : public bcos::executor::ParallelTransactionExecutorInterface +{ +public: + MockParallelExecutorByMessage(const std::string& name) : m_name(name) {} + + ~MockParallelExecutorByMessage() override {} + + const std::string& name() const { return m_name; } + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + SCHEDULER_LOG(TRACE) << "Receiving nextBlock: " << blockHeader->number(); + m_blockNumber = blockHeader->number(); + callback(nullptr); // always success + } + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + // Always success + BOOST_CHECK(input); + if (input->type() == bcos::protocol::ExecutionMessage::MESSAGE) + { + BOOST_CHECK_NE(input->transactionHash(), bcos::crypto::HashType()); + } + + input->setStatus(0); + input->setMessage(""); + + std::string data = "Hello world!"; + input->setData(bcos::bytes(data.begin(), data.end())); + input->setType(bcos::protocol::ExecutionMessage::FINISHED); + + callback(nullptr, std::move(input)); + } + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void executeTransactions(std::string contractAddress, + gsl::span inputs, + + std::function)> + callback) override + { + std::vector results(inputs.size()); + for (auto i = 0u; i < inputs.size(); i++) + { + executeTransaction(std::move(inputs[i]), + [&](bcos::Error::UniquePtr, bcos::protocol::ExecutionMessage::UniquePtr result) { + results[i] = std::move(result); + }); + } + callback(nullptr, std::move(results)); + }; + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override + { + BOOST_CHECK_EQUAL(inputs.size(), 100); + + std::vector messages(inputs.size()); + for (auto i = 0u; i < inputs.size(); ++i) + { + BOOST_TEST(inputs[i].get()); + BOOST_CHECK_EQUAL(inputs[i]->type(), protocol::ExecutionMessage::MESSAGE); + messages.at(i) = std::move(inputs[i]); + messages[i]->setType(protocol::ExecutionMessage::FINISHED); + + std::string result = "OK!"; + messages[i]->setData(bcos::bytes(result.begin(), result.end())); + } + + callback(nullptr, std::move(messages)); + } + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + + std::function)> + callback) override + { + std::vector results(inputs.size()); + for (auto i = 0u; i < inputs.size(); i++) + { + executeTransaction(std::move(inputs[i]), + [&](bcos::Error::UniquePtr, bcos::protocol::ExecutionMessage::UniquePtr result) { + results[i] = std::move(result); + }); + } + callback(nullptr, std::move(results)); + }; + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + callback(nullptr, h256(12345)); + } + + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + callback(nullptr); + } + + void reset(std::function callback) override {} + + void getCode(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void getABI(std::string_view contract, + std::function callback) override + { + callback(nullptr, {}); + } + void clear() { m_dagHashes.clear(); } + + std::string m_name; + bcos::protocol::BlockNumber m_blockNumber = 0; + std::set m_dagHashes; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test diff --git a/bcos-scheduler/test/mock/MockLedger.h b/bcos-scheduler/test/mock/MockLedger.h new file mode 100644 index 0000000..6aa3a5b --- /dev/null +++ b/bcos-scheduler/test/mock/MockLedger.h @@ -0,0 +1,123 @@ +#pragma once + +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/Protocol.h" +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockLedger : public bcos::ledger::LedgerInterface +{ +public: + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) override + { + BOOST_CHECK_EQUAL(block->blockHeaderConst()->number(), 100); + callback(nullptr); + } + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr, + std::function _callback) override + { + if (!_callback) + { + return; + } + _callback(nullptr); + } + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) override + { + return nullptr; + } + + void asyncGetBlockDataByNumber(protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) override + {} + + void asyncGetBlockNumber( + std::function _onGetBlock) override + { + _onGetBlock(nullptr, 100); + } + + void asyncGetBlockHashByNumber(protocol::BlockNumber _blockNumber, + std::function _onGetBlock) override + { + BOOST_CHECK_EQUAL(_blockNumber, 100); + _onGetBlock(nullptr, h256(110)); + } + + void asyncGetBlockNumberByHash(crypto::HashType const& _blockHash, + std::function _onGetBlock) override + {} + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) override + {} + + void asyncGetTransactionReceiptByHash(crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) override + {} + + void asyncGetTotalTransactionCount(std::function + _callback) override + {} + + void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) override + { + if (_key == ledger::SYSTEM_KEY_TX_COUNT_LIMIT) + { + _onGetConfig(nullptr, "100", 100); + } + else if (_key == ledger::SYSTEM_KEY_CONSENSUS_LEADER_PERIOD) + { + _onGetConfig(nullptr, "300", 100); + } + else if (_key == ledger::SYSTEM_KEY_TX_GAS_LIMIT) + { + _onGetConfig(nullptr, "300000000", 100); + } + else if (_key == ledger::SYSTEM_KEY_COMPATIBILITY_VERSION) + { + _onGetConfig(nullptr, bcos::protocol::RC4_VERSION_STR, 100); + } + else + { + BOOST_FAIL("Unknown query key"); + } + } + + void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) override + { + if (_type == ledger::CONSENSUS_SEALER) + { + _onGetConfig(nullptr, std::make_shared(1)); + } + else if (_type == ledger::CONSENSUS_OBSERVER) + { + _onGetConfig(nullptr, std::make_shared(2)); + } + else + { + BOOST_FAIL("Unknown query type"); + } + } + + void asyncGetNonceList(protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) override + {} +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockLedger2.h b/bcos-scheduler/test/mock/MockLedger2.h new file mode 100644 index 0000000..469ace1 --- /dev/null +++ b/bcos-scheduler/test/mock/MockLedger2.h @@ -0,0 +1,94 @@ +#pragma once + +#include "bcos-framework/ledger/LedgerInterface.h" +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockLedger2 : public bcos::ledger::LedgerInterface +{ +public: + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) + { + auto mutableBlock = std::const_pointer_cast(block); + auto header = mutableBlock->blockHeader(); + auto blockNumberStr = boost::lexical_cast(header->number()); + storage::Entry numberEntry; + numberEntry.importFields({blockNumberStr}); + storage->asyncSetRow(ledger::SYS_CURRENT_STATE, ledger::SYS_KEY_CURRENT_NUMBER, + std::move(numberEntry), [callback = std::move(callback)](auto&& error) { + if (error) + { + BOOST_FAIL("asyncSetRow failed" + error->errorMessage()); + } + callback(nullptr); + }); + // TODO: write receipts and tx count + } + + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr, + std::function _callback) override + { + if (!_callback) + { + return; + } + _callback(nullptr); + } + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) override + { + return nullptr; + } + + void asyncGetBlockDataByNumber(protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) + {} + + void asyncGetBlockNumber(std::function _onGetBlock) {} + + void asyncGetBlockHashByNumber(protocol::BlockNumber _blockNumber, + std::function _onGetBlock) + {} + + void asyncGetBlockNumberByHash(crypto::HashType const& _blockHash, + std::function _onGetBlock) + {} + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) + {} + + void asyncGetTransactionReceiptByHash(crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) + {} + + void asyncGetTotalTransactionCount(std::function + _callback) + {} + + void asyncGetSystemConfigByKey(std::string const& _key, + std::function _onGetConfig) + {} + + void asyncGetNodeListByType(std::string const& _type, + std::function _onGetConfig) + {} + + void asyncGetNonceList(protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) + {} +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockLedger3.h b/bcos-scheduler/test/mock/MockLedger3.h new file mode 100644 index 0000000..d0a52e2 --- /dev/null +++ b/bcos-scheduler/test/mock/MockLedger3.h @@ -0,0 +1,166 @@ +#pragma once + +#include "bcos-framework/bcos-framework/ledger/LedgerConfig.h" +#include "bcos-framework/bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/bcos-framework/protocol/Block.h" +#include "bcos-framework/bcos-framework/protocol/Protocol.h" +#include "bcos-framework/bcos-framework/protocol/Transaction.h" +#include "bcos-framework/bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/bcos-framework/storage/StorageInterface.h" +#include "bcos-ledger/src/libledger/utilities/Common.h" +#include +#include +#include +#include +#include + +using namespace bcos::ledger; + + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockLedger3 : public bcos::ledger::LedgerInterface +{ +public: + MockLedger3() : LedgerInterface() {} + using Ptr = std::shared_ptr; + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr storage, + bcos::protocol::TransactionsPtr _blockTxs, bcos::protocol::Block::ConstPtr block, + std::function callback, bool writeTxsAndReceipts) override + { + auto blockNumber = block->blockHeaderConst()->number(); + SCHEDULER_LOG(DEBUG) << LOG_KV("blockNumber", blockNumber); + if (blockNumber == 1024) + { + callback(BCOS_ERROR_PTR(LedgerError::CollectAsyncCallbackError, "PrewriteBlock error")); + return; + } + callback(nullptr); + } + + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr blockTxs, bcos::protocol::Block::ConstPtr block) override + { + return nullptr; + } + + void asyncGetBlockDataByNumber(protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) override + {} + + void asyncGetBlockNumber( + std::function _onGetBlock) override + { + _onGetBlock(nullptr, commitBlockNumber); + } + + void asyncGetBlockHashByNumber(protocol::BlockNumber _blockNumber, + std::function _onGetBlock) override + { + BOOST_CHECK_EQUAL(_blockNumber, commitBlockNumber); + _onGetBlock(nullptr, h256(commitBlockNumber)); + } + + void asyncGetBlockNumberByHash(crypto::HashType const& _blockHash, + std::function _onGetBlock) override + {} + + void asyncGetBatchTxsByHashList(crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) override + {} + + void asyncGetTransactionReceiptByHash(crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) override + {} + + void asyncGetTotalTransactionCount(std::function + _callback) override + {} + + void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) override + {} + + void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) override + { + if (_key == ledger::SYSTEM_KEY_TX_COUNT_LIMIT) + { + _onGetConfig(nullptr, "100", commitBlockNumber); + } + else if (_key == ledger::SYSTEM_KEY_CONSENSUS_LEADER_PERIOD) + { + _onGetConfig(nullptr, "300", commitBlockNumber); + } + else if (_key == ledger::SYSTEM_KEY_TX_GAS_LIMIT) + { + _onGetConfig(nullptr, "300000000", commitBlockNumber); + } + else if (_key == ledger::SYSTEM_KEY_COMPATIBILITY_VERSION) + { + _onGetConfig(nullptr, bcos::protocol::RC4_VERSION_STR, commitBlockNumber); + } + else + { + BOOST_FAIL("Unknown query key"); + } + } + + void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) override + { + if (_type == ledger::CONSENSUS_SEALER) + { + _onGetConfig(nullptr, std::make_shared(1)); + } + else if (_type == ledger::CONSENSUS_OBSERVER) + { + _onGetConfig(nullptr, std::make_shared(2)); + } + else + { + BOOST_FAIL("Unknown query type"); + } + } + + void asyncGetNonceList(protocol::BlockNumber _startNumber, int64_t _offset, + std::function>)> + _onGetList) override + {} + + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr _blockTxs, + bcos::protocol::Block::ConstPtr block, + std::function _callback) override + {} + + void commitSuccess(bool _success) + { + if (_success) + { + ++commitBlockNumber; + SCHEDULER_LOG(DEBUG) << "---- mockLedger -----" + << LOG_KV("CommitBlock success, commitBlockNumber", + commitBlockNumber); + } + else + { + SCHEDULER_LOG(DEBUG) << "---- mockLedger -----" + << LOG_KV( + "CommitBlock failed, commitBlockNumber", commitBlockNumber); + } + } + +private: + bcos::protocol::BlockNumber commitBlockNumber = 5; +}; + +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockMultiParallelExecutor.h b/bcos-scheduler/test/mock/MockMultiParallelExecutor.h new file mode 100644 index 0000000..3e8d2f4 --- /dev/null +++ b/bcos-scheduler/test/mock/MockMultiParallelExecutor.h @@ -0,0 +1,102 @@ +#pragma once + +#include "MockExecutor.h" +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockMultiParallelExecutor : public MockParallelExecutor +{ +public: + MockMultiParallelExecutor(const std::string& name) : MockParallelExecutor(name) {} + ~MockMultiParallelExecutor() noexcept override { m_taskGroup.wait(); } + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override + { + m_taskGroup.run([this, blockHeader = blockHeader, callback = std::move(callback)]() { + MockParallelExecutor::nextBlockHeader(0, blockHeader, std::move(callback)); + }); + } + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + { + m_taskGroup.run([this, inputRaw = input.release(), callback = std::move(callback)]() { + MockParallelExecutor::executeTransaction( + bcos::protocol::ExecutionMessage::UniquePtr(inputRaw), std::move(callback)); + }); + } + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override + { + m_taskGroup.run([this, inputs = std::move(inputs), callback = std::move(callback)]() { + MockParallelExecutor::dagExecuteTransactions(std::move(inputs), std::move(callback)); + }); + } + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override + {} + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override + { + m_taskGroup.run([this, number = number, callback = std::move(callback)]() { + MockParallelExecutor::getHash(number, std::move(callback)); + }); + } + + /* ----- XA Transaction interface Start ----- */ + + // Write data to storage uncommitted + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + m_taskGroup.run([this, params = params, callback = std::move(callback)]() { + MockParallelExecutor::prepare(params, std::move(callback)); + }); + } + + // Commit uncommitted data + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + m_taskGroup.run([this, params = params, callback = std::move(callback)]() { + MockParallelExecutor::commit(params, std::move(callback)); + }); + } + + // Rollback the changes + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override + { + m_taskGroup.run([this, params = params, callback = std::move(callback)]() { + MockParallelExecutor::rollback(params, std::move(callback)); + }); + } + + /* ----- XA Transaction interface End ----- */ + + // drop all status + void reset(std::function callback) override {} + +private: + tbb::task_group m_taskGroup; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockRPC.h b/bcos-scheduler/test/mock/MockRPC.h new file mode 100644 index 0000000..612774a --- /dev/null +++ b/bcos-scheduler/test/mock/MockRPC.h @@ -0,0 +1,33 @@ +#pragma once + +#include "Common.h" +#include +#include +#include + +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" + +class MockRPC : public bcos::rpc::RPCInterface +{ +public: + void start() override {} + void stop() override {} + + void asyncNotifyBlockNumber(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber, + std::function _callback) override + {} + + void asyncNotifyGroupInfo( + bcos::group::GroupInfo::Ptr _groupInfo, std::function) override + {} + + boost::latch* latch = nullptr; +}; + +#pragma GCC diagnostic pop + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockTransactionalStorage.h b/bcos-scheduler/test/mock/MockTransactionalStorage.h new file mode 100644 index 0000000..d7a4dd7 --- /dev/null +++ b/bcos-scheduler/test/mock/MockTransactionalStorage.h @@ -0,0 +1,91 @@ +#pragma once + +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-table/src/StateStorage.h" + +using namespace bcos::protocol; +namespace bcos::test +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +class MockTransactionalStorage : public bcos::storage::TransactionalStorageInterface +{ +public: + ~MockTransactionalStorage() override = default; + + void asyncGetPrimaryKeys(std::string_view table, + const std::optional& _condition, + std::function)> _callback) noexcept override + { + m_storage->asyncGetPrimaryKeys(table, _condition, std::move(_callback)); + } + + void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) noexcept + override + { + m_storage->asyncGetRow(table, _key, std::move(_callback)); + } + + void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> + _callback) noexcept override + { + // if(table == ledge) + if (table == ledger::SYS_CONFIG) + { + // Return 3 dataes + std::vector> result; + storage::Entry entry1; + entry1.importFields({"100"}); + result.emplace_back(std::move(entry1)); + + storage::Entry entry2; + entry2.importFields({"200"}); + result.emplace_back(std::move(entry2)); + + storage::Entry entry3; + entry3.importFields({"300"}); + result.emplace_back(std::move(entry3)); + + _callback(nullptr, std::move(result)); + return; + } + + m_storage->asyncGetRows(table, keys, std::move(_callback)); + } + + void asyncSetRow(std::string_view table, std::string_view key, storage::Entry entry, + std::function callback) noexcept override + { + m_storage->asyncSetRow(table, key, std::move(entry), std::move(callback)); + } + + void asyncPrepare(const bcos::protocol::TwoPCParams& params, + const storage::TraverseStorageInterface& storage, + std::function callback) noexcept override + { + callback(nullptr, 0, ""); + } + + void asyncCommit(const bcos::protocol::TwoPCParams& params, + std::function callback) noexcept override + { + callback(nullptr, 0); + } + + void asyncRollback(const bcos::protocol::TwoPCParams& params, + std::function callback) noexcept override + { + callback(nullptr); + } + + bcos::storage::StateStorage::Ptr m_storage; +}; +#pragma GCC diagnostic pop +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/mock/MockTxPool1.h b/bcos-scheduler/test/mock/MockTxPool1.h new file mode 100644 index 0000000..0ec8d7e --- /dev/null +++ b/bcos-scheduler/test/mock/MockTxPool1.h @@ -0,0 +1,110 @@ +#pragma once + +#include "bcos-scheduler/src/Common.h" +#include "bcos-tars-protocol/testutil/FakeBlockHeader.h" +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos::crypto; +namespace bcos::test +{ +class MockTxPool1 : public txpool::TxPoolInterface +{ +public: + using Ptr = std::shared_ptr(); + void start() override {} + void stop() override {} + task::Task submitTransaction( + protocol::Transaction::Ptr transaction) override + { + co_return nullptr; + } + + void asyncSealTxs(uint64_t, bcos::txpool::TxsHashSetPtr, + std::function) + override + {} + void asyncMarkTxs(bcos::crypto::HashListPtr, bool, bcos::protocol::BlockNumber, + bcos::crypto::HashType const&, std::function) override + {} + void asyncVerifyBlock(bcos::crypto::PublicPtr, bytesConstRef const&, + std::function) override + {} + void asyncNotifyBlockResult(bcos::protocol::BlockNumber, + bcos::protocol::TransactionSubmitResultsPtr, std::function) override + {} + void asyncNotifyTxsSyncMessage(bcos::Error::Ptr, std::string const&, bcos::crypto::NodeIDPtr, + bytesConstRef, std::function) override + {} + void notifyConsensusNodeList( + bcos::consensus::ConsensusNodeList const&, std::function) override + {} + void notifyObserverNodeList( + bcos::consensus::ConsensusNodeList const&, std::function) override + {} + void asyncGetPendingTransactionSize(std::function) override {} + void asyncResetTxPool(std::function) override {} + + void asyncFillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled) override + { + BOOST_CHECK_GT(_txsHash->size(), 0); + SCHEDULER_LOG(DEBUG) << LOG_KV("txHashes size", _txsHash->size()) + << LOG_KV("map Size", hash2Transaction.size()); + auto transactions = std::make_shared(); + for (auto& hash : *_txsHash) + { + auto it = hash2Transaction.find(hash); + if (it != hash2Transaction.end()) + { + transactions->push_back(it->second); + SCHEDULER_LOG(DEBUG) << LOG_KV("hash", hash) << LOG_KV("tx", it->second); + } + else + { + transactions->push_back(nullptr); + } + } + _onBlockFilled(nullptr, std::move(transactions)); + } + + void notifyConnectedNodes( + const bcos::crypto::NodeIDSet&, std::function)>) override + {} + + // protocol::HashList generateTransaction(std::size_t number) + // { + // auto txHashes = std::make_shared(); + // for (size_t i = 0; i < number; ++i) + // { + // hashImpl = std::make_shared(); + // assert(hashImpl); + // signatureImpl = std::make_shared(); + // assert(signatureImpl); + // cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + // keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + + // // Generate fakeTransaction + // auto tx = fakeTransaction(cryptoSuite, keyPair, "", "", 101, 100001, "1", "1"); + // auto hash = tx->hash(); + // hash2Transaction.emplace(hash, tx); + // txHashes.emplace_back(hash); + // } + // return txHashes; + // } + +public: + std::map hash2Transaction; + bcos::crypto::Hash::Ptr hashImpl; + bcos::crypto::SignatureCrypto::Ptr signatureImpl; + bcos::crypto::CryptoSuite::Ptr cryptoSuite; + bcos::crypto::KeyPairInterface::Ptr keyPair; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testBlockExecutive.cpp b/bcos-scheduler/test/testBlockExecutive.cpp new file mode 100644 index 0000000..cb850f8 --- /dev/null +++ b/bcos-scheduler/test/testBlockExecutive.cpp @@ -0,0 +1,530 @@ +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-executor/test/unittest/mock/MockTxPool.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "bcos-scheduler/src/BlockExecutiveFactory.h" +#include "bcos-scheduler/src/SchedulerImpl.h" +#include "bcos-storage/RocksDBStorage.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageInterface.h" +#include "mock/MockBlockExecutive.h" +#include "mock/MockBlockExecutiveFactory.h" +#include "mock/MockDmcExecutor.h" +#include "mock/MockExecutor.h" +#include "mock/MockExecutorForCall.h" +#include "mock/MockExecutorForCreate.h" +#include "mock/MockLedger3.h" +#include "mock/MockTxPool1.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace rocksdb; +using namespace bcos::ledger; +using namespace bcos::storage; +using namespace bcos::scheduler; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::txpool; +using namespace bcos::test; +using namespace bcostars::protocol; +namespace bcos::test +{ +struct BlockExecutiveFixture +{ + BlockExecutiveFixture() + { + hashImpl = std::make_shared(); + signature = std::make_shared(); + suite = std::make_shared(hashImpl, signature, nullptr); + ledger = std::make_shared(); + executorManager = std::make_shared(); + + // create RocksDBStorage + rocksdb::DB* db; + rocksdb::Options options; + options.create_if_missing = true; + std::string path = "./unittestdb"; + // open DB + rocksdb::Status s = rocksdb::DB::Open(options, path, &db); + storage = std::make_shared(std::unique_ptr(db), nullptr); + + transactionFactory = std::make_shared(suite); + transactionReceiptFactory = + std::make_shared(suite); + blockHeaderFactory = std::make_shared(suite); + executionMessageFactory = std::make_shared(); + + blockFactory = std::make_shared( + suite, blockHeaderFactory, transactionFactory, transactionReceiptFactory); + keyPair = blockFactory->cryptoSuite()->signatureImpl()->generateKeyPair(); + txPool = std::make_shared(); + transactionSubmitResultFactory = + std::make_shared(); + scheduler = std::make_shared(executorManager, ledger, + storage, executionMessageFactory, blockFactory, txPool, transactionSubmitResultFactory, + hashImpl, false, false, false, 0); + } + + ~BlockExecutiveFixture() {} + + bcos::ledger::LedgerInterface::Ptr ledger; + bcos::scheduler::ExecutorManager::Ptr executorManager; + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory; + bcos::protocol::TransactionReceiptFactory::Ptr transactionReceiptFactory; + bcos::protocol::BlockHeaderFactory::Ptr blockHeaderFactory; + bcos::crypto::Hash::Ptr hashImpl; + bcos::scheduler::SchedulerImpl::Ptr scheduler; + bcostars::protocol::TransactionFactoryImpl::Ptr transactionFactory; + bcos::protocol::Block::Ptr block; + bcos::crypto::SignatureCrypto::Ptr signature; + bcos::crypto::CryptoSuite::Ptr suite; + bcos::protocol::BlockFactory::Ptr blockFactory; + std::shared_ptr txPool; + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory; + bcos::scheduler::BlockExecutiveFactory::Ptr blockExecutiveFactory; + bcos::scheduler::BlockExecutive::Ptr blockExecutive; + bcos::crypto::KeyPairInterface::Ptr keyPair; + bcos::storage::RocksDBStorage::Ptr storage = nullptr; +}; + +BOOST_FIXTURE_TEST_SUITE(testBlockExecutive, BlockExecutiveFixture) +BOOST_AUTO_TEST_CASE(prepareTest) +{ + SCHEDULER_LOG(DEBUG) << "----------prepareTest----------------"; + // Generate Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(9999); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + // Add Executor + for (size_t i = 1; i <= 10; ++i) + { + auto executor = + std::make_shared("executor" + boost::lexical_cast(i)); + executorManager->addExecutor("executor" + boost::lexical_cast(i), executor); + } + + // Generate MetaTx + for (size_t j = 0; j < 50; ++j) + { + // Fill txPool + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, + "contract" + boost::lexical_cast((j + 1) % 10), + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + SCHEDULER_LOG(DEBUG) << LOG_KV("hash", hash); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + auto metaTx = std::make_shared( + hash, "contract" + boost::lexical_cast((j + 1) % 10)); + block->appendTransactionMetaData(std::move(metaTx)); + } + SCHEDULER_LOG(DEBUG) << LOG_KV("metaTx size:", block->transactionsMetaDataSize()) + << LOG_KV("transaction size", block->transactionsSize()); + + auto blockExecutive = std::make_shared(block, scheduler.get(), + 0, transactionSubmitResultFactory, false, blockFactory, txPool, 3000000000, false); + blockExecutive->prepare(); + // BOOST_CHECK(); +} + +BOOST_AUTO_TEST_CASE(asyncExecuteTest1) +{ + SCHEDULER_LOG(DEBUG) << "----------asyncExecuteTest----------------"; + // Generate Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(99); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + // Add Executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + // Fill normalTx + for (size_t i = 0; i < 10; i++) + { + std::string inputStr = "hello world!"; + bytes input(inputStr.begin(), inputStr.end()); + auto tx = transactionFactory->createTransaction(20, + "contract" + boost::lexical_cast((i + 1) % 10), input, i, 200, "chainID", + "groupID", 400, keyPair); + // tx->setAttribute(bcos::protocol::Transaction::Attribute::DAG); + block->appendTransaction(tx); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + SCHEDULER_LOG(DEBUG) << LOG_KV("blockExecutive", blockExecutive); + blockExecutive->stop(); + blockExecutive->asyncExecute([&](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(error); }); + blockExecutive->start(); + blockExecutive->asyncExecute([&](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(!error); }); +} +BOOST_AUTO_TEST_CASE(asyncExecuteTest2) +{ + SCHEDULER_LOG(DEBUG) << "----------asyncExecuteTest----------------"; + // Generate Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(1024); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + // Add Executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + // Fill metaTx + for (size_t j = 0; j < 10; j++) + { + std::string inputStr = "Hello world! request"; + + auto tx = blockFactory->transactionFactory()->createTransaction(0, "0xaabbccdd", + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + auto metaTx = std::make_shared( + hash, "contract" + boost::lexical_cast((j + 1) % 10)); + block->appendTransactionMetaData(std::move(metaTx)); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + SCHEDULER_LOG(DEBUG) << LOG_KV("blockExecutive", blockExecutive); + blockExecutive->stop(); + blockExecutive->asyncExecute([&](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(error); }); + blockExecutive->start(); + blockExecutive->asyncExecute([&](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(error); }); +} + +BOOST_AUTO_TEST_CASE(asyncCommitTest1) +{ + SCHEDULER_LOG(DEBUG) << "----------asyncCommitTest1----------------"; + // Generate Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(999); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + // Add Executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + // Fill MetaTx + for (size_t j = 0; j < 10; j++) + { + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, + "contract" + boost::lexical_cast((j + 1) % 10), + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + auto metaTx = std::make_shared( + hash, "contract" + boost::lexical_cast((j + 1) % 10)); + block->appendTransactionMetaData(std::move(metaTx)); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + SCHEDULER_LOG(DEBUG) << LOG_KV("blockExecutive", blockExecutive); + blockExecutive->stop(); + blockExecutive->asyncCommit([&](Error::UniquePtr error) { BOOST_CHECK(error); }); + blockExecutive->start(); + blockExecutive->asyncCommit([&](Error::UniquePtr error) { BOOST_CHECK(!error); }); +} + +BOOST_AUTO_TEST_CASE(asyncCommitTest2) +{ + SCHEDULER_LOG(DEBUG) << "----------asyncCommitTest2----------------"; + // Generate Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(1024); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + // Add Executor + for (size_t i = 1; i <= 10; ++i) + { + auto executor = + std::make_shared("executor" + boost::lexical_cast(i)); + executorManager->addExecutor("executor" + boost::lexical_cast(i), executor); + } + // Fill normalTransaction + for (size_t j = 0; j < 100; j++) + { + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, + "contract" + boost::lexical_cast((j + 1) % 10), + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + SCHEDULER_LOG(DEBUG) << LOG_KV("blockExecutive", blockExecutive); + blockExecutive->stop(); + blockExecutive->asyncCommit([&](Error::UniquePtr error) { + BOOST_CHECK(error); + SCHEDULER_LOG(DEBUG) << "----------asyncCommitTest2 END----------------"; + }); + blockExecutive->start(); + blockExecutive->asyncCommit([&](Error::UniquePtr error) { + BOOST_CHECK(error); + SCHEDULER_LOG(DEBUG) << "----------asyncCommitTest2 END----------------"; + }); +} + +BOOST_AUTO_TEST_CASE(asyncNotify) +{ + // Generate block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(999); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + // Add Executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + // Fill metaTX + for (size_t j = 0; j < 20; ++j) + { + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, + "contract" + boost::lexical_cast((j + 1) % 10), + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + // auto hash = tx->hash(); + // txPool->hash2Transaction.emplace(hash, tx); + // auto metaTx = std::make_shared( + // hash, "contract" + boost::lexical_cast((j + 1) % 10)); + block->appendTransaction(std::move(tx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + + std::function)> + m_txNotifier; + + bcos::protocol::BlockNumber blockNumber = 999; + m_txNotifier = [&](bcos::protocol::BlockNumber blockNumber, + bcos::protocol::TransactionSubmitResultsPtr, + std::function _callback) { + + }; + blockExecutive->asyncNotify( + m_txNotifier, [&](Error::Ptr _error) mutable { BOOST_CHECK(!_error); }); +} + +BOOST_AUTO_TEST_CASE(dagTest) +{ + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + for (size_t j = 0; j < 10; ++j) + { + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, + "contract" + boost::lexical_cast((j + 1) % 10), + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + auto metaTx = std::make_shared( + hash, "contract" + boost::lexical_cast((j + 1) % 10)); + metaTx->setAttribute(bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + blockExecutive->stop(); + blockExecutive->asyncExecute( + [](Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool) { + BOOST_CHECK(error); + SCHEDULER_LOG(DEBUG) << "----------dagTest END----------------"; + }); + blockExecutive->start(); + blockExecutive->asyncExecute( + [](Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool) { + BOOST_CHECK(!error); + SCHEDULER_LOG(DEBUG) << "----------dagTest END----------------"; + }); +} + +BOOST_AUTO_TEST_CASE(dagTest2) +{ + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(1024); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + for (size_t j = 0; j < 10; ++j) + { + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, "0xaabbccdd", + bytes(inputStr.begin(), inputStr.end()), j, 300, "chain", "group", 500, keyPair); + auto hash = tx->hash(); + txPool->hash2Transaction.emplace(hash, tx); + block->appendTransaction(std::move(tx)); + auto metaTx = std::make_shared( + hash, "contract" + boost::lexical_cast((j + 1) % 10)); + metaTx->setAttribute(bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + blockExecutive->stop(); + blockExecutive->asyncExecute( + [](Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool) { + BOOST_CHECK(error); + SCHEDULER_LOG(DEBUG) << "----------dagTest END----------------"; + }); + blockExecutive->start(); + blockExecutive->asyncExecute( + [](Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool) { + BOOST_CHECK(error); + SCHEDULER_LOG(DEBUG) << "----------dagTest END----------------"; + }); +} + +BOOST_AUTO_TEST_CASE(dagByMessage) +{ + SCHEDULER_LOG(DEBUG) << "----------dagByMessageTest----------------"; + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + for (size_t i = 0; i < 10; ++i) + { + std::string inputStr = "hello world!"; + bytes input(inputStr.begin(), inputStr.end()); + auto tx = transactionFactory->createTransaction(20, + "contract" + boost::lexical_cast((i + 1) % 10), input, i, 200, "chainID", + "groupID", 400, keyPair); + tx->setAttribute(bcos::protocol::Transaction::Attribute::DAG); + block->appendTransaction(tx); + } + auto blockExecutive = std::make_shared( + block, scheduler.get(), 0, transactionSubmitResultFactory, false, blockFactory, txPool); + blockExecutive->stop(); + blockExecutive->asyncExecute([](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(error); }); + blockExecutive->start(); + blockExecutive->asyncExecute([](Error::UniquePtr error, protocol::BlockHeader::Ptr header, + bool) { BOOST_CHECK(!error); }); +} + +BOOST_AUTO_TEST_CASE(callTest) +{ + SCHEDULER_LOG(DEBUG) << "----------callTest----------------"; + // Generate block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(999); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + // Generate call transaction + std::string inputStr = "Hello world! request"; + bcos::crypto::KeyPairInterface::Ptr keyPair = + blockFactory->cryptoSuite()->signatureImpl()->generateKeyPair(); + auto tx = blockFactory->transactionFactory()->createTransaction(0, "address_to", + bytes(inputStr.begin(), inputStr.end()), 200, 300, "chain", "group", 500, keyPair); + block->appendTransaction(std::move(tx)); + // Add executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + // Build blockExecutive + auto blockExecutive = std::make_shared(block, scheduler.get(), + 0, transactionSubmitResultFactory, false, blockFactory, txPool, 3000000000, false); + // call + { + bcos::protocol::TransactionReceipt::Ptr receipt; + blockExecutive->asyncCall([&](bcos::Error::Ptr&& error, + bcos::protocol::TransactionReceipt::Ptr&& receiptResponse) { + if (error) + { + BOOST_CHECK(error); + return; + } + BOOST_CHECK(!error); + BOOST_CHECK(receiptResponse); + receipt = std::move(receiptResponse); + }); + } +} +BOOST_AUTO_TEST_CASE(executeWithSystemError) +{ + SCHEDULER_LOG(DEBUG) << "----------executeWithSystemError----------------"; + // Generate block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + auto tx = blockFactory->transactionFactory()->createTransaction( + 3, "0xaabbccdd", {}, u256(1), 500, "chainId", "groupId", utcTime()); + block->appendTransaction(std::move(tx)); + + // Add Executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + auto blockExecutive = std::make_shared(block, scheduler.get(), + 0, transactionSubmitResultFactory, false, blockFactory, txPool, 3000000000, false); + + bool errorFlag = false; + bcos::protocol::BlockHeader::Ptr executedHeader; + blockExecutive->asyncExecute( + [&](Error::UniquePtr error, protocol::BlockHeader::Ptr header, bool) { + if (error) + { + SCHEDULER_LOG(DEBUG) << "I am executeWithSystemError"; + BOOST_CHECK(error); + errorFlag = true; + return; + } + else + { + executedHeader = std::move(header); + } + }); + BOOST_CHECK(errorFlag); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testChecksumAddress.cpp b/bcos-scheduler/test/testChecksumAddress.cpp new file mode 100644 index 0000000..3fe2cdd --- /dev/null +++ b/bcos-scheduler/test/testChecksumAddress.cpp @@ -0,0 +1,73 @@ +#include "ExecutorManager.h" +#include "SchedulerImpl.h" +#include "bcos-crypto/bcos-crypto/ChecksumAddress.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-framework/protocol/TransactionSubmitResult.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "mock/MockExecutor.h" +#include "mock/MockExecutor3.h" +#include "mock/MockExecutorForCall.h" +#include "mock/MockExecutorForCreate.h" +#include "mock/MockExecutorForMessageDAG.h" +#include "mock/MockLedger.h" +#include "mock/MockMultiParallelExecutor.h" +#include "mock/MockRPC.h" +#include "mock/MockTransactionalStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos::test +{ +struct ChecksumFixture +{ + ChecksumFixture() { hashImpl = std::make_shared(); } + + bcos::crypto::Hash::Ptr hashImpl; + + void check(const std::string& addr) + { + auto ret = addr; + toCheckSumAddress(ret, hashImpl); + BOOST_CHECK_EQUAL(addr, ret); + } +}; + +BOOST_FIXTURE_TEST_SUITE(utils, ChecksumFixture) + +BOOST_AUTO_TEST_CASE(checksumAddress) +{ + check("5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"); + check("fB6916095ca1df60bB79Ce92cE3Ea74c37c5d359"); + check("dbF03B407c01E7cD3CBea99509d93f8DDDC8C6FB"); + check("D1220A0cf47c7B9Be7A2E6BA89F429762e7b9aDb"); + check("fB6916095ca1df60bB79Ce92cE3Ea74c37c5d359"); + check("3C589CB0Be25f651b0563e052DEa63d3844C33e6"); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testCommitBlock.cpp b/bcos-scheduler/test/testCommitBlock.cpp new file mode 100644 index 0000000..67c1867 --- /dev/null +++ b/bcos-scheduler/test/testCommitBlock.cpp @@ -0,0 +1,168 @@ +#include "BlockExecutive.h" +#include "ExecutorManager.h" +#include "SchedulerImpl.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "mock/MockExecutor.h" +#include "mock/MockExecutor3.h" +#include "mock/MockLedger2.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::storage; +using namespace bcos::ledger; +using namespace std; + +namespace bcos::test +{ +struct BlockExecutiveFixture +{ + BlockExecutiveFixture() + { + hashImpl = std::make_shared(); + signature = std::make_shared(); + suite = std::make_shared(hashImpl, signature, nullptr); + + ledger = std::make_shared(); + executorManager = std::make_shared(); + + // create RocksDBStorage + rocksdb::DB* db; + rocksdb::Options options; + options.create_if_missing = true; + rocksdb::Status s = rocksdb::DB::Open(options, path, &db); + BOOST_CHECK_EQUAL(s.ok(), true); + storage = std::make_shared(std::unique_ptr(db)); + + transactionFactory = std::make_shared(suite); + transactionReceiptFactory = + std::make_shared(suite); + blockHeaderFactory = std::make_shared(suite); + executionMessageFactory = std::make_shared(); + + blockFactory = std::make_shared( + suite, blockHeaderFactory, transactionFactory, transactionReceiptFactory); + + scheduler = std::make_shared( + executorManager, ledger, storage, executionMessageFactory, blockFactory, hashImpl); + + std::promise> createTablePromise; + storage->asyncCreateTable(SYS_CURRENT_STATE, "value", + [&createTablePromise](auto&& error, std::optional
&& table) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + createTablePromise.set_value(table); + }); + auto createTableResult = createTablePromise.get_future().get(); + BOOST_CHECK_EQUAL(createTableResult.has_value(), true); + } + + ~BlockExecutiveFixture() + { + filesystem::path p(path); + + if (filesystem::exists(p)) + { + filesystem::remove_all(p); + } + } + + ledger::LedgerInterface::Ptr ledger; + scheduler::ExecutorManager::Ptr executorManager; + protocol::ExecutionMessageFactory::Ptr executionMessageFactory; + protocol::TransactionReceiptFactory::Ptr transactionReceiptFactory; + protocol::BlockHeaderFactory::Ptr blockHeaderFactory; + bcos::crypto::Hash::Ptr hashImpl; + scheduler::SchedulerImpl::Ptr scheduler; + + bcostars::protocol::TransactionFactoryImpl::Ptr transactionFactory; + bcos::crypto::SignatureCrypto::Ptr signature; + bcos::crypto::CryptoSuite::Ptr suite; + bcostars::protocol::BlockFactoryImpl::Ptr blockFactory; + + std::string path = "./unittestdb"; + RocksDBStorage::Ptr storage = nullptr; +}; + +BOOST_FIXTURE_TEST_SUITE(BlockExecutive, BlockExecutiveFixture) + +BOOST_AUTO_TEST_CASE(commitBlock) +{ + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + for (size_t i = 0; i < 10; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract1"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + for (size_t i = 10; i < 20; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract2"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + for (size_t i = 20; i < 30; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract3"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + bcos::protocol::BlockHeader::Ptr executedHeader; + + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader = std::move(header); + }); + + scheduler->commitBlock( + executedHeader, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + BOOST_CHECK(!error); + // BOOST_CHECK(config); + (void)config; + }); + promise
prom; + storage->asyncOpenTable(SYS_CURRENT_STATE, [&](auto&& error, auto&& table) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + if (table) + { + prom.set_value(table.value()); + } + }); + auto table = prom.get_future().get(); + auto entry = table.getRow(SYS_KEY_CURRENT_NUMBER); + BOOST_CHECK_EQUAL(entry.has_value(), true); + auto blockNumber = entry->getField("value"); + BOOST_CHECK_EQUAL(blockNumber, "100"); +} + +BOOST_AUTO_TEST_CASE(rollback) {} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testDmcExecutor.cpp b/bcos-scheduler/test/testDmcExecutor.cpp new file mode 100644 index 0000000..4fd0e41 --- /dev/null +++ b/bcos-scheduler/test/testDmcExecutor.cpp @@ -0,0 +1,373 @@ +#include "../src/Executive.h" +#include "bcos-executor/src/CallParameters.h" +#include "bcos-executor/src/executive/BlockContext.h" +#include "bcos-executor/src/executive/ExecutiveState.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/executor/NativeExecutionMessage.h" +#include "bcos-scheduler/src/DmcExecutor.h" +#include "bcos-scheduler/src/DmcStepRecorder.h" +#include "bcos-scheduler/src/GraphKeyLocks.h" +#include "bcos-tars-protocol/testutil/FakeBlock.h" +#include "bcos-tars-protocol/testutil/FakeBlockHeader.h" +#include "mock/MockDmcExecutor.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::scheduler; +using namespace bcos::crypto; + +namespace bcos::test +{ +struct DmcExecutorFixture +{ + DmcExecutorFixture() + { + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + blockFactory = createBlockFactory(cryptoSuite); + executor1 = std::make_shared("executor1"); + keyLocks = std::make_shared(); + dmcRecorder = std::make_shared(); + } + bcos::scheduler::DmcExecutor::Ptr dmcExecutor; + std::shared_ptr executor1; + bcos::scheduler::GraphKeyLocks::Ptr keyLocks; + bcos::scheduler::DmcStepRecorder::Ptr dmcRecorder; + CryptoSuite::Ptr cryptoSuite = nullptr; + bcos::protocol::BlockFactory::Ptr blockFactory; +}; + +BOOST_FIXTURE_TEST_SUITE(TestDmcExecutor, DmcExecutorFixture) + +struct DmcFlagStruct +{ + using Ptr = std::shared_ptr; + bool schedulerOutFlag = false; + bool callFlag = false; + bool DmcFlag = false; + bool switchFlag = false; + bool finishFlag = false; + bool lockedFlag = false; + std::atomic_size_t round = 0; + std::atomic_size_t paused = 0; + std::atomic_size_t finished = 0; + std::atomic_size_t error = 0; +}; + +bcos::protocol::ExecutionMessage::UniquePtr createMessage( + int contextID, int seq, int type, std::string toAddress, bool staticCall) +{ + auto message = std::make_unique(); + message->setStaticCall(staticCall); + message->setType(bcos::protocol::ExecutionMessage::Type(type)); + message->setContextID(contextID); + message->setSeq(seq); + message->setFrom("0xeeffaabb"); + message->setTo(toAddress); + return message; +} + +BOOST_AUTO_TEST_CASE(stateSwitchTest) +{ + DmcFlagStruct dmcFlagStruct; + + auto hashImpl = std::make_shared(); + auto block = blockFactory->createBlock(); + auto blockHeader = blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(1); + blockHeader->calculateHash(*hashImpl); + block->setBlockHeader(blockHeader); + // block = fakeBlock(cryptoSuite, blockFactory, 1, 1, 1); + auto dmcExecutor = std::make_shared( + "DmcExecutor1", "0xaabbccdd", block, executor1, keyLocks, hashImpl, dmcRecorder); + + dmcExecutor->setSchedulerOutHandler( + [this, &dmcFlagStruct](bcos::scheduler::ExecutiveState::Ptr executiveState) { + dmcFlagStruct.schedulerOutFlag = true; + auto to = std::string(executiveState->message->to()); + auto hashImpl = std::make_shared(); + auto block = blockFactory->createBlock(); + auto blockHeader = blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(2); + blockHeader->calculateHash(*hashImpl); + block->setBlockHeader(blockHeader); + auto dmcExecutor2 = std::make_shared( + "DmcExecutor2", to, block, executor1, keyLocks, hashImpl, dmcRecorder); + dmcExecutor2->scheduleIn(executiveState); + }); + + dmcExecutor->setOnTxFinishedHandler( + [&dmcFlagStruct](bcos::protocol::ExecutionMessage::UniquePtr output) { + auto outputBytes = output->data(); + std::string outputStr((char*)outputBytes.data(), outputBytes.size()); + SCHEDULER_LOG(DEBUG) << LOG_KV("output data is ", outputStr); + if (outputStr == "Call Finished!") + { + dmcFlagStruct.callFlag = true; + dmcFlagStruct.finishFlag = true; + } + else if (outputStr == "DMCExecuteTransaction Finish!") + { + dmcFlagStruct.DmcFlag = true; + dmcFlagStruct.finishFlag = true; + } + else if (outputStr == "DMCExecuteTransaction Finish, I am keyLock!") + { + dmcFlagStruct.lockedFlag = true; + } + else + { + dmcFlagStruct.finishFlag = true; + } + }); + + dmcExecutor->setOnNeedSwitchEventHandler([&dmcFlagStruct]() { + SCHEDULER_LOG(DEBUG) << "Transaction Perform Error , Need Switch."; + dmcFlagStruct.switchFlag = true; + }); + + + auto executorCallback = [&dmcFlagStruct]( + bcos::Error::UniquePtr error, DmcExecutor::Status status) { + if (error || status == DmcExecutor::Status::ERROR) + { + ++dmcFlagStruct.error; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go error", dmcFlagStruct.error) + << LOG_KV("total is ", dmcFlagStruct.round); + } + if (status == DmcExecutor::Status::PAUSED || status == DmcExecutor::Status::NEED_PREPARE) + { + ++dmcFlagStruct.paused; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go paused or need prepare", + dmcFlagStruct.paused) + << LOG_KV("total is ", dmcFlagStruct.round); + } + if (status == DmcExecutor::Status::FINISHED) + { + ++dmcFlagStruct.finished; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go Finished", dmcFlagStruct.finished) + << LOG_KV("total is ", dmcFlagStruct.round); + } + }; + + + // TXHASH = 0, // Received an new transaction from scheduler + // MESSAGE, // Send/Receive an external call to/from another contract + // FINISHED, // Send a finish to another contract + // KEY_LOCK, // Send a wait key lock to scheduler, or release key lock + // SEND_BACK, // Send a dag refuse to scheduler + // REVERT, // Send/Receive a revert to/from previous external call + + // TXHASH DMCEXECUTE + auto message = createMessage(0, 0, 0, "0xaabbccdd", false); + dmcExecutor->submit(std::move(message), false); + SCHEDULER_LOG(DEBUG) << "prepare begin"; + + + // MESSAGE + auto message1 = createMessage(1, 0, 1, "0xaabbccdd", false); + dmcExecutor->submit(std::move(message1), false); + + // SEND_BACK DMC_EXECUTE (TXHASH) + auto message2 = createMessage(2, 0, 4, "0xaabbccdd", false); + dmcExecutor->submit(std::move(message2), false); + + + // SEND_BACK (MESSAGE) + auto message3 = createMessage(3, 0, 4, "", false); + message3->setTransactionHash(h256(123)); + bcos::u256 salt(787667543453); + message3->setCreateSalt(salt); + dmcExecutor->submit(std::move(message3), false); + + // NEED_SCHEDULE_OUT + auto message4 = createMessage(3, 0, 2, "0xccddeeff", false); + dmcExecutor->submit(std::move(message4), false); + + auto needScheduler_out = dmcExecutor->prepare(); + BOOST_CHECK(needScheduler_out); + dmcExecutor->go(executorCallback); + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") << LOG_KV("round is ", dmcFlagStruct.round) + << LOG_KV("finished is ", dmcFlagStruct.finished) + << LOG_KV("paused is ", dmcFlagStruct.paused) + << LOG_KV("error is ", dmcFlagStruct.error); + dmcExecutor->prepare(); + // dmcExecutor->go(executorCallback); + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") << LOG_KV("round is ", dmcFlagStruct.round) + << LOG_KV("finished is ", dmcFlagStruct.finished) + << LOG_KV("paused is ", dmcFlagStruct.paused) + << LOG_KV("error is ", dmcFlagStruct.error); + + BOOST_CHECK(dmcFlagStruct.DmcFlag && dmcFlagStruct.finishFlag); + BOOST_CHECK(dmcFlagStruct.schedulerOutFlag); + BOOST_CHECK_EQUAL(dmcFlagStruct.paused, 1); + BOOST_CHECK_EQUAL(dmcFlagStruct.round, 1); + BOOST_CHECK(!dmcFlagStruct.callFlag); + dmcFlagStruct.DmcFlag = false; + dmcFlagStruct.finishFlag = false; + dmcFlagStruct.schedulerOutFlag = false; + + + // call + auto callMessage = createMessage(4, 0, 1, "0xaabbccdd", true); + dmcExecutor->submit(std::move(callMessage), false); + dmcExecutor->prepare(); + dmcExecutor->go(executorCallback); + dmcExecutor->prepare(); + + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") << LOG_KV("total is ", dmcFlagStruct.round) + << LOG_KV("finished is ", dmcFlagStruct.finished) + << LOG_KV("paused is ", dmcFlagStruct.paused) + << LOG_KV("error is ", dmcFlagStruct.error); + BOOST_CHECK(dmcFlagStruct.callFlag && dmcFlagStruct.finishFlag); + BOOST_CHECK(!dmcFlagStruct.DmcFlag && !dmcFlagStruct.schedulerOutFlag); + BOOST_CHECK(!dmcFlagStruct.lockedFlag && !dmcFlagStruct.switchFlag); +} + +BOOST_AUTO_TEST_CASE(keyLocksTest) +{ + DmcFlagStruct dmcFlagStruct; + + auto hashImpl = std::make_shared(); + auto block = blockFactory->createBlock(); + auto blockHeader = blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(1); + blockHeader->calculateHash(*hashImpl); + block->setBlockHeader(blockHeader); + // block = fakeBlock(cryptoSuite, blockFactory, 1, 1, 1); + auto dmcExecutor = std::make_shared( + "DmcExecutor1", "0xaabbccdd", block, executor1, keyLocks, hashImpl, dmcRecorder); + + dmcExecutor->setSchedulerOutHandler( + [this, &dmcFlagStruct](bcos::scheduler::ExecutiveState::Ptr executiveState) { + dmcFlagStruct.schedulerOutFlag = true; + auto to = std::string(executiveState->message->to()); + auto hashImpl = std::make_shared(); + auto block = blockFactory->createBlock(); + auto blockHeader = blockFactory->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(2); + blockHeader->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + block->setBlockHeader(blockHeader); + auto dmcExecutor2 = std::make_shared( + "DmcExecutor2", to, block, executor1, keyLocks, hashImpl, dmcRecorder); + dmcExecutor2->scheduleIn(executiveState); + }); + + dmcExecutor->setOnTxFinishedHandler( + [&dmcFlagStruct](bcos::protocol::ExecutionMessage::UniquePtr output) { + auto outputBytes = output->data(); + std::string outputStr((char*)outputBytes.data(), outputBytes.size()); + SCHEDULER_LOG(DEBUG) << LOG_KV("output data is ", outputStr); + if (outputStr == "Call Finished!") + { + dmcFlagStruct.callFlag = true; + dmcFlagStruct.finishFlag = true; + } + else if (outputStr == "DMCExecuteTransaction Finish!") + { + dmcFlagStruct.DmcFlag = true; + dmcFlagStruct.finishFlag = true; + } + else if (outputStr == "DMCExecuteTransaction Finish, I am keyLock!") + { + dmcFlagStruct.lockedFlag = true; + } + else + { + dmcFlagStruct.finishFlag = true; + } + }); + + dmcExecutor->setOnNeedSwitchEventHandler([&dmcFlagStruct]() { + SCHEDULER_LOG(DEBUG) << "Transaction Perform Error , Need Switch."; + dmcFlagStruct.switchFlag = true; + }); + + auto executorCallback = [&dmcFlagStruct]( + bcos::Error::UniquePtr error, DmcExecutor::Status status) { + if (error || status == DmcExecutor::Status::ERROR) + { + ++dmcFlagStruct.error; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go error", dmcFlagStruct.error) + << LOG_KV("total is ", dmcFlagStruct.round); + } + if (status == DmcExecutor::Status::PAUSED || status == DmcExecutor::Status::NEED_PREPARE) + { + ++dmcFlagStruct.paused; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go paused or need prepare", + dmcFlagStruct.paused) + << LOG_KV("total is ", dmcFlagStruct.round); + } + if (status == DmcExecutor::Status::FINISHED) + { + ++dmcFlagStruct.finished; + ++dmcFlagStruct.round; + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") + << LOG_KV("dmcExecutor go Finished", dmcFlagStruct.finished) + << LOG_KV("total is ", dmcFlagStruct.round); + } + }; + + + // TXHASH = 0, // Received an new transaction from scheduler + // MESSAGE, // Send/Receive an external call to/from another contract + // FINISHED, // Send a finish to another contract + // KEY_LOCK, // Send a wait key lock to scheduler, or release key lock + // SEND_BACK, // Send a dag refuse to scheduler + // REVERT, // Send/Receive a revert to/from previous external call + + // TXHASH DMCEXECUTE + auto lockMessage1 = createMessage(0, 0, 3, "0xaabbccdd", false); + lockMessage1->setKeyLocks({"key1"}); + lockMessage1->setKeyLockAcquired("key2"); + dmcExecutor->submit(std::move(lockMessage1), false); + auto lockMessage2 = createMessage(1, 0, 3, "0xaabbccdd", false); + lockMessage2->setKeyLocks({"key2"}); + lockMessage2->setKeyLockAcquired("key3"); + dmcExecutor->submit(std::move(lockMessage2), false); + auto lockMessage3 = createMessage(2, 0, 3, "0xaabbccdd", false); + lockMessage3->setKeyLocks({"key3"}); + lockMessage3->setKeyLockAcquired("key1"); + dmcExecutor->submit(std::move(lockMessage3), false); + + dmcExecutor->prepare(); + auto locked = dmcExecutor->unlockPrepare(); + auto found = dmcExecutor->detectLockAndRevert(); + BOOST_CHECK(found && locked); + SCHEDULER_LOG(DEBUG) << "no need_prepare, found deadlock and revert"; + dmcExecutor->releaseOutdatedLock(); + dmcExecutor->go(executorCallback); + // dmcExecutor->prepare(); + SCHEDULER_LOG(DEBUG) << LOG_BADGE("DmcExecutor") << LOG_KV("round is ", dmcFlagStruct.round) + << LOG_KV("finished is ", dmcFlagStruct.finished) + << LOG_KV("paused is ", dmcFlagStruct.paused) + << LOG_KV("error is ", dmcFlagStruct.error); + // BOOST_CHECK(dmcFlagStruct.DmcFlag && dmcFlagStruct.finishFlag); + BOOST_CHECK_EQUAL(dmcFlagStruct.paused, 1); + BOOST_CHECK_EQUAL(dmcFlagStruct.round, 1); + // dmcExecutor->go(executorCallback); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-scheduler/test/testDmcStepRecorder.cpp b/bcos-scheduler/test/testDmcStepRecorder.cpp new file mode 100644 index 0000000..1f249d6 --- /dev/null +++ b/bcos-scheduler/test/testDmcStepRecorder.cpp @@ -0,0 +1,91 @@ +#include "DmcStepRecorder.h" +#include +#include +#include + + +using namespace bcos::scheduler; + +namespace bcos::test +{ +struct DmcStepRecorderFixture +{ + DmcStepRecorderFixture() + { + auto start = utcTime(); + for (size_t id = 0; utcTime() - start < m_generateCntLimit; id++) + { + auto message = std::make_unique(); + + message->setStaticCall(bool(id % 2)); + message->setType(protocol::ExecutionMessage::Type(id % 6)); + message->setContextID(id); + message->setSeq(id * id * ~id % (id + 1)); + message->setOrigin("aabbccdd"); + message->setFrom("eeffaabb"); + message->setTo("ccddeeff"); + m_sendMessages.push_back(std::move(message)); + } + + start = utcTime(); + for (size_t id = 0; utcTime() - start < m_generateCntLimit; id++) + { + auto message = std::make_unique(); + + message->setStaticCall(bool(id % 2)); + message->setType(protocol::ExecutionMessage::Type(id % 6)); + message->setContextID(id); + message->setSeq(id * id * ~id % (id + 1)); + message->setOrigin("aabbccdd"); + message->setFrom("eeffaabb"); + message->setTo("ccddeeff"); + m_rcvMessages.emplace_back(std::move(message)); + } + } + + uint64_t m_generateCntLimit = 500; // 500ms + std::vector m_sendMessages; + std::vector m_rcvMessages; + std::string m_address = "aacc0011"; +}; + +BOOST_FIXTURE_TEST_SUITE(TestDmcStepRecorder, DmcStepRecorderFixture) + +BOOST_AUTO_TEST_CASE(Test) +{ + size_t totalLoop = 10; + std::cout << "[0] Dmc recorder test start for:" << m_sendMessages.size() << "-" + << m_rcvMessages.size() << std::endl; + auto start = utcTime(); + DmcStepRecorder::Ptr recorder = std::make_shared(); + for (size_t i = 0; i < totalLoop; i++) + { + recorder->recordSends(m_address, m_sendMessages); + recorder->recordReceives(m_address, m_rcvMessages); + recorder->nextDmcRound(); + } + std::string res1 = recorder->dumpAndClearChecksum(); + std::cout << "[1]:" << res1 << " Use " << (utcTime() - start) << "ms from start" << std::endl; + + start = utcTime(); + for (size_t i = 0; i < totalLoop; i++) + { + for (size_t id = 0; id < m_sendMessages.size(); id++) + { + recorder->recordSend(m_address, id, m_sendMessages[id]); + } + + for (size_t id = 0; id < m_rcvMessages.size(); id++) + { + recorder->recordReceive(m_address, id, m_rcvMessages[id]); + } + recorder->nextDmcRound(); + } + std::string res2 = recorder->dumpAndClearChecksum(); + + std::cout << "[2]:" << res2 << " Use " << (utcTime() - start) << "ms from last" << std::endl; + + BOOST_CHECK(res1 == res2); +} +} // namespace bcos::test +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testExecutivePool.cpp b/bcos-scheduler/test/testExecutivePool.cpp new file mode 100644 index 0000000..1f4a6a8 --- /dev/null +++ b/bcos-scheduler/test/testExecutivePool.cpp @@ -0,0 +1,249 @@ +#include "Executive.h" +#include "ExecutivePool.h" +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace bcos::scheduler; + +namespace bcos::test +{ +struct ExecutivePoolFixture +{ + ExecutivePoolFixture(){}; + + scheduler::ExecutivePool m_executivePool; + scheduler::ExecutivePool::MessageHint m_messageHint; +}; +BOOST_FIXTURE_TEST_SUITE(TestExecutivePool, ExecutivePoolFixture) + +BOOST_AUTO_TEST_CASE(addAndgetTest1) +{ + ExecutivePool::Ptr executivePool = std::make_shared(); + BOOST_CHECK(executivePool->empty(ExecutivePool::MessageHint::NEED_PREPARE)); + BOOST_CHECK(executivePool->empty()); + for (int64_t i = 0; i < 50; ++i) + { + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + } + int64_t count = 0; + while (executivePool->get(count) != nullptr) + { + ++count; + } + BOOST_CHECK(count == 50); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_PREPARE)); +} + +BOOST_AUTO_TEST_CASE(addAndgetTest2) +{ + ExecutivePool::Ptr executivePool = std::make_shared(); + BOOST_CHECK(executivePool->empty(ExecutivePool::MessageHint::NEED_PREPARE)); + BOOST_CHECK(executivePool->empty()); + for (int64_t i = 0; i < 10; ++i) + { + auto message = std::make_unique(); + message->setStaticCall(bool(i % 2)); + message->setType(protocol::ExecutionMessage::Type(i % 6)); + message->setContextID(i); + message->setSeq(i * i * ~i % (i + 1)); + message->setOrigin("aabbccdd"); + message->setFrom("eeffaabb"); + message->setTo("ccddeeff"); + ExecutiveState::Ptr executiveState = + std::make_shared(i, std::move(message), false); + executivePool->add(i, executiveState); + } + + + auto message = std::make_unique(); + message->setStaticCall(true); + message->setType(protocol::ExecutionMessage::Type(6)); + message->setContextID(9); + message->setSeq(1000); + message->setOrigin("aabbccdd"); + message->setFrom("cccccccc"); + message->setTo("dddd"); + auto executiveState = + std::make_shared(9, std::move(message), true); + bool success = executivePool->add(9, executiveState); + BOOST_CHECK(!success); + auto state = executivePool->get(9); + SCHEDULER_LOG(DEBUG) << state->message->to(); + BOOST_CHECK(std::string(state->message->to()) == "ccddeeff"); +} + +BOOST_AUTO_TEST_CASE(refreshTest) +{ + ExecutivePool::Ptr executivePool = std::make_shared(); + BOOST_CHECK(executivePool->empty()); + for (int64_t i = 1; i <= 30; ++i) + { + executivePool->markAs(i, ExecutivePool::MessageHint::ALL); + // executivePool->markAs(ExecutivePool::MessageHint::NEED_PREPARE, i); + if (i % 3 == 0) + { + executivePool->markAs(i, ExecutivePool::MessageHint::NEED_SCHEDULE_OUT); + } + if (i % 3 == 1) + { + executivePool->markAs(i, ExecutivePool::MessageHint::LOCKED); + executivePool->markAs(i, ExecutivePool::MessageHint::NEED_SEND); + } + if (i % 3 == 2) + { + executivePool->markAs(i, ExecutivePool::MessageHint::END); + } + } + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_SCHEDULE_OUT)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::END)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::LOCKED)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_SEND)); + executivePool->refresh(); + BOOST_CHECK(executivePool->empty(ExecutivePool::MessageHint::NEED_SCHEDULE_OUT)); + BOOST_CHECK(executivePool->empty(ExecutivePool::MessageHint::END)); + BOOST_CHECK(executivePool->empty(ExecutivePool::MessageHint::LOCKED) && + !executivePool->empty(ExecutivePool::MessageHint::NEED_SEND)); +} + +BOOST_AUTO_TEST_CASE(forEachTest) +{ + ExecutivePool::Ptr executivePool = std::make_shared(); + std::set needPrepare; + std::set needSchedule; + std::set needRemove; + for (int64_t i = 1; i <= 10; ++i) + { + // generate between random number + auto id = (rand() % 10000) + 1; + BCOS_LOG(DEBUG) << LOG_BADGE("scheduel_test") << LOG_KV("needPrepare", needPrepare.size()) + << LOG_KV("ID", id); + needPrepare.insert(id); + + needPrepare.insert(id + 5); + needSchedule.insert(id + 5); + + needPrepare.insert(id + 10); + needRemove.insert(id + 10); + } + + for (auto i : needPrepare) + { + BCOS_LOG(DEBUG) << LOG_BADGE("scheduel_test") << LOG_KV("needPrepare", needPrepare.size()) + << LOG_KV("ID", i); + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + executivePool->markAs(i, ExecutivePool::MessageHint::NEED_PREPARE); + executivePool->markAs(i, ExecutivePool::MessageHint::ALL); + } + for (auto i : needSchedule) + { + BCOS_LOG(DEBUG) << LOG_BADGE("scheduel_test") << LOG_KV("needSchedule", needSchedule.size()) + << LOG_KV("ID", i); + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + executivePool->markAs(i, ExecutivePool::MessageHint::NEED_SCHEDULE_OUT); + } + for (auto i : needRemove) + { + BCOS_LOG(DEBUG) << LOG_BADGE("scheduel_test") << LOG_KV("needRemove", needRemove.size()) + << LOG_KV("ID", i); + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + executivePool->markAs(i, ExecutivePool::MessageHint::END); + } + + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::ALL)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_PREPARE)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::END)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_SCHEDULE_OUT)); + + executivePool->forEach(ExecutivePool::MessageHint::NEED_PREPARE, + [&needPrepare](int64_t contextID, ExecutiveState::Ptr) { + // BCOS_LOG(DEBUG) << LOG_BADGE("scheduel_test") << LOG_KV("setlen", needPrepare.size()) + // << LOG_KV("contextID", contextID); + auto iter = needPrepare.find(contextID); + needPrepare.erase(iter); + return true; + }); + + executivePool->forEach(ExecutivePool::MessageHint::NEED_SCHEDULE_OUT, + [&needSchedule](int64_t contextID, ExecutiveState::Ptr) { + auto iter = needSchedule.find(contextID); + needSchedule.erase(iter); + return true; + }); + + executivePool->forEach( + ExecutivePool::MessageHint::END, [&needRemove](int64_t contextID, ExecutiveState::Ptr) { + auto iter = needRemove.find(contextID); + needRemove.erase(iter); + return true; + }); + + executivePool->forEach( + ExecutivePool::MessageHint::ALL, [](int64_t, ExecutiveState::Ptr executiveState) { + // do nothing + BCOS_LOG(DEBUG) << " 1.PendingMsg: \t\t [--] " << executiveState->toString(); + return true; + }); + BOOST_CHECK(needPrepare.empty()); + BOOST_CHECK(needSchedule.empty()); + BOOST_CHECK(needRemove.empty()); +} + +BOOST_AUTO_TEST_CASE(forEachAndClearTest) +{ + ExecutivePool::Ptr executivePool = std::make_shared(); + std::set needSend; + std::set locked; + for (int64_t i = 1; i <= 10; ++i) + { + auto id = (rand() % 10000) + 1; + needSend.insert(id); + locked.insert(id + 1); + } + for (auto i : needSend) + { + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + executivePool->markAs(i, ExecutivePool::MessageHint::NEED_SEND); + } + for (auto i : locked) + { + auto executiveState = std::make_shared(i, nullptr, false); + executivePool->add(i, executiveState); + executivePool->markAs(i, ExecutivePool::MessageHint::LOCKED); + } + + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::NEED_SEND)); + BOOST_CHECK(!executivePool->empty(ExecutivePool::MessageHint::LOCKED)); + + executivePool->forEachAndClear( + ExecutivePool::MessageHint::NEED_SEND, [&needSend](int64_t contextID, ExecutiveState::Ptr) { + auto iter = needSend.find(contextID); + needSend.erase(iter); + // BCOS_LOG(DEBUG) << LOG_BADGE("SCHEDULE") << LOG_DESC("set length is") + // << LOG_KV("needSend", needSend.size()); + + return true; + }); + executivePool->forEachAndClear( + ExecutivePool::MessageHint::LOCKED, [&locked](int64_t contextID, ExecutiveState::Ptr) { + auto iter = locked.find(contextID); + locked.erase(iter); + return true; + }); + BOOST_CHECK(needSend.empty()); + BOOST_CHECK(locked.empty()); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-scheduler/test/testExecutorManager.cpp b/bcos-scheduler/test/testExecutorManager.cpp new file mode 100644 index 0000000..0a10c24 --- /dev/null +++ b/bcos-scheduler/test/testExecutorManager.cpp @@ -0,0 +1,178 @@ +#include "ExecutorManager.h" +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "mock/MockExecutor.h" +#include +#include +#include + +namespace bcos::test +{ +struct ExecutorManagerFixture +{ + ExecutorManagerFixture() { executorManager = std::make_shared(); } + + scheduler::ExecutorManager::Ptr executorManager; +}; + +BOOST_FIXTURE_TEST_SUITE(TestExecutorManager, ExecutorManagerFixture) + +BOOST_AUTO_TEST_CASE(addExecutor) +{ + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("1", std::make_shared("1"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("2", std::make_shared("2"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("3", std::make_shared("3"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("3", std::make_shared("3"))); +} + +BOOST_AUTO_TEST_CASE(dispatch) +{ + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("1", std::make_shared("1"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("2", std::make_shared("2"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("3", std::make_shared("3"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("4", std::make_shared("4"))); + + std::vector contracts; + for (int i = 0; i < 100; ++i) + { + contracts.push_back(boost::lexical_cast(i)); + } + + std::vector executors; + for (auto& it : contracts) + { + executors.push_back(executorManager->dispatchExecutor(it)); + } + BOOST_CHECK_EQUAL(executors.size(), 100); + + std::map executor2count{ + std::pair("1", 0), std::pair("2", 0), std::pair("3", 0), std::pair("4", 0)}; + for (auto it = executors.begin(); it != executors.end(); ++it) + { + ++executor2count[std::dynamic_pointer_cast(*it)->name()]; + } + + BOOST_CHECK_EQUAL(executor2count["1"], 25); + BOOST_CHECK_EQUAL(executor2count["2"], 25); + BOOST_CHECK_EQUAL(executor2count["3"], 25); + BOOST_CHECK_EQUAL(executor2count["4"], 25); + + std::vector executors2; + for (auto& it : contracts) + { + executors2.push_back(executorManager->dispatchExecutor(it)); + } + BOOST_CHECK_EQUAL_COLLECTIONS( + executors.begin(), executors.end(), executors2.begin(), executors2.end()); + + std::vector contracts2; + for (int i = 0; i < 40; ++i) + { + contracts2.push_back(boost::lexical_cast(i + 1000)); + } + + contracts2.insert(contracts2.end(), contracts.begin(), contracts.end()); + + std::vector executors3; + for (auto& it : contracts2) + { + executors3.push_back(executorManager->dispatchExecutor(it)); + } + std::map executor2count2{ + std::pair("1", 0), std::pair("2", 0), std::pair("3", 0), std::pair("4", 0)}; + for (auto it = executors3.begin(); it != executors3.end(); ++it) + { + ++executor2count2[std::dynamic_pointer_cast(*it)->name()]; + } + + BOOST_CHECK_EQUAL(executor2count2["1"], 35); + BOOST_CHECK_EQUAL(executor2count2["2"], 35); + BOOST_CHECK_EQUAL(executor2count2["3"], 35); + BOOST_CHECK_EQUAL(executor2count2["4"], 35); + + std::vector executors4; + for (auto& it : contracts2) + { + executors4.push_back(executorManager->dispatchExecutor(it)); + } + + std::map contract2executor; + for (size_t i = 0; i < contracts2.size(); ++i) + { + contract2executor.insert({contracts2[i], executors4[i]}); + } + + BOOST_CHECK_EQUAL_COLLECTIONS( + executors3.begin(), executors3.end(), executors4.begin(), executors4.end()); + + // record executor3's contract + std::set contractsInExecutor3; + for (size_t i = 0; i < executors4.size(); ++i) + { + auto executor = executors4[i]; + if (std::dynamic_pointer_cast(executor)->name() == "3") + { + contractsInExecutor3.insert(contracts2[i]); + } + } + + BOOST_CHECK_EQUAL(contractsInExecutor3.size(), 35); + + BOOST_CHECK_NO_THROW(executorManager->removeExecutor("3")); + + std::vector contracts3; + for (int i = 0; i < 10; ++i) + { + contracts2.push_back(boost::lexical_cast(i + 2000)); + } + + contracts2.insert(contracts2.end(), contracts3.begin(), contracts3.end()); + + std::vector executors5; + for (auto& it : contracts2) + { + executors5.push_back(executorManager->dispatchExecutor(it)); + } + BOOST_CHECK_EQUAL(executors5.size(), 150); + + size_t oldContract = 0; + for (size_t i = 0; i < contracts2.size(); ++i) + { + auto contract = contracts2[i]; + if (boost::lexical_cast(contract) < 2000 && + contractsInExecutor3.find(contract) == contractsInExecutor3.end()) + { + ++oldContract; + + BOOST_CHECK_EQUAL(executors5[i], contract2executor[contract]); + } + } + + BOOST_CHECK_EQUAL(oldContract, 150 - 35 - 10); // exclude new contract and executor3's contract +} + +BOOST_AUTO_TEST_CASE(remove) +{ + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("1", std::make_shared("1"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("2", std::make_shared("2"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("3", std::make_shared("3"))); + BOOST_CHECK_NO_THROW( + executorManager->addExecutor("3", std::make_shared("3"))); + + BOOST_CHECK_NO_THROW(executorManager->removeExecutor("2")); + BOOST_CHECK_THROW(executorManager->removeExecutor("10"), bcos::Exception); + BOOST_CHECK_THROW(executorManager->removeExecutor("2"), bcos::Exception); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testKeyLocks.cpp b/bcos-scheduler/test/testKeyLocks.cpp new file mode 100644 index 0000000..86c4404 --- /dev/null +++ b/bcos-scheduler/test/testKeyLocks.cpp @@ -0,0 +1,114 @@ +#include "GraphKeyLocks.h" +#include "mock/MockExecutor.h" +#include +#include +#include +#include +#include + +namespace bcos::test +{ +struct KeyLocksFixture +{ + KeyLocksFixture() {} + + scheduler::GraphKeyLocks keyLocks; +}; + +BOOST_FIXTURE_TEST_SUITE(TestKeyLocks, KeyLocksFixture) + +BOOST_AUTO_TEST_CASE(acquireKeyLock) +{ + // Test same contextID + std::string to = "contract1"; + std::string key = "key100"; + int64_t contextID = 1000; + + for (int64_t seq = 0; seq < 10; ++seq) + { + BOOST_CHECK(keyLocks.acquireKeyLock(to, key, contextID, seq)); + } + + // Test another contextID + BOOST_CHECK(!keyLocks.acquireKeyLock(to, key, 1001, 0)); + + // Release 5 times + for (int64_t seq = 0; seq < 5; ++seq) + { + keyLocks.releaseKeyLocks(contextID, seq); + } + + // Test another contextID + BOOST_CHECK(!keyLocks.acquireKeyLock(to, key, 1001, 0)); + + // Release all + for (int64_t seq = 5; seq < 10; ++seq) + { + keyLocks.releaseKeyLocks(contextID, seq); + } + + BOOST_CHECK(keyLocks.acquireKeyLock(to, key, 1001, 0)); +} + +BOOST_AUTO_TEST_CASE(getKeyLocksNotHoldingByContext) +{ + std::string to = "contract1"; + std::string keyPrefix = "key"; + + for (size_t i = 0; i < 100; ++i) + { + keyLocks.acquireKeyLock(to, keyPrefix + boost::lexical_cast(i), 100, 10); + } + + for (size_t i = 100; i < 200; ++i) + { + keyLocks.acquireKeyLock(to, keyPrefix + boost::lexical_cast(i), 101, 20); + } + + auto keys = keyLocks.getKeyLocksNotHoldingByContext(to, 101); + + BOOST_CHECK_EQUAL(keys.size(), 100); + std::vector matchKeys; + for (size_t i = 0; i < 100; ++i) + { + std::string matchKey = keyPrefix + boost::lexical_cast(i); + matchKeys.emplace_back(std::move(matchKey)); + } + std::sort(matchKeys.begin(), matchKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS(keys.begin(), keys.end(), matchKeys.begin(), matchKeys.end()); +} + +BOOST_AUTO_TEST_CASE(deadLock) +{ + std::string to = "contract1"; + std::string key1 = "key1"; + std::string key2 = "key2"; + + // No dead lock + BOOST_CHECK(keyLocks.acquireKeyLock(to, key1, 1000, 1)); + BOOST_CHECK(keyLocks.acquireKeyLock(to, key2, 1001, 1)); + + BOOST_CHECK(!keyLocks.acquireKeyLock(to, key2, 1000, 2)); + BOOST_CHECK(!keyLocks.acquireKeyLock(to, key2, 1000, 4)); + + BOOST_CHECK(!keyLocks.detectDeadLock(1000)); + BOOST_CHECK(!keyLocks.detectDeadLock(1000)); + BOOST_CHECK(!keyLocks.detectDeadLock(1001)); + + // Add more duplicate edge + BOOST_CHECK(keyLocks.acquireKeyLock(to, key1, 1000, 3)); + BOOST_CHECK(keyLocks.acquireKeyLock(to, key2, 1001, 3)); + + BOOST_CHECK(!keyLocks.detectDeadLock(1000)); + BOOST_CHECK(!keyLocks.detectDeadLock(1001)); + + // Add a dead lock + BOOST_CHECK(!keyLocks.acquireKeyLock(to, key1, 1001, 2)); + + BOOST_CHECK(keyLocks.detectDeadLock(1000)); + BOOST_CHECK(keyLocks.detectDeadLock(1001)); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testScheduler.cpp b/bcos-scheduler/test/testScheduler.cpp new file mode 100644 index 0000000..48d4190 --- /dev/null +++ b/bcos-scheduler/test/testScheduler.cpp @@ -0,0 +1,592 @@ +#include "ExecutorManager.h" +#include "SchedulerImpl.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-framework/protocol/TransactionSubmitResult.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "mock/MockDeadLockExecutor.h" +#include "mock/MockExecutor.h" +#include "mock/MockExecutor3.h" +#include "mock/MockExecutorForCall.h" +#include "mock/MockExecutorForCreate.h" +#include "mock/MockExecutorForMessageDAG.h" +#include "mock/MockLedger.h" +#include "mock/MockMultiParallelExecutor.h" +#include "mock/MockRPC.h" +#include "mock/MockTransactionalStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos::test +{ +struct SchedulerFixture +{ + SchedulerFixture() {} +}; + +/* // TODO: update this unittest to support batch txs sending logic +BOOST_FIXTURE_TEST_SUITE(Scheduler, SchedulerFixture) + +BOOST_AUTO_TEST_CASE(executeBlock) +{ + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + for (size_t i = 0; i < 10; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract1"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + for (size_t i = 10; i < 20; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract2"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + for (size_t i = 20; i < 30; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract3"); + block->appendTransactionMetaData(std::move(metaTx)); + } + + std::promise executedHeaderPromise; + + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeaderPromise.set_value(std::move(header)); + }); + + bcos::protocol::BlockHeader::Ptr executedHeader = executedHeaderPromise.get_future().get(); + + BOOST_CHECK(executedHeader); + BOOST_CHECK_NE(executedHeader->stateRoot(), h256()); + + bcos::protocol::BlockNumber notifyBlockNumber = 0; + scheduler->registerBlockNumberReceiver( + [&](protocol::BlockNumber number) { notifyBlockNumber = number; }); + + std::promise committedPromise; + scheduler->commitBlock( + executedHeader, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + BOOST_CHECK(!error); + BOOST_CHECK(config); + BOOST_CHECK_EQUAL(config->blockTxCountLimit(), 100); + BOOST_CHECK_EQUAL(config->leaderSwitchPeriod(), 300); + BOOST_CHECK_EQUAL(config->consensusNodeList().size(), 1); + BOOST_CHECK_EQUAL(config->observerNodeList().size(), 2); + BOOST_CHECK_EQUAL(config->hash().hex(), h256(110).hex()); + committedPromise.set_value(true); + }); + + bool committed = committedPromise.get_future().get(); + BOOST_CHECK(committed); + BOOST_CHECK_EQUAL(notifyBlockNumber, 100); +} + +BOOST_AUTO_TEST_CASE(parallelExecuteBlock) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + for (size_t i = 0; i < 100; ++i) + { + for (size_t j = 0; j < 8; ++j) + { + auto metaTx = std::make_shared( + h256((i + 1) * (j + 1)), "contract" + boost::lexical_cast(j)); + // metaTx->setSource("i am a source!"); + block->appendTransactionMetaData(std::move(metaTx)); + } + } + + std::promise executedHeader; + + scheduler->executeBlock( + block, false, [&](bcos::Error::Ptr error, bcos::protocol::BlockHeader::Ptr header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); + + bcos::protocol::BlockNumber notifyBlockNumber = 0; + scheduler->registerBlockNumberReceiver( + [&](protocol::BlockNumber number) { notifyBlockNumber = number; }); + std::promise commitPromise; + scheduler->commitBlock( + header, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + BOOST_CHECK(!error); + BOOST_CHECK(config); + BOOST_CHECK_EQUAL(config->blockTxCountLimit(), 100); + BOOST_CHECK_EQUAL(config->leaderSwitchPeriod(), 300); + BOOST_CHECK_EQUAL(config->consensusNodeList().size(), 1); + BOOST_CHECK_EQUAL(config->observerNodeList().size(), 2); + BOOST_CHECK_EQUAL(config->hash().hex(), h256(110).hex()); + + commitPromise.set_value(); + }); + + commitPromise.get_future().get(); + + BOOST_CHECK_EQUAL(notifyBlockNumber, 100); +} + +BOOST_AUTO_TEST_CASE(keyLocks) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + for (size_t i = 0; i < 1000; ++i) + { + for (size_t j = 0; j < 8; ++j) + { + auto metaTx = std::make_shared( + h256(i * j), "contract" + boost::lexical_cast(j)); + block->appendTransactionMetaData(std::move(metaTx)); + } + } +} + +BOOST_AUTO_TEST_CASE(call) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + std::string inputStr = "Hello world! request"; + auto tx = blockFactory->transactionFactory()->createTransaction(0, "address_to", + bytes(inputStr.begin(), inputStr.end()), 200, 300, "chain", "group", 500, keyPair); + + auto empty_to = blockFactory->transactionFactory()->createTransaction( + 0, "", bytes(inputStr.begin(), inputStr.end()), 200, 300, "chain", "group", 500, keyPair); + + // call + { + bcos::protocol::TransactionReceipt::Ptr receipt; + + scheduler->call(tx, + [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + BOOST_CHECK(!error); + BOOST_CHECK(receiptResponse); + + receipt = std::move(receiptResponse); + }); + + BOOST_CHECK_EQUAL(receipt->blockNumber(), 0); + BOOST_CHECK_EQUAL(receipt->status(), 0); + BOOST_CHECK_GT(receipt->gasUsed(), 0); + auto output = receipt->output(); + + std::string outputStr((char*)output.data(), output.size()); + BOOST_CHECK_EQUAL(outputStr, "Hello world! response"); + } + + // call empty to + { + scheduler->call(empty_to, + [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + BOOST_CHECK(error); + BOOST_CHECK(error->errorMessage() == "Call address is empty"); + BOOST_CHECK(receiptResponse == nullptr); + }); + } +} + +BOOST_AUTO_TEST_CASE(registerExecutor) +{ + auto executor = std::make_shared("executor1"); + auto executor2 = std::make_shared("executor2"); + + scheduler->registerExecutor( + "executor1", executor, [&](Error::Ptr&& error) { BOOST_CHECK(!error); }); + scheduler->registerExecutor( + "executor2", executor2, [&](Error::Ptr&& error) { BOOST_CHECK(!error); }); +} + +BOOST_AUTO_TEST_CASE(createContract) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + auto metaTx = std::make_shared( + [inner = bcostars::TransactionMetaData()]() mutable { return &inner; }); + metaTx->setHash(h256(1)); + metaTx->setTo(""); + block->appendTransactionMetaData(std::move(metaTx)); + + bcos::protocol::BlockHeader::Ptr executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader = std::move(header); + }); + + BOOST_CHECK(executedHeader); + BOOST_CHECK_NE(executedHeader->stateRoot(), h256()); +} + +BOOST_AUTO_TEST_CASE(dag) +{ + // Add executor + executorManager->addExecutor("executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + for (size_t i = 0; i < 1000; ++i) + { + auto metaTx = std::make_shared( + h256(i + 1), "contract" + boost::lexical_cast((i + 1) % 10)); + metaTx->setAttribute(metaTx->attribute() | bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + } + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); +} + +BOOST_AUTO_TEST_CASE(dagByMessage) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(100); + + bcos::crypto::KeyPairInterface::Ptr keyPair = + blockFactory->cryptoSuite()->signatureImpl()->generateKeyPair(); + for (size_t i = 0; i < 1000; ++i) + { + bytes input; + auto tx = transactionFactory->createTransaction(20, + "contract" + boost::lexical_cast((i + 1) % 10), input, 100, 200, "chainID", + "groupID", 400, keyPair); + tx->setAttribute(bcos::protocol::Transaction::Attribute::DAG); + block->appendTransaction(tx); + } + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); +} + +BOOST_AUTO_TEST_CASE(executedBlock) +{ + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + size_t count = 10; + std::vector hashes; + for (size_t blockNumber = 0; blockNumber < count; ++blockNumber) + { + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + + for (size_t i = 0; i < 1000; ++i) + { + auto metaTx = std::make_shared( + h256(i + 1), "contract" + boost::lexical_cast((i + 1) % 10)); + metaTx->setAttribute(metaTx->attribute() | bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + } + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); + + SCHEDULER_LOG(TRACE) << "StateRoot: " << header->stateRoot(); + + hashes.emplace_back(header->stateRoot()); + + executor->clear(); + } + + for (size_t blockNumber = 0; blockNumber < count; ++blockNumber) + { + // Get the executed block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(header->stateRoot().hex(), hashes[blockNumber].hex()); + }); + } +} + +BOOST_AUTO_TEST_CASE(testDeploySysContract) +{ + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + protocol::BlockNumber blockNumber = 0; + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + + auto tx = blockFactory->transactionFactory()->createTransaction( + 3, precompiled::AUTH_COMMITTEE_ADDRESS, {}, u256(1), 500, "chainId", "groupId", utcTime()); + block->appendTransaction(std::move(tx)); + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + // callback(BCOS_ERROR_UNIQUE_PTR(-1, "deploy sys contract!"), nullptr); + BOOST_CHECK(error == nullptr); + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); +} + +BOOST_AUTO_TEST_CASE(testCallSysContract) +{ + // Add executor + executorManager->addExecutor( + "executor1", std::make_shared("executor1")); + + auto tx = blockFactory->transactionFactory()->createTransaction( + 3, precompiled::AUTH_COMMITTEE_ADDRESS, {}, u256(1), 500, "chainId", "groupId", utcTime()); + + bcos::protocol::TransactionReceipt::Ptr receipt; + + scheduler->call( + tx, [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + BOOST_CHECK(!error); + BOOST_CHECK(receiptResponse); + + receipt = std::move(receiptResponse); + }); + BOOST_CHECK_EQUAL(receipt->blockNumber(), 0); + BOOST_CHECK_EQUAL(receipt->status(), 0); + BOOST_CHECK_GT(receipt->gasUsed(), 0); +} + +BOOST_AUTO_TEST_CASE(checkCommittedBlock) +{ + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + auto blockNumber = 100lu; + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + + for (size_t i = 0; i < 1000; ++i) + { + auto metaTx = std::make_shared( + h256(i + 1), "contract" + boost::lexical_cast((i + 1) % 10)); + metaTx->setAttribute(metaTx->attribute() | bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + } + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(header); + + executedHeader.set_value(std::move(header)); + }); + + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); + + SCHEDULER_LOG(TRACE) << "StateRoot: " << header->stateRoot(); + auto commitHeader = blockHeaderFactory->createBlockHeader(); + commitHeader->setNumber(blockNumber); + + scheduler->commitBlock(commitHeader, + [](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&&) { BOOST_CHECK(!error); }); + + // Try execute a same block + auto newHeader = blockHeaderFactory->createBlockHeader(); + newHeader->setNumber(blockNumber); + block->setBlockHeader(newHeader); + + scheduler->executeBlock( + block, false, [](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&&, bool) { + BOOST_CHECK(error); + BOOST_CHECK_EQUAL( + error->errorCode(), bcos::scheduler::SchedulerError::InvalidBlockNumber); + BOOST_CHECK_GT(error->errorMessage().size(), 0); + }); +} + +BOOST_AUTO_TEST_CASE(executeWithSystemError) +{ + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + auto blockNumber = 100lu; + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(blockNumber); + + for (size_t i = 0; i < 10; ++i) + { + auto metaTx = std::make_shared( + h256(i + 1), "contract" + boost::lexical_cast((i + 1) % 10)); + // metaTx->setAttribute(metaTx->attribute() | bcos::protocol::Transaction::Attribute::DAG); + block->appendTransactionMetaData(std::move(metaTx)); + } + + // Add an error transaction + auto metaTx = std::make_shared( + h256(10086), "contract" + boost::lexical_cast(10086)); + block->appendTransactionMetaData(std::move(metaTx)); + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + BOOST_CHECK(error); + BOOST_CHECK_EQUAL(error->errorCode(), bcos::scheduler::SchedulerError::UnknownError); + BOOST_CHECK_GT(error->errorMessage().size(), 0); + BOOST_CHECK(!header); + + executedHeader.set_value(); + }); + + executedHeader.get_future().get(); +} + +BOOST_AUTO_TEST_CASE(getCode) +{ + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + scheduler->getCode("hello world!", [](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(code.empty()); + }); +} + +BOOST_AUTO_TEST_CASE(executeWithDeadLock) +{ + auto executor = std::make_shared("executor10"); + executorManager->addExecutor("executor10", executor); + + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(900); + for (size_t i = 0; i < 2; ++i) + { + auto metaTx = std::make_shared( + h256(i + 1), "contract" + boost::lexical_cast(i + 1)); + block->appendTransactionMetaData(std::move(metaTx)); + } + + scheduler->executeBlock(block, false, + [](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& blockHeader, bool) { + BOOST_CHECK(!error); + BOOST_CHECK(blockHeader); + }); +} + +BOOST_AUTO_TEST_SUITE_END() + */ +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-scheduler/test/testSchedulerImpl.cpp b/bcos-scheduler/test/testSchedulerImpl.cpp new file mode 100644 index 0000000..a2e1551 --- /dev/null +++ b/bcos-scheduler/test/testSchedulerImpl.cpp @@ -0,0 +1,616 @@ +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-executor/test/unittest/mock/MockTxPool.h" +#include "bcos-framework/executor/ExecutionMessage.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/BlockHeaderFactory.h" +#include "bcos-framework/protocol/TransactionReceiptFactory.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-protocol/bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include "bcos-scheduler/src/BlockExecutive.h" +#include "bcos-scheduler/src/SchedulerImpl.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageInterface.h" +#include "mock/MockBlockExecutive.h" +#include "mock/MockBlockExecutiveFactory.h" +#include "mock/MockDmcExecutor.h" +#include "mock/MockExecutor.h" +#include "mock/MockExecutorForCall.h" +#include "mock/MockExecutorForCreate.h" +#include "mock/MockLedger3.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace std; +using namespace bcos; +using namespace rocksdb; +using namespace bcos::ledger; +using namespace bcos::storage; +using namespace bcos::scheduler; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::txpool; +using namespace bcostars::protocol; + +namespace bcos::test +{ +struct schedulerImplFixture +{ + schedulerImplFixture() + { + hashImpl = std::make_shared(); + signature = std::make_shared(); + suite = std::make_shared(hashImpl, signature, nullptr); + ledger = std::make_shared(); + executorManager = std::make_shared(); + + // create RocksDBStorage + rocksdb::DB* db; + rocksdb::Options options; + options.create_if_missing = true; + std::string path = "./unittestdb"; + // open DB + rocksdb::Status s = rocksdb::DB::Open(options, path, &db); + storage = std::make_shared(std::unique_ptr(db), nullptr); + + transactionFactory = std::make_shared(suite); + transactionReceiptFactory = + std::make_shared(suite); + blockHeaderFactory = std::make_shared(suite); + executionMessageFactory = std::make_shared(); + + blockFactory = std::make_shared( + suite, blockHeaderFactory, transactionFactory, transactionReceiptFactory); + + txPool = std::make_shared(); + transactionSubmitResultFactory = + std::make_shared(); + + auto scheduler = std::make_shared(executorManager, ledger, + storage, executionMessageFactory, blockFactory, txPool, transactionSubmitResultFactory, + hashImpl, false, false, false, 0); + auto blockExecutiveFactory = std::make_shared(false); + scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + }; + + ~schedulerImplFixture() {} + bcos::test::MockLedger3::Ptr ledger; + bcos::scheduler::ExecutorManager::Ptr executorManager; + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory; + bcos::protocol::TransactionReceiptFactory::Ptr transactionReceiptFactory; + bcos::protocol::BlockHeaderFactory::Ptr blockHeaderFactory; + bcos::crypto::Hash::Ptr hashImpl; + bcos::scheduler::SchedulerImpl::Ptr scheduler; + bcostars::protocol::TransactionFactoryImpl::Ptr transactionFactory; + bcos::crypto::SignatureCrypto::Ptr signature; + bcos::crypto::CryptoSuite::Ptr suite; + bcostars::protocol::BlockFactoryImpl::Ptr blockFactory; + bcos::txpool::TxPoolInterface::Ptr txPool; + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory; + bcos::scheduler::BlockExecutiveFactory::Ptr blockExecutiveFactory; + std::string path = "./unittestdb"; + bcos::storage::RocksDBStorage::Ptr storage = nullptr; +}; + +BOOST_FIXTURE_TEST_SUITE(testSchedulerImpl, schedulerImplFixture) + +BOOST_AUTO_TEST_CASE(executeBlockTest) +{ + auto scheduler = std::make_shared(executorManager, ledger, + storage, executionMessageFactory, blockFactory, txPool, transactionSubmitResultFactory, + hashImpl, false, false, false, 0); + auto blockExecutiveFactory = std::make_shared(false); + scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + bool executeBlockError = false; + + // execute BlockNumber=7 (storage = 5) block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(7); + for (size_t j = 0; j < 10; ++j) + { + auto metaTx = + std::make_shared(h256(j), "contract1"); + block->appendTransactionMetaData(std::move(metaTx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + // executeBlock + bcos::protocol::BlockHeader::Ptr blockHeader; + + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockHash", block) + << LOG_KV("BlockHeaderNumber", block->blockHeader()->number()); + + scheduler->executeBlock( + block, false, [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + if (error) + { + executeBlockError = true; + BOOST_CHECK(error); + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + blockHeader = std::move(header); + } + }); + BOOST_CHECK(executeBlockError); + executeBlockError = false; + + // first time executeBlock, add m_block cache + for (size_t i = 5; i < 10; ++i) + { + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(i); + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockNumber", i); + for (size_t j = 0; j < 10; ++j) + { + auto metaTx = + std::make_shared(h256(j), "contract1"); + block->appendTransactionMetaData(std::move(metaTx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + // executeBlock + bcos::protocol::BlockHeader::Ptr blockHeader; + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockHash", block) + << LOG_KV("BlockHeaderNumber", block->blockHeader()->number()); + + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockHeader", header); + if (error) + { + BOOST_CHECK(error); + executeBlockError = true; + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + blockHeader = std::move(header); + } + }); + if (!executeBlockError) + { + BOOST_CHECK(blockHeader); + } + executeBlockError = false; + blockHeader = nullptr; + } + // secondTime executeBlock + for (size_t i = 5; i < 8; i++) + { + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(i); + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockNumber", i); + for (size_t j = 0; j < 10; ++j) + { + auto metaTx = + std::make_shared(h256(j), "contract2"); + block->appendTransactionMetaData(std::move(metaTx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + bcos::protocol::BlockHeader::Ptr executeHeader1; + // execute olderBlock whenQueueFront whenInQueue + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + if (error) + { + executeBlockError = true; + BOOST_CHECK(error); + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + executeHeader1 = std::move(header); + } + }); + if (!executeBlockError) + { + BOOST_CHECK(executeHeader1); + } + executeBlockError = false; + executeHeader1 = nullptr; + } + + auto block11 = blockFactory->createBlock(); + block11->blockHeader()->setNumber(11); + for (size_t j = 0; j < 10; ++j) + { + auto metaTx = + std::make_shared(h256(j), "contract2"); + block11->appendTransactionMetaData(std::move(metaTx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + bcos::protocol::BlockHeader::Ptr executeHeader11; + // requestBlock = backNumber + 1 + scheduler->executeBlock(block11, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockHeader", header); + if (error) + { + BOOST_CHECK(error); + executeBlockError = true; + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + executeHeader11 = std::move(header); + } + }); + BOOST_CHECK(executeBlockError); +} +BOOST_AUTO_TEST_CASE(commitBlock) +{ + auto scheduler = std::make_shared(executorManager, ledger, + storage, executionMessageFactory, blockFactory, txPool, transactionSubmitResultFactory, + hashImpl, false, false, false, 0); + auto blockExecutiveFactory = std::make_shared(false); + scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + + // executeBlock, Fill m_block + bool executeBlockError = false; + for (size_t i = 5; i < 10; ++i) + { + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(i); + for (size_t j = 0; j < 20; ++j) + { + auto metaTx = + std::make_shared(h256(j), "contract2"); + block->appendTransactionMetaData(std::move(metaTx)); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + // executeBlock + bcos::protocol::BlockHeader::Ptr blockHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + SCHEDULER_LOG(DEBUG) << LOG_KV("BlockHeader", header); + if (error) + { + executeBlockError = true; + BOOST_CHECK(error); + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + blockHeader = std::move(header); + } + }); + if (!executeBlockError) + { + BOOST_CHECK(blockHeader); + } + executeBlockError = false; + blockHeader = nullptr; + } + // commit + bool commitBlockError = false; + size_t errorNumber = 0; + size_t queueFrontNumber = 0; + ledger->commitSuccess(true); + ledger->commitSuccess(true); // the committed block number is 7 + for (size_t i = 7; i < 11; ++i) + { + auto blockHeader = blockHeaderFactory->createBlockHeader(); + blockHeader->setNumber(i); + blockHeader->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + std::promise committedPromise; + scheduler->commitBlock( + blockHeader, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + if (error) + { + SCHEDULER_LOG(ERROR) << "CommitBlock error"; + commitBlockError = true; + ++errorNumber; + committedPromise.set_value(false); + } + else + { + ++queueFrontNumber; + BOOST_CHECK(config); + BOOST_CHECK_EQUAL(config->blockTxCountLimit(), 100); + BOOST_CHECK_EQUAL(config->leaderSwitchPeriod(), 300); + BOOST_CHECK_EQUAL(config->consensusNodeList().size(), 1); + BOOST_CHECK_EQUAL(config->observerNodeList().size(), 2); + BOOST_CHECK_EQUAL(config->hash().hex(), h256(6).hex()); + committedPromise.set_value(true); + } + }); + if (commitBlockError) + { + commitBlockError = false; + } + } + BOOST_CHECK_EQUAL(errorNumber, 4); + BOOST_CHECK_EQUAL(queueFrontNumber, 0); + BOOST_CHECK(!commitBlockError); + SCHEDULER_LOG(DEBUG) << LOG_KV("errorNumber", errorNumber) + << LOG_KV("queueFrontNumber", queueFrontNumber); + + // commit blockNumber <= 5 + auto blockHeader0 = blockHeaderFactory->createBlockHeader(); + blockHeader0->setNumber(0); + blockHeader0->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + std::promise committedPromise; + scheduler->commitBlock( + blockHeader0, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + if (error) + { + SCHEDULER_LOG(ERROR) << "CommitBlock error"; + commitBlockError = true; + ++errorNumber; + committedPromise.set_value(false); + } + else + { + ++queueFrontNumber; + BOOST_CHECK(config); + BOOST_CHECK_EQUAL(config->blockTxCountLimit(), 100); + BOOST_CHECK_EQUAL(config->leaderSwitchPeriod(), 300); + BOOST_CHECK_EQUAL(config->consensusNodeList().size(), 1); + BOOST_CHECK_EQUAL(config->observerNodeList().size(), 2); + BOOST_CHECK_EQUAL(config->hash().hex(), h256(5).hex()); + committedPromise.set_value(true); + } + }); + SCHEDULER_LOG(DEBUG) << LOG_KV("errorNumber", errorNumber) + << LOG_KV("queueFrontNumber", queueFrontNumber); +} + +BOOST_AUTO_TEST_CASE(handlerBlockTest) +{ + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + auto blockExecutiveFactory = std::make_shared(false); + scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + + // create Block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(6); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + for (size_t i = 0; i < 10; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract1"); + block->appendTransactionMetaData(std::move(metaTx)); + } + for (size_t i = 10; i < 20; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract2"); + block->appendTransactionMetaData(std::move(metaTx)); + } + for (size_t i = 20; i < 30; ++i) + { + auto metaTx = + std::make_shared(h256(i), "contract3"); + block->appendTransactionMetaData(std::move(metaTx)); + } + // preExecuteBlock + scheduler->preExecuteBlock( + block, false, [&](bcos::Error::Ptr&& error) { BOOST_CHECK(!error); }); + + + // executeBlock + bool executeBlockError = false; + bcos::protocol::BlockHeader::Ptr blockHeader; + scheduler->executeBlock( + block, false, [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr header, bool) { + if (error) + { + executeBlockError = true; + BOOST_CHECK(error); + SCHEDULER_LOG(ERROR) << "ExecuteBlock callback error"; + } + else + { + BOOST_CHECK(!error); + BOOST_CHECK(header); + blockHeader = std::move(header); + } + }); + + BOOST_CHECK(blockHeader); + + + // commitBlock + bool commitBlockError = false; + scheduler->commitBlock( + blockHeader, [&](bcos::Error::Ptr&& error, bcos::ledger::LedgerConfig::Ptr&& config) { + if (error) + { + SCHEDULER_LOG(ERROR) << "CommitBlock error"; + commitBlockError = true; + } + else + { + BOOST_CHECK(config); + BOOST_CHECK_EQUAL(config->blockTxCountLimit(), 100); + BOOST_CHECK_EQUAL(config->leaderSwitchPeriod(), 300); + BOOST_CHECK_EQUAL(config->consensusNodeList().size(), 1); + BOOST_CHECK_EQUAL(config->observerNodeList().size(), 2); + BOOST_CHECK_EQUAL(config->hash().hex(), h256(5).hex()); + } + }); + + BOOST_CHECK(!commitBlockError); +} + + +BOOST_AUTO_TEST_CASE(getCode) +{ + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + auto blockExecutiveFactory = std::make_shared(false); + scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + + // Add executor + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + SCHEDULER_LOG(DEBUG) << "----- add Executor ------"; + scheduler->getCode("hello world!", [](Error::Ptr error, bcos::bytes code) { + BOOST_CHECK(!error); + BOOST_CHECK(code.empty()); + }); +} + +BOOST_AUTO_TEST_CASE(call) +{ + // Add executor + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + // auto blockExecutiveFactory = std::make_shared(false); + // scheduler->setBlockExecutiveFactory(blockExecutiveFactory); + auto executor = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor); + + std::string inputStr = "Hello world! request"; + bcos::crypto::KeyPairInterface::Ptr keyPair = + blockFactory->cryptoSuite()->signatureImpl()->generateKeyPair(); + auto tx = blockFactory->transactionFactory()->createTransaction(0, "address_to", + bytes(inputStr.begin(), inputStr.end()), 200, 300, "chain", "group", 500, keyPair); + + auto empty_to = blockFactory->transactionFactory()->createTransaction( + 0, "", bytes(inputStr.begin(), inputStr.end()), 200, 300, "chain", "group", 500, keyPair); + + // call + { + bcos::protocol::TransactionReceipt::Ptr receipt; + + scheduler->call(tx, + [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + auto blockNumber = receiptResponse->blockNumber(); + std::cout << "blockNumber" << blockNumber << std::endl; + BOOST_CHECK(!error); + BOOST_CHECK(receiptResponse); + + receipt = std::move(receiptResponse); + }); + + BOOST_CHECK_NE(receipt->blockNumber(), 0); + BOOST_CHECK_EQUAL(receipt->status(), 0); + BOOST_CHECK_GT(receipt->gasUsed(), 0); + auto output = receipt->output(); + + std::string outputStr((char*)output.data(), output.size()); + SCHEDULER_LOG(DEBUG) << LOG_KV("outputStr", outputStr); + BOOST_CHECK_EQUAL(outputStr, "Hello world! response"); + } + + // call empty to + { + scheduler->call(empty_to, + [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + BOOST_CHECK(error); + BOOST_CHECK(error->errorMessage() == "Call address is empty"); + BOOST_CHECK(receiptResponse == nullptr); + }); + } +} + +BOOST_AUTO_TEST_CASE(registerExecutor) +{ + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + auto executor1 = std::make_shared("executor1"); + auto executor2 = std::make_shared("executor2"); + scheduler->registerExecutor( + "executor1", executor1, [&](Error::Ptr&& error) { BOOST_CHECK(!error); }); + scheduler->registerExecutor( + "executor2", executor2, [&](Error::Ptr&& error) { BOOST_CHECK(!error); }); +} + + +BOOST_AUTO_TEST_CASE(testDeploySysContract) +{ + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + // Add executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + // Generate a test block + auto block = blockFactory->createBlock(); + block->blockHeader()->setNumber(0); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + auto tx = blockFactory->transactionFactory()->createTransaction( + 3, precompiled::AUTH_COMMITTEE_ADDRESS, {}, u256(1), 500, "chainId", "groupId", utcTime()); + block->appendTransaction(std::move(tx)); + + std::promise executedHeader; + scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& error, bcos::protocol::BlockHeader::Ptr&& header, bool) { + // callback(BCOS_ERROR_UNIQUE_PTR(-1, "deploy sys contract!"), nullptr); + BOOST_CHECK(error == nullptr); + executedHeader.set_value(std::move(header)); + }); + auto header = executedHeader.get_future().get(); + + BOOST_CHECK(header); + BOOST_CHECK_NE(header->stateRoot(), h256()); +} + +BOOST_AUTO_TEST_CASE(testCallSysContract) +{ + auto scheduler = + std::make_shared(executorManager, ledger, storage, executionMessageFactory, + blockFactory, txPool, transactionSubmitResultFactory, hashImpl, false, false, false, 0); + // Add executor + auto executor1 = std::make_shared("executor1"); + executorManager->addExecutor("executor1", executor1); + + auto tx = blockFactory->transactionFactory()->createTransaction( + 3, precompiled::AUTH_COMMITTEE_ADDRESS, {}, u256(1), 500, "chainId", "groupId", utcTime()); + + bcos::protocol::TransactionReceipt::Ptr receipt; + + scheduler->call( + tx, [&](bcos::Error::Ptr error, bcos::protocol::TransactionReceipt::Ptr receiptResponse) { + BOOST_CHECK(!error); + BOOST_CHECK(receiptResponse); + + receipt = std::move(receiptResponse); + }); + BOOST_CHECK_NE(receipt->blockNumber(), 0); + BOOST_CHECK_EQUAL(receipt->status(), 0); + BOOST_CHECK_GT(receipt->gasUsed(), 0); +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-sdk/CMakeLists.txt b/bcos-sdk/CMakeLists.txt new file mode 100644 index 0000000..0dc5ed9 --- /dev/null +++ b/bcos-sdk/CMakeLists.txt @@ -0,0 +1,33 @@ +file(GLOB_RECURSE SRC_LIST "bcos-cpp-sdk/*.cpp") + +find_package(Boost REQUIRED log serialization) +find_package(wedprcrypto REQUIRED) +find_package(jsoncpp REQUIRED) +find_package(OpenSSL REQUIRED) +find_package(Microsoft.GSL REQUIRED) +find_package(range-v3 REQUIRED) + +set(BCOS_CPP_SDK_TARGET bcos-cpp-sdk) +add_library(${BCOS_CPP_SDK_TARGET} ${SRC_LIST}) +target_include_directories(${BCOS_CPP_SDK_TARGET} PUBLIC + $ + $) +target_link_libraries(${BCOS_CPP_SDK_TARGET} PUBLIC + wedprcrypto::crypto + ${TARS_PROTOCOL_TARGET} + bcos-crypto + bcos-boostssl + bcos-utilities + jsoncpp_static + OpenSSL::SSL + OpenSSL::Crypto) + +if (TESTS) + enable_testing() + add_subdirectory(tests) + add_subdirectory(sample) +endif() + +include(GNUInstallDirs) +install(TARGETS ${BCOS_CPP_SDK_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-cpp-sdk" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/Sdk.h b/bcos-sdk/bcos-cpp-sdk/Sdk.h new file mode 100644 index 0000000..f224071 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/Sdk.h @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Sdk.h + * @author: octopus + * @date 2021-12-04 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +class Sdk +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + Sdk(bcos::cppsdk::service::Service::Ptr _service, + bcos::cppsdk::jsonrpc::JsonRpcImpl::Ptr _jsonRpc, bcos::cppsdk::amop::AMOP::Ptr _amop, + bcos::cppsdk::event::EventSub::Ptr _eventSub) + : m_service(_service), m_jsonRpc(_jsonRpc), m_amop(_amop), m_eventSub(_eventSub) + {} + virtual ~Sdk() { stop(); } + +private: + bcos::cppsdk::service::Service::Ptr m_service; + bcos::cppsdk::jsonrpc::JsonRpcImpl::Ptr m_jsonRpc; + bcos::cppsdk::amop::AMOP::Ptr m_amop; + bcos::cppsdk::event::EventSub::Ptr m_eventSub; + +public: + virtual void start() + { + if (m_jsonRpc) + { + m_jsonRpc->start(); + } + + if (m_amop) + { + m_amop->start(); + } + + if (m_eventSub) + { + m_eventSub->start(); + } + + if (m_service) + { + m_service->start(); + } + } + + virtual void stop() + { + if (m_service) + { + m_service->stop(); + } + + if (m_jsonRpc) + { + m_jsonRpc->stop(); + } + + if (m_amop) + { + m_amop->stop(); + } + + if (m_eventSub) + { + m_eventSub->stop(); + } + } + +public: + bcos::cppsdk::service::Service::Ptr service() const { return m_service; } + bcos::cppsdk::jsonrpc::JsonRpcImpl::Ptr jsonRpc() const { return m_jsonRpc; } + bcos::cppsdk::amop::AMOP::Ptr amop() const { return m_amop; } + + bcos::cppsdk::event::EventSub::Ptr eventSub() const { return m_eventSub; } +}; + +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/SdkFactory.cpp b/bcos-sdk/bcos-cpp-sdk/SdkFactory.cpp new file mode 100644 index 0000000..f6e5cda --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/SdkFactory.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SdkFactory.cpp + * @author: octopus + * @date 2021-08-21 + */ +#include "SdkFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos; +using namespace bcos::cppsdk::amop; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::config; +using namespace bcos::cppsdk::jsonrpc; +using namespace bcos::cppsdk::event; +using namespace bcos::cppsdk::service; + +SdkFactory::SdkFactory() +{ + // TODO: how to init log in cpp sdk + // LogInitializer::initLog(); +} + +bcos::cppsdk::Sdk::UniquePtr SdkFactory::buildSdk( + std::shared_ptr _config) +{ + if (!_config) + { + _config = m_config; + } + + auto service = buildService(_config); + auto amop = buildAMOP(service); + auto jsonRpc = buildJsonRpc(service); + auto eventSub = buildEventSub(service); + + auto sdk = std::make_unique(service, jsonRpc, amop, eventSub); + return sdk; +} + +bcos::cppsdk::Sdk::UniquePtr SdkFactory::buildSdk(const std::string& _configFile) +{ + auto config = std::make_shared(); + auto wsConfig = config->loadConfig(_configFile); + return buildSdk(wsConfig); +} + +Service::Ptr SdkFactory::buildService(std::shared_ptr _config) +{ + auto groupInfoCodec = std::make_shared(); + auto groupInfoFactory = std::make_shared(); + auto service = std::make_shared(groupInfoCodec, groupInfoFactory, "SDK"); + auto initializer = std::make_shared(); + initializer->setConfig(_config); + initializer->initWsService(service); + service->registerMsgHandler(bcos::protocol::MessageType::BLOCK_NOTIFY, + [service]( + std::shared_ptr _msg, std::shared_ptr _session) { + auto blkMsg = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + service->onRecvBlockNotifier(blkMsg); + + BCOS_LOG(INFO) << "[WS]" << LOG_DESC("receive block notify") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("blk", blkMsg); + }); + + service->registerMsgHandler(bcos::protocol::MessageType::GROUP_NOTIFY, + [service]( + std::shared_ptr _msg, std::shared_ptr _session) { + std::string groupInfo = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + service->onNotifyGroupInfo(groupInfo, _session); + + BCOS_LOG(INFO) << "[WS]" << LOG_DESC("receive group info notify") + << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("groupInfo", groupInfo); + }); + + return service; +} + +bcos::cppsdk::jsonrpc::JsonRpcImpl::Ptr SdkFactory::buildJsonRpc(Service::Ptr _service) +{ + auto groupInfoCodec = std::make_shared(); + auto jsonRpc = std::make_shared(groupInfoCodec); + auto factory = std::make_shared(); + jsonRpc->setFactory(factory); + jsonRpc->setService(_service); + + jsonRpc->setSender([_service](const std::string& _group, const std::string& _node, + const std::string& _request, bcos::cppsdk::jsonrpc::RespFunc _respFunc) { + auto data = std::make_shared(_request.begin(), _request.end()); + auto msg = _service->messageFactory()->buildMessage(); + msg->setSeq(_service->messageFactory()->newSeq()); + msg->setPacketType(bcos::protocol::MessageType::RPC_REQUEST); + msg->setPayload(data); + + _service->asyncSendMessageByGroupAndNode(_group, _node, msg, Options(), + [_respFunc](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + (void)_session; + _respFunc(_error, _msg ? _msg->payload() : nullptr); + }); + }); + + return jsonRpc; +} + +bcos::cppsdk::amop::AMOP::Ptr SdkFactory::buildAMOP(bcos::cppsdk::service::Service::Ptr _service) +{ + auto amop = std::make_shared(); + + auto topicManager = std::make_shared(); + auto requestFactory = std::make_shared(); + auto messageFactory = std::make_shared(); + + amop->setTopicManager(topicManager); + amop->setRequestFactory(requestFactory); + amop->setMessageFactory(messageFactory); + amop->setService(_service); + + auto amopWeakPtr = std::weak_ptr(amop); + + _service->registerMsgHandler(bcos::cppsdk::amop::MessageType::AMOP_REQUEST, + [amopWeakPtr]( + std::shared_ptr _msg, std::shared_ptr _session) { + auto amop = amopWeakPtr.lock(); + if (amop) + { + amop->onRecvAMOPRequest(_msg, _session); + } + }); + _service->registerMsgHandler(bcos::cppsdk::amop::MessageType::AMOP_RESPONSE, + [amopWeakPtr]( + std::shared_ptr _msg, std::shared_ptr _session) { + auto amop = amopWeakPtr.lock(); + if (amop) + { + amop->onRecvAMOPResponse(_msg, _session); + } + }); + _service->registerMsgHandler(bcos::cppsdk::amop::MessageType::AMOP_BROADCAST, + [amopWeakPtr]( + std::shared_ptr _msg, std::shared_ptr _session) { + auto amop = amopWeakPtr.lock(); + if (amop) + { + amop->onRecvAMOPBroadcast(_msg, _session); + } + }); + _service->registerWsHandshakeSucHandler([amopWeakPtr](std::shared_ptr _session) { + auto amop = amopWeakPtr.lock(); + if (amop) + { + // service handshake successfully + amop->updateTopicsToRemote(_session); + } + }); + return amop; +} + +bcos::cppsdk::event::EventSub::Ptr SdkFactory::buildEventSub(Service::Ptr _service) +{ + auto eventSub = std::make_shared(); + auto messageFactory = std::make_shared(); + + eventSub->setMessageFactory(messageFactory); + eventSub->setService(_service); + eventSub->setConfig(_service->config()); + + auto eventWeakPtr = std::weak_ptr(eventSub); + _service->registerMsgHandler(bcos::cppsdk::event::MessageType::EVENT_LOG_PUSH, + [eventWeakPtr]( + std::shared_ptr _msg, std::shared_ptr _session) { + auto eventSub = eventWeakPtr.lock(); + if (eventSub) + { + eventSub->onRecvEventSubMessage(_msg, _session); + } + }); + + _service->registerDisconnectHandler([eventWeakPtr](std::shared_ptr _session) { + auto eventSub = eventWeakPtr.lock(); + if (eventSub) + { + eventSub->suspendTasks(_session); + } + }); + + return eventSub; +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/SdkFactory.h b/bcos-sdk/bcos-cpp-sdk/SdkFactory.h new file mode 100644 index 0000000..d2e7e99 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/SdkFactory.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Initializer.h + * @author: octopus + * @date 2021-08-21 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +class SdkFactory : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + + SdkFactory(); + +public: + bcos::cppsdk::service::Service::Ptr buildService( + std::shared_ptr _config); + bcos::cppsdk::jsonrpc::JsonRpcImpl::Ptr buildJsonRpc( + bcos::cppsdk::service::Service::Ptr _service); + bcos::cppsdk::amop::AMOP::Ptr buildAMOP(bcos::cppsdk::service::Service::Ptr _service); + bcos::cppsdk::event::EventSub::Ptr buildEventSub(bcos::cppsdk::service::Service::Ptr _service); + +public: + bcos::cppsdk::Sdk::UniquePtr buildSdk( + std::shared_ptr _config = nullptr); + bcos::cppsdk::Sdk::UniquePtr buildSdk(const std::string& _configFile); + +public: + std::shared_ptr config() const { return m_config; } + void setConfig(std::shared_ptr _config) { m_config = _config; } + +private: + std::shared_ptr m_config; +}; +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/amop/AMOP.cpp b/bcos-sdk/bcos-cpp-sdk/amop/AMOP.cpp new file mode 100644 index 0000000..43cfc89 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/AMOP.cpp @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOP.cpp + * @author: octopus + * @date 2021-08-23 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::amop; + +void AMOP::start() +{ + if (m_service) + { // start websocket service + m_service->start(); + } + else + { + AMOP_CLIENT(WARNING) << LOG_BADGE("start") + << LOG_DESC("websocket service is not uninitialized"); + } + + AMOP_CLIENT(INFO) << LOG_BADGE("start") << LOG_DESC("start amop"); +} +void AMOP::stop() +{ + AMOP_CLIENT(INFO) << LOG_BADGE("stop") << LOG_DESC("stop amop"); +} + +// subscribe topics +void AMOP::subscribe(const std::set& _topics) +{ + // add topics to manager and update topics to server + auto result = m_topicManager->addTopics(_topics); + if (result) + { + updateTopicsToRemote(); + } +} + +// subscribe topics +void AMOP::unsubscribe(const std::set& _topics) +{ + // add topics to manager + auto result = m_topicManager->removeTopics(_topics); + if (result) + { + updateTopicsToRemote(); + } +} + +// query all subscribed topics +void AMOP::querySubTopics(std::set& _topics) +{ + _topics = m_topicManager->topics(); + AMOP_CLIENT(INFO) << LOG_BADGE("querySubTopics") << LOG_KV("topics size", _topics.size()); +} + +// subscribe topic with callback +void AMOP::subscribe(const std::string& _topic, SubCallback _callback) +{ + auto r = m_topicManager->addTopic(_topic); + addTopicCallback(_topic, _callback); + if (r) + { + updateTopicsToRemote(); + } + + AMOP_CLIENT(INFO) << LOG_BADGE("subscribe") << LOG_DESC("subscribe topic with callback") + << LOG_KV("topic", _topic) << LOG_KV("r", r); +} + +// +void AMOP::sendResponse( + const std::string& _endPoint, const std::string& _seq, bcos::bytesConstRef _data) +{ + auto msg = m_messageFactory->buildMessage(); + msg->setSeq(_seq); + msg->setPayload(std::make_shared(_data.begin(), _data.end())); + msg->setPacketType(bcos::cppsdk::amop::MessageType::AMOP_RESPONSE); + + m_service->asyncSendMessageByEndPoint(_endPoint, msg); +} + +// publish message +void AMOP::publish( + const std::string& _topic, bcos::bytesConstRef _data, uint32_t _timeout, PubCallback _callback) +{ + auto request = m_requestFactory->buildRequest(); + request->setTopic(_topic); + request->setData(_data); + + auto buffer = std::make_shared(); + request->encode(*buffer); + + auto sendMsg = m_messageFactory->buildMessage(); + sendMsg->setSeq(m_messageFactory->newSeq()); + sendMsg->setPacketType(bcos::cppsdk::amop::MessageType::AMOP_REQUEST); + sendMsg->setPayload(buffer); + + auto sendBuffer = std::make_shared(); + sendMsg->encode(*sendBuffer); + + AMOP_CLIENT(TRACE) << LOG_BADGE("publish") << LOG_DESC("publish message") + << LOG_KV("topic", _topic); + m_service->asyncSendMessage(sendMsg, bcos::boostssl::ws::Options(_timeout), + [_callback](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + auto wsMessage = std::dynamic_pointer_cast(_msg); + if (!_error && wsMessage && wsMessage->status() != 0) + { + auto errorNew = std::make_shared(); + errorNew->setErrorCode(wsMessage->status()); + errorNew->setErrorMessage( + std::string(wsMessage->payload()->begin(), wsMessage->payload()->end())); + + AMOP_CLIENT(WARNING) << LOG_BADGE("publish") << LOG_DESC("publish response error") + << LOG_KV("errorCode", errorNew->errorCode()) + << LOG_KV("errorMessage", errorNew->errorMessage()); + + _error = errorNew; + } + + _callback(_error, wsMessage, _session); + }); +} + +// broadcast message +void AMOP::broadcast(const std::string& _topic, bcos::bytesConstRef _data) +{ + auto request = m_requestFactory->buildRequest(); + request->setTopic(_topic); + request->setData(_data); + + auto buffer = std::make_shared(); + request->encode(*buffer); + + auto sendMsg = m_messageFactory->buildMessage(); + sendMsg->setSeq(m_messageFactory->newSeq()); + sendMsg->setPacketType(bcos::cppsdk::amop::MessageType::AMOP_BROADCAST); + sendMsg->setPayload(buffer); + + auto sendBuffer = std::make_shared(); + sendMsg->encode(*sendBuffer); + + AMOP_CLIENT(TRACE) << LOG_BADGE("broadcast") << LOG_DESC("broadcast message") + << LOG_KV("topic", _topic); + m_service->broadcastMessage(sendMsg); +} + + +void AMOP::updateTopicsToRemote() +{ + auto ss = m_service->sessions(); + for (auto session : ss) + { + updateTopicsToRemote(session); + } +} + +void AMOP::updateTopicsToRemote(std::shared_ptr _session) +{ + std::string request = m_topicManager->toJson(); + auto msg = m_messageFactory->buildMessage(); + msg->setSeq(m_messageFactory->newSeq()); + msg->setPacketType(bcos::cppsdk::amop::MessageType::AMOP_SUBTOPIC); + msg->setPayload(std::make_shared(request.begin(), request.end())); + + _session->asyncSendMessage(msg); + + AMOP_CLIENT(INFO) << LOG_BADGE("updateTopicsToRemote") + << LOG_DESC("send subscribe message to server") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("topics", request); +} + +void AMOP::onRecvAMOPRequest(std::shared_ptr _msg, + std::shared_ptr _session) +{ + auto seq = _msg->seq(); + auto request = m_requestFactory->buildRequest(); + auto ret = + request->decode(bcos::bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + if (ret < 0) + { + AMOP_CLIENT(WARNING) << LOG_BADGE("onRecvAMOPRequest") + << LOG_DESC("decode amop request message error") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); + return; + } + auto topic = request->topic(); + // AMOP_CLIENT(INFO) << LOG_DESC("onRecvAMOPRequest") + // << LOG_KV("endpoint", _session->endPoint()) + // << LOG_KV("data size", data->size()); + + auto callback = getCallbackByTopic(topic); + if (!callback && m_callback) + { + callback = m_callback; + } + + if (callback) + { + callback(nullptr, _session->connectedEndPoint(), seq, request->data(), _session); + } + else + { + AMOP_CLIENT(WARNING) << LOG_BADGE("onRecvAMOPRequest") + << LOG_DESC("there has no callback register for the topic") + << LOG_KV("topic", topic); + } +} + +void AMOP::onRecvAMOPResponse(std::shared_ptr _msg, + std::shared_ptr _session) +{ + auto seq = _msg->seq(); + AMOP_CLIENT(WARNING) << LOG_BADGE("onRecvAMOPResponse") + << LOG_DESC("maybe the amop request callback timeout") + << LOG_KV("seq", seq) << LOG_KV("endpoint", _session->endPoint()); +} + +void AMOP::onRecvAMOPBroadcast(std::shared_ptr _msg, + std::shared_ptr _session) +{ + auto seq = _msg->seq(); + auto request = m_requestFactory->buildRequest(); + auto ret = + request->decode(bcos::bytesConstRef(_msg->payload()->data(), _msg->payload()->size())); + if (ret < 0) + { + AMOP_CLIENT(WARNING) << LOG_BADGE("onRecvAMOPBroadcast") + << LOG_DESC("decode amop request message error") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq); + return; + } + + auto topic = request->topic(); + + AMOP_CLIENT(DEBUG) << LOG_BADGE("onRecvAMOPBroadcast") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq) + << LOG_KV("data size", request->data().size()); + + auto callback = getCallbackByTopic(topic); + if (!callback && m_callback) + { + callback = m_callback; + } + + if (callback) + { + callback(nullptr, _session->connectedEndPoint(), seq, request->data(), _session); + } + else + { + AMOP_CLIENT(WARNING) << LOG_BADGE("onRecvAMOPBroadcast") + << LOG_DESC("there has no callback register for the topic") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("seq", seq) + << LOG_KV("topic", topic); + } +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/amop/AMOP.h b/bcos-sdk/bcos-cpp-sdk/amop/AMOP.h new file mode 100644 index 0000000..d3c82fb --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/AMOP.h @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOP.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace amop +{ +class AMOP : public AMOPInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + virtual ~AMOP() { stop(); } + +public: + virtual void start() override; + virtual void stop() override; + +public: + // subscribe topics + virtual void subscribe(const std::set& _topics) override; + // subscribe topics + virtual void unsubscribe(const std::set& _topics) override; + // subscribe topic with callback + virtual void subscribe(const std::string& _topic, SubCallback _callback) override; + // publish message + virtual void publish(const std::string& _topic, bcos::bytesConstRef _data, uint32_t timeout, + PubCallback _callback) override; + // broadcast message + virtual void broadcast(const std::string& _topic, bcos::bytesConstRef _data) override; + // + virtual void sendResponse( + const std::string& _endPoint, const std::string& _seq, bcos::bytesConstRef _data) override; + // query all subscribed topics + virtual void querySubTopics(std::set& _topics) override; + // set default callback + virtual void setSubCallback(SubCallback _callback) override { m_callback = _callback; } + virtual SubCallback subCallback() const { return m_callback; } + + void updateTopicsToRemote(); + void updateTopicsToRemote(std::shared_ptr _session); + +public: + void onRecvAMOPRequest(std::shared_ptr _msg, + std::shared_ptr _session); + void onRecvAMOPResponse(std::shared_ptr _msg, + std::shared_ptr _session); + void onRecvAMOPBroadcast(std::shared_ptr _msg, + std::shared_ptr _session); + +public: + std::shared_ptr messageFactory() const + { + return m_messageFactory; + } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messageFactory = _messageFactory; + } + + std::shared_ptr requestFactory() const + { + return m_requestFactory; + } + void setRequestFactory(std::shared_ptr _requestFactory) + { + m_requestFactory = _requestFactory; + } + + std::shared_ptr topicManager() const { return m_topicManager; } + void setTopicManager(std::shared_ptr _topicManager) + { + m_topicManager = _topicManager; + } + + std::shared_ptr service() const { return m_service; } + void setService(std::shared_ptr _service) + { + m_service = _service; + } + + void addTopicCallback(const std::string& _topic, SubCallback _callback) + { + boost::unique_lock lock(x_topic2Callback); + m_topic2Callback[_topic] = _callback; + } + + SubCallback getCallbackByTopic(const std::string& _topic) + { + boost::shared_lock lock(x_topic2Callback); + auto it = m_topic2Callback.find(_topic); + if (it == m_topic2Callback.end()) + { + return nullptr; + } + return it->second; + } + +private: + SubCallback m_callback; + std::shared_ptr m_topicManager; + std::shared_ptr m_messageFactory; + std::shared_ptr m_requestFactory; + + mutable boost::shared_mutex x_topic2Callback; + std::unordered_map m_topic2Callback; + + std::shared_ptr m_service; +}; +} // namespace amop +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/amop/AMOPInterface.h b/bcos-sdk/bcos-cpp-sdk/amop/AMOPInterface.h new file mode 100644 index 0000000..79450e6 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/AMOPInterface.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPInterface.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace amop +{ +using SubCallback = std::function)>; +using PubCallback = + std::function, + std::shared_ptr)>; +class AMOPInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + virtual ~AMOPInterface() {} + +public: + virtual void start() = 0; + virtual void stop() = 0; + +public: + // subscribe topics + virtual void subscribe(const std::set& _topics) = 0; + // subscribe topics + virtual void unsubscribe(const std::set& _topics) = 0; + // subscribe topic with callback + virtual void subscribe(const std::string& _topic, SubCallback _callback) = 0; + // publish message + virtual void publish(const std::string& _topic, bcos::bytesConstRef _data, uint32_t timeout, + PubCallback _callback) = 0; + // broadcast message + virtual void broadcast(const std::string& _topic, bcos::bytesConstRef _data) = 0; + // query all subscribed topics + virtual void querySubTopics(std::set& _topics) = 0; + // set default callback + virtual void setSubCallback(SubCallback _callback) = 0; + // + virtual void sendResponse( + const std::string& _endPoint, const std::string& _seq, bcos::bytesConstRef _data) = 0; +}; + +} // namespace amop +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.cpp b/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.cpp new file mode 100644 index 0000000..58104b3 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPRequest.cpp + * @author: octopus + * @date 2021-09-06 + */ +#include +#include + +// check offset length overflow when decode message +#define OFFSET_CHECK(offset, step, length) \ + do \ + { \ + if (offset + step > length) \ + { \ + throw std::runtime_error("offset overflow, offset: " + std::to_string(offset) + \ + ",step: " + std::to_string(step) + \ + " ,length: " + std::to_string(length)); \ + } \ + } while (0) + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos; + +const std::size_t AMOPRequest::TOPIC_MAX_LENGTH; +const std::size_t AMOPRequest::MESSAGE_MIN_LENGTH; + +bool AMOPRequest::encode(bytes& _buffer) +{ + if (m_topic.size() > TOPIC_MAX_LENGTH) + { + return false; + } + // the version + auto version = boost::asio::detail::socket_ops::host_to_network_long(m_version); + auto versionLen = sizeof(m_version) / sizeof(uint8_t); + _buffer.insert(_buffer.end(), (byte*)&version, (byte*)&version + versionLen); + // the topic length + uint16_t length = + boost::asio::detail::socket_ops::host_to_network_short((uint16_t)m_topic.size()); + _buffer.insert(_buffer.end(), (byte*)&length, (byte*)&length + 2); + // the topic data + _buffer.insert(_buffer.end(), m_topic.begin(), m_topic.end()); + // the data + _buffer.insert(_buffer.end(), m_data.begin(), m_data.end()); + return true; +} + +int64_t AMOPRequest::decode(bcos::bytesConstRef _data) +{ + if (_data.size() < MESSAGE_MIN_LENGTH) + { + return -1; + } + + try + { + std::size_t length = _data.size(); + std::size_t offset = 0; + // decode version + auto versionLen = sizeof(m_version) / sizeof(uint8_t); + OFFSET_CHECK(offset, versionLen, length); + offset += versionLen; + m_version = + boost::asio::detail::socket_ops::network_to_host_long(*((uint32_t*)_data.data())); + + // decode topicLength + OFFSET_CHECK(offset, 2, length); + uint16_t topicLen = boost::asio::detail::socket_ops::network_to_host_short( + *((uint16_t*)(_data.data() + versionLen))); + offset += 2; + + // decode topic + OFFSET_CHECK(offset, topicLen, length); + m_topic = std::string(_data.data() + offset, _data.data() + offset + topicLen); + offset += topicLen; + + // decode data + m_data = _data.getCroppedData(offset); + return _data.size(); + } + catch (const std::string&) + { + return -1; + } +} diff --git a/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.h b/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.h new file mode 100644 index 0000000..d4ea96d --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/AMOPRequest.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AMOPRequest.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once +#include + +namespace bcos +{ +namespace protocol +{ +class AMOPRequest +{ +public: + using Ptr = std::shared_ptr; + AMOPRequest() = default; + AMOPRequest(bcos::bytesConstRef _data) { decode(_data); } + virtual ~AMOPRequest() {} + + // topic field length + const static size_t TOPIC_MAX_LENGTH = 65535; + const static size_t MESSAGE_MIN_LENGTH = 2; + + + std::string topic() const { return m_topic; } + void setTopic(const std::string& _topic) { m_topic = _topic; } + void setData(bcos::bytesConstRef _data) { m_data = _data; } + bcos::bytesConstRef data() const { return m_data; } + + virtual bool encode(bcos::bytes& _buffer); + virtual int64_t decode(bcos::bytesConstRef _data); + + virtual uint32_t version() const { return m_version; } + virtual void setVersion(uint32_t _version) { m_version = _version; } + +private: + std::string m_topic; + bcos::bytesConstRef m_data = bcos::bytesConstRef(); + uint32_t m_version = 0; +}; + +class AMOPRequestFactory +{ +public: + using Ptr = std::shared_ptr; + AMOPRequestFactory() = default; + virtual ~AMOPRequestFactory() {} + + std::shared_ptr buildRequest() { return std::make_shared(); } + std::shared_ptr buildRequest(bcos::bytesConstRef _data) + { + return std::make_shared(_data); + } +}; + +} // namespace protocol +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/amop/Common.h b/bcos-sdk/bcos-cpp-sdk/amop/Common.h new file mode 100644 index 0000000..b00954d --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/Common.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-08-25 + */ +#pragma once + +#define AMOP_CLIENT(LEVEL) BCOS_LOG(LEVEL) << "[AMOP][CLIENT]" +#define AMOP_TOPIC_MANAGER(LEVEL) BCOS_LOG(LEVEL) << "[AMOP][TOPICMANAGER]" + +namespace bcos +{ +namespace cppsdk +{ +namespace amop +{ +/** + * @brief: amop message types + */ +enum MessageType +{ + // ------------AMOP begin --------- + + AMOP_SUBTOPIC = 0x110, // 272 + AMOP_REQUEST = 0x111, // 273 + AMOP_BROADCAST = 0x112, // 274 + AMOP_RESPONSE = 0x113 // 275 + + // ------------AMOP end --------- + +}; +} // namespace amop +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.cpp b/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.cpp new file mode 100644 index 0000000..1e9fc58 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TopicManager.cpp + * @author: octopus + * @date 2021-08-26 + */ + +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::amop; + +bool TopicManager::addTopic(const std::string& _topic) +{ + boost::unique_lock lock(x_topics); + auto result = m_topics.insert(_topic); + return result.second; +} +bool TopicManager::addTopics(const std::set& _topics) +{ + boost::unique_lock lock(x_topics); + auto oldSize = m_topics.size(); + m_topics.insert(_topics.begin(), _topics.end()); + return m_topics.size() > oldSize; +} +bool TopicManager::removeTopic(const std::string& _topic) +{ + boost::unique_lock lock(x_topics); + auto result = m_topics.erase(_topic); + return result > 0; +} +bool TopicManager::removeTopics(const std::set& _topics) +{ + size_t removeCount = 0; + for (auto& topic : _topics) + { + auto r = removeTopic(topic); + removeCount += (r ? 1 : 0); + } + return removeCount > 0; +} +std::set TopicManager::topics() const +{ + boost::shared_lock lock(x_topics); + return m_topics; +} + +std::string TopicManager::toJson() +{ + auto totalTopics = topics(); + Json::Value jTopics(Json::arrayValue); + for (const auto& topic : totalTopics) + { + jTopics.append(topic); + } + Json::Value jReq; + jReq["topics"] = jTopics; + Json::FastWriter writer; + std::string request = writer.write(jReq); + return request; +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.h b/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.h new file mode 100644 index 0000000..d1fd351 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/amop/TopicManager.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TopicManager.h + * @author: octopus + * @date 2021-08-23 + */ +#pragma once + +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace amop +{ +// manage the topics user subscribed +class TopicManager +{ +public: + using Ptr = std::shared_ptr; + + bool addTopic(const std::string& _topic); + bool addTopics(const std::set& _topics); + bool removeTopic(const std::string& _topic); + bool removeTopics(const std::set& _topics); + std::set topics() const; + std::string toJson(); + +private: + // mutex for m_sessions + mutable boost::shared_mutex x_topics; + std::set m_topics; +}; + +} // namespace amop +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/config/Config.cpp b/bcos-sdk/bcos-cpp-sdk/config/Config.cpp new file mode 100644 index 0000000..520179f --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/config/Config.cpp @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Config.cpp + * @author: octopus + * @date 2021-12-14 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos::boostssl::context; +using namespace bcos; +using namespace bcos::cppsdk::config; + +std::shared_ptr Config::loadConfig(const std::string& _configPath) +{ + try + { + boost::property_tree::ptree pt; + boost::property_tree::ini_parser::read_ini(_configPath, pt); + + BCOS_LOG(INFO) << LOG_BADGE("loadConfig") << LOG_DESC("loadConfig ok") + << LOG_KV("configPath", _configPath); + return loadConfig(pt); + } + catch (const std::exception& e) + { + BCOS_LOG(WARNING) << LOG_BADGE("loadConfig") << LOG_DESC("loadConfig failed") + << LOG_KV("configPath", _configPath) + << LOG_KV("error", boost::diagnostic_information(e)); + + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment(boost::diagnostic_information(e))); + } +} + +std::shared_ptr Config::loadConfig( + boost::property_tree::ptree const& _pt) +{ + auto config = std::make_shared(); + config->setModel(WsModel::Client); + + loadCommon(_pt, *config); + loadPeers(_pt, *config); + if (!config->disableSsl()) + { + loadCert(_pt, *config); + } + + return config; +} + +void Config::loadCommon( + boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config) +{ + /* + [common] + ; if disable ssl connection, default: false + ; disable_ssl = true + ; thread pool size for network msg sending recving handing + thread_pool_size = 8 + ; send message timeout(ms) + message_timeout_ms = 10000 + */ + bool disableSsl = _pt.get("common.disable_ssl", false); + int threadPoolSize = _pt.get("common.thread_pool_size", 8); + int messageTimeOut = _pt.get("common.message_timeout_ms", 10000); + + _config.setDisableSsl(disableSsl); + _config.setSendMsgTimeout(messageTimeOut); + _config.setThreadPoolSize(threadPoolSize); + + + BCOS_LOG(INFO) << LOG_BADGE("loadCommon") << LOG_DESC("load common section config items ok") + << LOG_KV("disableSsl", disableSsl) << LOG_KV("threadPoolSize", threadPoolSize) + << LOG_KV("messageTimeOut", messageTimeOut); +} + +void Config::loadPeers( + boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config) +{ + /* + [peers] + # supported ipv4 and ipv6 + node.0=127.0.0.1:20200 + node.1=127.0.0.1:20201 + */ + + EndPointsPtr peers = std::make_shared>(); + _config.setConnectPeers(peers); + + for (auto it : _pt.get_child("peers")) + { + if (it.first.find("node.") != 0) + { + continue; + } + + NodeIPEndpoint ep; + if (!WsTools::stringToEndPoint(it.second.data(), ep)) + { + BCOS_LOG(WARNING) + << LOG_BADGE("loadPeers") + << LOG_DESC( + "invalid endpoint, endpoint must be in IP:Port format, eg: 127.0.0.1:20200") + << LOG_KV("endpoint", it.second.data()); + continue; + } + + BCOS_LOG(INFO) << LOG_BADGE("loadPeers") << LOG_DESC("add one connected peer") + << LOG_KV("endpoint", it.second.data()); + + peers->insert(ep); + } + + BCOS_LOG(DEBUG) << LOG_BADGE("loadPeers") << LOG_DESC("load connected peers ok") + << LOG_KV("peers size", peers->size()); +} + +void Config::loadCert(boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config) +{ + std::string sslType = _pt.get("cert.ssl_type", "ssl"); + if (sslType == "sm_ssl") + { + loadSMSslCert(_pt, _config); + } + else + { + loadSslCert(_pt, _config); + } +} + +void Config::loadSslCert( + boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config) +{ + /* + [cert] + ; directory the certificates located in, default: ./conf + ca_path=./conf + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + sdk_key=sdk.key + ; the node certificate file + sdk_cert=sdk.crt + */ + std::string caPath = _pt.get("cert.ca_path", "./conf"); + std::string caCert = caPath + "/" + _pt.get("cert.ca_cert", "ca.crt"); + std::string sdkKey = caPath + "/" + _pt.get("cert.sdk_key", "sdk.key"); + std::string sdkCert = caPath + "/" + _pt.get("cert.sdk_cert", "sdk.crt"); + + BCOS_LOG(INFO) << LOG_BADGE("loadCert") << LOG_DESC("load ssl cert ok") + << LOG_KV("ca_path", caPath) << LOG_KV("caCert", caCert) + << LOG_KV("sdkCert", sdkCert) << LOG_KV("sdkKey", sdkKey); + + ContextConfig::CertConfig certConfig; + certConfig.caCert = caCert; + certConfig.nodeCert = sdkCert; + certConfig.nodeKey = sdkKey; + + auto contextConfig = std::make_shared(); + contextConfig->setSslType("ssl"); + contextConfig->setCertConfig(certConfig); + _config.setContextConfig(contextConfig); + return; +} + +void Config::loadSMSslCert( + boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config) +{ + /* + [cert] + ; directory the certificates located in, default: ./conf + ca_path=./conf + ; the ca certificate file + sm_ca_cert=sm_ca.crt + ; the node private key file + sm_sdk_key=sm_sdk.key + ; the node certificate file + sm_sdk_cert=sm_sdk.crt + ; the node private key file + sm_ensdk_key=sm_ensdk.key + ; the node certificate file + sm_ensdk_cert=sm_ensdk.crt + */ + std::string caPath = _pt.get("cert.ca_path", "./conf"); + std::string smCaCert = caPath + "/" + _pt.get("cert.sm_ca_cert", "sm_ca.crt"); + std::string smSdkKey = caPath + "/" + _pt.get("cert.sm_sdk_key", "sm_sdk.key"); + std::string smSdkCert = caPath + "/" + _pt.get("cert.sm_sdk_cert", "sm_sdk.crt"); + std::string smEnSdkKey = + caPath + "/" + _pt.get("cert.sm_ensdk_key", "sm_ensdk.key"); + std::string smEnSdkCert = + caPath + "/" + _pt.get("cert.sm_ensdk_cert", "sm_ensdk.crt"); + + BCOS_LOG(INFO) << LOG_DESC("loadSMCert") << LOG_DESC("load sm ssl cert ok") + << LOG_KV("ca_path", caPath) << LOG_KV("smCaCert", smCaCert) + << LOG_KV("smSdkKey", smSdkKey) << LOG_KV("smSdkCert", smSdkCert) + << LOG_KV("smEnSdkCert", smEnSdkCert) << LOG_KV("smEnSdkKey", smEnSdkKey); + + + ContextConfig::SMCertConfig cert; + cert.caCert = smCaCert; + cert.nodeCert = smSdkCert; + cert.nodeKey = smSdkKey; + cert.enNodeCert = smEnSdkCert; + cert.enNodeKey = smEnSdkKey; + + auto ctxConfig = std::make_shared(); + ctxConfig->setSslType("sm_ssl"); + ctxConfig->setSmCertConfig(cert); + _config.setContextConfig(ctxConfig); + return; +} diff --git a/bcos-sdk/bcos-cpp-sdk/config/Config.h b/bcos-sdk/bcos-cpp-sdk/config/Config.h new file mode 100644 index 0000000..22ad86e --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/config/Config.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Config.h + * @author: octopus + * @date 2021-12-14 + */ +#pragma once + +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace config +{ +class Config +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + std::shared_ptr loadConfig(const std::string& _configPath); + std::shared_ptr loadConfig( + boost::property_tree::ptree const& _pt); + + void loadCommon(boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config); + void loadPeers(boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config); + void loadCert(boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config); + void loadSslCert(boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config); + void loadSMSslCert( + boost::property_tree::ptree const& _pt, bcos::boostssl::ws::WsConfig& _config); +}; + +} // namespace config +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/Common.h b/bcos-sdk/bcos-cpp-sdk/event/Common.h new file mode 100644 index 0000000..5fdaa8c --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/Common.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once + +#include +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +/** + * @brief: event sub message types + */ +enum MessageType +{ + // ------------event begin --------- + + EVENT_SUBSCRIBE = 0x120, // 288 + EVENT_UNSUBSCRIBE = 0x121, // 289 + EVENT_LOG_PUSH = 0x122, // 290 + + // ------------event end --------- +}; +} // namespace event +} // namespace cppsdk +} // namespace bcos + + +// The largest number of topic in one event log +#define EVENT_LOG_TOPICS_MAX_INDEX (4) + +#define EVENT_TASK(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][TASK]" +#define EVENT_PARAMS(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][PARAMS]" +#define EVENT_REQUEST(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][REQUEST]" +#define EVENT_RESPONSE(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][RESPONSE]" +#define EVENT_SUB(LEVEL) BCOS_LOG(LEVEL) << "[EVENT][SUB]" diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSub.cpp b/bcos-sdk/bcos-cpp-sdk/event/EventSub.cpp new file mode 100644 index 0000000..9410363 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSub.cpp @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPush.cpp + * @author: octopus + * @date 2021-09-01 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::event; + +void EventSub::start() +{ + if (m_running) + { + EVENT_SUB(INFO) << LOG_BADGE("start") << LOG_DESC("event sub is running"); + return; + } + m_running = true; + + // start websocket service + m_service->start(); + + m_timer = std::make_shared(m_config->reconnectPeriod(), "doLoop"); + m_timer->registerTimeoutHandler([this]() { doLoop(); }); + m_timer->start(); + EVENT_SUB(INFO) << LOG_BADGE("start") << LOG_DESC("start event sub successfully") + << LOG_KV("sendMsgTimeout", m_config->sendMsgTimeout()) + << LOG_KV("reconnectPeriod", m_config->reconnectPeriod()); +} + +void EventSub::stop() +{ + if (!m_running) + { + EVENT_SUB(INFO) << LOG_BADGE("stop") << LOG_DESC("event sub is not running"); + return; + } + + m_running = false; + if (m_timer) + { + m_timer->stop(); + } + + EVENT_SUB(INFO) << LOG_BADGE("stop") << LOG_DESC("stop event sub successfully"); +} + +void EventSub::doLoop() +{ + m_timer->restart(); + { + boost::shared_lock lock(x_tasks); + EVENT_SUB(INFO) << LOG_BADGE("doLoop") << LOG_DESC("event sub tasks") + << LOG_KV("working event sub count", m_workingTasks.size()) + << LOG_KV("suspend event sub count", m_suspendTasks.size()); + } + + if (m_suspendTasksCount.load()) + { + auto ss = m_service->sessions(); + if (ss.empty()) + { + EVENT_SUB(INFO) + << LOG_BADGE("doLoop") + << LOG_DESC( + "no active sessions available and discard resend suspend event sub tasks"); + } + else + { + boost::shared_lock lock(x_tasks); + for (const auto& taskEntry : m_suspendTasks) + { + auto task = taskEntry.second; + std::string id = task->id(); + if (!this->addWaitResp(id)) + { + continue; + } + + subscribeEvent( + task, [id, this](Error::Ptr, const std::string&) { this->removeWaitResp(id); }); + } + } + } +} + +bool EventSub::addTask(EventSubTask::Ptr _task) +{ + boost::unique_lock lock(x_tasks); + removeSuspendTask(_task->id()); + if (m_workingTasks.find(_task->id()) == m_workingTasks.end()) + { + m_workingTasks[_task->id()] = _task; + return true; + } + + return false; +} + +EventSubTask::Ptr EventSub::getTask(const std::string& _id, bool includeSuspendTask) +{ + EventSubTask::Ptr task = nullptr; + + boost::shared_lock lock(x_tasks); + auto it = m_workingTasks.find(_id); + if (it != m_workingTasks.end()) + { + task = it->second; + + EVENT_SUB(TRACE) << LOG_BADGE("getTask") << LOG_DESC("event sub task is working") + << LOG_KV("id", _id); + } + else if (includeSuspendTask) + { + auto innerIt = m_suspendTasks.find(_id); + if (innerIt != m_suspendTasks.end()) + { + task = innerIt->second; + + EVENT_SUB(TRACE) << LOG_BADGE("getTask") << LOG_DESC("event sub task suspend") + << LOG_KV("id", _id); + } + else + { + EVENT_SUB(DEBUG) << LOG_BADGE("getTask") << LOG_DESC("cannot found event sub task") + << LOG_KV("id", _id); + } + } + + return task; +} + +EventSubTask::Ptr EventSub::getTaskAndRemove(const std::string& _id, bool includeSuspendTask) +{ + EventSubTask::Ptr task = nullptr; + + boost::unique_lock lock(x_tasks); + auto it = m_workingTasks.find(_id); + if (it != m_workingTasks.end()) + { // remove from m_workingTasks + task = it->second; + m_workingTasks.erase(it); + + EVENT_SUB(TRACE) << LOG_BADGE("getTaskAndRemove") << LOG_DESC("event sub task is working") + << LOG_KV("id", _id); + } + else if (includeSuspendTask) + { + // remove from m_suspendTasks + auto innerIt = m_suspendTasks.find(_id); + if (innerIt != m_suspendTasks.end()) + { + task = innerIt->second; + m_suspendTasksCount--; + m_suspendTasks.erase(innerIt); + + EVENT_SUB(TRACE) << LOG_BADGE("getTaskAndRemove") << LOG_DESC("event sub task suspend") + << LOG_KV("id", _id); + } + } + + return task; +} + +bool EventSub::addSuspendTask(EventSubTask::Ptr _task) +{ + if (m_suspendTasks.find(_task->id()) == m_suspendTasks.end()) + { + m_suspendTasksCount++; + m_suspendTasks[_task->id()] = _task; + return true; + } + + return false; +} + +bool EventSub::removeSuspendTask(const std::string& _id) +{ + // remove from suspendTasks + auto it = m_suspendTasks.find(_id); + if (it != m_suspendTasks.end()) + { + m_suspendTasksCount--; + m_suspendTasks.erase(it); + return true; + } + return false; +} + +std::size_t EventSub::suspendTasks(std::shared_ptr _session) +{ + if (!_session) + { + return 0; + } + + std::size_t count = 0; + { + boost::unique_lock lock(x_tasks); + for (auto it = m_workingTasks.begin(); it != m_workingTasks.end();) + { + auto task = it->second; + auto s = task->session(); + if (s && s->endPoint() != _session->endPoint()) + { + ++it; + continue; + } + + EVENT_SUB(INFO) << LOG_BADGE("suspendTasks") + << LOG_DESC("suspend event sub task for disconnection") + << LOG_KV("id", task->id()) << LOG_KV("endPoint", _session->endPoint()); + it = m_workingTasks.erase(it); + task->setSession(nullptr); + addSuspendTask(task); + count++; + } + } + + EVENT_SUB(INFO) << LOG_BADGE("suspendTasks") + << LOG_DESC("suspend event sub tasks for disconnection") + << LOG_KV("endPoint", _session->endPoint()) << LOG_KV("count", count); + + return count; +} + +void EventSub::onRecvEventSubMessage( + std::shared_ptr _msg, std::shared_ptr _session) +{ + /* + { + "id": "", + "status": 0, + "result": { + [ + {}, + {}, + {} + ] + } + } + */ + auto strResp = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + EVENT_SUB(TRACE) << LOG_BADGE("onRecvEventSubMessage") << LOG_DESC("receive event sub message") + << LOG_KV("endpoint", _session->endPoint()) << LOG_KV("response", strResp); + + auto resp = std::make_shared(); + if (!resp->fromJson(strResp)) + { + EVENT_SUB(WARNING) << LOG_BADGE("onRecvEventSubMessage") + << LOG_DESC("recv invalid event sub message") + << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("response", strResp); + return; + } + + auto task = getTask(resp->id()); + if (task == nullptr) + { + EVENT_SUB(WARNING) << LOG_BADGE("onRecvEventSubMessage") + << LOG_DESC("event sub task not exist") << LOG_KV("id", resp->id()) + << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("response", strResp); + return; + } + + if (resp->status() == StatusCode::EndOfPush) + { // event sub end + getTaskAndRemove(resp->id()); + task->callback()(nullptr, strResp); + + EVENT_SUB(INFO) << LOG_BADGE("onRecvEventSubMessage") << LOG_DESC("end of push") + << LOG_KV("id", task->id()) << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("response", strResp); + } + else if (resp->status() != StatusCode::Success) + { // event sub error + getTaskAndRemove(resp->id()); + task->callback()(nullptr, strResp); + + EVENT_SUB(INFO) << LOG_BADGE("onRecvEventSubMessage") << LOG_DESC("event sub error") + << LOG_KV("id", task->id()) << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("response", strResp); + } + else + { + // NOTE: update the latest blocknumber of event sub for network disconnect continue + auto jResp = resp->jResp(); + try + { + int64_t blockNumber = -1; + if (jResp["result"][0]["blockNumber"].isInt64()) + { + blockNumber = jResp["result"][0]["blockNumber"].asInt64(); + task->state()->setCurrentBlockNumber(blockNumber); + } + task->callback()(nullptr, strResp); + + EVENT_SUB(TRACE) << LOG_BADGE("onRecvEventSubMessage") << LOG_DESC("event sub") + << LOG_KV("id", task->id()) << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("blockNumber", blockNumber) << LOG_KV("response", strResp); + } + catch (const std::exception& e) + { + EVENT_SUB(WARNING) << LOG_BADGE("onRecvEventSubMessage") + << LOG_DESC("unrecognized event sub response") + << LOG_KV("id", task->id()) + << LOG_KV("endpoint", _session->endPoint()) + << LOG_KV("resp", strResp); + } + } +} + +void EventSub::subscribeEvent(EventSubTask::Ptr _task, Callback _callback) +{ + auto id = _task->id(); + auto group = _task->group(); + + auto request = std::make_shared(); + request->setId(id); + request->setParams(_task->params()); + request->setGroup(_task->group()); + request->setState(_task->state()); + + auto jsonReq = request->generateJson(); + + auto message = m_messagefactory->buildMessage(); + message->setSeq(m_messagefactory->newSeq()); + message->setPacketType(bcos::cppsdk::event::MessageType::EVENT_SUBSCRIBE); + message->setPayload(std::make_shared(jsonReq.begin(), jsonReq.end())); + + EVENT_SUB(INFO) << LOG_BADGE("subscribeEvent") << LOG_DESC("subscribe event") + << LOG_KV("id", id) << LOG_KV("group", group) << LOG_KV("request", jsonReq); + + m_service->asyncSendMessageByGroupAndNode(_task->group(), "", message, Options(), + [id, _task, _callback, this](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + if (_error && _error->errorCode() != 0) + { + EVENT_SUB(WARNING) + << LOG_BADGE("subscribeEvent") << LOG_DESC("callback response error") + << LOG_KV("id", id) << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + + _callback(_error, ""); + return; + } + + auto strResp = std::string(_msg->payload()->begin(), _msg->payload()->end()); + auto resp = std::make_shared(); + if (!resp->fromJson(strResp)) + { + EVENT_SUB(WARNING) + << LOG_BADGE("subscribeEvent") << LOG_DESC("invalid subscribe event response") + << LOG_KV("id", id) << LOG_KV("response", strResp); + _callback(nullptr, strResp); + } + else if (resp->status() != StatusCode::Success) + { + _callback(nullptr, strResp); + EVENT_SUB(WARNING) + << LOG_BADGE("subscribeEvent") << LOG_DESC("callback response error") + << LOG_KV("id", id) << LOG_KV("response", strResp); + } + else + { + // subscribe event successfully, set network session for unsubscribe + _task->setSession(_session); + + this->addTask(_task); + + _callback(nullptr, strResp); + EVENT_SUB(INFO) << LOG_BADGE("subscribeEvent") + << LOG_DESC("callback response success") << LOG_KV("id", id) + << LOG_KV("response", strResp); + } + }); +} + +std::string EventSub::subscribeEvent( + const std::string& _group, const std::string& _params, Callback _callback) +{ + EventSubParams::Ptr params = std::make_shared(); + if (!params->fromJsonString(_params)) + { + // invalid request params string format + auto error = std::make_shared(-1, "invalid request JSON string"); + _callback(error, ""); + return ""; + } + + return subscribeEvent(_group, params, _callback); +} + +std::string EventSub::subscribeEvent( + const std::string& _group, EventSubParams::Ptr _params, Callback _callback) +{ + // invalid request params string format + if (!_params->verifyParams()) + { + auto error = std::make_shared(-1, "params verification failure"); + _callback(error, ""); + return ""; + } + + auto taskId = m_messagefactory->newSeq(); + auto task = std::make_shared(); + + task->setId(taskId); + task->setGroup(_group); + task->setParams(_params); + task->setCallback(_callback); + task->setState(std::make_shared()); + + subscribeEvent(task, _callback); + return taskId; +} + +void EventSub::unsubscribeEvent(const std::string& _id) +{ + auto task = getTaskAndRemove(_id); + if (task == nullptr) + { + EVENT_SUB(WARNING) << LOG_BADGE("unsubscribeEvent") << LOG_DESC("event sub not found") + << LOG_KV("id", _id); + return; + } + + auto session = task->session(); + if (!session) + { + EVENT_SUB(INFO) << LOG_BADGE("unsubscribeEvent") << LOG_DESC("task is suspend") + << LOG_KV("id", _id); + return; + } + + auto request = std::make_shared(); + request->setId(_id); + request->setGroup(task->group()); + auto strReq = request->generateJson(); + + auto message = m_messagefactory->buildMessage(); + message->setSeq(m_messagefactory->newSeq()); + message->setPacketType(bcos::cppsdk::event::MessageType::EVENT_UNSUBSCRIBE); + message->setPayload(std::make_shared(strReq.begin(), strReq.end())); + + session->asyncSendMessage(message, Options(), + [_id](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr) { + if (_error && _error->errorCode() != 0) + { + EVENT_SUB(WARNING) + << LOG_BADGE("unsubscribeEvent") << LOG_DESC("callback response error") + << LOG_KV("id", _id) << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + + auto strResp = std::string(_msg->payload()->begin(), _msg->payload()->end()); + auto resp = std::make_shared(); + if (!resp->fromJson(strResp)) + { + EVENT_SUB(WARNING) + << LOG_BADGE("unsubscribeEvent") << LOG_DESC("callback invalid response") + << LOG_KV("id", _id) << LOG_KV("response", strResp); + return; + } + + if (resp->status() != StatusCode::Success) + { + EVENT_SUB(WARNING) + << LOG_BADGE("unsubscribeEvent") << LOG_DESC("callback response error") + << LOG_KV("id", _id) << LOG_KV("status", resp->status()) + << LOG_KV("response", strResp); + } + else + { + EVENT_SUB(INFO) << LOG_BADGE("unsubscribeEvent") + << LOG_DESC("callback response success") << LOG_KV("id", _id) + << LOG_KV("status", resp->status()) << LOG_KV("response", strResp); + } + }); +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSub.h b/bcos-sdk/bcos-cpp-sdk/event/EventSub.h new file mode 100644 index 0000000..c0b7f7f --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSub.h @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPush.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +class EventSub : public EventSubInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + EventSub() {} + virtual ~EventSub() { stop(); } + +public: + virtual void start() override; + virtual void stop() override; + + void doLoop(); + + virtual std::string subscribeEvent( + const std::string& _group, const std::string& _params, Callback _callback) override; + virtual std::string subscribeEvent( + const std::string& _group, EventSubParams::Ptr _params, Callback _callback) override; + virtual void unsubscribeEvent(const std::string& _id) override; + +public: + void subscribeEvent(EventSubTask::Ptr _task, Callback _callback); + +public: + void onRecvEventSubMessage(std::shared_ptr _msg, + std::shared_ptr _session); + +public: + bool addTask(EventSubTask::Ptr _task); + EventSubTask::Ptr getTask(const std::string& _id, bool includeSuspendTask = true); + EventSubTask::Ptr getTaskAndRemove(const std::string& _id, bool includeSuspendTask = true); + + bool addSuspendTask(EventSubTask::Ptr _task); + bool removeSuspendTask(const std::string& _id); + + bool removeWaitResp(const std::string& _id) + { + boost::lock_guard lock(x_waitRespTasks); + return 0 != m_waitRespTasks.erase(_id); + } + + bool addWaitResp(const std::string& _id) + { + boost::lock_guard lock(x_waitRespTasks); + auto r = m_waitRespTasks.insert(_id); + return r.second; + } + + std::size_t suspendTasks(std::shared_ptr _session); + + void setService(bcos::cppsdk::service::Service::Ptr _service) { m_service = _service; } + bcos::cppsdk::service::Service::Ptr service() const { return m_service; } + void setMessageFactory(std::shared_ptr _messageFactory) + { + m_messagefactory = _messageFactory; + } + std::shared_ptr messageFactory() const + { + return m_messagefactory; + } + + boostssl::ws::WsConfig::ConstPtr config() const { return m_config; } + void setConfig(boostssl::ws::WsConfig::ConstPtr _config) { m_config = _config; } + + uint32_t suspendTasksCount() const { return m_suspendTasksCount.load(); } + const std::unordered_map& suspendTasks() const + { + return m_suspendTasks; + } + const std::unordered_map& workingtasks() const + { + return m_workingTasks; + } + +private: + bool m_running = false; + + std::atomic m_suspendTasksCount{0}; + + mutable boost::shared_mutex x_tasks; + std::unordered_map m_workingTasks; + std::unordered_map m_suspendTasks; + + mutable boost::mutex x_waitRespTasks; + std::set m_waitRespTasks; + + // timer + std::shared_ptr m_timer; + // message factory + std::shared_ptr m_messagefactory; + // websocket service + bcos::cppsdk::service::Service::Ptr m_service; + // + boostssl::ws::WsConfig::ConstPtr m_config; +}; +} // namespace event +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubInterface.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubInterface.h new file mode 100644 index 0000000..2d0bab6 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubInterface.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushInterface.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +using Callback = std::function; + +class EventSubInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + virtual ~EventSubInterface() {} + +public: + virtual void start() = 0; + virtual void stop() = 0; + +public: + virtual std::string subscribeEvent( + const std::string& _group, const std::string& _params, Callback _callback) = 0; + virtual std::string subscribeEvent( + const std::string& _group, EventSubParams::Ptr _params, Callback _callback) = 0; + virtual void unsubscribeEvent(const std::string& _id) = 0; +}; +} // namespace event +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.cpp b/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.cpp new file mode 100644 index 0000000..71054b8 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushParams.cpp + * @author: octopus + * @date 2021-09-01 + */ + +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::event; + +bool EventSubParams::verifyParams() +{ + // topic + if (m_topics.size() > EVENT_LOG_TOPICS_MAX_INDEX) + { + return false; + } + + for (std::size_t i = 0; i < m_topics.size(); ++i) + { + for (const auto& topic : m_topics[i]) + { + if (!codec::abi::ContractEventTopic::validEventTopic(topic)) + { + return false; + } + } + } + + // check address + for (const auto& addr : m_addresses) + { + if (addr.empty()) + { + return false; + } + } + + // from to range check + if (m_fromBlock > 0 && m_toBlock > 0) + { + return m_fromBlock <= m_toBlock; + } + + return true; +} + +bool EventSubParams::fromJsonString(const std::string& _jsonString) +{ + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(_jsonString, root)) + { + EVENT_PARAMS(WARNING) << LOG_BADGE("fromJsonString") << LOG_DESC("invalid json object") + << LOG_KV("jsonString", _jsonString); + return false; + } + + fromJson(root); + + EVENT_PARAMS(INFO) << LOG_BADGE("fromJsonString") << LOG_KV("jsonString", _jsonString) + << LOG_KV("params", *this); + return true; + } + catch (const std::exception& _e) + { + EVENT_PARAMS(WARNING) << LOG_BADGE("fromJsonString") + << LOG_DESC("invalid event sub params json object") + << LOG_KV("jsonString", _jsonString) + << LOG_KV("error", boost::diagnostic_information(_e)); + return false; + } +} + +void EventSubParams::fromJson(const Json::Value& jParams) +{ + if (jParams.isMember("fromBlock")) + { + setFromBlock(jParams["fromBlock"].asInt64()); + } + + if (jParams.isMember("toBlock")) + { + setToBlock(jParams["toBlock"].asInt64()); + } + + if (jParams.isMember("addresses")) + { + auto& jAddr = jParams["addresses"]; + for (Json::Value::ArrayIndex index = 0; index < jAddr.size(); ++index) + { + addAddress(jAddr[index].asString()); + } + } + + if (jParams.isMember("topics")) + { + auto& jTopics = jParams["topics"]; + for (Json::Value::ArrayIndex index = 0; index < jTopics.size(); ++index) + { + auto& jIndex = jTopics[index]; + if (jIndex.isNull()) + { + continue; + } + + if (jIndex.isArray()) + { // array topics + for (Json::Value::ArrayIndex innerIndex = 0; innerIndex < jIndex.size(); + ++innerIndex) + { + addTopic(index, jIndex[innerIndex].asString()); + } + } + else + { // single topic, string value + addTopic(index, jIndex.asString()); + } + } + } + + EVENT_PARAMS(DEBUG) << LOG_BADGE("fromJson") << LOG_KV("EventSubParams", *this); +} + +std::string EventSubParams::toJsonString() +{ + Json::FastWriter writer; + std::string result = writer.write(toJson()); + return result; +} + +Json::Value EventSubParams::toJson() +{ + Json::Value jParams; + // fromBlock + jParams["fromBlock"] = fromBlock(); + // toBlock + jParams["toBlock"] = toBlock(); + + // addresses + Json::Value jAddresses(Json::arrayValue); + for (const auto& addr : addresses()) + { + jAddresses.append(addr); + } + jParams["addresses"] = jAddresses; + + // topics + Json::Value jTopics(Json::arrayValue); + for (const auto& inTopics : topics()) + { + if (inTopics.empty()) + { + Json::Value jInTopics(Json::nullValue); + jTopics.append(jInTopics); + continue; + } + + Json::Value jInTopics(Json::arrayValue); + for (const auto& topic : inTopics) + { + jInTopics.append(topic); + } + jTopics.append(jInTopics); + } + + jParams["topics"] = jTopics; + return jParams; +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.h new file mode 100644 index 0000000..cdec6d4 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubParams.h @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushParams.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +class EventSubParams +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + int64_t fromBlock() const { return m_fromBlock; } + int64_t toBlock() const { return m_toBlock; } + const std::set& addresses() const { return m_addresses; } + std::set& addresses() { return m_addresses; } + const std::vector>& topics() const { return m_topics; } + std::vector>& topics() { return m_topics; } + + void setFromBlock(int64_t _fromBlock) { m_fromBlock = _fromBlock; } + void setToBlock(int64_t _toBlock) { m_toBlock = _toBlock; } + void addAddress(const std::string& _address) { m_addresses.insert(_address); } + bool addTopic(std::size_t _index, const std::string& _topic) + { + m_topics.resize(_index + 1); + m_topics[_index].insert(_topic); + + return _index < EVENT_LOG_TOPICS_MAX_INDEX; + } + +public: + bool fromJsonString(const std::string& _jsonString); + void fromJson(const Json::Value& _json); + + std::string toJsonString(); + Json::Value toJson(); + +public: + bool verifyParams(); + +private: + int64_t m_fromBlock = -1; + int64_t m_toBlock = -1; + std::set m_addresses; + std::vector> m_topics; +}; + +inline std::ostream& operator<<(std::ostream& _out, const EventSubParams& _params) +{ + _out << "{"; + _out << "fromBlock: " << _params.fromBlock(); + _out << "toBlock: " << _params.toBlock(); + + _out << "addresses: "; + for (const auto& addr : _params.addresses()) + { + _out << addr << " "; + } + + _out << "topics: "; + for (std::size_t i = 0; i < _params.topics().size(); ++i) + { + _out << "index: " << i; + for (const auto& topic : _params.topics()[i]) + { + _out << topic << " " << i; + } + _out << ","; + } + + _out << "}"; + return _out; +} + +} // namespace event +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.cpp b/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.cpp new file mode 100644 index 0000000..717f299 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.cpp @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushRequest.cpp + * @author: octopus + * @date 2021-09-03 + */ + +#include +#include + +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::event; + +std::string EventSubUnsubRequest::generateJson() const +{ + /* + { + "id": "", + "group": "" + } + */ + Json::Value jResult; + // id + jResult["id"] = m_id; + // group + jResult["group"] = m_group; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubUnsubRequest::fromJson(const std::string& _request) +{ + std::string id; + std::string group; + EventSubParams::Ptr params = std::make_shared(); + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_request, root)) + { + errorMessage = "invalid json object, parse request failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("group")) + { + // group field not exist + errorMessage = "\'group\' field not exist"; + break; + } + group = root["group"].asString(); + + m_id = id; + m_group = group; + + EVENT_REQUEST(INFO) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub request success") + << LOG_KV("group", m_group) << LOG_KV("id", m_id); + + return true; + + } while (0); + + EVENT_REQUEST(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub request") + << LOG_KV("request", _request) + << LOG_KV("errorMessage", errorMessage); + } + catch (const std::exception& e) + { + EVENT_REQUEST(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + + << LOG_KV("request", _request) + << LOG_KV("error", boost::diagnostic_information(e)); + } + + return false; +} + + +std::string EventSubSubRequest::generateJson() const +{ + /* + { + "id": "", + "group": "", + "params": { + "fromBlock": -1, + "toBlock": -1, + "addresses": [ + "0xca5ed56862869c25da0bdf186e634aac6c6361ee" + ], + "topics": [ + "0x91c95f04198617c60eaf2180fbca88fc192db379657df0e412a9f7dd4ebbe95d" + ] + } + } + */ + Json::Value jResult; + // id + jResult["id"] = id(); + // group + jResult["group"] = group(); + + Json::Value jParams; + // fromBlock + jParams["fromBlock"] = m_state->currentBlockNumber() > 0 ? m_state->currentBlockNumber() + 1 : + m_params->fromBlock(); + // toBlock + jParams["toBlock"] = m_params->toBlock(); + // addresses + Json::Value jAddresses(Json::arrayValue); + for (const auto& addr : m_params->addresses()) + { + jAddresses.append(addr); + } + jParams["addresses"] = jAddresses; + // topics + Json::Value jTopics(Json::arrayValue); + for (const auto& inTopics : m_params->topics()) + { + if (inTopics.empty()) + { + Json::Value jInTopics(Json::nullValue); + jTopics.append(jInTopics); + continue; + } + + Json::Value jInTopics(Json::arrayValue); + for (const auto& topic : inTopics) + { + jInTopics.append(topic); + } + jTopics.append(jInTopics); + } + + jParams["topics"] = jTopics; + jResult["params"] = jParams; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubSubRequest::fromJson(const std::string& _request) +{ + std::string id; + std::string group; + EventSubParams::Ptr params = std::make_shared(); + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_request, root)) + { + errorMessage = "invalid json object, parse request failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("group")) + { + // group field not exist + errorMessage = "\'group\' field not exist"; + break; + } + group = root["group"].asString(); + + if (!root.isMember("params")) + { // params field not exist + errorMessage = "\'params\' field not exist"; + break; + } + + auto& jParams = root["params"]; + if (jParams.isMember("fromBlock")) + { + params->setFromBlock(jParams["fromBlock"].asInt64()); + } + + if (jParams.isMember("toBlock")) + { + params->setToBlock(jParams["toBlock"].asInt64()); + } + + if (jParams.isMember("addresses")) + { + auto& jAddresses = jParams["addresses"]; + for (Json::Value::ArrayIndex index = 0; index < jAddresses.size(); ++index) + { + params->addAddress(jAddresses[index].asString()); + } + } + + if (jParams.isMember("topics")) + { + auto& jTopics = jParams["topics"]; + + for (Json::Value::ArrayIndex index = 0; index < jTopics.size(); ++index) + { + auto& jIndex = jTopics[index]; + if (jIndex.isNull()) + { + continue; + } + + if (jIndex.isArray()) + { // array topics + for (Json::Value::ArrayIndex innerIndex = 0; innerIndex < jIndex.size(); + ++innerIndex) + { + params->addTopic(index, jIndex[innerIndex].asString()); + } + } + else + { // single topic, string value + params->addTopic(index, jIndex.asString()); + } + } + } + + setId(id); + setGroup(group); + setParams(params); + + EVENT_REQUEST(INFO) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub request success") + << LOG_KV("group", group) << LOG_KV("id", id); + + return true; + + } while (0); + + EVENT_REQUEST(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub request") + << LOG_KV("request", _request) + << LOG_KV("errorMessage", errorMessage); + } + catch (const std::exception& e) + { + EVENT_REQUEST(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + + << LOG_KV("request", _request) + << LOG_KV("error", boost::diagnostic_information(e)); + } + + return false; +} diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.h new file mode 100644 index 0000000..44fc7fc --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubRequest.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushRequest.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +class EventSubUnsubRequest +{ +public: + using Ptr = std::shared_ptr; + + virtual ~EventSubUnsubRequest() {} + +public: + void setId(const std::string& _id) { m_id = _id; } + std::string id() const { return m_id; } + + void setGroup(const std::string& _group) { m_group = _group; } + std::string group() const { return m_group; } + + virtual std::string generateJson() const; + virtual bool fromJson(const std::string& _request); + +private: + std::string m_id; + std::string m_group; +}; + +class EventSubSubRequest : public EventSubUnsubRequest +{ +public: + using Ptr = std::shared_ptr; + + virtual ~EventSubSubRequest() {} + +public: + void setParams(std::shared_ptr _params) { m_params = _params; } + std::shared_ptr params() const { return m_params; } + + void setState(std::shared_ptr _state) { m_state = _state; } + std::shared_ptr state() const { return m_state; } + + std::string generateJson() const override; + bool fromJson(const std::string& _request) override; + +private: + std::shared_ptr m_params; + std::shared_ptr m_state; +}; + +} // namespace event +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.cpp b/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.cpp new file mode 100644 index 0000000..b724e7d --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushResponse.cpp + * @author: octopus + * @date 2021-09-09 + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::event; + +std::string EventSubResponse::generateJson() +{ + /* + { + "id": "0x123", + "status": 0, + "result": { + "blockNumber": 111, + "events":[] + } + } + */ + Json::Value jResult; + // id + jResult["id"] = m_id; + // status + jResult["status"] = m_status; + + Json::FastWriter writer; + std::string result = writer.write(jResult); + return result; +} + +bool EventSubResponse::fromJson(const std::string& _response) +{ + std::string id; + int status; + + try + { + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + do + { + if (!jsonReader.parse(_response, root)) + { + errorMessage = "invalid json object, parse response failed"; + break; + } + + if (!root.isMember("id")) + { // id field not exist + errorMessage = "\'id\' field not exist"; + break; + } + id = root["id"].asString(); + + if (!root.isMember("status")) + { + // group field not exist + errorMessage = "\'status\' field not exist"; + break; + } + status = root["status"].asInt(); + + m_id = id; + m_status = status; + m_jResp = root; + + EVENT_RESPONSE(TRACE) << LOG_BADGE("fromJson") + << LOG_DESC("parse event sub response success") + << LOG_KV("id", m_id) << LOG_KV("status", m_status); + + return true; + + } while (0); + + EVENT_RESPONSE(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid event sub reponse") + << LOG_KV("response", _response) << LOG_KV("error", errorMessage); + } + catch (const std::exception& e) + { + EVENT_RESPONSE(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("invalid json object") + << LOG_KV("response", _response) + << LOG_KV("error", boost::diagnostic_information(e)); + } + + return false; +} diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.h new file mode 100644 index 0000000..4fa91f7 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubResponse.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushResponse.h + * @author: octopus + * @date 2021-09-09 + */ + +#pragma once + +#include +#include +#include +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +class EventSubResponse +{ +public: + using Ptr = std::shared_ptr; + +public: + std::string id() const { return m_id; } + void setId(const std::string& _id) { m_id = _id; } + int status() const { return m_status; } + void setStatus(int _status) { m_status = _status; } + + void setJResp(const Json::Value& _jResp) { m_jResp = _jResp; } + Json::Value jResp() const { return m_jResp; } + +public: + std::string generateJson(); + bool fromJson(const std::string& _response); + +private: + std::string m_id; + int m_status; + + Json::Value m_jResp; +}; +} // namespace event +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubStatus.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubStatus.h new file mode 100644 index 0000000..b78e565 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubStatus.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EventSubError.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +enum StatusCode +{ + Success = 0, + EndOfPush = 1, // push completed +}; +} // namespace event +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/event/EventSubTask.h b/bcos-sdk/bcos-cpp-sdk/event/EventSubTask.h new file mode 100644 index 0000000..c5b570d --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/event/EventSubTask.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file EvenPushTask.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace event +{ +class EventSubTaskState +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + int64_t currentBlockNumber() const { return m_currentBlockNumber.load(); } + void setCurrentBlockNumber(int64_t _currentBlockNumber) + { + if (_currentBlockNumber > m_currentBlockNumber.load()) + { + m_currentBlockNumber.store(_currentBlockNumber); + } + } + +private: + std::atomic m_currentBlockNumber = -1; +}; + +class EventSubTask +{ +public: + using Ptr = std::shared_ptr; + EventSubTask() { EVENT_TASK(DEBUG) << LOG_KV("[NEWOBJ][EventSubTask]", this); } + ~EventSubTask() { EVENT_TASK(DEBUG) << LOG_KV("[DELOBJ][EventSubTask]", this); } + +public: + void setSession(std::shared_ptr _session) + { + m_session = _session; + } + std::shared_ptr session() const { return m_session; } + + void setId(const std::string& _id) { m_id = _id; } + std::string id() const { return m_id; } + + void setGroup(const std::string& _group) { m_group = _group; } + std::string group() const { return m_group; } + + void setParams(std::shared_ptr _params) { m_params = _params; } + std::shared_ptr params() const { return m_params; } + + void setState(std::shared_ptr _state) { m_state = _state; } + std::shared_ptr state() const { return m_state; } + + void setCallback(Callback _callback) { m_callback = _callback; } + Callback callback() const { return m_callback; } + +private: + std::string m_id; + std::string m_group; + Callback m_callback; + std::shared_ptr m_session; + std::shared_ptr m_params; + std::shared_ptr m_state; +}; + +using EventSubTaskPtrs = std::vector; +} // namespace event +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/multigroup/JsonChainNodeInfoCodec.h b/bcos-sdk/bcos-cpp-sdk/multigroup/JsonChainNodeInfoCodec.h new file mode 100644 index 0000000..b24ed11 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/multigroup/JsonChainNodeInfoCodec.h @@ -0,0 +1,196 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to deploy new node + * @file JsonChainNodeInfoCodec.h + * @author: yujiechen + * @date 2021-09-08 + */ +#pragma once +#include +#include +#include +#include +#include +#include +namespace bcos +{ +namespace group +{ +class JsonChainNodeInfoCodec +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + JsonChainNodeInfoCodec() { m_chainNodeInfoFactory = std::make_shared(); } + virtual ~JsonChainNodeInfoCodec() {} + + virtual void deserializeIniConfig(ChainNodeInfo::Ptr _chainNodeInfo) + { + Json::Value value; + Json::Reader jsonReader; + if (!jsonReader.parse(_chainNodeInfo->iniConfig(), value)) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node ini config must be valid json string.")); + } + + // required: isWasm + if (!value.isMember("isWasm")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node ini config must set is wasm info.")); + } + _chainNodeInfo->setWasm(value["isWasm"].asBool()); + + // required: smCryptoType + if (!value.isMember("smCryptoType")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node ini config must set sm crypto type.")); + } + _chainNodeInfo->setSmCryptoType(value["smCryptoType"].asBool()); + } + + virtual ChainNodeInfo::Ptr deserialize(const std::string& _json) + { + auto chainNodeInfo = m_chainNodeInfoFactory->createNodeInfo(); + Json::Value value; + Json::Reader jsonReader; + if (!jsonReader.parse(_json, value)) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node information must be valid json string.")); + } + // required: parse nodeName + if (!value.isMember("name")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node information must set the chain node name.")); + } + chainNodeInfo->setNodeName(value["name"].asString()); + + // required: parse nodeType + if (!value.isMember("type")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node information must set the chain node type.")); + } + NodeCryptoType type = (NodeCryptoType)(value["type"].asUInt()); + chainNodeInfo->setNodeCryptoType(type); + + // required: parse iniConfig + if (!value.isMember("iniConfig")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node information must set the init config info")); + } + chainNodeInfo->setIniConfig(value["iniConfig"].asString()); + deserializeIniConfig(chainNodeInfo); + + // required: parse deployInfo + if (!value.isMember("serviceInfo")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The chain node information must set the service info")); + } + + if (!value["serviceInfo"].isArray()) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() + << bcos::errinfo_comment("The service info must be array.")); + } + + auto const& serviceInfo = value["serviceInfo"]; + for (Json::ArrayIndex i = 0; i < serviceInfo.size(); i++) + { + auto const& serviceInfoItem = serviceInfo[i]; + if (!serviceInfoItem.isObject() || !serviceInfoItem.isMember("type") || + !serviceInfoItem.isMember("serviceName")) + { + BOOST_THROW_EXCEPTION( + bcos::InvalidParameter() << bcos::errinfo_comment( + "Invalid service info: must contain the service type and name")); + } + chainNodeInfo->appendServiceInfo( + (bcos::protocol::ServiceType)serviceInfoItem["type"].asInt(), + serviceInfoItem["serviceName"].asString()); + } + + // optional: parse m_nodeID + if (value.isMember("nodeID")) + { + chainNodeInfo->setNodeID(value["nodeID"].asString()); + } + + // optional: parse microService + if (value.isMember("microService")) + { + chainNodeInfo->setMicroService(value["microService"].asBool()); + } + // optional: protocol info + auto protocolInfo = std::make_shared(); + if (value.isMember("protocol")) + { + auto const& protocol = value["protocol"]; + if (protocol.isMember("minSupportedVersion")) + { + protocolInfo->setMinVersion(protocol["minSupportedVersion"].asUInt()); + } + if (protocol.isMember("maxSupportedVersion")) + { + protocolInfo->setMaxVersion(protocol["maxSupportedVersion"].asUInt()); + } + chainNodeInfo->setNodeProtocol(std::move(*protocolInfo)); + if (protocol.isMember("compatibilityVersion")) + { + chainNodeInfo->setCompatibilityVersion(protocol["compatibilityVersion"].asUInt()); + } + } + return chainNodeInfo; + } + + virtual Json::Value serialize(ChainNodeInfo::Ptr _chainNodeInfo) + { + Json::Value jResp; + jResp["name"] = _chainNodeInfo->nodeName(); + jResp["type"] = _chainNodeInfo->nodeCryptoType(); + jResp["iniConfig"] = _chainNodeInfo->iniConfig(); + // set deployInfo + jResp["serviceInfo"] = Json::Value(Json::arrayValue); + + auto const& infos = _chainNodeInfo->serviceInfo(); + for (auto const& innerIt : infos) + { + Json::Value item; + item["type"] = innerIt.first; + item["serviceName"] = innerIt.second; + jResp["serviceInfo"].append(item); + } + // set protocol info + auto protocol = _chainNodeInfo->nodeProtocol(); + Json::Value protocolResponse; + protocolResponse["minSupportedVersion"] = protocol->minVersion(); + protocolResponse["maxSupportedVersion"] = protocol->maxVersion(); + protocolResponse["compatibilityVersion"] = _chainNodeInfo->compatibilityVersion(); + jResp["protocol"] = protocolResponse; + return jResp; + } + +private: + ChainNodeInfoFactory::Ptr m_chainNodeInfoFactory; +}; +} // namespace group +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/multigroup/JsonGroupInfoCodec.h b/bcos-sdk/bcos-cpp-sdk/multigroup/JsonGroupInfoCodec.h new file mode 100644 index 0000000..622e3e7 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/multigroup/JsonGroupInfoCodec.h @@ -0,0 +1,147 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to manager group + * @file JsonGroupInfoCodec.h + * @author: yujiechen + * @date 2021-09-08 + */ +#pragma once +#include "JsonChainNodeInfoCodec.h" +#include +#include +#include +#include +namespace bcos +{ +namespace group +{ +class JsonGroupInfoCodec : public GroupInfoCodec +{ +public: + using Ptr = std::shared_ptr; + JsonGroupInfoCodec() + { + m_groupInfoFactory = std::make_shared(); + m_chainNodeInfoCodec = std::make_shared(); + } + ~JsonGroupInfoCodec() override {} + + GroupInfo::Ptr deserialize(const std::string& _json) override + { + auto groupInfo = m_groupInfoFactory->createGroupInfo(); + Json::Value root; + Json::Reader jsonReader; + + if (!jsonReader.parse(_json, root)) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The group information must be valid json string.")); + } + + if (!root.isMember("chainID")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The group information must contain chainID")); + } + groupInfo->setChainID(root["chainID"].asString()); + + if (!root.isMember("groupID")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The group information must contain groupID")); + } + groupInfo->setGroupID(root["groupID"].asString()); + + if (root.isMember("genesisConfig")) + { + groupInfo->setGenesisConfig(root["genesisConfig"].asString()); + } + + + if (!root.isMember("iniConfig")) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The group information must contain iniConfig")); + } + groupInfo->setIniConfig(root["iniConfig"].asString()); + + // nodeList + if (!root.isMember("nodeList") || !root["nodeList"].isArray()) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "The group information must contain nodeList")); + } + + bool isFirst = true; + for (Json::ArrayIndex i = 0; i < root["nodeList"].size(); ++i) + { + auto& nodeInfo = root["nodeList"][i]; + Json::FastWriter writer; + std::string nodeStr = writer.write(nodeInfo); + auto node = m_chainNodeInfoCodec->deserialize(nodeStr); + groupInfo->appendNodeInfo(node); + if (isFirst) + { + groupInfo->setWasm(node->wasm()); + groupInfo->setSmCryptoType(node->smCryptoType()); + isFirst = false; + } + } + return groupInfo; + } + + Json::Value serialize(GroupInfo::Ptr _groupInfo) override + { + Json::Value jResp; + jResp["chainID"] = _groupInfo->chainID(); + jResp["groupID"] = _groupInfo->groupID(); + jResp["wasm"] = _groupInfo->wasm(); + jResp["smCryptoType"] = _groupInfo->smCryptoType(); + jResp["genesisConfig"] = _groupInfo->genesisConfig(); + jResp["iniConfig"] = _groupInfo->iniConfig(); + jResp["nodeList"] = Json::Value(Json::arrayValue); + const auto& nodes = _groupInfo->nodeInfos(); + for (auto const& it : nodes) + { + jResp["nodeList"].append(m_chainNodeInfoCodec->serialize(it.second)); + } + return jResp; + } + void serialize(std::string& _encodedData, GroupInfo::Ptr _groupInfo) override + { + Json::Value jResp; + jResp["chainID"] = _groupInfo->chainID(); + jResp["groupID"] = _groupInfo->groupID(); + jResp["wasm"] = _groupInfo->wasm(); + jResp["smCryptoType"] = _groupInfo->smCryptoType(); + jResp["genesisConfig"] = _groupInfo->genesisConfig(); + jResp["iniConfig"] = _groupInfo->iniConfig(); + jResp["nodeList"] = Json::Value(Json::arrayValue); + const auto& nodes = _groupInfo->nodeInfos(); + for (auto const& it : nodes) + { + jResp["nodeList"].append(m_chainNodeInfoCodec->serialize(it.second)); + } + Json::FastWriter writer; + _encodedData = writer.write(jResp); + } + +private: + GroupInfoFactory::Ptr m_groupInfoFactory; + JsonChainNodeInfoCodec::Ptr m_chainNodeInfoCodec; +}; +} // namespace group +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/Common.h b/bcos-sdk/bcos-cpp-sdk/rpc/Common.h new file mode 100644 index 0000000..992eabc --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/Common.h @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-08-10 + */ + +#pragma once +#include +#include +#include + +#define RPCREQ_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPC][REQUEST]" +#define RPCIMPL_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPC][IMPL]" + +namespace bcos +{ +namespace cppsdk +{ +namespace jsonrpc +{ +struct JsonResponse +{ + struct Error + { + int32_t code{0}; + std::string message{"success"}; + + std::string toString() const + { + return "{\"code\":" + std::to_string(code) + "\"message\":" + message + "}"; + } + }; + std::string jsonrpc; + int64_t id; + Error error; + Json::Value result; + +public: + inline Json::Value toJson() + { + Json::Value jResp; + + jResp["jsonrpc"] = jsonrpc; + jResp["id"] = id; + + if (error.code == 0) + { // success + jResp["result"] = result; + } + else + { // error + Json::Value jError; + jError["code"] = error.code; + jError["message"] = error.message; + + jResp["error"] = jError; + } + + return jResp; + } + + inline std::string toJsonString() + { + auto jResp = toJson(); + Json::FastWriter writer; + std::string resp = writer.write(jResp); + return resp; + } +}; + +} // namespace jsonrpc +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.cpp b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.cpp new file mode 100644 index 0000000..177a4cf --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.cpp @@ -0,0 +1,509 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file JsonRpcImpl.cpp + * @author: octopus + * @date 2021-08-10 + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace cppsdk; +using namespace jsonrpc; +using namespace bcos; + +void JsonRpcImpl::start() +{ + if (m_service) + { // start websocket service + m_service->start(); + } + else + { + RPCIMPL_LOG(WARNING) << LOG_BADGE("start") + << LOG_DESC("websocket service is not uninitialized"); + } + RPCIMPL_LOG(INFO) << LOG_BADGE("start") << LOG_DESC("start rpc"); +} + +void JsonRpcImpl::stop() +{ + RPCIMPL_LOG(INFO) << LOG_BADGE("stop") << LOG_DESC("stop rpc"); +} + +void JsonRpcImpl::genericMethod(const std::string& _data, RespFunc _respFunc) +{ + m_sender("", "", _data, _respFunc); + RPCIMPL_LOG(TRACE) << LOG_BADGE("genericMethod") << LOG_KV("request", _data); +} + +void JsonRpcImpl::genericMethod( + const std::string& _groupID, const std::string& _data, RespFunc _respFunc) +{ + m_sender(_groupID, "", _data, _respFunc); + RPCIMPL_LOG(TRACE) << LOG_BADGE("genericMethod") << LOG_KV("group", _groupID) + << LOG_KV("request", _data); +} + +void JsonRpcImpl::genericMethod(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + m_sender(_groupID, name, _data, _respFunc); + RPCIMPL_LOG(TRACE) << LOG_BADGE("genericMethod") << LOG_KV("group", _groupID) + << LOG_KV("nodeName", name) << LOG_KV("request", _data); +} + +void JsonRpcImpl::call(const std::string& _groupID, const std::string& _nodeName, + const std::string& _to, const std::string& _data, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_to); + params.append(_data); + + auto request = m_factory->buildRequest("call", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("call") << LOG_KV("request", s); +} + +void JsonRpcImpl::sendTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, bool _requireProof, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + auto groupInfo = m_service->getGroupInfo(_groupID); + if (!groupInfo) + { + auto error = std::make_shared(bcos::boostssl::ws::WsError::EndPointNotExist, + "the group does not exist, group: " + _groupID); + _respFunc(error, nullptr); + return; + } + + auto txBytes = fromHexString(_data); + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_data); + params.append(_requireProof); + + auto request = m_factory->buildRequest("sendTransaction", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("sendTransaction") << LOG_KV("request", s); +} + +void JsonRpcImpl::getTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_txHash); + params.append(_requireProof); + + auto request = m_factory->buildRequest("getTransaction", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getTransaction") << LOG_KV("request", s); +} + +void JsonRpcImpl::getTransactionReceipt(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_txHash); + params.append(_requireProof); + + auto request = m_factory->buildRequest("getTransactionReceipt", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getTransactionReceipt") << LOG_KV("request", s); +} + +void JsonRpcImpl::getBlockByHash(const std::string& _groupID, const std::string& _nodeName, + const std::string& _blockHash, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_blockHash); + params.append(_onlyHeader); + params.append(_onlyTxHash); + + auto request = m_factory->buildRequest("getBlockByHash", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getBlockByHash") << LOG_KV("request", s); +} + +void JsonRpcImpl::getBlockByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_blockNumber); + params.append(_onlyHeader); + params.append(_onlyTxHash); + + auto request = m_factory->buildRequest("getBlockByNumber", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getBlockByNumber") << LOG_KV("request", s); +} + +void JsonRpcImpl::getBlockHashByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_blockNumber); + + auto request = m_factory->buildRequest("getBlockHashByNumber", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getBlockHashByNumber") << LOG_KV("request", s); +} + +void JsonRpcImpl::getBlockNumber( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getBlockNumber", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getBlockNumber") << LOG_KV("request", s); +} + +void JsonRpcImpl::getCode(const std::string& _groupID, const std::string& _nodeName, + const std::string _contractAddress, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_contractAddress); + + auto request = m_factory->buildRequest("getCode", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getCode") << LOG_KV("request", s); +} + +void JsonRpcImpl::getSealerList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getSealerList", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getSealerList") << LOG_KV("request", s); +} + +void JsonRpcImpl::getObserverList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getObserverList", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getObserverList") << LOG_KV("request", s); +} + +void JsonRpcImpl::getPbftView( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getPbftView", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getPbftView") << LOG_KV("request", s); +} + +void JsonRpcImpl::getPendingTxSize( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getPendingTxSize", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getPendingTxSize") << LOG_KV("request", s); +} + +void JsonRpcImpl::getSyncStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getSyncStatus", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getSyncStatus") << LOG_KV("request", s); +} + +void JsonRpcImpl::getConsensusStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getConsensusStatus", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getConsensusStatus") << LOG_KV("request", s); +} + +void JsonRpcImpl::getSystemConfigByKey(const std::string& _groupID, const std::string& _nodeName, + const std::string& _keyValue, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + params.append(_keyValue); + + auto request = m_factory->buildRequest("getSystemConfigByKey", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getSystemConfigByKey") << LOG_KV("request", s); +} + +void JsonRpcImpl::getTotalTransactionCount( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + std::string name = _nodeName; + if (name.empty()) + { + m_service->randomGetHighestBlockNumberNode(_groupID, name); + } + + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(name); + + auto request = m_factory->buildRequest("getTotalTransactionCount", params); + auto s = request->toJson(); + m_sender(_groupID, name, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getTotalTransactionCount") << LOG_KV("request", s); +} + +void JsonRpcImpl::getPeers(RespFunc _respFunc) +{ + Json::Value params = Json::Value(Json::arrayValue); + auto request = m_factory->buildRequest("getPeers", params); + auto s = request->toJson(); + m_sender("", "", s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getPeers") << LOG_KV("request", s); +} + +void JsonRpcImpl::getGroupList(RespFunc _respFunc) +{ + Json::Value params = Json::Value(Json::arrayValue); + auto request = m_factory->buildRequest("getGroupList", params); + auto s = request->toJson(); + m_sender("", "", s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getGroupList") << LOG_KV("request", s); +} + +void JsonRpcImpl::getGroupInfo(const std::string& _groupID, RespFunc _respFunc) +{ + JsonResponse jsonResp; + jsonResp.jsonrpc = "2.0"; + jsonResp.id = m_factory->nextId(); + bool hitCache = false; + + auto groupInfo = m_service->getGroupInfo(_groupID); + if (groupInfo) + { + jsonResp.result = m_groupInfoCodec->serialize(groupInfo); + hitCache = true; + } + else + { + jsonResp.result = Json::Value(Json::nullValue); + hitCache = false; + } + + auto jsonString = jsonResp.toJsonString(); + auto jsonData = std::make_shared(jsonString.begin(), jsonString.end()); + _respFunc(nullptr, jsonData); + + RPCIMPL_LOG(INFO) << LOG_BADGE("getGroupInfo") << LOG_BADGE("get group info from cache") + << LOG_KV("hitCache", hitCache) << LOG_KV("response", jsonString); +} + +void JsonRpcImpl::getGroupInfoList(RespFunc _respFunc) +{ + Json::Value params = Json::Value(Json::arrayValue); + + auto request = m_factory->buildRequest("getGroupInfoList", params); + auto s = request->toJson(); + m_sender("", "", s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getGroupNodeInfo") << LOG_KV("request", s); +} + +void JsonRpcImpl::getGroupNodeInfo( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) +{ + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + params.append(_nodeName); + + auto request = m_factory->buildRequest("getGroupNodeInfo", params); + auto s = request->toJson(); + m_sender(_groupID, _nodeName, s, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getGroupNodeInfo") << LOG_KV("request", s); +} + +void JsonRpcImpl::getGroupPeers(std::string const& _groupID, RespFunc _respFunc) +{ + Json::Value params = Json::Value(Json::arrayValue); + params.append(_groupID); + + auto request = m_factory->buildRequest("getGroupPeers", params); + auto requestStr = request->toJson(); + m_sender("", "", requestStr, _respFunc); + RPCIMPL_LOG(DEBUG) << LOG_BADGE("getGroupPeers") << LOG_KV("request", requestStr); +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.h b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.h new file mode 100644 index 0000000..f30239f --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcImpl.h @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RpcInterface.h + * @author: octopus + * @date 2021-08-10 + */ + +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace jsonrpc +{ +using JsonRpcSendFunc = std::function; + +class JsonRpcImpl : public JsonRpcInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + JsonRpcImpl(bcos::group::GroupInfoCodec::Ptr _groupInfoCodec) + : m_groupInfoCodec(_groupInfoCodec) + {} + + virtual ~JsonRpcImpl() { stop(); } + +public: + virtual void start() override; + virtual void stop() override; + +public: + //------------------------------------------------------------------------------------- + virtual void genericMethod(const std::string& _data, RespFunc _respFunc) override; + + virtual void genericMethod( + const std::string& _groupID, const std::string& _data, RespFunc _respFunc) override; + + virtual void genericMethod(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, RespFunc _respFunc) override; + //------------------------------------------------------------------------------------- + + virtual void call(const std::string& _groupID, const std::string& _nodeName, + const std::string& _to, const std::string& _data, RespFunc _respFunc) override; + + virtual void sendTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, bool _requireProof, RespFunc _respFunc) override; + + virtual void getTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) override; + + virtual void getTransactionReceipt(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) override; + + virtual void getBlockByHash(const std::string& _groupID, const std::string& _nodeName, + const std::string& _blockHash, bool _onlyHeader, bool _onlyTxHash, + RespFunc _respFunc) override; + + virtual void getBlockByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) override; + + virtual void getBlockHashByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, RespFunc _respFunc) override; + + virtual void getBlockNumber( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getCode(const std::string& _groupID, const std::string& _nodeName, + const std::string _contractAddress, RespFunc _respFunc) override; + + virtual void getSealerList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getObserverList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getPbftView( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getPendingTxSize( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getSyncStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getConsensusStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getSystemConfigByKey(const std::string& _groupID, const std::string& _nodeName, + const std::string& _keyValue, RespFunc _respFunc) override; + + virtual void getTotalTransactionCount( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + virtual void getGroupPeers(std::string const& _groupID, RespFunc _respFunc) override; + + virtual void getPeers(RespFunc _respFunc) override; + + virtual void getGroupList(RespFunc _respFunc) override; + + virtual void getGroupInfo(const std::string& _groupID, RespFunc _respFunc) override; + + virtual void getGroupInfoList(RespFunc _respFunc) override; + + virtual void getGroupNodeInfo( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) override; + + +public: + JsonRpcRequestFactory::Ptr factory() const { return m_factory; } + void setFactory(JsonRpcRequestFactory::Ptr _factory) { m_factory = _factory; } + + JsonRpcSendFunc sender() const { return m_sender; } + void setSender(JsonRpcSendFunc _sender) { m_sender = _sender; } + + std::shared_ptr service() const { return m_service; } + void setService(std::shared_ptr _service) + { + m_service = _service; + } + +private: + std::shared_ptr m_service; + JsonRpcRequestFactory::Ptr m_factory; + std::function + m_sender; + bcos::group::GroupInfoCodec::Ptr m_groupInfoCodec; +}; + +} // namespace jsonrpc +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcInterface.h b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcInterface.h new file mode 100644 index 0000000..cd68acc --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcInterface.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file JsonRPCInterface.h + * @author: octopus + * @date 2021-05-24 + */ + +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace jsonrpc +{ +using RespFunc = std::function)>; + +class JsonRpcInterface +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + + JsonRpcInterface() = default; + virtual ~JsonRpcInterface() {} + +public: + virtual void start() = 0; + virtual void stop() = 0; + +public: + //------------------------------------------------------------------------------------- + virtual void genericMethod(const std::string& _data, RespFunc _respFunc) = 0; + virtual void genericMethod( + const std::string& _groupID, const std::string& _data, RespFunc _respFunc) = 0; + virtual void genericMethod(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, RespFunc _respFunc) = 0; + //------------------------------------------------------------------------------------- + + virtual void call(const std::string& _groupID, const std::string& _nodeName, + const std::string& _to, const std::string& _data, RespFunc _respFunc) = 0; + + virtual void sendTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _data, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getTransaction(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getTransactionReceipt(const std::string& _groupID, const std::string& _nodeName, + const std::string& _txHash, bool _requireProof, RespFunc _respFunc) = 0; + + virtual void getBlockByHash(const std::string& _groupID, const std::string& _nodeName, + const std::string& _blockHash, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) = 0; + + virtual void getBlockByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) = 0; + + virtual void getBlockHashByNumber(const std::string& _groupID, const std::string& _nodeName, + int64_t _blockNumber, RespFunc _respFunc) = 0; + + virtual void getBlockNumber( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getCode(const std::string& _groupID, const std::string& _nodeName, + const std::string _contractAddress, RespFunc _respFunc) = 0; + + virtual void getSealerList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getObserverList( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getPbftView( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getPendingTxSize( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getSyncStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getConsensusStatus( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getSystemConfigByKey(const std::string& _groupID, const std::string& _nodeName, + const std::string& _keyValue, RespFunc _respFunc) = 0; + + virtual void getTotalTransactionCount( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; + + virtual void getGroupPeers(std::string const& _groupID, RespFunc _respFunc) = 0; + + virtual void getPeers(RespFunc _respFunc) = 0; + + virtual void getGroupList(RespFunc _respFunc) = 0; + + virtual void getGroupInfo(const std::string& _groupID, RespFunc _respFunc) = 0; + + virtual void getGroupInfoList(RespFunc _respFunc) = 0; + + virtual void getGroupNodeInfo( + const std::string& _groupID, const std::string& _nodeName, RespFunc _respFunc) = 0; +}; + +} // namespace jsonrpc +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.cpp b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.cpp new file mode 100644 index 0000000..91b045e --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file JsonRpcRequest.cpp + * @author: octopus + * @date 2021-05-24 + */ + +#include +#include +#include + +using namespace bcos; +using namespace cppsdk; +using namespace jsonrpc; + +std::string JsonRpcRequest::toJson() +{ + Json::Value jReq; + jReq["jsonrpc"] = m_jsonrpc; + jReq["method"] = m_method; + jReq["id"] = m_id; + jReq["params"] = params(); + + Json::FastWriter writer; + std::string s = writer.write(jReq); + RPCREQ_LOG(TRACE) << LOG_BADGE("toJson") << LOG_KV("request", s); + return s; +} + +void JsonRpcRequest::fromJson(const std::string& _request) +{ + Json::Value root; + Json::Reader jsonReader; + std::string errorMessage; + + try + { + std::string jsonrpc = ""; + std::string method = ""; + int64_t id = 0; + do + { + if (!jsonReader.parse(_request, root)) + { + errorMessage = "invalid request json object"; + break; + } + + if (!root.isMember("jsonrpc")) + { + errorMessage = "request has no jsonrpc field"; + break; + } + jsonrpc = root["jsonrpc"].asString(); + + if (!root.isMember("method")) + { + errorMessage = "request has no method field"; + break; + } + method = root["method"].asString(); + + if (root.isMember("id")) + { + id = root["id"].asInt64(); + } + + if (!root.isMember("params")) + { + errorMessage = "request has no params field"; + break; + } + + if (!root["params"].isArray()) + { + errorMessage = "request params is not array object"; + break; + } + + auto jParams = root["params"]; + + m_jsonrpc = jsonrpc; + m_method = method; + m_id = id; + m_params = jParams; + + // RPCREQ_LOG(DEBUG) << LOG_BADGE("fromJson") << LOG_KV("method", method) + // << LOG_KV("request", _request); + + return; + + } while (0); + } + catch (const std::exception& e) + { + RPCREQ_LOG(WARNING) << LOG_BADGE("fromJson") << LOG_KV("request", _request) + << LOG_KV("error", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION( + JsonRpcException(JsonRpcError::ParseError, "Invalid JSON was received by the server.")); + } + + RPCREQ_LOG(WARNING) << LOG_BADGE("fromJson") << LOG_KV("request", _request) + << LOG_KV("errorMessage", errorMessage); + + BOOST_THROW_EXCEPTION(JsonRpcException( + JsonRpcError::InvalidRequest, "The JSON sent is not a valid Request object.")); +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.h b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.h new file mode 100644 index 0000000..54d06d0 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/rpc/JsonRpcRequest.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file JsonRpcRequest.h + * @author: octopus + * @date 2021-08-10 + */ + +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace jsonrpc +{ +class JsonRpcException : public std::exception +{ +public: + JsonRpcException(int32_t _code, std::string const& _msg) : m_code(_code), m_msg(_msg) {} + virtual const char* what() const noexcept override { return m_msg.c_str(); } + +public: + int32_t code() const noexcept { return m_code; } + std::string msg() const noexcept { return m_msg; } + +private: + int32_t m_code; + std::string m_msg; +}; + +enum JsonRpcError : int32_t +{ + ParseError = -32700, + InvalidRequest = -32600, + MethodNotFound = -32601, + InvalidParams = -32602, + InternalError = -32603 + // -32000 to -32099: Server error Reserved for implementation-defined server-errors. +}; + +class JsonRpcRequest +{ +public: + using Ptr = std::shared_ptr; + + JsonRpcRequest() {} + ~JsonRpcRequest() {} + +public: + void setJsonrpc(const std::string _jsonrpc) { m_jsonrpc = _jsonrpc; } + std::string jsonrpc() { return m_jsonrpc; } + void setMethod(const std::string _method) { m_method = _method; } + std::string method() { return m_method; } + void setId(int64_t _id) { m_id = _id; } + int64_t id() { return m_id; } + Json::Value params() { return m_params; } + void setParams(const Json::Value& _params) { m_params = _params; } + +public: + std::string toJson(); + void fromJson(const std::string& _request); + +private: + std::string m_jsonrpc = "2.0"; + std::string m_method; + int64_t m_id{1}; + Json::Value m_params; +}; + +class JsonRpcRequestFactory +{ +public: + using Ptr = std::shared_ptr; + JsonRpcRequestFactory() {} + +public: + JsonRpcRequest::Ptr buildRequest() + { + auto request = std::make_shared(); + request->setId(nextId()); + return request; + } + + JsonRpcRequest::Ptr buildRequest(const std::string& _method, const Json::Value& _params) + { + auto request = buildRequest(); + request->setMethod(_method); + request->setParams(_params); + return request; + } + + int64_t nextId() + { + int64_t _id = ++id; + return _id; + } + +private: + std::atomic id{0}; +}; + +} // namespace jsonrpc +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.cpp b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.cpp new file mode 100644 index 0000000..1f7b71e --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.cpp @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI serialize and deserialize tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#include + +using namespace std; +using namespace bcos; +using namespace bcos::codec::abi; + +const int ContractABICodec::MAX_BYTE_LENGTH; + +bool ContractABICodec::abiOutByFuncSelector( + bytesConstRef _data, const std::vector& _allTypes, std::vector& _out) +{ + data = _data; + offset = 0; + + for (const std::string& type : _allTypes) + { + if ("int" == type || "int256" == type) + { + s256 s; + deserialize(s, offset); + _out.push_back(toString(s)); + } + else if ("uint" == type || "uint256" == type) + { + u256 u; + deserialize(u, offset); + _out.push_back(toString(u)); + } + else if ("address" == type) + { + Address addr; + deserialize(addr, offset); + _out.push_back(addr.hex()); + } + else if ("string" == type) + { + u256 stringOffset; + deserialize(stringOffset, offset); + + std::string str; + deserialize(str, static_cast(stringOffset)); + _out.push_back(str); + } + else + { // unsupported type + return false; + } + + offset += MAX_BYTE_LENGTH; + } + + return true; +} + +// unsigned integer type uint256. +bytes ContractABICodec::serialise(const int& _in) +{ + return serialise((s256)_in); +} + +// unsigned integer type uint256. +bytes ContractABICodec::serialise(const u256& _in) +{ + return h256(_in).asBytes(); +} + +// two’s complement signed integer type int256. +bytes ContractABICodec::serialise(const s256& _in) +{ + return h256(_in.convert_to()).asBytes(); +} + +// equivalent to uint8 restricted to the values 0 and 1. For computing the function selector, +// bool is used +bytes ContractABICodec::serialise(const bool& _in) +{ + return h256(u256(_in ? 1 : 0)).asBytes(); +} + +// equivalent to uint160, except for the assumed interpretation and language typing. For +// computing the function selector, address is used. +// bool is used. +bytes ContractABICodec::serialise(const Address& _in) +{ + return bytes(12, 0) + _in.asBytes(); +} + +// binary type of 32 bytes +bytes ContractABICodec::serialise(const string32& _in) +{ + bytes ret(32, 0); + bytesConstRef((byte const*)_in.data(), 32).populate(bytesRef(&ret)); + return ret; +} + +bytes ContractABICodec::serialise(const bytes& _in) +{ + bytes ret; + ret = h256(u256(_in.size())).asBytes(); + ret.resize(ret.size() + (_in.size() + 31) / MAX_BYTE_LENGTH * MAX_BYTE_LENGTH); + bytesConstRef(&_in).populate(bytesRef(&ret).getCroppedData(32)); + return ret; +} + +// dynamic sized unicode string assumed to be UTF-8 encoded. +bytes ContractABICodec::serialise(const std::string& _in) +{ + bytes ret; + ret = h256(u256(_in.size())).asBytes(); + ret.resize(ret.size() + (_in.size() + 31) / MAX_BYTE_LENGTH * MAX_BYTE_LENGTH); + bytesConstRef(&_in).populate(bytesRef(&ret).getCroppedData(32)); + return ret; +} + +void ContractABICodec::deserialize(s256& out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 u = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + if (u > u256("0x8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) + { + auto r = + (bcos::u256("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") - u) + + 1; + out = s256("-" + r.str()); + } + else + { + out = u.convert_to(); + } +} + +void ContractABICodec::deserialize(u256& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + _out = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); +} + +void ContractABICodec::deserialize(bool& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 ret = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + _out = ret > 0 ? true : false; +} + +void ContractABICodec::deserialize(Address& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + data.getCroppedData(_offset + MAX_BYTE_LENGTH - 20, 20).populate(_out.ref()); +} + +void ContractABICodec::deserialize(string32& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + data.getCroppedData(_offset, MAX_BYTE_LENGTH) + .populate(bytesRef((byte*)_out.data(), MAX_BYTE_LENGTH)); +} + +void ContractABICodec::deserialize(std::string& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 len = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + validOffset(_offset + MAX_BYTE_LENGTH + (std::size_t)len - 1); + auto result = data.getCroppedData(_offset + MAX_BYTE_LENGTH, static_cast(len)); + _out.assign((const char*)result.data(), result.size()); +} + +void ContractABICodec::deserialize(bytes& _out, std::size_t _offset) +{ + validOffset(_offset + MAX_BYTE_LENGTH - 1); + + u256 len = fromBigEndian(data.getCroppedData(_offset, MAX_BYTE_LENGTH)); + validOffset(_offset + MAX_BYTE_LENGTH + (std::size_t)len - 1); + _out = data.getCroppedData(_offset + MAX_BYTE_LENGTH, static_cast(len)).toBytes(); +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.h b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.h new file mode 100644 index 0000000..de36698 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABICodec.h @@ -0,0 +1,651 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI serialize and deserialize tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace abi +{ +// check if T type of uint256, int256, bool, string, bytes32 +template +struct ABIElementType : std::false_type +{ +}; + +// string +template <> +struct ABIElementType : std::true_type +{ +}; + +template <> +struct ABIElementType : std::true_type +{ +}; + +template <> +struct ABIElementType : std::true_type +{ +}; + +// uint256 +template <> +struct ABIElementType : std::true_type +{ +}; + +// int256 +template <> +struct ABIElementType : std::true_type +{ +}; + +// bool +template <> +struct ABIElementType : std::true_type +{ +}; + +// byte32 +template <> +struct ABIElementType : std::true_type +{ +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value && ABIElementType::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = + ABIElementType::value && ABIElementType>::value; +}; + +template +struct ABIElementType> +{ + static bool constexpr value = ABIElementType::value; +}; + +// check if T type of string +template +struct ABIStringType : std::false_type +{ +}; + +template <> +struct ABIStringType : std::true_type +{ +}; + +// check if type of static array +template +struct ABIStaticArray : std::false_type +{ +}; + +// stringN type => bytesN +template +struct ABIStaticArray> : std::false_type +{ +}; + +// a fixed-length array of N elements of type T. +template +struct ABIStaticArray> : std::true_type +{ +}; + +// check if type of dynamic array +template +struct ABIDynamicArray : std::false_type +{ +}; + +// a fixed-length array of N elements of type T. +template +struct ABIDynamicArray> : std::true_type +{ +}; + +template +struct ABIDynamicTuple : std::false_type +{ +}; + +template +struct ABIDynamicTuple> : std::true_type +{ +}; + +template +struct ABIDynamicTuple> : std::true_type +{ +}; + +// Definition: The following types are called “dynamic”: +// bytes +// string +// T[] for any T +// T[k] for any dynamic T and any k >= 0 +// (T1,...,Tk) if Ti is dynamic for some 1 <= i <= k +template +struct ABIDynamicType : std::false_type +{ +}; + +template +struct remove_dimension +{ + typedef T type; +}; + +template +struct remove_dimension> +{ + typedef typename remove_dimension::type type; +}; + +template +struct ABIDynamicType::type>::value || + ABIDynamicArray::type>::value || + ABIDynamicTuple::type>::value>::type> + : std::true_type +{ +}; + +// fixed length of type, default 1 except static array type +template +struct Length +{ + enum + { + value = 1 + }; +}; + +// length of static array type +template +struct Length::value && !ABIDynamicType::value>::type> +{ + enum + { + value = std::tuple_size::value * Length::type>::value + }; +}; + +// static offset for types +template +struct Offset; + +template +struct Offset +{ + enum + { + value = Offset::value + Offset::value + }; +}; + +template <> +struct Offset<> +{ + enum + { + value = 0 + }; +}; + +template +struct Offset +{ + enum + { + value = Length::value + }; +}; + +/** + * @brief Class for Solidity ABI + * @by octopuswang + * + * Class for serialise and deserialize c++ object in Solidity ABI format. + * @ref https://solidity.readthedocs.io/en/develop/abi-spec.html + */ +class ContractABICodec +{ +public: + explicit ContractABICodec(bcos::crypto::Hash::Ptr _hashImpl) : m_hashImpl(_hashImpl) {} + + template + bytes serialise(const T& _t) + { // unsupported type + (void)_t; + static_assert(ABIElementType::value, "ABI not support type."); + return bytes{}; + } + // unsigned integer type int. + bytes serialise(const int& _in); + + // unsigned integer type uint256. + bytes serialise(const u256& _in); + + // two’s complement signed integer type int256. + bytes serialise(const s256& _in); + + // equivalent to uint8 restricted to the values 0 and 1. For computing the function selector, + // bool is used + bytes serialise(const bool& _in); + + // equivalent to uint160, except for the assumed interpretation and language typing. For + // computing the function selector, address is used. + // bool is used. + bytes serialise(const Address& _in); + + // binary type of 32 bytes + bytes serialise(const string32& _in); + + bytes serialise(const bytes& _in); + + // dynamic sized unicode string assumed to be UTF-8 encoded. + bytes serialise(const std::string& _in); + + // static array + template + bytes serialise(const std::array& _in); + // dynamic array + template + bytes serialise(const std::vector& _in); + + // dynamic tuple + template + bytes serialise(const std::tuple& _in); + + template + void deserialize(const T& _t, std::size_t _offset) + { // unsupported type + (void)_t; + (void)_offset; + static_assert(ABIElementType::value, "ABI not support type."); + } + + void deserialize(s256& out, std::size_t _offset); + + void deserialize(u256& _out, std::size_t _offset); + + void deserialize(bool& _out, std::size_t _offset); + + void deserialize(Address& _out, std::size_t _offset); + + void deserialize(string32& _out, std::size_t _offset); + + void deserialize(std::string& _out, std::size_t _offset); + void deserialize(bytes& _out, std::size_t _offset); + + // static array + template + void deserialize(std::array& _out, std::size_t _offset); + // dynamic array + template + void deserialize(std::vector& _out, std::size_t _offset); + + template + void deserialize(std::tuple& out, std::size_t _offset); + +private: + bcos::crypto::Hash::Ptr m_hashImpl; + static const int MAX_BYTE_LENGTH = 32; + // encode or decode offset + std::size_t offset{0}; + // encode temp bytes + bytes fixed; + bytes dynamic; + + // decode data + bytesConstRef data; + +private: + size_t getOffset() { return offset; } + // check if offset valid and std::length_error will be throw + void validOffset(std::size_t _offset) + { + if (_offset >= data.size()) + { + std::stringstream ss; + ss << " deserialize failed, invalid offset , offset is " << _offset << " , length is " + << data.size() << " , data is " << *toHexString(data); + + throw std::length_error(ss.str().c_str()); + } + } + + template + std::string toString(const T& _t) + { + std::stringstream ss; + ss << _t; + return ss.str(); + } + + inline void abiInAux() { return; } + + template + void abiInAux(T const& _t, U const&... _u) + { + bytes out = serialise(_t); + + if (ABIDynamicType::value) + { // dynamic type + dynamic += out; + fixed += serialise((u256)offset); + offset += out.size(); + } + else + { // static type + fixed += out; + } + + abiInAux(_u...); + } + + void abiOutAux() { return; } + + template + void abiOutAux(T& _t, U&... _u) + { + std::size_t _offset = offset; + // dynamic type, offset position + if (ABIDynamicType::value) + { + u256 dynamicOffset; + deserialize(dynamicOffset, offset); + _offset = static_cast(dynamicOffset); + } + + deserialize(_t, _offset); + // update offset + offset = offset + Offset::value * MAX_BYTE_LENGTH; + // decode next element + abiOutAux(_u...); + } + + template + void traverseTuple(std::tuple& tuple, F func, std::index_sequence) + { + return (void(func(std::get(tuple))), ...); + } + + template + void traverseTuple(std::tuple& tuple, F func) + { + traverseTuple(tuple, func, std::make_index_sequence()); + } + +public: + template + bool abiOut(bytesConstRef _data, T&... _t) + { + data = _data; + offset = 0; + try + { + abiOutAux(_t...); + return true; + } + catch (...) + { // error occur + return false; + } + } + + template + bool abiOutHex(const std::string& _data, T&... _t) + { + auto dataFromHex = *fromHexString(_data); + return abiOut(bytesConstRef(&dataFromHex), _t...); + } + + bool abiOutByFuncSelector(bytesConstRef _data, const std::vector& _allTypes, + std::vector& _out); + + template + bytes abiIn(const std::string& _sig, T const&... _t) + { + offset = Offset::value * MAX_BYTE_LENGTH; + fixed.clear(); + dynamic.clear(); + + abiInAux(_t...); + + return _sig.empty() ? + fixed + dynamic : + m_hashImpl->hash(_sig).ref().getCroppedData(0, 4).toBytes() + fixed + dynamic; + } + + template + std::string abiInHex(const std::string& _sig, T const&... _t) + { + return *toHexString(abiIn(_sig, _t...)); + } +}; + +// a fixed-length array of elements of the given type. +template +bytes ContractABICodec::serialise(const std::array& _in) +{ + bytes offset_bytes; + bytes content; + + auto length = N * MAX_BYTE_LENGTH; + + for (const auto& e : _in) + { + bytes out = serialise(e); + content += out; + if (ABIDynamicType::value) + { // dynamic + offset_bytes += serialise(static_cast(length)); + length += out.size(); + } + } + + return offset_bytes + content; +} + +// a variable-length array of elements of the given type. +template +bytes ContractABICodec::serialise(const std::vector& _in) +{ + bytes offset_bytes; + bytes content; + + auto length = _in.size() * MAX_BYTE_LENGTH; + + offset_bytes += serialise(static_cast(_in.size())); + for (const auto& t : _in) + { + bytes out = serialise(t); + content += out; + if (ABIDynamicType::value) + { // dynamic + offset_bytes += serialise(static_cast(length)); + length += out.size(); + } + } + + return offset_bytes + content; +} + +template +bytes ContractABICodec::serialise(const std::tuple& _in) +{ + bytes offsetBytes; + bytes dynamicContent; + auto tupleSize = std::tuple_size::type>::value; + auto length = tupleSize * MAX_BYTE_LENGTH; + + traverseTuple(const_cast&>(_in), [&](auto& _tupleItem) { + bytes out = serialise(_tupleItem); + + if (ABIDynamicType::type>::type>::value) + { + // dynamic + dynamicContent += out; + offsetBytes += serialise(static_cast(length)); + length += out.size(); + } + else + { + // static + offsetBytes += out; + } + }); + return offsetBytes + dynamicContent; +} + +template +void ContractABICodec::deserialize(std::array& _out, std::size_t _offset) +{ + for (std::size_t u = 0; u < N; ++u) + { + auto thisOffset = _offset; + + if (ABIDynamicType::value) + { // dynamic type + // N element offset + u256 length; + deserialize(length, _offset + u * Offset::value * MAX_BYTE_LENGTH); + thisOffset = thisOffset + static_cast(length); + } + else + { + thisOffset = _offset + u * Offset::value * MAX_BYTE_LENGTH; + } + deserialize(_out[u], thisOffset); + } +} + +template +void ContractABICodec::deserialize(std::vector& _out, std::size_t _offset) +{ + u256 length; + // vector length + deserialize(length, _offset); + _offset += MAX_BYTE_LENGTH; + _out.resize(static_cast(length)); + + for (std::size_t u = 0; u < static_cast(length); ++u) + { + std::size_t thisOffset = _offset; + + if (ABIDynamicType::value) + { // dynamic type + // N element offset + u256 thisEleOffset; + deserialize(thisEleOffset, _offset + u * Offset::value * MAX_BYTE_LENGTH); + thisOffset += static_cast(thisEleOffset); + } + else + { + thisOffset = _offset + u * Offset::value * MAX_BYTE_LENGTH; + } + deserialize(_out[u], thisOffset); + } +} + +template +void ContractABICodec::deserialize(std::tuple& _out, std::size_t _offset) +{ + std::size_t localOffset = _offset; + std::size_t tupleOffset = 0; + traverseTuple(_out, [&](auto& _tupleItem) { + if (ABIDynamicType::type>::type>::value) + { + // dynamic + u256 dynamicOffset; + deserialize(dynamicOffset, _offset + tupleOffset); + localOffset = _offset + static_cast(dynamicOffset); + deserialize(_tupleItem, localOffset); + } + else + { + // static + deserialize(_tupleItem, _offset + tupleOffset); + } + tupleOffset += + Offset::type>::type>::value * + MAX_BYTE_LENGTH; + }); +} +} // namespace abi + +inline string32 toString32(std::string const& _s) +{ + string32 ret; + for (unsigned i = 0; i < 32; ++i) + ret[i] = i < _s.size() ? _s[i] : 0; + return ret; +} + +inline string32 toString32(bcos::h256 const& _hashData) +{ + string32 ret; + for (unsigned i = 0; i < 32; i++) + { + ret[i] = _hashData[i]; + } + return ret; +} + +inline bcos::h256 fromString32(string32 const& _str) +{ + bcos::h256 hashData; + for (unsigned i = 0; i < 32; i++) + { + hashData[i] = _str[i]; + } + return hashData; +} +} // namespace codec +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.cpp b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.cpp new file mode 100644 index 0000000..c25d262 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.cpp @@ -0,0 +1,280 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI function signature parser tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::codec; +using namespace bcos::codec::abi; + +// uint: unsigned integer type of M bits, 0 < M <= 256, M % 8 == 0. e.g. uint32, uint8, +// uint256. +static const std::set setUint{"uint", "uint8", "uint16", "uint24", "uint32", "uint40", + "uint48", "uint56", "uint64", "uint72", "uint80", "uint88", "uint96", "uint104", "uint112", + "uint120", "uint128", "uint136", "uint144", "uint152", "uint160", "uint168", "uint176", + "uint184", "uint192", "uint200", "uint208", "uint216", "uint224", "uint232", "uint240", + "uint248", "uint256"}; + +// int: two’s complement signed integer type of M bits, 0 < M <= 256, M % 8 == 0. +static const std::set setInt{"int", "int8", "int16", "int24", "int32", "int40", + "int48", "int56", "int64", "int72", "int80", "int88", "int96", "int104", "int112", "int120", + "int128", "int136", "int144", "int152", "int160", "int168", "int176", "int184", "int192", + "int200", "int208", "int216", "int224", "int232", "int240", "int248", "int256"}; + +// bytes: binary type of M bytes, 0 < M <= 32. +static const std::set setByteN{"bytes1", "bytes2", "bytes3", "bytes4", "bytes5", + "bytes6", "bytes7", "bytes8", "bytes9", "bytes10", "bytes11", "bytes12", "bytes13", "bytes14", + "bytes15", "bytes16", "bytes17", "bytes18", "bytes19", "bytes20", "bytes21", "bytes22", + "bytes23", "bytes24", "bytes25", "bytes26", "bytes27", "bytes28", "bytes29", "bytes30", + "bytes31", "bytes32"}; + +// bool: equivalent to uint8 restricted to the values 0 and 1. For computing the function +// selector, bool is used. +const std::string strBool = "bool"; +// bytes: dynamic sized byte sequence. +const std::string strBytes = "bytes"; +// bytes: dynamic sized byte sequence. +const std::string strString = "string"; +// address: equivalent to uint160, except for the assumed interpretation and language typing. +// For computing the function selector, address is used. +const std::string strAddr = "address"; + +// Remove the white space characters on both sides +static void trim(std::string& _str) +{ + _str.erase(0, _str.find_first_not_of(" ")); + _str.erase(_str.find_last_not_of(" ") + 1); +} + +ABI_ELEMENTARY_TYPE ABIInType::getEnumType(const std::string& _strType) +{ + auto type = ABI_ELEMENTARY_TYPE::INVALID; + if (_strType == strBool) + { + type = ABI_ELEMENTARY_TYPE::BOOL; + } + else if (_strType == strAddr) + { + type = ABI_ELEMENTARY_TYPE::ADDR; + } + else if (_strType == strString) + { + type = ABI_ELEMENTARY_TYPE::STRING; + } + else if (_strType == strBytes) + { + type = ABI_ELEMENTARY_TYPE::BYTES; + } + else if (setUint.find(_strType) != setUint.end()) + { + type = ABI_ELEMENTARY_TYPE::UINT; + } + else if (setInt.find(_strType) != setInt.end()) + { + type = ABI_ELEMENTARY_TYPE::INT; + } + else if (setByteN.find(_strType) != setByteN.end()) + { + type = ABI_ELEMENTARY_TYPE::BYTESN; + } + + return type; +} + +void ABIInType::clear() +{ + aet = ABI_ELEMENTARY_TYPE::INVALID; + strEleType.clear(); + strType.clear(); + extents.clear(); +} + +bool ABIInType::reset(const std::string& _s) +{ + clear(); + + std::string strType = _s; + // eg: int[1][2][][3] + // trim blank character + trim(strType); + auto firstLeftBracket = strType.find('['); + // int + std::string strEleType = strType.substr(0, firstLeftBracket); + trim(strEleType); + auto t = getEnumType(strEleType); + // invalid solidity abi string + if (t == ABI_ELEMENTARY_TYPE::INVALID) + { + return false; + } + + // eg : [10][2][3][] + std::vector r; + std::string::size_type leftBracket = firstLeftBracket; + std::string::size_type rigthBracket = 0; + std::string::size_type length = strType.size(); + + while (leftBracket < length) + { + auto leftBracketBak = leftBracket; + leftBracket = strType.find('[', leftBracketBak); + rigthBracket = strType.find(']', leftBracketBak); + + if (leftBracket == std::string::npos || rigthBracket == std::string::npos || + leftBracket >= rigthBracket) + { + // invalid format + return false; + } + + std::string digit = strType.substr(leftBracket + 1, rigthBracket - leftBracket - 1); + trim(digit); + bool ok = + std::all_of(digit.begin(), digit.end(), [](char c) { return c >= '0' && c <= '9'; }); + if (!ok) + { + // invalid format + return false; + } + + if (digit.empty()) + { + r.push_back(0); + } + else + { + std::size_t size = strtoul(digit.c_str(), NULL, 10); + r.push_back(size); + } + + leftBracket = rigthBracket + 1; + } + + this->aet = t; + this->extents = r; + this->strType = strType; + this->strEleType = strEleType; + + return true; +} + +bool ABIInType::dynamic() +{ + // string or bytes + if (aet == ABI_ELEMENTARY_TYPE::STRING || aet == ABI_ELEMENTARY_TYPE::BYTES) + { + return true; + } + + // dynamic array + auto length = rank(); + for (std::size_t i = 0; i < length; ++i) + { + if (extent(i + 1) == 0) + { + return true; + } + } + + return false; +} + +// +bool ABIInType::removeExtent() +{ + auto length = rank(); + if (length > 0) + { + extents.resize(length - 1); + return true; + } + + return false; +} + +std::vector ABIFunc::getParamsType() const +{ + std::vector r; + for (auto it = allParamsType.begin(); it != allParamsType.end(); ++it) + { + r.push_back(it->getType()); + } + + return r; +} + +// parser contract abi function signature, eg: transfer(string,string,uint256) +bool ABIFunc::parser(const std::string& _sig) +{ + auto i0 = _sig.find("("); + auto i1 = _sig.find(")"); + // transfer(string,string,uint256) + if ((i0 == std::string::npos) || (i1 == std::string::npos) || (i1 <= i0)) + { + return false; + } + + // function name , eg: transfer + std::string strFuncName = _sig.substr(0, i0); + trim(strFuncName); + // parameters "string,string,uint256" + std::string strTypes = _sig.substr(i0 + 1, i1 - i0 - 1); + + std::string sig = strFuncName + "("; + + std::vector types; + boost::split(types, strTypes, boost::is_any_of(",")); + ABIInType at; + for (std::string& type : types) + { + trim(type); + if (!type.empty()) + { + sig += type; + sig += ","; + auto ok = at.reset(type); + if (!ok) + { + // invalid format + return false; + } + allParamsType.push_back(at); + continue; + } + } + + if (',' == sig.back()) + { + sig.back() = ')'; + } + else + { + sig += ")"; + } + + // set function name + this->strFuncName = strFuncName; + // set function sigature + this->strFuncSignature = sig; + + return true; +} diff --git a/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.h b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.h new file mode 100644 index 0000000..4a2c289 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractABIType.h @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Contract ABI function signature parser tool. + * @author: octopuswang + * @date: 2019-04-01 + */ + +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace codec +{ +namespace abi +{ +enum class ABI_ELEMENTARY_TYPE +{ // solidity ABI elementary types + INVALID, // invalid + BOOL, // bool + INT, // int8 ~ int256 + UINT, // uint8 ~ uint256 + BYTESN, // bytesN + ADDR, // address + BYTES, // bytes + STRING, // string + FIXED, // fixed, unsupported + UNFIXED // unfixed, unsupported +}; + +class ABIInType +{ +public: + ABIInType() = default; + + bool reset(const std::string& _str); + void clear(); + +public: + // the number of dimensions of T or zero + std::size_t rank() { return extents.size(); } + // obtains the size of an array type along a specified dimension + std::size_t extent(std::size_t index) { return index > rank() ? 0 : extents[index - 1]; } + bool removeExtent(); + bool dynamic(); + bool valid() { return aet != ABI_ELEMENTARY_TYPE::INVALID; } + std::string getType() const { return strType; } + std::string getEleType() const { return strEleType; } + + // get abi elementary type by string + ABI_ELEMENTARY_TYPE getEnumType(const std::string& _strType); + +private: + ABI_ELEMENTARY_TYPE aet{ABI_ELEMENTARY_TYPE::INVALID}; + std::string strEleType; + std::string strType; + std::vector extents; +}; + +using ABIOutType = ABIInType; + +class ABIFunc +{ +private: + std::string strFuncName; + std::string strFuncSignature; + std::vector allParamsType; + +public: + // parser contract abi function signature, eg: transfer(string,string,uint256) + bool parser(const std::string& _sig); + +public: + std::vector getParamsType() const; + inline std::string getSignature() const { return strFuncSignature; } + inline std::string getFuncName() const { return strFuncName; } +}; + +} // namespace abi +} // namespace codec +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractEventTopic.h b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractEventTopic.h new file mode 100644 index 0000000..87aa465 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/utilities/abi/ContractEventTopic.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContractEventTopic.h + * @author: octopus + * @date 2021-09-01 + */ + +#pragma once +#include +#include +#include +#include +#include +#include +#include + +#define CONTRACT_EVENT_TOPIC_LENGTH (64) + +namespace bcos +{ +namespace codec +{ +namespace abi +{ +class ContractEventTopic +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + explicit ContractEventTopic(bcos::crypto::Hash::Ptr _hashImpl) + : m_hashImpl(_hashImpl), m_contractABICodec(_hashImpl) + {} + +public: + bcos::crypto::Hash::Ptr hashImpl() const { return m_hashImpl; } + +public: + /** + * @brief + * + * @param _topic + * @return true + * @return false + */ + static bool validEventTopic(const std::string& _topic) + { + if ((_topic.compare(0, 2, "0x") == 0) || (_topic.compare(0, 2, "0X") == 0)) + { + return _topic.length() == (CONTRACT_EVENT_TOPIC_LENGTH + 2); + } + + return _topic.length() == CONTRACT_EVENT_TOPIC_LENGTH; + } + +public: + // u256 => topic + std::string u256ToTopic(bcos::u256 _u) + { + auto data = m_contractABICodec.serialise(_u); + return toHexStringWithPrefix(data); + } + + // s256 => topic + std::string i256ToTopic(bcos::s256 _i) + { + auto data = m_contractABICodec.serialise(_i); + return toHexStringWithPrefix(data); + } + + // string => topic + std::string stringToTopic(const std::string& _str) + { + auto hashValue = m_hashImpl->hash(_str); + return hashValue.hexPrefixed(); + } + + // bytes => topic + std::string bytesToTopic(const bcos::bytes& _bs) + { + auto hashValue = m_hashImpl->hash(_bs); + return hashValue.hexPrefixed(); + } + + // bytesN(eg:bytes32) => topic + std::string bytesNToTopic(const bcos::bytes& _bsn) + { + if (_bsn.size() > 32) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() + << bcos::errinfo_comment("byteN can't be more than 32 byte.")); + } + + auto temp = _bsn; + temp.resize(32); + + return toHexStringWithPrefix(temp); + } + +private: + bcos::crypto::Hash::Ptr m_hashImpl; + codec::abi::ContractABICodec m_contractABICodec; +}; + +} // namespace abi +} // namespace codec +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.cpp b/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.cpp new file mode 100644 index 0000000..e0234f8 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.cpp @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BlockNumberInfo.cpp + * @author: octopus + * @date 2021-10-04 + */ + +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::service; + +std::string BlockNumberInfo::toJson() +{ + // eg: {"blockNumber": 11, "group": "group", "nodeName": "node"} + + Json::Value jValue; + jValue["group"] = m_group; + jValue["blockNumber"] = m_blockNumber; + jValue["nodeName"] = m_blockNumber; + + Json::FastWriter writer; + std::string s = writer.write(jValue); + return s; +} + +bool BlockNumberInfo::fromJson(const std::string& _json) +{ + std::string errorMessage; + try + { + std::string group; + std::string node; + int64_t blockNumber = -1; + do + { + Json::Value root; + Json::Reader jsonReader; + if (!jsonReader.parse(_json, root)) + { + errorMessage = "invalid json object"; + break; + } + + if (!root.isMember("blockNumber")) + { + errorMessage = "request has no blockNumber field"; + break; + } + blockNumber = root["blockNumber"].asInt64(); + + if (!root.isMember("group")) + { + errorMessage = "request has no group field"; + break; + } + group = root["group"].asString(); + + if (!root.isMember("nodeName")) + { + errorMessage = "request has no nodeName field"; + break; + } + node = root["nodeName"].asString(); + + m_blockNumber = blockNumber; + m_group = group; + m_node = node; + + RPC_BLOCKNUM_LOG(INFO) + << LOG_BADGE("fromJson") << LOG_KV("group", m_group) << LOG_KV("node", m_node) + << LOG_KV("blockNumber", m_blockNumber); + + return true; + + } while (0); + + RPC_BLOCKNUM_LOG(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("Invalid JSON") + << LOG_KV("errorMessage", errorMessage); + } + catch (const std::exception& e) + { + RPC_BLOCKNUM_LOG(WARNING) << LOG_BADGE("fromJson") << LOG_DESC("Invalid JSON") + << LOG_KV("error", boost::diagnostic_information(e)); + } + + return false; +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.h b/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.h new file mode 100644 index 0000000..4d3d6f2 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/BlockNumberInfo.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BlockNumberInfo.h + * @author: octopus + * @date 2021-10-04 + */ + +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace service +{ +class BlockNumberInfo +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + +public: + std::string group() const { return m_group; } + void setGroup(const std::string& _group) { m_group = _group; } + std::string node() const { return m_node; } + void setNode(const std::string& _node) { m_node = _node; } + int64_t blockNumber() const { return m_blockNumber; } + void setBlockNumber(int64_t _blockNumber) { m_blockNumber = _blockNumber; } + +public: + std::string toJson(); + bool fromJson(const std::string& _json); + +private: + std::string m_group; + std::string m_node; + int64_t m_blockNumber; +}; + +} // namespace service +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/bcos-cpp-sdk/ws/Common.h b/bcos-sdk/bcos-cpp-sdk/ws/Common.h new file mode 100644 index 0000000..9a06e48 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/Common.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: octopus + * @date 2021-08-10 + */ + +#pragma once +#include + +#define RPC_WS_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPCWS][SERVICE]" +#define RPC_BLOCKNUM_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPC][BLOCK][NUMBER]" \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.cpp b/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.cpp new file mode 100644 index 0000000..ca9b2ef --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HandshakeResponse.h + * @author: octopus + * @date 2021-10-26 + */ + +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::service; + +bool HandshakeResponse::decode(std::string const& _data) +{ + try + { + Json::Value root; + Json::Reader reader; + if (!reader.parse(_data, root)) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("HandshakeResponse decode: invalid json object") + << LOG_KV("data", _data); + return false; + } + + if (!root.isMember("protocolVersion")) + { + // id field not exist + RPC_WS_LOG(WARNING) << LOG_BADGE( + "HandshakeResponse decode: invalid for empty " + "protocolVersion field") + << LOG_KV("data", _data); + return false; + } + // set protocolVersion + m_protocolVersion = root["protocolVersion"].asInt(); + + if (root.isMember("groupInfoList") && root["groupInfoList"].isArray()) + { + auto& jGroupInfoList = root["groupInfoList"]; + for (Json::ArrayIndex i = 0; i < jGroupInfoList.size(); ++i) + { + Json::FastWriter writer; + std::string str = writer.write(jGroupInfoList[i]); + auto groupInfo = m_groupInfoCodec->deserialize(str); + + RPC_WS_LOG(INFO) << LOG_BADGE("fromJson") << LOG_DESC(" new group info") + << LOG_KV("groupInfo", printGroupInfo(groupInfo)); + + m_groupInfoList.push_back(groupInfo); + } + } + + // "groupBlockNumber": [{"group0": 1}, {"group1": 2}, {"group2": 3}] + if (root.isMember("groupBlockNumber") && root["groupBlockNumber"].isArray()) + { + for (Json::ArrayIndex i = 0; i < root["groupBlockNumber"].size(); ++i) + { + Json::Value jGroupBlockNumber = root["groupBlockNumber"][i]; + for (auto const& groupID : jGroupBlockNumber.getMemberNames()) + { + int64_t blockNumber = jGroupBlockNumber[groupID].asInt64(); + + m_groupBlockNumber[groupID] = blockNumber; + } + } + } + + RPC_WS_LOG(INFO) << LOG_BADGE("fromJson") << LOG_DESC("parser protocol version") + << LOG_KV("protocolVersion", m_protocolVersion) + << LOG_KV("groupInfoList size", m_groupInfoList.size()) + << LOG_KV("groupBlockNumber size", m_groupBlockNumber.size()); + + return true; + } + catch (const std::exception& e) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("fromJson") + << LOG_DESC("invalid protocol version json string") + << LOG_KV("data", _data) + << LOG_KV("exception", boost::diagnostic_information(e)); + } + return false; +} + +void HandshakeResponse::encode(std::string& _encodedData) const +{ + Json::Value encodedJson; + + encodedJson["protocolVersion"] = m_protocolVersion; + encodedJson["groupInfoList"] = Json::Value(Json::arrayValue); + for (const auto& groupInfo : m_groupInfoList) + { + auto groupInfoResponse = m_groupInfoCodec->serialize(groupInfo); + encodedJson["groupInfoList"].append(groupInfoResponse); + } + + // Encode group block number array + Json::Value groupBlockNumberArray(Json::arrayValue); + for (auto const& groupBlockNumber : m_groupBlockNumber) + { + Json::Value group0(Json::objectValue); + group0[groupBlockNumber.first] = groupBlockNumber.second; + groupBlockNumberArray.append(std::move(group0)); + } + + encodedJson["groupBlockNumber"] = std::move(groupBlockNumberArray); + + Json::FastWriter writer; + _encodedData = writer.write(encodedJson); +} \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.h b/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.h new file mode 100644 index 0000000..6c37b0b --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/HandshakeResponse.h @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HandshakeResponse.h + * @author: octopus + * @date 2021-10-26 + */ + +#pragma once +#include +#include +#include +#include + + +namespace bcos +{ +namespace cppsdk +{ +namespace service +{ +class HandshakeResponse +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + HandshakeResponse(bcos::group::GroupInfoCodec::Ptr _groupInfoCodec) + : m_groupInfoCodec(_groupInfoCodec) + {} + virtual ~HandshakeResponse() {} + + virtual bool decode(std::string const& _data); + virtual void encode(std::string& _encodedData) const; + + int protocolVersion() const { return m_protocolVersion; } + const std::vector& groupInfoList() const + { + return m_groupInfoList; + } + const std::unordered_map& groupBlockNumber() const + { + return m_groupBlockNumber; + } + std::unordered_map& mutableGroupBlockNumber() + { + return m_groupBlockNumber; + } + + void setProtocolVersion(int _protocolVersion) { m_protocolVersion = _protocolVersion; } + void setGroupInfoList(const std::vector& _groupInfoList) + { + m_groupInfoList = _groupInfoList; + } + +private: + std::vector m_groupInfoList; + std::unordered_map m_groupBlockNumber; + bcos::group::GroupInfoCodec::Ptr m_groupInfoCodec; + // Note: the nodes determine the protocol version + uint32_t m_protocolVersion; + bcos::protocol::ProtocolInfo::Ptr m_localProtocol; +}; + +} // namespace service +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/bcos-cpp-sdk/ws/Service.cpp b/bcos-sdk/bcos-cpp-sdk/ws/Service.cpp new file mode 100644 index 0000000..d5880f2 --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/Service.cpp @@ -0,0 +1,783 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Service.cpp + * @author: octopus + * @date 2021-10-22 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::service; +using namespace bcos::boostssl; +using namespace bcos::boostssl::ws; +using namespace bcos; + +static const int32_t BLOCK_LIMIT_RANGE = 500; + +Service::Service(bcos::group::GroupInfoCodec::Ptr _groupInfoCodec, + bcos::group::GroupInfoFactory::Ptr _groupInfoFactory, std::string _moduleName) + : WsService(_moduleName), m_groupInfoCodec(_groupInfoCodec), m_groupInfoFactory(_groupInfoFactory) +{ + m_localProtocol = g_BCOSConfig.protocolInfo(bcos::protocol::ProtocolModuleID::RpcService); + RPC_WS_LOG(INFO) << LOG_DESC("init the local protocol") + << LOG_KV("minVersion", m_localProtocol->minVersion()) + << LOG_KV("maxVersion", m_localProtocol->maxVersion()) + << LOG_KV("module", m_localProtocol->protocolModuleID()); +} + +void Service::start() +{ + bcos::boostssl::ws::WsService::start(); + + waitForConnectionEstablish(); +} + +void Service::stop() +{ + bcos::boostssl::ws::WsService::stop(); +} + +void Service::waitForConnectionEstablish() +{ + auto start = std::chrono::high_resolution_clock::now(); + auto end = start + std::chrono::milliseconds(waitConnectFinishTimeout()); + + while (true) + { + // sleep for connection establish + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + if (handshakeSucCount()) + { + RPC_WS_LOG(INFO) << LOG_BADGE("waitForConnectionEstablish") + << LOG_DESC("wait for websocket connection handshake success") + << LOG_KV("suc count", handshakeSucCount()); + break; + } + + if (std::chrono::high_resolution_clock::now() < end) + { + continue; + } + else + { + stop(); + RPC_WS_LOG(WARNING) << LOG_BADGE("waitForConnectionEstablish") + << LOG_DESC("wait for websocket connection handshake timeout") + << LOG_KV("timeout", waitConnectFinishTimeout()); + + BOOST_THROW_EXCEPTION(std::runtime_error("The websocket connection handshake timeout")); + return; + } + } +} + +void Service::onConnect(Error::Ptr _error, std::shared_ptr _session) +{ + bcos::boostssl::ws::WsService::onConnect(_error, _session); + + startHandshake(_session); +} + +void Service::onDisconnect(Error::Ptr _error, std::shared_ptr _session) +{ + bcos::boostssl::ws::WsService::onDisconnect(_error, _session); + + std::string endPoint = _session ? _session->endPoint() : std::string(); + if (!endPoint.empty()) + { + clearGroupInfoByEp(endPoint); + } +} + +void Service::onRecvMessage(std::shared_ptr _msg, std::shared_ptr _session) +{ + auto seq = _msg->seq(); + if (!checkHandshakeDone(_session)) + { + // Note: The message is received before the handshake with the node is complete + RPC_WS_LOG(WARNING) << LOG_BADGE("onRecvMessage") + << LOG_DESC( + "websocket service unable to handler message before handshake" + "with the node successfully") + << LOG_KV("endpoint", _session ? _session->endPoint() : std::string("")) + << LOG_KV("seq", seq); + + _session->drop(bcos::boostssl::ws::WsError::UserDisconnect); + return; + } + + bcos::boostssl::ws::WsService::onRecvMessage(_msg, _session); +} + +// ---------------------overide end --------------------------------------------------------------- + +// ---------------------send message begin--------------------------------------------------------- +void Service::asyncSendMessageByGroupAndNode(const std::string& _group, const std::string& _node, + std::shared_ptr _msg, bcos::boostssl::ws::Options _options, + bcos::boostssl::ws::RespCallBack _respFunc) +{ + std::set endPoints; + if (_group.empty()) + { + // asyncSendMessage(_msg, _options, _respFunc); + auto ss = sessions(); + for (const auto& session : ss) + { + if (session->isConnected()) + { + endPoints.insert(session->endPoint()); + } + } + + if (endPoints.empty()) + { + auto error = std::make_shared(WsError::EndPointNotExist, + "there has no connection available, maybe all connections disconnected"); + _respFunc(error, nullptr, nullptr); + return; + } + } + else if (_node.empty()) + { + // all connections available for the group + getEndPointsByGroup(_group, endPoints); + if (endPoints.empty()) + { + auto error = std::make_shared(WsError::EndPointNotExist, + "there has no connection available for the group, maybe all connections " + "disconnected or " + "the group does not exist, group: " + + _group); + _respFunc(error, nullptr, nullptr); + return; + } + } + else + { + // all connections available for the node + getEndPointsByGroupAndNode(_group, _node, endPoints); + if (endPoints.empty()) + { + auto error = std::make_shared(WsError::EndPointNotExist, + "there has no connection available for the node of the group, maybe all " + "connections " + "disconnected or the node does not exist, group: " + + _group + " ,node: " + _node); + _respFunc(error, nullptr, nullptr); + return; + } + } + + std::vector vecEndPoints(endPoints.begin(), endPoints.end()); + + auto seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::default_random_engine e(seed); + std::shuffle(vecEndPoints.begin(), vecEndPoints.end(), e); + + asyncSendMessageByEndPoint(*vecEndPoints.begin(), _msg, _options, _respFunc); +} +// ---------------------send message end--------------------------------------------------------- + + +bool Service::checkHandshakeDone(std::shared_ptr _session) +{ + return _session && _session->version(); +} + +void Service::startHandshake(std::shared_ptr _session) +{ + auto message = messageFactory()->buildMessage(); + message->setSeq(messageFactory()->newSeq()); + message->setPacketType(bcos::protocol::MessageType::HANDESHAKE); + bcos::rpc::HandshakeRequest request(m_localProtocol); + auto requestData = request.encode(); + message->setPayload(requestData); + + RPC_WS_LOG(INFO) << LOG_BADGE("startHandshake") + << LOG_KV("endpoint", _session ? _session->endPoint() : std::string("")); + + auto session = _session; + auto service = std::dynamic_pointer_cast(shared_from_this()); + _session->asyncSendMessage(message, Options(m_wsHandshakeTimeout), + [message, session, service](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + if (_error && _error->errorCode() != 0) + { + RPC_WS_LOG(WARNING) + << LOG_BADGE("startHandshake") << LOG_DESC("callback response error") + << LOG_KV("endpoint", session ? session->endPoint() : std::string("")) + << LOG_KV("errorCode", _error ? _error->errorCode() : -1) + << LOG_KV("errorMessage", _error ? _error->errorMessage() : std::string("")); + session->drop(bcos::boostssl::ws::WsError::UserDisconnect); + return; + } + + auto endPoint = session ? session->endPoint() : std::string(""); + auto response = std::string(_msg->payload()->begin(), _msg->payload()->end()); + auto handshakeResponse = std::make_shared(service->m_groupInfoCodec); + if (!handshakeResponse->decode(response)) + { + _session->drop(bcos::boostssl::ws::WsError::UserDisconnect); + + RPC_WS_LOG(WARNING) << LOG_BADGE("startHandshake") + << LOG_DESC("invalid protocol version json string") + << LOG_KV("endpoint", endPoint); + return; + } + + // set protocol version + session->setVersion(handshakeResponse->protocolVersion()); + auto groupInfoList = handshakeResponse->groupInfoList(); + for (auto& groupInfo : groupInfoList) + { + service->updateGroupInfoByEp(endPoint, groupInfo); + + RPC_WS_LOG(DEBUG) << LOG_BADGE("startHandshake") << LOG_DESC("group info") + << LOG_KV("endPoint", endPoint) + << LOG_KV("smCrypto", groupInfo->smCryptoType()) + << LOG_KV("wasm", groupInfo->wasm()); + } + + auto groupBlockNumber = handshakeResponse->groupBlockNumber(); + for (auto entry : groupBlockNumber) + { + service->updateGroupBlockNumber(entry.first, entry.second); + } + + service->increaseHandshakeSucCount(); + service->callWsHandshakeSucHandlers(_session); + + RPC_WS_LOG(INFO) << LOG_BADGE("startHandshake") << LOG_DESC("handshake successfully") + << LOG_KV("endPoint", endPoint) + << LOG_KV("handshake version", _session->version()) + << LOG_KV("groupInfoList size", groupInfoList.size()) + << LOG_KV("groupBlockNumber size", groupBlockNumber.size()) + << LOG_KV("handshake string", response); + }); +} + + +void Service::onNotifyGroupInfo( + const std::string& _groupInfoJson, std::shared_ptr _session) +{ + std::string endPoint = _session->endPoint(); + RPC_WS_LOG(TRACE) << LOG_BADGE("onNotifyGroupInfo") << LOG_KV("endPoint", endPoint) + << LOG_KV("groupInfoJson", _groupInfoJson); + + try + { + auto groupInfo = m_groupInfoCodec->deserialize(_groupInfoJson); + updateGroupInfoByEp(endPoint, groupInfo); + } + catch (const std::exception& e) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("onNotifyGroupInfo") << LOG_KV("endPoint", endPoint) + << LOG_KV("e", boost::diagnostic_information(e)) + << LOG_KV("groupInfoJson", _groupInfoJson); + } +} + +void Service::onNotifyGroupInfo(std::shared_ptr _msg, + std::shared_ptr _session) +{ + std::string groupInfo = std::string(_msg->payload()->begin(), _msg->payload()->end()); + + RPC_WS_LOG(INFO) << LOG_BADGE("onNotifyGroupInfo") << LOG_KV("groupInfo", groupInfo); + + return onNotifyGroupInfo(groupInfo, _session); +} + +void Service::clearGroupInfoByEp(const std::string& _endPoint) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("clearGroupInfoByEp") << LOG_KV("endPoint", _endPoint); + { + boost::unique_lock lock(x_endPointLock); + { + for (auto it = m_group2Node2Endpoints.begin(); it != m_group2Node2Endpoints.end();) + { + for (auto innerIt = it->second.begin(); innerIt != it->second.end();) + { + innerIt->second.erase(_endPoint); + + if (innerIt->second.empty()) + { + RPC_WS_LOG(INFO) + << LOG_BADGE("clearGroupInfoByEp") + << LOG_DESC("group2Node2Endpoints, clear node") + << LOG_KV("group", it->first) << LOG_KV("node", innerIt->first); + innerIt = it->second.erase(innerIt); + } + else + { + innerIt++; + } + } + + if (it->second.empty()) + { + RPC_WS_LOG(INFO) << LOG_BADGE("clearGroupInfoByEp") + << LOG_DESC("group2Node2Endpoints, clear group") + << LOG_KV("group", it->first); + it = m_group2Node2Endpoints.erase(it); + } + else + { + it++; + } + } + } + + { + auto it = m_endPoint2GroupId2GroupInfo.find(_endPoint); + if (it != m_endPoint2GroupId2GroupInfo.end()) + { + m_endPoint2GroupId2GroupInfo.erase(it); + + RPC_WS_LOG(INFO) << LOG_BADGE("clearGroupInfoByEp") << LOG_DESC("clear endPoint") + << LOG_KV("endPoint", _endPoint); + } + } + } + + // Note: for debug + printGroupInfo(); +} + +void Service::clearGroupInfoByEp(const std::string& _endPoint, const std::string& _groupID) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("clearGroupInfoByEp") << LOG_KV("endPoint", _endPoint) + << LOG_KV("group", _groupID); + + { + boost::unique_lock lock(x_endPointLock); + auto it = m_group2Node2Endpoints.find(_groupID); + if (it == m_group2Node2Endpoints.end()) + { + return; + } + + auto& groupMapper = it->second; + for (auto innerIt = groupMapper.begin(); innerIt != groupMapper.end();) + { + innerIt->second.erase(_endPoint); + if (innerIt->second.empty()) + { + RPC_WS_LOG(INFO) << LOG_BADGE("clearGroupInfoByEp") << LOG_DESC("clear node") + << LOG_KV("group", it->first) << LOG_KV("endPoint", _endPoint) + << LOG_KV("node", innerIt->first); + innerIt = it->second.erase(innerIt); + } + else + { + innerIt++; + } + } + } + + // Note: for debug + // printGroupInfo(); +} + +void Service::updateGroupInfoByEp( + const std::string& _endPoint, bcos::group::GroupInfo::Ptr _groupInfo) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("updateGroupInfoByEp") << LOG_KV("endPoint", _endPoint) + << LOG_KV("group", _groupInfo->groupID()) + << LOG_KV("chainID", _groupInfo->chainID()) + << LOG_KV("genesisConfig", _groupInfo->genesisConfig()) + << LOG_KV("iniConfig", _groupInfo->iniConfig()) + << LOG_KV("nodesNum", _groupInfo->nodesNum()); + const auto& group = _groupInfo->groupID(); + const auto& nodes = _groupInfo->nodeInfos(); + + { + updateGroupInfo(_endPoint, _groupInfo); + } + + { + // remove first + clearGroupInfoByEp(_endPoint, group); + } + + { + // update + boost::unique_lock lock(x_endPointLock); + auto& groupMapper = m_group2Node2Endpoints[group]; + for (const auto& node : nodes) + { + auto& nodeMapper = groupMapper[node.first]; + nodeMapper.insert(_endPoint); + } + } + + // Note: for debug + printGroupInfo(); +} + +bool Service::hasEndPointOfNodeAvailable(const std::string& _group, const std::string& _node) +{ + boost::shared_lock lock(x_endPointLock); + auto it = m_group2Node2Endpoints.find(_group); + if (it == m_group2Node2Endpoints.end()) + { + return false; + } + + auto& nodes = it->second; + + return nodes.find(_node) != nodes.end(); +} + +bool Service::getEndPointsByGroup(const std::string& _group, std::set& _endPoints) +{ + boost::shared_lock lock(x_endPointLock); + auto it = m_group2Node2Endpoints.find(_group); + if (it == m_group2Node2Endpoints.end()) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("getEndPointsByGroup") << LOG_DESC("group not exist") + << LOG_KV("group", _group); + return false; + } + + for (auto& nodeMapper : it->second) + { + _endPoints.insert(nodeMapper.second.begin(), nodeMapper.second.end()); + } + + RPC_WS_LOG(TRACE) << LOG_BADGE("getEndPointsByGroup") << LOG_KV("group", _group) + << LOG_KV("endPoints", _endPoints.size()); + return true; +} + +bool Service::getEndPointsByGroupAndNode( + const std::string& _group, const std::string& _node, std::set& _endPoints) +{ + boost::shared_lock lock(x_endPointLock); + auto it = m_group2Node2Endpoints.find(_group); + if (it == m_group2Node2Endpoints.end()) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("getEndPointsByGroupAndNode") + << LOG_DESC("group not exist") << LOG_KV("group", _group) + << LOG_KV("node", _node); + return false; + } + + auto innerIt = it->second.find(_node); + if (innerIt == it->second.end()) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("getEndPointsByGroupAndNode") << LOG_DESC("node not exist") + << LOG_KV("group", _group) << LOG_KV("node", _node); + return false; + } + + _endPoints = innerIt->second; + + RPC_WS_LOG(TRACE) << LOG_BADGE("getEndPointsByGroupAndNode") << LOG_KV("group", _group) + << LOG_KV("node", _node) << LOG_KV("endPoints", _endPoints.size()); + return true; +} + +void Service::printGroupInfo() +{ + boost::shared_lock lock(x_endPointLock); + + RPC_WS_LOG(INFO) << LOG_BADGE("printGroupInfo") + << LOG_KV("total count", m_group2Node2Endpoints.size()); + + for (const auto& groupMapper : m_group2Node2Endpoints) + { + RPC_WS_LOG(INFO) << LOG_BADGE("printGroupInfo") << LOG_DESC("group list") + << LOG_KV("group", groupMapper.first) + << LOG_KV("count", groupMapper.second.size()); + for (const auto& nodeMapper : groupMapper.second) + { + RPC_WS_LOG(INFO) << LOG_BADGE("printGroupInfo") << LOG_DESC("node list") + << LOG_KV("group", groupMapper.first) + << LOG_KV("node", nodeMapper.first) + << LOG_KV("count", nodeMapper.second.size()); + } + } +} + +bcos::group::GroupInfo::Ptr Service::getGroupInfo(const std::string& _groupID) +{ + std::vector groupInfos; + { + boost::shared_lock lock(x_endPointLock); + for (const auto& group2GroupInfoMapper : m_endPoint2GroupId2GroupInfo) + { + auto& group2GroupInfo = group2GroupInfoMapper.second; + auto it = group2GroupInfo.find(_groupID); + if (it == group2GroupInfo.end()) + { + continue; + } + + groupInfos.push_back(it->second); + } + } + + if (groupInfos.empty()) + { + RPC_WS_LOG(INFO) << LOG_BADGE("getGroupInfo") << LOG_DESC("group not exist") + << LOG_KV("group", _groupID); + return nullptr; + } + + RPC_WS_LOG(INFO) << LOG_BADGE("getGroupInfo") << LOG_KV("count", groupInfos.size()); + + auto firstGroupInfo = *groupInfos.begin(); + auto groupInfo = + m_groupInfoFactory->createGroupInfo(firstGroupInfo->chainID(), firstGroupInfo->groupID()); + groupInfo->setSmCryptoType(firstGroupInfo->smCryptoType()); + groupInfo->setWasm(firstGroupInfo->wasm()); + groupInfo->setGenesisConfig(firstGroupInfo->genesisConfig()); + groupInfo->setIniConfig(firstGroupInfo->iniConfig()); + + for (const auto& g : groupInfos) + { + for (const auto& node : g->nodeInfos()) + { + if (groupInfo->nodeInfo(node.second->nodeName())) + { + continue; + } + + groupInfo->appendNodeInfo(node.second); + } + } + + return groupInfo; +} + +void Service::updateGroupInfo(const std::string& _endPoint, bcos::group::GroupInfo::Ptr _groupInfo) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("updateGroupInfo") << LOG_KV("endPoint", _endPoint) + << LOG_KV("group", _groupInfo->groupID()) + << LOG_KV("chainID", _groupInfo->chainID()) + << LOG_KV("nodesNum", _groupInfo->nodesNum()); + { + boost::unique_lock lock(x_endPointLock); + m_endPoint2GroupId2GroupInfo[_endPoint][_groupInfo->groupID()] = _groupInfo; + } +} + +//------------------------------ Block Notifier Begin -------------------------- +bool Service::getBlockNumber(const std::string& _group, int64_t& _blockNumber) +{ + { + boost::shared_lock lock(x_blockNotifierLock); + auto it = m_group2BlockNumber.find(_group); + if (it == m_group2BlockNumber.end()) + { + return false; + } + + _blockNumber = it->second; + } + /* + RPC_WS_LOG(TRACE) << LOG_BADGE("getBlockNumber") << LOG_KV("group", _group) + << LOG_KV("blockNumber", _blockNumber); + */ + return true; +} + +bool Service::getBlockLimit(const std::string& _groupID, int64_t& _blockLimit) +{ + int64_t blockNumber = -1; + auto r = getBlockNumber(_groupID, blockNumber); + if (r) + { + _blockLimit = blockNumber + BLOCK_LIMIT_RANGE; + return true; + } + return false; +} + +std::pair Service::updateGroupBlockNumber( + const std::string& _groupID, int64_t _blockNumber) +{ + bool newBlockNumber = false; + bool highestBlockNumber = false; + { + boost::unique_lock lock(x_blockNotifierLock); + auto it = m_group2BlockNumber.find(_groupID); + if (it != m_group2BlockNumber.end()) + { + if (_blockNumber > it->second) + { + it->second = _blockNumber; + newBlockNumber = true; + highestBlockNumber = true; + } + else if (_blockNumber == it->second) + { + highestBlockNumber = true; + } + } + else + { + m_group2BlockNumber[_groupID] = _blockNumber; + newBlockNumber = true; + highestBlockNumber = true; + } + } + + if (newBlockNumber) + { + RPC_WS_LOG(INFO) << LOG_BADGE("updateGroupBlockNumber") << LOG_KV("groupID", _groupID) + << LOG_KV("_blockNumber", _blockNumber); + } + + return std::make_pair(newBlockNumber, highestBlockNumber); +} + +bool Service::randomGetHighestBlockNumberNode(const std::string& _group, std::string& _node) +{ + std::set setNodes; + if (!getHighestBlockNumberNodes(_group, setNodes)) + { + return false; + } + + std::vector vectorNodes(setNodes.begin(), setNodes.end()); + std::default_random_engine e(std::chrono::system_clock::now().time_since_epoch().count()); + std::shuffle(vectorNodes.begin(), vectorNodes.end(), e); + + _node = *vectorNodes.begin(); + return true; +} + +bool Service::getHighestBlockNumberNodes(const std::string& _group, std::set& _nodes) +{ + std::set tempNodes; + + { + boost::shared_lock lock(x_blockNotifierLock); + auto it = m_group2LatestBlockNumberNodes.find(_group); + if (it == m_group2LatestBlockNumberNodes.end()) + { + return false; + } + + tempNodes = it->second; + } + + for (auto it = tempNodes.begin(); it != tempNodes.end(); ++it) + { + auto& node = *it; + if (!hasEndPointOfNodeAvailable(_group, node)) + { + RPC_WS_LOG(WARNING) << LOG_BADGE("getHighestBlockNumberNodes") + << LOG_DESC("node has no endpoint available") + << LOG_KV("group", _group) << LOG_KV("nodes", node); + + continue; + } + + _nodes.insert(*it); + } + + RPC_WS_LOG(TRACE) << LOG_BADGE("getHighestBlockNumberNodes") << LOG_KV("group", _group) + << LOG_KV("nodes size", _nodes.size()); + return !_nodes.empty(); +} + +void Service::removeBlockNumberInfo(const std::string& _group) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("removeBlockNumberInfo") << LOG_KV("group", _group); + boost::unique_lock lock(x_blockNotifierLock); + m_group2callbacks.erase(_group); + m_group2BlockNumber.erase(_group); + m_group2LatestBlockNumberNodes.erase(_group); +} + +void Service::onRecvBlockNotifier(const std::string& _msg) +{ + auto blockNumberInfo = std::make_shared(); + if (blockNumberInfo->fromJson(_msg)) + { + onRecvBlockNotifier(blockNumberInfo); + } +} + +void Service::onRecvBlockNotifier(BlockNumberInfo::Ptr _blockNumber) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("onRecvBlockNotifier") + << LOG_DESC("receive block number notifier") + << LOG_KV("group", _blockNumber->group()) + << LOG_KV("node", _blockNumber->node()) + << LOG_KV("blockNumber", _blockNumber->blockNumber()); + + auto r = updateGroupBlockNumber(_blockNumber->group(), _blockNumber->blockNumber()); + bool isNewBlock = r.first; + bool isHighestBlock = r.second; + if (isNewBlock || isHighestBlock) + { + boost::unique_lock lock(x_blockNotifierLock); + if (isNewBlock) + { + m_group2LatestBlockNumberNodes[_blockNumber->group()].clear(); + } + + if (isHighestBlock) + { + m_group2LatestBlockNumberNodes[_blockNumber->group()].insert(_blockNumber->node()); + } + } + + if (isNewBlock) + { + RPC_WS_LOG(INFO) << LOG_BADGE("onRecvBlockNotifier") << LOG_DESC("block notifier callback") + << LOG_KV("group", _blockNumber->group()) + << LOG_KV("node", _blockNumber->node()) + << LOG_KV("blockNumber", _blockNumber->blockNumber()); + + boost::shared_lock lock(x_blockNotifierLock); + auto it = m_group2callbacks.find(_blockNumber->group()); + if (it != m_group2callbacks.end()) + { + for (auto& callback : it->second) + { + callback(_blockNumber->group(), _blockNumber->blockNumber()); + } + } + } +} + +void Service::registerBlockNumberNotifier( + const std::string& _group, BlockNotifierCallback _callback) +{ + RPC_WS_LOG(INFO) << LOG_BADGE("registerBlockNumberNotifier") << LOG_KV("group", _group); + boost::unique_lock lock(x_blockNotifierLock); + m_group2callbacks[_group].push_back(_callback); +} +//------------------------------ Block Notifier End -------------------------- diff --git a/bcos-sdk/bcos-cpp-sdk/ws/Service.h b/bcos-sdk/bcos-cpp-sdk/ws/Service.h new file mode 100644 index 0000000..6bd384a --- /dev/null +++ b/bcos-sdk/bcos-cpp-sdk/ws/Service.h @@ -0,0 +1,170 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Service.h + * @author: octopus + * @date 2021-10-22 + */ + +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace service +{ +using WsHandshakeSucHandler = std::function; +using BlockNotifierCallback = std::function; +using BlockNotifierCallbacks = std::vector; + +class Service : public bcos::boostssl::ws::WsService +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + Service(bcos::group::GroupInfoCodec::Ptr _groupInfoCodec, + bcos::group::GroupInfoFactory::Ptr _groupInfoFactory, std::string _moduleName); + + // ---------------------overide begin------------------------------------ + + virtual void start() override; + virtual void stop() override; + + virtual void onConnect( + bcos::Error::Ptr _error, std::shared_ptr _session) override; + + virtual void onDisconnect( + bcos::Error::Ptr _error, std::shared_ptr _session) override; + + virtual void onRecvMessage(std::shared_ptr _msg, + std::shared_ptr _session) override; + // ---------------------overide end ------------------------------------- + + void waitForConnectionEstablish(); + + + // ---------------------send message begin------------------------------- + virtual void asyncSendMessageByGroupAndNode(const std::string& _group, const std::string& _node, + std::shared_ptr _msg, bcos::boostssl::ws::Options _options, + bcos::boostssl::ws::RespCallBack _respFunc); + // ---------------------oversend message begin---------------------------- + + virtual void startHandshake(std::shared_ptr _session); + virtual bool checkHandshakeDone(std::shared_ptr _session); + + void clearGroupInfoByEp(const std::string& _endPoint); + void clearGroupInfoByEp(const std::string& _endPoint, const std::string& _groupID); + void updateGroupInfoByEp(const std::string& _endPoint, bcos::group::GroupInfo::Ptr _groupInfo); + void onNotifyGroupInfo( + const std::string& _groupInfo, std::shared_ptr _session); + void onNotifyGroupInfo(std::shared_ptr _msg, + std::shared_ptr _session); + + //------------------------------ Block Notifier begin -------------------------- + bool getBlockNumber(const std::string& _group, int64_t& _blockNumber); + bool getBlockLimit(const std::string& _group, int64_t& _blockLimit); + std::pair updateGroupBlockNumber(const std::string& _groupID, int64_t _blockNumber); + + bool randomGetHighestBlockNumberNode(const std::string& _group, std::string& _node); + bool getHighestBlockNumberNodes(const std::string& _group, std::set& _nodes); + + void onRecvBlockNotifier(const std::string& _msg); + void onRecvBlockNotifier(BlockNumberInfo::Ptr _blockNumberInfo); + void removeBlockNumberInfo(const std::string& _group); + + void registerBlockNumberNotifier(const std::string& _group, BlockNotifierCallback _callback); + //------------------------------ Block Notifier end ---------------------------- + + bcos::group::GroupInfo::Ptr getGroupInfo(const std::string& _groupID); + void updateGroupInfo(const std::string& _endPoint, bcos::group::GroupInfo::Ptr _groupInfo); + + bool hasEndPointOfNodeAvailable(const std::string& _groupID, const std::string& _node); + bool getEndPointsByGroup(const std::string& _group, std::set& _endPoints); + bool getEndPointsByGroupAndNode( + const std::string& _group, const std::string& _node, std::set& _endPoints); + + void printGroupInfo(); + bcos::group::GroupInfoFactory::Ptr groupInfoFactory() const { return m_groupInfoFactory; } + + uint32_t wsHandshakeTimeout() const { return m_wsHandshakeTimeout; } + void setWsHandshakeTimeout(uint32_t _wsHandshakeTimeout) + { + m_wsHandshakeTimeout = _wsHandshakeTimeout; + } + + uint32_t handshakeSucCount() const { return m_handshakeSucCount.load(); } + + void increaseHandshakeSucCount() { m_handshakeSucCount++; } + + void registerWsHandshakeSucHandler(WsHandshakeSucHandler _handler) + { + m_wsHandshakeSucHandlers.push_back(_handler); + } + + void callWsHandshakeSucHandlers(std::shared_ptr _session) + { + for (auto& handler : m_wsHandshakeSucHandlers) + { + handler(_session); + } + } + +private: + uint32_t m_wsHandshakeTimeout = 10000; // 10s + std::atomic m_handshakeSucCount = 0; + // + std::vector m_wsHandshakeSucHandlers; + +private: + mutable boost::shared_mutex x_endPointLock; + // group => node => endpoints + std::unordered_map>> + m_group2Node2Endpoints; + + // endpoint => group => groupInfo + std::unordered_map> + m_endPoint2GroupId2GroupInfo; + + mutable boost::shared_mutex x_blockNotifierLock; + // group => blockNotifier callback + std::unordered_map m_group2callbacks; + // group => blockNumber + std::unordered_map m_group2BlockNumber; + // group => nodes + std::unordered_map> m_group2LatestBlockNumberNodes; + + // the groupInfo codec + bcos::group::GroupInfoCodec::Ptr m_groupInfoCodec; + // the groupInfo factory + bcos::group::GroupInfoFactory::Ptr m_groupInfoFactory; + + bcos::protocol::ProtocolInfo::ConstPtr m_localProtocol; +}; + +} // namespace service +} // namespace cppsdk +} // namespace bcos diff --git a/bcos-sdk/sample/CMakeLists.txt b/bcos-sdk/sample/CMakeLists.txt new file mode 100644 index 0000000..59e7515 --- /dev/null +++ b/bcos-sdk/sample/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(rpc) +add_subdirectory(amop) +add_subdirectory(eventsub) +add_subdirectory(tx) \ No newline at end of file diff --git a/bcos-sdk/sample/amop/CMakeLists.txt b/bcos-sdk/sample/amop/CMakeLists.txt new file mode 100644 index 0000000..ab00813 --- /dev/null +++ b/bcos-sdk/sample/amop/CMakeLists.txt @@ -0,0 +1,22 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +add_executable(publish publish.cpp) +if (NOT WIN32) + target_compile_options(publish PRIVATE) +endif() +target_link_libraries(publish PUBLIC ${BCOS_CPP_SDK_TARGET} bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) + +add_executable(broadcast broadcast.cpp) +if (NOT WIN32) + target_compile_options(broadcast PRIVATE) +endif() +target_link_libraries(broadcast PUBLIC ${BCOS_CPP_SDK_TARGET} bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) + +add_executable(subscribe subscribe.cpp) +if (NOT WIN32) + target_compile_options(subscribe PRIVATE) +endif() +target_link_libraries(subscribe PUBLIC ${BCOS_CPP_SDK_TARGET} bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) \ No newline at end of file diff --git a/bcos-sdk/sample/amop/broadcast.cpp b/bcos-sdk/sample/amop/broadcast.cpp new file mode 100644 index 0000000..f4ac833 --- /dev/null +++ b/bcos-sdk/sample/amop/broadcast.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file broadcast.cpp + * @author: octopus + * @date 2021-08-24 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Desc: broadcast amop message by command params\n"; + std::cerr << "Usage: broadcast \n" + << "Example:\n" + << " ./broadcast ./config_sample.ini topic HelloWorld\n"; + std::exit(0); +} + + +int main(int argc, char** argv) +{ + if (argc < 4) + { + usage(); + } + + std::string config = argv[1]; + std::string topic = argv[2]; + std::string msg = argv[3]; + + std::cout << LOG_DESC(" [AMOP][Broadcast]] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # topic", topic) << LOG_KV("\n\t # message", msg) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [AMOP][Broadcast] start sdk ... ") << std::endl; + + int i = 0; + while (true) + { + std::cout << LOG_DESC(" broadcast message ===>>>> ") << LOG_KV("topic", topic) + << LOG_KV("message", msg) << std::endl; + + sdk->amop()->broadcast(topic, bytesConstRef((byte*)msg.data(), msg.size())); + std::this_thread::sleep_for(std::chrono::milliseconds(5000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-sdk/sample/amop/publish.cpp b/bcos-sdk/sample/amop/publish.cpp new file mode 100644 index 0000000..9d84f52 --- /dev/null +++ b/bcos-sdk/sample/amop/publish.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file publish.cpp + * @author: octopus + * @date 2021-08-24 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Desc: publish amop message by command params\n"; + std::cerr << "Usage: publish \n" + << "Example:\n" + << " ./publish ./config_sample.ini topic HelloWorld\n"; + std::exit(0); +} + +int main(int argc, char** argv) +{ + if (argc < 4) + { + usage(); + } + + std::string config = argv[1]; + std::string topic = argv[2]; + std::string msg = argv[3]; + + std::cout << LOG_DESC(" [AMOP][Publish]] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # topic", topic) << LOG_KV("\n\t # message", msg) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [AMOP][Publish] start sdk ... ") << std::endl; + + int i = 0; + while (true) + { + std::cout << LOG_DESC(" publish message ===>>>> ") << LOG_KV("topic", topic) + << LOG_KV("message", msg) << std::endl; + + sdk->amop()->publish(topic, bytesConstRef((byte*)msg.data(), msg.size()), -1, + [](Error::Ptr _error, std::shared_ptr _msg, + std::shared_ptr _session) { + boost::ignore_unused(_session); + if (_error) + { + std::cout << " \t something is wrong" << LOG_KV("error", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()) << std::endl; + return; + } + else + { + if (_msg->status() != 0) + { + std::cout << " \t something is wrong" << LOG_KV("error", _msg->status()) + << LOG_KV("errorMessage", std::string(_msg->payload()->begin(), + _msg->payload()->end())) + << std::endl; + return; + } + + std::cout << " \t recv response message ===>>>> " + << LOG_KV("msg", + std::string(_msg->payload()->begin(), _msg->payload()->end())) + << std::endl; + } + }); + std::this_thread::sleep_for(std::chrono::milliseconds(5000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-sdk/sample/amop/subscribe.cpp b/bcos-sdk/sample/amop/subscribe.cpp new file mode 100644 index 0000000..9daf8d7 --- /dev/null +++ b/bcos-sdk/sample/amop/subscribe.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file sub_client.cpp + * @author: octopus + * @date 2021-08-24 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos; +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Desc: subscribe amop topic by command params\n"; + std::cerr << "Usage: subscribe \n" + << "Example:\n" + << " ./subscribe ./config_sample.ini topic\n"; + std::exit(0); +} + +//------------------------------------------------------------------------------ +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string config = argv[1]; + std::set topicList; + for (int i = 2; i < argc; i++) + { + topicList.insert(argv[i]); + } + std::string topic = argv[2]; + + std::cout << LOG_DESC(" [AMOP][Subscribe] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # topic", topic) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [AMOP][Subscribe] start sdk ... ") << std::endl; + sdk->amop()->setSubCallback( + [&sdk](Error::Ptr _error, const std::string& _endPoint, const std::string& _seq, + bytesConstRef _data, std::shared_ptr _session) { + boost::ignore_unused(_session); + if (_error) + { + std::cout << " \t something is wrong" << LOG_KV("error", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()) << std::endl; + } + else + { + std::cout << " \t recv message and would echo message to publish ===>>>> " + << LOG_KV("endPoint", _endPoint) + << LOG_KV("msg", std::string(_data.begin(), _data.end())) << std::endl; + + sdk->amop()->sendResponse(_endPoint, _seq, _data); + } + }); + sdk->amop()->subscribe(topicList); + + int i = 0; + while (true) + { + std::cout << LOG_DESC(" Main thread running ") << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-sdk/sample/config/config_sample.ini b/bcos-sdk/sample/config/config_sample.ini new file mode 100644 index 0000000..690ff55 --- /dev/null +++ b/bcos-sdk/sample/config/config_sample.ini @@ -0,0 +1,26 @@ + +[common] + ; if ssl connection is disabled, default: false + ; disable_ssl = true + ; thread pool size for network message sending recving handing + thread_pool_size = 8 + ; send message timeout(ms) + message_timeout_ms = 10000 + +; ssl cert config items, +[cert] + ; ssl_type: ssl or sm_ssl, default: ssl + ssl_type = ssl + ; directory the certificates located in, defaul: ./conf + ca_path=./conf + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + sdk_key=sdk.key + ; the node certificate file + sdk_cert=sdk.crt + +[peers] +# supported ipv4 and ipv6 + node.0=127.0.0.1:20200 + node.1=127.0.0.1:20201 \ No newline at end of file diff --git a/bcos-sdk/sample/config/sm_config_sample.ini b/bcos-sdk/sample/config/sm_config_sample.ini new file mode 100644 index 0000000..86437ee --- /dev/null +++ b/bcos-sdk/sample/config/sm_config_sample.ini @@ -0,0 +1,28 @@ +[common] + ; if ssl connection is disabled, default: false + ; disable_ssl = true + ; thread pool size for network message sending recving handing + thread_pool_size = 8 + ; send message timeout(ms) + message_timeout_ms = 10000 + +[cert] + ; ssl_type: ssl or sm_ssl, default: ssl + ssl_type = sm_ssl + ; directory the certificates located in, defaul: ./conf + ca_path=./conf + ; the ca certificate file + sm_ca_cert=sm_ca.crt + ; the node private key file + sm_sdk_key=sm_sdk.key + ; the node certificate file + sm_sdk_cert=sm_sdk.crt + ; the node private key file + sm_ensdk_key=sm_ensdk.key + ; the node certificate file + sm_ensdk_cert=sm_ensdk.crt + +[peers] +# supported ipv4 and ipv6 + node.0=127.0.0.1:20200 + node.1=127.0.0.1:20201 \ No newline at end of file diff --git a/bcos-sdk/sample/eventsub/CMakeLists.txt b/bcos-sdk/sample/eventsub/CMakeLists.txt new file mode 100644 index 0000000..461d95a --- /dev/null +++ b/bcos-sdk/sample/eventsub/CMakeLists.txt @@ -0,0 +1,10 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +add_executable(eventsub eventsub.cpp) +if (NOT WIN32) + target_compile_options(eventsub PRIVATE -Wno-unused-variable) +endif() +target_link_libraries(eventsub PUBLIC ${BCOS_CPP_SDK_TARGET} bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) \ No newline at end of file diff --git a/bcos-sdk/sample/eventsub/eventsub.cpp b/bcos-sdk/sample/eventsub/eventsub.cpp new file mode 100644 index 0000000..74133cd --- /dev/null +++ b/bcos-sdk/sample/eventsub/eventsub.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file eventsub.cpp + * @author: octopus + * @date 2021-08-24 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Desc: subscribe contract events by command params\n"; + std::cerr << "Usage: eventsub
[Optional]\n"; + + std::cerr << "Example:\n" + << " ./eventsub ./config_sample.ini group -1 -1" + "\n"; + std::exit(0); +} + +int main(int argc, char** argv) +{ + if (argc < 5) + { + usage(); + } + + // option params + std::string config = argv[1]; + std::string group = argv[2]; + int64_t from = atoi(argv[3]); + int64_t to = atoi(argv[4]); + + std::string address; + if (argc > 5) + { + address = argv[5]; + } + + std::cout << LOG_DESC(" [EventSub] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # group", group) << LOG_KV("\n\t # from", from) + << LOG_KV("\n\t # to", to) << LOG_KV("\n\t # address", address) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [EventSub] start sdk ... ") << std::endl; + + // construct eventsub params + auto params = std::make_shared(); + params->setFromBlock(from); + params->setToBlock(to); + if (!address.empty()) + { + params->addAddress(address); + } + + sdk->service()->registerBlockNumberNotifier(group, [](const std::string& _group, + int64_t _blockNumber) { + // recv block number from server + std::cout << " \t recv block number notifier from server ===>>>> " + << LOG_KV("group", _group) << LOG_KV("blockNumber", _blockNumber) << std::endl; + }); + + // subscribe event + sdk->eventSub()->subscribeEvent( + group, params, [](Error::Ptr _error, const std::string& _events) { + if (_error) + { + // error and exit + std::cout << " \t something is wrong" << LOG_KV("error", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()) << std::endl; + std::exit(-1); + } + else + { + // recv events from server + std::cout << " \t recv events from server ===>>>> " << LOG_KV("events", _events) + << std::endl; + } + }); + + int i = 0; + while (true) + { + std::cout << LOG_DESC(" Main thread running ") << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-sdk/sample/rpc/CMakeLists.txt b/bcos-sdk/sample/rpc/CMakeLists.txt new file mode 100644 index 0000000..8cd7252 --- /dev/null +++ b/bcos-sdk/sample/rpc/CMakeLists.txt @@ -0,0 +1,10 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +add_executable(blocknotifier blocknotifier.cpp) +if (NOT WIN32) + target_compile_options(blocknotifier PRIVATE -Wno-unused-variable) +endif() +target_link_libraries(blocknotifier PUBLIC ${BCOS_CPP_SDK_TARGET} bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) \ No newline at end of file diff --git a/bcos-sdk/sample/rpc/blocknotifier.cpp b/bcos-sdk/sample/rpc/blocknotifier.cpp new file mode 100644 index 0000000..8865245 --- /dev/null +++ b/bcos-sdk/sample/rpc/blocknotifier.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file blocknotifier.cpp + * @author: octopus + * @date 2021-08-24 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +using namespace bcos; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +void usage() +{ + std::cerr << "Desc: print block notifier by command params\n"; + std::cerr << "Usage: blocknotifier \n" + << "Example:\n" + << " ./blocknotifier ./config_sample.ini group " + "\n"; + std::exit(0); +} + + +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string config = argv[1]; + std::string group = argv[2]; + + std::cout << LOG_DESC(" [BlockNotifier] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # group", group) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [BlockNotifier] start sdk ... ") << std::endl; + + sdk->service()->registerBlockNumberNotifier( + group, [](const std::string& _group, int64_t _blockNumber) { + std::cout << " \t block notifier ===>>>> " << LOG_KV("group", _group) + << LOG_KV("blockNumber", _blockNumber) << std::endl; + }); + + int i = 0; + while (true) + { + std::cout << LOG_DESC(" Main thread running ") << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(10000)); + i++; + } + + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/bcos-sdk/sample/tx/CMakeLists.txt b/bcos-sdk/sample/tx/CMakeLists.txt new file mode 100644 index 0000000..eafb2aa --- /dev/null +++ b/bcos-sdk/sample/tx/CMakeLists.txt @@ -0,0 +1,13 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTATICLIB") + +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +add_executable(deploy_hello deploy_hello.cpp) +target_link_libraries(deploy_hello PUBLIC ${BCOS_CPP_SDK_TARGET} ${TARS_PROTOCOL_TARGET} bcos-crypto bcos-boostssl bcos-utilities jsoncpp_static OpenSSL::SSL OpenSSL::Crypto) + +add_executable(tx_sign_perf tx_sign_perf.cpp) +target_link_libraries(tx_sign_perf PUBLIC ${BCOS_CPP_SDK_TARGET} ${TARS_PROTOCOL_TARGET}) + +add_executable(random_perf random_perf.cpp) +target_link_libraries(random_perf PUBLIC ${BCOS_CPP_SDK_TARGET} ${TARS_PROTOCOL_TARGET}) \ No newline at end of file diff --git a/bcos-sdk/sample/tx/deploy_hello.cpp b/bcos-sdk/sample/tx/deploy_hello.cpp new file mode 100644 index 0000000..57d0bf5 --- /dev/null +++ b/bcos-sdk/sample/tx/deploy_hello.cpp @@ -0,0 +1,268 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file deploy_hello.cpp + * @author: octopus + * @date 2022-01-16 + */ + +#include + +#include "bcos-concepts/Serialize.h" +#include "bcos-crypto/interfaces/crypto/KeyPairFactory.h" +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-crypto/interfaces/crypto/Signature.h" +#include "bcos-crypto/signature/secp256k1/Secp256k1KeyPair.h" +#include "bcos-crypto/signature/sm2/SM2Crypto.h" +#include "bcos-crypto/signature/sm2/SM2KeyPairFactory.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include "bcos-tars-protocol/tars/Transaction.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::boostssl; +//---------------------------------------------------------------------------------------------------- +// HelloWorld Source Code: +/** +pragma solidity>=0.4.24 <0.6.11; + +contract HelloWorld { + string name; + + constructor() public { + name = "Hello, World!"; + } + + function get() public view returns (string memory) { + return name; + } + + function set(string memory n) public { + name = n; + } +} +*/ +constexpr static std::string_view hwBIN = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f72" + "6c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50" + "610107565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928260" + "1f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100" + "d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b8082" + "11156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe60806040" + "5234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c1461" + "00f6575b600080fd5b6100f46004803603602081101561005157600080fd5b81019080803590602001906401000000" + "0081111561006e57600080fd5b82018360208201111561008057600080fd5b80359060200191846001830284011164" + "0100000000831117156100a257600080fd5b91908080601f0160208091040260200160405190810160405280939291" + "90818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050" + "50610179565b005b6100fe610193565b60405180806020018281038252838181518152602001915080519060200190" + "80838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f1680" + "1561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060" + "00908051906020019061018f929190610235565b5050565b6060600080546001816001161561010002031660029004" + "80601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203" + "1660029004801561022b5780601f106102005761010080835404028352916020019161022b565b8201919060005260" + "20600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b8280" + "54600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102765780" + "5160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591" + "602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760" + "008160009055506001016102bb565b5090565b9056fea2646970667358221220b5943f43c48cc93c6d71cdcf27aee5" + "072566c88755ce9186e32ce83b24e8dc6c64736f6c634300060a0033"; + +constexpr static std::string_view hwSmBIN = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f72" + "6c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50" + "610107565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928260" + "1f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100" + "d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b8082" + "11156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe60806040" + "5234801561001057600080fd5b50600436106100365760003560e01c8063299f7f9d1461003b5780633590b49f1461" + "00be575b600080fd5b610043610179565b604051808060200182810382528381815181526020019150805190602001" + "9080838360005b83811015610083578082015181840152602081019050610068565b50505050905090810190601f16" + "80156100b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61" + "0177600480360360208110156100d457600080fd5b81019080803590602001906401000000008111156100f1576000" + "80fd5b82018360208201111561010357600080fd5b8035906020019184600183028401116401000000008311171561" + "012557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380" + "828437600081840152601f19601f82011690508083019250505050505050919291929050505061021b565b005b6060" + "60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190" + "818152602001828054600181600116156101000203166002900480156102115780601f106101e65761010080835404" + "0283529160200191610211565b820191906000526020600020905b8154815290600101906020018083116101f45782" + "9003601f168201915b5050505050905090565b8060009080519060200190610231929190610235565b5050565b8280" + "54600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102765780" + "5160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591" + "602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760" + "008160009055506001016102bb565b5090565b9056fea26469706673582212209871cb2bcf390d53645807cbaedfe0" + "52d739ef9cff9d84787f74c4f379e1854664736f6c634300060a0033"; + +/* +{ + "6d4ce63c": "get()", + "4ed3885e": "set(string)" +} + +{ + "299f7f9d": "get()", + "3590b49f": "set(string)" +} +*/ + +//------------------------------------------------------------------------------------------------- + +std::string_view getBinary(bool _sm) +{ + return _sm ? hwSmBIN : hwBIN; +} + +void usage() +{ + std::cerr << "Desc: deploy HelloWorld contract\n"; + std::cerr << "Usage: deploy_hello \n" + << "Example:\n" + << " ./deploy_hello ./config_sample.ini group0\n" + "\n"; + std::exit(0); +} + +int main(int argc, char** argv) +{ + if (argc < 3) + { + usage(); + } + + std::string config = argv[1]; + std::string group = argv[2]; + + std::cout << LOG_DESC(" [DeployHello] params ===>>>> ") << LOG_KV("\n\t # config", config) + << LOG_KV("\n\t # groupID", group) << std::endl; + + auto factory = std::make_shared(); + // construct cpp-sdk object + auto sdk = factory->buildSdk(config); + // start sdk + sdk->start(); + + std::cout << LOG_DESC(" [DeployHello] start sdk ... ") << std::endl; + + // get group info + bcos::group::GroupInfo::Ptr groupInfo = sdk->service()->getGroupInfo(group); + if (!groupInfo) + { + std::cout << LOG_DESC(" [DeployHello] group not exist") << LOG_KV("group", group) + << std::endl; + exit(-1); + } + + crypto::SignatureCrypto::Ptr keyPairFactory; + crypto::KeyPairInterface::UniquePtr keyPair; + if (groupInfo->smCryptoType()) + { + keyPairFactory = std::make_shared(); + keyPair = keyPairFactory->generateKeyPair(); + } + else + { + keyPairFactory = std::make_shared(); + keyPair = keyPairFactory->generateKeyPair(); + } + + std::cout << LOG_DESC(" [DeployHello] sm_crypto_type ") << groupInfo->smCryptoType() + << std::endl; + + std::cout << LOG_DESC(" [DeployHello] new account ") + << LOG_KV("address", keyPair->publicKey()->hex()) << std::endl; + + int64_t blockLimit = -1; + sdk->service()->getBlockLimit(group, blockLimit); + + std::cout << LOG_DESC(" [DeployHello] block limit ") << LOG_KV("blockLimit", blockLimit) + << std::endl; + + auto hexBin = getBinary(groupInfo->smCryptoType()); + + auto hashImpl = std::make_shared(); + bcos::crypto::CryptoSuite::Ptr cryptoSuite = + std::make_shared(hashImpl, keyPairFactory, nullptr); + auto transactionFactory = + std::make_shared(cryptoSuite); + bcos::bytes inputData; + boost::algorithm::unhex(hexBin.begin(), hexBin.end(), std::back_inserter(inputData)); + auto tx = transactionFactory->createTransaction(0, "to", inputData, bcos::u256(100), 200, + "chain0", group, 1112, std::shared_ptr(std::move(keyPair))); + // auto r = + // transactionBuilderService->createSignedTransaction(*keyPair, "", *binBytes.get(), "", 0); + + std::cout << LOG_DESC(" [DeployHello] create signed transaction success") + << LOG_KV("tx hash", tx->hash()) << std::endl; + + std::promise p; + auto f = p.get_future(); + std::string buffer; + bcos::concepts::serialize::encode( + std::dynamic_pointer_cast(tx)->inner(), buffer); + + auto hexBuffer = boost::algorithm::hex_lower(buffer); + + sdk->jsonRpc()->sendTransaction(group, "", hexBuffer, false, + [&p](bcos::Error::Ptr _error, std::shared_ptr _resp) { + if (_error && _error->errorCode() != 0) + { + std::cout << LOG_DESC(" [DeployHello] send transaction response error") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()) << std::endl; + } + else + { + std::string receipt = std::string(_resp->begin(), _resp->end()); + std::cout << LOG_DESC(" [DeployHello] recv response success ") + << LOG_KV("transaction receipt", receipt) << std::endl; + + Json::Value root; + Json::Reader jsonReader; + + try + { + if (!jsonReader.parse(receipt, root)) + { + std::cout << LOG_DESC(" [DeployHello] [ERROR] recv invalid json object") + << LOG_KV("resp", receipt) << std::endl; + return; + } + + std::cout << LOG_DESC(" [DeployHello] contract address ==> " + + root["result"]["contractAddress"].asString()) + << std::endl; + } + catch (const std::exception& _e) + { + std::cout << LOG_DESC(" [DeployHello] [ERROR] recv invalid json object") + << LOG_KV("resp", receipt) << std::endl; + } + } + p.set_value(true); + }); + f.get(); + + return 0; +} \ No newline at end of file diff --git a/bcos-sdk/sample/tx/random_perf.cpp b/bcos-sdk/sample/tx/random_perf.cpp new file mode 100644 index 0000000..2d504fd --- /dev/null +++ b/bcos-sdk/sample/tx/random_perf.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file random_perf.cpp + * @author: octopus + * @date 2022-04-07 + */ + +#include +#include +#include +#include +#include +#include +#include + +void usage() +{ + printf("Desc: random biginteger perf test\n"); + printf("Usage: ./random_perf count\n"); + printf("Example:\n"); + printf(" ./random_perf 30000\n"); + exit(0); +} + +int main(int argc, char** argv) +{ + if (argc < 2) + { + usage(); + } + + long long count = std::stoul(argv[1]); + + printf("[Random Gen Test] ===>>>> count: %lld\n", count); + + long long i = 0; + long long _10Per = count / 10; + + auto startPoint = std::chrono::high_resolution_clock::now(); + while (i++ < count) + { + if (i % _10Per == 0) + { + std::cerr << " ..process : " << ((double)i / count) * 100 << "%" << std::endl; + } + + // auto fixBytes = bcos::FixedBytes<32>().generateRandomFixedBytes(); + // auto u256Value = transactionBuilder->genRandomUint256(); + // (void)u256Value; + } + + auto endPoint = std::chrono::high_resolution_clock::now(); + auto elapsedMS = + (long long)std::chrono::duration_cast(endPoint - startPoint) + .count(); + + printf( + " [Random Gen Test] total count: %lld, total elapsed(ms): %lld, " + "count/s: %lld \n", + count, elapsedMS, 1000 * count / elapsedMS); + + return 0; +} diff --git a/bcos-sdk/sample/tx/tx_sign_perf.cpp b/bcos-sdk/sample/tx/tx_sign_perf.cpp new file mode 100644 index 0000000..69820f2 --- /dev/null +++ b/bcos-sdk/sample/tx/tx_sign_perf.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file tx_sign_perf.cpp + * @author: octopus + * @date 2022-01-17 + */ + +#include "bcos-crypto/interfaces/crypto/CryptoSuite.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +// HelloWorld Source Code: + +// HelloWorld Source Code: +/** +pragma solidity>=0.4.24 <0.6.11; + +contract HelloWorld { + string name; + + constructor() public { + name = "Hello, World!"; + } + + function get() public view returns (string memory) { + return name; + } + + function set(string memory n) public { + name = n; + } +} +*/ +const char* hwBIN = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f72" + "6c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50" + "610107565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928260" + "1f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100" + "d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b8082" + "11156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe60806040" + "5234801561001057600080fd5b50600436106100365760003560e01c80634ed3885e1461003b5780636d4ce63c1461" + "00f6575b600080fd5b6100f46004803603602081101561005157600080fd5b81019080803590602001906401000000" + "0081111561006e57600080fd5b82018360208201111561008057600080fd5b80359060200191846001830284011164" + "0100000000831117156100a257600080fd5b91908080601f0160208091040260200160405190810160405280939291" + "90818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050" + "50610179565b005b6100fe610193565b60405180806020018281038252838181518152602001915080519060200190" + "80838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f1680" + "1561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b8060" + "00908051906020019061018f929190610235565b5050565b6060600080546001816001161561010002031660029004" + "80601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203" + "1660029004801561022b5780601f106102005761010080835404028352916020019161022b565b8201919060005260" + "20600020905b81548152906001019060200180831161020e57829003601f168201915b5050505050905090565b8280" + "54600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102765780" + "5160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591" + "602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760" + "008160009055506001016102bb565b5090565b9056fea2646970667358221220b5943f43c48cc93c6d71cdcf27aee5" + "072566c88755ce9186e32ce83b24e8dc6c64736f6c634300060a0033"; + +const char* hwSmBIN = + "608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f72" + "6c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50" + "610107565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928260" + "1f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100" + "d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b8082" + "11156101005760008160009055506001016100e8565b5090565b90565b610310806101166000396000f3fe60806040" + "5234801561001057600080fd5b50600436106100365760003560e01c8063299f7f9d1461003b5780633590b49f1461" + "00be575b600080fd5b610043610179565b604051808060200182810382528381815181526020019150805190602001" + "9080838360005b83811015610083578082015181840152602081019050610068565b50505050905090810190601f16" + "80156100b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61" + "0177600480360360208110156100d457600080fd5b81019080803590602001906401000000008111156100f1576000" + "80fd5b82018360208201111561010357600080fd5b8035906020019184600183028401116401000000008311171561" + "012557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380" + "828437600081840152601f19601f82011690508083019250505050505050919291929050505061021b565b005b6060" + "60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190" + "818152602001828054600181600116156101000203166002900480156102115780601f106101e65761010080835404" + "0283529160200191610211565b820191906000526020600020905b8154815290600101906020018083116101f45782" + "9003601f168201915b5050505050905090565b8060009080519060200190610231929190610235565b5050565b8280" + "54600181600116156101000203166002900490600052602060002090601f016020900481019282601f106102765780" + "5160ff19168380011785556102a4565b828001600101855582156102a4579182015b828111156102a3578251825591" + "602001919060010190610288565b5b5090506102b191906102b5565b5090565b6102d791905b808211156102d35760" + "008160009055506001016102bb565b5090565b9056fea26469706673582212209871cb2bcf390d53645807cbaedfe0" + "52d739ef9cff9d84787f74c4f379e1854664736f6c634300060a0033"; + +/* +{ + "6d4ce63c": "get()", + "4ed3885e": "set(string)" +} + +{ + "299f7f9d": "get()", + "3590b49f": "set(string)" +} +*/ + +const char* getBinary(int _sm) +{ + return _sm ? hwSmBIN : hwBIN; +} + +void usage() +{ + printf("Desc: create signed transaction[HelloWorld set] perf test\n"); + printf("Usage: tx_sign_perf isSM txCount\n"); + printf("Example:\n"); + printf(" ./tx_sign_perf true 30000\n"); + printf(" ./tx_sign_perf false 30000\n"); + exit(0); +} + +int main(int argc, char** argv) +{ + if (argc < 2) + { + usage(); + } + + bool smCrypto = (std::string(argv[1]) == "true"); + uint32_t txCount = std::stoul(argv[2]); + + printf("[Create Signed Tx Perf Test] ===>>>> smCrypto: %d, txCount: %u\n", smCrypto, txCount); + + // auto keyPairBuilder = std::make_shared(); + // auto keyPair = + // keyPairBuilder->genKeyPair(smCrypto ? bcos::cppsdk::utilities::CryptoType::SM2 : + // bcos::cppsdk::utilities::CryptoType::Secp256K1); + + // auto transactionBuilder = std::make_shared(); + // auto code = *bcos::fromHexString(getBinary(smCrypto ? 1 : 0)); + + int64_t block_limit = 111111; + const char* group_id = "group0"; + const char* chain_id = "chain0"; + + std::string txHash = ""; + uint32_t i = 0; + uint32_t _10Per = txCount / 10; + auto keyPairFactory = std::make_shared(); + + auto startPoint = std::chrono::high_resolution_clock::now(); + while (i++ < txCount) + { + if (i % _10Per == 0) + { + std::cerr << " ..process : " << ((double)i / txCount) * 100 << "%" << std::endl; + } + + auto keyPair = keyPairFactory->generateKeyPair(); + auto hashImpl = std::make_shared(); + bcos::crypto::CryptoSuite::Ptr cryptoSuite = + std::make_shared(hashImpl, keyPairFactory, nullptr); + + auto transactionFactory = + std::make_shared(cryptoSuite); + bcos::bytes inputData; + auto tx = + transactionFactory->createTransaction(0, "to", inputData, bcos::u256(100), 200, "chain", + "group", 1112, std::shared_ptr(std::move(keyPair))); + } + + auto endPoint = std::chrono::high_resolution_clock::now(); + auto elapsedMS = + (long long)std::chrono::duration_cast(endPoint - startPoint) + .count(); + auto elapsedUS = + (long long)std::chrono::duration_cast(endPoint - startPoint) + .count(); + + printf( + " [Create Signed Tx Perf Test] total txs: %u, total elapsed(ms): %lld, avg(us): %lld, " + "txs/s: %lld \n", + txCount, elapsedMS, elapsedUS / txCount, 1000 * txCount / elapsedMS); + + return 0; +} diff --git a/bcos-sdk/tests/CMakeLists.txt b/bcos-sdk/tests/CMakeLists.txt new file mode 100644 index 0000000..37a577c --- /dev/null +++ b/bcos-sdk/tests/CMakeLists.txt @@ -0,0 +1,29 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-rpc +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "unittests/*.sol") + +set(TEST_BINARY_NAME test-bcos-cpp-sdk) + +find_package(Boost REQUIRED log serialization unit_test_framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) +target_link_libraries(${TEST_BINARY_NAME} ${BCOS_CPP_SDK_TARGET} bcos-utilities ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) +add_test(NAME ${TEST_BINARY_NAME} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/abi/ContractEventTopicTest.cpp b/bcos-sdk/tests/unittests/abi/ContractEventTopicTest.cpp new file mode 100644 index 0000000..1fddcdb --- /dev/null +++ b/bcos-sdk/tests/unittests/abi/ContractEventTopicTest.cpp @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ContractEventTopicTest.cpp + * @author: octopus + * @date 2022-02-24 + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::codec::abi; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(ContractEventTopicTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventTopic_Keccak256) +{ + auto hashImpl = std::make_shared(); + auto contactEventTopic = std::make_shared(hashImpl); + + // int + { + s256 i0 = 0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->i256ToTopic(i0)); + + s256 i1 = 1; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000001", + contactEventTopic->i256ToTopic(i1)); + + s256 i2 = 12345; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000003039", + contactEventTopic->i256ToTopic(i2)); + + s256 i3 = std::numeric_limits::max(); + BOOST_CHECK_EQUAL("0x000000000000000000000000000000000000000000000000000000007fffffff", + contactEventTopic->i256ToTopic(i3)); + + s256 i4 = -1; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + contactEventTopic->i256ToTopic(i4)); + + s256 i5 = -1234567890; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffb669fd2e", + contactEventTopic->i256ToTopic(i5)); + } + + // uint + { + u256 u0 = 0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->u256ToTopic(u0)); + + u256 u1 = 1; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000001", + contactEventTopic->u256ToTopic(u1)); + + u256 u2 = 12345; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000003039", + contactEventTopic->u256ToTopic(u2)); + + u256 u3 = std::numeric_limits::max(); + BOOST_CHECK_EQUAL("0x00000000000000000000000000000000000000000000000000000000ffffffff", + contactEventTopic->u256ToTopic(u3)); + + u256 u4 = -1; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + contactEventTopic->u256ToTopic(u4)); + + u256 u5 = 1234567890; + BOOST_CHECK_EQUAL("0x00000000000000000000000000000000000000000000000000000000499602d2", + contactEventTopic->u256ToTopic(u5)); + } + + // string + { + std::string s0 = ""; + BOOST_CHECK_EQUAL("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + contactEventTopic->stringToTopic(s0)); + + std::string s1 = "HelloWorld"; + BOOST_CHECK_EQUAL("0x7c5ea36004851c764c44143b1dcb59679b11c9a68e5f41497f6cf3d480715331", + contactEventTopic->stringToTopic(s1)); + + std::string s2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + BOOST_CHECK_EQUAL("0x6bf4107d5e7ac7a9c23a4e8d6581b098e5323fe49df3596168d3710d50526dad", + contactEventTopic->stringToTopic(s2)); + } + + // bytesN + { + bcos::bytes bs0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->bytesNToTopic(bs0)); + + bcos::bytes bs1(10, '1'); + BOOST_CHECK_EQUAL("0x3131313131313131313100000000000000000000000000000000000000000000", + contactEventTopic->bytesNToTopic(bs1)); + + bcos::bytes bs2(32, '1'); + BOOST_CHECK_EQUAL("0x3131313131313131313131313131313131313131313131313131313131313131", + contactEventTopic->bytesNToTopic(bs2)); + + bcos::bytes bs3(33, '1'); + BOOST_CHECK_THROW(contactEventTopic->bytesNToTopic(bs3), bcos::InvalidParameter); + } + + // bytes + { + bcos::bytes bs0; + BOOST_CHECK_EQUAL("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + contactEventTopic->bytesToTopic(bs0)); + + std::string hex = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; + BOOST_CHECK_EQUAL("0xe166801d00a45901e2b3ca692a6a95e367d4a976218b485546a2da464b6c88b5", + contactEventTopic->bytesToTopic(bcos::bytes(hex.begin(), hex.end()))); + } +} + +BOOST_AUTO_TEST_CASE(test_EventTopic_SM3) +{ + auto hashImpl = std::make_shared(); + auto contactEventTopic = std::make_shared(hashImpl); + + // int + { + s256 i0 = 0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->i256ToTopic(i0)); + + s256 i1 = 1; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000001", + contactEventTopic->i256ToTopic(i1)); + + s256 i2 = 12345; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000003039", + contactEventTopic->i256ToTopic(i2)); + + s256 i3 = std::numeric_limits::max(); + BOOST_CHECK_EQUAL("0x000000000000000000000000000000000000000000000000000000007fffffff", + contactEventTopic->i256ToTopic(i3)); + + s256 i4 = -1; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + contactEventTopic->i256ToTopic(i4)); + + s256 i5 = -1234567890; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffb669fd2e", + contactEventTopic->i256ToTopic(i5)); + } + + // uint + { + u256 u0 = 0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->u256ToTopic(u0)); + + u256 u1 = 1; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000001", + contactEventTopic->u256ToTopic(u1)); + + u256 u2 = 12345; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000003039", + contactEventTopic->u256ToTopic(u2)); + + u256 u3 = std::numeric_limits::max(); + BOOST_CHECK_EQUAL("0x00000000000000000000000000000000000000000000000000000000ffffffff", + contactEventTopic->u256ToTopic(u3)); + + u256 u4 = -1; + BOOST_CHECK_EQUAL("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + contactEventTopic->u256ToTopic(u4)); + + u256 u5 = 1234567890; + BOOST_CHECK_EQUAL("0x00000000000000000000000000000000000000000000000000000000499602d2", + contactEventTopic->u256ToTopic(u5)); + } + + // string + { + std::string s0 = ""; + BOOST_CHECK_EQUAL("0x1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b", + contactEventTopic->stringToTopic(s0)); + + std::string s1 = "HelloWorld"; + BOOST_CHECK_EQUAL("0x44526eeba9235bae33f2bab8ff1f9ca8965b59d58be82af8111f336a00c1c432", + contactEventTopic->stringToTopic(s1)); + + std::string s2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + BOOST_CHECK_EQUAL("0x58cc358e7880b06962f996be258e454af7eecfd3455831dd690566c4bbe025b5", + contactEventTopic->stringToTopic(s2)); + } + + // bytesN + { + bcos::bytes bs0; + BOOST_CHECK_EQUAL("0x0000000000000000000000000000000000000000000000000000000000000000", + contactEventTopic->bytesNToTopic(bs0)); + + bcos::bytes bs1(10, '1'); + BOOST_CHECK_EQUAL("0x3131313131313131313100000000000000000000000000000000000000000000", + contactEventTopic->bytesNToTopic(bs1)); + + bcos::bytes bs2(32, '1'); + BOOST_CHECK_EQUAL("0x3131313131313131313131313131313131313131313131313131313131313131", + contactEventTopic->bytesNToTopic(bs2)); + + bcos::bytes bs3(33, '1'); + BOOST_CHECK_THROW(contactEventTopic->bytesNToTopic(bs3), bcos::InvalidParameter); + } + + // bytes + { + bcos::bytes bs0; + BOOST_CHECK_EQUAL("0x1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b", + contactEventTopic->bytesToTopic(bs0)); + + std::string hex = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; + BOOST_CHECK_EQUAL("0x2cd6eb8aa7aed20ed9665df40f7b3ea261fb6555473d33aea100fe4cb5eda8f9", + contactEventTopic->bytesToTopic(bcos::bytes(hex.begin(), hex.end()))); + } +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-sdk/tests/unittests/amop/TopicManagerTest.cpp b/bcos-sdk/tests/unittests/amop/TopicManagerTest.cpp new file mode 100644 index 0000000..339a0af --- /dev/null +++ b/bcos-sdk/tests/unittests/amop/TopicManagerTest.cpp @@ -0,0 +1,155 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for TopicManager + * @file TopicManagerTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk::amop; +using namespace bcos::test; +using namespace bcos::protocol; + +BOOST_FIXTURE_TEST_SUITE(TopicManagerTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(test_AMOPRequestEncodeDecode) +{ + auto amopRequestFactory = std::make_shared(); + std::string dataStr = "testAMOPRequest"; + auto request = amopRequestFactory->buildRequest(); + request->setData(bcos::bytesConstRef((byte*)dataStr.data(), dataStr.size())); + request->setVersion(10023); + std::string topic = "testAMOPRequest+-@topic"; + request->setTopic(topic); + + BOOST_CHECK(request->version() == 10023); + BOOST_CHECK(request->topic() == topic); + BOOST_CHECK(*(request->data().data()) == *(dataStr.data())); + + // encode + bytes encodedData; + request->encode(encodedData); + + // decode + auto decodedRequest = amopRequestFactory->buildRequest(ref(encodedData)); + BOOST_CHECK(decodedRequest->version() == request->version()); + BOOST_CHECK(decodedRequest->topic() == request->topic()); + BOOST_CHECK(*(decodedRequest->data().data()) == *(request->data().data())); +} +BOOST_AUTO_TEST_CASE(test_TopicManager) +{ + { + auto topicManager = std::make_shared(); + auto topics = topicManager->topics(); + BOOST_CHECK(topics.size() == 0); + + std::string topic1 = "a"; + std::string topic2 = "a"; + std::string topic3 = "a"; + + auto r = topicManager->addTopic(topic1); + BOOST_CHECK(r); + r = topicManager->addTopic(topic1); + BOOST_CHECK(!r); + r = topicManager->addTopic(topic2); + BOOST_CHECK(!r); + r = topicManager->addTopic(topic3); + BOOST_CHECK(!r); + + topics = topicManager->topics(); + BOOST_CHECK(topics.size() == 1); + + r = topicManager->removeTopic(topic1); + BOOST_CHECK(r); + + r = topicManager->removeTopic(topic1); + BOOST_CHECK(!r); + + topics = topicManager->topics(); + BOOST_CHECK(topics.size() == 0); + + BOOST_CHECK(!topicManager->toJson().empty()); + } + + { + auto topicManager = std::make_shared(); + BOOST_CHECK(topicManager->topics().size() == 0); + + std::string topic1 = "a"; + std::string topic2 = "b"; + std::string topic3 = "c"; + std::set topics{topic1, topic2, topic3}; + + auto r = topicManager->addTopics(topics); + BOOST_CHECK(r); + r = topicManager->addTopics(topics); + BOOST_CHECK(!r); + + BOOST_CHECK(topics.size() == topics.size()); + + r = topicManager->removeTopics(topics); + BOOST_CHECK(r); + + r = topicManager->removeTopics(topics); + BOOST_CHECK(!r); + + topics = topicManager->topics(); + BOOST_CHECK(topics.size() == 0); + BOOST_CHECK(!topicManager->toJson().empty()); + } + + { + auto topicManager = std::make_shared(); + BOOST_CHECK(topicManager->topics().size() == 0); + + std::string topic1 = "a"; + std::string topic2 = "a"; + std::string topic3 = "a"; + std::set topics{topic1, topic2, topic3}; + + auto r = topicManager->addTopics(topics); + BOOST_CHECK(r); + r = topicManager->addTopics(topics); + BOOST_CHECK(!r); + + topics = topicManager->topics(); + BOOST_CHECK(topics.size() == topics.size()); + + r = topicManager->removeTopic(topic1); + BOOST_CHECK(r); + + r = topicManager->removeTopic(topic2); + BOOST_CHECK(!r); + + r = topicManager->removeTopic(topic3); + BOOST_CHECK(!r); + + r = topicManager->removeTopics(topics); + BOOST_CHECK(!r); + + topics = topicManager->topics(); + BOOST_CHECK(topics.size() == 0); + BOOST_CHECK(!topicManager->toJson().empty()); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/bcos-sdk/tests/unittests/event/EventSubParamsTest.cpp b/bcos-sdk/tests/unittests/event/EventSubParamsTest.cpp new file mode 100644 index 0000000..991465a --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubParamsTest.cpp @@ -0,0 +1,77 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSubParams + * @file EventSubParamsTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubParamsTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSubParams) +{ + { + auto params = std::make_shared(); + BOOST_CHECK(params->fromBlock() < 0); + BOOST_CHECK(params->toBlock() < 0); + BOOST_CHECK(params->addresses().empty()); + BOOST_CHECK(params->topics().empty()); + } + + { + int64_t fromBlk = 123; + int64_t toBlk = 456; + std::string addr = "0x123456"; + std::string topic = "0x45678"; + + auto params = std::make_shared(); + params->setFromBlock(fromBlk); + params->setToBlock(toBlk); + params->addAddress(addr); + + + BOOST_CHECK_EQUAL(params->fromBlock(), fromBlk); + BOOST_CHECK_EQUAL(params->toBlock(), toBlk); + BOOST_CHECK_EQUAL(params->addresses().size(), 1); + + auto r = params->addTopic(0, topic); + BOOST_CHECK(r); + r = params->addTopic(1, topic); + BOOST_CHECK(r); + r = params->addTopic(2, topic); + BOOST_CHECK(r); + r = params->addTopic(3, topic); + BOOST_CHECK(r); + r = params->addTopic(4, topic); + BOOST_CHECK(!r); + + BOOST_CHECK_EQUAL(params->topics().size(), 5); + for (auto& topics : params->topics()) + { + BOOST_CHECK_EQUAL(topics.size(), 1); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/event/EventSubRequestTest.cpp b/bcos-sdk/tests/unittests/event/EventSubRequestTest.cpp new file mode 100644 index 0000000..d998691 --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubRequestTest.cpp @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSubRequest + * @file EventSubTaskStateTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubRequestTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSubUnsubRequestTest) +{ + { + auto id = std::string("123"); + auto group = std::string("321"); + + auto request = std::make_shared(); + request->setId(id); + request->setGroup(group); + auto json = request->generateJson(); + + auto decodeReq = std::make_shared(); + auto r = decodeReq->fromJson(json); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(decodeReq->group(), group); + BOOST_CHECK_EQUAL(decodeReq->id(), id); + } + + { + auto decodeReq = std::make_shared(); + auto r = decodeReq->fromJson("{}"); + BOOST_CHECK(!r); + } + + { + auto decodeReq = std::make_shared(); + auto r = decodeReq->fromJson("aaa"); + BOOST_CHECK(!r); + } +} + + +BOOST_AUTO_TEST_CASE(test_EventSubSubRequestTest) +{ + { + auto id = std::string("123"); + auto group = std::string("321"); + auto params = std::make_shared(); + auto state = std::make_shared(); + + auto request = std::make_shared(); + request->setId(id); + request->setGroup(group); + request->setParams(params); + request->setState(state); + + auto json = request->generateJson(); + { + auto request = std::make_shared(); + auto r = request->fromJson(json); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(id, request->id()); + BOOST_CHECK_EQUAL(group, request->group()); + auto params = request->params(); + BOOST_CHECK(params->fromBlock() < 0); + BOOST_CHECK(params->toBlock() < 0); + BOOST_CHECK(params->addresses().empty()); + BOOST_CHECK(params->topics().empty()); + } + } + + { + auto id = std::string("111"); + auto group = std::string("222"); + auto fromBlk = 111; + auto toBlk = 222; + auto addr = std::string("0x1111"); + auto topic = std::string("topic"); + auto curBlk = 100; + + auto params = std::make_shared(); + params->setFromBlock(fromBlk); + params->setToBlock(toBlk); + params->addAddress(addr); + params->addTopic(1, topic); + params->addTopic(3, topic); + + auto state = std::make_shared(); + state->setCurrentBlockNumber(curBlk); + + auto request = std::make_shared(); + request->setId(id); + request->setGroup(group); + request->setParams(params); + request->setState(state); + + auto json = request->generateJson(); + { + auto request = std::make_shared(); + auto r = request->fromJson(json); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(id, request->id()); + BOOST_CHECK_EQUAL(group, request->group()); + auto params = request->params(); + BOOST_CHECK_EQUAL(params->fromBlock(), curBlk + 1); + BOOST_CHECK_EQUAL(params->toBlock(), toBlk); + BOOST_CHECK_EQUAL(params->addresses().size(), 1); + BOOST_CHECK(params->addresses().find(addr) != params->addresses().end()); + BOOST_CHECK_EQUAL(params->topics().size(), 4); + BOOST_CHECK_EQUAL(params->topics()[0].size(), 0); + BOOST_CHECK_EQUAL(params->topics()[1].size(), 1); + BOOST_CHECK_EQUAL(params->topics()[2].size(), 0); + BOOST_CHECK_EQUAL(params->topics()[3].size(), 1); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/event/EventSubResponseTest.cpp b/bcos-sdk/tests/unittests/event/EventSubResponseTest.cpp new file mode 100644 index 0000000..8e8f7db --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubResponseTest.cpp @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSubParams + * @file EventSubParamsTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubResponseTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSubResponse) +{ + { + std::string id = "0x12345"; + int status = 111; + auto resp = std::make_shared(); + resp->setId(id); + resp->setStatus(status); + auto json = resp->generateJson(); + + resp->setStatus(0); + resp->setId(""); + + auto r = resp->fromJson(json); + + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(id, resp->id()); + BOOST_CHECK_EQUAL(status, resp->status()); + + BOOST_CHECK(!resp->fromJson("{}")); + BOOST_CHECK(!resp->fromJson("aaa")); + } +} + +BOOST_AUTO_TEST_CASE(test_EventSubResponse_Event) +{ + { + auto resp = std::make_shared(); + auto json = + "{\"id\":\"0x123\",\"status\":0,\"result\":{\"blockNumber\":111,\"events\":[]}}"; + auto r = resp->fromJson(json); + BOOST_CHECK(r); + + BOOST_CHECK_EQUAL("0x123", resp->id()); + BOOST_CHECK_EQUAL(0, resp->status()); + + BOOST_CHECK(resp->jResp().isMember("result")); + BOOST_CHECK(resp->jResp()["result"].isMember("blockNumber")); + BOOST_CHECK_EQUAL(resp->jResp()["result"]["blockNumber"].asInt64(), 111); + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/event/EventSubTaskStateTest.cpp b/bcos-sdk/tests/unittests/event/EventSubTaskStateTest.cpp new file mode 100644 index 0000000..8234039 --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubTaskStateTest.cpp @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSubTaskState + * @file EventSubTaskStateTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubTaskStateTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSubTaskStateTest) +{ + auto state = std::make_shared(); + BOOST_CHECK(state->currentBlockNumber() < 0); + int64_t blockNumber = 10; + state->setCurrentBlockNumber(blockNumber); + BOOST_CHECK_EQUAL(state->currentBlockNumber(), blockNumber); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/event/EventSubTaskTest.cpp b/bcos-sdk/tests/unittests/event/EventSubTaskTest.cpp new file mode 100644 index 0000000..e55ecc5 --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubTaskTest.cpp @@ -0,0 +1,60 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSubTask + * @file EventSubTaskTest.cpp + * @author: octopus + * @date 2021-09-22 + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubTaskTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSubTask) +{ + auto id = std::string("123"); + auto group = std::string("321"); + auto params = std::shared_ptr(); + auto state = std::shared_ptr(); + + auto task = std::make_shared(); + task->setId(id); + task->setGroup(group); + task->setParams(params); + task->setState(state); + task->setCallback([](bcos::Error::Ptr _error, const std::string& _resp) { + boost::ignore_unused(_error, _resp); + }); + + BOOST_CHECK_EQUAL(id, task->id()); + BOOST_CHECK_EQUAL(group, task->group()); + BOOST_CHECK_EQUAL(params, task->params()); + BOOST_CHECK_EQUAL(state, task->state()); + BOOST_CHECK(task->callback()); +} + + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/event/EventSubTest.cpp b/bcos-sdk/tests/unittests/event/EventSubTest.cpp new file mode 100644 index 0000000..1c458ba --- /dev/null +++ b/bcos-sdk/tests/unittests/event/EventSubTest.cpp @@ -0,0 +1,214 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for EventSub + * @file EventSubTest.cpp + * @author: octopus + * @date 2021-09-22 + */ +#include "../fake/WsServiceFake.h" +#include "../fake/WsSessionFake.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(EventSubTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_EventSub_suspendTask) +{ + auto es = std::make_shared(); + auto task = std::make_shared(); + std::string id = "123"; + task->setId(id); + + auto r = es->addSuspendTask(task); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + r = es->addSuspendTask(task); + BOOST_CHECK(!r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + + r = es->removeSuspendTask(id); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + + r = es->removeSuspendTask(id); + BOOST_CHECK(!r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); +} + +BOOST_AUTO_TEST_CASE(test_EventSub_addTask) +{ + auto es = std::make_shared(); + auto task1 = std::make_shared(); + auto task2 = std::make_shared(); + + std::string id1 = "123"; + std::string id2 = "456"; + task1->setId(id1); + task2->setId(id2); + + { + // addTask + auto r = es->addTask(task1); + BOOST_CHECK(r); + r = es->addTask(task1); + BOOST_CHECK(!r); + + // getAndRemove + auto task = es->getTask(id1); + BOOST_CHECK(task); + task = es->getTaskAndRemove(id1); + BOOST_CHECK(task); + task = es->getTask(id1); + BOOST_CHECK(!task); + task = es->getTaskAndRemove(id1); + BOOST_CHECK(!task); + } + + { + // addTask + auto r = es->addTask(task1); + BOOST_CHECK(r); + r = es->addTask(task1); + BOOST_CHECK(!r); + + // getAndRemove + auto task = es->getTask(id1); + BOOST_CHECK(task); + task = es->getTaskAndRemove(id1); + BOOST_CHECK(task); + task = es->getTask(id1); + BOOST_CHECK(!task); + task = es->getTaskAndRemove(id1); + BOOST_CHECK(!task); + } + + { + auto r = es->addSuspendTask(task2); + BOOST_CHECK(r); + r = es->addSuspendTask(task2); + BOOST_CHECK(!r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + + auto task = es->getTask(id2, false); + BOOST_CHECK(!task); + + task = es->getTask(id2); + BOOST_CHECK(task); + + task = es->getTaskAndRemove(id2, false); + BOOST_CHECK(!task); + + task = es->getTaskAndRemove(id2); + BOOST_CHECK(task); + + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + } + + { + auto r = es->addSuspendTask(task2); + BOOST_CHECK(r); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + + r = es->addTask(task2); + BOOST_CHECK(r); + + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + } +} + +BOOST_AUTO_TEST_CASE(test_EventSub_unsubscribeEvent) +{ + auto es = std::make_shared(); + auto messageFactory = std::make_shared(); + es->setMessageFactory(messageFactory); + + auto task = std::make_shared(); + std::string id = "123"; + task->setId(id); + { + // task is suspend + es->addSuspendTask(task); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + std::promise p; + auto f = p.get_future(); + + BOOST_CHECK(!es->getTask(id, false)); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + + BOOST_CHECK(es->getTask(id)); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 1); + + es->unsubscribeEvent(id); + + BOOST_CHECK(!es->getTask(id)); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + } + + + { + // task is running + auto session = + std::make_shared("test_EventSub_unsubscribeEvent"); + task->setSession(session); + + std::string resp = "{}"; + session->setResp(std::make_shared(resp.begin(), resp.end())); + es->addTask(task); + + // callback error + es->unsubscribeEvent(id); + + BOOST_CHECK(!es->getTask(id)); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + } + + { + // task is running + auto session = + std::make_shared("test_EventSub_unsubscribeEvent"); + + task->setSession(session); + + es->addTask(task); + + auto resp = std::make_shared(); + resp->setId(task->id()); + resp->setStatus(0); + + session->setError(nullptr); + auto respJson = resp->generateJson(); + session->setResp(std::make_shared(respJson.begin(), respJson.end())); + + es->unsubscribeEvent(id); + + BOOST_CHECK(!es->getTask(id)); + BOOST_CHECK_EQUAL(es->suspendTasksCount(), 0); + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/fake/WsServiceFake.h b/bcos-sdk/tests/unittests/fake/WsServiceFake.h new file mode 100644 index 0000000..af0e584 --- /dev/null +++ b/bcos-sdk/tests/unittests/fake/WsServiceFake.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsServiceFake.h + * @author: octopus + * @date 2021-09-24 + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace test +{ +class WsServiceFake : public bcos::boostssl::ws::WsService +{ +public: + using Ptr = std::shared_ptr; + +public: + virtual void asyncSendMessage(std::shared_ptr _msg, + bcos::boostssl::ws::Options _options = bcos::boostssl::ws::Options(-1), + bcos::boostssl::ws::RespCallBack _respFunc = bcos::boostssl::ws::RespCallBack()) override + { + (void)_msg; + (void)_options; + + auto msg = std::make_shared(); + msg->setPayload(m_resp); + auto session = shared_from_this(); + _respFunc(m_error, _msg, m_session); + } + +public: + void setError(bcos::Error::Ptr _error) { m_error = _error; } + void setResp(std::shared_ptr _resp) { m_resp = _resp; } + void setSession(std::shared_ptr _session) + { + m_session = _session; + } + +private: + bcos::Error::Ptr m_error; + std::shared_ptr m_resp; + std::shared_ptr m_session; +}; +} // namespace test +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/fake/WsSessionFake.h b/bcos-sdk/tests/unittests/fake/WsSessionFake.h new file mode 100644 index 0000000..ed1cc62 --- /dev/null +++ b/bcos-sdk/tests/unittests/fake/WsSessionFake.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file WsSessionFake.h + * @author: octopus + * @date 2021-09-24 + */ +#pragma once +#include +#include +#include +#include + +namespace bcos +{ +namespace cppsdk +{ +namespace test +{ +class WsSessionFake : public bcos::boostssl::ws::WsSession +{ +public: + WsSessionFake(std::string _moduleName) : bcos::boostssl::ws::WsSession(_moduleName) + { + WEBSOCKET_SESSION(INFO) << LOG_KV("[NEWOBJ][WSSESSION]", this); + } + using Ptr = std::shared_ptr; + +public: + virtual void asyncSendMessage(std::shared_ptr _msg, + bcos::boostssl::ws::Options _options = bcos::boostssl::ws::Options(-1), + bcos::boostssl::ws::RespCallBack _respCallback = + bcos::boostssl::ws::RespCallBack()) override + { + (void)_msg; + (void)_options; + auto msg = std::make_shared(); + msg->setPayload(m_resp); + auto session = shared_from_this(); + _respCallback(m_error, msg, session); + } + +public: + virtual bool isConnected() override { return true; } + +public: + void setError(bcos::Error::Ptr _error) { m_error = _error; } + void setResp(std::shared_ptr _resp) { m_resp = _resp; } + +private: + bcos::Error::Ptr m_error; + std::shared_ptr m_resp; +}; +} // namespace test +} // namespace cppsdk +} // namespace bcos \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/main.cpp b/bcos-sdk/tests/unittests/main.cpp new file mode 100644 index 0000000..0cdfc68 --- /dev/null +++ b/bcos-sdk/tests/unittests/main.cpp @@ -0,0 +1,4 @@ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/tx/TransactionTest.cpp b/bcos-sdk/tests/unittests/tx/TransactionTest.cpp new file mode 100644 index 0000000..fa5fd3c --- /dev/null +++ b/bcos-sdk/tests/unittests/tx/TransactionTest.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file TransactionTest.cpp + * @author: yujiechen + * @date 2022-05-31 + */ + +#include +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::crypto; + +namespace bcos::test +{ +BOOST_FIXTURE_TEST_SUITE(TransactionTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_transaction) +{ + TransactionData txData; + std::string to("Target"); + bcos::bytes input(bcos::asBytes("Arguments")); + bcos::u256 nonce(800); + + txData.version = 0; + txData.to = to; + vector txInput(input.begin(), input.end()); + txData.input = std::move(txInput); + txData.nonce = boost::lexical_cast(nonce); + txData.blockLimit = 100; + txData.chainID = "testChain"; + txData.groupID = "testGroup"; + + auto cryptoSuite = + std::make_shared(std::make_shared(), + std::make_shared(), nullptr); + + // auto hash = txData.hash(cryptoSuite->hashImpl()); + // BOOST_CHECK_EQUAL( + // hash.hex(), "3577ef0338695b03c6f19d8b7c1aa1f443973214dde94879a44188490529ea70"); + + // // set version to 10 + // txData.version = 10; + // hash = txData.hash(cryptoSuite->hashImpl()); + // BOOST_CHECK_EQUAL( + // hash.hex(), "435da41370f4711de4259094c8362a7332cf752ec359d057bee97453ca9e5072"); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/ws/BlockNumberInfoTest.cpp b/bcos-sdk/tests/unittests/ws/BlockNumberInfoTest.cpp new file mode 100644 index 0000000..119f771 --- /dev/null +++ b/bcos-sdk/tests/unittests/ws/BlockNumberInfoTest.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BlockNumberTest.cpp + * @author: octopus + * @date 2021-10-26 + */ + +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::service; + +using namespace bcos; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(BlockNumberTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_BlockNumber) +{ + { + int64_t blockNumber = 11; + std::string group = "group"; + std::string node = "node"; + + auto bni = std::make_shared(); + bni->setBlockNumber(blockNumber); + bni->setGroup(group); + bni->setNode(node); + + BOOST_CHECK_EQUAL(bni->blockNumber(), blockNumber); + BOOST_CHECK_EQUAL(bni->group(), group); + BOOST_CHECK_EQUAL(bni->node(), node); + } +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sdk/tests/unittests/ws/HandshakeResponseTest.cpp b/bcos-sdk/tests/unittests/ws/HandshakeResponseTest.cpp new file mode 100644 index 0000000..8b0446a --- /dev/null +++ b/bcos-sdk/tests/unittests/ws/HandshakeResponseTest.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file HandshakeResponseTest.cpp + * @author: octopus + * @date 2021-10-26 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::cppsdk; +using namespace bcos::cppsdk::service; + +using namespace bcos; +using namespace bcos::rpc; +using namespace bcos::test; + +BOOST_FIXTURE_TEST_SUITE(HandshakeResponseTest, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(test_HandshakeResponse) +{ + auto groupInfoCodec = std::make_shared(); + { + int protocolVersion = 111; + auto response = std::make_shared(groupInfoCodec); + response->setProtocolVersion(protocolVersion); + BOOST_CHECK_EQUAL(response->protocolVersion(), protocolVersion); + } + + { + int protocolVersion = 111; + auto response = std::make_shared(groupInfoCodec); + response->setProtocolVersion(protocolVersion); + std::string encodedData; + response->encode(encodedData); + + auto response1 = std::make_shared(groupInfoCodec); + auto r = response1->decode(encodedData); + + BOOST_CHECK_EQUAL(r, true); + BOOST_CHECK_EQUAL(response1->protocolVersion(), protocolVersion); + } + + { + auto response = std::make_shared(groupInfoCodec); + BOOST_CHECK_EQUAL(response->decode("1adf"), false); + } +} +BOOST_AUTO_TEST_CASE(test_HandshakeRequest) +{ + auto protocolInfo = std::make_shared( + bcos::protocol::ProtocolModuleID::RpcService, 1, 10000); + HandshakeRequest request(protocolInfo); + auto encodedData = request.encode(); + + // decode + HandshakeRequest decodedRequest; + decodedRequest.decode(*encodedData); + BOOST_CHECK_EQUAL( + request.protocol().protocolModuleID(), decodedRequest.protocol().protocolModuleID()); + BOOST_CHECK_EQUAL(request.protocol().minVersion(), decodedRequest.protocol().minVersion()); + BOOST_CHECK_EQUAL(request.protocol().maxVersion(), decodedRequest.protocol().maxVersion()); + + // decode exception + HandshakeRequest exceptionRequest; + std::string invalidData = "invalidTest"; + BOOST_CHECK_EQUAL( + exceptionRequest.decode(bcos::bytes(invalidData.begin(), invalidData.end())), false); +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-sealer/CMakeLists.txt b/bcos-sealer/CMakeLists.txt new file mode 100644 index 0000000..0aa89c2 --- /dev/null +++ b/bcos-sealer/CMakeLists.txt @@ -0,0 +1,29 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-sealer +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-sealer +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + + +project(bcos-sealer VERSION ${VERSION}) + +aux_source_directory(./bcos-sealer SRC_LIST) +include_directories(./bcos-sealer) +add_library(${SEALER_TARGET} ${SRC_LIST}) + +target_link_libraries(${SEALER_TARGET} PUBLIC ${UTILITIES_TARGET} bcos-framework) \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/Common.h b/bcos-sealer/bcos-sealer/Common.h new file mode 100644 index 0000000..335df60 --- /dev/null +++ b/bcos-sealer/bcos-sealer/Common.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date: 2021-05-14 + */ +#pragma once +#include +#define SEAL_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("CONSENSUS") << LOG_BADGE("SEALER") \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/Sealer.cpp b/bcos-sealer/bcos-sealer/Sealer.cpp new file mode 100644 index 0000000..8b1890e --- /dev/null +++ b/bcos-sealer/bcos-sealer/Sealer.cpp @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Sealer.cpp + * @author: yujiechen + * @date: 2021-05-14 + */ +#include "Sealer.h" +#include "Common.h" +#include + +using namespace bcos; +using namespace bcos::sealer; +using namespace bcos::protocol; + +void Sealer::start() +{ + if (m_running) + { + SEAL_LOG(INFO) << LOG_DESC("the sealer has already been started"); + return; + } + SEAL_LOG(INFO) << LOG_DESC("start the sealer"); + startWorking(); + m_running = true; +} + +void Sealer::stop() +{ + if (!m_running) + { + SEAL_LOG(INFO) << LOG_DESC("the sealer has already been stopped"); + return; + } + SEAL_LOG(INFO) << LOG_DESC("stop the sealer"); + m_running = false; + m_sealingManager->stop(); + finishWorker(); + if (isWorking()) + { + stopWorking(); + // will not restart worker, so terminate it + terminate(); + } +} + +void Sealer::init(bcos::consensus::ConsensusInterface::Ptr _consensus) +{ + m_sealerConfig->setConsensusInterface(_consensus); +} + +void Sealer::asyncNotifySealProposal(uint64_t _proposalStartIndex, uint64_t _proposalEndIndex, + uint64_t _maxTxsPerBlock, std::function _onRecvResponse) +{ + m_sealingManager->resetSealingInfo(_proposalStartIndex, _proposalEndIndex, _maxTxsPerBlock); + if (_onRecvResponse) + { + _onRecvResponse(nullptr); + } + SEAL_LOG(INFO) << LOG_DESC("asyncNotifySealProposal") + << LOG_KV("startIndex", _proposalStartIndex) + << LOG_KV("endIndex", _proposalEndIndex) + << LOG_KV("maxTxsPerBlock", _maxTxsPerBlock); +} + +void Sealer::asyncNoteLatestBlockNumber(int64_t _blockNumber) +{ + m_sealingManager->resetCurrentNumber(_blockNumber); + SEAL_LOG(INFO) << LOG_DESC("asyncNoteLatestBlockNumber") << LOG_KV("number", _blockNumber); +} + +void Sealer::asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) +{ + m_sealingManager->setUnsealedTxsSize(_unsealedTxsSize); + if (_onRecvResponse) + { + _onRecvResponse(nullptr); + } +} + +void Sealer::executeWorker() +{ + if (!m_sealingManager->shouldGenerateProposal() && !m_sealingManager->shouldFetchTransaction()) + { + ///< 10 milliseconds to next loop + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(1)); + } + // try to generateProposal + if (m_sealingManager->shouldGenerateProposal()) + { + auto ret = m_sealingManager->generateProposal(); + auto proposal = ret.second; + submitProposal(ret.first, proposal); + } + // try to fetch transactions + if (m_sealingManager->shouldFetchTransaction()) + { + m_sealingManager->fetchTransactions(); + } +} + +void Sealer::submitProposal(bool _containSysTxs, bcos::protocol::Block::Ptr _block) +{ + // Note: the block maybe empty + if (!_block) + { + return; + } + if (_block->blockHeader()->number() <= m_sealingManager->currentNumber()) + { + SEAL_LOG(INFO) << LOG_DESC("submitProposal return for the block has alreay been committed") + << LOG_KV("proposalIndex", _block->blockHeader()->number()) + << LOG_KV("currentNumber", m_sealingManager->currentNumber()); + m_sealingManager->notifyResetProposal(_block); + return; + } + // supplement the header info: set sealerList and weightList + std::vector sealerList; + std::vector weightList; + auto consensusNodeInfo = m_sealerConfig->consensus()->consensusNodeList(); + for (auto const& consensusNode : consensusNodeInfo) + { + sealerList.push_back(consensusNode->nodeID()->data()); + weightList.push_back(consensusNode->weight()); + } + _block->blockHeader()->setSealerList(std::move(sealerList)); + _block->blockHeader()->setConsensusWeights(std::move(weightList)); + _block->blockHeader()->setSealer(m_sealerConfig->consensus()->nodeIndex()); + // set the version + auto version = std::min(m_sealerConfig->consensus()->compatibilityVersion(), + (uint32_t)g_BCOSConfig.maxSupportedVersion()); + _block->blockHeader()->setVersion(version); + _block->blockHeader()->calculateHash(*m_hashImpl); + + auto encodedData = std::make_shared(); + _block->encode(*encodedData); + SEAL_LOG(INFO) << LOG_DESC("++++++++++++++++ Generate proposal") + << LOG_KV("index", _block->blockHeader()->number()) + << LOG_KV("curNum", m_sealingManager->currentNumber()) + << LOG_KV("hash", _block->blockHeader()->hash().abridged()) + << LOG_KV("sysTxs", _containSysTxs) + << LOG_KV("txsSize", _block->transactionsHashSize()) + << LOG_KV("version", version); + m_sealerConfig->consensus()->asyncSubmitProposal(_containSysTxs, ref(*encodedData), + _block->blockHeader()->number(), _block->blockHeader()->hash(), + [_block](Error::Ptr _error) { + if (_error == nullptr) + { + return; + } + SEAL_LOG(WARNING) << LOG_DESC("asyncSubmitProposal failed: put back the transactions") + << LOG_KV("txsSize", _block->transactionsHashSize()); + }); +} + +void Sealer::asyncResetSealing(std::function _onRecvResponse) +{ + m_sealingManager->resetSealing(); + if (_onRecvResponse) + { + _onRecvResponse(nullptr); + } +} diff --git a/bcos-sealer/bcos-sealer/Sealer.h b/bcos-sealer/bcos-sealer/Sealer.h new file mode 100644 index 0000000..91ebc6b --- /dev/null +++ b/bcos-sealer/bcos-sealer/Sealer.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Sealer.h + * @author: yujiechen + * @date: 2021-05-14 + */ +#pragma once +#include "SealerConfig.h" +#include "SealingManager.h" +#include "bcos-framework/sealer/SealerInterface.h" +#include + +#include + +namespace bcos::sealer +{ +class Sealer : public Worker, public SealerInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + explicit Sealer(SealerConfig::Ptr _sealerConfig) + : Worker("Sealer", 0), m_sealerConfig(std::move(_sealerConfig)) + { + m_sealingManager = std::make_shared(m_sealerConfig); + m_sealingManager->onReady([=, this]() { this->noteGenerateProposal(); }); + m_hashImpl = m_sealerConfig->blockFactory()->cryptoSuite()->hashImpl(); + } + ~Sealer() override = default; + + void start() override; + void stop() override; + + void asyncNotifySealProposal(uint64_t _proposalStartIndex, uint64_t _proposalEndIndex, + uint64_t _maxTxsPerBlock, std::function _onRecvResponse) override; + void asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) override; + + void asyncNoteLatestBlockNumber(int64_t _blockNumber) override; + // interface for the consensus module to notify reset the sealing transactions + void asyncResetSealing(std::function _onRecvResponse) override; + + virtual void init(bcos::consensus::ConsensusInterface::Ptr _consensus); + +protected: + void executeWorker() override; + virtual void noteGenerateProposal() { m_signalled.notify_all(); } + + virtual void submitProposal(bool _containSysTxs, bcos::protocol::Block::Ptr _proposal); + +protected: + SealerConfig::Ptr m_sealerConfig; + SealingManager::Ptr m_sealingManager; + std::atomic_bool m_running = {false}; + + boost::condition_variable m_signalled; + // mutex to access m_signalled + boost::mutex x_signalled; + bcos::crypto::Hash::Ptr m_hashImpl; +}; +} // namespace bcos::sealer \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/SealerConfig.h b/bcos-sealer/bcos-sealer/SealerConfig.h new file mode 100644 index 0000000..a5d292f --- /dev/null +++ b/bcos-sealer/bcos-sealer/SealerConfig.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SealerConfig.h + * @author: yujiechen + * @date: 2021-05-14 + */ +#pragma once +#include "bcos-framework/consensus/ConsensusInterface.h" +#include "bcos-framework/protocol/BlockFactory.h" +#include "bcos-framework/txpool/TxPoolInterface.h" +#include "bcos-tool/NodeTimeMaintenance.h" + +namespace bcos +{ +namespace sealer +{ +class SealerConfig +{ +public: + using Ptr = std::shared_ptr; + SealerConfig(bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txpool, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : m_txpool(_txpool), m_blockFactory(_blockFactory), + m_nodeTimeMaintenance(_nodeTimeMaintenance) + {} + virtual ~SealerConfig() {} + + virtual void setConsensusInterface(bcos::consensus::ConsensusInterface::Ptr _consensus) + { + m_consensus = _consensus; + } + virtual bcos::txpool::TxPoolInterface::Ptr txpool() { return m_txpool; } + + virtual unsigned minSealTime() const { return m_minSealTime; } + virtual void setMinSealTime(unsigned _minSealTime) { m_minSealTime = _minSealTime; } + + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + bcos::consensus::ConsensusInterface::Ptr consensus() { return m_consensus; } + bcos::tool::NodeTimeMaintenance::Ptr nodeTimeMaintenance() { return m_nodeTimeMaintenance; } + +protected: + bcos::txpool::TxPoolInterface::Ptr m_txpool; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::consensus::ConsensusInterface::Ptr m_consensus; + bcos::tool::NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; + unsigned m_minSealTime = 500; +}; +} // namespace sealer +} // namespace bcos \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/SealerFactory.cpp b/bcos-sealer/bcos-sealer/SealerFactory.cpp new file mode 100644 index 0000000..0be138c --- /dev/null +++ b/bcos-sealer/bcos-sealer/SealerFactory.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SealerFactory.cpp + * @author: yujiechen + * @date: 2021-05-20 + */ +#include "SealerFactory.h" + +#include "Sealer.h" +#include "bcos-tool/NodeTimeMaintenance.h" +#include + +using namespace bcos; +using namespace bcos::sealer; + +SealerFactory::SealerFactory(bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txpool, unsigned _minSealTime, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : m_blockFactory(std::move(_blockFactory)), + m_txpool(std::move(_txpool)), + m_minSealTime(_minSealTime), + m_nodeTimeMaintenance(std::move(_nodeTimeMaintenance)) +{} + +Sealer::Ptr SealerFactory::createSealer() +{ + auto sealerConfig = + std::make_shared(m_blockFactory, m_txpool, m_nodeTimeMaintenance); + sealerConfig->setMinSealTime(m_minSealTime); + return std::make_shared(sealerConfig); +} \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/SealerFactory.h b/bcos-sealer/bcos-sealer/SealerFactory.h new file mode 100644 index 0000000..2006308 --- /dev/null +++ b/bcos-sealer/bcos-sealer/SealerFactory.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SealerFactory.h + * @author: yujiechen + * @date: 2021-05-20 + */ +#pragma once +#include "Sealer.h" +#include "SealerConfig.h" +namespace bcos +{ +namespace sealer +{ +class SealerFactory +{ +public: + using Ptr = std::shared_ptr; + SealerFactory(bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::txpool::TxPoolInterface::Ptr _txpool, unsigned _minSealTime, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance); + + virtual ~SealerFactory() = default; + Sealer::Ptr createSealer(); + +protected: + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + unsigned m_minSealTime; + bcos::tool::NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; +}; +} // namespace sealer +} // namespace bcos \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/SealingManager.cpp b/bcos-sealer/bcos-sealer/SealingManager.cpp new file mode 100644 index 0000000..cacc18d --- /dev/null +++ b/bcos-sealer/bcos-sealer/SealingManager.cpp @@ -0,0 +1,305 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SealingManager.cpp + * @author: yujiechen + * @date: 2021-05-14 + */ +#include "SealingManager.h" +using namespace bcos; +using namespace bcos::sealer; +using namespace bcos::crypto; +using namespace bcos::protocol; + +void SealingManager::resetSealing() +{ + SEAL_LOG(INFO) << LOG_DESC("resetSealing") << LOG_KV("startNum", m_startSealingNumber) + << LOG_KV("endNum", m_endSealingNumber) << LOG_KV("sealingNum", m_sealingNumber) + << LOG_KV("pendingTxs", pendingTxsSize()) + << LOG_KV("unsealedTxs", m_unsealedTxsSize); + m_sealingNumber = m_endSealingNumber + 1; + clearPendingTxs(); +} + +void SealingManager::appendTransactions( + std::shared_ptr _txsQueue, Block::Ptr _fetchedTxs) +{ + WriteGuard l(x_pendingTxs); + // append the system transactions + for (size_t i = 0; i < _fetchedTxs->transactionsMetaDataSize(); i++) + { + _txsQueue->emplace_back( + std::const_pointer_cast(_fetchedTxs->transactionMetaData(i))); + } + m_onReady(); +} + +bool SealingManager::shouldGenerateProposal() +{ + if (m_sealingNumber < m_startSealingNumber || m_sealingNumber > m_endSealingNumber) + { + clearPendingTxs(); + return false; + } + // should wait the given block submit to the ledger + if (m_currentNumber < m_waitUntil) + { + return false; + } + // check the txs size + auto txsSize = pendingTxsSize(); + if (txsSize >= m_maxTxsPerBlock || reachMinSealTimeCondition()) + { + return true; + } + return false; +} + +void SealingManager::clearPendingTxs() +{ + UpgradableGuard l(x_pendingTxs); + auto pendingTxsSize = m_pendingTxs->size() + m_pendingSysTxs->size(); + if (pendingTxsSize == 0) + { + return; + } + // return the txs back to the txpool + SEAL_LOG(INFO) << LOG_DESC("clearPendingTxs: return back the unhandled transactions") + << LOG_KV("size", pendingTxsSize); + HashListPtr unHandledTxs = std::make_shared(); + for (const auto& txMetaData : *m_pendingTxs) + { + unHandledTxs->emplace_back(txMetaData->hash()); + } + for (const auto& txMetaData : *m_pendingSysTxs) + { + unHandledTxs->emplace_back(txMetaData->hash()); + } + auto self = weak_from_this(); + m_worker->enqueue([self, unHandledTxs]() { + try + { + auto sealerMgr = self.lock(); + if (!sealerMgr) + { + return; + } + sealerMgr->notifyResetTxsFlag(unHandledTxs, false); + } + catch (std::exception const& e) + { + SEAL_LOG(WARNING) << LOG_DESC( + "clearPendingTxs: return back the unhandled txs exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + UpgradeGuard ul(l); + m_pendingTxs->clear(); + m_pendingSysTxs->clear(); +} + +void SealingManager::notifyResetTxsFlag(HashListPtr _txsHashList, bool _flag, size_t _retryTime) +{ + m_config->txpool()->asyncMarkTxs(_txsHashList, _flag, -1, HashType(), + [this, _txsHashList, _flag, _retryTime](Error::Ptr _error) { + if (_error == nullptr) + { + return; + } + SEAL_LOG(WARNING) << LOG_DESC("asyncMarkTxs failed, retry now"); + if (_retryTime >= 3) + { + return; + } + this->notifyResetTxsFlag(_txsHashList, _flag, _retryTime + 1); + }); +} + +void SealingManager::notifyResetProposal(bcos::protocol::Block::Ptr _block) +{ + auto txsHashList = std::make_shared(); + for (size_t i = 0; i < _block->transactionsHashSize(); i++) + { + txsHashList->push_back(_block->transactionHash(i)); + } + notifyResetTxsFlag(txsHashList, false); +} + +std::pair SealingManager::generateProposal() +{ + if (!shouldGenerateProposal()) + { + return std::pair(false, nullptr); + } + WriteGuard l(x_pendingTxs); + m_sealingNumber = std::max(m_sealingNumber.load(), m_currentNumber.load() + 1); + auto block = m_config->blockFactory()->createBlock(); + auto blockHeader = m_config->blockFactory()->blockHeaderFactory()->createBlockHeader(); + blockHeader->setNumber(m_sealingNumber); + blockHeader->setTimestamp(m_config->nodeTimeMaintenance()->getAlignedTime()); + blockHeader->calculateHash(*m_config->blockFactory()->cryptoSuite()->hashImpl()); + block->setBlockHeader(blockHeader); + auto txsSize = + std::min((size_t)m_maxTxsPerBlock, (m_pendingTxs->size() + m_pendingSysTxs->size())); + // prioritize seal from the system txs list + auto systemTxsSize = std::min(txsSize, m_pendingSysTxs->size()); + if (!m_pendingSysTxs->empty()) + { + m_waitUntil.store(m_sealingNumber); + SEAL_LOG(INFO) << LOG_DESC("seal the system transactions") + << LOG_KV("sealNextBlockUntil", m_waitUntil) + << LOG_KV("curNum", m_currentNumber); + } + bool containSysTxs = false; + for (size_t i = 0; i < systemTxsSize; i++) + { + block->appendTransactionMetaData(std::move(m_pendingSysTxs->front())); + m_pendingSysTxs->pop_front(); + containSysTxs = true; + } + for (size_t i = systemTxsSize; i < txsSize; i++) + { + block->appendTransactionMetaData(std::move(m_pendingTxs->front())); + m_pendingTxs->pop_front(); + } + m_sealingNumber++; + + m_lastSealTime = utcSteadyTime(); + // Note: When the last block(N) sealed by this node contains system transactions, + // if other nodes do not wait until block(N) is committed and directly seal block(N+1), + // will cause system exceptions. + return {containSysTxs, block}; +} + +size_t SealingManager::pendingTxsSize() +{ + ReadGuard l(x_pendingTxs); + return m_pendingSysTxs->size() + m_pendingTxs->size(); +} + +bool SealingManager::reachMinSealTimeCondition() +{ + auto txsSize = pendingTxsSize(); + if (txsSize == 0) + { + return false; + } + if ((utcSteadyTime() - m_lastSealTime) < m_config->minSealTime()) + { + return false; + } + return true; +} + +bool SealingManager::shouldFetchTransaction() +{ + // fetching transactions currently + if (m_fetchingTxs.load() || m_unsealedTxsSize == 0) + { + return false; + } + // no need to sealing + if (m_sealingNumber < m_startSealingNumber || m_sealingNumber > m_endSealingNumber) + { + return false; + } + return true; +} + +int64_t SealingManager::txsSizeExpectedToFetch() +{ + auto txsSizeToFetch = (m_endSealingNumber - m_sealingNumber + 1) * m_maxTxsPerBlock; + auto txsSize = pendingTxsSize(); + if (txsSizeToFetch <= txsSize) + { + return 0; + } + return (txsSizeToFetch - txsSize); +} + +void SealingManager::fetchTransactions() +{ + if (!shouldFetchTransaction()) + { + return; + } + auto txsToFetch = txsSizeExpectedToFetch(); + if (txsToFetch == 0) + { + return; + } + // try to fetch transactions + m_fetchingTxs = true; + ssize_t startSealingNumber = m_startSealingNumber; + ssize_t endSealingNumber = m_endSealingNumber; + auto self = weak_from_this(); + m_config->txpool()->asyncSealTxs(txsToFetch, nullptr, + [self, startSealingNumber, endSealingNumber]( + Error::Ptr _error, Block::Ptr _txsHashList, Block::Ptr _sysTxsList) { + try + { + auto sealingMgr = self.lock(); + if (!sealingMgr) + { + return; + } + if (_error != nullptr) + { + SEAL_LOG(WARNING) << LOG_DESC("fetchTransactions exception") + << LOG_KV("returnCode", _error->errorCode()) + << LOG_KV("returnMsg", _error->errorMessage()); + sealingMgr->m_fetchingTxs = false; + return; + } + bool abort = true; + if ((sealingMgr->m_sealingNumber >= startSealingNumber) && + (sealingMgr->m_sealingNumber <= endSealingNumber)) + { + sealingMgr->appendTransactions(sealingMgr->m_pendingTxs, _txsHashList); + sealingMgr->appendTransactions(sealingMgr->m_pendingSysTxs, _sysTxsList); + abort = false; + } + else + { + SEAL_LOG(INFO) << LOG_DESC("fetchTransactions finish: abort the expired txs") + << LOG_KV("txsSize", _txsHashList->transactionsMetaDataSize()) + << LOG_KV("sysTxsSize", _sysTxsList->transactionsMetaDataSize()); + // Note: should reset the aborted txs + sealingMgr->notifyResetProposal(_txsHashList); + sealingMgr->notifyResetProposal(_sysTxsList); + } + sealingMgr->m_fetchingTxs = false; + sealingMgr->m_onReady(); + SEAL_LOG(DEBUG) << LOG_DESC("fetchTransactions finish") + << LOG_KV("txsSize", _txsHashList->transactionsMetaDataSize()) + << LOG_KV("sysTxsSize", _sysTxsList->transactionsMetaDataSize()) + << LOG_KV("startSealingNumber", startSealingNumber) + << LOG_KV("endSealingNumber", endSealingNumber) + << LOG_KV("sealingNumber", sealingMgr->m_sealingNumber) + << LOG_KV("abort", abort); + } + catch (std::exception const& e) + { + SEAL_LOG(WARNING) << LOG_DESC("fetchTransactions: onRecv sealed txs failed") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV( + "fetchedTxsSize", _txsHashList->transactionsMetaDataSize()) + << LOG_KV( + "fetchedSysTxs", _sysTxsList->transactionsMetaDataSize()) + << LOG_KV("returnCode", _error->errorCode()) + << LOG_KV("returnMsg", _error->errorMessage()); + } + }); +} \ No newline at end of file diff --git a/bcos-sealer/bcos-sealer/SealingManager.h b/bcos-sealer/bcos-sealer/SealingManager.h new file mode 100644 index 0000000..61c2d59 --- /dev/null +++ b/bcos-sealer/bcos-sealer/SealingManager.h @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SealingManager.h + * @author: yujiechen + * @date: 2021-05-14 + */ +#pragma once +#include "Common.h" +#include "SealerConfig.h" +#include "bcos-framework/protocol/BlockFactory.h" +#include "bcos-framework/protocol/TransactionMetaData.h" +#include +#include +namespace bcos +{ +namespace sealer +{ +using TxsMetaDataQueue = std::deque; +class SealingManager : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + explicit SealingManager(SealerConfig::Ptr _config) + : m_config(_config), + m_pendingTxs(std::make_shared()), + m_pendingSysTxs(std::make_shared()), + m_worker(std::make_shared("sealerWorker", 1)) + {} + + virtual ~SealingManager() { stop(); } + + virtual void stop() + { + if (m_worker) + { + m_worker->stop(); + } + } + + virtual bool shouldGenerateProposal(); + virtual bool shouldFetchTransaction(); + + std::pair generateProposal(); + virtual void setUnsealedTxsSize(size_t _unsealedTxsSize) + { + m_unsealedTxsSize = _unsealedTxsSize; + m_config->consensus()->asyncNoteUnSealedTxsSize(_unsealedTxsSize, [](Error::Ptr _error) { + if (_error) + { + SEAL_LOG(WARNING) << LOG_DESC( + "asyncNoteUnSealedTxsSize to the consensus module failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + + // the consensus module notify the sealer to reset sealing when viewchange + virtual void resetSealing(); + virtual void resetSealingInfo( + ssize_t _startSealingNumber, ssize_t _endSealingNumber, size_t _maxTxsPerBlock) + { + if (_startSealingNumber > _endSealingNumber) + { + return; + } + // non-continuous sealing request + if (m_sealingNumber > m_endSealingNumber || _startSealingNumber != (m_endSealingNumber + 1)) + { + clearPendingTxs(); + m_startSealingNumber = _startSealingNumber; + m_sealingNumber = _startSealingNumber; + m_lastSealTime = utcSteadyTime(); + if (m_waitUntil >= m_startSealingNumber) + { + SEAL_LOG(INFO) << LOG_DESC("resetSealingInfo: reset waitUntil for reseal"); + m_waitUntil.store(m_startSealingNumber - 1); + } + } + m_endSealingNumber = _endSealingNumber; + m_maxTxsPerBlock = _maxTxsPerBlock; + m_onReady(); + SEAL_LOG(INFO) << LOG_DESC("resetSealingInfo") << LOG_KV("start", m_startSealingNumber) + << LOG_KV("end", m_endSealingNumber) + << LOG_KV("sealingNumber", m_sealingNumber) + << LOG_KV("waitUntil", m_waitUntil) + << LOG_KV("unsealedTxs", m_unsealedTxsSize); + } + + virtual void resetCurrentNumber(int64_t _currentNumber) { m_currentNumber = _currentNumber; } + virtual int64_t currentNumber() const { return m_currentNumber; } + virtual void fetchTransactions(); + + template + bcos::Handler<> onReady(T _t) + { + return m_onReady.add(std::move(_t)); + } + virtual void notifyResetProposal(bcos::protocol::Block::Ptr _block); + +protected: + virtual void appendTransactions( + std::shared_ptr _txsQueue, bcos::protocol::Block::Ptr _fetchedTxs); + virtual bool reachMinSealTimeCondition(); + virtual void clearPendingTxs(); + virtual void notifyResetTxsFlag( + bcos::crypto::HashListPtr _txsHash, bool _flag, size_t _retryTime = 0); + + virtual int64_t txsSizeExpectedToFetch(); + virtual size_t pendingTxsSize(); + +private: + SealerConfig::Ptr m_config; + std::shared_ptr m_pendingTxs; + std::shared_ptr m_pendingSysTxs; + SharedMutex x_pendingTxs; + + ThreadPool::Ptr m_worker; + + std::atomic m_lastSealTime = {0}; + + // the invalid sealingNumber is -1 + std::atomic m_sealingNumber = {-1}; + std::atomic m_unsealedTxsSize = {0}; + + std::atomic m_startSealingNumber = {0}; + std::atomic m_endSealingNumber = {0}; + std::atomic m_maxTxsPerBlock = {0}; + + std::atomic m_waitUntil = {0}; + + bcos::CallbackCollectionHandler<> m_onReady; + + std::atomic_bool m_fetchingTxs = {false}; + + std::atomic m_currentNumber = {0}; +}; +} // namespace sealer +} // namespace bcos \ No newline at end of file diff --git a/bcos-security/CMakeLists.txt b/bcos-security/CMakeLists.txt new file mode 100644 index 0000000..689edd7 --- /dev/null +++ b/bcos-security/CMakeLists.txt @@ -0,0 +1,37 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-security +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-security +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + + +project(bcos-security VERSION ${VERSION}) + +aux_source_directory(./bcos-security SRC_LIST) +include_directories(./bcos-security) +add_library(${SECURITY_TARGET} ${SRC_LIST}) + +find_package(jsoncpp REQUIRED) + +target_link_libraries(${SECURITY_TARGET} PUBLIC ${UTILITIES_TARGET} ${TOOL_TARGET} ${CRYPTO_TARGET} jsoncpp_static) + +if(TESTS) + enable_testing() + set(ENV{CTEST_OUTPUT_ON_FAILURE} True) + add_subdirectory(test) +endif() \ No newline at end of file diff --git a/bcos-security/bcos-security/Common.h b/bcos-security/bcos-security/Common.h new file mode 100644 index 0000000..76dfef0 --- /dev/null +++ b/bcos-security/bcos-security/Common.h @@ -0,0 +1,26 @@ +#pragma once +#include +#include + +// bcos-security is used to storage security + +namespace bcos +{ + +namespace security +{ +DERIVE_BCOS_EXCEPTION(KeyCenterAlreadyInit); +DERIVE_BCOS_EXCEPTION(KeyCenterDataKeyError); +DERIVE_BCOS_EXCEPTION(KeyCenterConnectionError); +DERIVE_BCOS_EXCEPTION(KeyCenterCall); +DERIVE_BCOS_EXCEPTION(KeyCenterInitError); +DERIVE_BCOS_EXCEPTION(KeyCenterCloseError); +DERIVE_BCOS_EXCEPTION(EncryptedFileError); +DERIVE_BCOS_EXCEPTION(EncryptedLevelDBEncryptFailed); +DERIVE_BCOS_EXCEPTION(EncryptedLevelDBDecryptFailed); +DERIVE_BCOS_EXCEPTION(EncryptFailed); +DERIVE_BCOS_EXCEPTION(DecryptFailed); + +} // namespace security + +} // namespace bcos \ No newline at end of file diff --git a/bcos-security/bcos-security/DataEncryption.cpp b/bcos-security/bcos-security/DataEncryption.cpp new file mode 100644 index 0000000..465a057 --- /dev/null +++ b/bcos-security/bcos-security/DataEncryption.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +/** + * @brief : Encrypt file + * @author: jimmyshi, websterchen + * @date: 2018-12-06 + */ + +#include "DataEncryption.h" +#include "KeyCenter.h" +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace crypto; +using namespace tool; + +namespace bcos +{ +namespace security +{ +void DataEncryption::init() +{ + bool smCryptoType = m_nodeConfig->smCryptoType(); + + if (true == m_nodeConfig->storageSecurityEnable()) + { + std::string keyCenterIp = m_nodeConfig->storageSecurityKeyCenterIp(); + unsigned short keyCenterPort = m_nodeConfig->storageSecurityKeyCenterPort(); + std::string cipherDataKey = m_nodeConfig->storageSecurityCipherDataKey(); + + KeyCenter keyClient; + keyClient.setIpPort(keyCenterIp, keyCenterPort); + m_dataKey = asString(keyClient.getDataKey(cipherDataKey, smCryptoType)); + + BCOS_LOG(INFO) << LOG_BADGE("DataEncryption::init") << LOG_KV("key_center_ip:", keyCenterIp) + << LOG_KV("key_center_port:", keyCenterPort); + } + + if (false == smCryptoType) + { + m_symmetricEncrypt = std::make_shared(); + } + else + { + m_symmetricEncrypt = std::make_shared(); + } +} + +void DataEncryption::init(const std::string& dataKey, const bool smCryptoType) +{ + m_dataKey = dataKey; + + if (false == smCryptoType) + { + m_symmetricEncrypt = std::make_shared(); + } + else + { + m_symmetricEncrypt = std::make_shared(); + } +} + +std::shared_ptr DataEncryption::decryptContents(const std::shared_ptr& content) +{ + std::shared_ptr decFileBytes; + try + { + std::string encContextsStr((const char*)content->data(), content->size()); + + bytes encFileBytes = fromHex(encContextsStr); + BCOS_LOG(DEBUG) << LOG_BADGE("ENCFILE") << LOG_DESC("Enc file contents") + << LOG_KV("string", encContextsStr) << LOG_KV("bytes", toHex(encFileBytes)); + + bytesPointer decFileBytesBase64Ptr = + m_symmetricEncrypt->symmetricDecrypt((const unsigned char*)encFileBytes.data(), + encFileBytes.size(), (const unsigned char*)m_dataKey.data(), m_dataKey.size()); + + BCOS_LOG(DEBUG) << "[ENCFILE] EncryptedFile Base64 key: " + << asString(*decFileBytesBase64Ptr) << endl; + decFileBytes = base64DecodeBytes(asString(*decFileBytesBase64Ptr)); + } + catch (exception& e) + { + BCOS_LOG(ERROR) << LOG_DESC("[ENCFILE] EncryptedFile error") + << LOG_KV("what", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(EncryptedFileError()); + } + + return decFileBytes; +} + +std::shared_ptr DataEncryption::decryptFile(const std::string& filename) +{ + std::shared_ptr decFileBytes; + try + { + std::shared_ptr keyContent = readContents(boost::filesystem::path(filename)); + + std::string encContextsStr((const char*)keyContent->data(), keyContent->size()); + + bytes encFileBytes = fromHex(encContextsStr); + BCOS_LOG(DEBUG) << LOG_BADGE("ENCFILE") << LOG_DESC("Enc file contents") + << LOG_KV("string", encContextsStr) << LOG_KV("bytes", toHex(encFileBytes)); + + bytesPointer decFileBytesBase64Ptr = + m_symmetricEncrypt->symmetricDecrypt((const unsigned char*)encFileBytes.data(), + encFileBytes.size(), (const unsigned char*)m_dataKey.data(), m_dataKey.size()); + + BCOS_LOG(DEBUG) << "[ENCFILE] EncryptedFile Base64 key: " + << asString(*decFileBytesBase64Ptr) << endl; + decFileBytes = base64DecodeBytes(asString(*decFileBytesBase64Ptr)); + } + catch (exception& e) + { + BCOS_LOG(ERROR) << LOG_DESC("[ENCFILE] EncryptedFile error") + << LOG_KV("what", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(EncryptedFileError()); + } + + return decFileBytes; +} + +std::string DataEncryption::encrypt(const std::string& data) +{ + bytesPointer encData = m_symmetricEncrypt->symmetricEncrypt( + reinterpret_cast(data.data()), data.size(), + reinterpret_cast(m_dataKey.data()), m_dataKey.size()); + + std::string value(encData->size(), 0); + memcpy(value.data(), encData->data(), encData->size()); + + return value; +} + +std::string DataEncryption::decrypt(const std::string& data) +{ + bytesPointer decData = m_symmetricEncrypt->symmetricDecrypt( + reinterpret_cast(data.data()), data.size(), + reinterpret_cast(m_dataKey.data()), m_dataKey.size()); + + std::string value(decData->size(), 0); + memcpy(value.data(), decData->data(), decData->size()); + + return value; +} + +} // namespace security + +} // namespace bcos diff --git a/bcos-security/bcos-security/DataEncryption.h b/bcos-security/bcos-security/DataEncryption.h new file mode 100644 index 0000000..febd839 --- /dev/null +++ b/bcos-security/bcos-security/DataEncryption.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +/** + * @brief : Data Encryption + * @author: chuwen + * @date: 2018-12-06 + */ + +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace security +{ +class DataEncryption : public DataEncryptInterface +{ +public: + using Ptr = std::shared_ptr; + +public: + DataEncryption(const bcos::tool::NodeConfig::Ptr nodeConfig) : m_nodeConfig(nodeConfig) {} + ~DataEncryption() override {} + +public: + void init() override; + void init(const std::string& dataKey, const bool smCryptoType) override; + + std::shared_ptr decryptContents(const std::shared_ptr& contents) override; + + // use to decrypt node.key + std::shared_ptr decryptFile(const std::string& filename) override; + + // use to encrypt/decrypt in rocksdb + std::string encrypt(const std::string& data) override; + std::string decrypt(const std::string& data) override; + +private: + bcos::tool::NodeConfig::Ptr m_nodeConfig{nullptr}; + + std::string m_dataKey; + bcos::crypto::SymmetricEncryption::Ptr m_symmetricEncrypt{nullptr}; +}; + +} // namespace security + +} // namespace bcos diff --git a/bcos-security/bcos-security/KeyCenter.cpp b/bcos-security/bcos-security/KeyCenter.cpp new file mode 100644 index 0000000..9515b54 --- /dev/null +++ b/bcos-security/bcos-security/KeyCenter.cpp @@ -0,0 +1,248 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +/** + * @brief : keycenter for disk encrytion + * @author: jimmyshi + * @date: 2018-12-03 + */ + +#include "KeyCenter.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace crypto; +using namespace security; + +namespace beast = boost::beast; // from +namespace http = beast::http; // from +namespace net = boost::asio; // from +using tcp = net::ip::tcp; // from + +KeyCenterHttpClient::KeyCenterHttpClient(const string& _ip, int _port) + : KeyCenterHttpClientInterface(), m_ip(_ip), m_port(_port), m_ioc(), m_socket(m_ioc) +{} + +KeyCenterHttpClient::~KeyCenterHttpClient() +{ + close(); +} + +void KeyCenterHttpClient::connect() +{ + WriteGuard l(x_clinetSocket); + try + { + if (m_socket.is_open()) + return; + // These objects perform our I/O + tcp::resolver resolver{m_ioc}; + // Look up the domain name + auto const results = resolver.resolve(m_ip, to_string(m_port).c_str()); + + // Make the connection on the IP address we get from a lookup + // TODO Add timeout in connect and read write + net::connect(m_socket, results.begin(), results.end()); + } + catch (exception& e) + { + KC_LOG(DEBUG) << LOG_DESC("Init key manager failed.") << LOG_KV("reason", e.what()) << endl; + BOOST_THROW_EXCEPTION(KeyCenterInitError()); + } +} + +void KeyCenterHttpClient::close() +{ + WriteGuard l(x_clinetSocket); + if (!m_socket.is_open()) + return; + // Gracefully close the socket + beast::error_code ec; + m_socket.shutdown(tcp::socket::shutdown_both, ec); + + if (ec && ec != beast::errc::not_connected) + { + KC_LOG(DEBUG) << LOG_DESC("Close key manager failed.") << LOG_KV("error_code", ec) << endl; + BOOST_THROW_EXCEPTION(KeyCenterCloseError()); + } +} + +Json::Value KeyCenterHttpClient::callMethod(const string& _method, Json::Value _params) +{ + if (!m_socket.is_open()) + connect(); // Jump out immediately if has connected + + Json::Value res; + try + { + /* + query is: + {"jsonrpc":"2.0","method":"encDataKey","params":["123456"],"id":83} + */ + + Json::Value queryJson; + queryJson["id"] = 83; + queryJson["jsonrpc"] = "2.0"; + queryJson["method"] = _method; + queryJson["params"] = _params; + + Json::FastWriter fastWriter; + std::string queryJsonStr = fastWriter.write(queryJson); + std::string url = m_ip + ":" + to_string(m_port); + // std::cout << queryJsonStr << " length: " << queryJsonStr.length() << std::endl; + + http::request req{http::verb::post, "/", 11}; + req.set(http::field::host, url.c_str()); + req.set(http::field::accept, "*/*"); + req.set(http::field::content_type, "application/json"); + req.set(http::field::accept_charset, "utf-8"); + + req.body() = queryJsonStr.c_str(); + req.prepare_payload(); + + // Send the HTTP request to the remote host + http::write(m_socket, req); + + // This buffer is used for reading and must be persisted + beast::flat_buffer buffer; + + // Declare a container to hold the response + http::response rsp; + + // Receive the HTTP response + http::read(m_socket, buffer, rsp); + + KC_LOG(DEBUG) << LOG_BADGE("callMethod") << LOG_DESC("key manager respond") + << LOG_KV("code", rsp.result_int()); + + if (rsp.result_int() != 200) + { + KC_LOG(DEBUG) << LOG_BADGE("callMethod") << LOG_DESC("http error") + << LOG_KV("reason", rsp.result_int()); + throw; + } + + Json::Reader reader; + bool parsingSuccessful = reader.parse(rsp.body().c_str(), res); + if (!parsingSuccessful) + { + KC_LOG(DEBUG) << LOG_BADGE("callMethod") << LOG_DESC("respond json error") + << LOG_KV("code", rsp.result_int()) << LOG_KV("string", rsp.body()); + throw; + } + + return res["result"]; + } + catch (exception& e) + { + KC_LOG(DEBUG) << LOG_DESC("CallMethod error") << LOG_KV("reason", e.what()); + BOOST_THROW_EXCEPTION(KeyCenterConnectionError()); + } + + return res; +} + +const bytes KeyCenter::getDataKey(const std::string& _cipherDataKey, const bool isSMCrypto) +{ + if (_cipherDataKey.empty()) + { + KC_LOG(DEBUG) << LOG_DESC("Get datakey exception. cipherDataKey is empty"); + BOOST_THROW_EXCEPTION(KeyCenterDataKeyError()); + } + + if (m_lastQueryCipherDataKey == _cipherDataKey) + { + return m_lastRcvDataKey; + } + + string dataKeyBytesStr; + try + { + // Create + KeyCenterHttpClientInterface::Ptr kcclient; + if (m_kcclient == nullptr) + { + kcclient = make_shared(m_ip, m_port); + } + else + { + kcclient = m_kcclient; + } + + // connect + kcclient->connect(); + + // send and receive + Json::Value params(Json::arrayValue); + params.append(_cipherDataKey); + Json::Value rsp = kcclient->callMethod("decDataKey", params); + + // parse respond + int error = rsp["error"].asInt(); + dataKeyBytesStr = rsp["dataKey"].asString(); + string info = rsp["info"].asString(); + if (error) + { + KC_LOG(DEBUG) << LOG_DESC("Get datakey exception") << LOG_KV("keycentr info", info); + BOOST_THROW_EXCEPTION(KeyCenterConnectionError() << errinfo_comment(info)); + } + + // update query cache + m_lastQueryCipherDataKey = _cipherDataKey; + bytes readableDataKey = fromHex(dataKeyBytesStr); + m_lastRcvDataKey = uniformDataKey(readableDataKey, isSMCrypto); + + // close + kcclient->close(); + } + catch (exception& e) + { + clearCache(); + KC_LOG(DEBUG) << LOG_DESC("Get datakey exception") << LOG_KV("reason", e.what()); + BOOST_THROW_EXCEPTION(KeyCenterConnectionError() << errinfo_comment(e.what())); + } + + return m_lastRcvDataKey; +} + +void KeyCenter::setIpPort(const std::string& _ip, int _port) +{ + m_ip = _ip; + m_port = _port; + m_url = m_ip + ":" + std::to_string(m_port); + KC_LOG(DEBUG) << LOG_DESC("Set instance url") << LOG_KV("IP", m_ip) << LOG_KV("port", m_port); +} + +bytes KeyCenter::uniformDataKey(const bytes& _readableDataKey, const bool isSMCrypto) +{ + if (true == isSMCrypto) + { + bytes oneTurn = sm3Hash(ref(_readableDataKey)).asBytes(); + return oneTurn + oneTurn + oneTurn + oneTurn; + } + else + { + bytes oneTurn = keccak256Hash(ref(_readableDataKey)).asBytes(); + return oneTurn; + } +} \ No newline at end of file diff --git a/bcos-security/bcos-security/KeyCenter.h b/bcos-security/bcos-security/KeyCenter.h new file mode 100644 index 0000000..a2d21af --- /dev/null +++ b/bcos-security/bcos-security/KeyCenter.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * @brief : keycenter for disk encrytion + * @author: jimmyshi + * @date: 2018-12-03 + */ +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Json +{ +class Value; +} + +namespace bcos +{ +namespace security +{ +#define KC_LOG(_OBV) \ + BCOS_LOG(_OBV) << "[g:null]" \ + << "[p:null][KeyManager]" + +class KeyCenterHttpClientInterface +{ +public: + using Ptr = std::shared_ptr; + virtual ~KeyCenterHttpClientInterface(){}; + virtual void connect() = 0; + virtual void close() = 0; + virtual Json::Value callMethod(const std::string& _method, Json::Value _params) = 0; +}; + +class KeyCenterHttpClient : public KeyCenterHttpClientInterface +{ +public: + using Ptr = std::shared_ptr; + + KeyCenterHttpClient(const std::string& _ip, int _port); + ~KeyCenterHttpClient(); + void connect() override; + void close() override; + Json::Value callMethod(const std::string& _method, Json::Value _params) override; + +private: + std::string m_ip; + int m_port; + boost::asio::io_context m_ioc; + boost::asio::ip::tcp::socket m_socket; + mutable SharedMutex x_clinetSocket; +}; + +class KeyCenter +{ +public: + using Ptr = std::shared_ptr; + + KeyCenter(){}; + virtual ~KeyCenter(){}; + virtual const bytes getDataKey(const std::string& _cipherDataKey, const bool isSMCrypto); + void setIpPort(const std::string& _ip, int _port); + const std::string url() { return m_ip + ":" + std::to_string(m_port); } + void setKcClient(KeyCenterHttpClientInterface::Ptr _kcclient) { m_kcclient = _kcclient; }; + bytes uniformDataKey(const bytes& _readableDataKey, const bool isSMCrypto); + + void clearCache() + { + m_lastQueryCipherDataKey.clear(); + m_lastRcvDataKey.clear(); + } + +private: + std::string m_ip; + int m_port; + std::string m_url; + + KeyCenterHttpClientInterface::Ptr m_kcclient = nullptr; + + // Query cache + std::string m_lastQueryCipherDataKey; + bytes m_lastRcvDataKey; +}; + +} // namespace security + +} // namespace bcos \ No newline at end of file diff --git a/bcos-security/test/CMakeLists.txt b/bcos-security/test/CMakeLists.txt new file mode 100644 index 0000000..de3f31a --- /dev/null +++ b/bcos-security/test/CMakeLists.txt @@ -0,0 +1,28 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-tool +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-security) +find_package(Boost REQUIRED unit_test_framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +target_link_libraries(${TEST_BINARY_NAME} PUBLIC ${SECURITY_TARGET} Boost::unit_test_framework) +add_test(NAME ${TEST_BINARY_NAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-security/test/unittests/libsecurity/DataEncryptionTest.cpp b/bcos-security/test/unittests/libsecurity/DataEncryptionTest.cpp new file mode 100644 index 0000000..a1f5377 --- /dev/null +++ b/bcos-security/test/unittests/libsecurity/DataEncryptionTest.cpp @@ -0,0 +1,34 @@ +#include +#include + +using namespace bcos::security; + +namespace bcos +{ +namespace test +{ + BOOST_AUTO_TEST_CASE(testDataEncryption_normal) + { + DataEncryption dataEncryption{ nullptr }; + dataEncryption.init("bcos_data_key", false); + + std::string originData = "hello world"; + std::string encryptData = dataEncryption.encrypt(originData); + std::string decryptData = dataEncryption.decrypt(encryptData); + + BOOST_CHECK_EQUAL(originData, decryptData); + } + + BOOST_AUTO_TEST_CASE(testDataEncryption_sm) + { + DataEncryption dataEncryption{ nullptr }; + dataEncryption.init("bcos_data_key", true); + + std::string originData = "hello world"; + std::string encryptData = dataEncryption.encrypt(originData); + std::string decryptData = dataEncryption.decrypt(encryptData); + + BOOST_CHECK_EQUAL(originData, decryptData); + } +} +} \ No newline at end of file diff --git a/bcos-security/test/unittests/main/main.cpp b/bcos-security/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-security/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-storage/CMakeLists.txt b/bcos-storage/CMakeLists.txt new file mode 100644 index 0000000..90e3b8a --- /dev/null +++ b/bcos-storage/CMakeLists.txt @@ -0,0 +1,29 @@ +cmake_minimum_required(VERSION 3.14) + +project(bcos-storage VERSION ${VERSION}) + +find_package(zstd REQUIRED) +find_package(RocksDB REQUIRED) + +find_package(Boost REQUIRED serialization thread context filesystem) + +set(SRC_LIST bcos-storage/Common.cpp) +list(APPEND SRC_LIST bcos-storage/RocksDBStorage.cpp) + +set(LIB_LIST ${TABLE_TARGET} bcos-framework Boost::serialization Boost::filesystem zstd::libzstd_static RocksDB::rocksdb) + +if(WITH_TIKV) + include(ProjectTiKVClient) + list(APPEND SRC_LIST bcos-storage/TiKVStorage.cpp) + list(APPEND LIB_LIST kv_client) +endif() + +add_library(${STORAGE_TARGET} ${SRC_LIST}) +target_include_directories(${STORAGE_TARGET} PUBLIC .) +target_link_libraries(${STORAGE_TARGET} PUBLIC ${LIB_LIST}) + +if(TESTS) + enable_testing() + set(ENV{CTEST_OUTPUT_ON_FAILURE} True) + add_subdirectory(test) +endif() diff --git a/bcos-storage/bcos-storage/Common.cpp b/bcos-storage/bcos-storage/Common.cpp new file mode 100644 index 0000000..a560457 --- /dev/null +++ b/bcos-storage/bcos-storage/Common.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief common functions + * @file Common.cpp + * @author: xingqiangbai + * @date: 2021-10-11 + */ + +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; + +namespace bcos::storage +{ +} // namespace bcos::storage diff --git a/bcos-storage/bcos-storage/Common.h b/bcos-storage/bcos-storage/Common.h new file mode 100644 index 0000000..0a5a573 --- /dev/null +++ b/bcos-storage/bcos-storage/Common.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief common functions + * @file Common.h + * @author: xingqiangbai + * @date: 2021-10-11 + */ + +#pragma once + +#include + +namespace bcos::storage +{ +const char* const TABLE_KEY_SPLIT = ":"; + +inline std::string toDBKey(const std::string_view& tableName, const std::string_view& key) +{ + std::string dbKey; + dbKey.reserve(tableName.size() + 1 + key.size()); + dbKey.append(tableName).append(TABLE_KEY_SPLIT).append(key); + return dbKey; +} + +inline bool isValid(const std::string_view& tableName) +{ + return !tableName.empty(); +} + +inline bool isValid(const std::string_view& tableName, const std::string_view&) +{ + return !tableName.empty(); +} + +} // namespace bcos::storage diff --git a/bcos-storage/bcos-storage/RocksDBStorage.cpp b/bcos-storage/bcos-storage/RocksDBStorage.cpp new file mode 100644 index 0000000..5bc4976 --- /dev/null +++ b/bcos-storage/bcos-storage/RocksDBStorage.cpp @@ -0,0 +1,619 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the header of storage + * @file Storage.h + * @author: xingqiangbai + * @date: 2021-04-16 + */ +#include "RocksDBStorage.h" +#include "Common.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::storage; +using namespace bcos::protocol; +using namespace rocksdb; +using namespace std; + +#define STORAGE_ROCKSDB_LOG(LEVEL) BCOS_LOG(LEVEL) << "[STORAGE-RocksDB]" + +RocksDBStorage::RocksDBStorage(std::unique_ptr>&& db, + const bcos::security::DataEncryptInterface::Ptr dataEncryption) + : m_db(std::move(db)), m_dataEncryption(dataEncryption) +{ + m_writeBatch = std::make_shared(); +} + +void RocksDBStorage::asyncGetPrimaryKeys(std::string_view _table, + const std::optional& _condition, + std::function)> _callback) +{ + auto start = utcSteadyTime(); + std::vector result; + + std::string keyPrefix; + keyPrefix = string(_table) + TABLE_KEY_SPLIT; + + ReadOptions read_options; + read_options.total_order_seek = true; + auto iter = std::unique_ptr(m_db->NewIterator(read_options)); + + // FIXME: check performance and add limit of primary keys + for (iter->Seek(keyPrefix); iter->Valid() && iter->key().starts_with(keyPrefix); iter->Next()) + { + size_t start = keyPrefix.size(); + if (!_condition || _condition->isValid(std::string_view( + iter->key().data() + start, iter->key().size() - start))) + { // filter by condition, the key need + // remove TABLE_PREFIX + result.emplace_back(iter->key().ToString().substr(start)); + } + } + auto end = utcSteadyTime(); + iter.reset(); + + _callback(nullptr, std::move(result)); + STORAGE_ROCKSDB_LOG(TRACE) << LOG_DESC("asyncGetPrimaryKeys") << LOG_KV("table", _table) + << LOG_KV("count", result.size()) + << LOG_KV("read time(ms)", end - start) + << LOG_KV("callback time(ms)", utcSteadyTime() - end); +} + +void RocksDBStorage::asyncGetRow(std::string_view _table, std::string_view _key, + std::function)> _callback) +{ + try + { + if (!isValid(_table, _key)) + { + STORAGE_ROCKSDB_LOG(WARNING) << LOG_DESC("asyncGetRow empty tableName or key") + << LOG_KV("table", _table) << LOG_KV("key", _key); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key"), {}); + return; + } + std::string value; + auto dbKey = toDBKey(_table, _key); + + auto status = m_db->Get( + ReadOptions(), m_db->DefaultColumnFamily(), Slice(dbKey.data(), dbKey.size()), &value); + + if (!value.empty() && nullptr != m_dataEncryption) + { + value = m_dataEncryption->decrypt(value); + } + + if (!status.ok()) + { + if (status.IsNotFound()) + { + if (c_fileLogLevel <= TRACE) + { + STORAGE_ROCKSDB_LOG(TRACE) << LOG_DESC("not found") << LOG_KV("table", _table) + << LOG_KV("key", toHex(_key)); + } + _callback(nullptr, {}); + return; + } + + std::string errorMessage = + "RocksDB get failed!, " + boost::lexical_cast(status.ToString()); + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("asyncGetRow failed") << LOG_KV("table", _table) << LOG_KV("key", _key) + << LOG_KV("error", errorMessage); + if (status.getState()) + { + errorMessage.append(" ").append(status.getState()); + } + _callback(BCOS_ERROR_UNIQUE_PTR(ReadError, errorMessage), {}); + + return; + } + + std::optional entry((Entry())); + + entry->set(std::move(value)); + + _callback(nullptr, entry); + + STORAGE_ROCKSDB_LOG(TRACE) << LOG_DESC("asyncGetRow") << LOG_KV("table", _table) + << LOG_KV("key", boost::algorithm::hex_lower(std::string(_key))); + } + catch (const std::exception& e) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("asyncGetRow exception") << LOG_KV("table", _table) + << LOG_KV("key", boost::algorithm::hex_lower(std::string(_key))) + << LOG_KV("exception", boost::diagnostic_information(e)); + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(UnknownEntryType, "Get row failed!", e), {}); + } +} + +void RocksDBStorage::asyncGetRows(std::string_view _table, + RANGES::any_view + keys, + std::function>)> _callback) +{ + try + { + if (!isValid(_table)) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("asyncGetRows empty tableName") << LOG_KV("table", _table); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName"), {}); + return; + } + + std::vector> entries(keys.size()); + + std::vector dbKeys(keys.size()); + std::vector slices(keys.size()); + tbb::parallel_for(tbb::blocked_range(0, keys.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + dbKeys[i] = toDBKey(_table, keys[i]); + slices[i] = Slice(dbKeys[i].data(), dbKeys[i].size()); + } + }); + + std::vector values(keys.size()); + std::vector statusList(keys.size()); + m_db->MultiGet(ReadOptions(), m_db->DefaultColumnFamily(), slices.size(), slices.data(), + values.data(), statusList.data()); + tbb::parallel_for(tbb::blocked_range(0, keys.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + auto& status = statusList[i]; + auto& value = values[i]; + + if (status.ok()) + { + entries[i] = std::make_optional(Entry()); + + std::string v(value.data(), value.size()); + + // Storage Security + if (false == v.empty() && nullptr != m_dataEncryption) + v = m_dataEncryption->decrypt(v); + + entries[i]->set(std::move(v)); + } + else + { + if (status.IsNotFound()) + { + STORAGE_ROCKSDB_LOG(TRACE) + << "Multi get rows, not found key: " << keys[i]; + } + else if (status.getState()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << "Multi get rows error: " << status.getState(); + } + else + { + STORAGE_ROCKSDB_LOG(WARNING) + << "Multi get rows error:" << status.ToString(); + } + } + } + }); + STORAGE_ROCKSDB_LOG(TRACE) << LOG_DESC("asyncGetRows") << LOG_KV("table", _table); + _callback(nullptr, std::move(entries)); + } + catch (const std::exception& e) + { + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(UnknownEntryType, "Get rows failed! ", e), {}); + } +} + +void RocksDBStorage::asyncSetRow(std::string_view _table, std::string_view _key, Entry _entry, + std::function _callback) +{ + try + { + if (!isValid(_table, _key)) + { + STORAGE_ROCKSDB_LOG(WARNING) << LOG_DESC("asyncSetRow empty tableName or key") + << LOG_KV("table", _table) << LOG_KV("key", _key); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key")); + return; + } + auto dbKey = toDBKey(_table, _key); + WriteOptions options; + rocksdb::Status status; + if (_entry.status() == Entry::DELETED) + { + STORAGE_ROCKSDB_LOG(TRACE) + << LOG_DESC("asyncSetRow delete") << LOG_KV("table", _table) + << LOG_KV("key", boost::algorithm::hex_lower(std::string(_key))); + status = m_db->Delete(options, dbKey); + } + else + { + STORAGE_ROCKSDB_LOG(TRACE) + << LOG_DESC("asyncSetRow") << LOG_KV("table", _table) + << LOG_KV("key", boost::algorithm::hex_lower(std::string(_key))); + + std::string value(_entry.get().data(), _entry.get().size()); + + // Storage Security + if (false == value.empty() && nullptr != m_dataEncryption) + value = m_dataEncryption->encrypt(value); + + status = m_db->Put(options, dbKey, std::move(value)); + } + + if (!status.ok()) + { + checkStatus(status); + std::string errorMessage = "Set row failed! " + status.ToString(); + if (status.getState()) + { + errorMessage.append(" ").append(status.getState()); + } + _callback(BCOS_ERROR_UNIQUE_PTR(WriteError, errorMessage)); + return; + } + + _callback(nullptr); + } + catch (const std::exception& e) + { + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(UnknownEntryType, "Set row failed! ", e)); + } +} + +void RocksDBStorage::asyncPrepare(const TwoPCParams& param, const TraverseStorageInterface& storage, + std::function callback) +{ + std::ignore = param; + try + { + STORAGE_ROCKSDB_LOG(INFO) << LOG_DESC("asyncPrepare") << LOG_KV("number", param.number); + auto start = utcSteadyTime(); + { + std::unique_lock lock(m_writeBatchMutex); + if (!m_writeBatch) + { + m_writeBatch = std::make_shared(); + } + } + std::atomic_uint64_t putCount{0}; + std::atomic_uint64_t deleteCount{0}; + atomic_bool isTableValid = true; + + tbb::concurrent_vector>> + dataChanges; + storage.parallelTraverse(true, [&](const std::string_view& table, + const std::string_view& key, Entry const& entry) { + if (!isValid(table, key)) + { + isTableValid = false; + return false; + } + auto dbKey = toDBKey(table, key); + + if (entry.status() == Entry::DELETED) + { + if (c_fileLogLevel <= TRACE) + { + STORAGE_ROCKSDB_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)); + } + ++deleteCount; + dataChanges.emplace_back( + std::tuple{entry.status(), std::move(dbKey), std::monostate{}}); + } + else + { + if (c_fileLogLevel <= TRACE) + { + STORAGE_ROCKSDB_LOG(TRACE) + << LOG_DESC("write") << LOG_KV("table", table) << LOG_KV("key", toHex(key)) + << LOG_KV("size", entry.size()); + } + ++putCount; + + // Storage security + if (auto value = entry.get(); !value.empty() && m_dataEncryption) + { + std::string encryptValue(value); + encryptValue = m_dataEncryption->encrypt(encryptValue); + dataChanges.emplace_back( + std::tuple{entry.status(), std::move(dbKey), std::move(encryptValue)}); + } + else + { + dataChanges.emplace_back(std::tuple{entry.status(), std::move(dbKey), entry}); + } + } + return true; + }); + + for (auto& [status, key, value] : dataChanges) + { + if (status == Entry::DELETED) + { + m_writeBatch->Delete(key); + } + else + { + auto& localKey = key; + std::visit( + [this, &localKey](auto&& valueStr) { + using ValueType = std::decay_t; + if constexpr (std::same_as) + { + m_writeBatch->Put(localKey, valueStr); + } + else if constexpr (std::same_as) + { + m_writeBatch->Put(localKey, valueStr.get()); + } + else + { + STORAGE_ROCKSDB_LOG(FATAL) << "Unexcepted monostate!"; + } + }, + value); + } + } + + if (!isTableValid) + { + { + std::unique_lock lock(m_writeBatchMutex); + m_writeBatch = nullptr; + } + STORAGE_ROCKSDB_LOG(ERROR) + << LOG_DESC("asyncPrepare invalidTable") << LOG_KV("blockNumber", param.number); + callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key"), 0, ""); + return; + } + auto end = utcSteadyTime(); + callback(nullptr, 0, ""); + STORAGE_ROCKSDB_LOG(INFO) << LOG_DESC("asyncPrepare finished") + << LOG_KV("blockNumber", param.number) << LOG_KV("put", putCount) + << LOG_KV("delete", deleteCount) + << LOG_KV("startTS", param.timestamp) + << LOG_KV("time(ms)", end - start) + << LOG_KV("callback time(ms)", utcSteadyTime() - end); + } + catch (const std::exception& e) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(UnknownEntryType, "Prepare failed! ", e), 0, ""); + } +} + +void RocksDBStorage::asyncCommit( + const TwoPCParams& params, std::function callback) +{ + size_t count = 0; + auto start = utcSteadyTime(); + std::ignore = params; + { + std::unique_lock lock(m_writeBatchMutex); + if (m_writeBatch) + { + WriteOptions options; + // options.sync = true; + count = m_writeBatch->Count(); + auto status = m_db->Write(options, m_writeBatch.get()); + auto err = checkStatus(status); + if (err) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("asyncCommit failed") << LOG_KV("blockNumber", params.number) + << LOG_KV("message", err->errorMessage()) << LOG_KV("startTS", params.timestamp) + << LOG_KV("time(ms)", utcSteadyTime() - start); + lock.release(); + callback(err, 0); + return; + } + m_writeBatch = nullptr; + } + } + auto end = utcSteadyTime(); + callback(nullptr, 0); + + STORAGE_ROCKSDB_LOG(INFO) << LOG_DESC("asyncCommit finished") + << LOG_KV("blockNumber", params.number) + << LOG_KV("startTS", params.timestamp) + << LOG_KV("time(ms)", end - start) + << LOG_KV("callback time(ms)", utcSteadyTime() - end) + << LOG_KV("count", count); +} + +void RocksDBStorage::asyncRollback( + const TwoPCParams& params, std::function callback) +{ + auto start = utcSteadyTime(); + + std::ignore = params; + { + std::unique_lock lock(m_writeBatchMutex); + m_writeBatch = nullptr; + } + auto end = utcSteadyTime(); + callback(nullptr); + STORAGE_ROCKSDB_LOG(INFO) << LOG_DESC("asyncRollback") << LOG_KV("blockNumber", params.number) + << LOG_KV("startTS", params.timestamp) + << LOG_KV("time(ms)", utcSteadyTime() - start) + << LOG_KV("callback time(ms)", utcSteadyTime() - end); +} + +bcos::Error::Ptr RocksDBStorage::setRows(std::string_view table, + const std::variant, const gsl::span>& + _keys, + std::variant, gsl::span> _values) noexcept +{ + bcos::Error::Ptr err = nullptr; + std::visit( + [&](auto&& keys, auto&& values) { + auto start = utcSteadyTime(); + if (table.empty()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("setRows empty tableName") << LOG_KV("table", table); + err = BCOS_ERROR_PTR(TableNotExists, "empty tableName"); + return; + } + if (keys.size() != values.size()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("setRows values size mismatch keys size") + << LOG_KV("keys", keys.size()) << LOG_KV("values", values.size()); + err = BCOS_ERROR_PTR(TableNotExists, "setRows values size mismatch keys size"); + return; + } + if (keys.empty()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("setRows empty keys") << LOG_KV("table", table); + return; + } + std::vector realKeys(keys.size()); + + std::vector encryptedValues; + if (m_dataEncryption) + { + encryptedValues.resize(values.size()); + } + + tbb::parallel_for(tbb::blocked_range(0, keys.size(), 256), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + realKeys[i] = toDBKey(table, keys[i]); + if (m_dataEncryption) + { + encryptedValues[i] = + m_dataEncryption->encrypt(std::string(std::move(values[i]))); + } + } + }); + auto writeBatch = WriteBatch(); + size_t dataSize = 0; + for (size_t i = 0; i < keys.size(); ++i) + { + // Storage Security + if (m_dataEncryption) + { + dataSize += realKeys[i].size() + encryptedValues[i].size(); + writeBatch.Put(std::move(realKeys[i]), std::move(encryptedValues[i])); + } + else + { + dataSize += realKeys[i].size() + values[i].size(); + writeBatch.Put(std::move(realKeys[i]), std::move(values[i])); + } + } + WriteOptions options; + auto status = m_db->Write(options, &writeBatch); + err = checkStatus(status); + STORAGE_ROCKSDB_LOG(INFO) + << LOG_DESC("setRows finished") << LOG_KV("put", keys.size()) + << LOG_KV("dataSize", dataSize) << LOG_KV("time(ms)", utcSteadyTime() - start); + }, + _keys, _values); + return err; +} + +bcos::Error::Ptr RocksDBStorage::deleteRows(std::string_view table, + const std::variant, const gsl::span>& + _keys) noexcept +{ + bcos::Error::Ptr err = nullptr; + std::visit( + [&](auto&& keys) { + if (table.empty()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("deleteRows empty tableName") << LOG_KV("table", table); + err = BCOS_ERROR_PTR(TableNotExists, "empty tableName"); + return; + } + if (keys.empty()) + { + STORAGE_ROCKSDB_LOG(WARNING) + << LOG_DESC("deleteRows empty keys") << LOG_KV("table", table); + return; + } + std::vector realKeys(keys.size()); + tbb::parallel_for(tbb::blocked_range(0, keys.size(), 256), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + realKeys[i] = toDBKey(table, keys[i]); + } + }); + auto writeBatch = WriteBatch(); + for (size_t i = 0; i < keys.size(); ++i) + { + writeBatch.Delete(realKeys[i]); + } + WriteOptions options; + auto status = m_db->Write(options, &writeBatch); + err = checkStatus(status); + STORAGE_ROCKSDB_LOG(DEBUG) + << LOG_DESC("deleteRows") << LOG_KV("table", table) << LOG_KV("size", keys.size()); + }, + _keys); + return err; +} + +bcos::Error::Ptr RocksDBStorage::checkStatus(rocksdb::Status const& status) +{ + if (status.ok() || status.IsNotFound()) + { + return nullptr; + } + std::string errorInfo = "access rocksDB failed, status: " + status.ToString(); + // fatal exception + if (status.IsIOError() || status.IsCorruption() || status.IsNoSpace() || + status.IsNotSupported() || status.IsShutdownInProgress()) + { + std::raise(SIGTERM); + STORAGE_ROCKSDB_LOG(ERROR) << LOG_DESC(errorInfo); + return BCOS_ERROR_PTR(DatabaseError, errorInfo); + } + // exception that can be recovered by retry + // statuses are: Busy, TimedOut, TryAgain, Aborted, MergeInProgress, IsIncomplete, Expired, + // CompactionToolLarge + else + { + errorInfo = errorInfo + ", please try again!"; + STORAGE_ROCKSDB_LOG(WARNING) << LOG_DESC(errorInfo); + return BCOS_ERROR_PTR(DatabaseRetryable, errorInfo); + } +} diff --git a/bcos-storage/bcos-storage/RocksDBStorage.h b/bcos-storage/bcos-storage/RocksDBStorage.h new file mode 100644 index 0000000..52102a6 --- /dev/null +++ b/bcos-storage/bcos-storage/RocksDBStorage.h @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the implement of storage + * @file Storage.cpp + * @author: xingqiangbai + * @date: 2021-04-16 + * @file Storage.cpp + * @author: ancelmo + * @date: 2021-08-27 + */ +#pragma once + +#include +#include +#include +#include + +namespace rocksdb +{ +class WriteBatch; +} + +namespace bcos::storage +{ +class RocksDBStorage : public TransactionalStorageInterface +{ +public: + using Ptr = std::shared_ptr; + explicit RocksDBStorage(std::unique_ptr>&& db, + const bcos::security::DataEncryptInterface::Ptr dataEncryption); + + ~RocksDBStorage() {} + + void asyncGetPrimaryKeys(std::string_view _table, + const std::optional& _condition, + std::function)> _callback) override; + + void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) override; + + void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> _callback) + override; + + void asyncSetRow(std::string_view table, std::string_view key, Entry entry, + std::function callback) override; + + void asyncPrepare(const bcos::protocol::TwoPCParams& params, + const TraverseStorageInterface& storage, + std::function callback) override; + + void asyncCommit(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + void asyncRollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + Error::Ptr setRows(std::string_view table, + const std::variant, + const gsl::span>& keys, + std::variant, gsl::span> + values) noexcept override; + virtual Error::Ptr deleteRows( + std::string_view, const std::variant, + const gsl::span>&) noexcept override; + +private: + Error::Ptr checkStatus(rocksdb::Status const& status); + std::shared_ptr m_writeBatch = nullptr; + std::mutex m_writeBatchMutex; + std::unique_ptr> m_db; + + // Security Storage + bcos::security::DataEncryptInterface::Ptr m_dataEncryption{nullptr}; +}; +} // namespace bcos::storage diff --git a/bcos-storage/bcos-storage/StorageImpl.h b/bcos-storage/bcos-storage/StorageImpl.h new file mode 100644 index 0000000..9ae904e --- /dev/null +++ b/bcos-storage/bcos-storage/StorageImpl.h @@ -0,0 +1,105 @@ +#pragma once + +#include +#include +#include +#include +#include + +namespace bcos::storage +{ + +template +class StorageImpl : public bcos::concepts::storage::StorageBase> +{ +public: + StorageImpl(StorageType storage) : m_storage(std::move(storage)) {} + StorageImpl(const StorageImpl&) = default; + StorageImpl(StorageImpl&&) noexcept = default; + StorageImpl& operator=(const StorageImpl&) = default; + StorageImpl& operator=(StorageImpl&&) noexcept = default; + ~StorageImpl() = default; + + std::optional impl_getRow(std::string_view table, std::string_view key) + { + Error::UniquePtr error; + std::optional entry; + + storage().asyncGetRow( + table, key, [&error, &entry](Error::UniquePtr errorOut, std::optional entryOut) { + error = std::move(errorOut); + entry = std::move(entryOut); + }); + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + return entry; + } + + std::vector> impl_getRows( + std::string_view table, RANGES::range auto const& keys) + { + Error::UniquePtr error; + std::vector> entries; + + auto callback = [&error, &entries](Error::UniquePtr errorOut, + std::vector> entriesOut) { + error = std::move(errorOut); + entries = std::move(entriesOut); + }; + + std::vector viewArray; + viewArray.reserve(RANGES::size(keys)); + for (auto&& it : keys) + { + viewArray.emplace_back( + std::string_view((const char*)RANGES::data(it), RANGES::size(it))); + } + storage().asyncGetRows(table, viewArray, std::move(callback)); + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + return entries; + } + + void impl_setRow(std::string_view table, std::string_view key, Entry entry) + { + Error::UniquePtr error; + + storage().asyncSetRow(table, key, std::move(entry), + [&error](Error::UniquePtr errorOut) { error = std::move(errorOut); }); + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + } + + void impl_createTable(std::string tableName) + { + Error::UniquePtr error; + + storage().asyncCreateTable(std::move(tableName), std::string{}, + [&error](Error::UniquePtr errorOut, [[maybe_unused]] auto&& table) { + error = std::move(errorOut); + }); + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + }; + +private: + constexpr auto& storage() { return bcos::concepts::getRef(m_storage); } + + StorageType m_storage; +}; + +static_assert(bcos::concepts::storage::Storage>, "fail!"); +} // namespace bcos::storage \ No newline at end of file diff --git a/bcos-storage/bcos-storage/TiKVStorage.cpp b/bcos-storage/bcos-storage/TiKVStorage.cpp new file mode 100644 index 0000000..01513c2 --- /dev/null +++ b/bcos-storage/bcos-storage/TiKVStorage.cpp @@ -0,0 +1,648 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the implement of TiKVStorage + * @file TiKVStorage.h + * @author: xingqiangbai + * @date: 2021-09-26 + */ +#include "TiKVStorage.h" +#include "Common.h" +#include "bcos-framework/protocol/ProtocolTypeDef.h" +#include "bcos-framework/storage/Table.h" +#include "tikv_client.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr uint32_t MAX_RETRY_LIMIT = 32; + +using namespace bcos::storage; +using namespace bcos::protocol; +using namespace std; + +#define STORAGE_TIKV_LOG(LEVEL) BCOS_LOG(LEVEL) << "[STORAGE-TiKV]" +namespace bcos::storage +{ + +std::shared_ptr newTiKVClient( + const std::vector& pdAddrs, const std::string& logPath, const std::string& caPath, + const std::string& certPath, const std::string& keyPath, uint32_t grpcTimeout) +{ + if (!caPath.empty() && !certPath.empty() && !keyPath.empty()) + { + STORAGE_TIKV_LOG(INFO) << LOG_DESC("newTiKVClientWithSSL") << LOG_KV("logPath", logPath); + return std::make_shared( + pdAddrs, logPath, caPath, certPath, keyPath); + } + STORAGE_TIKV_LOG(INFO) << LOG_DESC("newTiKVClient") << LOG_KV("logPath", logPath); + return std::make_shared(pdAddrs, logPath, grpcTimeout); +} +} // namespace bcos::storage + +TiKVStorage::TiKVStorage( + std::shared_ptr _cluster, int32_t _commitTimeout) + : m_cluster(std::move(_cluster)), m_commitTimeout(_commitTimeout) +{} + +void TiKVStorage::asyncGetPrimaryKeys(std::string_view _table, + const std::optional& _condition, + std::function)> _callback) noexcept +{ + try + { + auto start = utcTime(); + std::vector result; + + std::string keyPrefix; + keyPrefix = string(_table) + TABLE_KEY_SPLIT; + // snapshot is not threadsafe so create it every time + auto snap = m_cluster->snapshot(); + // TODO: check performance and add limit of primary keys + bool finished = false; + auto lastKey = keyPrefix; + int i = 0; + while (!finished) + { + auto keys = snap->scan_keys( + lastKey, Bound::Excluded, string(), Bound::Unbounded, scan_batch_size); + if (keys.empty()) + { + finished = true; + break; + } + lastKey = keys.back(); + for (auto& key : keys) + { + if (key.rfind(keyPrefix, 0) == 0) + { + size_t start = keyPrefix.size(); + auto realKey = key.substr(start); + if (!_condition || _condition->isValid(realKey)) + { // filter by condition, remove keyPrefix + result.push_back(std::move(realKey)); + } + } + else + { + finished = true; + break; + } + } + } + auto end = utcTime(); + STORAGE_TIKV_LOG(DEBUG) << LOG_DESC("asyncGetPrimaryKeys") << LOG_KV("table", _table) + << LOG_KV("count", result.size()) + << LOG_KV("read time(ms)", end - start) + << LOG_KV("callback time(ms)", utcTime() - end); + _callback(nullptr, std::move(result)); + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncGetPrimaryKeys failed, need trigger switch") + << LOG_KV("table", _table) << LOG_KV("message", e.what()); + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(ReadError, "asyncGetPrimaryKeys failed!", e), {}); + triggerSwitch(); + } +} + +void TiKVStorage::asyncGetRow(std::string_view _table, std::string_view _key, + std::function)> _callback) noexcept +{ + try + { + if (!isValid(_table, _key)) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncGetRow empty tableName or key") + << LOG_KV("table", _table) << LOG_KV("key", toHex(_key)); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key"), {}); + return; + } + auto start = utcTime(); + auto dbKey = toDBKey(_table, _key); + auto snap = m_cluster->snapshot(); + auto value = snap->get(dbKey); + auto end = utcTime(); + if (!value.has_value()) + { + if (c_fileLogLevel <= TRACE) + { + STORAGE_TIKV_LOG(TRACE) << LOG_DESC("asyncGetRow empty") << LOG_KV("table", _table) + << LOG_KV("key", _key.length() == 0 ? "" : toHex(_key)) + << LOG_KV("dbKey", dbKey); + } + _callback(nullptr, {}); + return; + } + + auto entry = std::make_optional(); + entry->set(value.value()); + if (c_fileLogLevel <= TRACE) + { + STORAGE_TIKV_LOG(TRACE) + << LOG_DESC("asyncGetRow") << LOG_KV("table", _table) << LOG_KV("key", toHex(_key)) + << LOG_KV("read time(ms)", end - start) + << LOG_KV("callback time(ms)", utcTime() - end); + } + _callback(nullptr, std::move(entry)); + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncGetRow failed, need trigger switch") + << LOG_KV("table", _table) << LOG_KV("key", toHex(_key)) + << LOG_KV("message", e.what()); + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(ReadError, "asyncGetRow failed!", e), {}); + triggerSwitch(); + } +} + +void TiKVStorage::asyncGetRows(std::string_view _table, + RANGES::any_view + keys, + std::function>)> _callback) noexcept +{ + try + { + if (!isValid(_table)) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("asyncGetRows empty tableName") << LOG_KV("table", _table); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName"), {}); + return; + } + auto start = utcTime(); + std::vector> entries(keys.size()); + + std::vector realKeys(keys.size()); + tbb::parallel_for(tbb::blocked_range(0, keys.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + realKeys[i] = toDBKey(_table, keys[i]); + } + }); + auto snap = m_cluster->snapshot(); + auto result = snap->batch_get(realKeys); + auto end = utcTime(); + size_t validCount = 0; + for (size_t i = 0; i < realKeys.size(); ++i) + { + auto node = result.extract(realKeys[i]); + if (node.empty() || node.mapped().empty()) + { + entries[i] = std::nullopt; + STORAGE_TIKV_LOG(TRACE) << "Multi get rows, not found key: " << keys[i]; + } + else + { + ++validCount; + entries[i] = std::make_optional(Entry()); + entries[i]->set(std::move(node.mapped())); + } + } + auto decode = utcTime(); + STORAGE_TIKV_LOG(DEBUG) << LOG_DESC("asyncGetRows") << LOG_KV("table", _table) + << LOG_KV("count", entries.size()) + << LOG_KV("validCount", validCount) + << LOG_KV("read time(ms)", end - start) + << LOG_KV("decode time(ms)", decode - end); + _callback(nullptr, std::move(entries)); + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncGetRows failed, need trigger switch") + << LOG_KV("table", _table) << LOG_KV("message", e.what()); + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(ReadError, "asyncGetRows failed! ", e), + std::vector>()); + triggerSwitch(); + } +} + +void TiKVStorage::asyncSetRow(std::string_view _table, std::string_view _key, Entry _entry, + std::function _callback) noexcept +{ + try + { + if (!isValid(_table, _key)) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncGetRow empty tableName or key") + << LOG_KV("table", _table) << LOG_KV("key", _key); + _callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key")); + return; + } + auto dbKey = toDBKey(_table, _key); + auto txn = m_cluster->begin(); + + if (_entry.status() == Entry::DELETED) + { + STORAGE_TIKV_LOG(DEBUG) << LOG_DESC("asyncSetRow delete") << LOG_KV("table", _table) + << LOG_KV("key", _key) << LOG_KV("dbKey", dbKey); + txn.remove(dbKey); + } + else + { + if (c_fileLogLevel <= TRACE) + { + STORAGE_TIKV_LOG(TRACE) + << LOG_DESC("asyncSetRow") << LOG_KV("table", _table) << LOG_KV("key", _key); + } + std::string value = std::string(_entry.get()); + txn.put(dbKey, value); + } + txn.commit(); + _callback(nullptr); + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncSetRow failed") << LOG_KV("table", _table) + << LOG_KV("message", e.what()); + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(WriteError, "asyncSetRow failed! ", e)); + } +} + +void TiKVStorage::asyncPrepare(const TwoPCParams& params, const TraverseStorageInterface& storage, + std::function callback) noexcept +{ + try + { + std::unique_lock lock(x_committer, std::try_to_lock); + if (lock.owns_lock()) + { + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("asyncPrepare") << LOG_KV("blockNumber", params.number) + << LOG_KV("primary", params.timestamp > 0 ? "false" : "true"); + auto start = utcTime(); + std::mutex writeMutex; + atomic_bool isTableValid = true; + std::atomic_uint64_t putCount{0}; + std::atomic_uint64_t deleteCount{0}; + std::atomic_uint64_t dataSize{0}; + if (m_committer) + { // should wait for the previous committer to timeout + auto duration = std::chrono::duration_cast( + std::chrono::system_clock::now() - m_committerCreateTime) + .count(); + STORAGE_TIKV_LOG(DEBUG) + << "asyncPrepare clean old committer" << LOG_KV("blockNumber", params.number) + << LOG_KV("duration(ms)", duration); + if (duration < m_commitTimeout) + { + std::this_thread::sleep_for( + std::chrono::milliseconds(m_commitTimeout - duration)); + } + m_committer->rollback(); + m_committer = nullptr; + } + m_committerCreateTime = std::chrono::system_clock::now(); + m_committer = m_cluster->new_optimistic_transaction(MAX_RETRY_LIMIT); + storage.parallelTraverse(true, [&](const std::string_view& table, + const std::string_view& key, Entry const& entry) { + if (!isValid(table, key)) + { + isTableValid = false; + return false; + } + auto dbKey = toDBKey(table, key); + if (entry.status() == Entry::DELETED) + { + ++deleteCount; + dataSize += dbKey.size(); + std::lock_guard lock(writeMutex); + m_committer->remove(dbKey); + } + else + { + std::string value = std::string(entry.get()); + ++putCount; + dataSize += dbKey.size() + value.size(); + std::lock_guard lock(writeMutex); + m_committer->put(dbKey, value); + } + return true; + }); + if (!isTableValid) + { + m_committer->rollback(); + m_committer = nullptr; + callback(BCOS_ERROR_UNIQUE_PTR(TableNotExists, "empty tableName or key"), 0, ""); + return; + } + auto encode = utcTime(); + auto size = putCount + deleteCount; + if (size == 0) + { + m_committer->rollback(); + m_committer = nullptr; + if (params.timestamp == 0) + { + STORAGE_TIKV_LOG(ERROR) << LOG_DESC("asyncPrepare primary empty storage") + << LOG_KV("blockNumber", params.number); + callback(BCOS_ERROR_UNIQUE_PTR(EmptyStorage, "commit storage is empty"), 0, ""); + } + else + { + STORAGE_TIKV_LOG(INFO) << LOG_DESC("asyncPrepare secondary empty storage") + << LOG_KV("blockNumber", params.number); + callback(nullptr, 0, ""); + } + return; + } + auto primaryLock = params.primaryKey; + + if (params.timestamp == 0) + { + STORAGE_TIKV_LOG(DEBUG) + << LOG_DESC("asyncPrepare primary") << LOG_KV("blockNumber", params.number); + auto result = m_committer->prewrite_primary(primaryLock); + auto write = utcTime(); + m_currentStartTS = result.second; + lock.unlock(); + callback(nullptr, result.second, result.first); + STORAGE_TIKV_LOG(INFO) + << "asyncPrepare primary finished" << LOG_KV("blockNumber", params.number) + << LOG_KV("put", putCount) << LOG_KV("delete", deleteCount) + << LOG_KV("dataSize(B)", dataSize) << LOG_KV("primaryLock", toHex(primaryLock)) + << LOG_KV("primary", toHex(result.first)) << LOG_KV("startTS", result.second) + << LOG_KV("encodeTime(ms)", encode - start) + << LOG_KV("prepareTime(ms)", write - encode) + << LOG_KV("callbackTime(ms)", utcTime() - write); + } + else + { + STORAGE_TIKV_LOG(DEBUG) + << "asyncPrepare secondary" << LOG_KV("blockNumber", params.number); + m_currentStartTS = params.timestamp; + m_committer->prewrite_secondary(primaryLock, m_currentStartTS); + auto write = utcTime(); + // m_committer = nullptr; + STORAGE_TIKV_LOG(INFO) + << "asyncPrepare secondary finished" << LOG_KV("blockNumber", params.number) + << LOG_KV("put", putCount) << LOG_KV("delete", deleteCount) + << LOG_KV("dataSize(B)", dataSize) << LOG_KV("primaryLock", primaryLock) + << LOG_KV("startTS", params.timestamp) + << LOG_KV("encodeTime(ms)", encode - start) + << LOG_KV("prepareTime(ms)", write - encode); + callback(nullptr, 0, primaryLock); + } + } + else + { + STORAGE_TIKV_LOG(INFO) + << "asyncPrepare try_lock failed" << LOG_KV("blockNumber", params.number); + callback(BCOS_ERROR_UNIQUE_PTR(TryLockFailed, "asyncPrepare try_lock failed"), 0, ""); + } + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncPrepare failed") + << LOG_KV("blockNumber", params.number) + << LOG_KV("message", e.what()); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(WriteError, "asyncPrepare failed! ", e), 0, ""); + } +} + +void TiKVStorage::asyncCommit( + const TwoPCParams& params, std::function callback) noexcept +{ + try + { + std::unique_lock lock(x_committer, std::try_to_lock); + if (lock.owns_lock()) + { + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("asyncCommit") << LOG_KV("blockNumber", params.number) + << LOG_KV("timestamp", params.timestamp); + auto start = utcTime(); + uint64_t ts = 0; + if (m_committer) + { + if (params.timestamp > 0) + { + m_committer->commit_secondary(params.timestamp); + } + else + { + ts = m_committer->commit_primary(); + m_committer->commit_secondary(ts); + } + m_committer = nullptr; + } + auto end = utcTime(); + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("asyncCommit finished") << LOG_KV("blockNumber", params.number) + << LOG_KV("commitTS", params.timestamp) << LOG_KV("primaryCommitTS", ts) + << LOG_KV("time(ms)", end - start); + lock.unlock(); + callback(nullptr, ts); + } + else + { + STORAGE_TIKV_LOG(INFO) + << "asyncCommit try_lock failed" << LOG_KV("blockNumber", params.number); + callback(BCOS_ERROR_UNIQUE_PTR(TryLockFailed, "asyncPrepare try_lock failed"), 0); + } + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncCommit failed") + << LOG_KV("blockNumber", params.number) + << LOG_KV("commitTS", params.timestamp) + << LOG_KV("message", e.what()); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(WriteError, "asyncCommit failed! ", e), 0); + } +} + +void TiKVStorage::asyncRollback( + const TwoPCParams& params, std::function callback) noexcept +{ + try + { + std::unique_lock lock(x_committer, std::try_to_lock); + if (lock.owns_lock()) + { + if (m_currentStartTS != params.timestamp) + { + STORAGE_TIKV_LOG(INFO) + << "asyncRollback wrong timestamp" << LOG_KV("blockNumber", params.number) + << LOG_KV("expect", params.timestamp) << LOG_KV("current", m_currentStartTS); + callback(BCOS_ERROR_UNIQUE_PTR( + TimestampMismatch, "asyncRollback failed for TimestampMismatch")); + return; + } + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("asyncRollback") << LOG_KV("blockNumber", params.number) + << LOG_KV("timestamp", params.timestamp); + RecursiveGuard guard(x_committer); + auto start = utcTime(); + if (m_committer) + { + m_committer->rollback(); + m_committer = nullptr; + } + auto end = utcTime(); + lock.unlock(); + callback(nullptr); + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("asyncRollback finished") << LOG_KV("blockNumber", params.number) + << LOG_KV("startTS", params.timestamp) << LOG_KV("time(ms)", end - start) + << LOG_KV("callback time(ms)", utcTime() - end); + } + else + { + STORAGE_TIKV_LOG(INFO) + << "asyncRollback try_lock failed" << LOG_KV("blockNumber", params.number); + callback(BCOS_ERROR_UNIQUE_PTR(TryLockFailed, "asyncPrepare try_lock failed")); + } + } + catch (const std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("asyncRollback failed") + << LOG_KV("blockNumber", params.number) + << LOG_KV("message", e.what()); + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(WriteError, "asyncRollback failed! ", e)); + } +} + +bcos::Error::Ptr TiKVStorage::setRows(std::string_view table, + const std::variant, const gsl::span>& + _keys, + std::variant, gsl::span> _values) noexcept +{ + bcos::Error::Ptr err = nullptr; + try + { + std::visit( + [&](auto&& keys, auto&& values) { + auto start = utcTime(); + if (table.empty()) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("setRows empty tableName") << LOG_KV("table", table); + err = BCOS_ERROR_PTR(TableNotExists, "empty tableName"); + return; + } + if (keys.size() != values.size()) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("setRows values size mismatch keys size") + << LOG_KV("table", table) << LOG_KV("keys", keys.size()) + << LOG_KV("values", values.size()); + err = BCOS_ERROR_PTR(TableNotExists, "setRows values size mismatch keys size"); + return; + } + if (values.empty()) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("setRows empty keys") << LOG_KV("table", table); + return; + } + std::vector realKeys(keys.size()); + tbb::parallel_for(tbb::blocked_range(0, keys.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + realKeys[i] = toDBKey(table, keys[i]); + } + }); + int64_t dataSize = 0; + auto txn = m_cluster->begin(); + for (size_t i = 0; i < keys.size(); ++i) + { + dataSize += realKeys[i].size() + values[i].size(); + txn.put(std::move(realKeys[i]), std::string(std::move(values[i]))); + } + auto encode = utcTime(); + txn.commit(); + auto end = utcTime(); + STORAGE_TIKV_LOG(INFO) + << LOG_DESC("setRows finished") << LOG_KV("put", keys.size()) + << LOG_KV("encode(ms)", encode - start) << LOG_KV("dataSize", dataSize) + << LOG_KV("time(ms)", end - start); + }, + _keys, _values); + } + catch (std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("setRows failed") << LOG_KV("what", e.what()); + return BCOS_ERROR_WITH_PREV_PTR(WriteError, "setRows failed! ", e); + } + return err; +} + +bcos::Error::Ptr TiKVStorage::deleteRows(std::string_view table, + const std::variant, const gsl::span>& + _keys) noexcept +{ + bcos::Error::Ptr err = nullptr; + try + { + std::visit( + [&](auto&& keys) { + if (table.empty()) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("deleteRows empty tableName") << LOG_KV("table", table); + err = BCOS_ERROR_PTR(TableNotExists, "empty tableName"); + return; + } + if (keys.empty()) + { + STORAGE_TIKV_LOG(WARNING) + << LOG_DESC("deleteRows empty keys") << LOG_KV("table", table); + return; + } + std::vector realKeys(keys.size()); + tbb::parallel_for(tbb::blocked_range(0, keys.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i != range.end(); ++i) + { + realKeys[i] = toDBKey(table, keys[i]); + } + }); + auto txn = m_cluster->begin(); + for (size_t i = 0; i < keys.size(); ++i) + { + txn.remove(std::string(std::move(realKeys[i]))); + } + STORAGE_TIKV_LOG(DEBUG) << LOG_DESC("deleteRows") << LOG_KV("table", table) + << LOG_KV("size", keys.size()); + txn.commit(); + }, + _keys); + } + catch (std::exception& e) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("deleteRows failed") << LOG_KV("what", e.what()); + return BCOS_ERROR_WITH_PREV_PTR(WriteError, "deleteRows failed! ", e); + } + return err; +} + +void TiKVStorage::triggerSwitch() +{ + if (f_onNeedSwitchEvent) + { + STORAGE_TIKV_LOG(WARNING) << LOG_DESC("Trigger switch"); + f_onNeedSwitchEvent(); + } +} diff --git a/bcos-storage/bcos-storage/TiKVStorage.h b/bcos-storage/bcos-storage/TiKVStorage.h new file mode 100644 index 0000000..f1a2c8a --- /dev/null +++ b/bcos-storage/bcos-storage/TiKVStorage.h @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the header of TiKVStorage + * @file TiKVStorage.h + * @author: xingqiangbai + * @date: 2021-04-16 + */ + +#pragma once + +#include +#include +#include +#include + +namespace tikv_client +{ +struct TransactionClient; +struct Transaction; +struct Snapshot; +} // namespace tikv_client + +namespace bcos::storage +{ +constexpr int scan_batch_size = 64; + +std::shared_ptr newTiKVClient( + const std::vector& pdAddrs, const std::string& logPath, + const std::string& caPath = "", const std::string& certPath = "", + const std::string& keyPath = "", uint32_t grpcTimeout = 3); + +class TiKVStorage : public TransactionalStorageInterface +{ +public: + using Ptr = std::shared_ptr; + explicit TiKVStorage( + std::shared_ptr _cluster, int32_t _commitTimeout = 3000); + + void asyncGetPrimaryKeys(std::string_view _table, + const std::optional& _condition, + std::function)> _callback) noexcept + override; + + void asyncGetRow(std::string_view table, std::string_view _key, + std::function)> _callback) noexcept override; + + void asyncGetRows(std::string_view table, + RANGES::any_view + keys, + std::function>)> _callback) noexcept + override; + + void asyncSetRow(std::string_view table, std::string_view key, Entry entry, + std::function callback) noexcept override; + + void asyncPrepare(const bcos::protocol::TwoPCParams& params, + const TraverseStorageInterface& storage, + std::function callback) noexcept override; + + void asyncCommit(const bcos::protocol::TwoPCParams& params, + std::function callback) noexcept override; + + void asyncRollback(const bcos::protocol::TwoPCParams& params, + std::function callback) noexcept override; + + Error::Ptr setRows(std::string_view table, + const std::variant, + const gsl::span>& keys, + std::variant, gsl::span> + values) noexcept override; + virtual Error::Ptr deleteRows( + std::string_view, const std::variant, + const gsl::span>&) noexcept override; + + void setSwitchHandler(std::function _onNeedSwitchEvent) + { + f_onNeedSwitchEvent = std::move(_onNeedSwitchEvent); + } + + void reset(); + +private: + void triggerSwitch(); + + std::shared_ptr m_cluster; + std::shared_ptr m_committer = nullptr; + uint64_t m_currentStartTS = 0; + std::function f_onNeedSwitchEvent; + int32_t m_commitTimeout = 3000; + std::chrono::time_point m_committerCreateTime; + mutable RecursiveMutex x_committer; +}; +} // namespace bcos::storage diff --git a/bcos-storage/test/CMakeLists.txt b/bcos-storage/test/CMakeLists.txt new file mode 100644 index 0000000..f5c33d3 --- /dev/null +++ b/bcos-storage/test/CMakeLists.txt @@ -0,0 +1,4 @@ +# hunter_add_package(wedpr-crypto) + +# add_subdirectory(perf) +add_subdirectory(unittest) \ No newline at end of file diff --git a/bcos-storage/test/unittest/CMakeLists.txt b/bcos-storage/test/unittest/CMakeLists.txt new file mode 100644 index 0000000..4cdee5f --- /dev/null +++ b/bcos-storage/test/unittest/CMakeLists.txt @@ -0,0 +1,44 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-framework +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +list(APPEND SOURCES "TestRocksDBStorage.cpp" "main.cpp") +# cmake settings +set(TEST_BINARY_NAME test-storage) + +if(WITH_TIKV) + list(APPEND SOURCES "TestTiKVStorage.cpp") +else() + set(EXCLUDE_SUITES "TestTiKVStorage") +endif() + +# config_test_cases("" "${SOURCES}" bin/${TEST_BINARY_NAME} "${EXCLUDE_SUITES}") + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ../../src) + +find_package(Boost REQUIRED unit_test_framework log) + +target_link_libraries(${TEST_BINARY_NAME} PUBLIC ${SECURITY_TARGET} ${STORAGE_TARGET} Boost::unit_test_framework Boost::log Boost::context) +include(SearchTestCases) +config_test_cases("" "${SOURCES}" ${TEST_BINARY_NAME} "${EXCLUDE_SUITES}") +# add_test(NAME test-storage WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("storage-coverage" "'/usr*' 'boost/**'") +endif () diff --git a/bcos-storage/test/unittest/StorageTest.cpp b/bcos-storage/test/unittest/StorageTest.cpp new file mode 100644 index 0000000..f691562 --- /dev/null +++ b/bcos-storage/test/unittest/StorageTest.cpp @@ -0,0 +1,28 @@ +#include +#include +#include + +using namespace bcos::storage; + +struct StorageSyncWrapperFixture +{ + StorageSyncWrapperFixture() : storage(std::make_shared(nullptr)) {} + + StorageImpl storage; +}; + +BOOST_FIXTURE_TEST_SUITE(StorageSyncWrapperTest, StorageSyncWrapperFixture) + +BOOST_AUTO_TEST_CASE(getRow) +{ + Entry entry; + entry.importFields({"Hello world!"}); + storage.setRow("table", "key", std::move(entry)); + + auto gotEntry = storage.getRow("table", "key"); + auto field = gotEntry->get(); + + BOOST_CHECK_EQUAL(field, "Hello world!"); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-storage/test/unittest/TestRocksDBStorage.cpp b/bcos-storage/test/unittest/TestRocksDBStorage.cpp new file mode 100644 index 0000000..19fec23 --- /dev/null +++ b/bcos-storage/test/unittest/TestRocksDBStorage.cpp @@ -0,0 +1,696 @@ +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-table/src/StateStorage.h" +#include "boost/filesystem.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::storage; +using namespace std; + +// ostream& operator<<(ostream& os, const std::unique_ptr& error) +// { +// os << error->what(); +// return os; +// } + +namespace bcos::test +{ +class Header256Hash : public bcos::crypto::Hash +{ +public: + typedef std::shared_ptr Ptr; + Header256Hash() = default; + virtual ~Header256Hash(){}; + bcos::crypto::HashType hash(bytesConstRef _data) override + { + std::hash hash; + return bcos::crypto::HashType( + hash(std::string_view((const char*)_data.data(), _data.size()))); + } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher{}}; + } +}; +struct TestRocksDBStorageFixture +{ + TestRocksDBStorageFixture() + { + boost::log::core::get()->set_logging_enabled(false); + rocksdb::DB* db; + rocksdb::Options options; + // Optimize RocksDB. This is the easiest way to get RocksDB to perform well + + // options.IncreaseParallelism(); + // options.OptimizeLevelStyleCompaction(); + + // create the DB if it's not already present + options.create_if_missing = true; + + // open DB + rocksdb::Status s = rocksdb::DB::Open(options, path, &db); + BOOST_CHECK_EQUAL(s.ok(), true); + + rocksDBStorage = + std::make_shared(std::unique_ptr(db), nullptr); + rocksDBStorage->asyncOpenTable(testTableName, [&](auto&& error, auto&& table) { + BOOST_CHECK(!error); + + if (error) + { + std::cout << boost::diagnostic_information(*error) << std::endl; + } + + if (table) + { + testTableInfo = table->tableInfo(); + } + }); + if (!testTableInfo) + { + std::promise> prom; + rocksDBStorage->asyncCreateTable(testTableName, "v1,v2,v3,v4,v5,v6", + [&prom](Error::UniquePtr error, std::optional
&& table) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(table.has_value(), true); + prom.set_value(table); + }); + auto table = prom.get_future().get(); + testTableInfo = table->tableInfo(); + } + } + + void prepareTestTableData() + { + for (size_t i = 0; i < 1000; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + rocksDBStorage->asyncSetRow(testTableName, key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + } + + void cleanupTestTableData() + { + for (size_t i = 0; i < 1000; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.setStatus(Entry::DELETED); + + rocksDBStorage->asyncSetRow(testTableName, key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + } + + void writeReadDeleteSingleTable(size_t count) + { + auto storage = rocksDBStorage; + size_t tableEntries = count; + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < tableEntries; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_delete"}); + testTable->setRow(key, std::move(entry)); + } + + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto start = std::chrono::system_clock::now(); + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + params1.timestamp = ts; + }); + + // commit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + auto commitEnd = std::chrono::system_clock::now(); + // check commit success + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + storage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), "value_delete"); + } + }); + }); + auto getEnd = std::chrono::system_clock::now(); + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = testTable->newEntry(); + auto key = "key" + boost::lexical_cast(i); + entry.setStatus(Entry::DELETED); + testTable->setRow(key, std::move(entry)); + } + params1.timestamp = 0; + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + params1.timestamp = ts; + }); + // commit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + auto deleteEnd = std::chrono::system_clock::now(); + // check if the data is deleted + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + cerr << "entries count=" << tableEntries << "|>>>>>>>>> commit=" + << std::chrono::duration_cast(commitEnd - start).count() + << "ms|getAll=" + << std::chrono::duration_cast(getEnd - commitEnd).count() + << "ms|deleteAll=" + << std::chrono::duration_cast(deleteEnd - getEnd).count() << "ms" + << endl + << endl; + } + + ~TestRocksDBStorageFixture() + { + if (boost::filesystem::exists(path)) + { + boost::filesystem::remove_all(path); + } + boost::log::core::get()->set_logging_enabled(true); + } + + std::string path = "./unittestdb"; + RocksDBStorage::Ptr rocksDBStorage; + std::string testTableName = "TestTable"; + TableInfo::ConstPtr testTableInfo = nullptr; +}; + +BOOST_FIXTURE_TEST_SUITE(TestRocksDBStorage, TestRocksDBStorageFixture) + +BOOST_AUTO_TEST_CASE(asyncGetRow) +{ + prepareTestTableData(); + + for (size_t i = 0; i < 1050; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + rocksDBStorage->asyncGetRow( + testTableName, key, [&](Error::UniquePtr error, std::optional entry) { + // #pragma omp critical + BOOST_REQUIRE(!error); + if (error) + { + std::cout << boost::diagnostic_information(*error); + } + if (i < 1000) + { + BOOST_CHECK_NE(entry.has_value(), false); + auto data = entry->get(); + BOOST_CHECK_EQUAL(data, "value_" + boost::lexical_cast(i)); + } + else + { + BOOST_CHECK_EQUAL(entry.has_value(), false); + } + }); + } + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncGetPrimaryKeys) +{ + prepareTestTableData(); + rocksDBStorage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 1000); + + std::vector sortedKeys; + + for (size_t i = 0; i < 1000; ++i) + { + sortedKeys.emplace_back("key" + boost::lexical_cast(i)); + } + + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + auto tableInfo = std::make_shared("new_table", vector{"value"}); + + for (size_t i = 1000; i < 2000; ++i) + { + std::string key = "newkey" + boost::lexical_cast(i); + auto entry = Entry(tableInfo); + entry.importFields({"value12345"}); + + rocksDBStorage->asyncSetRow(tableInfo->name(), key, entry, + [&](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + + // query old data + auto condition = std::optional(); + rocksDBStorage->asyncGetPrimaryKeys( + tableInfo->name(), condition, [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 1000); + + std::vector sortedKeys; + + for (size_t i = 0; i < 1000; ++i) + { + sortedKeys.emplace_back("newkey" + boost::lexical_cast(i + 1000)); + } + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + // re-query non table data + rocksDBStorage->asyncGetPrimaryKeys( + testTableName, condition, [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 1000); + + std::vector sortedKeys; + + for (size_t i = 0; i < 1000; ++i) + { + sortedKeys.emplace_back("key" + boost::lexical_cast(i)); + } + + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + rocksDBStorage->asyncGetRow(tableInfo->name(), + "newkey" + boost::lexical_cast(1050), + [&](Error::UniquePtr error, std::optional entry) { + // SetRow doesn't need create table + + BOOST_CHECK(!error); + BOOST_CHECK(entry); + }); + + rocksDBStorage->asyncGetRow(tableInfo->name(), + "newkey" + boost::lexical_cast(2000), + [&](Error::UniquePtr error, std::optional entry) { + // SetRow doesn't need create table + + BOOST_CHECK(!error); + BOOST_CHECK(!entry); + }); + + // clean new data + for (size_t i = 0; i < 1000; ++i) + { + std::string key = "newkey" + boost::lexical_cast(i + 1000); + auto entry = Entry(); + entry.setStatus(Entry::DELETED); + + rocksDBStorage->asyncSetRow(tableInfo->name(), key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + + rocksDBStorage->asyncGetRow(tableInfo->name(), + "newkey" + boost::lexical_cast(1050), + [&](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entry.has_value(), false); + }); + + // check if the data is deleted + rocksDBStorage->asyncGetPrimaryKeys(tableInfo->name(), + std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncGetRows) +{ + prepareTestTableData(); + + std::vector keys; + for (size_t i = 0; i < 1050; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + keys.push_back(key); + } + rocksDBStorage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 1050); + + for (size_t i = 0; i < 1050; ++i) + { + auto& entry = entries[i]; + if (i < 1000) + { + BOOST_CHECK_NE(entry.has_value(), false); + auto data = entry->get(); + BOOST_CHECK_EQUAL(data, "value_" + boost::lexical_cast(i)); + } + else + { + BOOST_CHECK_EQUAL(entry.has_value(), false); + } + } + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncPrepare) +{ + prepareTestTableData(); + + auto hashImpl = std::make_shared(); + auto storage = std::make_shared(rocksDBStorage); + BOOST_CHECK(storage->createTable("table1", "value1,value2,value3")); + BOOST_CHECK(storage->createTable("table2", "value1,value2,value3,value4,value5")); + + auto table1 = storage->openTable("table1"); + auto table2 = storage->openTable("table2"); + + BOOST_CHECK_NE(table1.has_value(), false); + BOOST_CHECK_NE(table2.has_value(), false); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < 10; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!abc" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + + rocksDBStorage->asyncPrepare(bcos::protocol::TwoPCParams(), *storage, + [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // TODO: asyncPrepare can't be query + rocksDBStorage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + + rocksDBStorage->asyncGetPrimaryKeys(table1->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 10); + + std::sort(table1Keys.begin(), table1Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table1Keys.begin(), table1Keys.end(), keys.begin(), keys.end()); + + rocksDBStorage->asyncGetRows(table1->tableInfo()->name(), table1Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + if (error) + { + std::cout << boost::diagnostic_information(*error) << std::endl; + } + + BOOST_CHECK_EQUAL(entries.size(), 10); + + for (size_t i = 0; i < 10; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table1Keys[i][3]); + } + }); + }); + + rocksDBStorage->asyncGetPrimaryKeys(table2->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 10); + + std::sort(table2Keys.begin(), table2Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table2Keys.begin(), table2Keys.end(), keys.begin(), keys.end()); + + rocksDBStorage->asyncGetRows(table2->tableInfo()->name(), table2Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 10); + + for (size_t i = 0; i < 10; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!abc") + table2Keys[i][3]); + } + }); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(boostSerialize) +{ + // encode the vector + std::vector forEncode(5); + forEncode[3] = "hello world!"; + + std::string buffer; + boost::iostreams::stream> outputStream( + buffer); + boost::archive::binary_oarchive archive(outputStream, + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking); + + archive << forEncode; + outputStream.flush(); + + std::cout << forEncode << std::endl; + + // decode the vector + boost::iostreams::stream inputStream( + buffer.data(), buffer.size()); + boost::archive::binary_iarchive archive2(inputStream, + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking); + + std::vector forDecode; + archive2 >> forDecode; + + std::cout << forDecode; + + BOOST_CHECK_EQUAL_COLLECTIONS( + forEncode.begin(), forEncode.end(), forDecode.begin(), forDecode.end()); +} + +BOOST_AUTO_TEST_CASE(rocksDBiter) +{ + std::string testPath = "./iterDBTest"; + + rocksdb::DB* db; + rocksdb::Options options; + // Optimize RocksDB. This is the easiest way to get RocksDB to perform well + options.IncreaseParallelism(); + options.OptimizeLevelStyleCompaction(); + // create the DB if it's not already present + options.create_if_missing = true; + + // open DB + rocksdb::Status s = rocksdb::DB::Open(options, testPath, &db); + BOOST_CHECK_EQUAL(s.ok(), true); + + for (uint32_t i = 0; i < 10; ++i) + { + rocksdb::WriteBatch writeBatch; + + for (size_t j = 0; j != 1000; ++j) + { + std::string key = *(bcos::toHexString(std::string((char*)&i, sizeof(i)))) + "_key_" + + boost::lexical_cast(j); + std::string value = "hello world!"; + + writeBatch.Put(key, value); + } + + db->Write(rocksdb::WriteOptions(), &writeBatch); + + rocksdb::ReadOptions read_options; + read_options.total_order_seek = true; + auto iter = db->NewIterator(read_options); + + size_t total = 0; + for (iter->SeekToFirst(); iter->Valid(); iter->Next()) + { + ++total; + } + delete iter; + + BOOST_CHECK_EQUAL(total, 1000 * (i + 1)); + } + + if (boost::filesystem::exists(testPath)) + { + boost::filesystem::remove_all(testPath); + } + + delete db; +} + +BOOST_AUTO_TEST_CASE(writeReadDelete_1Table) +{ + writeReadDeleteSingleTable(1000); + writeReadDeleteSingleTable(5000); + writeReadDeleteSingleTable(10000); + writeReadDeleteSingleTable(20000); + writeReadDeleteSingleTable(50000); +} + +BOOST_AUTO_TEST_CASE(commitAndCheck) +{ + auto initState = std::make_shared(rocksDBStorage); + + initState->asyncCreateTable( + "test_table1", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + if (error) + { + std::cout << boost::diagnostic_information(*error) << std::endl; + } + BOOST_CHECK(table); + }); + + initState->asyncCreateTable( + "test_table2", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + if (error) + { + std::cout << boost::diagnostic_information(*error) << std::endl; + } + BOOST_CHECK(table); + }); + + for (size_t keyIndex = 0; keyIndex < 100; ++keyIndex) + { + Entry entry; + entry.importFields({boost::lexical_cast(100)}); + + auto key = (boost::format("key_%d") % keyIndex).str(); + initState->asyncSetRow("test_table1", key, std::move(entry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + } + + bcos::protocol::TwoPCParams params; + params.number = 1; + rocksDBStorage->asyncPrepare(params, *initState, + [](Error::Ptr error, uint64_t, const std::string&) { BOOST_CHECK(!error); }); + rocksDBStorage->asyncCommit(params, [](Error::Ptr error, uint64_t) { BOOST_CHECK(!error); }); + + STORAGE_LOG(INFO) << "Init state finished"; + + for (size_t i = 100; i < 1000; i += 100) + { + auto state = std::make_shared(rocksDBStorage); + + STORAGE_LOG(INFO) << "Expected: " << i; + for (size_t keyIndex = 0; keyIndex < 100; ++keyIndex) + { + auto key = (boost::format("key_%d") % keyIndex).str(); + + size_t num = 0; + state->asyncGetRow( + "test_table1", key, [&num](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + num = boost::lexical_cast(entry->getField(0)); + }); + + BOOST_CHECK_EQUAL(num, i); + + num += 100; + + Entry newEntry; + newEntry.importFields({boost::lexical_cast(num)}); + + state->asyncSetRow("test_table1", key, std::move(newEntry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + } + + tbb::concurrent_vector> checks; + auto keySet = std::make_shared>(); + state->parallelTraverse(true, [&checks, i, keySet](const std::string_view& table, + const std::string_view& key, const Entry& entry) { + checks.push_back([tableName = std::string(table), key = std::string(key), entry = entry, + i, keySet]() { + BOOST_CHECK_EQUAL(tableName, "test_table1"); + auto [it, inserted] = keySet->emplace(key); + boost::ignore_unused(it); + BOOST_CHECK(inserted); + auto num = boost::lexical_cast(entry.getField(0)); + BOOST_CHECK_EQUAL(i + 100, num); + }); + return true; + }); + + BOOST_CHECK_EQUAL(checks.size(), 100); + for (auto& it : checks) + { + it(); + } + + bcos::protocol::TwoPCParams params; + params.number = i; + rocksDBStorage->asyncPrepare(params, *state, + [](Error::Ptr error, uint64_t, const std::string&) { BOOST_CHECK(!error); }); + rocksDBStorage->asyncCommit( + params, [](Error::Ptr error, uint64_t) { BOOST_CHECK(!error); }); + } +} +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-storage/test/unittest/TestTiKVStorage.cpp b/bcos-storage/test/unittest/TestTiKVStorage.cpp new file mode 100644 index 0000000..df34c5c --- /dev/null +++ b/bcos-storage/test/unittest/TestTiKVStorage.cpp @@ -0,0 +1,1380 @@ +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-storage/TiKVStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "boost/filesystem.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::storage; +using namespace std; + +namespace bcos::test +{ +size_t total = 500; + +class Header256Hash : public bcos::crypto::Hash +{ +public: + typedef std::shared_ptr Ptr; + Header256Hash() = default; + virtual ~Header256Hash(){}; + bcos::crypto::HashType hash(bytesConstRef _data) override + { + std::hash hash; + return bcos::crypto::HashType( + hash(std::string_view((const char*)_data.data(), _data.size()))); + } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher{}}; + } +}; + +struct TestTiKVStorageFixture +{ + TestTiKVStorageFixture() + { + boost::log::core::get()->set_logging_enabled(false); + std::vector pd_addrs{"127.0.0.1:2379"}; + m_cluster = newTiKVClient(pd_addrs, "./"); + + storage = std::make_shared(m_cluster); + storage->asyncOpenTable(testTableName, [&](auto error, auto table) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + if (table) + { + testTableInfo = table->tableInfo(); + } + }); + if (!testTableInfo) + { + std::promise> prom; + storage->asyncCreateTable(testTableName, "v1,v2,v3,v4,v5,v6", + [&prom](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(table.has_value(), true); + prom.set_value(table); + }); + auto table = prom.get_future().get(); + testTableInfo = table->tableInfo(); + } + } + + void prepareTestTableData() + { + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + storage->asyncSetRow(testTableName, key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + } + + void cleanupTestTableData() + { + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.setStatus(Entry::DELETED); + + storage->asyncSetRow(testTableName, key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + } + void writeReadDeleteSingleTable(size_t count) + { + size_t tableEntries = count; + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < tableEntries; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto start = std::chrono::system_clock::now(); + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + }); + + // commit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + auto commitEnd = std::chrono::system_clock::now(); + // check commit success + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + storage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + for (size_t i = 0; i < tableEntries; ++i) + { + // BOOST_CHECK_EQUAL(entries[i]->getField(0), std::string("value3")); + BOOST_CHECK_EQUAL( + entries[i]->getField(0), std::string("value_") + keys[i].substr(3)); + } + }); + }); + auto getEnd = std::chrono::system_clock::now(); + // clean data + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = testTable->newEntry(); + auto key = "key" + boost::lexical_cast(i); + entry.setStatus(Entry::DELETED); + testTable->setRow(key, std::move(entry)); + } + params1.timestamp = 0; + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + }); + // commit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + auto deleteEnd = std::chrono::system_clock::now(); + // check if the data is deleted + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + cerr << "entries count=" << tableEntries << "|>>>>>>>>> commit=" + << std::chrono::duration_cast(commitEnd - start).count() + << "ms|getAll=" + << std::chrono::duration_cast(getEnd - commitEnd).count() + << "ms|deleteAll=" + << std::chrono::duration_cast(deleteEnd - getEnd).count() << "ms" + << endl + << endl; + } + ~TestTiKVStorageFixture() + { + if (boost::filesystem::exists(path)) + { + boost::filesystem::remove_all(path); + } + boost::log::core::get()->set_logging_enabled(true); + } + + std::string path = "./unittestdb"; + TransactionalStorageInterface::Ptr storage; + std::string testTableName = "TestTable"; + TableInfo::ConstPtr testTableInfo = nullptr; + std::shared_ptr m_cluster; +}; + +BOOST_FIXTURE_TEST_SUITE(TestTiKVStorage, TestTiKVStorageFixture) + +BOOST_AUTO_TEST_CASE(asyncGetRow) +{ + prepareTestTableData(); + +#pragma omp parallel for + for (size_t i = 0; i < 1050; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + storage->asyncGetRow( + testTableName, key, [&](Error::UniquePtr error, std::optional entry) { +#pragma omp critical + BOOST_CHECK_EQUAL(error.get(), nullptr); + if (i < total) + { + BOOST_CHECK_EQUAL(entry.has_value(), true); + } + else + { + BOOST_CHECK_EQUAL(entry.has_value(), false); + } + if (i < total) + { + BOOST_CHECK_NE(entry.has_value(), false); + auto data = entry->get(); + auto fields = std::string("value_" + boost::lexical_cast(i)); + + BOOST_CHECK_EQUAL(data, fields); + } + else + { + BOOST_CHECK_EQUAL(entry.has_value(), false); + } + }); + } + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncGetPrimaryKeys) +{ + prepareTestTableData(); + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + + std::vector sortedKeys; + + for (size_t i = 0; i < total; ++i) + { + sortedKeys.emplace_back("key" + boost::lexical_cast(i)); + } + + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + auto tableInfo = std::make_shared("new_table", vector{"value"}); + + for (size_t i = 1000; i < 1000 + total; ++i) + { + std::string key = "newkey" + boost::lexical_cast(i); + auto entry = Entry(tableInfo); + entry.importFields({"value12345"}); + + storage->asyncSetRow(tableInfo->name(), key, entry, + [&](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + + // query old data + auto condition = std::optional(); + BOOST_CHECK_EQUAL(condition.has_value(), false); + storage->asyncGetPrimaryKeys( + tableInfo->name(), condition, [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + + std::vector sortedKeys; + + for (size_t i = 0; i < total; ++i) + { + sortedKeys.emplace_back("newkey" + boost::lexical_cast(i + 1000)); + } + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + // re-query non table data + storage->asyncGetPrimaryKeys( + testTableName, condition, [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + + std::vector sortedKeys; + + for (size_t i = 0; i < total; ++i) + { + sortedKeys.emplace_back("key" + boost::lexical_cast(i)); + } + + std::sort(sortedKeys.begin(), sortedKeys.end()); + + BOOST_CHECK_EQUAL_COLLECTIONS( + sortedKeys.begin(), sortedKeys.end(), keys.begin(), keys.end()); + }); + + storage->asyncGetRow(tableInfo->name(), "newkey" + boost::lexical_cast(1050), + [&](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error.get()); + BOOST_CHECK(entry.has_value()); + }); + + // clean new data + for (size_t i = 0; i < total; ++i) + { + std::string key = "newkey" + boost::lexical_cast(i + 1000); + auto entry = Entry(); + entry.setStatus(Entry::DELETED); + + storage->asyncSetRow(tableInfo->name(), key, entry, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + + storage->asyncGetRow(tableInfo->name(), "newkey" + boost::lexical_cast(1000), + [&](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entry.has_value(), false); + }); + + // check if the data is deleted + storage->asyncGetPrimaryKeys(tableInfo->name(), std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncGetRows) +{ + prepareTestTableData(); + + std::vector keys; + for (size_t i = 0; i < 1050; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + keys.push_back(key); + } + storage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 1050); + + for (size_t i = 0; i < 1050; ++i) + { + auto& entry = entries[i]; + if (i < total) + { + BOOST_CHECK_EQUAL(entry.has_value(), true); + + auto data = entry->get(); + BOOST_CHECK_EQUAL( + data, std::string("value_" + boost::lexical_cast(i))); + + // BOOST_CHECK_EQUAL_COLLECTIONS( + // data.begin(), data.end(), fields.begin(), fields.end()); + } + else + { + BOOST_CHECK_EQUAL(entry.has_value(), false); + } + } + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(asyncPrepare) +{ + prepareTestTableData(); + + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage->openTable(table1Name); + auto table2 = stateStorage->openTable(table2Name); + + BOOST_CHECK_NE(table1.has_value(), false); + BOOST_CHECK_NE(table2.has_value(), false); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < 10; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + + storage->asyncPrepare(bcos::protocol::TwoPCParams(), *stateStorage, + [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + }); + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + + storage->asyncGetPrimaryKeys(table1->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 10); + + std::sort(table1Keys.begin(), table1Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table1Keys.begin(), table1Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table1->tableInfo()->name(), table1Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 10); + + for (size_t i = 0; i < 10; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table1Keys[i][3]); + } + }); + }); + + storage->asyncGetPrimaryKeys(table2->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 10); + + std::sort(table2Keys.begin(), table2Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table2Keys.begin(), table2Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table2->tableInfo()->name(), table2Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 10); + + for (size_t i = 0; i < 10; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table2Keys[i][3]); + } + }); + }); + + auto entry1 = Entry(); + entry1.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table1Name, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + auto entry2 = Entry(); + entry2.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table2Name, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + cleanupTestTableData(); +} + + +BOOST_AUTO_TEST_CASE(asyncPrepareTimeout) +{ + prepareTestTableData(); + + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage->openTable(table1Name); + auto table2 = stateStorage->openTable(table2Name); + + BOOST_CHECK_NE(table1.has_value(), false); + BOOST_CHECK_NE(table2.has_value(), false); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < 10; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + + storage->asyncPrepare(bcos::protocol::TwoPCParams(), *stateStorage, + [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + }); + auto now = std::chrono::system_clock::now(); + // re-prepare need wait for the previous prepare timeout + storage->asyncPrepare(bcos::protocol::TwoPCParams(), *stateStorage, + [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + }); + auto end = std::chrono::system_clock::now(); + BOOST_CHECK_GE(std::chrono::duration_cast(end - now).count(), 2900); + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(multiStorageCommit) +{ + // FIXME: this test case will crash, because tikv-rust client only resolve timeout lock + size_t tableEntries = 101; + auto storage2 = std::make_shared(m_cluster); + auto storage3 = std::make_shared(m_cluster); + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + auto stateStorage2 = std::make_shared(storage2); + auto stateStorage3 = std::make_shared(storage3); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage2->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage3->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage2->openTable(table1Name); + auto table2 = stateStorage3->openTable(table2Name); + + BOOST_CHECK_EQUAL(table1.has_value(), true); + BOOST_CHECK_EQUAL(table2.has_value(), true); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto stateStorage0 = std::make_shared(storage); + // check empty storage error + storage->asyncPrepare( + params1, *stateStorage0, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_NE(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // prewrite + BOOST_CHECK_EQUAL(params1.timestamp, 0); + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + storage3->asyncPrepare( + params1, *stateStorage3, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // only storage call asyncCommit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + // check commit success + + // this_thread::sleep_for(chrono::seconds(3)); + storage->asyncGetPrimaryKeys(table1->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_REQUIRE_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table1Keys.begin(), table1Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table1Keys.begin(), table1Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table1->tableInfo()->name(), table1Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table1Keys[i].substr(3)); + } + }); + }); + + storage->asyncGetPrimaryKeys(table2->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table2Keys.begin(), table2Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table2Keys.begin(), table2Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table2->tableInfo()->name(), table2Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table2Keys[i].substr(3)); + } + }); + }); + // clean data + auto entry1 = Entry(); + entry1.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table1Name, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + auto entry2 = Entry(); + entry2.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table2Name, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry1 = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry1.setStatus(Entry::DELETED); + storage2->asyncSetRow(table1Name, key1, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setStatus(Entry::DELETED); + storage3->asyncSetRow(table2Name, key2, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + // check if the data is deleted + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + // check if the data is deleted + storage->asyncGetPrimaryKeys(table2Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(singleStorageRollback) +{ + size_t tableEntries = 101; + std::string table1Name = "table1"; + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + auto stateStorage = std::make_shared(storage); + BOOST_CHECK_EQUAL( + stateStorage->createTable(table1Name, "value1,value2,value3").has_value(), true); + auto table1 = stateStorage->openTable(table1Name); + BOOST_CHECK_EQUAL(table1.has_value(), true); + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = table1Name + ":key0"; + params1.timestamp = 0; + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + }); + storage->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); +} + +BOOST_AUTO_TEST_CASE(multiStorageRollback) +{ + size_t tableEntries = 101; + auto storage2 = std::make_shared(m_cluster); + auto storage3 = std::make_shared(m_cluster); + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + auto stateStorage2 = std::make_shared(storage2); + auto stateStorage3 = std::make_shared(storage3); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage2->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage3->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage2->openTable(table1Name); + auto table2 = stateStorage3->openTable(table2Name); + + BOOST_CHECK_EQUAL(table1.has_value(), true); + BOOST_CHECK_EQUAL(table2.has_value(), true); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto stateStorage0 = std::make_shared(storage); + // check empty storage error + storage->asyncPrepare( + params1, *stateStorage0, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_NE(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // all storage call asyncRollback + storage->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + storage2->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + // check commit failed + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + storage->asyncGetPrimaryKeys(table2Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); +} + +BOOST_AUTO_TEST_CASE(secondaryRollbackAndPrimaryCommit) +{ + size_t tableEntries = 101; + auto storage2 = std::make_shared(m_cluster); + auto storage3 = std::make_shared(m_cluster); + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + auto stateStorage1 = std::make_shared(storage2); + auto table1Name = "table1"; + BOOST_CHECK_EQUAL( + stateStorage1->createTable(table1Name, "value1,value2,value3").has_value(), true); + auto table1 = stateStorage1->openTable(table1Name); + + BOOST_CHECK_EQUAL(table1.has_value(), true); + + std::vector table1Keys; + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto stateStorage0 = std::make_shared(storage); + + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage1, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // storage2 rollback and storage commit + storage2->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + params1.timestamp = 0; + storage->asyncCommit( + params1, [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + // check commit success bug storage2 rollback + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + }); + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(multiStorageScondaryCrash) +{ + size_t tableEntries = 101; + auto storage2 = std::make_shared(m_cluster); + auto storage3 = std::make_shared(m_cluster); + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + auto stateStorage2 = std::make_shared(storage2); + auto stateStorage3 = std::make_shared(storage3); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage2->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage3->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage2->openTable(table1Name); + auto table2 = stateStorage3->openTable(table2Name); + + BOOST_CHECK_EQUAL(table1.has_value(), true); + BOOST_CHECK_EQUAL(table2.has_value(), true); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto stateStorage0 = std::make_shared(storage); + // check empty storage error + storage->asyncPrepare( + params1, *stateStorage0, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_NE(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // all storage call asyncRollback + storage->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + storage2->asyncRollback( + params1, [&](Error::Ptr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + // this sleep_for is to wait lock timeout + // this_thread::sleep_for(chrono::seconds(3)); + + // check commit failed + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + storage->asyncGetPrimaryKeys(table2Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + // recall prewrite + params1.timestamp = 0; + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + storage3->asyncPrepare( + params1, *stateStorage3, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // only storage call asyncCommit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + + // this sleep_for is to wait lock timeout + // this_thread::sleep_for(chrono::seconds(3)); + + // check commit success + storage->asyncGetPrimaryKeys(table1->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table1Keys.begin(), table1Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table1Keys.begin(), table1Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table1->tableInfo()->name(), table1Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table1Keys[i].substr(3)); + } + }); + }); + + storage->asyncGetPrimaryKeys(table2->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table2Keys.begin(), table2Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table2Keys.begin(), table2Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table2->tableInfo()->name(), table2Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table2Keys[i].substr(3)); + } + }); + }); + + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + std::sort(keys.begin(), keys.end()); + storage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), total); + for (size_t i = 0; i < total; ++i) + { + auto value = "value_" + keys[i].substr(3); + BOOST_CHECK_EQUAL(entries[i]->getField(0), value); + } + }); + }); + + // clean data + auto entry1 = Entry(); + entry1.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table1Name, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + auto entry2 = Entry(); + entry2.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table2Name, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry1 = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry1.setStatus(Entry::DELETED); + storage2->asyncSetRow(table1Name, key1, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setStatus(Entry::DELETED); + storage3->asyncSetRow(table2Name, key2, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + // check if the data is deleted + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + // check if the data is deleted + storage->asyncGetPrimaryKeys(table2Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(multiStoragePrimaryCrash) +{ + size_t tableEntries = 101; + auto storage2 = std::make_shared(m_cluster); + auto storage3 = std::make_shared(m_cluster); + auto hashImpl = std::make_shared(); + auto stateStorage = std::make_shared(storage); + auto testTable = stateStorage->openTable(testTableName); + BOOST_CHECK_EQUAL(testTable.has_value(), true); + for (size_t i = 0; i < total; ++i) + { + std::string key = "key" + boost::lexical_cast(i); + Entry entry(testTableInfo); + entry.importFields({"value_" + boost::lexical_cast(i)}); + testTable->setRow(key, std::move(entry)); + } + auto stateStorage2 = std::make_shared(storage2); + auto stateStorage3 = std::make_shared(storage3); + auto table1Name = "table1"; + auto table2Name = "table2"; + BOOST_CHECK_EQUAL( + stateStorage2->createTable(table1Name, "value1,value2,value3").has_value(), true); + BOOST_CHECK_EQUAL( + stateStorage3->createTable(table2Name, "value1,value2,value3,value4,value5").has_value(), + true); + auto table1 = stateStorage2->openTable(table1Name); + auto table2 = stateStorage3->openTable(table2Name); + + BOOST_CHECK_EQUAL(table1.has_value(), true); + BOOST_CHECK_EQUAL(table2.has_value(), true); + + std::vector table1Keys; + std::vector table2Keys; + + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry.setField(0, "hello world!" + boost::lexical_cast(i)); + table1->setRow(key1, entry); + table1Keys.push_back(key1); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setField(0, "hello world!" + boost::lexical_cast(i)); + table2->setRow(key2, entry2); + table2Keys.push_back(key2); + } + auto params1 = bcos::protocol::TwoPCParams(); + params1.number = 100; + params1.primaryKey = testTableName + ":key0"; + auto stateStorage0 = std::make_shared(storage); + // check empty storage error + storage->asyncPrepare( + params1, *stateStorage0, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_NE(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // prewrite + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + + // this sleep_for is to wait lock timeout + this_thread::sleep_for(chrono::seconds(3)); + + // just recommit prewrite + storage = std::make_shared(m_cluster); + auto storage4 = std::make_shared(m_cluster); + auto stateStorage4 = std::make_shared(storage3); + params1.timestamp = 0; + storage->asyncPrepare( + params1, *stateStorage, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_NE(ts, 0); + params1.timestamp = ts; + storage2->asyncPrepare( + params1, *stateStorage2, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + storage3->asyncPrepare( + params1, *stateStorage3, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + // secondary storage accept empty stateStorage + storage4->asyncPrepare( + params1, *stateStorage4, [&](Error::Ptr error, uint64_t ts, const std::string&) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(ts, 0); + }); + }); + // only storage call asyncCommit + storage->asyncCommit(bcos::protocol::TwoPCParams(), + [&](Error::Ptr error, uint64_t) { BOOST_CHECK_EQUAL(error, nullptr); }); + + // this sleep_for is to wait lock timeout + // this_thread::sleep_for(chrono::seconds(3)); + + // check commit success + storage->asyncGetPrimaryKeys(table1->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table1Keys.begin(), table1Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table1Keys.begin(), table1Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table1->tableInfo()->name(), table1Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table1Keys[i].substr(3)); + } + }); + }); + + storage->asyncGetPrimaryKeys(table2->tableInfo()->name(), + std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), tableEntries); + + std::sort(table2Keys.begin(), table2Keys.end()); + BOOST_CHECK_EQUAL_COLLECTIONS( + table2Keys.begin(), table2Keys.end(), keys.begin(), keys.end()); + + storage->asyncGetRows(table2->tableInfo()->name(), table2Keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), tableEntries); + + for (size_t i = 0; i < tableEntries; ++i) + { + BOOST_CHECK_EQUAL(entries[i]->getField(0), + std::string("hello world!") + table2Keys[i].substr(3)); + } + }); + }); + + storage->asyncGetPrimaryKeys(testTableName, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), total); + storage->asyncGetRows(testTableName, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), total); + for (size_t i = 0; i < total; ++i) + { + auto value = "value_" + keys[i].substr(3); + BOOST_CHECK_EQUAL(entries[i]->getField(0), value); + } + }); + }); + + // clean data + auto entry1 = Entry(); + entry1.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table1Name, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + storage->asyncGetRow(storage::StateStorage::SYS_TABLES, table1Name, + [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entry.has_value(), false); + }); + + auto entry2 = Entry(); + entry2.setStatus(Entry::DELETED); + storage->asyncSetRow(storage::StateStorage::SYS_TABLES, table2Name, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + storage->asyncGetRow(storage::StateStorage::SYS_TABLES, table2Name, + [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entry.has_value(), false); + }); + for (size_t i = 0; i < tableEntries; ++i) + { + auto entry1 = table1->newEntry(); + auto key1 = "key" + boost::lexical_cast(i); + entry1.setStatus(Entry::DELETED); + storage2->asyncSetRow(table1Name, key1, entry1, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + + auto entry2 = table2->newEntry(); + auto key2 = "key" + boost::lexical_cast(i); + entry2.setStatus(Entry::DELETED); + storage3->asyncSetRow(table2Name, key2, entry2, + [](Error::UniquePtr error) { BOOST_CHECK_EQUAL(error.get(), nullptr); }); + } + // check if the data is deleted + storage->asyncGetPrimaryKeys(table1Name, std::optional(), + [&](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + // BOOST_CHECK_EQUAL(keys.size(), 0); + storage->asyncGetRows(table1Name, keys, + [&](Error::UniquePtr error, std::vector> entries) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(entries.size(), 0); + // for (size_t i = 0; i < tableEntries; ++i) + // { + // BOOST_CHECK_EQUAL(keys[i], ""); + // BOOST_CHECK_EQUAL(entries[i]->getField(0), ""); + // } + }); + }); + // check if the data is deleted + storage->asyncGetPrimaryKeys(table2Name, std::optional(), + [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK_EQUAL(error.get(), nullptr); + BOOST_CHECK_EQUAL(keys.size(), 0); + }); + + cleanupTestTableData(); +} + +BOOST_AUTO_TEST_CASE(writeReadDelete_1Table) +{ + writeReadDeleteSingleTable(1000); + writeReadDeleteSingleTable(5000); + writeReadDeleteSingleTable(10000); + writeReadDeleteSingleTable(20000); + writeReadDeleteSingleTable(50000); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test diff --git a/bcos-storage/test/unittest/main.cpp b/bcos-storage/test/unittest/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-storage/test/unittest/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-sync/CMakeLists.txt b/bcos-sync/CMakeLists.txt new file mode 100644 index 0000000..7430c60 --- /dev/null +++ b/bcos-sync/CMakeLists.txt @@ -0,0 +1,70 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-sync +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-sync +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) + +project(bcos-sync VERSION ${VERSION}) + +# proto generation +set(PROTO_INPUT_PATH ${CMAKE_SOURCE_DIR}/bcos-sync) +set(PROTO_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/) + +set(SYNC_PROTOS bcos-sync/protocol/proto/BlockSync.proto) +foreach(proto_file ${SYNC_PROTOS}) + get_filename_component(bcos_proto_abs "${PROTO_INPUT_PATH}" ABSOLUTE) + set(proto_file_abs ${bcos_proto_abs}/${proto_file}) + get_filename_component(rel_dir ${proto_file} DIRECTORY) + get_filename_component(basename ${proto_file} NAME_WE) + set(generated_files ${PROTO_OUTPUT_PATH}/${rel_dir}/${basename}.pb.cc) + + list(APPEND SYNC_SRCS ${generated_files}) + + message("Command: protoc --cpp_out ${PROTO_OUTPUT_PATH} -I ${PROTO_INPUT_PATH} ${proto_file}") + add_custom_command( + OUTPUT ${generated_files} + COMMAND protobuf::protoc --cpp_out ${PROTO_OUTPUT_PATH} -I ${PROTO_INPUT_PATH} ${proto_file} + COMMENT "Generating ${generated_files} from ${proto_file_abs}" + VERBATIM + ) +endforeach() + +find_package(Protobuf CONFIG REQUIRED) +find_package(jsoncpp CONFIG REQUIRED) + +include_directories(${PROTO_OUTPUT_PATH}) + +file(GLOB_RECURSE SRCS bcos-sync/*.cpp) +add_library(${SYNC_TARGET} ${SRCS} ${SYNC_SRCS}) +target_link_libraries(${SYNC_TARGET} PUBLIC ${STORAGE_TARGET} bcos-framework ${UTILITIES_TARGET} ${CODEC_TARGET} ${TOOL_TARGET} jsoncpp_static) + + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for doxygen +# include(BuildDocs) +# buildDoc(bcos-sync-doc) + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("sync-cov" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () diff --git a/bcos-sync/bcos-sync/BlockSync.cpp b/bcos-sync/bcos-sync/BlockSync.cpp new file mode 100644 index 0000000..870d76a --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSync.cpp @@ -0,0 +1,825 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief block sync implementation + * @file BlockSync.cpp + * @author: yujiechen + * @date 2021-05-24 + */ +#include "bcos-sync/BlockSync.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::ledger; +using namespace bcos::tool; + +BlockSync::BlockSync(BlockSyncConfig::Ptr _config, unsigned _idleWaitMs) + : Worker("syncWorker", _idleWaitMs), + m_config(_config), + m_syncStatus(std::make_shared(_config)), + m_downloadingQueue(std::make_shared(_config)) +{ + m_downloadBlockProcessor = std::make_shared("Download", 1); + m_sendBlockProcessor = std::make_shared("SyncSend", 1); + m_downloadingTimer = std::make_shared(m_config->downloadTimeout(), "downloadTimer"); + m_downloadingTimer->registerTimeoutHandler(boost::bind(&BlockSync::onDownloadTimeout, this)); + m_downloadingQueue->registerNewBlockHandler( + boost::bind(&BlockSync::onNewBlock, this, boost::placeholders::_1)); + initSendResponseHandler(); +} + +void BlockSync::start() +{ + if (m_running) + { + BLKSYNC_LOG(INFO) << LOG_DESC("BlockSync has already been started"); + return; + } + startWorking(); + m_running = true; + BLKSYNC_LOG(INFO) << LOG_DESC("Start BlockSync"); +} + +void BlockSync::init() +{ + auto fetcher = std::make_shared(m_config->ledger()); + BLKSYNC_LOG(INFO) << LOG_DESC("start fetch the ledger config for block sync module"); + fetcher->fetchBlockNumberAndHash(); + fetcher->fetchConsensusNodeList(); + fetcher->fetchObserverNodeList(); + fetcher->fetchGenesisHash(); + // set the syncConfig + auto genesisHash = fetcher->genesisHash(); + BLKSYNC_LOG(INFO) << LOG_DESC("fetch the ledger config for block sync module success") + << LOG_KV("number", fetcher->ledgerConfig()->blockNumber()) + << LOG_KV("latestHash", fetcher->ledgerConfig()->hash().abridged()) + << LOG_KV("genesisHash", genesisHash); + m_config->setGenesisHash(genesisHash); + m_config->resetConfig(fetcher->ledgerConfig()); + BLKSYNC_LOG(INFO) << LOG_DESC("init block sync success"); +} + +void BlockSync::enableAsMaster(bool _masterNode) +{ + BLKSYNC_LOG(INFO) << LOG_DESC("enableAsMaster:") << _masterNode; + if (m_masterNode == _masterNode) + { + BLKSYNC_LOG(INFO) << LOG_DESC("enableAsMasterNode: The masterNodeState is not changed") + << LOG_KV("master", _masterNode); + return; + } + m_config->setMasterNode(_masterNode); + if (!_masterNode) + { + m_masterNode = _masterNode; + return; + } + init(); + // only set m_masterNode to be true when init success + m_masterNode = _masterNode; +} + +void BlockSync::initSendResponseHandler() +{ + // set the sendResponse callback + std::weak_ptr weakFrontService = m_config->frontService(); + m_sendResponseHandler = [weakFrontService](std::string const& _id, int _moduleID, + NodeIDPtr _dstNode, bytesConstRef _data) { + try + { + auto frontService = weakFrontService.lock(); + if (!frontService) + { + return; + } + frontService->asyncSendResponse( + _id, _moduleID, _dstNode, _data, [_id, _moduleID, _dstNode](Error::Ptr _error) { + if (_error) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("sendResponse failed") << LOG_KV("uuid", _id) + << LOG_KV("module", std::to_string(_moduleID)) + << LOG_KV("dst", _dstNode->shortHex()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("sendResponse exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }; +} + +void BlockSync::stop() +{ + if (!m_running) + { + BLKSYNC_LOG(INFO) << LOG_DESC("BlockSync has already been stopped"); + return; + } + BLKSYNC_LOG(INFO) << LOG_DESC("Stop BlockSync"); + if (m_downloadBlockProcessor) + { + m_downloadBlockProcessor->stop(); + } + if (m_sendBlockProcessor) + { + m_sendBlockProcessor->stop(); + } + if (m_downloadingTimer) + { + m_downloadingTimer->destroy(); + } + m_running = false; + finishWorker(); + if (isWorking()) + { + // stop the worker thread + stopWorking(); + terminate(); + } +} + +void BlockSync::printSyncInfo() +{ + auto peers = m_syncStatus->peers(); + std::string peer_str; + for (auto const& peer : *peers) + { + peer_str += peer->shortHex() + "/"; + } + BLKSYNC_LOG(TRACE) << "\n[Sync Info] --------------------------------------------\n" + << " IsSyncing: " << isSyncing() << "\n" + << " Block number: " << m_config->blockNumber() << "\n" + << " Block hash: " << m_config->hash().abridged() << "\n" + << " Genesis hash: " << m_config->genesisHash().abridged() << "\n" + << " Peers size: " << peers->size() << "\n" + << "[Peer Info] --------------------------------------------\n" + << " Host: " << m_config->nodeID()->shortHex() << "\n" + << " Peer: " << peer_str << "\n" + << " --------------------------------------------"; +} + +void BlockSync::executeWorker() +{ + if (!m_masterNode) + { + return; + } + if (isSyncing()) + { + printSyncInfo(); + } + // maintain the connections between observers/sealers + maintainPeersConnection(); + m_downloadBlockProcessor->enqueue([this]() { + try + { + // flush downloaded buffer into downloading queue + maintainDownloadingBuffer(); + maintainDownloadingQueue(); + + // send block-download-request to peers if this node is behind others + tryToRequestBlocks(); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(ERROR) << LOG_DESC( + "maintainDownloadingQueue or maintainPeersStatus exception") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + }); + // send block to other nodes + m_sendBlockProcessor->enqueue([this]() { + try + { + maintainBlockRequest(); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(ERROR) << LOG_DESC("maintainBlockRequest exception") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + }); +} + +void BlockSync::workerProcessLoop() +{ + while (workerState() == WorkerState::Started) + { + try + { + executeWorker(); + if (idleWaitMs()) + { + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(idleWaitMs())); + } + } + catch (std::exception const& e) + { + BLKSYNC_LOG(ERROR) << LOG_DESC("BlockSync executeWorker exception") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + } +} + +bool BlockSync::shouldSyncing() +{ + if (m_config->blockNumber() >= m_config->knownHighestNumber()) + { + return false; + } + // the node is reaching consensus the block + if (m_config->committedProposalNumber() >= m_config->knownHighestNumber()) + { + return false; + } + if (m_config->executedBlock() >= m_config->knownHighestNumber()) + { + return false; + } + return true; +} + +bool BlockSync::isSyncing() +{ + return (m_state == SyncState::Downloading); +} + +void BlockSync::maintainDownloadingBuffer() +{ + if (m_downloadingQueue->size() == 0) + { + return; + } + if (!shouldSyncing()) + { + m_downloadingQueue->clear(); + return; + } + m_downloadingQueue->clearFullQueueIfNotHas(m_config->nextBlock()); + m_downloadingQueue->flushBufferToQueue(); +} + + +void BlockSync::asyncNotifyBlockSyncMessage(Error::Ptr _error, std::string const& _uuid, + NodeIDPtr _nodeID, bytesConstRef _data, std::function _onRecv) +{ + if (!m_masterNode) + { + return; + } + auto self = weak_from_this(); + asyncNotifyBlockSyncMessage( + _error, _nodeID, _data, + [_uuid, _nodeID, self](bytesConstRef _respData) { + try + { + auto sync = self.lock(); + if (!sync) + { + return; + } + sync->m_sendResponseHandler(_uuid, ModuleID::BlockSync, _nodeID, _respData); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncNotifyBlockSyncMessage sendResponse failed") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("id", _uuid) << LOG_KV("dst", _nodeID->shortHex()); + } + }, + _onRecv); +} + +void BlockSync::asyncNotifyBlockSyncMessage(Error::Ptr _error, NodeIDPtr _nodeID, + bytesConstRef _data, std::function, + std::function _onRecv) +{ + if (_onRecv) + { + _onRecv(nullptr); + } + if (_error != nullptr) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncNotifyBlockSyncMessage error") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + return; + } + try + { + auto syncMsg = m_config->msgFactory()->createBlockSyncMsg(_data); + switch (syncMsg->packetType()) + { + case BlockSyncPacketType::BlockStatusPacket: + { + onPeerStatus(_nodeID, syncMsg); + break; + } + case BlockSyncPacketType::BlockRequestPacket: + { + onPeerBlocksRequest(_nodeID, syncMsg); + break; + } + case BlockSyncPacketType::BlockResponsePacket: + { + onPeerBlocks(_nodeID, syncMsg); + break; + } + default: + { + BLKSYNC_LOG(WARNING) << LOG_DESC( + "asyncNotifyBlockSyncMessage: unknown block sync message") + << LOG_KV("type", syncMsg->packetType()) + << LOG_KV("peer", _nodeID->shortHex()); + break; + } + } + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncNotifyBlockSyncMessage exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("peer", _nodeID->shortHex()); + } +} + +void BlockSync::asyncNotifyNewBlock( + LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) +{ + if (_onRecv) + { + _onRecv(nullptr); + } + BLKSYNC_LOG(DEBUG) << LOG_DESC("asyncNotifyNewBlock: receive new block info") + << LOG_KV("number", _ledgerConfig->blockNumber()) + << LOG_KV("hash", _ledgerConfig->hash().abridged()) + << LOG_KV("consNodeSize", _ledgerConfig->consensusNodeList().size()) + << LOG_KV("observerNodeSize", _ledgerConfig->observerNodeList().size()); + if (_ledgerConfig->blockNumber() > m_config->blockNumber()) + { + onNewBlock(_ledgerConfig); + // try to commitBlock to ledger when receive new block notification + m_downloadingQueue->tryToCommitBlockToLedger(); + } +} + +void BlockSync::onNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig) +{ + m_config->resetConfig(_ledgerConfig); + broadcastSyncStatus(); + m_downloadingQueue->clearExpiredQueueCache(); +} + +void BlockSync::onPeerStatus(NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg) +{ + // receive peer not exist in the group + // Note: only should reject syncStatus from the node whose blockNumber falling behind of this + // node + if (!m_config->existsInGroup(_nodeID) && _syncMsg->number() <= m_config->blockNumber()) + { + return; + } + auto statusMsg = m_config->msgFactory()->createBlockSyncStatusMsg(_syncMsg); + m_syncStatus->updatePeerStatus(_nodeID, statusMsg); + + if (_syncMsg->version() > static_cast(BlockSyncMsgVersion::v0)) + { + m_config->nodeTimeMaintenance()->tryToUpdatePeerTimeInfo(_nodeID, statusMsg->time()); + } +} + +void BlockSync::onPeerBlocks(NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg) +{ + auto blockMsg = m_config->msgFactory()->createBlocksMsg(_syncMsg); + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("Receive peer block packet") + << LOG_KV("peer", _nodeID->shortHex()); + m_downloadingQueue->push(blockMsg); + m_signalled.notify_all(); +} + +void BlockSync::onPeerBlocksRequest(NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg) +{ + auto blockRequest = m_config->msgFactory()->createBlockRequest(_syncMsg); + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_BADGE("onPeerBlocksRequest") + << LOG_DESC("Receive block request") << LOG_KV("peer", _nodeID->shortHex()) + << LOG_KV("from", blockRequest->number()) + << LOG_KV("size", blockRequest->size()); + auto peerStatus = m_syncStatus->peerStatus(_nodeID); + if (!peerStatus && m_config->existsInGroup(_nodeID)) + { + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_BADGE("onPeerBlocksRequest") + << LOG_DESC( + "Receive block request from the node belongs to the group but " + "with no peer status, create status now") + << LOG_KV("peer", _nodeID ? _nodeID->shortHex() : "unknown") + << LOG_KV("curNum", m_config->blockNumber()) + << LOG_KV("from", blockRequest->number()) + << LOG_KV("size", blockRequest->size()); + // the node belongs to the group, insert the status into the peer + peerStatus = m_syncStatus->insertEmptyPeer(_nodeID); + } + if (peerStatus) + { + peerStatus->downloadRequests()->push(blockRequest->number(), blockRequest->size()); + m_signalled.notify_all(); + return; + } + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") << LOG_BADGE("onPeerBlocksRequest") + << LOG_DESC("Receive block request from the unknown peer, drop directly") + << LOG_KV("peer", _nodeID ? _nodeID->shortHex() : "unknown") + << LOG_KV("from", blockRequest->number()) + << LOG_KV("size", blockRequest->size()); +} + +void BlockSync::onDownloadTimeout() +{ + // stop the timer and reset the state to idle + m_downloadingTimer->stop(); + m_state = SyncState::Idle; +} + +void BlockSync::downloadFinish() +{ + m_downloadingTimer->stop(); + m_state = SyncState::Idle; +} + +void BlockSync::tryToRequestBlocks() +{ + // wait the downloaded block commit to the ledger, and enable the next batch requests + if (m_config->blockNumber() < m_config->executedBlock() && + m_downloadingQueue->commitQueueSize() > 0) + { + return; + } + if (m_maxRequestNumber <= m_config->blockNumber() || + m_maxRequestNumber <= m_config->executedBlock()) + { + downloadFinish(); + } + if (!shouldSyncing() || isSyncing()) + { + return; + } + auto requestToNumber = m_config->knownHighestNumber(); + m_config->consensus()->notifyHighestSyncingNumber(requestToNumber); + auto topBlock = m_downloadingQueue->top(); + // The block in BlockQueue is not nextBlock(the BlockQueue missing some block) + if (topBlock) + { + auto topBlockHeader = topBlock->blockHeader(); + if (topBlockHeader && topBlockHeader->number() > m_config->nextBlock()) + { + requestToNumber = + std::min(m_config->knownHighestNumber(), (topBlockHeader->number() - 1)); + } + } + auto currentNumber = m_config->blockNumber(); + // no need to request blocks + if (currentNumber >= requestToNumber) + { + return; + } + requestBlocks(currentNumber, requestToNumber); +} + +void BlockSync::requestBlocks(BlockNumber _from, BlockNumber _to) +{ + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_BADGE("requestBlocks") + << LOG_KV("from", _from) << LOG_KV("to", _to); + m_state = SyncState::Downloading; + m_downloadingTimer->start(); + + auto blockSizePerShard = m_config->maxRequestBlocks(); + auto shardNumber = (_to - _from + blockSizePerShard - 1) / blockSizePerShard; + size_t shard = 0; + // at most request `maxShardPerPeer` shards every time + for (size_t loop = 0; loop < m_config->maxShardPerPeer() && shard < shardNumber; loop++) + { + bool findPeer = false; + // shard: [from, to] + m_syncStatus->foreachPeerRandom([&](PeerStatus::Ptr _p) { + if (_p->number() < m_config->knownHighestNumber()) + { + // Only send request to nodes which are not syncing(has max number) + return true; + } + BlockNumber from = _from + 1 + shard * blockSizePerShard; + BlockNumber to = std::min((BlockNumber)(from + blockSizePerShard - 1), _to); + if (_p->number() < to || _p->archivedBlockNumber() >= from) + { + return true; // to next peer + } + // found a peer + findPeer = true; + auto blockRequest = m_config->msgFactory()->createBlockRequest(); + blockRequest->setNumber(from); + blockRequest->setSize(to - from + 1); + auto encodedData = blockRequest->encode(); + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::BlockSync, _p->nodeId(), ref(*encodedData), 0, nullptr); + + m_maxRequestNumber = std::max(m_maxRequestNumber.load(), to); + + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_BADGE("Request") + << LOG_DESC("Request blocks") << LOG_KV("from", from) + << LOG_KV("to", to) << LOG_KV("curNum", m_config->blockNumber()) + << LOG_KV("peerArchived", _p->archivedBlockNumber()) + << LOG_KV("peer", _p->nodeId()->shortHex()) + << LOG_KV("maxRequestNumber", m_maxRequestNumber) + << LOG_KV("node", m_config->nodeID()->shortHex()); + + ++shard; // shard move + return shard < shardNumber; + }); + if (!findPeer) + { + BlockNumber from = _from + shard * blockSizePerShard; + BlockNumber to = std::min((BlockNumber)(from + blockSizePerShard - 1), _to); + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") << LOG_BADGE("Request") + << LOG_DESC("Couldn't find any peers to request blocks") + << LOG_KV("from", from) << LOG_KV("to", to); + break; + } + } +} + +void BlockSync::maintainDownloadingQueue() +{ + if (!shouldSyncing()) + { + m_downloadingQueue->clear(); + downloadFinish(); + return; + } + m_downloadingQueue->tryToCommitBlockToLedger(); + auto executedBlock = m_config->executedBlock(); + // remove the expired block + auto topBlock = m_downloadingQueue->top(); + while (topBlock && topBlock->blockHeader()->number() <= executedBlock) + { + m_downloadingQueue->pop(); + topBlock = m_downloadingQueue->top(); + } + topBlock = m_downloadingQueue->top(); + if (!topBlock) + { + return; + } + + // limit the executed blockNumber + if (executedBlock >= (m_config->blockNumber() + m_waterMark)) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("too many executed blocks have not been committed, stop execute new block") + << LOG_KV("curNumber", m_config->blockNumber()) + << LOG_KV("executedBlock", executedBlock); + return; + } + + auto expectedBlock = executedBlock + 1; + auto topNumber = topBlock->blockHeader()->number(); + if (topNumber > (expectedBlock)) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("Discontinuous block") << LOG_KV("topNumber", topNumber) + << LOG_KV("curNumber", m_config->blockNumber()) + << LOG_KV("expectedBlock", expectedBlock) + << LOG_KV("commitQueueSize", m_downloadingQueue->commitQueueSize()) + << LOG_KV("isSyncing", isSyncing()) + << LOG_KV("knownHighestNumber", m_config->knownHighestNumber()) + << LOG_KV("node", m_config->nodeID()->shortHex()); + return; + } + // execute the expected block + if (topBlock->blockHeader()->number() == (executedBlock + 1)) + { + auto block = m_downloadingQueue->top(); + // Note: the block maybe cleared here + if (!block) + { + return; + } + m_downloadingQueue->pop(); + auto blockHeader = block->blockHeader(); + auto header = block->blockHeader(); + auto signature = header->signatureList(); + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_DESC("BlockSync: applyBlock") + << LOG_KV("execNum", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("node", m_config->nodeID()->shortHex()) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("txsSize", block->transactionsSize()); + m_downloadingQueue->applyBlock(block); + } +} + +void BlockSync::maintainBlockRequest() +{ + m_syncStatus->foreachPeerRandom([&](PeerStatus::Ptr _p) { + auto reqQueue = _p->downloadRequests(); + // no need to respond + if (reqQueue->empty()) + { + return true; + } + while (!reqQueue->empty()) + { + auto blocksReq = reqQueue->topAndPop(); + BlockNumber numberLimit = blocksReq->fromNumber() + blocksReq->size(); + // read archived block number to check the request range + // the number less than archived block number is not exist + auto archivedBlockNumber = m_config->archiveBlockNumber(); + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download Request: response blocks") + << LOG_KV("from", blocksReq->fromNumber()) + << LOG_KV("size", blocksReq->size()) << LOG_KV("to", numberLimit - 1) + << LOG_KV("archivedNumber", archivedBlockNumber) + << LOG_KV("peer", _p->nodeId()->shortHex()); + BlockNumber startNumber = std::max(blocksReq->fromNumber(), archivedBlockNumber); + for (BlockNumber number = startNumber; number < numberLimit; number++) + { + fetchAndSendBlock(reqQueue, _p->nodeId(), number); + } + } + return true; + }); +} + +void BlockSync::fetchAndSendBlock( + DownloadRequestQueue::Ptr _reqQueue, PublicPtr _peer, BlockNumber _number) +{ + // only fetch blockHeader and transactions + auto blockFlag = HEADER | TRANSACTIONS; + auto self = weak_from_this(); + m_config->ledger()->asyncGetBlockDataByNumber(_number, blockFlag, + [self, _reqQueue, _peer, _number](Error::Ptr _error, Block::Ptr _block) { + if (_error != nullptr) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("fetchAndSendBlock failed for asyncGetBlockDataByNumber failed") + << LOG_KV("number", _number) << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + return; + } + try + { + auto sync = self.lock(); + if (!sync) + { + return; + } + auto blockHeader = _block->blockHeader(); + auto signature = blockHeader->signatureList(); + auto config = sync->m_config; + auto blocksReq = config->msgFactory()->createBlocksMsg(); + bytes blockData; + _block->encode(blockData); + blocksReq->appendBlockData(std::move(blockData)); + blocksReq->setNumber(_number); + config->frontService()->asyncSendMessageByNodeID( + ModuleID::BlockSync, _peer, ref(*(blocksReq->encode())), 0, nullptr); + BLKSYNC_LOG(DEBUG) + << LOG_DESC("fetchAndSendBlock: response block") + << LOG_KV("toPeer", _peer->shortHex()) << LOG_KV("number", _number) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("transactionsSize", _block->transactionsSize()); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("fetchAndSendBlock exception") << LOG_KV("number", _number) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void BlockSync::maintainPeersConnection() +{ + if (!m_config->existsInGroup()) + { + return; + } + // Delete uncorrelated peers + NodeIDs peersToDelete; + m_syncStatus->foreachPeer([&](PeerStatus::Ptr _p) { + if (_p->nodeId() == m_config->nodeID()) + { + return true; + } + if (!m_config->connected(_p->nodeId())) + { + peersToDelete.emplace_back(_p->nodeId()); + return true; + } + if (!m_config->existsInGroup(_p->nodeId()) && m_config->blockNumber() >= _p->number()) + { + // Only delete outsider whose number is smaller than myself + peersToDelete.emplace_back(_p->nodeId()); + } + return true; + }); + // delete the invalid peer + for (auto node : peersToDelete) + { + m_syncStatus->deletePeer(node); + } + // create a peer + broadcastSyncStatus(); +} + +void BlockSync::broadcastSyncStatus() +{ + auto statusMsg = m_config->msgFactory()->createBlockSyncStatusMsg(m_config->blockNumber(), + m_config->hash(), m_config->genesisHash(), static_cast(BlockSyncMsgVersion::v2), + m_config->archiveBlockNumber()); + m_syncStatus->updatePeerStatus(m_config->nodeID(), statusMsg); + auto encodedData = statusMsg->encode(); + BLKSYNC_LOG(TRACE) << LOG_BADGE("BlockSync") << LOG_DESC("broadcastSyncStatus") + << LOG_KV("number", statusMsg->number()) + << LOG_KV("genesisHash", statusMsg->genesisHash().abridged()) + << LOG_KV("currentHash", statusMsg->hash().abridged()); + // Note: only send status to the observers/sealers, but the OUTSIDE_GROUP node node maybe + // observer/sealer before sync to the highest here can't use asyncSendBroadcastMessage + auto const& groupNodeList = m_config->groupNodeList(); + for (auto const& nodeID : groupNodeList) + { + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::BlockSync, nodeID, ref(*encodedData), 0, nullptr); + } +} + +bool BlockSync::faultyNode(bcos::crypto::NodeIDPtr _nodeID) +{ + // if the node is down, it has no peer information + if (!m_syncStatus->hasPeer(_nodeID)) + { + return true; + } + auto nodeStatus = m_syncStatus->peerStatus(_nodeID); + if ((nodeStatus->number() + c_FaultyNodeBlockDelta) < m_config->blockNumber()) + { + return true; + } + return false; +} + +void BlockSync::asyncGetSyncInfo(std::function _onGetSyncInfo) +{ + Json::Value syncInfo; + syncInfo["isSyncing"] = isSyncing(); + syncInfo["genesisHash"] = *toHexString(m_config->genesisHash()); + syncInfo["nodeID"] = *toHexString(m_config->nodeID()->data()); + + int64_t currentNumber = m_config->blockNumber(); + syncInfo["blockNumber"] = currentNumber; + syncInfo["archivedBlockNumber"] = m_config->archiveBlockNumber(); + syncInfo["latestHash"] = *toHexString(m_config->hash()); + syncInfo["knownHighestNumber"] = m_config->knownHighestNumber(); + syncInfo["knownLatestHash"] = *toHexString(m_config->knownLatestHash()); + + Json::Value peersInfo(Json::arrayValue); + m_syncStatus->foreachPeer([&](PeerStatus::Ptr _p) { + // not print the status of the node-self + if (_p->nodeId() == m_config->nodeID()) + { + return true; + } + Json::Value info; + info["nodeID"] = *toHexString(_p->nodeId()->data()); + info["genesisHash"] = *toHexString(_p->genesisHash()); + info["blockNumber"] = Json::UInt64(_p->number()); + info["latestHash"] = *toHexString(_p->hash()); + info["archivedBlockNumber"] = Json::UInt64(_p->archivedBlockNumber()); + peersInfo.append(info); + return true; + }); + + syncInfo["peers"] = peersInfo; + Json::FastWriter fastWriter; + std::string statusStr = fastWriter.write(syncInfo); + _onGetSyncInfo(nullptr, statusStr); +} diff --git a/bcos-sync/bcos-sync/BlockSync.h b/bcos-sync/bcos-sync/BlockSync.h new file mode 100644 index 0000000..2e8e648 --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSync.h @@ -0,0 +1,143 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief block sync implementation + * @file BlockSync.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/BlockSyncConfig.h" +#include "bcos-sync/state/DownloadingQueue.h" +#include "bcos-sync/state/SyncPeerStatus.h" +#include "bcos-tool/NodeTimeMaintenance.h" +#include +#include +#include +#include +namespace bcos +{ +namespace sync +{ +class BlockSync : public BlockSyncInterface, + public Worker, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + BlockSync(BlockSyncConfig::Ptr _config, unsigned _idleWaitMs = 200); + ~BlockSync() override {} + + void start() override; + void stop() override; + + // called by the frontService to dispatch message + void asyncNotifyBlockSyncMessage(Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) override; + + void asyncNotifyNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig, + std::function _onRecv) override; + void asyncGetSyncInfo(std::function _onGetSyncInfo) override; + + void asyncNotifyCommittedIndex(bcos::protocol::BlockNumber _number, + std::function _onRecv) override + { + m_config->setCommittedProposalNumber(_number); + if (_onRecv) + { + _onRecv(nullptr); + } + } + + virtual void init(); + BlockSyncConfig::Ptr config() { return m_config; } + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) override + { + m_config->notifyConnectedNodes(_connectedNodes, _onResponse); + } + + // determine the specified node is faulty or not + // used to optimize consensus + bool faultyNode(bcos::crypto::NodeIDPtr _nodeID) override; + + void enableAsMaster(bool _masterNode); + +protected: + virtual void asyncNotifyBlockSyncMessage(Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, std::function _sendResponse, + std::function _onRecv); + + void initSendResponseHandler(); + void executeWorker() override; + void workerProcessLoop() override; + // for message handle + virtual void onPeerStatus(bcos::crypto::NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg); + virtual void onPeerBlocks(bcos::crypto::NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg); + virtual void onPeerBlocksRequest( + bcos::crypto::NodeIDPtr _nodeID, BlockSyncMsgInterface::Ptr _syncMsg); + + virtual bool shouldSyncing(); + virtual bool isSyncing(); + virtual void tryToRequestBlocks(); + virtual void onDownloadTimeout(); + // block execute and submit + virtual void maintainDownloadingQueue(); + virtual void maintainDownloadingBuffer(); + // maintain connections + virtual void maintainPeersConnection(); + // block requests + virtual void maintainBlockRequest(); + // broadcast sync status + virtual void broadcastSyncStatus(); + + virtual void onNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig); + + virtual void downloadFinish(); + +protected: + void requestBlocks(bcos::protocol::BlockNumber _from, bcos::protocol::BlockNumber _to); + void fetchAndSendBlock(DownloadRequestQueue::Ptr _reqQueue, bcos::crypto::PublicPtr _peer, + bcos::protocol::BlockNumber _number); + void printSyncInfo(); + +protected: + BlockSyncConfig::Ptr m_config; + SyncPeerStatus::Ptr m_syncStatus; + DownloadingQueue::Ptr m_downloadingQueue; + + std::function + m_sendResponseHandler; + + bcos::ThreadPool::Ptr m_downloadBlockProcessor = nullptr; + bcos::ThreadPool::Ptr m_sendBlockProcessor = nullptr; + std::shared_ptr m_downloadingTimer; + + std::atomic_bool m_running = {false}; + std::atomic m_state = {SyncState::Idle}; + std::atomic m_maxRequestNumber = {0}; + + boost::condition_variable m_signalled; + boost::mutex x_signalled; + bcos::protocol::BlockNumber m_waterMark = 10; + bcos::protocol::BlockNumber c_FaultyNodeBlockDelta = 50; + + std::atomic_bool m_masterNode = {false}; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/BlockSyncConfig.cpp b/bcos-sync/bcos-sync/BlockSyncConfig.cpp new file mode 100644 index 0000000..1d14c86 --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSyncConfig.cpp @@ -0,0 +1,198 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief config for the block sync + * @file BlockSyncConfig.cpp + * @author: yujiechen + * @date 2021-05-25 + */ +#include "BlockSyncConfig.h" +#include "bcos-sync/utilities/Common.h" +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::ledger; + +void BlockSyncConfig::resetConfig(LedgerConfig::Ptr _ledgerConfig) +{ + if (_ledgerConfig->blockNumber() <= m_blockNumber && m_blockNumber > 0) + { + return; + } + // must resetConfig for the consensus module firstly for the following block check depends on + // the consensus config + m_consensus->asyncNotifyNewBlock(_ledgerConfig, [_ledgerConfig](Error::Ptr _error) { + if (!_error) + { + return; + } + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncNotifyNewBlock to consensus failed") + << LOG_KV("number", _ledgerConfig->blockNumber()) + << LOG_KV("hash", _ledgerConfig->hash().abridged()) + << LOG_KV("error", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + }); + + // Note: can't add lock before asyncNotifyNewBlock in case of deadlock + Guard l(m_mutex); + if (_ledgerConfig->blockNumber() <= m_blockNumber && m_blockNumber > 0) + { + return; + } + resetBlockInfo(_ledgerConfig->blockNumber(), _ledgerConfig->hash()); + setConsensusNodeList(_ledgerConfig->consensusNodeList()); + setObserverList(_ledgerConfig->observerNodeList()); + auto type = determineNodeType(); + if (type != m_nodeType) + { + m_nodeType = type; + } + if (m_nodeTypeChanged && m_masterNode && (m_notifiedNodeType != m_nodeType)) + { + m_nodeTypeChanged(type); + m_notifiedNodeType = m_nodeType; + } + BLKSYNC_LOG(INFO) << LOG_DESC("#### BlockSyncConfig resetConfig") + << LOG_KV("number", m_blockNumber) + << LOG_KV("consNodeSize", consensusNodeList().size()) + << LOG_KV("observerNodeSize", observerNodeList().size()) + << LOG_KV("type", m_nodeType); +} + +void BlockSyncConfig::setGenesisHash(HashType const& _hash) +{ + m_genesisHash = _hash; + if (knownLatestHash() == HashType()) + { + setKnownLatestHash(m_genesisHash); + } +} + +void BlockSyncConfig::resetBlockInfo(BlockNumber _blockNumber, bcos::crypto::HashType const& _hash) +{ + m_blockNumber = _blockNumber; + setHash(_hash); + m_nextBlock = m_blockNumber + 1; + if (m_knownHighestNumber < _blockNumber) + { + m_knownHighestNumber = _blockNumber; + setKnownLatestHash(_hash); + } + if (_blockNumber > m_executedBlock) + { + m_executedBlock = _blockNumber; + } +} + +HashType const& BlockSyncConfig::hash() const +{ + ReadGuard l(x_hash); + return m_hash; +} + +void BlockSyncConfig::setHash(HashType const& _hash) +{ + WriteGuard l(x_hash); + m_hash = _hash; +} + +void BlockSyncConfig::setKnownHighestNumber(BlockNumber _highestNumber) +{ + m_knownHighestNumber = _highestNumber; +} + +void BlockSyncConfig::setKnownLatestHash(HashType const& _hash) +{ + WriteGuard l(x_knownLatestHash); + m_knownLatestHash = _hash; +} + +HashType const& BlockSyncConfig::knownLatestHash() +{ + ReadGuard l(x_knownLatestHash); + return m_knownLatestHash; +} + +void BlockSyncConfig::setMaxDownloadingBlockQueueSize(size_t _maxDownloadingBlockQueueSize) +{ + m_maxDownloadingBlockQueueSize = _maxDownloadingBlockQueueSize; +} + +void BlockSyncConfig::setMaxDownloadRequestQueueSize(size_t _maxDownloadRequestQueueSize) +{ + m_maxDownloadRequestQueueSize = _maxDownloadRequestQueueSize; +} + +void BlockSyncConfig::setExecutedBlock(BlockNumber _executedBlock) +{ + if (m_blockNumber <= _executedBlock) + { + m_executedBlock = _executedBlock; + return; + } + m_executedBlock.store(m_blockNumber); +} + +bcos::protocol::NodeType BlockSyncConfig::determineNodeType() +{ + if (existNode(m_consensusNodeList, x_consensusNodeList, m_nodeId)) + { + return bcos::protocol::NodeType::CONSENSUS_NODE; + } + if (existNode(m_observerNodeList, x_observerNodeList, m_nodeId)) + { + return bcos::protocol::NodeType::OBSERVER_NODE; + } + return bcos::protocol::NodeType::NODE_OUTSIDE_GROUP; +} + +bool BlockSyncConfig::existNode(bcos::consensus::ConsensusNodeListPtr const& _nodeList, + SharedMutex& _lock, bcos::crypto::NodeIDPtr _nodeID) +{ + ReadGuard l(_lock); + for (auto const& it : *_nodeList) + { + if (it->nodeID()->data() == _nodeID->data()) + { + return true; + } + } + return false; +} + +bcos::protocol::BlockNumber BlockSyncConfig::archiveBlockNumber() const +{ + protocol::BlockNumber archivedBlockNumber = 0; + std::promise>> statePromise; + m_ledger->asyncGetCurrentStateByKey(ledger::SYS_KEY_ARCHIVED_NUMBER, + [&statePromise](Error::Ptr&& err, std::optional&& entry) { + statePromise.set_value(std::make_pair(std::move(err), std::move(entry))); + }); + auto archiveRet = statePromise.get_future().get(); + if (!archiveRet.first && archiveRet.second) + { + try + { + archivedBlockNumber = boost::lexical_cast(archiveRet.second->get()); + } + catch (boost::bad_lexical_cast& e) + { + BLKSYNC_LOG(DEBUG) << "Lexical cast transaction count failed, entry value: " + << archiveRet.second->get(); + } + } + return archivedBlockNumber; +} diff --git a/bcos-sync/bcos-sync/BlockSyncConfig.h b/bcos-sync/bcos-sync/BlockSyncConfig.h new file mode 100644 index 0000000..b58e895 --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSyncConfig.h @@ -0,0 +1,192 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief config for the block sync + * @file BlockSyncConfig.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgFactory.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace sync +{ +class BlockSyncConfig : public SyncConfig +{ +public: + using Ptr = std::shared_ptr; + BlockSyncConfig(bcos::crypto::PublicPtr _nodeId, bcos::ledger::LedgerInterface::Ptr _ledger, + bcos::txpool::TxPoolInterface::Ptr _txpool, bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::consensus::ConsensusInterface::Ptr _consensus, BlockSyncMsgFactory::Ptr _msgFactory, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : SyncConfig(_nodeId), + m_ledger(_ledger), + m_txpool(_txpool), + m_blockFactory(_blockFactory), + m_txResultFactory(_txResultFactory), + m_frontService(_frontService), + m_scheduler(_scheduler), + m_consensus(_consensus), + m_msgFactory(_msgFactory), + m_nodeTimeMaintenance(_nodeTimeMaintenance) + {} + ~BlockSyncConfig() override {} + + bcos::ledger::LedgerInterface::Ptr ledger() { return m_ledger; } + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + bcos::front::FrontServiceInterface::Ptr frontService() { return m_frontService; } + bcos::scheduler::SchedulerInterface::Ptr scheduler() { return m_scheduler; } + bcos::consensus::ConsensusInterface::Ptr consensus() { return m_consensus; } + bcos::tool::NodeTimeMaintenance::Ptr nodeTimeMaintenance() { return m_nodeTimeMaintenance; } + + BlockSyncMsgFactory::Ptr msgFactory() { return m_msgFactory; } + virtual void resetConfig(bcos::ledger::LedgerConfig::Ptr _ledgerConfig); + + bcos::crypto::HashType const& genesisHash() const { return m_genesisHash; } + void setGenesisHash(bcos::crypto::HashType const& _hash); + + bcos::protocol::BlockNumber blockNumber() const { return m_blockNumber; } + bcos::crypto::HashType const& hash() const; + + bcos::protocol::BlockNumber nextBlock() const { return m_nextBlock; } + void resetBlockInfo( + bcos::protocol::BlockNumber _blockNumber, bcos::crypto::HashType const& _hash); + + void setKnownHighestNumber(bcos::protocol::BlockNumber _highestNumber); + bcos::protocol::BlockNumber knownHighestNumber() { return m_knownHighestNumber; } + + void setKnownLatestHash(bcos::crypto::HashType const& _hash); + + bcos::crypto::HashType const& knownLatestHash(); + + size_t maxDownloadingBlockQueueSize() const { return m_maxDownloadingBlockQueueSize; } + void setMaxDownloadingBlockQueueSize(size_t _maxDownloadingBlockQueueSize); + + void setMaxDownloadRequestQueueSize(size_t _maxDownloadRequestQueueSize); + + size_t maxDownloadRequestQueueSize() const { return m_maxDownloadRequestQueueSize; } + + size_t downloadTimeout() const { return m_downloadTimeout; } + + size_t maxRequestBlocks() const { return m_maxRequestBlocks; } + size_t maxShardPerPeer() const { return m_maxShardPerPeer; } + + void setExecutedBlock(bcos::protocol::BlockNumber _executedBlock); + bcos::protocol::BlockNumber executedBlock() { return m_executedBlock; } + + bcos::txpool::TxPoolInterface::Ptr txpool() { return m_txpool; } + bcos::protocol::TransactionSubmitResultFactory::Ptr txResultFactory() + { + return m_txResultFactory; + } + + void setCommittedProposalNumber(bcos::protocol::BlockNumber _committedProposalNumber) + { + m_committedProposalNumber = _committedProposalNumber; + } + + bcos::protocol::BlockNumber committedProposalNumber() const + { + return m_committedProposalNumber; + } + + bcos::protocol::NodeType nodeType() const { return m_nodeType; } + + void registerOnNodeTypeChanged(std::function _onNodeTypeChanged) + { + m_nodeTypeChanged = _onNodeTypeChanged; + } + + void setMasterNode(bool _masterNode) + { + Guard l(m_mutex); + m_masterNode = _masterNode; + // notify nodeType to the gateway + if (m_nodeTypeChanged) + { + m_nodeTypeChanged(nodeType()); + } + } + + bool masterNode() const { return m_masterNode; } + + bcos::protocol::BlockNumber archiveBlockNumber() const; + +protected: + void setHash(bcos::crypto::HashType const& _hash); + + // Note: this only be called after block on-chain successfully + virtual bcos::protocol::NodeType determineNodeType(); + bool existNode(bcos::consensus::ConsensusNodeListPtr const& _nodeList, SharedMutex& _lock, + bcos::crypto::NodeIDPtr _nodeID); + +private: + bcos::ledger::LedgerInterface::Ptr m_ledger; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::consensus::ConsensusInterface::Ptr m_consensus; + BlockSyncMsgFactory::Ptr m_msgFactory; + bcos::tool::NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; + + bcos::crypto::HashType m_genesisHash; + std::atomic m_blockNumber = {0}; + std::atomic m_nextBlock = {0}; + std::atomic m_executedBlock = {0}; + bcos::crypto::HashType m_hash; + mutable SharedMutex x_hash; + + std::atomic m_knownHighestNumber = {0}; + bcos::crypto::HashType m_knownLatestHash; + mutable SharedMutex x_knownLatestHash; + mutable Mutex m_mutex; + + std::atomic m_maxDownloadingBlockQueueSize = 256; + std::atomic m_maxDownloadRequestQueueSize = 1000; + // the max number of blocks this node can requested to + std::atomic m_maxRequestBlocks = {8}; + std::atomic m_downloadTimeout = (200 * m_maxRequestBlocks); + + std::atomic m_maxShardPerPeer = {2}; + std::atomic m_committedProposalNumber = {0}; + + // TODO: ensure thread-safe + bcos::protocol::NodeType m_nodeType = bcos::protocol::NodeType::None; + bcos::protocol::NodeType m_notifiedNodeType = bcos::protocol::NodeType::None; + + std::function m_nodeTypeChanged; + + std::atomic_bool m_masterNode = {false}; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/BlockSyncFactory.cpp b/bcos-sync/bcos-sync/BlockSyncFactory.cpp new file mode 100644 index 0000000..b424388 --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSyncFactory.cpp @@ -0,0 +1,52 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create BlockSync + * @file BlockSyncFactory.cpp + * @author: yujiechen + * @date 2021-05-28 + */ +#include "BlockSyncFactory.h" +#include "protocol/PB/BlockSyncMsgFactoryImpl.h" + +using namespace bcos; +using namespace bcos::sync; + +BlockSyncFactory::BlockSyncFactory(bcos::crypto::PublicPtr _nodeId, + bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory, + bcos::ledger::LedgerInterface::Ptr _ledger, bcos::txpool::TxPoolInterface::Ptr _txpool, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::consensus::ConsensusInterface::Ptr _consensus, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : m_nodeId(_nodeId), + m_blockFactory(_blockFactory), + m_txResultFactory(_txResultFactory), + m_ledger(_ledger), + m_txpool(_txpool), + m_frontService(_frontService), + m_scheduler(_scheduler), + m_consensus(_consensus), + m_nodeTimeMaintenance(_nodeTimeMaintenance) +{} + +BlockSync::Ptr BlockSyncFactory::createBlockSync() +{ + auto msgFactory = std::make_shared(); + auto syncConfig = std::make_shared(m_nodeId, m_ledger, m_txpool, + m_blockFactory, m_txResultFactory, m_frontService, m_scheduler, m_consensus, msgFactory, m_nodeTimeMaintenance); + return std::make_shared(syncConfig); +} diff --git a/bcos-sync/bcos-sync/BlockSyncFactory.h b/bcos-sync/bcos-sync/BlockSyncFactory.h new file mode 100644 index 0000000..2b9b5b8 --- /dev/null +++ b/bcos-sync/bcos-sync/BlockSyncFactory.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create BlockSync + * @file BlockSyncFactory.h + * @author: yujiechen + * @date 2021-05-28 + */ +#pragma once +#include "bcos-sync/BlockSync.h" +#include "bcos-sync/BlockSyncConfig.h" +#include "bcos-tool/NodeTimeMaintenance.h" + +namespace bcos +{ +namespace sync +{ +class BlockSyncFactory +{ +public: + using Ptr = std::shared_ptr; + BlockSyncFactory(bcos::crypto::PublicPtr _nodeId, + bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory, + bcos::ledger::LedgerInterface::Ptr _ledger, bcos::txpool::TxPoolInterface::Ptr _txpool, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::consensus::ConsensusInterface::Ptr _consensus, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance); + virtual ~BlockSyncFactory() {} + + virtual BlockSync::Ptr createBlockSync(); + +protected: + bcos::crypto::PublicPtr m_nodeId; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + bcos::ledger::LedgerInterface::Ptr m_ledger; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::consensus::ConsensusInterface::Ptr m_consensus; + bcos::tool::NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/interfaces/BlockRequestInterface.h b/bcos-sync/bcos-sync/interfaces/BlockRequestInterface.h new file mode 100644 index 0000000..6129ff3 --- /dev/null +++ b/bcos-sync/bcos-sync/interfaces/BlockRequestInterface.h @@ -0,0 +1,39 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for block request packet + * @file BlockRequestInterface.h + * @author: yujiechen + * @date 2021-05-24 + */ + +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgInterface.h" +namespace bcos +{ +namespace sync +{ +class BlockRequestInterface : virtual public BlockSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + BlockRequestInterface() = default; + virtual ~BlockRequestInterface() {} + + virtual size_t size() const = 0; + virtual void setSize(size_t _size) = 0; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/interfaces/BlockSyncMsgFactory.h b/bcos-sync/bcos-sync/interfaces/BlockSyncMsgFactory.h new file mode 100644 index 0000000..bac9e14 --- /dev/null +++ b/bcos-sync/bcos-sync/interfaces/BlockSyncMsgFactory.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create block sync message + * @file BlockSyncMsgFactory.h + * @author: yujiechen + * @date 2021-05-23 + */ +#pragma once +#include "bcos-sync/interfaces/BlockRequestInterface.h" +#include "bcos-sync/interfaces/BlockSyncStatusInterface.h" +#include "bcos-sync/interfaces/BlocksMsgInterface.h" +#include "bcos-sync/utilities/Common.h" +namespace bcos +{ +namespace sync +{ +class BlockSyncMsgFactory +{ +public: + using Ptr = std::shared_ptr; + BlockSyncMsgFactory() = default; + virtual ~BlockSyncMsgFactory() {} + + virtual BlockSyncMsgInterface::Ptr createBlockSyncMsg(bytesConstRef _data) = 0; + virtual BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg(int32_t version = 0) = 0; + virtual BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg(bytesConstRef _data) = 0; + virtual BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg( + BlockSyncMsgInterface::Ptr _msg) = 0; + virtual BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg( + bcos::protocol::BlockNumber _number, bcos::crypto::HashType const& _hash, + bcos::crypto::HashType const& _gensisHash, int32_t _version = 0, + bcos::protocol::BlockNumber _archivedNumber = 0, int64_t const time = utcTime()) + { + auto statusMsg = createBlockSyncStatusMsg(_version); + statusMsg->setNumber(_number); + statusMsg->setHash(_hash); + statusMsg->setGenesisHash(_gensisHash); + statusMsg->setTime(time); + statusMsg->setArchivedNumber(_archivedNumber); + return statusMsg; + } + + virtual BlocksMsgInterface::Ptr createBlocksMsg() = 0; + virtual BlocksMsgInterface::Ptr createBlocksMsg(bytesConstRef _data) = 0; + virtual BlocksMsgInterface::Ptr createBlocksMsg(BlockSyncMsgInterface::Ptr _msg) = 0; + + virtual BlockRequestInterface::Ptr createBlockRequest() = 0; + virtual BlockRequestInterface::Ptr createBlockRequest(bytesConstRef _data) = 0; + virtual BlockRequestInterface::Ptr createBlockRequest(BlockSyncMsgInterface::Ptr _msg) = 0; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/interfaces/BlockSyncMsgInterface.h b/bcos-sync/bcos-sync/interfaces/BlockSyncMsgInterface.h new file mode 100644 index 0000000..90ffee7 --- /dev/null +++ b/bcos-sync/bcos-sync/interfaces/BlockSyncMsgInterface.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for the basic block syncMsg + * @file BlockSyncMsgInterface.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace sync +{ +class BlockSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + BlockSyncMsgInterface() = default; + virtual ~BlockSyncMsgInterface() = default; + + virtual bytesPointer encode() const = 0; + virtual void decode(bytesConstRef _data) = 0; + + virtual bcos::protocol::BlockNumber number() const = 0; + virtual int32_t packetType() const = 0; + virtual int32_t version() const = 0; + virtual bcos::protocol::BlockNumber archivedBlockNumber() const = 0; + + virtual void setNumber(bcos::protocol::BlockNumber _number) = 0; + virtual void setPacketType(int32_t packetType) = 0; + virtual void setVersion(int32_t _version) = 0; + virtual void setArchivedNumber(bcos::protocol::BlockNumber _number) = 0; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/interfaces/BlockSyncStatusInterface.h b/bcos-sync/bcos-sync/interfaces/BlockSyncStatusInterface.h new file mode 100644 index 0000000..da6bb27 --- /dev/null +++ b/bcos-sync/bcos-sync/interfaces/BlockSyncStatusInterface.h @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief status for the block sync + * @file BlockSyncStatueInterface.h + * @author: yujiechen + * @date 2021-05-23 + */ + +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgInterface.h" +#include +namespace bcos +{ +namespace sync +{ +class BlockSyncStatusInterface : virtual public BlockSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + BlockSyncStatusInterface() = default; + virtual ~BlockSyncStatusInterface() {} + + virtual bcos::crypto::HashType const& hash() const = 0; + virtual bcos::crypto::HashType const& genesisHash() const = 0; + virtual std::int64_t time() const = 0; + + virtual void setHash(bcos::crypto::HashType const& _hash) = 0; + virtual void setGenesisHash(bcos::crypto::HashType const& _gensisHash) = 0; + virtual void setTime(std::int64_t const time) = 0; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/interfaces/BlocksMsgInterface.h b/bcos-sync/bcos-sync/interfaces/BlocksMsgInterface.h new file mode 100644 index 0000000..69cf574 --- /dev/null +++ b/bcos-sync/bcos-sync/interfaces/BlocksMsgInterface.h @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for the message contains blockData + * @file BlocksMsgInterface.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgInterface.h" +namespace bcos +{ +namespace sync +{ +class BlocksMsgInterface : virtual public BlockSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + BlocksMsgInterface() = default; + virtual ~BlocksMsgInterface() {} + + virtual size_t blocksSize() const = 0; + virtual bytesConstRef blockData(size_t _index) const = 0; + + virtual void appendBlockData(bytes&& _blockData) = 0; + virtual void appendBlockData(bytes const& _blockData) = 0; +}; +using BlocksMsgList = std::vector; +using BlocksMsgListPtr = std::shared_ptr; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlockRequestImpl.h b/bcos-sync/bcos-sync/protocol/PB/BlockRequestImpl.h new file mode 100644 index 0000000..ec1e39f --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlockRequestImpl.h @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implementation for BlockRequestInterface + * @file BlockRequestImpl.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/interfaces/BlockRequestInterface.h" +#include "bcos-sync/protocol/PB/BlockSyncMsgImpl.h" +#include "bcos-sync/utilities/Common.h" +namespace bcos +{ +namespace sync +{ +class BlockRequestImpl : public BlockRequestInterface, public BlockSyncMsgImpl +{ +public: + BlockRequestImpl() : BlockSyncMsgImpl() + { + setPacketType(BlockSyncPacketType::BlockRequestPacket); + } + explicit BlockRequestImpl(BlockSyncMsgImpl::Ptr _blockSyncMsg) + : BlockRequestImpl(_blockSyncMsg->syncMessage()) + {} + + explicit BlockRequestImpl(bytesConstRef _data) : BlockRequestImpl() { decode(_data); } + ~BlockRequestImpl() override {} + + size_t size() const override { return m_syncMessage->size(); } + void setSize(size_t _size) override { m_syncMessage->set_size(_size); } + +protected: + explicit BlockRequestImpl(std::shared_ptr _syncMessage) + { + setPacketType(BlockSyncPacketType::BlockRequestPacket); + m_syncMessage = _syncMessage; + } +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgFactoryImpl.h b/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgFactoryImpl.h new file mode 100644 index 0000000..3750bb4 --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgFactoryImpl.h @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create block sync message + * @file BlockSyncMsgFactoryImpl.h + * @author: yujiechen + * @date 2021-05-23 + */ +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgFactory.h" +#include "bcos-sync/protocol/PB/BlockRequestImpl.h" +#include "bcos-sync/protocol/PB/BlockSyncStatusImpl.h" +#include "bcos-sync/protocol/PB/BlocksMsgImpl.h" +namespace bcos +{ +namespace sync +{ +class BlockSyncMsgFactoryImpl : public BlockSyncMsgFactory +{ +public: + BlockSyncMsgFactoryImpl() = default; + ~BlockSyncMsgFactoryImpl() override {} + + BlockSyncMsgInterface::Ptr createBlockSyncMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } + + BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg(int32_t version = 0) override + { + BlockSyncStatusInterface::Ptr status = std::make_shared(); + status->setVersion(version); + + return status; + } + + BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } + BlockSyncStatusInterface::Ptr createBlockSyncStatusMsg(BlockSyncMsgInterface::Ptr _msg) override + { + auto syncMsg = std::dynamic_pointer_cast(_msg); + return std::make_shared(syncMsg); + } + + BlocksMsgInterface::Ptr createBlocksMsg() override { return std::make_shared(); } + BlocksMsgInterface::Ptr createBlocksMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } + BlocksMsgInterface::Ptr createBlocksMsg(BlockSyncMsgInterface::Ptr _msg) override + { + auto syncMsg = std::dynamic_pointer_cast(_msg); + return std::make_shared(syncMsg); + } + + BlockRequestInterface::Ptr createBlockRequest() override + { + return std::make_shared(); + } + BlockRequestInterface::Ptr createBlockRequest(bytesConstRef _data) override + { + return std::make_shared(_data); + } + BlockRequestInterface::Ptr createBlockRequest(BlockSyncMsgInterface::Ptr _msg) override + { + auto syncMsg = std::dynamic_pointer_cast(_msg); + return std::make_shared(syncMsg); + } +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgImpl.h b/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgImpl.h new file mode 100644 index 0000000..2196759 --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlockSyncMsgImpl.h @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implement for BlockSyncMsgInterface + * @file BlockSyncMsgImpl.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/interfaces/BlockSyncMsgInterface.h" +#include "bcos-sync/protocol/proto/BlockSync.pb.h" +#include "bcos-sync/utilities/Common.h" +#include +namespace bcos +{ +namespace sync +{ +class BlockSyncMsgImpl : virtual public BlockSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + BlockSyncMsgImpl() : m_syncMessage(std::make_shared()) {} + explicit BlockSyncMsgImpl(bytesConstRef _data) : BlockSyncMsgImpl() { decode(_data); } + + ~BlockSyncMsgImpl() override {} + + bytesPointer encode() const override { return bcos::protocol::encodePBObject(m_syncMessage); } + void decode(bytesConstRef _data) override + { + bcos::protocol::decodePBObject(m_syncMessage, _data); + } + + int32_t version() const override { return m_syncMessage->version(); } + bcos::protocol::BlockNumber number() const override { return m_syncMessage->number(); } + int32_t packetType() const override { return m_syncMessage->packettype(); } + + void setVersion(int32_t _version) override { m_syncMessage->set_version(_version); } + void setNumber(bcos::protocol::BlockNumber _number) override + { + m_syncMessage->set_number(_number); + } + + bcos::protocol::BlockNumber archivedBlockNumber() const override + { + return m_syncMessage->archived_number(); + } + void setArchivedNumber(bcos::protocol::BlockNumber _number) override + { + m_syncMessage->set_archived_number(_number); + } + + void setPacketType(int32_t packetType) override { m_syncMessage->set_packettype(packetType); } + + std::shared_ptr syncMessage() { return m_syncMessage; } + +protected: + std::shared_ptr m_syncMessage; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.cpp b/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.cpp new file mode 100644 index 0000000..5db617d --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.cpp @@ -0,0 +1,64 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for the block sync status packet + * @file BlockSyncStatusImpl.cpp + * @author: yujiechen + * @date 2021-05-23 + */ +#include "BlockSyncStatusImpl.h" + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::protocol; +using namespace bcos::crypto; + +void BlockSyncStatusImpl::decode(bytesConstRef _data) +{ + BlockSyncMsgImpl::decode(_data); + deserializeObject(); +} + +void BlockSyncStatusImpl::deserializeObject() +{ + auto const& hashData = m_syncMessage->hash(); + if (hashData.size() >= HashType::SIZE) + { + m_hash = HashType((byte const*)hashData.data(), HashType::SIZE); + } + auto const& genesisHashData = m_syncMessage->genesishash(); + if (genesisHashData.size() >= HashType::SIZE) + { + m_genesisHash = HashType((byte const*)genesisHashData.data(), HashType::SIZE); + } + m_time = m_syncMessage->time(); +} +void BlockSyncStatusImpl::setHash(HashType const& _hash) +{ + m_hash = _hash; + m_syncMessage->set_hash(_hash.data(), HashType::SIZE); +} + +void BlockSyncStatusImpl::setGenesisHash(HashType const& _gensisHash) +{ + m_genesisHash = _gensisHash; + m_syncMessage->set_genesishash(_gensisHash.data(), HashType::SIZE); +} + +void BlockSyncStatusImpl::setTime(std::int64_t const time) +{ + m_time = time; + m_syncMessage->set_time(time); +} \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.h b/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.h new file mode 100644 index 0000000..857aa41 --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlockSyncStatusImpl.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for the block sync status packet + * @file BlockSyncStatusImpl.h + * @author: yujiechen + * @date 2021-05-23 + */ +#pragma once +#include "bcos-sync/interfaces/BlockSyncStatusInterface.h" +#include "bcos-sync/protocol/PB/BlockSyncMsgImpl.h" + +namespace bcos +{ +namespace sync +{ +class BlockSyncStatusImpl : public BlockSyncStatusInterface, public BlockSyncMsgImpl +{ +public: + using Ptr = std::shared_ptr; + BlockSyncStatusImpl() : BlockSyncMsgImpl() + { + setPacketType(BlockSyncPacketType::BlockStatusPacket); + } + explicit BlockSyncStatusImpl(BlockSyncMsgImpl::Ptr _blockSyncMsg) + { + setPacketType(BlockSyncPacketType::BlockStatusPacket); + m_syncMessage = _blockSyncMsg->syncMessage(); + deserializeObject(); + } + + explicit BlockSyncStatusImpl(bytesConstRef _data) : BlockSyncStatusImpl() { decode(_data); } + + ~BlockSyncStatusImpl() override {} + + void decode(bytesConstRef _data) override; + bcos::crypto::HashType const& hash() const override { return m_hash; } + bcos::crypto::HashType const& genesisHash() const override { return m_genesisHash; } + std::int64_t time() const override { return m_time; } + + void setHash(bcos::crypto::HashType const& _hash) override; + void setGenesisHash(bcos::crypto::HashType const& _gensisHash) override; + void setTime(std::int64_t const time) override; + +protected: + virtual void deserializeObject(); + +private: + bcos::crypto::HashType m_hash; + bcos::crypto::HashType m_genesisHash; + std::int64_t m_time; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/PB/BlocksMsgImpl.h b/bcos-sync/bcos-sync/protocol/PB/BlocksMsgImpl.h new file mode 100644 index 0000000..e3ed498 --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/PB/BlocksMsgImpl.h @@ -0,0 +1,75 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief PB implementation for BlocksMsgInterface + * @file BlocksMsgImpl.h + * @author: yujiechen + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/interfaces/BlocksMsgInterface.h" +#include "bcos-sync/protocol/PB/BlockSyncMsgImpl.h" +#include "bcos-sync/utilities/Common.h" +namespace bcos +{ +namespace sync +{ +class BlocksMsgImpl : public BlocksMsgInterface, public BlockSyncMsgImpl +{ +public: + using Ptr = std::shared_ptr; + BlocksMsgImpl() : BlockSyncMsgImpl() + { + setPacketType(BlockSyncPacketType::BlockResponsePacket); + } + explicit BlocksMsgImpl(BlockSyncMsgImpl::Ptr _blockSyncMsg) + : BlocksMsgImpl(_blockSyncMsg->syncMessage()) + {} + + explicit BlocksMsgImpl(bytesConstRef _data) : BlocksMsgImpl() { decode(_data); } + ~BlocksMsgImpl() override {} + + size_t blocksSize() const override { return m_syncMessage->blocksdata_size(); } + bytesConstRef blockData(size_t _index) const override + { + auto const& blockData = m_syncMessage->blocksdata(_index); + return bytesConstRef((byte const*)blockData.data(), blockData.size()); + } + + void appendBlockData(bytes&& _blockData) override + { + auto index = blocksSize(); + auto blockSize = _blockData.size(); + m_syncMessage->add_blocksdata(); + m_syncMessage->set_blocksdata(index, (std::move(_blockData)).data(), blockSize); + } + + void appendBlockData(bytes const& _blockData) override + { + auto index = blocksSize(); + auto blockSize = _blockData.size(); + m_syncMessage->add_blocksdata(); + m_syncMessage->set_blocksdata(index, _blockData.data(), blockSize); + } + +protected: + explicit BlocksMsgImpl(std::shared_ptr _syncMessage) + { + setPacketType(BlockSyncPacketType::BlockResponsePacket); + m_syncMessage = _syncMessage; + } +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/protocol/proto/BlockSync.proto b/bcos-sync/bcos-sync/protocol/proto/BlockSync.proto new file mode 100644 index 0000000..b805840 --- /dev/null +++ b/bcos-sync/bcos-sync/protocol/proto/BlockSync.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package bcos.sync; + +message BlockSyncMessage +{ + // the basic fields + int32 version = 1; + int32 packetType = 2; + int64 number = 3; + + // for sync status + bytes hash = 4; + bytes genesisHash = 5; + + // for blocks sync + int64 size = 6; + repeated bytes blocksData = 7; + + //for time sync + int64 time = 8; + int64 archived_number = 9; +} \ No newline at end of file diff --git a/bcos-sync/bcos-sync/state/DownloadRequestQueue.cpp b/bcos-sync/bcos-sync/state/DownloadRequestQueue.cpp new file mode 100644 index 0000000..dec8275 --- /dev/null +++ b/bcos-sync/bcos-sync/state/DownloadRequestQueue.cpp @@ -0,0 +1,88 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief queue to maintain the download request + * @file DownloadRequestQueue.cpp + * @author: jimmyshi + * @date 2021-05-24 + */ +#include "DownloadRequestQueue.h" +#include "bcos-sync/utilities/Common.h" + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::protocol; + +void DownloadRequestQueue::push(BlockNumber _fromNumber, size_t _size) +{ + UpgradableGuard l(x_reqQueue); + // Note: the requester must has retry logic + if (m_reqQueue.size() >= m_config->maxDownloadRequestQueueSize()) + { + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("Request") + << LOG_DESC("Drop request for reqQueue full") + << LOG_KV("reqQueueSize", m_reqQueue.size()) + << LOG_KV("fromNumber", _fromNumber) << LOG_KV("size", _size) + << LOG_KV("nodeId", m_config->nodeID()->shortHex()); + return; + } + UpgradeGuard ul(l); + m_reqQueue.push(std::make_shared(_fromNumber, _size)); + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("Request") + << LOG_DESC("Push request in reqQueue req") << LOG_KV("from", _fromNumber) + << LOG_KV("to", _fromNumber + _size - 1) + << LOG_KV("currentNumber", m_config->blockNumber()) + << LOG_KV("queueSize", m_reqQueue.size()) + << LOG_KV("peer", m_nodeId->shortHex()) + << LOG_KV("nodeId", m_config->nodeID()->shortHex()); +} + +DownloadRequest::Ptr DownloadRequestQueue::topAndPop() +{ + WriteGuard l(x_reqQueue); + if (m_reqQueue.empty()) + { + return nullptr; + } + // "Tops" means that the merge result of all tops can merge at one turn + // Example: + // top[x] (fromNumber, size) range merged range merged tops(fromNumber, size) + // top[0] (1, 3) [1, 4) [1, 4) (1, 3) + // top[1] (1, 4) [1, 5) [1, 5) (1, 4) + // top[2] (2, 1) [2, 3) [1, 5) (1, 4) + // top[3] (2, 4) [2, 6) [1, 6) (1, 5) + // top[4] (6, 2) [6, 8) [1, 8) (1, 7) + // top[5] (10, 2) [10, 12] can not merge into (1, 7) leave it for next turn + size_t fromNumber = m_reqQueue.top()->fromNumber(); + size_t size = 0; + while (!m_reqQueue.empty() && (fromNumber + size) >= (size_t)(m_reqQueue.top()->fromNumber())) + { + auto topReq = m_reqQueue.top(); + // m_queue is increasing by fromNumber, so fromNumber must no more than + // merged tops + size = std::max(size, (size_t)(topReq->fromNumber() + topReq->size() - fromNumber)); + m_reqQueue.pop(); + } + BLKSYNC_LOG(TRACE) << LOG_BADGE("Download") << LOG_BADGE("Request") + << LOG_DESC("Pop reqQueue top req") << LOG_KV("from", fromNumber) + << LOG_KV("to", fromNumber + size - 1); + return std::make_shared(fromNumber, size); +} + +bool DownloadRequestQueue::empty() +{ + ReadGuard l(x_reqQueue); + return m_reqQueue.empty(); +} diff --git a/bcos-sync/bcos-sync/state/DownloadRequestQueue.h b/bcos-sync/bcos-sync/state/DownloadRequestQueue.h new file mode 100644 index 0000000..f1fc6f2 --- /dev/null +++ b/bcos-sync/bcos-sync/state/DownloadRequestQueue.h @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief queue to maintain the download request + * @file DownloadRequestQueue.h + * @author: jimmyshi + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/BlockSyncConfig.h" +#include + +namespace bcos +{ +namespace sync +{ +class DownloadRequest +{ +public: + using Ptr = std::shared_ptr; + DownloadRequest(bcos::protocol::BlockNumber _fromNumber, size_t _size) + : m_fromNumber(_fromNumber), m_size(_size) + {} + + bcos::protocol::BlockNumber fromNumber() { return m_fromNumber; } + size_t size() { return m_size; } + +private: + bcos::protocol::BlockNumber m_fromNumber; + size_t m_size; +}; + +struct DownloadRequestCmp +{ + bool operator()(DownloadRequest::Ptr const& _first, DownloadRequest::Ptr const& _second) + { + if (_first->fromNumber() == _second->fromNumber()) + { + return _first->size() < _second->size(); + } + return _first->fromNumber() > _second->fromNumber(); + } +}; + +class DownloadRequestQueue +{ +public: + using Ptr = std::shared_ptr; + explicit DownloadRequestQueue(BlockSyncConfig::Ptr _config, bcos::crypto::NodeIDPtr _nodeId) + : m_config(_config), m_nodeId(_nodeId) + {} + virtual ~DownloadRequestQueue() {} + + virtual void push(bcos::protocol::BlockNumber _fromNumber, size_t _size); + virtual DownloadRequest::Ptr topAndPop(); // Must call use disablePush() before + virtual bool empty(); + +private: + BlockSyncConfig::Ptr m_config; + bcos::crypto::NodeIDPtr m_nodeId; + using RequestQueue = std::priority_queue, DownloadRequestCmp>; + RequestQueue m_reqQueue; + mutable SharedMutex x_reqQueue; +}; +} // namespace sync +} // namespace bcos diff --git a/bcos-sync/bcos-sync/state/DownloadingQueue.cpp b/bcos-sync/bcos-sync/state/DownloadingQueue.cpp new file mode 100644 index 0000000..caeaf20 --- /dev/null +++ b/bcos-sync/bcos-sync/state/DownloadingQueue.cpp @@ -0,0 +1,724 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief queue to store the downloading blocks + * @file DownloadingQueue.cpp + * @author: jimmyshi + * @date 2021-05-24 + */ +#include "DownloadingQueue.h" +#include "bcos-sync/utilities/Common.h" +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::sync; +using namespace bcos::ledger; + +void DownloadingQueue::push(BlocksMsgInterface::Ptr _blocksData) +{ + // push to the blockBuffer firstly + UpgradableGuard l(x_blockBuffer); + if (m_blockBuffer->size() >= m_config->maxDownloadingBlockQueueSize()) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("DownloadingBlockQueueBuffer is full") + << LOG_KV("queueSize", m_blockBuffer->size()); + return; + } + UpgradeGuard ul(l); + m_blockBuffer->emplace_back(_blocksData); +} + +bool DownloadingQueue::empty() +{ + ReadGuard l1(x_blockBuffer); + ReadGuard l2(x_blocks); + return (m_blocks.empty() && (!m_blockBuffer || m_blockBuffer->empty())); +} + +size_t DownloadingQueue::size() +{ + ReadGuard l1(x_blockBuffer); + ReadGuard l2(x_blocks); + size_t s = (!m_blockBuffer ? 0 : m_blockBuffer->size()) + m_blocks.size(); + return s; +} + +void DownloadingQueue::pop() +{ + WriteGuard l(x_blocks); + if (!m_blocks.empty()) + { + m_blocks.pop(); + } +} + +Block::Ptr DownloadingQueue::top(bool isFlushBuffer) +{ + if (isFlushBuffer) + { + flushBufferToQueue(); + } + ReadGuard l(x_blocks); + if (!m_blocks.empty()) + { + return m_blocks.top(); + } + return nullptr; +} + +void DownloadingQueue::clear() +{ + { + WriteGuard l(x_blockBuffer); + m_blockBuffer->clear(); + } + clearQueue(); +} + +void DownloadingQueue::clearQueue() +{ + WriteGuard l(x_blocks); + BlockQueue emptyQueue; + swap(m_blocks, emptyQueue); // Does memory leak here ? +} + +void DownloadingQueue::flushBufferToQueue() +{ + WriteGuard l(x_blockBuffer); + bool ret = true; + while (m_blockBuffer->size() > 0 && ret) + { + auto blocksShard = m_blockBuffer->front(); + m_blockBuffer->pop_front(); + ret = flushOneShard(blocksShard); + } +} + +bool DownloadingQueue::flushOneShard(BlocksMsgInterface::Ptr _blocksData) +{ + // pop buffer into queue + WriteGuard l(x_blocks); + if (m_blocks.size() >= m_config->maxDownloadingBlockQueueSize()) + { + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("DownloadingBlockQueueBuffer is full") + << LOG_KV("queueSize", m_blocks.size()); + + return false; + } + BLKSYNC_LOG(TRACE) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("Decoding block buffer") + << LOG_KV("blocksShardSize", _blocksData->blocksSize()); + size_t blocksSize = _blocksData->blocksSize(); + for (size_t i = 0; i < blocksSize; i++) + { + try + { + auto block = + m_config->blockFactory()->createBlock(_blocksData->blockData(i), true, true); + auto blockHeader = block->blockHeader(); + if (isNewerBlock(block)) + { + m_blocks.push(block); + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("Flush block to the queue") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("nodeId", m_config->nodeID()->shortHex()); + } + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("Invalid block data") + << LOG_KV("reason", boost::diagnostic_information(e)) + << LOG_KV("blockDataSize", _blocksData->blockData(i).size()); + continue; + } + } + if (m_blocks.size() == 0) + { + return true; + } + BLKSYNC_LOG(DEBUG) << LOG_BADGE("Download") << LOG_BADGE("BlockSync") + << LOG_DESC("Flush buffer to block queue") << LOG_KV("rcv", blocksSize) + << LOG_KV("top", m_blocks.top()->blockHeader()->number()) + << LOG_KV("downloadBlockQueue", m_blocks.size()) + << LOG_KV("nodeId", m_config->nodeID()->shortHex()); + return true; +} + +bool DownloadingQueue::isNewerBlock(Block::Ptr _block) +{ + // Note: must holder blockHeader here to ensure the life cycle of blockHeader + auto blockHeader = _block->blockHeader(); + if (blockHeader->number() <= m_config->blockNumber()) + { + return false; + } + return true; +} + +void DownloadingQueue::clearFullQueueIfNotHas(BlockNumber _blockNumber) +{ + bool needClear = false; + { + ReadGuard l(x_blocks); + if (m_blocks.size() == m_config->maxDownloadingBlockQueueSize() && + m_blocks.top()->blockHeader()->number() > _blockNumber) + { + needClear = true; + } + } + if (needClear) + { + clearQueue(); + } +} + +bool DownloadingQueue::verifyExecutedBlock( + bcos::protocol::Block::Ptr _block, bcos::protocol::BlockHeader::Ptr _blockHeader) +{ + // check blockHash(Note: since the ledger check the parentHash before commit, here no need to + // check the parentHash) + auto orgBlockHeader = _block->blockHeader(); + if (orgBlockHeader->hash() != _blockHeader->hash()) + { + BLKSYNC_LOG(ERROR) << LOG_DESC("verifyExecutedBlock failed for inconsistent hash") + << LOG_KV("orgHeader", printBlockHeader(orgBlockHeader)) << "\n" + << LOG_KV("executedHeader", printBlockHeader(_blockHeader)); + + return false; + } + return true; +} + +std::string DownloadingQueue::printBlockHeader(BlockHeader::Ptr _header) +{ + std::stringstream oss; + std::stringstream sealerListStr; + std::stringstream signatureListStr; + std::stringstream weightsStr; + + sealerListStr << "size: " << _header->sealerList().size(); + signatureListStr << "size: " << _header->signatureList().size(); + if (c_fileLogLevel <= TRACE) + { + auto sealerList = _header->sealerList(); + sealerListStr << ", sealer list: "; + for (auto const& sealer : sealerList) + { + sealerListStr << *toHexString(sealer) << ", "; + } + auto signatureList = _header->signatureList(); + signatureListStr << ", sign list: "; + for (auto const& signatureData : signatureList) + { + signatureListStr << (*toHexString(signatureData.signature)) << ":" + << signatureData.index << ", "; + } + } + auto weightList = _header->consensusWeights(); + for (auto const& weight : weightList) + { + weightsStr << weight << ", "; + } + + auto parentInfo = _header->parentInfo(); + std::stringstream parentInfoStr; + for (auto const& parent : parentInfo) + { + parentInfoStr << parent.blockNumber << ":" << parent.blockHash << ", "; + } + oss << LOG_KV("hash", _header->hash()) << LOG_KV("version", _header->version()) + << LOG_KV("txsRoot", _header->txsRoot()) << LOG_KV("receiptsRoot", _header->receiptsRoot()) + << LOG_KV("dbHash", _header->stateRoot()) << LOG_KV("number", _header->number()) + << LOG_KV("gasUsed", _header->gasUsed()) << LOG_KV("timestamp", _header->timestamp()) + << LOG_KV("sealer", _header->sealer()) << LOG_KV("sealerList", sealerListStr.str()) + << LOG_KV("signatureList", signatureListStr.str()) + << LOG_KV("consensusWeights", weightsStr.str()) << LOG_KV("parents", parentInfoStr.str()) + << LOG_KV("extraData", *toHexString(_header->extraData())); + return oss.str(); +} + + +void DownloadingQueue::applyBlock(Block::Ptr _block) +{ + auto blockHeader = _block->blockHeader(); + // check the block number + if (blockHeader->number() <= m_config->blockNumber()) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") + << LOG_BADGE("BlockSync: checkBlock before apply") + << LOG_DESC("Ignore illegal block") + << LOG_KV("reason", "number illegal") + << LOG_KV("thisNumber", blockHeader->number()) + << LOG_KV("currentNumber", m_config->blockNumber()); + m_config->setExecutedBlock(m_config->blockNumber()); + return; + } + if (blockHeader->number() <= m_config->executedBlock()) + { + return; + } + auto startT = utcTime(); + auto self = weak_from_this(); + m_config->scheduler()->executeBlock(_block, true, + [self, startT, _block]( + Error::Ptr&& _error, protocol::BlockHeader::Ptr&& _blockHeader, bool _sysBlock) { + auto orgBlockHeader = _block->blockHeader(); + try + { + auto downloadQueue = self.lock(); + if (!downloadQueue) + { + return; + } + auto config = downloadQueue->m_config; + // execute/verify exception + if (_error != nullptr) + { + // reset the executed number + BLKSYNC_LOG(WARNING) + << LOG_DESC("applyBlock: executing the downloaded block failed") + << LOG_KV("number", orgBlockHeader->number()) + << LOG_KV("hash", orgBlockHeader->hash().abridged()) + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMessage", _error->errorMessage()); + if (_error->errorCode() == bcos::scheduler::SchedulerError::InvalidBlocks) + { + BLKSYNC_LOG(INFO) + << LOG_DESC("fetchAndUpdateLedgerConfig for InvalidBlocks"); + downloadQueue->fetchAndUpdateLedgerConfig(); + return; + } + if (!config->masterNode()) + { + BLKSYNC_LOG(INFO) << LOG_DESC( + "applyBlock error: but do nothing for the node is not the master node"); + return; + } + { + // re-push the block into blockQueue to retry later + if (_block->blockHeader()->number() > config->blockNumber()) + { + BLKSYNC_LOG(INFO) + << LOG_DESC( + "applyBlock: executing the downloaded block failed, re-push " + "the block into executing queue") + << LOG_KV("number", orgBlockHeader->number()) + << LOG_KV("hash", orgBlockHeader->hash().abridged()); + WriteGuard l(downloadQueue->x_blocks); + downloadQueue->m_blocks.push(_block); + } + } + config->setExecutedBlock(config->blockNumber()); + return; + } + if (!downloadQueue->verifyExecutedBlock(_block, _blockHeader)) + { + config->setExecutedBlock(config->blockNumber()); + return; + } + auto executedBlock = config->executedBlock(); + if (orgBlockHeader->number() > executedBlock + 1) + { + { + WriteGuard lock(downloadQueue->x_blocks); + downloadQueue->m_blocks.push(_block); + } + BLKSYNC_LOG(WARNING) + << LOG_BADGE("Download") + << LOG_DESC("BlockSync: re-push the appliedBlock for discontinuous") + << LOG_KV("executedBlock", executedBlock) + << LOG_KV("nextBlock", downloadQueue->m_config->nextBlock()) + << LOG_KV("number", orgBlockHeader->number()) + << LOG_KV("hash", orgBlockHeader->hash().abridged()); + return; + } + // Note: continue to execute the next block only after sysBlock is submitted + if (!_sysBlock) + { + config->setExecutedBlock(orgBlockHeader->number()); + } + auto signature = orgBlockHeader->signatureList(); + BLKSYNC_LOG(INFO) << METRIC << LOG_BADGE("Download") + << LOG_DESC("BlockSync: applyBlock success") + << LOG_KV("number", orgBlockHeader->number()) + << LOG_KV("hash", orgBlockHeader->hash().abridged()) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("txsSize", _block->transactionsSize()) + << LOG_KV("nextBlock", downloadQueue->m_config->nextBlock()) + << LOG_KV( + "executedBlock", downloadQueue->m_config->executedBlock()) + << LOG_KV("timeCost", (utcTime() - startT)) + << LOG_KV("node", downloadQueue->m_config->nodeID()->shortHex()) + << LOG_KV("sysBlock", _sysBlock); + // verify and commit the block + downloadQueue->updateCommitQueue(_block); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("applyBlock exception") + << LOG_KV("number", orgBlockHeader->number()) + << LOG_KV("hash", orgBlockHeader->hash().abridged()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +bool DownloadingQueue::checkAndCommitBlock(bcos::protocol::Block::Ptr _block) +{ + auto blockHeader = _block->blockHeader(); + // check the block number + if (blockHeader->number() != m_config->nextBlock()) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("Download") << LOG_BADGE("BlockSync: checkBlock") + << LOG_DESC("Ignore illegal block") + << LOG_KV("reason", "number illegal") + << LOG_KV("thisNumber", blockHeader->number()) + << LOG_KV("currentNumber", m_config->blockNumber()); + m_config->setExecutedBlock(m_config->blockNumber()); + return false; + } + auto signature = blockHeader->signatureList(); + BLKSYNC_LOG(INFO) << LOG_BADGE("Download") << LOG_BADGE("checkAndCommitBlock") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("signatureSize", signature.size()) + << LOG_KV("currentNumber", m_config->blockNumber()) + << LOG_KV("hash", blockHeader->hash().abridged()); + + auto self = weak_from_this(); + m_config->consensus()->asyncCheckBlock(_block, [self, _block, blockHeader]( + Error::Ptr _error, bool _ret) { + try + { + auto downloadQueue = self.lock(); + if (!downloadQueue) + { + return; + } + if (_error) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("asyncCheckBlock error") + << LOG_KV("blockNumber", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + downloadQueue->m_config->setExecutedBlock(blockHeader->number() - 1); + return; + } + if (_ret) + { + BLKSYNC_LOG(INFO) << LOG_DESC("asyncCheckBlock success, try to commit the block") + << LOG_KV("blockNumber", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()); + downloadQueue->commitBlock(_block); + return; + } + downloadQueue->m_config->setExecutedBlock(blockHeader->number() - 1); + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncCheckBlock failed") + << LOG_KV("blockNumber", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("asyncCheckBlock exception") + << LOG_KV("blockNumber", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + return true; +} + +void DownloadingQueue::updateCommitQueue(Block::Ptr _block) +{ + { + WriteGuard l(x_commitQueue); + m_commitQueue.push(_block); + } + tryToCommitBlockToLedger(); +} + +void DownloadingQueue::tryToCommitBlockToLedger() +{ + WriteGuard l(x_commitQueue); + if (m_commitQueue.empty()) + { + return; + } + // remove expired block + while (!m_commitQueue.empty() && + m_commitQueue.top()->blockHeader()->number() <= m_config->blockNumber()) + { + m_commitQueue.pop(); + } + // try to commit the block + if (!m_commitQueue.empty() && + m_commitQueue.top()->blockHeader()->number() == m_config->nextBlock()) + { + auto block = m_commitQueue.top(); + m_commitQueue.pop(); + checkAndCommitBlock(block); + } +} + + +void DownloadingQueue::commitBlock(bcos::protocol::Block::Ptr _block) +{ + auto blockHeader = _block->blockHeader(); + BLKSYNC_LOG(INFO) << LOG_DESC("commitBlock") << LOG_KV("number", blockHeader->number()) + << LOG_KV("txsNum", _block->transactionsSize()) + << LOG_KV("hash", blockHeader->hash().abridged()); + // empty block + if (_block->transactionsSize() == 0) + { + BLKSYNC_LOG(INFO) << LOG_DESC("commitBlock: receive empty block, commitBlockState directly") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()); + commitBlockState(_block); + return; + } + // commit transaction firstly + auto startT = utcTime(); + auto self = weak_from_this(); + try + { + auto downloadingQueue = self.lock(); + if (!downloadingQueue) + { + return; + } + downloadingQueue->commitBlockState(_block); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("commitBlock exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +void DownloadingQueue::commitBlockState(bcos::protocol::Block::Ptr _block) +{ + auto blockHeader = _block->blockHeader(); + BLKSYNC_LOG(INFO) << LOG_DESC("commitBlockState") << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()); + auto startT = utcTime(); + auto self = weak_from_this(); + m_config->scheduler()->commitBlock(blockHeader, [self, startT, _block, blockHeader]( + Error::Ptr&& _error, + LedgerConfig::Ptr&& _ledgerConfig) { + try + { + auto downloadingQueue = self.lock(); + if (!downloadingQueue) + { + return; + } + if (_error != nullptr) + { + BLKSYNC_LOG(WARNING) + << LOG_DESC("commitBlockState failed") + << LOG_KV("executedBlock", downloadingQueue->m_config->executedBlock()) + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("message", _error->errorMessage()); + downloadingQueue->onCommitFailed(_error, _block); + return; + } + _ledgerConfig->setTxsSize(_block->transactionsSize()); + _ledgerConfig->setSealerId(blockHeader->sealer()); + // reset the blockNumber + _ledgerConfig->setBlockNumber(blockHeader->number()); + _ledgerConfig->setHash(blockHeader->hash()); + // notify the txpool the transaction result + // reset the config for the consensus and the blockSync module + // broadcast the status to all the peers + // clear the expired cache + downloadingQueue->finalizeBlock(_block, _ledgerConfig); + auto executedBlock = downloadingQueue->m_config->executedBlock(); + if (executedBlock < blockHeader->number()) + { + downloadingQueue->m_config->setExecutedBlock(blockHeader->number()); + } + BLKSYNC_LOG(INFO) << METRIC << LOG_DESC("commitBlockState success") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV( + "executedBlock", downloadingQueue->m_config->executedBlock()) + << LOG_KV("commitBlockTimeCost", (utcTime() - startT)) + << LOG_KV("node", downloadingQueue->m_config->nodeID()->shortHex()) + << LOG_KV("txsSize", _block->transactionsSize()) + << LOG_KV("sealer", blockHeader->sealer()); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("commitBlock exception") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + + +void DownloadingQueue::finalizeBlock(bcos::protocol::Block::Ptr, LedgerConfig::Ptr _ledgerConfig) +{ + if (m_newBlockHandler) + { + m_newBlockHandler(_ledgerConfig); + } + // try to commit the next block + tryToCommitBlockToLedger(); +} + +void DownloadingQueue::clearExpiredQueueCache() +{ + clearExpiredCache(m_blocks, x_blocks); + clearExpiredCache(m_commitQueue, x_commitQueue); +} + +void DownloadingQueue::clearExpiredCache(BlockQueue& _queue, SharedMutex& _lock) +{ + WriteGuard l(_lock); + while (!_queue.empty() && _queue.top()->blockHeader()->number() <= m_config->blockNumber()) + { + _queue.pop(); + } +} + +void DownloadingQueue::onCommitFailed( + bcos::Error::Ptr _error, bcos::protocol::Block::Ptr _failedBlock) +{ + auto blockHeader = _failedBlock->blockHeader(); + // case invalidBlocks + if (_error->errorCode() == bcos::scheduler::SchedulerError::InvalidBlocks) + { + BLKSYNC_LOG(WARNING) << LOG_DESC( + "onCommitFailed: the block has already been committed, return " + "directly") + << LOG_KV("executedBlock", m_config->executedBlock()) + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("message", _error->errorMessage()); + fetchAndUpdateLedgerConfig(); + return; + } + if (blockHeader->number() <= m_config->blockNumber()) + { + BLKSYNC_LOG(INFO) << LOG_DESC("onCommitFailed: drop the expired block") + << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("executedBlock", m_config->executedBlock()); + return; + } + BLKSYNC_LOG(INFO) << LOG_DESC("onCommitFailed") << LOG_KV("number", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("executedBlock", m_config->executedBlock()); + + // re-push failedBlock to commitQueue + { + WriteGuard l(x_commitQueue); + m_commitQueue.push(_failedBlock); + } + if (_error->errorCode() == bcos::scheduler::SchedulerError::BlockIsCommitting) + { + BLKSYNC_LOG(INFO) << LOG_DESC( + "onCommitFailed for BlockIsCommitting: re-push failed " + "block to commitQueue") + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("executedBlock", m_config->executedBlock()); + // retry after 20ms + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + tryToCommitBlockToLedger(); + return; + } + // fetchAndUpdateLedgerConfig in case of the blocks commit success while get-system-config + // failed + fetchAndUpdateLedgerConfig(); + m_config->setExecutedBlock(blockHeader->number() - 1); + auto topBlock = top(); + bcos::protocol::BlockNumber topNumber = std::numeric_limits::max(); + if (topBlock) + { + topNumber = topBlock->blockHeader()->number(); + } + size_t rePushedBlockCount = 0; + { + // re-push un-committed block into m_blocks + // Note: this operation is low performance and low frequency + WriteGuard l(x_commitQueue); + WriteGuard lock(x_blocks); + if (m_commitQueue.empty()) + { + return; + } + // Note: since the applied block will be re-pushed into m_commitQueue again, no-need to + // write-back the poped block into commitQueue here + while (!m_commitQueue.empty()) + { + auto topBlock = m_commitQueue.top(); + if (topBlock->blockHeader()->number() >= topNumber) + { + break; + } + rePushedBlockCount++; + m_blocks.push(topBlock); + m_commitQueue.pop(); + } + } + auto blocksTop = m_blocks.top(); + BLKSYNC_LOG(INFO) << LOG_DESC("onCommitFailed: update commitQueue and executingQueue") + << LOG_KV("commitQueueSize", m_commitQueue.size()) + << LOG_KV("blocksQueueSize", m_blocks.size()) + << LOG_KV("topNumber", topNumber) + << LOG_KV("topBlock", blocksTop ? (blocksTop->blockHeader()->number()) : -1) + << LOG_KV("rePushedBlockCount", rePushedBlockCount) + << LOG_KV("executedBlock", m_config->executedBlock()); +} + +void DownloadingQueue::fetchAndUpdateLedgerConfig() +{ + try + { + BLKSYNC_LOG(INFO) << LOG_DESC("fetchAndUpdateLedgerConfig"); + m_ledgerFetcher->fetchBlockNumberAndHash(); + m_ledgerFetcher->fetchConsensusNodeList(); + // Note: must fetchObserverNode here to notify the latest sealerList and observerList to + // txpool + m_ledgerFetcher->fetchObserverNodeList(); + m_ledgerFetcher->fetchBlockTxCountLimit(); + m_ledgerFetcher->fetchConsensusLeaderPeriod(); + m_ledgerFetcher->fetchCompatibilityVersion(); + auto ledgerConfig = m_ledgerFetcher->ledgerConfig(); + BLKSYNC_LOG(INFO) << LOG_DESC("fetchAndUpdateLedgerConfig success") + << LOG_KV("blockNumber", ledgerConfig->blockNumber()) + << LOG_KV("hash", ledgerConfig->hash().abridged()) + << LOG_KV("maxTxsPerBlock", ledgerConfig->blockTxCountLimit()) + << LOG_KV("consensusNodeList", ledgerConfig->consensusNodeList().size()); + m_config->resetConfig(ledgerConfig); + } + catch (std::exception const& e) + { + BLKSYNC_LOG(WARNING) << LOG_DESC("fetchAndUpdateLedgerConfig exception") + << LOG_KV("msg", boost::diagnostic_information(e)); + } +} \ No newline at end of file diff --git a/bcos-sync/bcos-sync/state/DownloadingQueue.h b/bcos-sync/bcos-sync/state/DownloadingQueue.h new file mode 100644 index 0000000..8b9d97d --- /dev/null +++ b/bcos-sync/bcos-sync/state/DownloadingQueue.h @@ -0,0 +1,133 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief queue to store the downloading blocks + * @file DownloadingQueue.h + * @author: jimmyshi + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/BlockSyncConfig.h" +#include "bcos-sync/interfaces/BlocksMsgInterface.h" +#include +#include +#include +namespace bcos +{ +namespace sync +{ +// increase order +struct BlockCmp +{ + bool operator()( + bcos::protocol::Block::Ptr const& _first, bcos::protocol::Block::Ptr const& _second) const + { + // increase order + return _first->blockHeader()->number() > _second->blockHeader()->number(); + } +}; +using BlockQueue = + std::priority_queue; +class DownloadingQueue : public std::enable_shared_from_this +{ +public: + using BlocksMessageQueue = std::list; + using BlocksMessageQueuePtr = std::shared_ptr; + + using Ptr = std::shared_ptr; + explicit DownloadingQueue(BlockSyncConfig::Ptr _config) + : m_config(_config), m_blockBuffer(std::make_shared()) + { + m_ledgerFetcher = std::make_shared(m_config->ledger()); + } + virtual ~DownloadingQueue() {} + + virtual void push(BlocksMsgInterface::Ptr _blocksData); + // Is the queue empty? + virtual bool empty(); + + // get the total size of th block queue + virtual size_t size(); + + // pop the top unit of the block queue + virtual void pop(); + + // get the top unit of the block queue + bcos::protocol::Block::Ptr top(bool isFlushBuffer = false); + + virtual void clearFullQueueIfNotHas(bcos::protocol::BlockNumber _blockNumber); + + virtual void applyBlock(bcos::protocol::Block::Ptr _block); + // clear queue and buffer + virtual void clear(); + + virtual void registerNewBlockHandler( + std::function _newBlockHandler) + { + m_newBlockHandler = _newBlockHandler; + } + + // flush m_buffer into queue + virtual void flushBufferToQueue(); + virtual void clearExpiredQueueCache(); + virtual void tryToCommitBlockToLedger(); + virtual size_t commitQueueSize() + { + ReadGuard l(x_commitQueue); + return m_commitQueue.size(); + } + + virtual void onCommitFailed(bcos::Error::Ptr _error, bcos::protocol::Block::Ptr _failedBlock); + +protected: + // clear queue + virtual void clearQueue(); + virtual void clearExpiredCache(BlockQueue& _queue, SharedMutex& _lock); + virtual bool flushOneShard(BlocksMsgInterface::Ptr _blocksData); + virtual bool isNewerBlock(bcos::protocol::Block::Ptr _block); + + virtual void commitBlock(bcos::protocol::Block::Ptr _block); + virtual void commitBlockState(bcos::protocol::Block::Ptr _block); + + virtual bool checkAndCommitBlock(bcos::protocol::Block::Ptr _block); + virtual void updateCommitQueue(bcos::protocol::Block::Ptr _block); + + virtual void finalizeBlock( + bcos::protocol::Block::Ptr _block, bcos::ledger::LedgerConfig::Ptr _ledgerConfig); + virtual bool verifyExecutedBlock( + bcos::protocol::Block::Ptr _block, bcos::protocol::BlockHeader::Ptr _blockHeader); + +private: + // Note: this function should not be called frequently + std::string printBlockHeader(bcos::protocol::BlockHeader::Ptr _header); + void fetchAndUpdateLedgerConfig(); + +private: + BlockSyncConfig::Ptr m_config; + BlockQueue m_blocks; + mutable SharedMutex x_blocks; + + BlocksMessageQueuePtr m_blockBuffer; + mutable SharedMutex x_blockBuffer; + + BlockQueue m_commitQueue; + mutable SharedMutex x_commitQueue; + + std::function m_newBlockHandler; + + std::shared_ptr m_ledgerFetcher; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/state/SyncPeerStatus.cpp b/bcos-sync/bcos-sync/state/SyncPeerStatus.cpp new file mode 100644 index 0000000..7b29097 --- /dev/null +++ b/bcos-sync/bcos-sync/state/SyncPeerStatus.cpp @@ -0,0 +1,222 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief matain the sync status + * @file SyncPeerStatus.cpp + * @author: jimmyshi + * @date 2021-05-24 + */ +#include "SyncPeerStatus.h" + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::protocol; + +PeerStatus::PeerStatus(BlockSyncConfig::Ptr _config, PublicPtr _nodeId, BlockNumber _number, + HashType const& _hash, HashType const& _gensisHash) + : m_nodeId(_nodeId), + m_number(_number), + m_hash(_hash), + m_genesisHash(_gensisHash), + m_downloadRequests(std::make_shared(_config, m_nodeId)) +{} + +PeerStatus::PeerStatus(BlockSyncConfig::Ptr _config, PublicPtr _nodeId) + : PeerStatus(_config, _nodeId, 0, HashType(), HashType()) +{} + +PeerStatus::PeerStatus( + BlockSyncConfig::Ptr _config, PublicPtr _nodeId, BlockSyncStatusInterface::ConstPtr _status) + : PeerStatus(_config, _nodeId, _status->number(), _status->hash(), _status->genesisHash()) +{} + +bool PeerStatus::update(BlockSyncStatusInterface::ConstPtr _status) +{ + UpgradableGuard l(x_mutex); + if (m_hash == _status->hash() && _status->number() == m_number && + m_archivedNumber == _status->archivedBlockNumber()) + { + return false; + } + if (m_genesisHash != HashType() && _status->genesisHash() != m_genesisHash) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("Status") + << LOG_DESC( + "Receive invalid status packet with different genesis hash") + << LOG_KV("peer", m_nodeId->shortHex()) + << LOG_KV("genesisHash", _status->genesisHash().abridged()) + << LOG_KV("storedGenesisHash", m_genesisHash.abridged()); + return false; + } + UpgradeGuard ul(l); + m_number = _status->number(); + m_archivedNumber = _status->archivedBlockNumber(); + m_hash = _status->hash(); + if (m_genesisHash == HashType()) + { + m_genesisHash = _status->genesisHash(); + } + BLKSYNC_LOG(DEBUG) << LOG_DESC("updatePeerStatus") << LOG_KV("peer", m_nodeId->shortHex()) + << LOG_KV("number", _status->number()) + << LOG_KV("hash", _status->hash().abridged()) + << LOG_KV("genesisHash", _status->genesisHash().abridged()); + return true; +} + +bool SyncPeerStatus::hasPeer(PublicPtr _peer) +{ + ReadGuard l(x_peersStatus); + return m_peersStatus.count(_peer); +} + +PeerStatus::Ptr SyncPeerStatus::peerStatus(bcos::crypto::PublicPtr _peer) +{ + ReadGuard l(x_peersStatus); + if (!m_peersStatus.count(_peer)) + { + return nullptr; + } + return m_peersStatus[_peer]; +} + +PeerStatus::Ptr SyncPeerStatus::insertEmptyPeer(PublicPtr _peer) +{ + WriteGuard l(x_peersStatus); + // create and insert the new peer status + auto peerStatus = std::make_shared(m_config, _peer); + m_peersStatus.insert(std::make_pair(_peer, peerStatus)); + return peerStatus; +} + +bool SyncPeerStatus::updatePeerStatus( + PublicPtr _peer, BlockSyncStatusInterface::ConstPtr _peerStatus) +{ + WriteGuard l(x_peersStatus); + // check the status + if (_peerStatus->genesisHash() != m_config->genesisHash()) + { + BLKSYNC_LOG(WARNING) << LOG_BADGE("updatePeerStatus") + << LOG_DESC( + "Receive invalid status packet with different genesis hash") + << LOG_KV("peer", _peer->shortHex()) + << LOG_KV("genesisHash", _peerStatus->genesisHash().abridged()) + << LOG_KV("expectedGenesisHash", m_config->genesisHash().abridged()); + return false; + } + // update the existed peer status + if (m_peersStatus.count(_peer)) + { + auto status = m_peersStatus[_peer]; + if (status->update(_peerStatus)) + { + updateKnownMaxBlockInfo(_peerStatus); + } + return true; + } + // create and insert the new peer status + auto peerStatus = std::make_shared(m_config, _peer, _peerStatus); + m_peersStatus.insert(std::make_pair(_peer, peerStatus)); + BLKSYNC_LOG(DEBUG) << LOG_DESC("updatePeerStatus: new peer") + << LOG_KV("peer", _peer->shortHex()) + << LOG_KV("number", _peerStatus->number()) + << LOG_KV("hash", _peerStatus->hash().abridged()) + << LOG_KV("genesisHash", _peerStatus->genesisHash().abridged()) + << LOG_KV("node", m_config->nodeID()->shortHex()); + updateKnownMaxBlockInfo(_peerStatus); + return true; +} + +void SyncPeerStatus::updateKnownMaxBlockInfo(BlockSyncStatusInterface::ConstPtr _peerStatus) +{ + if (_peerStatus->genesisHash() != m_config->genesisHash()) + { + return; + } + if (_peerStatus->number() <= m_config->knownHighestNumber()) + { + return; + } + m_config->setKnownHighestNumber(_peerStatus->number()); + m_config->setKnownLatestHash(_peerStatus->hash()); +} + +void SyncPeerStatus::deletePeer(PublicPtr _peer) +{ + WriteGuard l(x_peersStatus); + auto peer = m_peersStatus.find(_peer); + if (peer != m_peersStatus.end()) + { + m_peersStatus.erase(peer); + } +} + +void SyncPeerStatus::foreachPeerRandom(std::function const& _f) const +{ + ReadGuard l(x_peersStatus); + if (m_peersStatus.empty()) + { + return; + } + + // Get nodeid list + NodeIDs nodeIds; + for (const auto& peer : m_peersStatus) + { + nodeIds.emplace_back(peer.first); + } + + // Random nodeid list + for (size_t i = nodeIds.size() - 1; i > 0; --i) + { + size_t select = rand() % (i + 1); + swap(nodeIds[i], nodeIds[select]); + } + + // access _f() according to the random list + for (const auto& nodeId : nodeIds) + { + auto const& peer = m_peersStatus.find(nodeId); + if (peer == m_peersStatus.end()) + { + continue; + } + if (peer->second && !_f(peer->second)) + { + break; + } + } +} + +void SyncPeerStatus::foreachPeer(std::function const& _f) const +{ + ReadGuard l(x_peersStatus); + for (auto peer : m_peersStatus) + { + if (peer.second && !_f(peer.second)) + { + break; + } + } +} + +std::shared_ptr SyncPeerStatus::peers() +{ + auto nodeIds = std::make_shared(); + ReadGuard l(x_peersStatus); + for (auto& peer : m_peersStatus) + nodeIds->emplace_back(peer.first); + return nodeIds; +} \ No newline at end of file diff --git a/bcos-sync/bcos-sync/state/SyncPeerStatus.h b/bcos-sync/bcos-sync/state/SyncPeerStatus.h new file mode 100644 index 0000000..993e1be --- /dev/null +++ b/bcos-sync/bcos-sync/state/SyncPeerStatus.h @@ -0,0 +1,113 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief matain the sync status + * @file SyncPeerStatus.h + * @author: jimmyshi + * @date 2021-05-24 + */ +#pragma once +#include "bcos-sync/BlockSyncConfig.h" +#include "bcos-sync/interfaces/BlockSyncStatusInterface.h" +#include "bcos-sync/state/DownloadRequestQueue.h" +#include "bcos-sync/utilities/Common.h" +namespace bcos +{ +namespace sync +{ +class PeerStatus +{ +public: + using Ptr = std::shared_ptr; + PeerStatus(BlockSyncConfig::Ptr _config, bcos::crypto::PublicPtr _nodeId, + bcos::protocol::BlockNumber _number, bcos::crypto::HashType const& _hash, + bcos::crypto::HashType const& _gensisHash); + PeerStatus(BlockSyncConfig::Ptr _config, bcos::crypto::PublicPtr _nodeId); + + PeerStatus(BlockSyncConfig::Ptr _config, bcos::crypto::PublicPtr _nodeId, + BlockSyncStatusInterface::ConstPtr _status); + + virtual ~PeerStatus() {} + + virtual bool update(BlockSyncStatusInterface::ConstPtr _status); + + bcos::crypto::PublicPtr nodeId() { return m_nodeId; } + + bcos::protocol::BlockNumber number() const + { + ReadGuard l(x_mutex); + return m_number; + } + + bcos::protocol::BlockNumber archivedBlockNumber() const + { + ReadGuard l(x_mutex); + return m_archivedNumber; + } + + bcos::crypto::HashType const& hash() const + { + ReadGuard l(x_mutex); + return m_hash; + } + + bcos::crypto::HashType const& genesisHash() const + { + ReadGuard l(x_mutex); + return m_genesisHash; + } + + DownloadRequestQueue::Ptr downloadRequests() { return m_downloadRequests; } + +private: + bcos::crypto::PublicPtr m_nodeId; + bcos::protocol::BlockNumber m_number; + bcos::protocol::BlockNumber m_archivedNumber; + bcos::crypto::HashType m_hash; + bcos::crypto::HashType m_genesisHash; + + mutable SharedMutex x_mutex; + DownloadRequestQueue::Ptr m_downloadRequests; +}; + +class SyncPeerStatus +{ +public: + using Ptr = std::shared_ptr; + explicit SyncPeerStatus(BlockSyncConfig::Ptr _config) : m_config(_config) {} + virtual ~SyncPeerStatus() {} + + virtual bool hasPeer(bcos::crypto::PublicPtr _peer); + virtual PeerStatus::Ptr peerStatus(bcos::crypto::PublicPtr _peer); + virtual bool updatePeerStatus( + bcos::crypto::PublicPtr _peer, BlockSyncStatusInterface::ConstPtr _peerStatus); + virtual void deletePeer(bcos::crypto::PublicPtr _peer); + + void foreachPeerRandom(std::function const& _f) const; + void foreachPeer(std::function const& _f) const; + std::shared_ptr peers(); + PeerStatus::Ptr insertEmptyPeer(bcos::crypto::PublicPtr _peer); + +protected: + virtual void updateKnownMaxBlockInfo(BlockSyncStatusInterface::ConstPtr _peerStatus); + +private: + std::map m_peersStatus; + mutable SharedMutex x_peersStatus; + + BlockSyncConfig::Ptr m_config; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/bcos-sync/utilities/Common.h b/bcos-sync/bcos-sync/utilities/Common.h new file mode 100644 index 0000000..5271091 --- /dev/null +++ b/bcos-sync/bcos-sync/utilities/Common.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Common files for block sync + * @file Common.h + * @author: yujiechen + * @date 2021-05-23 + */ +#pragma once +#include +#include + +#define BLKSYNC_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("BLOCK SYNC") +namespace bcos +{ +namespace sync +{ +enum BlockSyncPacketType : int32_t +{ + BlockStatusPacket = 0x00, + BlockRequestPacket = 0x01, + BlockResponsePacket = 0x02, +}; +enum SyncState : int32_t +{ + Idle = 0x00, //< Initial chain sync complete. Waiting for new packets + Downloading = 0x01, //< Downloading blocks +}; +enum class BlockSyncMsgVersion +{ + v0, + v1, + // v2 add archived number + v2 +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/test/CMakeLists.txt b/bcos-sync/test/CMakeLists.txt new file mode 100644 index 0000000..c28647b --- /dev/null +++ b/bcos-sync/test/CMakeLists.txt @@ -0,0 +1,30 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-sync +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-sync) +find_package(Protobuf REQUIRED) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ../src ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} PUBLIC ${PBPROTOCOL_TARGET} ${SYNC_TARGET} ${CRYPTO_TARGET} ${TARS_PROTOCOL_TARGET} protobuf::libprotobuf Boost::unit_test_framework) +add_test(NAME test-sync WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) diff --git a/bcos-sync/test/unittests/faker/FakeConsensus.h b/bcos-sync/test/unittests/faker/FakeConsensus.h new file mode 100644 index 0000000..2495b3b --- /dev/null +++ b/bcos-sync/test/unittests/faker/FakeConsensus.h @@ -0,0 +1,94 @@ +/** + * Copyright (C) 2021 bcos-sync. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief consensus faker + * @file FakeConsensus.h + * @author: yujiechen + * @date 2021-06-08 + */ +#pragma once +#include +#include +#include +using namespace bcos; +using namespace bcos::consensus; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::ledger; + +namespace bcos +{ +namespace test +{ +class FakeConsensus : public ConsensusInterface +{ +public: + using Ptr = std::shared_ptr; + FakeConsensus() { m_taskPool = std::make_shared("task", 1); } + ~FakeConsensus() override {} + + + void start() override {} + void stop() override {} + + // useless for bcos-sync + void asyncSubmitProposal( + bool, bytesConstRef, BlockNumber, HashType const&, std::function) override + {} + + // useless for bcos-sync + void asyncGetPBFTView(std::function) override {} + + // the sync module calls this interface to check block + void asyncCheckBlock(Block::Ptr, std::function _onVerifyFinish) override + { + m_taskPool->enqueue( + [_onVerifyFinish, this]() { _onVerifyFinish(nullptr, m_checkBlockResult); }); + } + + // the sync module calls this interface to notify new block + void asyncNotifyNewBlock( + LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) override + { + m_ledgerConfig = _ledgerConfig; + m_taskPool->enqueue([_onRecv]() { _onRecv(nullptr); }); + } + + // useless for the sync module + void asyncNotifyConsensusMessage(bcos::Error::Ptr, std::string const&, NodeIDPtr, bytesConstRef, + std::function) override + {} + + bool checkBlockResult() const { return m_checkBlockResult; } + void setCheckBlockResult(bool _checkBlockResult) { m_checkBlockResult = _checkBlockResult; } + + LedgerConfig::Ptr ledgerConfig() { return m_ledgerConfig; } + + void notifyHighestSyncingNumber(bcos::protocol::BlockNumber) override {} + + void asyncNoteUnSealedTxsSize(uint64_t, std::function) override {} + + void asyncGetConsensusStatus(std::function) override {} + void notifyConnectedNodes( + bcos::crypto::NodeIDSet const&, std::function) override + {} + +private: + std::atomic_bool m_checkBlockResult = {true}; + LedgerConfig::Ptr m_ledgerConfig; + ThreadPool::Ptr m_taskPool; +}; +} // namespace test +} // namespace bcos diff --git a/bcos-sync/test/unittests/main/main.cpp b/bcos-sync/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-sync/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-sync/test/unittests/protocol/BlockSyncMsgTest.cpp b/bcos-sync/test/unittests/protocol/BlockSyncMsgTest.cpp new file mode 100644 index 0000000..332070f --- /dev/null +++ b/bcos-sync/test/unittests/protocol/BlockSyncMsgTest.cpp @@ -0,0 +1,160 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit test for the BlockSyncMsg + * @file BlockSyncMsgTest.cpp + * @author: yujiechen + * @date 2021-06-08 + */ +#include "bcos-sync/protocol/PB/BlockSyncMsgFactoryImpl.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::protocol; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(BlockSyncMsgTest, TestPromptFixture) +inline void checkBasic(BlockSyncMsgInterface::Ptr _syncMsg, int32_t _packetType, + BlockNumber _blockNumber, int32_t _version) +{ + auto factory = std::make_shared(); + auto encodedData = _syncMsg->encode(); + auto decodedBasicMsg = factory->createBlockSyncMsg(ref(*encodedData)); + BOOST_CHECK(_syncMsg->version() == decodedBasicMsg->version()); + BOOST_CHECK(_syncMsg->packetType() == decodedBasicMsg->packetType()); + BOOST_CHECK(_syncMsg->number() == decodedBasicMsg->number()); + + BOOST_CHECK(decodedBasicMsg->version() == _version); + BOOST_CHECK(decodedBasicMsg->packetType() == _packetType); + BOOST_CHECK(decodedBasicMsg->number() == _blockNumber); +} +inline BlockSyncMsgInterface::Ptr testSyncMsg(int32_t _packetType, BlockNumber _blockNumber, + int32_t _version, HashType const& _hash, HashType const& _genesisHash, size_t _size, + std::vector _blockData) +{ + auto factory = std::make_shared(); + BlockSyncMsgInterface::Ptr syncMsg = nullptr; + switch (_packetType) + { + case BlockSyncPacketType::BlockStatusPacket: + { + auto statusMsg = factory->createBlockSyncStatusMsg(); + statusMsg->setHash(_hash); + statusMsg->setGenesisHash(_genesisHash); + syncMsg = statusMsg; + break; + } + case BlockSyncPacketType::BlockRequestPacket: + { + auto requestMsg = factory->createBlockRequest(); + requestMsg->setSize(_size); + syncMsg = requestMsg; + break; + } + case BlockSyncPacketType::BlockResponsePacket: + { + auto responseMsg = factory->createBlocksMsg(); + for (auto const& data : _blockData) + { + responseMsg->appendBlockData(data); + } + syncMsg = responseMsg; + break; + } + default: + { + return nullptr; + } + } + syncMsg->setPacketType(_packetType); + syncMsg->setNumber(_blockNumber); + syncMsg->setVersion(_version); + + // check basic + checkBasic(syncMsg, _packetType, _blockNumber, _version); + auto encodedData = syncMsg->encode(); + auto decodedBasicMsg = factory->createBlockSyncMsg(ref(*encodedData)); + + // check different packet + switch (_packetType) + { + case BlockSyncPacketType::BlockStatusPacket: + { + auto statusMsg = factory->createBlockSyncStatusMsg(decodedBasicMsg); + BOOST_CHECK(statusMsg->hash().asBytes() == _hash.asBytes()); + BOOST_CHECK(statusMsg->genesisHash().asBytes() == _genesisHash.asBytes()); + break; + } + case BlockSyncPacketType::BlockRequestPacket: + { + auto requestMsg = factory->createBlockRequest(decodedBasicMsg); + BOOST_CHECK(requestMsg->size() == _size); + break; + } + case BlockSyncPacketType::BlockResponsePacket: + { + auto responseMsg = factory->createBlocksMsg(decodedBasicMsg); + BOOST_CHECK(responseMsg->blocksSize() == _blockData.size()); + size_t i = 0; + for (auto const& data : _blockData) + { + auto decodedData = responseMsg->blockData(i++); + BOOST_CHECK(data == decodedData.toBytes()); + } + break; + } + default: + { + return nullptr; + } + } + return syncMsg; +} + +BOOST_AUTO_TEST_CASE(testBlockSyncMsg) +{ + BlockNumber blockNumber = 123214; + int32_t version = 10; + auto hashImpl = std::make_shared(); + HashType hash = hashImpl->hash(std::string("hash")); + HashType genesisHash = hashImpl->hash(std::string("genesisHash")); + size_t requestedSize = 1203; + std::vector blockData; + size_t blockDataSize = 5; + for (size_t i = 0; i < blockDataSize; i++) + { + std::string data = "blockData" + std::to_string(i); + blockData.push_back(bytes(data.begin(), data.end())); + } + testSyncMsg(BlockSyncPacketType::BlockStatusPacket, blockNumber, version, hash, genesisHash, + requestedSize, blockData); + + testSyncMsg(BlockSyncPacketType::BlockRequestPacket, blockNumber, version, hash, genesisHash, + requestedSize, blockData); + + testSyncMsg(BlockSyncPacketType::BlockResponsePacket, blockNumber, version, hash, genesisHash, + requestedSize, blockData); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/test/unittests/sync/BlockSyncTest.cpp b/bcos-sync/test/unittests/sync/BlockSyncTest.cpp new file mode 100644 index 0000000..7a1d6a8 --- /dev/null +++ b/bcos-sync/test/unittests/sync/BlockSyncTest.cpp @@ -0,0 +1,214 @@ +/** + * Copyright (C) 2021 bcos-sync. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for the BlockSync + * @file BlockSyncTest.h + * @author: yujiechen + * @date 2021-06-08 + */ + +#include +#include + +#include "SyncFixture.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(BlockSyncTest, TestPromptFixture) +void testRequestAndDownloadBlock(CryptoSuite::Ptr _cryptoSuite) +{ + auto gateWay = std::make_shared(); + BlockNumber maxBlock = 10; + auto newerPeer = std::make_shared(_cryptoSuite, gateWay, (maxBlock + 1)); + auto ledgerData = newerPeer->ledger()->ledgerData(); + auto latestHash = (ledgerData[newerPeer->ledger()->blockNumber()])->blockHeader()->hash(); + + BlockNumber minBlock = 5; + auto lowerPeer = std::make_shared(_cryptoSuite, gateWay, (minBlock + 1)); + std::vector nodeList; + nodeList.push_back(newerPeer->nodeID()); + nodeList.push_back(lowerPeer->nodeID()); + newerPeer->setObservers(nodeList); + lowerPeer->setObservers(nodeList); + + newerPeer->init(); + lowerPeer->init(); + + // maintainPeersConnection + newerPeer->sync()->executeWorker(); + lowerPeer->sync()->executeWorker(); + while (!newerPeer->sync()->syncStatus()->hasPeer(lowerPeer->nodeID()) || + !lowerPeer->sync()->syncStatus()->hasPeer(newerPeer->nodeID())) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + BOOST_CHECK(newerPeer->syncConfig()->knownHighestNumber() == maxBlock); + BOOST_CHECK(lowerPeer->syncConfig()->knownHighestNumber() == maxBlock); + BOOST_CHECK(lowerPeer->syncConfig()->knownLatestHash().asBytes() == latestHash.asBytes()); + BOOST_CHECK(newerPeer->syncConfig()->knownLatestHash().asBytes() == latestHash.asBytes()); + // check request/response blocks + while (lowerPeer->ledger()->blockNumber() != maxBlock) + { + newerPeer->sync()->executeWorker(); + lowerPeer->sync()->executeWorker(); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + BOOST_CHECK(newerPeer->consensus()->ledgerConfig()->blockNumber() == maxBlock); + BOOST_CHECK(lowerPeer->consensus()->ledgerConfig()->blockNumber() == maxBlock); +} + +bool checkPeer(std::vector const& _peerList, size_t _expectedPeerSize) +{ + for (auto peer : _peerList) + { + if (peer->sync()->syncStatus()->peers()->size() < _expectedPeerSize) + { + return false; + } + } + return true; +} + +bool downloadFinish( + std::vector const& _peerList, BlockNumber _expectedBlockNumber) +{ + for (auto peer : _peerList) + { + if (peer->ledger()->blockNumber() != _expectedBlockNumber) + { + return false; + } + } + return true; +} + +void testComplicatedCase(CryptoSuite::Ptr _cryptoSuite) +{ + auto gateWay = std::make_shared(); + std::vector syncPeerList; + std::vector nodeList; + + BlockNumber maxBlockNumber = 50; + size_t maxBlockNumberPeerSize = 2; + + BlockNumber medianBlockNumber = 20; + size_t medianBlockNumberPeerSize = 2; + + BlockNumber minBlockNumber = 10; + size_t minBlockNumberPeerSize = 3; + + for (size_t i = 0; i < maxBlockNumberPeerSize; i++) + { + auto faker = std::make_shared(_cryptoSuite, gateWay, maxBlockNumber + 1); + nodeList.push_back(faker->nodeID()); + syncPeerList.push_back(faker); + } + for (size_t i = 0; i < medianBlockNumberPeerSize; i++) + { + auto faker = std::make_shared(_cryptoSuite, gateWay, medianBlockNumber + 1); + nodeList.push_back(faker->nodeID()); + syncPeerList.push_back(faker); + } + + for (size_t i = 0; i < minBlockNumberPeerSize; i++) + { + auto faker = std::make_shared(_cryptoSuite, gateWay, minBlockNumber + 1); + nodeList.push_back(faker->nodeID()); + syncPeerList.push_back(faker); + } + std::vector sealers; + sealers.push_back(_cryptoSuite->signatureImpl()->generateKeyPair()->publicKey()->data()); + // with different genesis hash with others + auto invalidFaker = std::make_shared(_cryptoSuite, gateWay, 0, sealers); + nodeList.push_back(invalidFaker->nodeID()); + invalidFaker->setObservers(nodeList); + invalidFaker->init(); + for (auto faker : syncPeerList) + { + faker->setObservers(nodeList); + faker->init(); + } + // maintainPeersConnection + for (auto faker : syncPeerList) + { + faker->sync()->executeWorker(); + } + invalidFaker->sync()->executeWorker(); + + size_t peerSize = maxBlockNumberPeerSize + medianBlockNumberPeerSize + minBlockNumberPeerSize; + // check peers + auto startT = utcTime(); + while (!checkPeer(syncPeerList, peerSize) && (utcTime() - startT <= 60 * 1000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + auto ledgerData = (syncPeerList[0])->ledger()->ledgerData(); + auto latestBlock = ledgerData[(syncPeerList[0])->ledger()->blockNumber()]; + auto genesisBlock = ledgerData[0]; + // check the maxKnownBlockNumber + for (auto faker : syncPeerList) + { + auto genesisBlockHeader = genesisBlock->blockHeader(); + auto latestBlockHeader = latestBlock->blockHeader(); + BOOST_CHECK(faker->syncConfig()->genesisHash() == genesisBlockHeader->hash()); + BOOST_CHECK(faker->syncConfig()->knownLatestHash() == latestBlockHeader->hash()); + BOOST_CHECK(faker->syncConfig()->knownHighestNumber() == maxBlockNumber); + } + auto invalidLedgerData = invalidFaker->ledger()->ledgerData(); + auto invalidLatestBlock = invalidLedgerData[invalidFaker->ledger()->blockNumber()]; + auto invalidGenesisBlock = invalidLedgerData[0]; + BOOST_CHECK(invalidFaker->sync()->syncStatus()->peers()->size() == 1); + auto invalidGenesisBlockHeader = invalidGenesisBlock->blockHeader(); + BOOST_CHECK(invalidFaker->syncConfig()->genesisHash() == invalidGenesisBlockHeader->hash()); + auto invalidLatestBlockHeader = invalidLatestBlock->blockHeader(); + BOOST_CHECK(invalidFaker->syncConfig()->knownLatestHash() == invalidLatestBlockHeader->hash()); + BOOST_CHECK(invalidFaker->syncConfig()->knownHighestNumber() == 0); + + // wait the nodes to sync blocks + startT = utcTime(); + while (!downloadFinish(syncPeerList, maxBlockNumber) && (utcTime() - startT <= 60 * 1000)) + { + for (auto faker : syncPeerList) + { + faker->sync()->executeWorker(); + } + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } +} + + +BOOST_AUTO_TEST_CASE(testNonSMRequestAndDownloadBlock) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testRequestAndDownloadBlock(cryptoSuite); + testComplicatedCase(cryptoSuite); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-sync/test/unittests/sync/SyncConfigTest.cpp b/bcos-sync/test/unittests/sync/SyncConfigTest.cpp new file mode 100644 index 0000000..395bf55 --- /dev/null +++ b/bcos-sync/test/unittests/sync/SyncConfigTest.cpp @@ -0,0 +1,83 @@ +/** + * Copyright (C) 2021 bcos-sync. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for the syncConfig + * @file SyncConfigTest.h + * @author: yujiechen + * @date 2021-06-08 + */ + +#include +#include + +#include "SyncFixture.h" +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(SyncConfigTest, TestPromptFixture) + +void testSyncConfig(CryptoSuite::Ptr _cryptoSuite) +{ + auto gateWay = std::make_shared(); + auto faker = std::make_shared(_cryptoSuite, gateWay); + faker->init(); + // check the config + auto config = faker->syncConfig(); + BOOST_CHECK(config->ledger()); + BOOST_CHECK(config->nodeID()->data() == faker->nodeID()->data()); + BOOST_CHECK(config->blockFactory()); + BOOST_CHECK(config->frontService()); + BOOST_CHECK(config->scheduler()); + BOOST_CHECK(config->consensus()); + BOOST_CHECK(config->msgFactory()); + + auto ledgerData = faker->ledger()->ledgerData(); + auto genesisBlock = (ledgerData[0]); + auto genesisBlockHeader = genesisBlock->blockHeader(); + BOOST_CHECK(config->genesisHash().asBytes() == genesisBlockHeader->hash().asBytes()); + BOOST_CHECK(config->blockNumber() == faker->ledger()->blockNumber()); + BOOST_CHECK(config->nextBlock() == faker->ledger()->blockNumber() + 1); + BOOST_CHECK(config->hash().asBytes() == faker->ledger()->ledgerConfig()->hash().asBytes()); +} + +BOOST_AUTO_TEST_CASE(testNonSMSyncConfig) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testSyncConfig(cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testSMSyncConfig) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testSyncConfig(cryptoSuite); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-sync/test/unittests/sync/SyncFixture.h b/bcos-sync/test/unittests/sync/SyncFixture.h new file mode 100644 index 0000000..90d7598 --- /dev/null +++ b/bcos-sync/test/unittests/sync/SyncFixture.h @@ -0,0 +1,178 @@ +/** + * Copyright (C) 2021 bcos-sync. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fixture for the BlockSync + * @file SyncFixture.h + * @author: yujiechen + * @date 2021-06-08 + */ +#pragma once +#include "../faker/FakeConsensus.h" +#include "bcos-sync/BlockSync.h" +#include "bcos-sync/BlockSyncFactory.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::protocol; +using namespace bcos::scheduler; +using namespace bcos::tool; + +namespace bcos +{ +namespace test +{ +class FakeBlockSync : public BlockSync +{ +public: + using Ptr = std::shared_ptr; + FakeBlockSync(BlockSyncConfig::Ptr _config, unsigned _idleWaitMs = 200) + : BlockSync(_config, _idleWaitMs) + { + m_running = true; + enableAsMaster(true); + } + ~FakeBlockSync() override {} + + void executeWorker() override { BlockSync::executeWorker(); } + void maintainPeersConnection() override { BlockSync::maintainPeersConnection(); } + SyncPeerStatus::Ptr syncStatus() { return m_syncStatus; } +}; + +class FakeTxPoolForSync : public FakeTxPool +{ +public: + FakeTxPoolForSync() = default; + void asyncNotifyBlockResult(BlockNumber, TransactionSubmitResultsPtr, + std::function _callback) override + { + if (_callback) + { + _callback(nullptr); + } + } +}; + +class FakeBlockSyncFactory : public BlockSyncFactory +{ +public: + using Ptr = std::shared_ptr; + FakeBlockSyncFactory(PublicPtr _nodeId, BlockFactory::Ptr _blockFactory, + LedgerInterface::Ptr _ledger, FrontServiceInterface::Ptr _frontService, + SchedulerInterface::Ptr _dispatcher, ConsensusInterface::Ptr _consensus, + NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : BlockSyncFactory(_nodeId, _blockFactory, + std::make_shared(), _ledger, + std::make_shared(), _frontService, _dispatcher, _consensus, + _nodeTimeMaintenance) + {} + + BlockSync::Ptr createBlockSync() override + { + auto sync = BlockSyncFactory::createBlockSync(); + return std::make_shared(sync->config()); + } +}; + +class SyncFixture +{ +public: + using Ptr = std::shared_ptr; + SyncFixture(CryptoSuite::Ptr _cryptoSuite, FakeGateWay::Ptr _fakeGateWay, + size_t _blockNumber = 0, std::vector _sealerList = std::vector()) + : m_cryptoSuite(_cryptoSuite), m_gateWay(_fakeGateWay) + { + m_keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + m_blockFactory = createBlockFactory(_cryptoSuite); + m_ledger = std::make_shared(m_blockFactory, _blockNumber, 10, 0, _sealerList); + m_frontService = std::make_shared(m_keyPair->publicKey()); + m_consensus = std::make_shared(); + m_nodeTimeMaintenance = std::make_shared(); + + // create FakeScheduler + m_scheduler = std::make_shared(m_ledger, m_blockFactory); + auto blockSyncFactory = + std::make_shared(m_keyPair->publicKey(), m_blockFactory, m_ledger, + m_frontService, m_scheduler, m_consensus, m_nodeTimeMaintenance); + m_sync = std::dynamic_pointer_cast(blockSyncFactory->createBlockSync()); + if (_fakeGateWay) + { + _fakeGateWay->addSync(m_keyPair->publicKey(), m_sync); + } + m_frontService->setGateWay(_fakeGateWay); + } + + FakeFrontService::Ptr frontService() { return m_frontService; } + FakeScheduler::Ptr scheduler() { return m_scheduler; } + FakeConsensus::Ptr consensus() { return m_consensus; } + FakeLedger::Ptr ledger() { return m_ledger; } + + FakeGateWay::Ptr gateWay() { return m_gateWay; } + PublicPtr nodeID() { return m_keyPair->publicKey(); } + + FakeBlockSync::Ptr sync() { return m_sync; } + + void appendObserver(NodeIDPtr _nodeId) + { + auto node = std::make_shared(_nodeId); + m_ledger->ledgerConfig()->mutableObserverList()->emplace_back(node); + m_sync->config()->setObserverList(m_ledger->ledgerConfig()->observerNodeList()); + } + + void setObservers(std::vector _nodeIdList) + { + m_ledger->ledgerConfig()->mutableObserverList()->clear(); + for (auto const& node : _nodeIdList) + { + m_ledger->ledgerConfig()->mutableObserverList()->emplace_back( + std::make_shared(node)); + } + m_sync->config()->setObserverList(m_ledger->ledgerConfig()->observerNodeList()); + bcos::crypto::NodeIDSet nodeIdSet; + for (auto node : m_ledger->ledgerConfig()->observerNodeList()) + { + nodeIdSet.insert(node->nodeID()); + } + m_sync->config()->setConnectedNodeList(nodeIdSet); + m_frontService->setNodeIDList(m_sync->config()->connectedNodeList()); + } + + void init() { m_sync->init(); } + + BlockSyncConfig::Ptr syncConfig() { return m_sync->config(); } + +private: + CryptoSuite::Ptr m_cryptoSuite; + KeyPairInterface::Ptr m_keyPair; + BlockFactory::Ptr m_blockFactory; + FakeGateWay::Ptr m_gateWay; + + FakeFrontService::Ptr m_frontService; + FakeConsensus::Ptr m_consensus; + FakeLedger::Ptr m_ledger; + + FakeScheduler::Ptr m_scheduler; + FakeBlockSync::Ptr m_sync; + NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; +}; +} // namespace test +} // namespace bcos diff --git a/bcos-table/CMakeLists.txt b/bcos-table/CMakeLists.txt new file mode 100644 index 0000000..82931e1 --- /dev/null +++ b/bcos-table/CMakeLists.txt @@ -0,0 +1,44 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for libtable +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 libtable +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) + +project(bcos-table VERSION ${VERSION}) + +file(GLOB_RECURSE SRCS src/*.cpp) + +find_package(Boost REQUIRED serialization) +find_package(TBB CONFIG REQUIRED) + +add_library(${TABLE_TARGET} ${SRCS}) +target_link_libraries(${TABLE_TARGET} PUBLIC ${UTILITIES_TARGET} bcos-framework Boost::serialization TBB::tbb) + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("table-coverage" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () + +include(GNUInstallDirs) +install(TARGETS ${TABLE_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") diff --git a/bcos-table/src/CacheStorageFactory.cpp b/bcos-table/src/CacheStorageFactory.cpp new file mode 100644 index 0000000..415bb20 --- /dev/null +++ b/bcos-table/src/CacheStorageFactory.cpp @@ -0,0 +1,13 @@ +#include "CacheStorageFactory.h" +#include "StateStorage.h" + +using namespace bcos::storage; + +MergeableStorageInterface::Ptr CacheStorageFactory::build() +{ + auto cache = std::make_shared(m_backendStorage); + cache->setMaxCapacity(m_cacheSize); + BCOS_LOG(INFO) << "Build CacheStorage: enableLRUCacheStorage, size: " << m_cacheSize; + + return cache; +} diff --git a/bcos-table/src/CacheStorageFactory.h b/bcos-table/src/CacheStorageFactory.h new file mode 100644 index 0000000..c90e5d9 --- /dev/null +++ b/bcos-table/src/CacheStorageFactory.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file CacheStorageFactory.h + * @author: jimmyshi + * @date: 2022-10-20 + */ +#pragma once + +#include "bcos-framework/storage/StorageInterface.h" + +namespace bcos::storage +{ +class CacheStorageFactory +{ +public: + using Ptr = std::shared_ptr; + CacheStorageFactory( + bcos::storage::TransactionalStorageInterface::Ptr backendStorage, ssize_t cacheSize) + : m_cacheSize(cacheSize), m_backendStorage(backendStorage) + {} + + virtual ~CacheStorageFactory() = default; + storage::MergeableStorageInterface::Ptr build(); + +private: + ssize_t m_cacheSize; + bcos::storage::TransactionalStorageInterface::Ptr m_backendStorage; +}; + +} // namespace bcos::storage \ No newline at end of file diff --git a/bcos-table/src/KeyPageStorage.cpp b/bcos-table/src/KeyPageStorage.cpp new file mode 100644 index 0000000..b0b0f0b --- /dev/null +++ b/bcos-table/src/KeyPageStorage.cpp @@ -0,0 +1,1048 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief KeyPage implementation + * @file KeyPageStorage.cpp + * @author: xingqiangbai + * @date: 2022-04-19 + */ +#include "KeyPageStorage.h" +#include +#include +#include + +namespace bcos::storage +{ +void KeyPageStorage::asyncGetPrimaryKeys(std::string_view tableView, + const std::optional& _condition, + std::function)> _callback) +{ + // if SYS_TABLES is not supported + if (m_ignoreTables->find(tableView) != m_ignoreTables->end()) + { + _callback(BCOS_ERROR_UNIQUE_PTR(StorageError::ReadError, + std::string("scan ").append(tableView).append(" is not supported")), + std::vector()); + return; + } + if (!_condition) + { + _callback(BCOS_ERROR_UNIQUE_PTR( + StorageError::ReadError, "asyncGetPrimaryKeys must have condition"), + std::vector()); + return; + } + // page + auto [error, data] = getData(tableView, TABLE_META_KEY); + if (error) + { + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(StorageError::ReadError, + std::string("get table meta data failed, table:").append(tableView), *error), + std::vector()); + return; + } + std::vector ret; + auto* meta = &std::get<1>(data.value()->data); + auto readLock = meta->rLock(); + auto& pageInfo = meta->getAllPageInfoNoLock(); + auto [offset, total] = _condition->getLimit(); + ret.reserve(total); + size_t validCount = 0; + for (auto& info : pageInfo) + { + auto [error, data] = getData(tableView, info.getPageKey(), info.getCount() > 0); + boost::ignore_unused(error); + assert(!error); + auto* page = &std::get<0>(data.value()->data); + auto [entries, pageLock] = page->getEntries(); + boost::ignore_unused(pageLock); + for (auto& it : entries) + { + if (it.second.status() != Entry::DELETED && _condition->isValid(it.first)) + { + if (validCount >= offset && validCount < offset + total) + { + ret.emplace_back(it.first); + } + ++validCount; + if (validCount == offset + total) + { + break; + } + } + } + } + readLock.unlock(); + _callback(nullptr, std::move(ret)); +} +// TODO: add interface and cow to avoid page copy +void KeyPageStorage::asyncGetRow(std::string_view tableView, std::string_view keyView, + std::function)> _callback) +{ + if (!m_readOnly) + { + m_readLength += keyView.size(); + } + // if sys table, read cache and read from prev, return + if (m_ignoreTables->find(tableView) != m_ignoreTables->end()) + { + auto [error, entry] = getSysTableRawEntry(tableView, keyView); + if (error) + { + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + StorageError::ReadError, "Get row from storage failed!", *error), + {}); + return; + } + if (entry) + { // add cache, found + if (!m_readOnly) + { + m_readLength += entry->size(); + } + _callback(nullptr, std::move(*entry)); + } + else + { // not found + _callback(nullptr, std::nullopt); + } + return; + } + + auto [error, entry] = getEntryFromPage(tableView, keyView); + if (!m_readOnly && entry.has_value()) + { + m_readLength += entry->size(); + } + _callback(std::move(error), std::move(entry)); +} + +void KeyPageStorage::asyncGetRows(std::string_view tableView, + RANGES::any_view + keys, + std::function>)> _callback) +{ + std::vector> results(keys.size()); + + if (m_ignoreTables->find(tableView) != m_ignoreTables->end()) + { + Error::UniquePtr err; + for (auto i = 0U; i < keys.size(); ++i) + { + auto [error, entry] = getSysTableRawEntry(tableView, keys[i]); + if (error) + { + err = BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + StorageError::ReadError, "get s_tables rows failed!", *error); + break; + } + results[i] = std::make_optional(std::move(*entry)); + } + _callback(std::move(err), std::move(results)); + } + else + { // page + Error::UniquePtr err(nullptr); + // TODO: because of page and lock, maybe not parallel is better + for (auto i = 0U; i < keys.size(); ++i) + { + asyncGetRow(tableView, keys[i], + [i, &results, &err](Error::UniquePtr _error, std::optional _entry) { + if (_error) + { + err = BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + StorageError::ReadError, "get rows failed!", *_error); + return; + } + results[i] = std::move(_entry); + }); + if (err) + { + break; + } + } + _callback(std::move(err), std::move(results)); + } +} + +void KeyPageStorage::asyncSetRow(std::string_view tableView, std::string_view keyView, Entry entry, + std::function callback) +{ // delete is the same process as insert + if (m_readOnly) + { + callback( + BCOS_ERROR_UNIQUE_PTR(StorageError::ReadOnly, "Try to operate a read-only storage")); + return; + } + m_writeLength += keyView.size(); + m_writeLength += entry.size(); + // if sys table, write cache and write to prev, return + if (m_ignoreTables->find(tableView) != m_ignoreTables->end()) + { + std::optional entryOld; + + auto [bucket, lock] = getMutBucket(tableView, keyView); + boost::ignore_unused(lock); + // entry.setStatus(Entry::Status::MODIFIED); + auto it = + bucket->container.find(std::make_pair(std::string(tableView), std::string(keyView))); + if (it != bucket->container.end()) + { // update + auto& existsEntry = it->second->entry; + entryOld.emplace(std::move(existsEntry)); + + it->second->entry = std::move(entry); + } + else + { // insert + auto tableKey = std::make_pair(std::string(tableView), std::string(keyView)); + bucket->container.emplace(std::make_pair(std::move(tableKey), + std::make_shared(std::string(tableView), std::string(keyView), + std::move(entry), Data::Type::NormalEntry))); + } + + if (m_recoder.local()) + { + m_recoder.local()->log( + Recoder::Change(std::string(tableView), std::string(keyView), std::move(entryOld))); + } + lock.unlock(); + callback(nullptr); + } + else + { + auto error = setEntryToPage(std::string(tableView), std::string(keyView), std::move(entry)); + callback(std::move(error)); + } +} + +void KeyPageStorage::parallelTraverse(bool onlyDirty, + std::function + callback) const +{ + tbb::parallel_for(tbb::blocked_range(0, m_buckets.size(), 32), + [this, &onlyDirty, &callback](const tbb::blocked_range& range) { + for (auto i = range.begin(); i != range.end(); ++i) + { + const auto& bucket = m_buckets[i]; + + for (const auto& it : bucket.container) + { + if (it.second->type == Data::Type::TableMeta) + { // if metadata + if (!onlyDirty || it.second->entry.dirty()) + { + auto* meta = &std::get<1>(it.second->data); + auto readLock = meta->rLock(); + Entry entry; + entry.setObject(*meta); + readLock.unlock(); + if (!m_readOnly) + { + if (meta->size() <= 10) + { // FIXME: this log is only for debug, comment it when release + KeyPage_LOG(DEBUG) + << LOG_DESC("TableMeta") << LOG_KV("table", it.first.first) + << LOG_KV("key", toHex(it.first.second)) + << LOG_KV("meta", *meta); + } + KeyPage_LOG(DEBUG) + << LOG_DESC("Traverse TableMeta") + << LOG_KV("table", it.first.first) + << LOG_KV("pageCount", meta->size()) + << LOG_KV("rowCount", meta->rowCount()) + << LOG_KV("size", entry.size()) + << LOG_KV("payloadRate", + sizeof(PageInfo) * meta->size() / (double)entry.size()) + << LOG_KV("predictHit", meta->hitRate()); + } + callback(it.first.first, it.first.second, entry); + } + } + else if (it.second->type == Data::Type::Page) + { // if page, encode and return + auto* page = &std::get<0>(it.second->data); + if (!onlyDirty || it.second->entry.dirty()) + { + Entry entry; + if (page->validCount() == 0) + { + if (!m_readOnly) + { + KeyPage_LOG(DEBUG) << LOG_DESC("Traverse deleted Page") + << LOG_KV("table", it.first.first) + << LOG_KV("key", toHex(it.first.second)) + << LOG_KV("validCount", page->validCount()); + } + entry.setStatus(Entry::Status::DELETED); + callback(it.first.first, it.first.second, entry); + } + else + { + entry.setObject(*page); + entry.setStatus(it.second->entry.status()); + if (!m_readOnly) + { + KeyPage_LOG(DEBUG) + << LOG_DESC("Traverse Page") + << LOG_KV("table", it.first.first) + << LOG_KV("pageKey", toHex(it.first.second)) + << LOG_KV("valid", page->validCount()) + << LOG_KV("count", page->count()) + << LOG_KV("status", (int)it.second->entry.status()) + << LOG_KV("pageSize", page->size()) + << LOG_KV("size", entry.size()); + } + if (it.first.second != page->endKey()) + { + KeyPage_LOG(FATAL) + << LOG_DESC("Traverse Page pageKey not equal to map key") + << LOG_KV("table", it.first.first) + << LOG_KV("pageKey", page->endKey()) + << LOG_KV("mapKey", it.first.second); + } + callback(it.first.first, it.first.second, entry); + } + auto invalidKeys = page->invalidKeySet(); + for (const auto& k : invalidKeys) + { + if (!m_readOnly) + { + KeyPage_LOG(DEBUG) + << LOG_DESC("Traverse Page delete invalid key") + << LOG_KV("currentKey", toHex(page->endKey())) + << LOG_KV("table", it.first.first) + << LOG_KV("key", toHex(k)); + } + Entry e; + e.setStatus(Entry::Status::DELETED); + callback(it.first.first, k, e); + } + } + } + else + { + if (!onlyDirty || it.second->entry.dirty()) + { + auto& entry = it.second->entry; + // assert(it.first.first == SYS_TABLES); + callback(it.first.first, it.first.second, entry); + } + } + } + } + }); +} + +auto KeyPageStorage::hash(const bcos::crypto::Hash::Ptr& hashImpl) const -> crypto::HashType +{ + bcos::crypto::HashType pagesHash(0); + bcos::crypto::HashType entriesHash(0); + std::atomic_int64_t pageCount = 0; + std::atomic_int64_t entrycount = 0; + std::vector allData; + for (size_t i = 0; i < m_buckets.size(); ++i) + { + const auto& bucket = m_buckets[i]; + for (const auto& it : bucket.container) + { + allData.push_back(it.second.get()); + } + } + std::mutex mutex; + tbb::parallel_for(tbb::blocked_range(0, allData.size()), + [&](const tbb::blocked_range& range) { + bcos::crypto::HashType localPagesHash; + bcos::crypto::HashType localEntriesHash; + for (size_t i = range.begin(); i != range.end(); ++i) + { + const auto* data = allData[i]; + const auto& entry = data->entry; + if (entry.dirty() && data->type != Data::Type::TableMeta) + { + if (data->type == Data::Type::Page) + { + const auto* page = &std::get<0>(data->data); + auto pageHash = page->hash(data->table, hashImpl, m_blockVersion); + localPagesHash ^= pageHash; + ++pageCount; + } + else + { // sys table + auto hash = hashImpl->hash(data->table); + hash ^= hashImpl->hash(data->key); + hash ^= entry.hash(data->table, data->key, hashImpl, m_blockVersion); + localEntriesHash ^= hash; + ++entrycount; + } + } + } + std::lock_guard lock(mutex); + pagesHash ^= localPagesHash; + entriesHash ^= localEntriesHash; + }); + bcos::crypto::HashType totalHash(0); + totalHash ^= pagesHash; + totalHash ^= entriesHash; + KeyPage_LOG(INFO) << LOG_DESC("hash") << LOG_KV("size", allData.size()) + << LOG_KV("readLength", m_readLength) << LOG_KV("writeLength", m_writeLength) + << LOG_KV("pageCount", pageCount) << LOG_KV("entrycount", entrycount) + << LOG_KV("entriesHash", entriesHash.hex()) + << LOG_KV("pagesHash", pagesHash.hex()) + << LOG_KV("totalHash", totalHash.hex()); + return totalHash; +} + +void KeyPageStorage::rollback(const Recoder& recoder) +{ + if (m_readOnly) + { + return; + } + + for (const auto& change : recoder) + { + if (m_ignoreTables->find(change.table) != m_ignoreTables->end()) + { + auto [bucket, lock] = getMutBucket(change.table, change.key); + boost::ignore_unused(lock); + + auto it = bucket->container.find(std::make_pair(change.table, change.key)); + if (change.entry) + { + if (it != bucket->container.end()) + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert exists: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + const auto& rollbackEntry = change.entry; + it->second->entry = *rollbackEntry; + } + else + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert deleted: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + auto tableKey = std::make_pair(change.table, change.key); + bucket->container.emplace(std::make_pair( + std::move(tableKey), std::make_shared(change.table, change.key, + *(change.entry), Data::Type::NormalEntry))); + } + } + else + { // nullopt means the key is not exist in m_cache + if (it != bucket->container.end()) + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert insert: " << change.table << " | " << toHex(change.key); + } + bucket->container.erase(it); + } + else + { + auto message = (boost::format("Not found rollback entry: %s:%s") % + change.table % change.key) + .str(); + + BOOST_THROW_EXCEPTION(BCOS_ERROR(StorageError::UnknownError, message)); + } + } + } + else + { // page entry + + auto [error, data] = getData(change.table, TABLE_META_KEY); + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + auto* meta = &std::get<1>(data.value()->data); + auto writeLock = meta->lock(); + auto pageInfoOp = meta->getPageInfoNoLock(change.key); + if (pageInfoOp) + { + auto pageKey = pageInfoOp.value()->getPageKey(); + auto* pageData = pageInfoOp.value()->getPageData(); + if (pageData == nullptr) + { + auto [error, pageDataOp] = getData(change.table, pageKey, true); + if (error || !pageDataOp) + { + BOOST_THROW_EXCEPTION(*error); + } + pageData = pageDataOp.value(); + } + auto* page = &std::get<0>(pageData->data); + if (page->validCount() != pageInfoOp.value()->getCount()) + { + KeyPage_LOG(FATAL) << LOG_DESC("page valid count mismatch") + << LOG_KV("count", pageInfoOp.value()->getCount()) + << LOG_KV("realCount", page->validCount()); + } + page->rollback(change); + if (page->count() == 0) + { // page is empty because of rollback, means it it first created + pageData->entry.setStatus(Entry::Status::EMPTY); + KeyPage_LOG(DEBUG) + << LOG_DESC("revert page to empty") << LOG_KV("table", change.table) + << LOG_KV("key", toHex(change.key)); + } + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("revert page entry") << LOG_KV("table", change.table) + << LOG_KV("key", toHex(change.key)) << LOG_KV("page", (uint64_t)page) + << LOG_KV("pageKey", toHex(pageKey)) + << LOG_KV("pageEndKey", toHex(page->endKey())) + << LOG_KV("count", page->count()) + << LOG_KV("validCount", page->validCount()); + } + // revert also need update pageInfo + auto oldStartKey = meta->updatePageInfoNoLock( + pageKey, page->endKey(), page->validCount(), page->size(), pageInfoOp); + if (oldStartKey) + { + changePageKey(change.table, oldStartKey.value(), page->endKey(), true); + } + } + else + { + auto message = + (boost::format("Not found rollback page: %s:%s") % change.table % change.key) + .str(); + BOOST_THROW_EXCEPTION(BCOS_ERROR(StorageError::ReadError, message)); + } + } + } +} + +// if data not exist, create an empty one +auto KeyPageStorage::getData(std::string_view tableView, std::string_view key, bool mustExist) + -> std::tuple> +{ + // find from cache + auto [bucket, lock] = getBucket(tableView, key); + boost::ignore_unused(lock); + auto keyPair = std::make_pair(std::string(tableView), std::string(key)); + decltype(bucket->container)::iterator it = bucket->container.find(keyPair); + if (it != bucket->container.end()) + { + // assert(it->first.second == key); + auto* data = it->second.get(); + lock.unlock(); + return std::make_tuple(std::unique_ptr(nullptr), std::make_optional(data)); + } + lock.unlock(); + // find from prev + auto d = std::make_shared(); + d->table = std::string(tableView); + d->key = std::string(key); + do + { + auto prevKeyPage = std::dynamic_pointer_cast(getPrev()); + if (prevKeyPage) + { + auto dataOption = prevKeyPage->copyData(tableView, key); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("get data from KeyPageStorage") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)) << LOG_KV("found", static_cast(dataOption)); + } + if (dataOption) + { + d = std::move(*dataOption); + if (!d->key.empty()) + { // set entry to clean + auto* page = &std::get<0>(d->data); + page->clean(d->key); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("import page") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)) << LOG_KV("validCount", page->validCount()) + << LOG_KV("count", page->count()); + } + } + else + { + auto* meta = &std::get<1>(d->data); + meta->clean(); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("import TableMeta") << LOG_KV("table", tableView) + << LOG_KV("size", meta->size()); + } + } + d->entry.setStatus(Entry::Status::NORMAL); + break; + } + } + else + { + auto [error, entry] = getRawEntryFromStorage(tableView, key); + if (error) + { + KeyPage_LOG(ERROR) + << LOG_DESC("getData error") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)) << LOG_KV("error", error->errorMessage()); + return std::make_tuple(std::move(error), std::nullopt); + } + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("get data from storage") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)) << LOG_KV("found", static_cast(entry)); + } + if (entry) + { + entry->setStatus(Entry::Status::NORMAL); + d = std::make_shared(std::string(tableView), std::string(key), + std::move(*entry), key.empty() ? Data::Type::TableMeta : Data::Type::Page); + break; + } + } + if (mustExist && !m_ignoreNotExist) + { + KeyPage_LOG(FATAL) << LOG_DESC("data should exist") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)); + } + if (m_ignoreNotExist) + { + KeyPage_LOG(DEBUG) << LOG_DESC("data should exist but ignore not exist") + << LOG_KV("table", tableView) << LOG_KV("key", toHex(key)); + } + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) << LOG_DESC("create empty data") << LOG_KV("table", tableView) + << LOG_KV("key", toHex(key)); + } + if (key.empty()) + { + d->data = KeyPageStorage::TableMeta(); + d->type = Data::Type::TableMeta; + } + else + { + d->data = KeyPageStorage::Page(); + d->type = Data::Type::Page; + } + d->entry.setStatus(Entry::Status::EMPTY); + } while (false); + + { // insert into cache + auto [bucket, writeLock] = getMutBucket(d->table, d->key); + boost::ignore_unused(writeLock); + auto* data = + bucket->container.emplace(std::make_pair(keyPair, std::move(d))).first->second.get(); + return std::make_tuple(nullptr, std::make_optional(data)); + } +} + +auto KeyPageStorage::getEntryFromPage(std::string_view table, std::string_view key) + -> std::pair> +{ + // key is empty means the data is TableMeta + auto [error, data] = getData(table, TABLE_META_KEY); + if (error) + { + return std::make_pair(std::move(error), std::nullopt); + } + auto* meta = &std::get<1>(data.value()->data); + auto readLock = meta->rLock(); + if (key.empty()) + { // table meta + if (meta->size() > 0) + { + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) << LOG_DESC("return meta entry") << LOG_KV("table", table) + << LOG_KV("size", meta->size()) + << LOG_KV("status", int(data.value()->entry.status())) + << LOG_KV("dirty", data.value()->entry.dirty()); + } + if (data.value()->entry.dirty()) + { + Entry entry; + entry.setObject(*meta); + entry.setStatus(data.value()->entry.status()); + return std::make_pair(nullptr, std::move(entry)); + } + return std::make_pair(nullptr, data.value()->entry); + } + return std::make_pair(nullptr, std::nullopt); + } + auto pageInfoOp = meta->getPageInfoNoLock(key); + if (pageInfoOp) + { + Data* pageData = pageInfoOp.value()->getPageData(); + if (pageData == nullptr) + { + auto [error, pageDataOp] = getData( + table, pageInfoOp.value()->getPageKey(), pageInfoOp.value()->getCount() > 0); + if (error) + { + return std::make_pair(std::move(error), std::nullopt); + } + pageData = pageDataOp.value(); + pageInfoOp.value()->setPageData(pageData); + } + if (pageData->entry.status() == Entry::Status::EMPTY) + { + return std::make_pair(nullptr, std::nullopt); + } + auto* page = &std::get<0>(pageData->data); + if (page->validCount() != pageInfoOp.value()->getCount()) + { + if (m_ignoreNotExist) + { + KeyPage_LOG(INFO) << LOG_DESC("getEntryFromPage page count mismatch ignore") + << LOG_KV("key", toHex(key)) + << LOG_KV("pageKey", toHex(pageInfoOp.value()->getPageKey())) + << LOG_KV("count", pageInfoOp.value()->getCount()) + << LOG_KV("realCount", page->validCount()); + } + else + { + KeyPage_LOG(FATAL) + << LOG_DESC("getEntryFromPage page valid count mismatch") + << LOG_KV("pageKey", toHex(pageInfoOp.value()->getPageKey())) + << LOG_KV("key", toHex(key)) << LOG_KV("count", pageInfoOp.value()->getCount()) + << LOG_KV("realCount", page->validCount()); + } + } + + if (m_readOnly) + { // TODO: check condition, if key is pageKey, return page + if (pageInfoOp.value()->getPageKey() != key) + { + KeyPage_LOG(FATAL) + << LOG_DESC("getEntryFromPage readonly try to read entry(should read page)") + << LOG_KV("table", table) + << LOG_KV("pageKey", toHex(pageInfoOp.value()->getPageKey())) + << LOG_KV("key", toHex(key)); + } + if (page->size() > 0) + { + auto pageReadLock = page->rLock(); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("return page entry") << LOG_KV("table", table) + << LOG_KV("startKey", toHex(page->startKey())) + << LOG_KV("EndKey", toHex(page->endKey())) + << LOG_KV("pageSize", page->size()) << LOG_KV("valid", page->validCount()) + << LOG_KV("count", page->count()) + << LOG_KV("dirty", data.value()->entry.dirty()); + } + Entry entry; + entry.setObject(*page); + entry.setStatus(pageData->entry.status()); + return std::make_pair(nullptr, std::move(entry)); + } + return std::make_pair(nullptr, std::nullopt); + } + auto entry = page->getEntry(key); + // if (c_fileLogLevel <= TRACE) + // { // FIXME: this log is only for debug, comment it when release + // KeyPage_LOG(TRACE) << LOG_DESC("getEntry from page") << LOG_KV("table", table) + // << LOG_KV("pageKey", toHex(pageKey.value())) + // << LOG_KV("key", toHex(key)) + // << LOG_KV("value", entry ? toHex(entry->get()) : "Not found"); + // } + return std::make_pair(nullptr, std::move(entry)); + } + return std::make_pair(nullptr, std::nullopt); +} + +auto KeyPageStorage::setEntryToPage(std::string table, std::string key, Entry entry) + -> Error::UniquePtr +{ + auto [error, data] = getData(table, TABLE_META_KEY); + if (error) + { + return std::move(error); + } + auto* meta = &std::get<1>(data.value()->data); + auto metaWriteLock = meta->lock(); + // insert or update + auto pageInfoOption = meta->getPageInfoNoLock(key); + std::string pageKey = key; + Data* pageData = nullptr; + if (pageInfoOption) + { + pageKey = pageInfoOption.value()->getPageKey(); + pageData = pageInfoOption.value()->getPageData(); + } + std::optional entryOld; + if (pageData == nullptr) + { + bool shouldExist = + pageInfoOption.has_value() ? (pageInfoOption.value()->getCount() > 0) : false; + auto [e, pageDataOp] = getData(table, pageKey, shouldExist); + if (e) + { + return std::move(e); + } + pageData = pageDataOp.value(); + if (pageInfoOption) + { + pageInfoOption.value()->setPageData(pageData); + } + auto* page = &std::get<0>(pageData->data); + if (shouldExist && page->validCount() != pageInfoOption.value()->getCount()) + { + KeyPage_LOG(FATAL) << LOG_DESC("page valid count mismatch") << LOG_KV("key", toHex(key)) + << LOG_KV("count", pageInfoOption.value()->getCount()) + << LOG_KV("realCount", page->validCount()); + } + } + // if new entry is too big, it will trigger split + auto* page = &std::get<0>(pageData->data); + { + auto ret = page->setEntry(key, std::move(entry)); + entryOld = std::move(std::get<0>(ret)); + auto pageInfoChanged = std::get<1>(ret); + + if (pageInfoChanged) + { + if (pageData->entry.status() == Entry::Status::EMPTY) + { // new page insert, if entries is empty means page delete entry which not exist + meta->insertPageInfoNoLock(PageInfo(page->endKey(), (uint16_t)page->validCount(), + (uint16_t)page->size(), pageData)); + // pageData->entry.setStatus(Entry::Status::NORMAL); + pageData->entry.setStatus(Entry::Status::MODIFIED); + } + else + { + auto oldPageKey = meta->updatePageInfoNoLock( + pageKey, page->endKey(), page->validCount(), page->size(), pageInfoOption); + pageData->entry.setStatus(Entry::Status::MODIFIED); + if (oldPageKey) + { // the page key is changed, 1. delete the last key, 2. insert a bigger key + // the container need to be updated + pageData = changePageKey(table, oldPageKey.value(), page->endKey()); + page = &std::get<0>(pageData->data); + if (page->validCount() == 0) + { // page is empty because delete, not update startKey and mark as deleted + pageData->entry.setStatus(Entry::Status::DELETED); + } + } + } + } + else + { + pageData->entry.setStatus(Entry::Status::MODIFIED); + } + // page is modified, the meta maybe modified, mark meta as dirty + data.value()->entry.setStatus(Entry::Status::MODIFIED); + } + pageKey = page->endKey(); + if (page->size() > m_pageSize && page->validCount() > 1) + { // split page, TODO: if dag trigger split, it maybe split to different page? + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) << LOG_DESC("trigger split page") << LOG_KV("table", table) + << LOG_KV("pageKey", toHex(pageKey)) << LOG_KV("size", page->size()) + << LOG_KV("m_pageSize", m_pageSize) + << LOG_KV("validCount", page->validCount()) + << LOG_KV("count", page->count()); + } + auto newPage = page->split(m_splitSize); + // update old meta pageInfo + auto oldStartKey = meta->updatePageInfoNoLock( + pageKey, page->endKey(), page->validCount(), page->size(), pageInfoOption); + if (oldStartKey) + { // if the startKey of page changed, the container also need to be updated + pageData = changePageKey(table, oldStartKey.value(), page->endKey()); + page = &std::get<0>(pageData->data); + } + + KeyPage_LOG(DEBUG) << LOG_DESC("split page finished") << LOG_KV("table", table) + << LOG_KV("pageKey", toHex(page->endKey())) + << LOG_KV("newPageKey", toHex(newPage.endKey())) + << LOG_KV("validCount", page->validCount()) + << LOG_KV("newValidCount", newPage.validCount()) + << LOG_KV("count", page->count()) << LOG_KV("newCount", newPage.count()) + << LOG_KV("pageSize", page->size()) + << LOG_KV("newPageSize", newPage.size()); + // insert new page to container, newPageInfo to meta + insertNewPage(table, newPage.endKey(), meta, std::move(newPage)); + data.value()->entry.setStatus(Entry::Status::MODIFIED); + } + else if (page->size() < m_mergeSize) + { // merge operation + // get next page, check size and merge current into next + auto nextPageKey = meta->getNextPageKeyNoLock(page->endKey()); + if (nextPageKey) + { + auto [error, nextPageData] = getData(table, nextPageKey.value()); + boost::ignore_unused(error); + if (error) + { + KeyPage_LOG(FATAL) + << LOG_DESC("merge page getData error") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) << LOG_KV("pageKey", toHex(pageKey)); + } + auto* nextPage = &std::get<0>(nextPageData.value()->data); + if (nextPage->size() < m_splitSize && nextPage != page) + { + auto endKey = page->endKey(); + auto nextEndKey = nextPage->endKey(); + KeyPage_LOG(DEBUG) + << LOG_DESC("merge current page into next") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) << LOG_KV("pageKey", toHex(pageKey)) + << LOG_KV("pageEnd", toHex(endKey)) << LOG_KV("pageCount", page->validCount()) + << LOG_KV("pageSize", page->size()) << LOG_KV("nextPageKey", toHex(nextEndKey)) + << LOG_KV("nextPageCount", nextPage->validCount()) + << LOG_KV("nextPageSize", nextPage->size()); + nextPage->merge(*page); + // remove current page info and update next page info + auto nextPageInfoOp = meta->deletePageInfoNoLock(endKey, pageInfoOption); + auto oldStartKey = meta->updatePageInfoNoLock(nextEndKey, nextPage->endKey(), + nextPage->validCount(), nextPage->size(), nextPageInfoOp); + // old page also need write to disk to clean data, so not remove old page + // nextPageData.value()->entry.setDirty(true); + // pageData->entry.setDirty(true); + nextPageData.value()->entry.setStatus(Entry::Status::MODIFIED); + pageData->entry.setStatus(Entry::Status::DELETED); + if (oldStartKey) + { // if the startKey of nextPage changed, the container also need to be updated + changePageKey(table, oldStartKey.value(), nextPage->endKey()); + } + data.value()->entry.setStatus(Entry::Status::MODIFIED); + } + } + } + if (m_recoder.local()) + { + m_recoder.local()->log( + Recoder::Change(std::move(table), std::move(key), std::move(entryOld))); + } + return nullptr; +} + +auto KeyPageStorage::getRawEntryFromStorage(std::string_view table, std::string_view key) + -> std::pair> +{ + auto prev = getPrev(); // prev must not null + if (!prev) + { + KeyPage_LOG(FATAL) << LOG_DESC("previous stortage is null"); + return std::make_pair(nullptr, std::nullopt); + } + std::promise>> getPromise; + prev->asyncGetRow(table, key, [&](Error::UniquePtr error, std::optional entry) { + KeyPage_LOG(TRACE) << LOG_DESC("getEntry from previous") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) + << LOG_KV("size", entry ? entry->size() : 0); + getPromise.set_value({std::move(error), std::move(entry)}); + }); + return getPromise.get_future().get(); +} +auto KeyPageStorage::getSysTableRawEntry(std::string_view table, std::string_view key) + -> std::pair> +{ + auto [bucket, lock] = getBucket(table, key); + boost::ignore_unused(lock); + auto it = bucket->container.find(std::make_pair(std::string(table), std::string(key))); + if (it != bucket->container.end()) + { + auto& entry = it->second->entry; + lock.unlock(); + return std::make_pair(nullptr, std::make_optional(entry)); + } + lock.unlock(); + // find from prev + auto [error, entryOption] = getRawEntryFromStorage(table, key); + if (!error && entryOption) + { + auto entry = importExistingEntry(table, key, std::move(entryOption.value())); + return std::make_pair(nullptr, std::make_optional(std::move(entry))); + } + return std::make_pair(std::move(error), entryOption); +} + +auto KeyPageStorage::importExistingEntry(std::string_view table, std::string_view key, Entry entry) + -> Entry +{ + if (m_readOnly) + { + return entry; + } + + // entry.setDirty(false); + entry.setStatus(Entry::NORMAL); + KeyPage_LOG(DEBUG) << "import entry, " << table << " | " << key; + auto [bucket, lock] = getMutBucket(table, key); + boost::ignore_unused(lock); + auto it = bucket->container.find(std::make_pair(std::string(table), std::string(key))); + if (it == bucket->container.end()) + { + auto d = std::make_shared( + std::string(table), std::string(key), std::move(entry), Data::Type::NormalEntry); + auto tableKey = std::make_pair(std::string(table), std::string(key)); + it = bucket->container.emplace(std::make_pair(std::move(tableKey), std::move(d))).first; + } + else + { + KeyPage_LOG(DEBUG) << "Fail import existsing entry, " << table << " | " << toHex(key); + } + + return it->second->entry; +} + +auto KeyPageStorage::count(const std::string_view& table) -> std::pair +{ + // if SYS_TABLES is not supported + if (m_ignoreTables->find(table) != m_ignoreTables->end()) + { + return std::make_pair( + 0, BCOS_ERROR_PTR(StorageError::ReadError, + std::string("count ").append(table).append(" is not supported"))); + } + + // page + auto [error, data] = getData(table, TABLE_META_KEY); + if (error) + { + return std::make_pair( + 0, BCOS_ERROR_PTR(StorageError::ReadError, + std::string("get table meta data failed, table:").append(table))); + } + auto* meta = &std::get<1>(data.value()->data); + auto readLock = meta->rLock(); + auto& pageInfo = meta->getAllPageInfoNoLock(); + size_t count = 0; + for (auto& info : pageInfo) + { + count += info.getCount(); + } + readLock.unlock(); + return std::make_pair(count, nullptr); +} + +} // namespace bcos::storage diff --git a/bcos-table/src/KeyPageStorage.h b/bcos-table/src/KeyPageStorage.h new file mode 100644 index 0000000..996508a --- /dev/null +++ b/bcos-table/src/KeyPageStorage.h @@ -0,0 +1,1259 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief KeyPage implementation of StorageInterface + * @file KeyPageStorage.h + * @author: xingqiangbai + * @date: 2022-04-19 + */ +#pragma once + +#include "StateStorageInterface.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define KeyPage_LOG(LEVEL) BCOS_LOG(LEVEL) << "[STORAGE-KeyPage]" +namespace std +{ +template <> +struct hash> +{ + auto operator()(const std::pair& p) const -> size_t + { + // calculate the hash result + auto hash_result = std::hash{}(p.first); + boost::hash_combine(hash_result, std::hash{}(p.second)); + return hash_result; + } +}; + +template <> +struct hash> +{ + auto operator()(const std::pair& p) const -> size_t + { + // calculate the hash result + auto hash_result = std::hash{}(p.first); + boost::hash_combine(hash_result, std::hash{}(p.second)); + return hash_result; + } +}; + +} // namespace std + +namespace bcos::storage +{ +constexpr static int32_t ARCHIVE_FLAG = + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking; + +const char* const TABLE_META_KEY = ""; +const size_t MIN_PAGE_SIZE = 2048; +class KeyPageStorage : public virtual storage::StateStorageInterface +{ +public: + using Ptr = std::shared_ptr; + + explicit KeyPageStorage(std::shared_ptr _prev, size_t _pageSize = 10240, + uint32_t _blockVersion = (uint32_t)bcos::protocol::BlockVersion::V3_0_VERSION, + std::shared_ptr>> _ignoreTables = nullptr, + bool _ignoreNotExist = false) + : storage::StateStorageInterface(std::move(_prev)), + m_blockVersion(_blockVersion), + m_pageSize(_pageSize > MIN_PAGE_SIZE ? _pageSize : MIN_PAGE_SIZE), + m_splitSize(m_pageSize / 3 * 2), + m_mergeSize(m_pageSize / 4), + m_buckets(std::thread::hardware_concurrency()), + m_ignoreTables(std::move(_ignoreTables)), + m_ignoreNotExist(_ignoreNotExist) + { + if (!m_ignoreTables) + { + auto ignore = std::make_shared>>(); + ignore->insert(std::string(SYS_TABLES)); + m_ignoreTables = ignore; + } + } + + KeyPageStorage(const KeyPageStorage&) = delete; + KeyPageStorage& operator=(const KeyPageStorage&) = delete; + + KeyPageStorage(KeyPageStorage&&) = delete; + KeyPageStorage& operator=(KeyPageStorage&&) = delete; + + ~KeyPageStorage() override + { + m_recoder.clear(); + m_buckets.clear(); + } + + void asyncGetPrimaryKeys(std::string_view table, + const std::optional& _condition, + std::function)> _callback) override; + + void asyncGetRow(std::string_view tableView, std::string_view keyView, + std::function)> _callback) override; + + void asyncGetRows(std::string_view tableView, + RANGES::any_view + keys, + std::function>)> _callback) + override; + + void asyncSetRow(std::string_view tableView, std::string_view keyView, Entry entry, + std::function callback) override; + + void parallelTraverse(bool onlyDirty, std::function + callback) const override; + + crypto::HashType hash(const bcos::crypto::Hash::Ptr& hashImpl) const override; + + void rollback(const Recoder& recoder) override; + + struct Data; + class PageInfo + { // all methods is not thread safe + public: + auto operator<(const PageInfo& rhs) const -> bool + { + return m_data->pageKey < rhs.m_data->pageKey; + } + PageInfo() = default; + ~PageInfo() = default; + PageInfo(std::string _pageKey, uint16_t _count, uint16_t _size, Data* p) + : m_data(std::make_shared(std::move(_pageKey), _count, _size)), + m_pageData(p) + {} + PageInfo(PageInfo&&) = default; + auto operator=(PageInfo&&) -> PageInfo& = default; + PageInfo(const PageInfo& page) = default; + auto operator=(const PageInfo& page) -> PageInfo& = default; + + void setPageKey(std::string key) + { + prepareMyData(); + m_data->pageKey = std::move(key); + } + [[nodiscard]] auto getPageKey() const -> std::string { return m_data->pageKey; } + void setCount(uint16_t _count) + { + prepareMyData(); + m_data->count = _count; + } + [[nodiscard]] auto getCount() const -> uint16_t { return m_data->count; } + void setSize(uint16_t _size) + { + prepareMyData(); + m_data->size = _size; + } + [[nodiscard]] auto getSize() const -> uint16_t { return m_data->size; } + + [[nodiscard]] auto getPageData() const -> Data* { return m_pageData; } + void setPageData(Data* data) { m_pageData = data; } + + private: + void prepareMyData() + { + if (m_data.use_count() > 1) + { + m_data = + std::make_shared(m_data->pageKey, m_data->count, m_data->size); + } + } + struct PageInfoData + { + PageInfoData() = default; + PageInfoData(std::string _endKey, uint16_t _count, uint16_t _size) + : pageKey(std::move(_endKey)), count(_count), size(_size) + {} + // startKey is not involved in comparison + std::string pageKey; + uint16_t count = 0; + uint16_t size = 0; + }; + std::shared_ptr m_data = nullptr; + Data* m_pageData = nullptr; + friend class boost::serialization::access; + + template + void save(Archive& archive, const unsigned int version) const + { + std::ignore = version; + archive & m_data->pageKey; + archive & m_data->count; + archive & m_data->size; + } + template + void load(Archive& archive, const unsigned int version) + { + std::ignore = version; + m_data = std::make_shared(); + archive & m_data->pageKey; + archive & m_data->count; + archive & m_data->size; + } + BOOST_SERIALIZATION_SPLIT_MEMBER() + }; + + struct TableMeta + { + TableMeta() : pages(std::make_unique>()) {} + ~TableMeta() = default; + TableMeta(const std::string_view value) + { + if (value.empty()) + { + return; + } + boost::iostreams::stream inputStream( + value.data(), value.size()); + boost::archive::binary_iarchive archive(inputStream, ARCHIVE_FLAG); + archive >> *this; + } + TableMeta(const TableMeta& meta) + { + pages = std::make_unique>(); + *pages = *meta.pages; + } + TableMeta& operator=(const TableMeta& meta) + { + if (this != &meta) + { + pages = std::make_unique>(); + *pages = *meta.pages; + } + return *this; + } + TableMeta(TableMeta&& t) { pages = std::move(t.pages); } + TableMeta& operator=(TableMeta&& t) + { + if (this != &t) + { + pages = std::move(t.pages); + } + return *this; + } + auto lower_bound(std::string_view key) + { + return std::lower_bound(pages->begin(), pages->end(), key, + [](const PageInfo& lhs, const std::string_view& rhs) { + return lhs.getPageKey() < rhs; + }); + } + auto upper_bound(std::string_view key) + { + return std::upper_bound(pages->begin(), pages->end(), key, + [](const std::string_view& lhs, const PageInfo& rhs) { + return lhs < rhs.getPageKey(); + }); + } + inline std::optional getPageInfoNoLock(std::string_view key) + { + ++getPageInfoCount; + if (pages->empty()) + { // if pages is empty + return std::nullopt; + } + if (lastPageInfoIndex < pages->size()) + { + auto* lastPageInfo = &pages->at(lastPageInfoIndex); + if (lastPageInfo->getPageData()) + { + auto page = &std::get<0>(lastPageInfo->getPageData()->data); + if (!page->startKey().empty() && page->startKey() <= key && + key <= page->endKey()) + { + hit += 1; + return lastPageInfo; + } + } + } + auto it = lower_bound(key); + if (it != pages->end()) + { + lastPageInfoIndex = it - pages->begin(); + return &*it; + } + if (pages->rbegin()->getPageKey().empty()) + { // page is empty because of rollback + return std::nullopt; + } + lastPageInfoIndex = pages->size() - 1; + return &pages->back(); + } + + auto getNextPageKeyNoLock(std::string_view key) -> std::optional + { + if (key.empty()) + { + return std::nullopt; + } + auto it = upper_bound(key); + if (it != pages->end()) + { + return it->getPageKey(); + } + return std::nullopt; + } + + std::vector& getAllPageInfoNoLock() { return std::ref(*pages); } + void insertPageInfo(PageInfo&& pageInfo) + { + std::unique_lock lock(mutex); + insertPageInfoNoLock(std::move(pageInfo)); + } + void insertPageInfoNoLock(PageInfo&& pageInfo) + { + if (pageInfo.getPageKey().empty()) + { + KeyPage_LOG(FATAL) << LOG_DESC("insert empty pageInfo"); + return; + } + auto it = lower_bound(pageInfo.getPageKey()); + auto newIt = pages->insert(it, std::move(pageInfo)); + KeyPage_LOG(DEBUG) << LOG_DESC("insert new pageInfo") + << LOG_KV("pageKey", toHex(newIt->getPageKey())) + << LOG_KV("valid", newIt->getCount()) + << LOG_KV("size", newIt->getSize()); + } + + std::optional updatePageInfoNoLock(std::string_view oldEndKey, + const std::string& pageKey, size_t count, size_t size, + std::optional pageInfo) + { + std::optional oldPageKey; + auto updateInfo = [&](PageInfo* p) { + if (p->getPageKey() != pageKey) + { + oldPageKey = p->getPageKey(); + p->setPageKey(pageKey); + if (pageKey.empty()) + { + p->setPageData(nullptr); + } + } + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("updatePageInfo") + << LOG_KV("oldPageKey", + oldPageKey.has_value() ? toHex(oldPageKey.value()) : "not changed") + << LOG_KV("oldEndKey", toHex(oldEndKey)) + << LOG_KV("newPageKey", toHex(pageKey)) << LOG_KV("count", count) + << LOG_KV("size", size); + } + p->setCount(count); + p->setSize(size); + }; + if (pageInfo.has_value()) + { + updateInfo(pageInfo.value()); + } + else + { + auto it = lower_bound(oldEndKey); + if (it != pages->end()) + { + updateInfo(&*it); + } + else + { + KeyPage_LOG(FATAL) + << LOG_DESC("updatePageInfo not found") + << LOG_KV("oldEndKey", toHex(oldEndKey)) << LOG_KV("endKey", toHex(pageKey)) + << LOG_KV("valid", count) << LOG_KV("size", size); + } + } + return oldPageKey; + } + + std::optional deletePageInfoNoLock( + std::string_view endkey, std::optional pageInfo) + { // remove current page info and update next page start key + std::vector::iterator it; + if (pageInfo) + { + auto offset = pageInfo.value() - &*pages->begin(); + it = pages->begin() + offset; + } + else + { + it = lower_bound(endkey); + } + if (it != pages->end() && it->getPageKey() == endkey) + { + return &*pages->erase(it); + } + return std::nullopt; + } + size_t size() const + { + std::shared_lock lock(mutex); + return pages->size(); + } + + void clean() + { + for (auto it = pages->begin(); it != pages->end();) + { + it->setPageData(nullptr); + if (it->getCount() == 0 || it->getPageKey().empty()) + { + KeyPage_LOG(DEBUG) << LOG_DESC("TableMeta clean empty page") + << LOG_KV("pageKey", toHex(it->getPageKey())); + it = pages->erase(it); + } + else + { + ++it; + } + } + } + std::unique_lock lock() const { return std::unique_lock(mutex); } + std::shared_lock rLock() const { return std::shared_lock(mutex); } + + friend std::ostream& operator<<( + std::ostream& os, const bcos::storage::KeyPageStorage::TableMeta& meta) + { + auto lock = std::shared_lock(meta.mutex); + os << "["; + for (auto& pageInfo : *meta.pages) + { + os << "{" + // << "startKey=" << toHex(pageInfo.getStartKey()) + << ",endKey=" << toHex(pageInfo.getPageKey()) << ",count=" << pageInfo.getCount() + << ",size=" << pageInfo.getSize() << "}"; + } + os << "]"; + return os; + } + double hitRate() const { return hit / (double)getPageInfoCount; } + uint64_t rowCount() const { return m_rows; } + + private: + uint32_t getPageInfoCount = 0; + uint32_t hit = 0; + mutable uint64_t m_rows = 0; + mutable std::shared_mutex mutex; + std::unique_ptr> pages = nullptr; + friend class boost::serialization::access; + size_t lastPageInfoIndex = 0; + template + void save(Archive& ar, const unsigned int version) const + { + std::ignore = version; + // auto len = (uint32_t)pages->size(); + // ar& len; + // for (size_t i = 0; i < pages->size(); ++i) + // { + // if (pages->at(i).getCount() == 0) + // { + // continue; + // } + // ar & pages->at(i); + // } + int invalid = 0; + m_rows = 0; + for (auto it = pages->begin(); it != pages->end();) + { + if (it->getCount() == 0 || it->getPageKey().empty()) + { + KeyPage_LOG(DEBUG) + << LOG_DESC("TableMeta empty page") + << LOG_KV("pageKey", toHex(it->getPageKey())) + << LOG_KV("count", it->getCount()) << LOG_KV("size", it->getSize()); + it = pages->erase(it); + ++invalid; + } + else + { + m_rows += it->getCount(); + ++it; + } + } + ar << *pages; + KeyPage_LOG(DEBUG) << LOG_DESC("Serialize meta") << LOG_KV("valid", pages->size()) + << LOG_KV("invalid", invalid); + } + template + void load(Archive& ar, const unsigned int version) + { + std::ignore = version; + // uint32_t s = 0; + // ar& s; + // pages = std::make_unique>(s, PageInfo()); + // for (size_t i = 0; i < pages->size(); ++i) + // { + // ar & pages->at(i); + // } + pages = std::make_unique>(); + ar >> *pages; + } + BOOST_SERIALIZATION_SPLIT_MEMBER() + }; + + struct Page + { + Page() : m_size(0) {} + ~Page() = default; + Page(const std::string_view& value, const std::string_view& pageKey) + { + if (value.empty()) + { + return; + } + boost::iostreams::stream inputStream( + value.data(), value.size()); + boost::archive::binary_iarchive archive(inputStream, ARCHIVE_FLAG); + archive >> *this; + if (pageKey != entries.rbegin()->first) + { + KeyPage_LOG(INFO) << LOG_DESC("load page with invalid pageKey") + << LOG_KV("pageKey", toHex(pageKey)) + << LOG_KV("validPageKey", toHex(entries.rbegin()->first)) + << LOG_KV("valid", m_validCount) + << LOG_KV("count", entries.size()); + m_invalidPageKeys.insert(std::string(pageKey)); + } + } + Page(const Page& page) + : entries(page.entries), + m_size(page.m_size), + m_validCount(page.m_validCount), + m_invalidPageKeys(page.m_invalidPageKeys) + {} + Page& operator=(const Page& p) + { + if (this != &p) + { + entries = p.entries; + m_size = p.m_size; + m_validCount = p.m_validCount; + m_invalidPageKeys = p.m_invalidPageKeys; + } + return *this; + } + Page(Page&& p) noexcept + { + entries = std::move(p.entries); + m_size = p.m_size; + m_validCount = p.m_validCount; + m_invalidPageKeys = std::move(p.m_invalidPageKeys); + } + Page& operator=(Page&& p) + { + if (this != &p) + { + entries = std::move(p.entries); + m_size = p.m_size; + m_validCount = p.m_validCount; + m_invalidPageKeys = std::move(p.m_invalidPageKeys); + } + return *this; + } + + std::optional getEntry(std::string_view key) + { + std::shared_lock lock(mutex); + auto it = entries.find(key); + if (it != entries.end()) + { + // if (c_fileLogLevel <= bcos::LogLevel::TRACE) + // { // FIXME: this log is only for debug, comment it when release + // KeyPage_LOG(TRACE) + // << LOG_DESC("getEntry") << LOG_KV("pageKey", + // toHex(entries.begin()->first)) + // << LOG_KV("valid", m_validCount) << LOG_KV("count", entries.size()) + // << LOG_KV("key", toHex(key)) << LOG_KV("status", + // (int)it->second.status()); + // } + if (it->second.status() != Entry::Status::DELETED && + it->second.status() != Entry::EMPTY) + { + return std::make_optional(it->second); + } + } + else + { + // if (c_fileLogLevel <= bcos::LogLevel::TRACE) + // { // FIXME: this log is only for debug, comment it when release + // KeyPage_LOG(TRACE) + // << LOG_DESC("getEntry not found") + // << LOG_KV( + // "pageKey", entries.empty() ? "empty" : + // toHex(entries.begin()->first)) + // << LOG_KV("valid", m_validCount) << LOG_KV("count", entries.size()) + // << LOG_KV("key", toHex(key)); + // } + } + return std::nullopt; + } + std::pair>&, std::unique_lock> + getEntries() + { + std::unique_lock lock(mutex); + return std::make_pair(std::ref(entries), std::move(lock)); + } + inline std::tuple, bool> setEntry( + const std::string_view& key, Entry&& entry) + { // TODO: do not exist entry optimization: insert a empty entry to cache, then + // entry status none should return null optional + bool pageInfoChanged = false; + std::optional ret; + std::unique_lock lock(mutex); + auto it = entries.lower_bound(key); + m_size += entry.size(); + if (it != entries.end() && it->first == key) + { // delete exist entry + m_size -= it->second.size(); + if (entry.status() != Entry::Status::DELETED) + { + if (it->second.status() == Entry::Status::DELETED) + { + ++m_validCount; + pageInfoChanged = true; + } + } + else + { + if (it->second.status() != Entry::Status::DELETED) + { + --m_validCount; + pageInfoChanged = true; + } + } + if (m_invalidPageKeys.size() == 1) + { + pageInfoChanged = true; + } + ret = std::move(it->second); + it->second = std::move(entry); + // if (c_fileLogLevel <= bcos::LogLevel::TRACE) + // { // FIXME: this log is only for debug, comment it when release + // KeyPage_LOG(TRACE) + // << LOG_DESC("setEntry update") + // << LOG_KV("pageKey", toHex(entries.rbegin()->first)) + // << LOG_KV("valid", m_validCount) << LOG_KV("count", entries.size()) + // << LOG_KV("key", toHex(key)) << LOG_KV("status", + // (int)it->second.status()) + // << LOG_KV("pageInfoChanged", pageInfoChanged); + // } + } + else + { + pageInfoChanged = true; + m_size += key.size(); + if (entry.status() != Entry::Status::DELETED) + { + ++m_validCount; + } + if (entries.empty() || key > entries.rbegin()->first) + { + if (!entries.empty()) + { // means key > entries.rbegin()->first is true + m_invalidPageKeys.insert(entries.rbegin()->first); + } + auto it = m_invalidPageKeys.find(std::string(key)); + if (it != m_invalidPageKeys.end()) + { + m_invalidPageKeys.erase(it); + KeyPage_LOG(DEBUG) << LOG_DESC("invalid pageKey become valid") + << LOG_KV("pageKey", toHex(key)); + } + } + entries.insert(it, std::make_pair(std::string(key), std::move(entry))); + // if (c_fileLogLevel <= bcos::LogLevel::TRACE) + // { // FIXME: this log is only for debug, comment it when release + // KeyPage_LOG(TRACE) << LOG_DESC("setEntry insert") + // << LOG_KV("pageKey", toHex(entries.rbegin()->first)) + // << LOG_KV("key", toHex(key)) << LOG_KV("valid", + // m_validCount) + // << LOG_KV("count", entries.size()) + // << LOG_KV("pageInfoChanged", pageInfoChanged); + // } + } + return std::make_tuple(std::move(ret), pageInfoChanged); + } + auto size() const -> size_t + { + std::shared_lock lock(mutex); + return m_size; + } + auto validCount() const -> size_t + { + std::shared_lock lock(mutex); + return m_validCount; + } + auto count() const -> size_t + { + std::shared_lock lock(mutex); + return entries.size(); + } + auto invalidKeySet() const -> const std::set& + { + std::shared_lock lock(mutex); + return m_invalidPageKeys; + } + auto invalidKeyCount() const -> size_t { return m_invalidPageKeys.size(); } + auto startKey() const -> std::string + { + std::shared_lock lock(mutex); + if (entries.empty()) + { + return ""; + } + return entries.begin()->first; + } + std::string endKey() const + { + std::shared_lock lock(mutex); + if (entries.empty()) + { + return ""; + } + return entries.rbegin()->first; + } + auto split(size_t threshold) + { + auto page = Page(); + std::unique_lock lock(mutex); + // split this page to two pages + auto iter = entries.begin(); + while (iter != entries.end()) + { + m_size -= iter->second.size(); + m_size -= iter->first.size(); + page.m_size += iter->second.size(); + page.m_size += iter->first.size(); + if (iter->second.status() != Entry::Status::DELETED) + { + --m_validCount; + ++page.m_validCount; + } + if (!m_invalidPageKeys.empty() && iter->first >= *m_invalidPageKeys.begin()) + { + page.m_invalidPageKeys.insert( + m_invalidPageKeys.extract(m_invalidPageKeys.begin())); + } + auto ret = page.entries.insert(entries.extract(iter)); + assert(ret.inserted); + iter = entries.begin(); + if (m_size - iter->second.size() < threshold || entries.size() == 1) + { + break; + } + } + // if new pageKey has been pageKey, remove it from m_invalidPageKeys + auto it = m_invalidPageKeys.find(page.entries.rbegin()->first); + if (it != m_invalidPageKeys.end()) + { + m_invalidPageKeys.erase(it); + KeyPage_LOG(DEBUG) << LOG_DESC("invalid pageKey become valid because of split") + << LOG_KV("pageKey", toHex(page.entries.rbegin()->first)); + } + it = page.m_invalidPageKeys.find(page.entries.rbegin()->first); + if (it != page.m_invalidPageKeys.end()) + { + page.m_invalidPageKeys.erase(it); + KeyPage_LOG(DEBUG) << LOG_DESC("invalid pageKey become valid because of split") + << LOG_KV("pageKey", toHex(page.entries.rbegin()->first)); + } + return page; + } + + void merge(Page& p) + { + if (this != &p) + { + std::unique_lock lock(mutex); + for (auto iter = p.entries.begin(); iter != p.entries.end();) + { + m_size += iter->second.size(); + m_size += iter->first.size(); + p.m_size -= iter->second.size(); + p.m_size -= iter->first.size(); + if (iter->second.status() != Entry::Status::DELETED) + { + ++m_validCount; + --p.m_validCount; + } + entries.insert(p.entries.extract(iter)); + iter = p.entries.begin(); + } + // Merges two sorted lists into one + m_invalidPageKeys.merge(p.m_invalidPageKeys); + } + else + { + KeyPage_LOG(WARNING) + << LOG_DESC("merge self") << LOG_KV("startKey", toHex(entries.begin()->first)) + << LOG_KV("endKey", toHex(entries.rbegin()->first)) + << LOG_KV("valid", m_validCount) << LOG_KV("count", entries.size()); + } + } + void clean(const std::string_view& pageKey) + { + std::unique_lock lock(mutex); + for (auto iter = entries.begin(); iter != entries.end();) + { + if (iter->second.status() != Entry::Status::DELETED) + { + iter->second.setStatus(Entry::Status::NORMAL); + ++iter; + } + else + { + iter = entries.erase(iter); + } + } + m_invalidPageKeys.clear(); + if (!entries.empty() && pageKey != entries.rbegin()->first) + { + KeyPage_LOG(WARNING) << LOG_DESC("import page with invalid pageKey") + << LOG_KV("pageKey", toHex(pageKey)) + << LOG_KV("validPageKey", toHex(entries.rbegin()->first)) + << LOG_KV("count", entries.size()); + m_invalidPageKeys.insert(std::string(pageKey)); + } + if (entries.empty()) + { + KeyPage_LOG(DEBUG) + << LOG_DESC("import empty page") << LOG_KV("pageKey", toHex(pageKey)) + << LOG_KV("count", entries.size()); + } + } + auto hash(const std::string& table, const bcos::crypto::Hash::Ptr& hashImpl, + uint32_t blockVersion) const -> crypto::HashType + { + bcos::crypto::HashType pageHash(0); + auto hash = hashImpl->hash(table); + // std::shared_lock lock(mutex); + for (const auto& entry : entries) + { + if (entry.second.dirty()) + { + bcos::crypto::HashType entryHash(0); + if (blockVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + entryHash = entry.second.hash(table, entry.first, hashImpl, blockVersion); + } + else + { // 3.0.0 + entryHash = hash ^ hashImpl->hash(entry.first) ^ + entry.second.hash(table, entry.first, hashImpl, blockVersion); + } + // if (c_fileLogLevel <= TRACE) + // { + // KeyPage_LOG(TRACE) + // << "Storage hash: " << LOG_KV("table", table) + // << LOG_KV("key", toHex(iter->first)) << LOG_KV("hash", + // entryHash.hex()); + // } + pageHash ^= entryHash; + } + } + return pageHash; + } + + void rollback(const Recoder::Change& change) + { + std::unique_lock lock(mutex); + auto it = entries.find(change.key); + if (change.entry) + { + if (it != entries.end()) + { // update + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert update: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + if (it->second.status() == Entry::Status::DELETED && + change.entry->status() != Entry::Status::DELETED) + { + ++m_validCount; + } + else if (it->second.status() != Entry::Status::DELETED && + change.entry->status() == Entry::Status::DELETED) + { + --m_validCount; + } + m_size -= it->second.size(); + it->second = *change.entry; + m_size += it->second.size(); + } + else + { // delete, should not happen? + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert delete: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + if (change.entry->status() != Entry::Status::DELETED) + { + ++m_validCount; + } + m_size -= change.entry->size(); + entries[change.key] = std::move(change.entry.value()); + } + } + else + { // rollback insert + if (it != entries.end()) + { // insert or update + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + KeyPage_LOG(TRACE) + << "Revert insert: " << change.table << " | " << toHex(change.key); + } + m_size -= it->second.size(); + m_size -= it->first.size(); + if (it->second.status() != Entry::Status::DELETED) + { + --m_validCount; + } + entries.erase(it); + if (!m_invalidPageKeys.empty() && !entries.empty() && + entries.rbegin()->first == *m_invalidPageKeys.rbegin()) + { // if new pageKey has been pageKey, remove it from m_invalidPageKeys + m_invalidPageKeys.erase(std::prev(m_invalidPageKeys.end())); + } + } + else + { // delete a key not exist + KeyPage_LOG(DEBUG) + << "Revert invalid delete: " << change.table << " | " << toHex(change.key); + auto message = (boost::format("Not found rollback entry: %s:%s") % + change.table % change.key) + .str(); + BOOST_THROW_EXCEPTION(BCOS_ERROR(StorageError::UnknownError, message)); + } + } + } + auto lock() -> std::unique_lock { return std::unique_lock(mutex); } + auto rLock() -> std::shared_lock { return std::shared_lock(mutex); } + + private: + // PageInfo* pageInfo; + mutable std::shared_mutex mutex; + std::map> entries; + uint32_t m_size = 0; // page real size + uint32_t m_validCount = 0; // valid entry count + friend class boost::serialization::access; + // if startKey changed the old startKey need keep to delete old page + std::set m_invalidPageKeys; + template + void save(Archive& ar, const unsigned int version) const + { + std::ignore = version; + ar&(uint32_t)m_validCount; + size_t count = 0; + for (const auto& i : entries) + { + if (i.second.status() == Entry::Status::DELETED) + { // skip deleted entry + continue; + } + ++count; + ar& i.first; + auto value = i.second.get(); + ar&(uint32_t)value.size(); + ar.save_binary(value.data(), value.size()); + } + assert(count == m_validCount); + } + template + void load(Archive& ar, const unsigned int version) + { + std::ignore = version; + uint32_t count = 0; + ar& count; + m_validCount = count; + auto iter = entries.begin(); + for (size_t i = 0; i < m_validCount; ++i) + { + std::string key; + ar& key; + uint32_t len = 0; + ar& len; + m_size += len; + m_size += key.size(); + auto value = std::make_shared>(len, 0); + ar.load_binary(value->data(), value->size()); + Entry e; + e.setPointer(std::move(value)); + e.setStatus(Entry::Status::NORMAL); + iter = entries.emplace_hint(iter, std::move(key), std::move(e)); + } + } + BOOST_SERIALIZATION_SPLIT_MEMBER() + }; + + struct Data + { + enum Type : int8_t + { + Page = 0, + TableMeta = 1, + NormalEntry = 2, + }; + Data() = default; + ~Data() = default; + Data(std::string _table, std::string _key, Entry _entry, Type _type) + : table(std::move(_table)), key(std::move(_key)), type(_type), entry(std::move(_entry)) + { + if (type == Type::TableMeta) + { + auto meta = KeyPageStorage::TableMeta(entry.get()); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) << LOG_DESC("Data TableMeta") << LOG_KV("table", table) + << LOG_KV("len", entry.size()) << LOG_KV("size", meta.size()) + << LOG_KV("meta", meta); + } + data = std::move(meta); + } + else if (type == Type::Page) + { + auto page = KeyPageStorage::Page(entry.get(), key); + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) + << LOG_DESC("Data Page") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) << LOG_KV("startKey", toHex(page.startKey())) + << LOG_KV("endKey", toHex(page.endKey())) << LOG_KV("len", entry.size()) + << LOG_KV("valid", page.validCount()) << LOG_KV("count", page.count()) + << LOG_KV("pageSize", page.size()); + } + data = std::move(page); + } + else + { // sys table entry + } + }; + Data(const Data& d) = default; + Data& operator=(const Data& d) = default; + Data(Data&& d) = default; + Data& operator=(Data&& d) = default; + std::string table; + std::string key; + Type type = Type::NormalEntry; + Entry entry; + std::variant data; + // std::pair view() const + // { + // return std::make_pair(std::string_view(table), std::string_view(key)); + // } + }; + + struct Bucket + { + Bucket() = default; + std::unordered_map, std::shared_ptr> container; + std::shared_mutex mutex; + std::optional find(std::string_view table, std::string_view key) + { + std::shared_lock lock(mutex); + auto it = container.find(std::make_pair(std::string(table), std::string(key))); + if (it != container.end()) + { + return it->second.get(); + } + return std::nullopt; + } + std::unique_lock lock() { return std::unique_lock(mutex); } + std::shared_lock rLock() { return std::shared_lock(mutex); } + }; + + std::optional> copyData(std::string_view table, std::string_view key) + { + auto [bucket, lock] = getBucket(table, key); + boost::ignore_unused(lock); + auto it = bucket->container.find(std::make_pair(std::string(table), std::string(key))); + if (it != bucket->container.end()) + { + return std::make_optional(std::make_shared(*it->second)); + } + auto prevKeyPage = std::dynamic_pointer_cast(getPrev()); + if (prevKeyPage) + { + return prevKeyPage->copyData(table, key); + } + auto [error, entry] = getRawEntryFromStorage(table, key); + if (error) + { + KeyPage_LOG(ERROR) << LOG_DESC("getData error") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) + << LOG_KV("error", error->errorMessage()); + return std::nullopt; + } + if (c_fileLogLevel <= TRACE) + { + KeyPage_LOG(TRACE) << LOG_DESC("get data from storage") << LOG_KV("table", table) + << LOG_KV("key", toHex(key)) + << LOG_KV("found", entry ? true : false); + } + if (entry) + { + entry->setStatus(Entry::Status::NORMAL); + return std::make_optional(std::make_shared(std::string(table), std::string(key), + std::move(*entry), key.empty() ? Data::Type::TableMeta : Data::Type::Page)); + } + return std::nullopt; + } + virtual std::pair count(const std::string_view& table) override; + +private: + auto getPrev() -> std::shared_ptr + { + std::shared_lock lock(m_prevMutex); + return m_prev; + } + auto getBucketIndex(std::string_view table, std::string_view key) const -> size_t + { + auto hash = std::hash{}(table); + std::ignore = key; + // the table must in one bucket + // boost::hash_combine(hash, std::hash{}(key)); + return hash % m_buckets.size(); + } + + auto changePageKey(std::string table, const std::string& oldPageKey, + const std::string& newPageKey, bool isRevert = false) -> Data* + { + if (newPageKey.empty() && !isRevert) + { + KeyPage_LOG(FATAL) << LOG_DESC("changePageKey to empty") << LOG_KV("table", table) + << LOG_KV("oldPageKey", toHex(oldPageKey)) + << LOG_KV("newPageKey", toHex(newPageKey)); + return nullptr; + } + + auto [bucket, lock] = getMutBucket(table, oldPageKey); + boost::ignore_unused(lock); + auto node = bucket->container.extract(std::make_pair(table, oldPageKey)); + auto* page = &std::get<0>(node.mapped()->data); + KeyPage_LOG(DEBUG) << LOG_DESC("changePageKey") << LOG_KV("table", table) + << LOG_KV("oldPageKey", toHex(oldPageKey)) + << LOG_KV("newPageKey", toHex(newPageKey)) + << LOG_KV("validCount", page->validCount()); + node.key().second = newPageKey; + node.mapped()->key = newPageKey; + if (newPageKey.empty()) + { + return nullptr; + } + auto it = bucket->container.find(std::make_pair(table, newPageKey)); + if (it != bucket->container.end()) + { // erase old page to update data + bucket->container.erase(it); + } + auto ret = bucket->container.insert(std::move(node)); + assert(ret.inserted); + return ret.position->second.get(); + // the bucket also need to be updated + } + + std::pair> getBucket( + std::string_view table, std::string_view key) + { + auto index = getBucketIndex(table, key); + auto& bucket = m_buckets[index]; + return std::make_pair(&bucket, std::shared_lock(bucket.mutex)); + } + + std::pair> getMutBucket( + std::string_view table, std::string_view key) + { + auto index = getBucketIndex(table, key); + auto& bucket = m_buckets[index]; + return std::make_pair(&bucket, std::unique_lock(bucket.mutex)); + } + + void insertNewPage(std::string_view tableView, std::string_view keyView, + KeyPageStorage::TableMeta* meta, Page&& page) + { + // insert page + auto d = std::make_shared(); + d->table = std::string(tableView); + d->key = std::string(keyView); + d->type = Data::Type::Page; + // prepare page info + PageInfo info(page.endKey(), page.validCount(), page.size(), d.get()); + + d->data = std::move(page); + + // d.entry.setDirty(true); + d->entry.setStatus(Entry::Status::MODIFIED); + auto [bucket, lock] = getMutBucket(tableView, keyView); + boost::ignore_unused(lock); + bucket->container.insert_or_assign( + std::make_pair(std::string(tableView), std::string(keyView)), std::move(d)); + lock.unlock(); + // update table meta + meta->insertPageInfoNoLock(std::move(info)); + } + + std::pair> getSysTableRawEntry( + std::string_view table, std::string_view key); + std::pair> getRawEntryFromStorage( + std::string_view table, std::string_view key); + Entry importExistingEntry(std::string_view table, std::string_view key, Entry entry); + + // if data not exist, create an empty one + std::tuple> getData( + std::string_view tableView, std::string_view key, bool mustExist = false); + std::pair> getEntryFromPage( + std::string_view table, std::string_view key); + Error::UniquePtr setEntryToPage(std::string table, std::string key, Entry entry); + uint32_t m_blockVersion = 0; + size_t m_pageSize = 8 * 1024; + size_t m_splitSize; + size_t m_mergeSize; + std::atomic_uint64_t m_readLength{0}; + std::atomic_uint64_t m_writeLength{0}; + std::vector m_buckets; + std::shared_ptr>> m_ignoreTables; + bool m_ignoreNotExist = false; +}; + +} // namespace bcos::storage diff --git a/bcos-table/src/StateStorage.h b/bcos-table/src/StateStorage.h new file mode 100644 index 0000000..517ecdc --- /dev/null +++ b/bcos-table/src/StateStorage.h @@ -0,0 +1,619 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file Table.h + * @author: xingqiangbai + * @date: 2021-04-07 + * @brief interface of Table + * @file StateStorage.h + * @author: ancelmo + * @date: 2021-09-01 + */ +#pragma once + +#include "StateStorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ +template +class BaseStorage : public virtual storage::StateStorageInterface, + public virtual storage::MergeableStorageInterface +{ +public: + using Ptr = std::shared_ptr>; + + explicit BaseStorage(std::shared_ptr prev, + uint32_t _blockVersion = (uint32_t)bcos::protocol::BlockVersion::V3_0_VERSION) + : storage::StateStorageInterface(prev), + m_blockVersion(_blockVersion), + m_buckets(std::thread::hardware_concurrency()) + {} + + BaseStorage(const BaseStorage&) = delete; + BaseStorage& operator=(const BaseStorage&) = delete; + + BaseStorage(BaseStorage&&) = delete; + BaseStorage& operator=(BaseStorage&&) = delete; + + ~BaseStorage() override { m_recoder.clear(); } + + void asyncGetPrimaryKeys(std::string_view table, + const std::optional& condition, + std::function)> _callback) override + { + std::map localKeys; + + if (m_enableTraverse) + { + std::mutex mergeMutex; + tbb::parallel_for(tbb::blocked_range(0U, m_buckets.size()), + [this, &mergeMutex, &localKeys, &table, &condition](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& bucket = m_buckets[i]; + std::unique_lock lock(bucket.mutex); + + decltype(localKeys) bucketKeys; + for (auto& it : bucket.container) + { + if (it.table == table && (!condition || condition->isValid(it.key))) + { + bucketKeys.emplace(it.key, it.entry.status()); + } + } + + std::unique_lock mergeLock(mergeMutex); + localKeys.merge(std::move(bucketKeys)); + } + }); + } + + auto prev = getPrev(); + if (!prev) + { + std::vector resultKeys; + for (auto& localIt : localKeys) + { + if (localIt.second == Entry::NORMAL || localIt.second == Entry::MODIFIED) + { + resultKeys.push_back(std::string(localIt.first)); + } + } + + _callback(nullptr, std::move(resultKeys)); + return; + } + + prev->asyncGetPrimaryKeys(table, condition, + [localKeys = std::move(localKeys), callback = std::move(_callback)]( + auto&& error, auto&& remoteKeys) mutable { + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(StorageError::ReadError, + "Get primary keys from prev failed!", *error), + std::vector()); + return; + } + + for (auto it = remoteKeys.begin(); it != remoteKeys.end();) + { + bool deleted = false; + + auto localIt = localKeys.find(*it); + if (localIt != localKeys.end()) + { + if (localIt->second == Entry::DELETED) + { + it = remoteKeys.erase(it); + deleted = true; + } + + localKeys.erase(localIt); + } + + if (!deleted) + { + ++it; + } + } + + for (auto& localIt : localKeys) + { + if (localIt.second == Entry::NORMAL || localIt.second == Entry::MODIFIED) + { + remoteKeys.push_back(std::string(localIt.first)); + } + } + + callback(nullptr, std::forward(remoteKeys)); + }); + } + + void asyncGetRow(std::string_view tableView, std::string_view keyView, + std::function)> _callback) override + { + auto [bucket, lock] = getBucket(tableView); + boost::ignore_unused(lock); + + auto it = bucket->container.template get<0>().find(std::make_tuple(tableView, keyView)); + if (it != bucket->container.template get<0>().end()) + { + auto& entry = it->entry; + + if (entry.status() == Entry::DELETED) + { + lock.unlock(); + + _callback(nullptr, std::nullopt); + } + else + { + auto optionalEntry = std::make_optional(entry); + if constexpr (enableLRU) + { + updateMRUAndCheck(*bucket, it); + } + + lock.unlock(); + + _callback(nullptr, std::move(optionalEntry)); + } + return; + } + + lock.unlock(); + + auto prev = getPrev(); + if (prev) + { + prev->asyncGetRow(tableView, keyView, + [this, prev, table = std::string(tableView), key = std::string(keyView), _callback]( + Error::UniquePtr error, std::optional entry) { + if (error) + { + _callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(StorageError::ReadError, + "Get row from storage failed!", *error), + {}); + return; + } + + if (entry) + { + _callback(nullptr, + std::make_optional(importExistingEntry(table, key, std::move(*entry)))); + } + else + { + _callback(nullptr, std::nullopt); + } + }); + } + else + { + _callback(nullptr, std::nullopt); + } + } + + void asyncGetRows(std::string_view tableView, + RANGES::any_view + keys, + std::function>)> _callback) override + { + auto size = keys.size(); + std::vector> results(keys.size()); + auto missinges = std::tuple, + std::vector>>(); + + std::atomic_ulong existsCount = 0; + + for (auto i = 0U; i < keys.size(); ++i) + { + auto [bucket, lock] = getBucket(tableView); + boost::ignore_unused(lock); + + auto it = bucket->container.find(std::make_tuple(tableView, std::string_view(keys[i]))); + if (it != bucket->container.end()) + { + auto& entry = it->entry; + if (entry.status() == Entry::NORMAL || entry.status() == Entry::MODIFIED) + { + results[i].emplace(entry); + + if constexpr (enableLRU) + { + updateMRUAndCheck(*bucket, it); + } + } + else + { + results[i] = std::nullopt; + } + ++existsCount; + } + else + { + std::get<1>(missinges).emplace_back(std::string(keys[i]), i); + std::get<0>(missinges).emplace_back(keys[i]); + } + } + + auto prev = getPrev(); + if (existsCount < keys.size() && prev) + { + prev->asyncGetRows(tableView, std::get<0>(missinges), + [this, table = std::string(tableView), callback = std::move(_callback), + missingIndexes = std::move(std::get<1>(missinges)), + results = std::move(results)]( + auto&& error, std::vector>&& entries) mutable { + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(StorageError::ReadError, + "async get perv rows failed!", *error), + std::vector>()); + return; + } + + for (size_t i = 0; i < entries.size(); ++i) + { + auto& entry = entries[i]; + + if (entry) + { + results[std::get<1>(missingIndexes[i])].emplace( + importExistingEntry(table, + std::move(std::get<0>(missingIndexes[i])), std::move(*entry))); + } + } + + callback(nullptr, std::move(results)); + }); + } + else + { + _callback(nullptr, std::move(results)); + } + } + + void asyncSetRow(std::string_view tableView, std::string_view keyView, Entry entry, + std::function callback) override + { + if (m_readOnly) + { + callback(BCOS_ERROR_UNIQUE_PTR( + StorageError::ReadOnly, "Try to operate a read-only storage")); + return; + } + + ssize_t updatedCapacity = entry.size(); + std::optional entryOld; + + auto [bucket, lock] = getBucket(tableView); + boost::ignore_unused(lock); + + auto it = bucket->container.find(std::make_tuple(tableView, keyView)); + if (it != bucket->container.end()) + { + auto& existsEntry = it->entry; + entryOld.emplace(std::move(existsEntry)); + + updatedCapacity -= entryOld->size(); + + bucket->container.modify(it, [&entry](Data& data) { data.entry = std::move(entry); }); + + if constexpr (enableLRU) + { + updateMRUAndCheck(*bucket, it); + } + } + else + { + bucket->container.emplace( + Data{std::string(tableView), std::string(keyView), std::move(entry)}); + } + + if (m_recoder.local()) + { + m_recoder.local()->log( + Recoder::Change(std::string(tableView), std::string(keyView), std::move(entryOld))); + } + + bucket->capacity += updatedCapacity; + + lock.unlock(); + callback(nullptr); + } + + void parallelTraverse(bool onlyDirty, std::function + callback) const override + { + tbb::parallel_for(tbb::blocked_range(0, m_buckets.size()), + [this, &onlyDirty, &callback](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& bucket = m_buckets[i]; + + for (auto& it : bucket.container) + { + auto& entry = it.entry; + if (!onlyDirty || entry.dirty()) + { + callback(it.table, it.key, entry); + } + } + } + }); + } + + void merge(bool onlyDirty, const TraverseStorageInterface& source) override + { + if (&source == this) + { + STORAGE_LOG(ERROR) << "Can't merge from self!"; + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Can't merge from self!")); + } + + std::atomic_size_t count = 0; + source.parallelTraverse( + onlyDirty, [this, &count](const std::string_view& table, const std::string_view& key, + const storage::Entry& entry) { + asyncSetRow(table, key, entry, [](Error::UniquePtr) {}); + ++count; + return true; + }); + + STORAGE_LOG(INFO) << "Successful merged records" << LOG_KV("count", count); + } + + crypto::HashType hash(const bcos::crypto::Hash::Ptr& hashImpl) const override + { + bcos::crypto::HashType totalHash; + + std::vector hashes(m_buckets.size()); + tbb::parallel_for(tbb::blocked_range(0U, m_buckets.size()), + [this, &hashImpl, &hashes](auto const& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& bucket = m_buckets[i]; + + bcos::crypto::HashType bucketHash(0); + for (auto& it : bucket.container) + { + auto& entry = it.entry; + if (entry.dirty()) + { + auto entryHash = hashImpl->hash(it.table) ^ hashImpl->hash(it.key) ^ + entry.hash(it.table, it.key, hashImpl, m_blockVersion); + bucketHash ^= entryHash; + } + } + + hashes[i] ^= bucketHash; + } + }); + + for (auto const& it : hashes) + { + totalHash ^= it; + } + + + return totalHash; + } + + + void rollback(const Recoder& recoder) override + { + if (m_readOnly) + { + return; + } + + for (const auto& change : recoder) + { + ssize_t updateCapacity = 0; + auto [bucket, lock] = getBucket(change.table); + boost::ignore_unused(lock); + + auto it = bucket->container.find( + std::make_tuple(std::string_view(change.table), std::string_view(change.key))); + if (change.entry) + { + if (it != bucket->container.end()) + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + STORAGE_LOG(TRACE) + << "Revert exists: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + + updateCapacity = change.entry->size() - it->entry.size(); + + const auto& rollbackEntry = change.entry; + bucket->container.modify(it, + [&rollbackEntry](Data& data) { data.entry = std::move(*rollbackEntry); }); + } + else + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + STORAGE_LOG(TRACE) + << "Revert deleted: " << change.table << " | " << toHex(change.key) + << " | " << toHex(change.entry->get()); + } + updateCapacity = change.entry->size(); + bucket->container.emplace( + Data{change.table, change.key, std::move(*(change.entry))}); + } + } + else + { // nullopt means the key is not exist in m_cache + if (it != bucket->container.end()) + { + if (c_fileLogLevel <= bcos::LogLevel::TRACE) + { + STORAGE_LOG(TRACE) + << "Revert insert: " << change.table << " | " << toHex(change.key); + } + + updateCapacity = 0 - it->entry.size(); + bucket->container.erase(it); + } + else + { + auto message = (boost::format("Not found rollback entry: %s:%s") % + change.table % change.key) + .str(); + + BOOST_THROW_EXCEPTION(BCOS_ERROR(StorageError::UnknownError, message)); + } + } + + bucket->capacity += updateCapacity; + } + } + + void setEnableTraverse(bool enableTraverse) { m_enableTraverse = enableTraverse; } + void setMaxCapacity(ssize_t capacity) { m_maxCapacity = capacity; } + +private: + Entry importExistingEntry(std::string_view table, std::string_view key, Entry entry) + { + if (m_readOnly) + { + return entry; + } + + entry.setStatus(Entry::NORMAL); + auto updateCapacity = entry.size(); + + auto [bucket, lock] = getBucket(table); + auto it = bucket->container.find(std::make_tuple(table, key)); + + if (it == bucket->container.end()) + { + it = bucket->container + .emplace(Data{std::string(table), std::string(key), std::move(entry)}) + .first; + + bucket->capacity += updateCapacity; + } + else + { + STORAGE_LOG(DEBUG) << "Fail import existsing entry, " << table << " | " << toHex(key); + } + + return it->entry; + } + + std::shared_ptr getPrev() + { + std::shared_lock lock(m_prevMutex); + auto prev = m_prev; + return prev; + } + + bool m_enableTraverse = false; + + constexpr static int64_t DEFAULT_CAPACITY = 32L * 1024 * 1024; + int64_t m_maxCapacity = DEFAULT_CAPACITY; + + struct Data + { + std::string table; + std::string key; + Entry entry; + + std::tuple view() const + { + return std::make_tuple(std::string_view(table), std::string_view(key)); + } + }; + + using HashContainer = boost::multi_index_container, &Data::view>>>>; + using LRUHashContainer = boost::multi_index_container, &Data::view>>, + boost::multi_index::sequenced<>>>; + using Container = std::conditional_t; + + struct Bucket + { + Container container; + std::mutex mutex; + ssize_t capacity = 0; + }; + uint32_t m_blockVersion = 0; + std::vector m_buckets; + + std::tuple> getBucket(std::string_view table) + { + auto hash = std::hash{}(table); + auto index = hash % m_buckets.size(); + + auto& bucket = m_buckets[index]; + return std::make_tuple(&bucket, std::unique_lock(bucket.mutex)); + } + + void updateMRUAndCheck( + Bucket& bucket, typename Container::template nth_index<0>::type::iterator it) + { + auto seqIt = bucket.container.template get<1>().iterator_to(*it); + bucket.container.template get<1>().relocate( + bucket.container.template get<1>().end(), seqIt); + + size_t clearCount = 0; + while (bucket.capacity > m_maxCapacity && !bucket.container.empty()) + { + auto& item = bucket.container.template get<1>().front(); + bucket.capacity -= item.entry.size(); + + bucket.container.template get<1>().pop_front(); + ++clearCount; + } + + if (clearCount > 0) + { + STORAGE_LOG(TRACE) << "LRUStorage cleared:" << clearCount + << ", current size: " << bucket.container.size(); + } + } +}; + +using StateStorage = BaseStorage; +using LRUStateStorage = BaseStorage; + +} // namespace bcos::storage diff --git a/bcos-table/src/StateStorageFactory.h b/bcos-table/src/StateStorageFactory.h new file mode 100644 index 0000000..a89144c --- /dev/null +++ b/bcos-table/src/StateStorageFactory.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file CacheStorageFactory.h + * @author: wenlinli + * @date: 2022-12-14 + */ + +#pragma once + +#include "StateStorageInterface.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-tool/BfsFileFactory.h" +#include +#include +#include +#include + + +namespace bcos::storage +{ + +// FileSystem paths +static const char* const FS_ROOT = "/"; +static const char* const FS_APPS = "/apps"; +static const char* const FS_USER = "/usr"; +static const char* const FS_SYS_BIN = "/sys"; +static const char* const FS_USER_TABLE = "/tables"; + +class StateStorageFactory +{ +public: + using Ptr = std::shared_ptr; + StateStorageFactory(size_t keyPageSize) : m_keyPageSize(keyPageSize) {} + + virtual ~StateStorageFactory() = default; + + virtual storage::StateStorageInterface::Ptr createStateStorage( + bcos::storage::StorageInterface::Ptr storage, uint32_t compatibilityVersion) + { + STORAGE_LOG(TRACE) << LOG_KV("compatibilityVersion, ", compatibilityVersion) + << LOG_KV("protocol::BlockVersion::V3_1_VERSION", + (uint32_t)protocol::BlockVersion::V3_1_VERSION) + << LOG_KV("keyPageSize", m_keyPageSize); + + auto keyPageIgnoreTables = std::make_shared>>( + std::initializer_list>::value_type>{ + std::string(bcos::ledger::SYS_CONFIG), + std::string(bcos::ledger::SYS_CONSENSUS), + bcos::storage::FS_ROOT, + bcos::storage::FS_APPS, + bcos::storage::FS_USER, + bcos::storage::FS_SYS_BIN, + bcos::storage::FS_USER_TABLE, + bcos::storage::StorageInterface::SYS_TABLES, + }); + STORAGE_LOG(TRACE) << LOG_KV("keyPageIgnoreTables Size", keyPageIgnoreTables->size()); + + if (m_keyPageSize > 0) + { + if (compatibilityVersion >= (uint32_t)protocol::BlockVersion::V3_1_VERSION) + { + if (keyPageIgnoreTables->contains(tool::FS_ROOT)) + { + for (const auto& _sub : tool::FS_ROOT_SUBS) + { + std::string sub(_sub); + keyPageIgnoreTables->erase(sub); + } + } + keyPageIgnoreTables->insert( + {std::string(ledger::SYS_CODE_BINARY), std::string(ledger::SYS_CONTRACT_ABI)}); + } + STORAGE_LOG(TRACE) << LOG_KV("keyPageSize", m_keyPageSize) + << LOG_KV("compatibilityVersion", compatibilityVersion) + << LOG_KV("keyPageIgnoreTables size", keyPageIgnoreTables->size()); + return std::make_shared( + storage, m_keyPageSize, compatibilityVersion, keyPageIgnoreTables, true); + } + return std::make_shared(storage); + } + +private: + size_t m_keyPageSize; +}; + +} // namespace bcos::storage diff --git a/bcos-table/src/StateStorageInterface.h b/bcos-table/src/StateStorageInterface.h new file mode 100644 index 0000000..8fc76de --- /dev/null +++ b/bcos-table/src/StateStorageInterface.h @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of StateStorage, TableFactory in FISCO BCOS 2.0 + * @file Table.h + * @author: xingqiangbai + * @date: 2022-04-19 + */ +#pragma once + +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "tbb/enumerable_thread_specific.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ +class Recoder +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + struct Change + { + Change(std::string _table, std::string _key, std::optional _entry) + : table(std::move(_table)), key(std::move(_key)), entry(std::move(_entry)) + {} + Change(const Change&) = delete; + Change& operator=(const Change&) = delete; + Change(Change&&) noexcept = default; + Change& operator=(Change&&) noexcept = default; + + std::string table; + std::string key; + std::optional entry; + }; + + void log(Change&& change) { m_changes.emplace_front(std::move(change)); } + auto begin() const { return m_changes.cbegin(); } + auto end() const { return m_changes.cend(); } + void clear() { m_changes.clear(); } + +private: + std::list m_changes; +}; + +class StateStorageInterface : public virtual storage::TraverseStorageInterface + +{ +public: + using Ptr = std::shared_ptr; + StateStorageInterface(std::shared_ptr prev) + : storage::TraverseStorageInterface(), m_prev(std::move(prev)){}; + virtual std::optional
openTable(const std::string_view& tableView) + { + std::promise>> openPromise; + asyncOpenTable(tableView, [&](auto&& error, auto&& table) { + openPromise.set_value({std::move(error), std::move(table)}); + }); + + auto [error, table] = openPromise.get_future().get(); + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + return table; + } + + virtual std::optional
createTable(std::string _tableName, std::string _valueFields) + { + std::promise>> createPromise; + asyncCreateTable( + _tableName, _valueFields, [&](Error::UniquePtr&& error, std::optional
&& table) { + createPromise.set_value({std::move(error), std::move(table)}); + }); + auto [error, table] = createPromise.get_future().get(); + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + return table; + } + + virtual std::pair count(const std::string_view& _table [[maybe_unused]]) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Called interface count method")); + } + + virtual crypto::HashType hash(const bcos::crypto::Hash::Ptr& hashImpl) const = 0; + virtual void setPrev(std::shared_ptr prev) + { + std::unique_lock lock(m_prevMutex); + m_prev = std::move(prev); + } + virtual void rollback(const Recoder& recoder) = 0; + virtual void setRecoder(typename Recoder::Ptr recoder) { m_recoder.local().swap(recoder); } + virtual void setReadOnly(bool readOnly) { m_readOnly = readOnly; } + +protected: + bool m_readOnly = false; + tbb::enumerable_thread_specific m_recoder; + std::shared_ptr m_prev; + std::shared_mutex m_prevMutex; +}; + + +} // namespace bcos::storage diff --git a/bcos-table/src/StorageImpl.h b/bcos-table/src/StorageImpl.h new file mode 100644 index 0000000..9be6d15 --- /dev/null +++ b/bcos-table/src/StorageImpl.h @@ -0,0 +1,158 @@ +#pragma once + +#include "bcos-concepts/Basic.h" +#include "bcos-concepts/ByteBuffer.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ + +// TODO: Only for demo now +template +class StorageImpl : public concepts::storage::StorageBase> +{ +public: + task::Task impl_getRows(concepts::bytebuffer::ByteBuffer auto const& tableName, + concepts::storage::Keys auto const& keys, concepts::storage::Entries auto& entriesOut) + { + concepts::resizeTo(entriesOut, RANGES::size(keys)); + auto [bucket, lock] = getBucket(tableName); + auto& index = bucket->container.template get<0>(); + + for (auto const& [keyIt, outIt] : + RANGES::zip_view(keys, entriesOut)) + { + auto keyView = concepts::bytebuffer::toView(keyIt); + auto entryIt = index.find(std::make_tuple(tableName, keyView)); + if (entryIt != index.end() && entryIt->entry.status() != Entry::DELETED) + { + if constexpr (withMRU) + { + updateMRUAndCheck(*bucket, entryIt); + } + outIt = entryIt->entry; + } + } + } + + task::Task impl_setRows(concepts::bytebuffer::ByteBuffer auto const& tableName, + concepts::storage::Keys auto const& keys, concepts::storage::Entries auto const& entries) + { + if (RANGES::size(keys) != RANGES::size(entries)) + { + BOOST_THROW_EXCEPTION(1); + } + + auto [bucket, lock] = getBucket(tableName); + auto& tableNames = bucket->tableNames; + auto& index = bucket->container.template get<0>(); + + auto intputTablNameView = concepts::bytebuffer::toView(tableName); + std::string_view tableNameView; + auto tableNameIt = tableNames.find(intputTablNameView); + if (tableNameIt == tableNames.end()) + { + tableNameIt = tableNames.emplace(std::string(intputTablNameView)); + } + tableNameView = *tableNameIt; + + for (auto const& [keyIt, valueIt] : + RANGES::zip_view(keys, entries)) + { + auto keyView = concepts::bytebuffer::toView(keyIt); + auto entryIt = index.find(std::make_tuple(tableName, keyView)); + + if (entryIt != index.end()) + { + auto& value = *valueIt; + bucket->container.modify(entryIt, [&value](Data& data) { data.entry = value; }); + + if constexpr (withMRU) + { + updateMRUAndCheck(*bucket, entryIt); + } + } + } + } + +private: + constexpr static int64_t DEFAULT_CAPACITY = 32L * 1024 * 1024; + int64_t m_maxCapacity = DEFAULT_CAPACITY; + + struct Data + { + std::string_view tableName; + std::string key; + Entry entry; + + std::tuple view() const + { + return std::make_tuple(tableName, std::string_view(key)); + } + }; + + using OrderedContainer = boost::multi_index_container, &Data::view>>>>; + using LRUOrderedContainer = boost::multi_index_container, &Data::view>>, + boost::multi_index::sequenced<>>>; + using Container = std::conditional_t; + + struct Bucket + { + std::set tableNames; + Container container; + int32_t capacity = 0; + + std::mutex mutex; + }; + std::vector m_buckets; + + std::tuple> getBucket( + concepts::bytebuffer::ByteBuffer auto const& tableName) + { + constexpr static std::hash hasher; + + auto hash = hasher(toView(tableName)); + auto index = hash % m_buckets.size(); + + auto& bucket = m_buckets[index]; + return std::make_tuple(&bucket, std::unique_lock(bucket.mutex)); + } + + void updateMRUAndCheck(Bucket& bucket, + typename Container::template nth_index<0>::type::iterator entryIt) requires withMRU + { + auto& index = bucket.container.template get<1>(); + auto seqIt = index.iterator_to(*entryIt); + index.relocate(index.end(), seqIt); + + size_t clearCount = 0; + while (bucket.capacity > m_maxCapacity && !bucket.container.empty()) + { + auto& item = index.front(); + bucket.capacity -= item.entry.size(); + + index.pop_front(); + ++clearCount; + } + + if (clearCount > 0) + { + STORAGE_LOG(TRACE) << "LRUStorage cleared:" << clearCount + << ", current size: " << bucket.container.size(); + } + } +}; + +} // namespace bcos::storage \ No newline at end of file diff --git a/bcos-table/src/StorageInterface.cpp b/bcos-table/src/StorageInterface.cpp new file mode 100644 index 0000000..2966479 --- /dev/null +++ b/bcos-table/src/StorageInterface.cpp @@ -0,0 +1,161 @@ +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include + +using namespace bcos::storage; + +TableInfo::ConstPtr StorageInterface::getSysTableInfo(std::string_view tableName) +{ + struct SystemTables + { + SystemTables() + { + tables.push_back(std::make_shared( + std::string(SYS_TABLES), std::vector{SYS_TABLE_VALUE_FIELDS})); + } + + std::vector tables; + } static m_systemTables; + + if (tableName == SYS_TABLES) + { + return m_systemTables.tables[0]; + } + + return nullptr; +} + +void StorageInterface::asyncCreateTable(std::string _tableName, std::string _valueFields, + std::function)> callback) +{ + asyncOpenTable(SYS_TABLES, [this, tableName = std::move(_tableName), + callback = std::move(callback), + valueFields = std::move(_valueFields)]( + auto&& error, auto&& sysTable) { + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR(-1, "Open sys_tables failed!", *error), {}); + return; + } + + sysTable->asyncGetRow(tableName, [this, tableName, callback = std::move(callback), + &sysTable, valueFields = std::move(valueFields)]( + auto&& error, auto&& entry) { + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + StorageError::ReadError, "Get table info row failed!", *error), + {}); + return; + } + + if (entry) + { + callback(BCOS_ERROR_UNIQUE_PTR( + StorageError::TableExists, "Table: " + tableName + " already exists"), + {}); + return; + } + + auto tableEntry = sysTable->newEntry(); + tableEntry.setField(0, std::string(valueFields)); + + sysTable->asyncSetRow(tableName, tableEntry, + [this, callback, tableName, valueFields = std::move(valueFields)](auto&& error) { + if (error) + { + callback(BCOS_ERROR_WITH_PREV_UNIQUE_PTR( + -1, "Put table info into sys_tables failed!", *error), + {}); + return; + } + + std::vector fields; + boost::split(fields, valueFields, boost::is_any_of(",")); + + auto tableInfo = std::make_shared( + std::move(tableName), std::move(fields)); + auto table = Table(this, tableInfo); + + callback(nullptr, std::make_optional(std::move(table))); + }); + }); + }); +} + +void StorageInterface::asyncOpenTable(std::string_view tableName, + std::function)> callback) +{ + asyncGetTableInfo(tableName, [this, callback = std::move(callback)]( + Error::UniquePtr error, TableInfo::ConstPtr tableInfo) { + if (error) + { + callback(std::move(error), std::nullopt); + return; + } + + if (tableInfo) + { + callback(nullptr, Table(this, tableInfo)); + } + else + { + callback(nullptr, std::nullopt); + } + }); +} + +void StorageInterface::asyncGetTableInfo( + std::string_view tableName, std::function callback) +{ + auto sysTableInfo = getSysTableInfo(tableName); + if (sysTableInfo) + { + callback(nullptr, std::move(sysTableInfo)); + + return; + } + else + { + asyncOpenTable( + SYS_TABLES, [callback = std::move(callback), tableName = std::string(tableName)]( + Error::UniquePtr&& error, std::optional
&& sysTable) { + if (error) + { + callback(std::move(error), {}); + return; + } + + if (!sysTable) + { + callback(BCOS_ERROR_UNIQUE_PTR(StorageError::SystemTableNotExists, + "System table: " + std::string(SYS_TABLES) + " not found!"), + {}); + return; + } + + sysTable->asyncGetRow(tableName, + [tableName, callback = std::move(callback)](auto&& error, auto&& entry) { + if (error) + { + callback(std::move(error), {}); + return; + } + + if (!entry) + { + callback(nullptr, {}); + return; + } + + std::vector fields; + boost::split(fields, entry->getField(0), boost::is_any_of(",")); + + auto tableInfo = std::make_shared( + std::move(tableName), std::move(fields)); + + callback(nullptr, std::move(tableInfo)); + }); + }); + } +} \ No newline at end of file diff --git a/bcos-table/src/StorageWrapper.h b/bcos-table/src/StorageWrapper.h new file mode 100644 index 0000000..5635586 --- /dev/null +++ b/bcos-table/src/StorageWrapper.h @@ -0,0 +1,169 @@ +#pragma once + +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include + +namespace bcos::storage +{ +using GetPrimaryKeysReponse = std::tuple>; +using GetRowResponse = std::tuple>; +using GetRowsResponse = std::tuple>>; +using SetRowResponse = std::tuple; +using OpenTableResponse = std::tuple>; + + +class StorageWrapper +{ +public: + StorageWrapper(storage::StateStorageInterface::Ptr storage, bcos::storage::Recoder::Ptr recoder) + : m_storage(std::move(storage)), m_recoder(std::move(recoder)) + {} + + StorageWrapper(const StorageWrapper&) = delete; + StorageWrapper(StorageWrapper&&) = delete; + StorageWrapper& operator=(const StorageWrapper&) = delete; + StorageWrapper& operator=(StorageWrapper&&) = delete; + + virtual ~StorageWrapper() = default; + + std::vector getPrimaryKeys( + const std::string_view& table, const std::optional& _condition) + { + GetPrimaryKeysReponse value; + m_storage->asyncGetPrimaryKeys( + table, _condition, [&value](auto&& error, auto&& keys) mutable { + value = {std::move(error), std::move(keys)}; + }); + + // After coroutine switch, set the recoder + setRecoder(m_recoder); + + auto& [error, keys] = value; + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + return std::move(keys); + } + + virtual std::optional getRow( + const std::string_view& table, const std::string_view& _key) + { + GetRowResponse value; + m_storage->asyncGetRow(table, _key, [&value](auto&& error, auto&& entry) mutable { + value = {std::forward(error), std::forward(entry)}; + }); + + auto& [error, entry] = value; + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + return std::move(entry); + } + + virtual std::vector> getRows(const std::string_view& table, + RANGES::any_view + keys) + { + GetRowsResponse value; + m_storage->asyncGetRows(table, keys, [&value](auto&& error, auto&& entries) mutable { + value = {std::move(error), std::move(entries)}; + }); + + + auto& [error, entries] = value; + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + return std::move(entries); + } + + virtual void setRow( + const std::string_view& table, const std::string_view& key, storage::Entry entry) + { + SetRowResponse value; + + m_storage->asyncSetRow(table, key, std::move(entry), + [&value](auto&& error) mutable { value = std::tuple{std::move(error)}; }); + + auto& [error] = value; + + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + } + + std::optional createTable(std::string _tableName, std::string _valueFields) + { + auto ret = createTableWithoutException(_tableName, _valueFields); + if (std::get<0>(ret)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(ret))); + } + + return std::get<1>(ret); + } + + std::tuple> createTableWithoutException( + std::string _tableName, std::string _valueFields) + { + std::promise createPromise; + m_storage->asyncCreateTable(std::move(_tableName), std::move(_valueFields), + [&](Error::UniquePtr&& error, auto&& table) mutable { + createPromise.set_value({std::move(error), std::move(table)}); + }); + auto value = createPromise.get_future().get(); + return value; + } + + std::optional openTable(std::string_view tableName) + { + auto ret = openTableWithoutException(tableName); + if (std::get<0>(ret)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(ret))); + } + + return std::get<1>(ret); + } + + std::pair count(const std::string_view& _table) + { + return m_storage->count(_table); + } + + std::tuple> openTableWithoutException( + std::string_view tableName) + { + std::promise openPromise; + m_storage->asyncOpenTable(tableName, [&](auto&& error, auto&& table) mutable { + openPromise.set_value({std::move(error), std::move(table)}); + }); + auto value = openPromise.get_future().get(); + return value; + } + + void setRecoder(storage::Recoder::Ptr recoder) { m_storage->setRecoder(std::move(recoder)); } + +private: + storage::StateStorageInterface::Ptr m_storage; + bcos::storage::Recoder::Ptr m_recoder; +}; +} // namespace bcos::storage \ No newline at end of file diff --git a/bcos-table/src/Table.cpp b/bcos-table/src/Table.cpp new file mode 100644 index 0000000..426ee29 --- /dev/null +++ b/bcos-table/src/Table.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface of Table + * @file Table.h + * @author: xingqiangbai + * @date: 2021-04-07 + */ +#include "bcos-framework/storage/Table.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "tbb/concurrent_vector.h" +#include "tbb/parallel_for.h" +#include "tbb/parallel_invoke.h" +#include +#include + +using namespace std; + +namespace bcos::storage +{ +std::optional Table::getRow(std::string_view _key) +{ + std::promise>> promise; + + asyncGetRow(_key, [&promise](auto error, auto entry) { + promise.set_value({std::move(error), std::move(entry)}); + }); + + auto result = promise.get_future().get(); + + if (std::get<0>(result)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(result))); + } + + return std::get<1>(result); +} + +std::vector> Table::getRows(RANGES::any_view + keys) +{ + std::promise>>> promise; + asyncGetRows(keys, [&promise](auto error, auto entries) { + promise.set_value(std::tuple{std::move(error), std::move(entries)}); + }); + + auto result = promise.get_future().get(); + + if (std::get<0>(result)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(result))); + } + + return std::get<1>(result); +} + +std::vector Table::getPrimaryKeys(std::optional const& _condition) +{ + std::promise>> promise; + asyncGetPrimaryKeys(_condition, [&promise](auto&& error, auto&& keys) { + promise.set_value(std::tuple{std::move(error), std::move(keys)}); + }); + auto result = promise.get_future().get(); + + if (std::get<0>(result)) + { + BOOST_THROW_EXCEPTION(*(std::get<0>(result))); + } + + return std::get<1>(result); +} + +void Table::setRow(std::string_view _key, Entry _entry) +{ + std::promise promise; + m_storage->asyncSetRow(m_tableInfo->name(), _key, std::move(_entry), + [&promise](auto&& error) { promise.set_value(std::move(error)); }); + auto result = promise.get_future().get(); + + if (result) + { + BOOST_THROW_EXCEPTION(*result); + } +} + +void Table::asyncGetPrimaryKeys(std::optional const& _condition, + std::function)> _callback) noexcept +{ + m_storage->asyncGetPrimaryKeys(m_tableInfo->name(), _condition, _callback); +} + +void Table::asyncGetRow(std::string_view _key, + std::function)> _callback) noexcept +{ + m_storage->asyncGetRow(m_tableInfo->name(), _key, + [callback = std::move(_callback)](Error::UniquePtr error, std::optional entry) { + callback(std::move(error), std::move(entry)); + }); +} + +void Table::asyncGetRows( + RANGES::any_view + keys, + std::function>)> _callback) noexcept +{ + m_storage->asyncGetRows(m_tableInfo->name(), std::move(keys), + [callback = std::move(_callback)]( + Error::UniquePtr error, std::vector> entries) { + callback(std::move(error), std::move(entries)); + }); +} + +void Table::asyncSetRow( + std::string_view key, Entry entry, std::function callback) noexcept +{ + m_storage->asyncSetRow(m_tableInfo->name(), key, std::move(entry), callback); +} + +} // namespace bcos::storage diff --git a/bcos-table/test/CMakeLists.txt b/bcos-table/test/CMakeLists.txt new file mode 100644 index 0000000..867b1ce --- /dev/null +++ b/bcos-table/test/CMakeLists.txt @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of libtable +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp" "*.h" "*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-table) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${TABLE_TARGET} Boost::unit_test_framework) +include(SearchTestCases) +config_test_cases("" "${SOURCES}" ${TEST_BINARY_NAME} "${EXCLUDE_SUITES}") +# add_test(NAME test-table WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) diff --git a/bcos-table/test/unittests/libtable/Entry.cpp b/bcos-table/test/unittests/libtable/Entry.cpp new file mode 100644 index 0000000..71c205e --- /dev/null +++ b/bcos-table/test/unittests/libtable/Entry.cpp @@ -0,0 +1,223 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the Entry + * @file Entry.cpp + */ + +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-framework/storage/Table.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::storage; + +namespace bcos +{ +namespace test +{ +struct EntryFixture +{ + EntryFixture() + { + tableInfo = std::make_shared("testTable", std::vector{"key2"}); + } + + ~EntryFixture() {} + + std::shared_ptr tableInfo; +}; +BOOST_FIXTURE_TEST_SUITE(EntryTest, EntryFixture) + +BOOST_AUTO_TEST_CASE(viewEqual) +{ + std::string a = "value"; + + BOOST_CHECK_EQUAL(a, "value"); + BOOST_CHECK_EQUAL(std::string_view(a), "value"); +} + +BOOST_AUTO_TEST_CASE(copyFrom) +{ + auto entry1 = std::make_shared(tableInfo); + auto entry2 = std::make_shared(tableInfo); + BOOST_CHECK_EQUAL(entry1->dirty(), false); + entry1->setField(0, "value"); + BOOST_TEST(entry1->dirty() == true); + BOOST_TEST(entry1->size() == 5); + + *entry2 = *entry1; + + { + auto entry3 = Entry(*entry1); + + entry3.setField(0, "i am key2"); + + auto entry4(std::move(entry3)); + + auto entry5(*entry2); + + auto entry6(std::move(entry5)); + } + + BOOST_CHECK_EQUAL(entry2->getField(0), "value"sv); + + entry2->setField(0, "value2"); + + BOOST_CHECK_EQUAL(entry2->getField(0), "value2"); + BOOST_CHECK_EQUAL(entry1->getField(0), "value"); + + entry2->setField(0, "value3"); + BOOST_TEST(entry2->size() == 6); + BOOST_TEST(entry2->getField(0) == "value3"); + *entry2 = *entry2; + BOOST_TEST(entry2->dirty() == true); + // entry2->setDirty(false); + entry2->setStatus(Entry::Status::NORMAL); + BOOST_TEST(entry2->dirty() == false); + // test setField lValue and rValue + entry2->setField(0, string("value2")); + BOOST_TEST(entry2->dirty() == true); + BOOST_TEST(entry2->size() == 6); + auto value2 = "value2"; + entry2->setField(0, value2); +} + +BOOST_AUTO_TEST_CASE(functions) +{ + auto entry = std::make_shared(tableInfo); + BOOST_TEST(entry->dirty() == false); + BOOST_TEST(entry->status() == Entry::Status::EMPTY); + entry->setStatus(Entry::Status::DELETED); + BOOST_TEST(entry->status() == Entry::Status::DELETED); + BOOST_TEST(entry->dirty() == true); +} + +BOOST_AUTO_TEST_CASE(BytesField) +{ + Entry entry; + + std::string value = "abcdefghijklmn"; + std::vector data; + data.assign(value.begin(), value.end()); + + entry.importFields({std::string(value)}); + + BOOST_CHECK_EQUAL(entry.getField(0), value); + + Entry entry2; + entry2.importFields({data}); + + BOOST_CHECK_EQUAL(entry2.getField(0), value); +} + +BOOST_AUTO_TEST_CASE(capacity) +{ + Entry entry; + + entry.importFields({std::string("abc")}); + + entry.setField( + 0, std::string("abdflsakdjflkasjdfoiqwueroi!!!!sdlkfjsldfbclsadflaksjdfpqweioruaaa")); + + BOOST_CHECK_LT(entry.size(), 100); + BOOST_CHECK_GT(entry.size(), 0); +} + +BOOST_AUTO_TEST_CASE(object) +{ + std::tuple value = std::make_tuple(100, "hello", "world"); + + Entry entry; + entry.setObject(value); + + auto out = entry.getObject>(); + + BOOST_CHECK(out == value); +} + +BOOST_AUTO_TEST_CASE(largeObject) +{ + Entry entry; + entry.setField(0, std::string(1024, 'a')); + + BOOST_CHECK_EQUAL(entry.getField(0), std::string(1024, 'a')); +} + +BOOST_AUTO_TEST_CASE(entryHash) +{ + auto data = "Hello world!"s; + auto table = "table!"s; + auto key = "key!"s; + + Entry entry; + entry.setStatus(Entry::MODIFIED); + entry.setField(0, data); + + auto sm3 = std::make_shared(); + auto oldHash = entry.hash(table, key, sm3, 0); + auto oldExpect = sm3->hash(bytesConstRef((bcos::byte*)data.data(), data.size())); + BOOST_CHECK_EQUAL(oldHash, oldExpect); + + entry.setStatus(Entry::DELETED); + auto deletedHash = entry.hash(table, key, sm3, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + + auto anyHasher = sm3->hasher(); + auto deletedExpect = std::visit( + [&](auto& hasher) { + hasher.update(table); + hasher.update(key); + + bcos::crypto::HashType hash; + hasher.final(hash); + return hash; + }, + anyHasher); + BOOST_CHECK_EQUAL(deletedHash, deletedExpect); + + entry.setStatus(Entry::MODIFIED); + entry.setField(0, data); + auto modifyHash = entry.hash(table, key, sm3, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + anyHasher = sm3->hasher(); + auto modifyExpect = std::visit( + [&](auto& hasher) { + hasher.update(table); + hasher.update(key); + hasher.update(data); + + bcos::crypto::HashType hash; + hasher.final(hash); + return hash; + }, + anyHasher); + BOOST_CHECK_EQUAL(modifyHash, modifyExpect); + + entry.setStatus(Entry::NORMAL); + auto normalHash = entry.hash(table, key, sm3, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + BOOST_CHECK_EQUAL(normalHash, bcos::crypto::HashType{}); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-table/test/unittests/libtable/Hash.h b/bcos-table/test/unittests/libtable/Hash.h new file mode 100644 index 0000000..90d6e6b --- /dev/null +++ b/bcos-table/test/unittests/libtable/Hash.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the Header256Hash return first 32 byte as hash result + * @file Header256Hash.h + */ + +#include +#include + +namespace bcos +{ +namespace crypto +{ +class Header256Hash : public Hash +{ +public: + typedef std::shared_ptr Ptr; + Header256Hash() = default; + virtual ~Header256Hash(){}; + HashType hash(bytesConstRef _data) override + { + std::hash hash; + auto h = hash(std::string_view((const char*)_data.data(), _data.size())); + uint8_t hash_result[32] = {0}; + memcpy(hash_result, &h, sizeof(h)); + return HashType(hash_result, 32); + } + bcos::crypto::hasher::AnyHasher hasher() const override + { + return bcos::crypto::hasher::AnyHasher{bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher{}}; + }; +}; + +} // namespace crypto + +} // namespace bcos diff --git a/bcos-table/test/unittests/libtable/Table.cpp b/bcos-table/test/unittests/libtable/Table.cpp new file mode 100644 index 0000000..c77d6b7 --- /dev/null +++ b/bcos-table/test/unittests/libtable/Table.cpp @@ -0,0 +1,244 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the Table + * @file Table.cpp + */ + +#include "bcos-framework/storage/Table.h" +#include "Hash.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::crypto; + +namespace std +{ +inline ostream& operator<<(ostream& os, const tuple& item) +{ + os << get<0>(item) << " " << get<1>(item); + return os; +} + +inline ostream& operator<<(ostream& os, const std::optional
& table) +{ + os << table.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::unique_ptr& error) +{ + os << error->what(); + return os; +} +} // namespace std + +namespace bcos +{ +namespace test +{ +struct TableFixture +{ + TableFixture() + { + hashImpl = make_shared(); + memoryStorage = make_shared(nullptr); + tableFactory = make_shared(memoryStorage); + } + + ~TableFixture() {} + std::shared_ptr hashImpl = nullptr; + std::shared_ptr memoryStorage = nullptr; + protocol::BlockNumber m_blockNumber = 0; + std::shared_ptr tableFactory = nullptr; +}; +BOOST_FIXTURE_TEST_SUITE(TableTest, TableFixture) + +BOOST_AUTO_TEST_CASE(constructor) +{ + auto threadPool = ThreadPool("a", 1); + auto table = std::make_shared
(nullptr, nullptr); + auto tableFactory = std::make_shared(memoryStorage); +} + +BOOST_AUTO_TEST_CASE(tableInfo) +{ + std::vector fields = {"value9", "value8", "value7", "value6"}; + TableInfo tableInfo("test-table", fields); + + BOOST_CHECK_EQUAL_COLLECTIONS( + fields.begin(), fields.end(), tableInfo.fields().begin(), tableInfo.fields().end()); + + BOOST_CHECK_EQUAL(tableInfo.fieldIndex("value9"), 0); + BOOST_CHECK_EQUAL(tableInfo.fieldIndex("value8"), 1); + BOOST_CHECK_EQUAL(tableInfo.fieldIndex("value7"), 2); + BOOST_CHECK_EQUAL(tableInfo.fieldIndex("value6"), 3); +} + +BOOST_AUTO_TEST_CASE(dump_hash) +{ + std::string tableName("t_test"); + std::string keyField("key"); + std::string valueField("value"); + + std::promise> createPromise; + tableFactory->asyncCreateTable( + tableName, valueField, [&](auto&& error, std::optional
&& table) { + BOOST_CHECK(!error); + createPromise.set_value(table); + }); + + BOOST_CHECK(createPromise.get_future().get()); + + std::promise> tablePromise; + tableFactory->asyncOpenTable("t_test", [&](auto&& error, auto&& table) { + BOOST_CHECK(!error); + tablePromise.set_value(std::move(table)); + }); + auto table = tablePromise.get_future().get(); + BOOST_TEST(table); + + // BOOST_TEST(table->dirty() == false); + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "Lili"); + table->setRow("name", *entry); + auto tableinfo = table->tableInfo(); + BOOST_CHECK_EQUAL(tableinfo->name(), tableName); + + // BOOST_CHECK_EQUAL_COLLECTIONS( + // valueField.begin(), valueField.end(), tableinfo->fields.begin(), + // tableinfo->fields.end()); + + // auto hash = tableFactory->hash(hashImpl); + // BOOST_CHECK_EQUAL(hash.size, 32); + + // BOOST_CHECK_EQUAL(tableFactory.ex) + + // auto data = table->dump(m_blockNumber); + // auto hash = table->hash(); + // BOOST_TEST(data->size() == 1); + entry = table->newEntry(); + // entry->setField("key", "name2"); + entry->setField(0, "WW"); + BOOST_CHECK_NO_THROW(table->setRow("name2", *entry)); + + // data = table->dump(m_blockNumber); + // BOOST_TEST(data->size() == 2); + // hash = table->hash(); + // BOOST_TEST(table->dirty() == true); +} + +BOOST_AUTO_TEST_CASE(setRow) +{ + std::string tableName("t_test"); + std::string keyField("key"); + std::string valueField("value1,value2"); + + std::promise> createPromise; + tableFactory->asyncCreateTable( + tableName, valueField, [&](auto&& error, std::optional
&& table) { + BOOST_CHECK(!error); + createPromise.set_value(std::move(table)); + }); + BOOST_CHECK(createPromise.get_future().get()); + + std::promise> tablePromise; + tableFactory->asyncOpenTable("t_test", [&](auto&& error, auto&& table) { + BOOST_CHECK(!error); + tablePromise.set_value(std::move(table)); + }); + auto table = tablePromise.get_future().get(); + BOOST_TEST(table); + + // check fields order of t_test + BOOST_TEST(table->tableInfo()->fields().size() == 2); + BOOST_TEST(table->tableInfo()->fields()[0] == "value1"); + BOOST_TEST(table->tableInfo()->fields()[1] == "value2"); + // BOOST_TEST(table->tableInfo()->key == keyField); + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + // BOOST_CHECK_THROW(entry->setField(0, "Lili"), bcos::Error); + BOOST_CHECK_NO_THROW(table->setRow("name", *entry)); + + // check fields order of SYS_TABLE + std::promise> sysTablePromise; + tableFactory->asyncOpenTable(StorageInterface::SYS_TABLES, [&](auto&& error, auto&& table) { + BOOST_CHECK(!error); + BOOST_TEST(table); + sysTablePromise.set_value(std::move(table)); + }); + auto sysTable = sysTablePromise.get_future().get(); + BOOST_CHECK(sysTable); + + BOOST_TEST(sysTable->tableInfo()->fields().size() == 1); + BOOST_TEST(sysTable->tableInfo()->fields()[0] == StateStorage::SYS_TABLE_VALUE_FIELDS); + // BOOST_TEST(sysTable->tableInfo()->key == StateStorage::SYS_TABLE_KEY); +} + +BOOST_AUTO_TEST_CASE(removeFromCache) +{ + std::string tableName("t_test"); + std::string keyField("key"); + std::string valueField("value1,value2"); + + auto ret = tableFactory->createTable(tableName, valueField); + BOOST_TEST(ret); + auto table = tableFactory->openTable("t_test"); + BOOST_TEST(table); + // check fields order of t_test + BOOST_TEST(table->tableInfo()->fields().size() == 2); + BOOST_TEST(table->tableInfo()->fields()[0] == "value1"); + BOOST_TEST(table->tableInfo()->fields()[1] == "value2"); + // BOOST_TEST(table->tableInfo()->key == keyField); + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "hello world!"); + // BOOST_CHECK_THROW(entry->setField(0, "Lili"), bcos::Error); + BOOST_CHECK_NO_THROW(table->setRow("name", *entry)); + + auto deleteEntry = std::make_optional(table->newEntry()); + deleteEntry->setStatus(Entry::DELETED); + BOOST_CHECK_NO_THROW(table->setRow("name", *deleteEntry)); + + auto hashs = tableFactory->hash(hashImpl); + + auto tableFactory2 = std::make_shared(nullptr); + BOOST_CHECK(tableFactory2->createTable(tableName, valueField)); + auto table2 = tableFactory2->openTable(tableName); + BOOST_TEST(table2); + + auto deleteEntry2 = std::make_optional(table2->newEntry()); + deleteEntry2->setStatus(Entry::DELETED); + BOOST_CHECK_NO_THROW(table2->setRow("name", *deleteEntry2)); + auto hashs2 = tableFactory2->hash(hashImpl); + + BOOST_CHECK_EQUAL_COLLECTIONS(hashs.begin(), hashs.end(), hashs2.begin(), hashs2.end()); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-table/test/unittests/libtable/TablePerf.cpp b/bcos-table/test/unittests/libtable/TablePerf.cpp new file mode 100644 index 0000000..52c3637 --- /dev/null +++ b/bcos-table/test/unittests/libtable/TablePerf.cpp @@ -0,0 +1,133 @@ +#include "Hash.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include + +namespace bcos::test +{ +using namespace bcos::storage; + +struct TablePerfFixture +{ + TablePerfFixture() + { + // auto hashImpl = std::make_shared(); + auto memoryStorage = std::make_shared(nullptr); + BOOST_TEST(memoryStorage != nullptr); + tableFactory = std::make_shared(memoryStorage); + BOOST_TEST(tableFactory != nullptr); + } + + std::vector> createTestData(Table table) + { + std::vector> entries; + entries.reserve(count); + for (size_t i = 0; i < count; ++i) + { + auto entry = table.newEntry(); + entry.setField(0, "value1"); + + entries.emplace_back("key_" + boost::lexical_cast(i), std::move(entry)); + } + + return entries; + } + + std::shared_ptr tableFactory; + size_t count = 100 * 1000; +}; + +BOOST_FIXTURE_TEST_SUITE(TablePerf, TablePerfFixture) + +BOOST_AUTO_TEST_CASE(syncGet) +{ + tableFactory->createTable("test_table", "field1"); + auto table = tableFactory->openTable("test_table"); + + auto entries = createTestData(*table); + + for (auto& [key, entry] : entries) + { + table->setRow(key, entry); + } + + auto now = bcos::utcSteadyTime(); + for (size_t i = 0; i < count; ++i) + { + std::string key = "key_" + boost::lexical_cast(i); + auto entry = table->getRow(key); + + BOOST_CHECK_EQUAL(entry->getField(0), "value1"); + } + + std::cout << "sync cost: " << bcos::utcSteadyTime() - now << std::endl; +} + +BOOST_AUTO_TEST_CASE(asyncGet) +{ + tableFactory->createTable("test_table", "field1,field2,field3"); + auto table = tableFactory->openTable("test_table"); + + auto entries = createTestData(*table); + + for (auto& [key, entry] : entries) + { + table->setRow(key, entry); + } + + auto total = count; + + auto now = bcos::utcSteadyTime(); + std::promise finished; + std::atomic done(0); + for (size_t i = 0; i < count; ++i) + { + std::string key = "key_" + boost::lexical_cast(i); + table->asyncGetRow(key, [&total, &finished, &done](auto&&, auto&& entry) { + BOOST_CHECK_EQUAL(entry->getField(0), "value1"); + + auto current = done.fetch_add(1); + if (current + 1 >= total) + { + finished.set_value(true); + } + }); + } + finished.get_future().get(); + + std::cout << "async cost: " << bcos::utcSteadyTime() - now << std::endl; +} + +BOOST_AUTO_TEST_CASE(asyncToSyncGet) +{ + tableFactory->createTable("test_table", "field1,field2,field3"); + auto table = tableFactory->openTable("test_table"); + + auto entries = createTestData(*table); + + for (auto& [key, entry] : entries) + { + table->setRow(key, entry); + } + + auto now = bcos::utcSteadyTime(); + for (size_t i = 0; i < count; ++i) + { + std::string key = "key_" + boost::lexical_cast(i); + std::promise finished; + table->asyncGetRow(key, [&finished](auto&&, auto&& entry) { + BOOST_CHECK_EQUAL(entry->getField(0), "value1"); + finished.set_value(true); + }); + finished.get_future().get(); + } + + std::cout << "asyncToSync cost: " << bcos::utcSteadyTime() - now << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace bcos::test diff --git a/bcos-table/test/unittests/libtable/TestKeyPageStorage.cpp b/bcos-table/test/unittests/libtable/TestKeyPageStorage.cpp new file mode 100644 index 0000000..ab56ef1 --- /dev/null +++ b/bcos-table/test/unittests/libtable/TestKeyPageStorage.cpp @@ -0,0 +1,2871 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for KeyPageStorage + * @file TestKeyPageStorage.cpp + */ + +#include "Hash.h" +#include "bcos-crypto/hash/Keccak256.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageInterface.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::crypto; + +#if defined(__APPLE__) +#undef __APPLE__ +#endif + +namespace std +{ +inline ostream& operator<<(ostream& os, const std::optional& entry) +{ + os << entry.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::optional
& table) +{ + os << table.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::unique_ptr& error) +{ + os << error->what(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::tuple& pair) +{ + os << std::get<0>(pair) << " " << std::get<1>(pair).hex(); + return os; +} +} // namespace std + +namespace bcos::test +{ +struct KeyPageStorageFixture +{ + KeyPageStorageFixture() + { + boost::log::core::get()->set_logging_enabled(false); + hashImpl = make_shared(); + auto stateStorage = make_shared(nullptr); + stateStorage->setEnableTraverse(true); + memoryStorage = stateStorage; + BOOST_REQUIRE(memoryStorage != nullptr); + tableFactory = make_shared(memoryStorage); + BOOST_REQUIRE(tableFactory != nullptr); + c.limit(0, 100); + } + + ~KeyPageStorageFixture() { boost::log::core::get()->set_logging_enabled(true); } + std::optional
createDefaultTable() + { + std::promise> createPromise; + tableFactory->asyncCreateTable( + testTableName, valueField, [&](auto&& error, std::optional
table) { + BOOST_REQUIRE(!error); + createPromise.set_value(table); + }); + return createPromise.get_future().get(); + } + + std::shared_ptr hashImpl = nullptr; + std::shared_ptr memoryStorage = nullptr; + protocol::BlockNumber m_blockNumber = 0; + std::shared_ptr tableFactory = nullptr; + std::string testTableName = "t_test"; + std::string keyField = "key"; + std::string valueField = "value"; + Condition c; +}; +BOOST_FIXTURE_TEST_SUITE(KeyPageStorageTest, KeyPageStorageFixture) + +BOOST_AUTO_TEST_CASE(constructor) +{ + auto threadPool = ThreadPool("a", 1); + auto tf = std::make_shared(memoryStorage); +} + +BOOST_AUTO_TEST_CASE(create_Table) +{ + std::string tableName("t_test1"); + auto table = tableFactory->openTable(tableName); + + BOOST_REQUIRE(!table); + auto ret = tableFactory->createTable(tableName, valueField); + BOOST_REQUIRE(ret); + + table = tableFactory->openTable(tableName); + BOOST_REQUIRE(table); + + BOOST_REQUIRE_THROW(tableFactory->createTable(tableName, valueField), bcos::Error); +} + + +BOOST_AUTO_TEST_CASE(count_empty_Table) +{ + std::string tableName("t_test1"); + auto countRet = tableFactory->count(tableName); + BOOST_REQUIRE_EQUAL(countRet.first, 0); + auto table = tableFactory->openTable(tableName); + + BOOST_REQUIRE(!table); + auto ret = tableFactory->createTable(tableName, valueField); + BOOST_REQUIRE(ret); + countRet = tableFactory->count(tableName); + BOOST_REQUIRE_EQUAL(countRet.first, 0); +} + +BOOST_AUTO_TEST_CASE(rollback) +{ + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + auto table = tableFactory->openTable(testTableName); + + auto deleteEntry = table->newEntry(); + deleteEntry.setStatus(Entry::DELETED); + BOOST_REQUIRE_NO_THROW(table->setRow("name", deleteEntry)); + + auto hash = tableFactory->hash(hashImpl); + auto countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 0); + +#ifdef __APPLE__ +#undef __APPLE__ +#endif + // delete not exist entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("ab98649ca506b076000000000000000000000000000000000000000000000001").hex()); +#endif + auto entry = std::make_optional(table->newEntry()); + BOOST_REQUIRE_NO_THROW(entry->setField(0, "Lili")); + BOOST_REQUIRE_NO_THROW(table->setRow("name", *entry)); + + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 1); + + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->dirty() == true); + BOOST_REQUIRE(entry->getField(0) == "Lili"); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + + entry = table->newEntry(); + entry->setField(0, "12345"); + table->setRow("id", *entry); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 2); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint1 = std::make_shared(); + tableFactory->setRecoder(savePoint1); + + entry = table->newEntry(); + entry->setField(0, "500"); + table->setRow("balance", *entry); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 3); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint2 = std::make_shared(); + tableFactory->setRecoder(savePoint2); + + auto deleteEntry2 = std::make_optional(table->newDeletedEntry()); + table->setRow("name", *deleteEntry2); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 2); + hash = tableFactory->hash(hashImpl); + +// delete entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("4160d337ddd671e0000000000000000000000000000000000000000000000001").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("4160d337ddd671e0000000000000000000000000000000000000000000000001").hex()); +#endif + std::cout << "Try remove balance" << std::endl; + tableFactory->rollback(*savePoint2); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 3); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE_NE(entry->status(), Entry::DELETED); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + tableFactory->rollback(*savePoint1); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 2); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + + tableFactory->rollback(*savePoint); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 1); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + + // insert without version + entry = table->newEntry(); + entry->setField(0, "new record"); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 2); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2c14904fc33bbbae000000000000000000000000000000000000000000000000").hex()); +#endif + + entry = table->newDeletedEntry(); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + countRet = tableFactory->count(testTableName); + BOOST_REQUIRE_EQUAL(countRet.first, 1); + hash = tableFactory->hash(hashImpl); + // delete entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("159ca8eb7641c2c1000000000000000000000000000000000000000000000001").hex()); +#endif +} + +BOOST_AUTO_TEST_CASE(rollback2) +{ + auto hash0 = tableFactory->hash(hashImpl); + // auto savePoint0 = tableFactory->savepoint(); + auto savePoint0 = std::make_shared(); + tableFactory->setRecoder(savePoint0); + BOOST_REQUIRE(hash0 == crypto::HashType(0)); + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + auto table = tableFactory->openTable(testTableName); + + auto deleteEntry = table->newDeletedEntry(); + table->setRow("name", deleteEntry); + auto hash = tableFactory->hash(hashImpl); +// delete not exist entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("ab98649ca506b076000000000000000000000000000000000000000000000001").hex()); +#endif + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "Lili"); + table->setRow("name", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + // BOOST_REQUIRE(table->dirty() == true); + BOOST_REQUIRE(entry->dirty() == true); + BOOST_REQUIRE(entry->getField(0) == "Lili"); + // auto savePoint = tableFactory->savepoint(); + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + + entry = table->newEntry(); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + table->setRow("id", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + // BOOST_REQUIRE(table->dirty() == true); + + tableFactory->rollback(*savePoint); + + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + + // BOOST_REQUIRE(table->dirty() == true); + tableFactory->rollback(*savePoint0); + hash = tableFactory->hash(hashImpl); + BOOST_REQUIRE(hash.hex() == crypto::HashType("").hex()); + entry = table->getRow("name"); + BOOST_REQUIRE(!entry); + + auto hash00 = tableFactory->hash(hashImpl); + BOOST_REQUIRE(hash00 == crypto::HashType(0)); + + BOOST_REQUIRE_EQUAL_COLLECTIONS(hash0.begin(), hash0.end(), hash00.begin(), hash00.end()); + BOOST_REQUIRE(hash00 == hash0); + table = tableFactory->openTable(testTableName); + BOOST_REQUIRE(!table); +} + +BOOST_AUTO_TEST_CASE(rollback3) +{ + auto hash0 = tableFactory->hash(hashImpl); + // auto savePoint0 = tableFactory->savepoint(); + auto savePoint0 = std::make_shared(); + tableFactory->setRecoder(savePoint0); + BOOST_REQUIRE(hash0 == crypto::HashType(0)); + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + auto table = tableFactory->openTable(testTableName); + auto entry = table->newEntry(); + entry.set("value"); + table->setRow("name", entry); + tableFactory->hash(hashImpl); + // first rollback + tableFactory->rollback(*savePoint0); + + savePoint0 = std::make_shared(); + tableFactory->setRecoder(savePoint0); + ret = createDefaultTable(); + BOOST_REQUIRE(ret); + table = tableFactory->openTable(testTableName); + entry = table->newEntry(); + entry.set("value"); + table->setRow("name", entry); + // second rollback + tableFactory->rollback(*savePoint0); + + tableFactory->setReadOnly(true); + std::promise getRow; + tableFactory->asyncGetRow( + testTableName, "", [&](Error::UniquePtr error, std::optional e) { + BOOST_REQUIRE(!error); + getRow.set_value(e.value()); + }); + KeyPageStorage::TableMeta meta(getRow.get_future().get().get()); + auto pageInfo = meta.getAllPageInfoNoLock(); + BOOST_REQUIRE(pageInfo.empty()); + tableFactory->setReadOnly(false); + + ret = createDefaultTable(); + BOOST_REQUIRE(ret); + table = tableFactory->openTable(testTableName); + entry = table->newEntry(); + entry.set("value"); + table->setRow("name", entry); +} + +BOOST_AUTO_TEST_CASE(hash) +{ + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + + auto table = tableFactory->openTable(testTableName); + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "Lili"); + BOOST_REQUIRE_NO_THROW(table->setRow("name", *entry)); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + auto tableFactory0 = make_shared(tableFactory); + + entry = std::make_optional(table->newEntry()); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + entry = table->getRow("id"); + BOOST_REQUIRE(entry.has_value()); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + // BOOST_REQUIRE(table->dirty() == true); + auto keys = table->getPrimaryKeys({c}); + BOOST_REQUIRE(keys.size() == 2); + + auto entries = table->getRows(keys); + BOOST_REQUIRE(entries.size() == 2); + + auto dbHash1 = tableFactory->hash(hashImpl); + + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + auto idEntry = table->getRow("id"); + + auto deletedEntry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *deletedEntry)); + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + + tableFactory->rollback(*savePoint); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + // BOOST_REQUIRE(table->dirty() == true); + + auto dbHash2 = tableFactory->hash(hashImpl); + BOOST_REQUIRE_EQUAL(dbHash1.hex(), dbHash2.hex()); + + // getPrimaryKeys and getRows + entry = table->newEntry(); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + entry = table->getRow("name"); + entry->setField(0, "Wang"); + BOOST_REQUIRE_NO_THROW(table->setRow("name", *entry)); + entry = table->newEntry(); + // entry->setField("key", "balance"); + entry->setField(0, "12345"); + BOOST_REQUIRE_NO_THROW(table->setRow("balance", *entry)); + BOOST_REQUIRE(entry.has_value()); + keys = table->getPrimaryKeys({c}); + BOOST_REQUIRE(keys.size() == 3); + + entries = table->getRows(keys); + BOOST_REQUIRE(entries.size() == 3); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + entry = table->getRow("balance"); + BOOST_REQUIRE(entry.has_value()); + entry = table->getRow("balance1"); + BOOST_REQUIRE(!entry); + + auto nameEntry = table->getRow("name"); + auto deletedEntry2 = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("name", *deletedEntry2)); + entry = table->getRow("name"); + BOOST_REQUIRE(!entry); + // BOOST_REQUIRE_EQUAL(entry->status(), Entry::DELETED); + keys = table->getPrimaryKeys({c}); + BOOST_REQUIRE(keys.size() == 2); + + entries = table->getRows(keys); + BOOST_REQUIRE(entries.size() == 2); + + auto idEntry2 = table->getRow("id"); + auto deletedEntry3 = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *deletedEntry3)); + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + // BOOST_REQUIRE_EQUAL(entry->status(), Entry::DELETED); + keys = table->getPrimaryKeys({c}); + BOOST_REQUIRE(keys.size() == 1); + + entries = table->getRows(keys); + BOOST_REQUIRE(entries.size() == 1); + // tableFactory->asyncCommit([](Error::Ptr, size_t) {}); +} + + +BOOST_AUTO_TEST_CASE(hash_V3_1_0) +{ + auto hashImpl2 = make_shared(); + auto memoryStorage2 = make_shared(nullptr); + auto tableFactory2 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + auto tableFactory1 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_0_VERSION); + + for (int i = 10; i < 20; ++i) + { + BOOST_REQUIRE(tableFactory1 != nullptr); + + std::string tableName = "testTable" + boost::lexical_cast(i); + auto key = "testKey" + boost::lexical_cast(i); + tableFactory1->createTable(tableName, "value"); + auto table = tableFactory1->openTable(tableName); + + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + + std::promise getRow; + table->asyncGetRow(key, [&](auto&& error, auto&& result) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(result->getField(0), "hello world!"); + + getRow.set_value(true); + }); + + getRow.get_future().get(); + } + + for (int i = 10; i < 20; ++i) + { + BOOST_REQUIRE(tableFactory2 != nullptr); + + std::string tableName = "testTable" + boost::lexical_cast(i); + auto key = "testKey" + boost::lexical_cast(i); + tableFactory2->createTable(tableName, "value"); + auto table = tableFactory2->openTable(tableName); + + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + + std::promise getRow; + table->asyncGetRow(key, [&](auto&& error, auto&& result) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(result->getField(0), "hello world!"); + + getRow.set_value(true); + }); + + getRow.get_future().get(); + } + + auto dbHash1 = tableFactory1->hash(hashImpl); + auto dbHash2 = tableFactory2->hash(hashImpl); + BOOST_REQUIRE_NE(dbHash1.hex(), dbHash2.hex()); +} + + +BOOST_AUTO_TEST_CASE(hash_different_table_same_data) +{ + auto hashImpl2 = std::make_shared(); + auto memoryStorage2 = make_shared(nullptr); + + auto tableFactory1 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_0_VERSION); + auto tableFactory2 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_0_VERSION); + BOOST_REQUIRE(tableFactory1 != nullptr); + BOOST_REQUIRE(tableFactory2 != nullptr); + + auto setData1 = [&](auto&& tableFactory) { + std::string tableName = "testTable1"; + auto key = "testKey1"; + tableFactory->createTable(tableName, "value"); + auto table = tableFactory->openTable(tableName); + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + tableName = "testTable2"; + tableFactory->createTable(tableName, "value"); + key = "testKey2"; + table = tableFactory->openTable(tableName); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + }; + auto setData2 = [&](auto&& tableFactory) { + std::string tableName = "testTable2"; + auto key = "testKey1"; + tableFactory->createTable(tableName, "value"); + auto table = tableFactory->openTable(tableName); + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + tableName = "testTable1"; + tableFactory->createTable(tableName, "value"); + key = "testKey2"; + table = tableFactory->openTable(tableName); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + }; + setData1(tableFactory1); + setData2(tableFactory2); + auto dbHash1 = tableFactory1->hash(hashImpl2); + auto dbHash2 = tableFactory2->hash(hashImpl2); + BOOST_REQUIRE_EQUAL(dbHash1.hex(), dbHash2.hex()); + + auto tableFactory3 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + auto tableFactory4 = make_shared( + memoryStorage2, 10240, (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION); + + setData1(tableFactory3); + setData2(tableFactory4); + auto dbHash3 = tableFactory3->hash(hashImpl2); + auto dbHash4 = tableFactory4->hash(hashImpl2); + BOOST_REQUIRE_NE(dbHash3.hex(), dbHash4.hex()); +} + +BOOST_AUTO_TEST_CASE(open_sysTables) +{ + auto table = tableFactory->openTable(StorageInterface::SYS_TABLES); + BOOST_REQUIRE(table); +} + +BOOST_AUTO_TEST_CASE(openAndCommit) +{ + auto hashImpl2 = make_shared(); + auto memoryStorage2 = make_shared(nullptr); + auto tableFactory2 = make_shared(memoryStorage2); + + for (int i = 10; i < 20; ++i) + { + BOOST_REQUIRE(tableFactory2 != nullptr); + + std::string tableName = "testTable" + boost::lexical_cast(i); + auto key = "testKey" + boost::lexical_cast(i); + tableFactory2->createTable(tableName, "value"); + auto table = tableFactory2->openTable(tableName); + + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + + std::promise getRow; + table->asyncGetRow(key, [&](auto&& error, auto&& result) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(result->getField(0), "hello world!"); + + getRow.set_value(true); + }); + + getRow.get_future().get(); + } +} + +BOOST_AUTO_TEST_CASE(checkInvalidKeys) +{ + auto hashImpl2 = make_shared(); + auto memoryStorage2 = make_shared(nullptr); + auto tableFactory2 = make_shared(memoryStorage2); + BOOST_REQUIRE(tableFactory2 != nullptr); + + std::string tableName = "testTable"; + tableFactory2->createTable(tableName, "value"); + auto table = tableFactory2->openTable(tableName); + for (int i = 0; i < 10; ++i) + { + auto key = "testKey" + boost::lexical_cast(i); + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + } + std::atomic invalid = 0; + tableFactory2->parallelTraverse(false, [&](auto&, auto&, auto& entry) { + if (entry.status() == Entry::Status::DELETED) + { + ++invalid; + } + return true; + }); + BOOST_TEST(invalid == 9); + auto key = "testKey" + boost::lexical_cast(9); + auto entry = table->newDeletedEntry(); + table->setRow(key, entry); + tableFactory2->setReadOnly(true); + auto tableFactory3 = make_shared(tableFactory2); + table = tableFactory3->openTable(tableName); + key = "testKey" + boost::lexical_cast(8); + entry = table->newEntry(); + entry.setField(0, "hello world!sss"); + table->setRow(key, entry); + invalid = 0; + tableFactory3->parallelTraverse(false, [&](auto&, auto&, auto& entry) { + if (entry.status() == Entry::Status::DELETED) + { + ++invalid; + } + return true; + }); + BOOST_TEST(invalid == 1); +} + +BOOST_AUTO_TEST_CASE(chainLink) +{ + std::vector storages; + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + for (int i = 0; i < 10; ++i) + { + prev->setReadOnly(true); + auto tableStorage = std::make_shared(prev); + for (int j = 0; j < 10; ++j) + { + auto tableName = "table_" + boost::lexical_cast(i) + "_" + + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 10; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(i) + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(i)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + prev = tableStorage; + storages.push_back(tableStorage); + } + + for (int index = 0; index < 10; ++index) + { + auto storage = storages[index]; + storage->setReadOnly(false); + // Data count must be 10 * 10 + 10 + std::atomic totalCount = 0; + storage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + ++totalCount; + // std::string message = std::string("table=") + std::string(table) + ",key=" + + // std::string(key); cout << message << endl; + return true; + }); + BOOST_REQUIRE_EQUAL(totalCount, (9 + 1 + 1) * 10 + 10); // 10 for s_tables, every table has + // 1 page(10 entry) and 1 meta and + // 9 invalid key + + // Dirty data count must be 10 * 10 + 10 + std::atomic dirtyCount = 0; + storage->parallelTraverse(true, [&](auto&&, auto&&, auto&&) { + ++dirtyCount; + return true; + }); + + BOOST_REQUIRE_EQUAL(dirtyCount, (9 + 1 + 1) * 10 + 10); // 10 for s_tables, every table has + // 1 page(10 entry) and 1 meta + + // Low level can't touch high level's data + for (int i = 0; i < 10; ++i) + { + for (int j = 0; j < 10; ++j) + { + auto tableName = "table_" + boost::lexical_cast(i) + "_" + + boost::lexical_cast(j); + + auto table = storage->openTable(tableName); + if (i > index) + { + BOOST_REQUIRE(!table); + } + else + { + BOOST_REQUIRE(table); + + for (int k = 0; k < 10; ++k) + { + auto key = boost::lexical_cast(i) + + boost::lexical_cast(k); + BCOS_LOG(INFO) + << LOG_DESC("get") << LOG_KV("tableName", tableName) + << LOG_KV("key", key) << LOG_KV("index", index) << LOG_KV("i", i); + auto entry = table->getRow(key); + if (i > index) + { + BOOST_REQUIRE(!entry); + } + else + { + BOOST_REQUIRE(entry.has_value()); + + BOOST_REQUIRE_GT(entry->size(), 0); + if (i == index) + { + BOOST_REQUIRE_EQUAL(entry->dirty(), true); + } + else + { + BOOST_REQUIRE_EQUAL(entry->dirty(), false); + } + } + } + } + } + } + + + // After reading, current storage should include previous storage's data, previous data's + // dirty should be false + totalCount = 0; + tbb::concurrent_vector> checks; + storage->parallelTraverse(false, [&](auto&& table, auto&& key, auto&& entry) { + checks.push_back([table, key, entry] { + // BOOST_REQUIRE_NE(tableInfo, nullptr); + if (table != "s_tables" && !key.empty() && entry.status() != Entry::Status::DELETED) + { + auto l = entry.getField(0).size(); + BOOST_REQUIRE_GE(l, 10); + } + }); + + ++totalCount; + return true; + }); + + for (auto& it : checks) + { + it(); + } + + BOOST_REQUIRE_EQUAL(totalCount, 120 + 30 * index); + + checks.clear(); + dirtyCount = 0; + storage->parallelTraverse(true, [&](auto&& table, auto&& key, auto&& entry) { + checks.push_back([table, key, entry]() { + // BOOST_REQUIRE_NE(tableInfo, nullptr); + if (table != "s_tables" && !key.empty() && entry.status() != Entry::Status::DELETED) + { + auto l = entry.getField(0).size(); + BOOST_REQUIRE_GE(l, 10); + BOOST_REQUIRE_EQUAL(entry.dirty(), true); + } + }); + + ++dirtyCount; + return true; + }); + + for (auto& it : checks) + { + it(); + } + BOOST_REQUIRE_EQUAL(dirtyCount, 120); + storage->setReadOnly(true); + } +} + +BOOST_AUTO_TEST_CASE(getRows) +{ + std::vector storages; + auto valueFields = "value1,value2,value3"; + + auto stateStorage = make_shared(nullptr); + auto prev = std::make_shared(stateStorage); + auto tableStorage = std::make_shared(prev); + + BOOST_REQUIRE(prev->createTable("t_test", valueFields)); + + auto table = prev->openTable("t_test"); + BOOST_REQUIRE(table); + + for (size_t i = 0; i < 100; ++i) + { + auto entry = table->newEntry(); + entry.importFields({"data" + boost::lexical_cast(i)}); + table->setRow("key" + boost::lexical_cast(i), entry); + } + prev->setReadOnly(true); + + // query 50-150 + std::vector keys; + for (size_t i = 50; i < 150; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + auto queryTable = tableStorage->openTable("t_test"); + BOOST_REQUIRE(queryTable); + + std::vector views; + for (auto& key : keys) + { + views.push_back(key); + } + auto values = queryTable->getRows(views); + + for (size_t i = 0; i < 100; ++i) + { + auto entry = values[i]; + if (i + 50 < 100) + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE_EQUAL(entry->dirty(), false); + BOOST_REQUIRE_GT(entry->size(), 0); + } + else + { + BOOST_REQUIRE(!entry); + } + } + + for (size_t i = 0; i < 10; ++i) + { + auto entry = queryTable->newEntry(); + entry.importFields({"data" + boost::lexical_cast(i)}); + queryTable->setRow("key" + boost::lexical_cast(i), entry); + } + + // Query 0-30 local(0-9) prev(10-29) + keys.clear(); + for (size_t i = 0; i < 30; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + + views.clear(); + for (auto& key : keys) + { + views.push_back(key); + } + values = queryTable->getRows(views); + + for (size_t i = 0; i < 30; ++i) + { + auto entry = values[i]; + if (i < 10) + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE_EQUAL(entry->dirty(), true); + } + else + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE_EQUAL(entry->dirty(), false); + } + } + + // Test deleted entry + for (size_t i = 10; i < 20; ++i) + { + queryTable->setRow( + "key" + boost::lexical_cast(i), queryTable->newDeletedEntry()); + } + + auto values2 = queryTable->getRows(keys); + for (size_t i = 0; i < values2.size(); ++i) + { + if (i >= 10 && i < 20) + { + BOOST_REQUIRE(!values2[i]); + } + else + { + BOOST_REQUIRE(values2[i]); + } + } + + // Test rollback + auto recoder = std::make_shared(); + tableStorage->setRecoder(recoder); + for (size_t i = 70; i < 80; ++i) + { + Entry myEntry; + myEntry.importFields({"ddd1"}); + queryTable->setRow("key" + boost::lexical_cast(i), std::move(myEntry)); + } + + keys.clear(); + for (size_t i = 70; i < 80; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + + auto values3 = queryTable->getRows(keys); + for (auto& it : values3) + { + BOOST_REQUIRE(it); + BOOST_REQUIRE_EQUAL(it->getField(0), "ddd1"); + BOOST_REQUIRE_EQUAL(it->dirty(), true); + } + + tableStorage->rollback(*recoder); + + auto values4 = queryTable->getRows(keys); + size_t count = 70; + for (auto& it : values4) + { + BOOST_REQUIRE(it); + BOOST_REQUIRE_EQUAL(it->getField(0), "data" + boost::lexical_cast(count)); + BOOST_REQUIRE_EQUAL(it->dirty(), false); + ++count; + } +} + +BOOST_AUTO_TEST_CASE(checkVersion) +{ + BOOST_REQUIRE_NO_THROW(tableFactory->createTable("testTable", "value1, value2, value3")); + auto table = tableFactory->openTable("testTable"); + + Entry value1; + value1.importFields({"v1"}); + table->setRow("abc", std::move(value1)); + + Entry value2; + value2.importFields({"v2"}); + BOOST_REQUIRE_NO_THROW(table->setRow("abc", std::move(value2))); + + Entry value3; + value3.importFields({"v3"}); + BOOST_REQUIRE_NO_THROW(table->setRow("abc", std::move(value3))); +} + +BOOST_AUTO_TEST_CASE(deleteAndGetRows) +{ + KeyPageStorage::Ptr storage1 = + std::make_shared(make_shared(nullptr)); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + Entry entry2; + entry2.importFields({"value2"}); + storage1->asyncSetRow( + "table", "key2", std::move(entry2), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage1->setReadOnly(true); + KeyPageStorage::Ptr storage2 = std::make_shared(storage1); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key2", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage2->setReadOnly(true); + KeyPageStorage::Ptr storage3 = std::make_shared(storage2); + storage3->asyncGetPrimaryKeys( + "table", c, [](Error::UniquePtr error, std::vector keys) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(keys.size(), 1); + BOOST_REQUIRE_EQUAL(keys[0], "key1"); + }); +} + + +BOOST_AUTO_TEST_CASE(readPageWithInvalidKeyAndModifyNotChangePageKey) +{ + createDefaultTable(); + // write a page but the pageKey k0 is deleted, suppose the real pageKey is k1 + auto table = tableFactory->openTable(testTableName); + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit999"); + BOOST_REQUIRE_NO_THROW(table->setRow("999", *entry)); + entry = table->getRow("999"); + BOOST_REQUIRE(entry.has_value()); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit99"); + BOOST_REQUIRE_NO_THROW(table->setRow("99", *entry)); + entry = table->getRow("99"); + BOOST_REQUIRE(entry.has_value()); + entry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("999", *entry)); + entry = table->getRow("999"); + BOOST_REQUIRE(!entry.has_value()); + tableFactory->setReadOnly(true); + + // read the page whose pageKey is invalid but not modify it + auto tableFactory0 = make_shared(tableFactory); + table = tableFactory0->openTable(testTableName); + entry = table->getRow("999"); + + // delete the the pageKey k1, insert entry less than k1 + entry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("99", *entry)); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit98"); + BOOST_REQUIRE_NO_THROW(table->setRow("98", *entry)); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit97"); + BOOST_REQUIRE_NO_THROW(table->setRow("97", *entry)); + + // commit the page, if has bug it will commit the page use invalid pageKey k0, otherwise it + // commit use k1 as the pageKey + tableFactory0->parallelTraverse(true, [&](auto& table, auto& key, auto& entry) { + if (entry.status() != Entry::DELETED) + { + BOOST_REQUIRE_NE(string(key), "999"); + } + if (table != "s_tables" && !key.empty() && entry.status() != Entry::Status::DELETED) + { + BOOST_REQUIRE_EQUAL(string(key), "99"); + } + return true; + }); +} + +BOOST_AUTO_TEST_CASE(readPageWithInvalidKeyAndDeleteNotChangePageKey) +{ + createDefaultTable(); + // write a page but the pageKey k0 is deleted, suppose the real pageKey is k1 + auto table = tableFactory->openTable(testTableName); + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit999"); + BOOST_REQUIRE_NO_THROW(table->setRow("999", *entry)); + entry = table->getRow("999"); + BOOST_REQUIRE(entry.has_value()); + entry = std::make_optional(table->newEntry()); + entry->setField(0, "fruit99"); + BOOST_REQUIRE_NO_THROW(table->setRow("99", *entry)); + entry = table->getRow("99"); + BOOST_REQUIRE(entry.has_value()); + entry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("999", *entry)); + entry = table->getRow("999"); + BOOST_REQUIRE(!entry.has_value()); + tableFactory->setReadOnly(true); + + // read the page whose pageKey is invalid but not modify it + auto tableFactory0 = make_shared(tableFactory); + table = tableFactory0->openTable(testTableName); + entry = table->getRow("88"); + + // delete entry less than k1 and not change the pageKey, keep the pageKey is k1 + entry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("98", *entry)); + entry = std::make_optional(table->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table->setRow("97", *entry)); + + // commit the page, if has bug it will commit the page use invalid pageKey k0, otherwise it + // commit use k1 as the pageKey + tableFactory0->parallelTraverse(true, [&](auto& table, auto& key, auto& entry) { + if (entry.status() != Entry::DELETED) + { + BOOST_REQUIRE_NE(string(key), "999"); + } + if (table != "s_tables" && !key.empty() && entry.status() != Entry::Status::DELETED) + { + BOOST_REQUIRE_EQUAL(string(key), "99"); + } + return true; + }); +} + +BOOST_AUTO_TEST_CASE(deletedAndGetRow) +{ + KeyPageStorage::Ptr storage1 = + std::make_shared(make_shared(nullptr)); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage1->setReadOnly(true); + KeyPageStorage::Ptr storage2 = std::make_shared(storage1); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key1", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(!entry); + }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(!entry); + }); +} + +BOOST_AUTO_TEST_CASE(deletedAndGetRows) +{ + KeyPageStorage::Ptr storage1 = + std::make_shared(make_shared(nullptr)); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage1->setReadOnly(true); + KeyPageStorage::Ptr storage2 = std::make_shared(storage1); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key1", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + std::string_view keys[] = {"key1"}; + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(entry.size(), 1); + BOOST_REQUIRE(!entry[0]); + }); +} + +BOOST_AUTO_TEST_CASE(rollbackAndGetRow) +{ + KeyPageStorage::Ptr storage1 = + std::make_shared(make_shared(nullptr)); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage1->setReadOnly(true); + KeyPageStorage::Ptr storage2 = std::make_shared(storage1); + auto recoder = std::make_shared(); + storage2->setRecoder(recoder); + + Entry entry2; + entry2.importFields({"value2"}); + storage2->asyncSetRow( + "table", "key1", std::move(entry2), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE_EQUAL(entry->getField(0), "value2"); + }); + + storage2->rollback(*recoder); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE_EQUAL(entry->getField(0), "value1"); + }); +} + +BOOST_AUTO_TEST_CASE(rollbackAndGetRows) +{ + KeyPageStorage::Ptr storage1 = + std::make_shared(make_shared(nullptr)); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + storage1->setReadOnly(true); + KeyPageStorage::Ptr storage2 = std::make_shared(storage1); + auto recoder = std::make_shared(); + storage2->setRecoder(recoder); + + Entry entry2; + entry2.importFields({"value2"}); + storage2->asyncSetRow( + "table", "key1", std::move(entry2), [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + + std::string_view keys[] = {"key1"}; + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(entry.size(), 1); + BOOST_REQUIRE_EQUAL(entry[0].value().getField(0), "value2"); + }); + + storage2->rollback(*recoder); + + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE_EQUAL(entry.size(), 1); + BOOST_REQUIRE_EQUAL(entry[0].value().getField(0), "value1"); + }); +} + +BOOST_AUTO_TEST_CASE(randomRWHash) +{ + std::vector> rwSet; + + std::random_device rd; + for (size_t i = 0; i < 3; ++i) + { + auto keyNum = rd(); + bool write = keyNum % 2; + + std::string table; + std::string key; + std::string value; + if (write || i == 0) + { + write = true; + table = boost::lexical_cast(keyNum % 10); + key = boost::lexical_cast(keyNum); + value = boost::lexical_cast(rd()); + } + else + { + auto index = keyNum % i; + table = std::get<1>(rwSet[index]); + key = std::get<2>(rwSet[index]); + } + + rwSet.emplace_back(std::make_tuple(write, table, key, value)); + } + + std::vector prevHashes; + for (size_t times = 0; times < 10; ++times) + { + std::vector hashes; + StateStorageInterface::Ptr prev = make_shared(nullptr); + for (size_t i = 0; i < 10; ++i) + { + KeyPageStorage::Ptr storage = std::make_shared(prev); + + for (auto& it : rwSet) + { + auto& [write, table, key, value] = it; + + storage->asyncOpenTable(table, [storage, tableName = table](Error::UniquePtr error, + std::optional
tableItem) { + BOOST_REQUIRE(!error); + if (!tableItem) + { + storage->asyncCreateTable(tableName, "value", + [](Error::UniquePtr error, std::optional
tableItem) { + BOOST_REQUIRE(!error); + BOOST_REQUIRE(tableItem); + }); + } + }); + + if (write) + { + Entry entry; + entry.importFields({value}); + storage->asyncSetRow(table, key, std::move(entry), + [](Error::UniquePtr error) { BOOST_REQUIRE(!error); }); + } + else + { + storage->asyncGetRow( + table, key, [](Error::UniquePtr error, std::optional) { + BOOST_REQUIRE(!error); + }); + } + } + + hashes.push_back(storage->hash(hashImpl)); + storage->setReadOnly(false); + storage->setReadOnly(true); + prev = storage; + } + + if (!prevHashes.empty()) + { + BOOST_REQUIRE_EQUAL_COLLECTIONS( + prevHashes.begin(), prevHashes.end(), hashes.begin(), hashes.end()); + } + prevHashes.swap(hashes); + hashes.clear(); + } +} + +BOOST_AUTO_TEST_CASE(hash_map) +{ + class EntryKey + { + public: + EntryKey() {} + EntryKey(std::string_view table, std::string_view key) : m_table(table), m_key(key) {} + EntryKey(std::string_view table, std::string key) : m_table(table), m_key(std::move(key)) {} + + EntryKey(const EntryKey&) = default; + EntryKey& operator=(const EntryKey&) = default; + EntryKey(EntryKey&&) noexcept = default; + EntryKey& operator=(EntryKey&&) noexcept = default; + + std::string_view table() const { return m_table; } + + std::string_view key() const + { + std::string_view view; + std::visit([&view](auto&& key) { view = key; }, m_key); + + return view; + } + + bool operator==(const EntryKey& rhs) const + { + return m_table == rhs.m_table && key() == rhs.key(); + } + + bool operator<(const EntryKey& rhs) const + { + if (m_table != rhs.m_table) + { + return m_table < rhs.m_table; + } + + return m_key < rhs.m_key; + } + + private: + std::string_view m_table; + std::variant m_key; + }; + + struct EntryKeyHasher + { + size_t hash(const EntryKey& dataKey) const + { + size_t seed = hashString(dataKey.table()); + boost::hash_combine(seed, hashString(dataKey.key())); + + return seed; + } + + bool equal(const EntryKey& lhs, const EntryKey& rhs) const + { + return lhs.table() == rhs.table() && lhs.key() == rhs.key(); + } + + std::hash hashString; + }; + + tbb::concurrent_hash_map data; + + std::string tableName = "table"; + std::string key = "key"; + + decltype(data)::const_accessor it; + BOOST_REQUIRE(data.emplace(it, EntryKey("table", std::string_view("key")), 100)); + + decltype(data)::const_accessor findIt; + BOOST_REQUIRE(data.find(findIt, EntryKey("table", std::string_view("key")))); +} + +BOOST_AUTO_TEST_CASE(pageMerge) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 100; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 100; ++k) + { + if (k % 5 < 4) + { + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + } + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 100; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + if (k % 5 < 4) + { + BOOST_REQUIRE(!entry); + } + else + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + } + std::atomic totalCount = 0; + tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + ++totalCount; + return true; + }); + BOOST_REQUIRE_EQUAL(totalCount, 2200); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(pageMergeRandom) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + auto entryCount = 100; + auto tableCount = 100; + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < entryCount; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + + entry->setField(0, boost::lexical_cast(k)); + table->setRow(key, *entry); + // BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + // try + // { + // table->setRow(key, *entry); + // } + // catch (std::exception& e) + // { + // BCOS_LOG(TRACE) << LOG_DESC("set") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key)<< LOG_KV("what", e.what()); + // } + } + } + auto hash = tableStorage->hash(hashImpl); + // BOOST_TEST( + // hash.hex() == + // crypto::HashType("4d4a5c95180905cb000000000000000000000000000000000000000000000000").hex()); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < entryCount; ++k) + { + if (k % 5 < 4) + { + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + << LOG_KV("key", key); + // BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + table->setRow(key, *entry); + } + } + } + + hash = tableStorage->hash(hashImpl); + // BOOST_TEST( + // hash.hex() == + // crypto::HashType("4d4a5c95180905cb000000000000000000000000000000000000000000000000").hex()); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < entryCount; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + << LOG_KV("key", key); + if (k % 5 < 4) + { + BOOST_REQUIRE(!entry); + } + else + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + } + + hash = tableStorage->hash(hashImpl); + // BOOST_TEST( + // hash.hex() == + // crypto::HashType("4d4a5c95180905cb000000000000000000000000000000000000000000000000").hex()); + + std::atomic totalCount = 0; + std::atomic deleted = 0; + tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto& e) { + ++totalCount; + if (e.status() == Entry::Status::DELETED) + { + ++deleted; + } + return true; + }); + BOOST_TEST(totalCount == 2200); // meta + 5page + s_table + BOOST_TEST(deleted == 1900); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(pageMergeParallelRandom) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + if (k % 5 < 4) + { + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + } + + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + if (k % 5 < 4) + { + BOOST_REQUIRE(!entry); + } + else + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + } + // std::atomic totalCount = 0; + // tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + // ++totalCount; + // return true; + // }); + // BOOST_REQUIRE_EQUAL(totalCount , 393); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(parallelMix) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + // #pragma omp parallel for + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + // #pragma omp parallel for + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + if (k % 5 == 4) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k + 1)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + else + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + auto value = boost::lexical_cast(k); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == value); + auto deleteEntry = std::make_optional(table->newDeletedEntry()); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *deleteEntry)); + } + } + } + // #pragma omp parallel for + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 100; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + if (k % 5 < 4) + { + BOOST_REQUIRE(!entry); + } + else + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k + 1)); + } + } + } + // std::atomic totalCount = 0; + // tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + // ++totalCount; + // return true; + // }); + // BOOST_REQUIRE_EQUAL(totalCount , 392); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(pageSplit) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 100; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 100; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + std::atomic totalCount = 0; + tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + ++totalCount; + return true; + }); + BOOST_REQUIRE_EQUAL(totalCount, 2200); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(pageSplitRandom) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 256); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 5000; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < 500; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + std::atomic totalCount = 0; + tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + ++totalCount; + return true; + }); + BOOST_REQUIRE_EQUAL(totalCount, 9730); // meta + 5page + s_table +} + +BOOST_AUTO_TEST_CASE(pageSplitParallelRandom) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 256); + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 500; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < 500; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + // std::atomic totalCount = 0; + // tableStorage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + // ++totalCount; + // return true; + // }); + // BOOST_REQUIRE_EQUAL(totalCount , 999); // meta + 5page + s_table +} + + +BOOST_AUTO_TEST_CASE(asyncGetPrimaryKeys) +{ // TODO: add ut for asyncGetPrimaryKeys and condition + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 256); + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#pragma omp parallel for + for (int k = 0; k < 1000; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); +#pragma omp critical + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int j = 0; j < 100; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); +#pragma omp parallel for + for (int k = 0; k < 1000; ++k) + { + Condition c; + c.limit(0, 200); + auto keys = table->getPrimaryKeys(c); + +#pragma omp critical + BOOST_REQUIRE(keys.size() == 200); + c.limit(200, 300); + keys = table->getPrimaryKeys(c); +#pragma omp critical + BOOST_REQUIRE(keys.size() == 300); + c.limit(900, 200); + keys = table->getPrimaryKeys(c); +#pragma omp critical + BOOST_REQUIRE(keys.size() == 100); + c.GE("900"); +#pragma omp critical + BOOST_REQUIRE(keys.size() == 100); + } + } + auto tableName = "table_" + boost::lexical_cast(0); + auto table = tableStorage->openTable(tableName); + auto printVector = [](const std::vector& vec) -> string { + stringstream ss; + for (auto& s : vec) + { + ss << s << " "; + } + ss << endl; + return ss.str(); + }; + Condition c; + c.limit(0, 500); + c.LE("250"); + auto keys = table->getPrimaryKeys(c); + BCOS_LOG(TRACE) << "LE 250:" << printVector(keys); + BOOST_REQUIRE(keys.size() == 170); + Condition c2; + c2.limit(0, 500); + c2.LT("250"); + auto keys2 = table->getPrimaryKeys(c2); + BCOS_LOG(TRACE) << "LT 250:" << printVector(keys2); + BOOST_REQUIRE(keys2.size() == 169); + Condition c3; + c3.limit(750, 500); + c3.GT("250"); + auto keys3 = table->getPrimaryKeys(c3); + BCOS_LOG(TRACE) << "GT 250:" << printVector(keys3); + BOOST_REQUIRE(keys3.size() == 80); + Condition c4; + c4.limit(750, 500); + c4.GE("250"); + auto keys4 = table->getPrimaryKeys(c4); + BCOS_LOG(TRACE) << "GE 250:" << printVector(keys4); + BOOST_REQUIRE(keys4.size() == 81); + Condition c5; + c5.limit(500, 500); + c5.NE("250"); + auto keys5 = table->getPrimaryKeys(c5); + BCOS_LOG(TRACE) << "NE 250:" << printVector(keys5); + BOOST_REQUIRE(keys5.size() == 499); + + auto fruitTable = "table_fruit"; + BOOST_REQUIRE(tableStorage->createTable(fruitTable, valueFields)); + + table = tableStorage->openTable(fruitTable); + BOOST_REQUIRE(table); + auto entry = std::make_optional(table->newEntry()); + auto key = "fruit"; + entry->setField(0, "a"); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + Condition c6; + c6.limit(0, 0); + c6.GE("fruit"); + auto keys6 = table->getPrimaryKeys(c6); + // the default limit is 0 + BOOST_REQUIRE(keys6.size() == 0); +} + + +BOOST_AUTO_TEST_CASE(BigTableAdd) +{ + auto valueFields = "value1"; + auto cacheSize = 256 * 1024 * 1024; + auto pageSize = 512; + auto stateStorage0 = make_shared(nullptr); + stateStorage0->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev0 = stateStorage0; + + auto tableName = "table_0"; + BOOST_REQUIRE(prev0->createTable(tableName, valueFields)); + + auto stateStorage1 = make_shared(nullptr); + stateStorage1->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev1 = stateStorage1; + + BOOST_REQUIRE(prev1->createTable(tableName, valueFields)); + + size_t count = 100; + auto keyCount = 100; + auto index = 0; + srand(time(NULL)); + for (size_t i = 0; i < count; ++i) + { + auto tableStorage0 = std::make_shared(prev0, pageSize); + auto table0 = tableStorage0->openTable(tableName); + BOOST_REQUIRE(table0); + + auto tableStorage1 = std::make_shared(prev1, pageSize); + auto table1 = tableStorage1->openTable(tableName); + BOOST_REQUIRE(table1); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + auto key = boost::lexical_cast(v); + auto value = + boost::lexical_cast(i) + "_" + boost::lexical_cast(v); + auto entry0 = std::make_optional(table0->newEntry()); + entry0->setField(0, value); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + + auto entry1 = std::make_optional(table1->newEntry()); + entry1->setField(0, value); + BOOST_REQUIRE_NO_THROW(table1->setRow(key, *entry1)); + } + auto hash0 = tableStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + BOOST_REQUIRE(hash0.hex() != crypto::HashType(0).hex()); + auto hash1 = tableStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + BOOST_REQUIRE(hash1.hex() != crypto::HashType(0).hex()); + BOOST_TEST(hash0.hex() != crypto::HashType(0).hex()); + BOOST_TEST(hash0.hex() == hash1.hex()); + BOOST_REQUIRE(hash0.hex() == hash1.hex()); + tableStorage0->setReadOnly(true); + tableStorage1->setReadOnly(true); + stateStorage0->merge(true, *tableStorage0); + stateStorage1->merge(true, *tableStorage1); + hash0 = stateStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>stateStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + hash1 = stateStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>stateStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + // BOOST_TEST(hash0.hex() == hash1.hex()); + // BOOST_REQUIRE(hash0.hex() == hash1.hex()); + index += keyCount; + BCOS_LOG(DEBUG) << LOG_DESC("<<<<<<<<<<<<<<<<<<<<<<\n\n\n\n\n\n\n\n\n"); + } +} + +BOOST_AUTO_TEST_CASE(BigTableAddSerialize) +{ + auto valueFields = "value1"; + auto cacheSize = 256 * 1024 * 1024; + auto pageSize = 512; + auto stateStorage0 = make_shared(nullptr); + stateStorage0->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev0 = stateStorage0; + + auto tableName = "table_0"; + BOOST_REQUIRE(prev0->createTable(tableName, valueFields)); + + auto stateStorage1 = make_shared(nullptr); + stateStorage1->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev1 = stateStorage1; + + BOOST_REQUIRE(prev1->createTable(tableName, valueFields)); + + size_t count = 1; + auto keyCount = 100; + auto index = 0; + srand(time(NULL)); + for (size_t i = 0; i < count; ++i) + { + auto tableStorage0 = std::make_shared(prev0, pageSize); + auto table0 = tableStorage0->openTable(tableName); + BOOST_REQUIRE(table0); + + auto tableStorage1 = std::make_shared(prev1, pageSize); + auto table1 = tableStorage1->openTable(tableName); + BOOST_REQUIRE(table1); + + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + auto key = boost::lexical_cast(v); + auto value = + boost::lexical_cast(i) + "_" + boost::lexical_cast(v); + auto entry0 = std::make_optional(table0->newEntry()); + entry0->setField(0, value); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + + auto entry1 = std::make_optional(table1->newEntry()); + entry1->setField(0, value); + BOOST_REQUIRE_NO_THROW(table1->setRow(key, *entry1)); + } + auto hash0 = tableStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + BOOST_REQUIRE(hash0.hex() != crypto::HashType(0).hex()); + auto hash1 = tableStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + BOOST_REQUIRE(hash0.hex() != crypto::HashType(0).hex()); + BOOST_TEST(hash0.hex() == hash1.hex()); + BOOST_REQUIRE(hash0.hex() == hash1.hex()); + tableStorage0->setReadOnly(true); + tableStorage1->setReadOnly(true); + stateStorage0->merge(true, *tableStorage0); + stateStorage1->merge(true, *tableStorage1); + hash0 = stateStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>stateStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + hash1 = stateStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>stateStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + BOOST_TEST(hash0.hex() == hash1.hex()); + BOOST_REQUIRE(hash0.hex() == hash1.hex()); + index += keyCount; + BCOS_LOG(DEBUG) << LOG_DESC("<<<<<<<<<<<<<<<<<<<<<<\n\n\n\n\n\n\n\n\n"); + } +} + +BOOST_AUTO_TEST_CASE(mockCommitProcess) +{ + auto valueFields = "value1"; + auto cacheSize = 256 * 1024 * 1024; + auto pageSize = 512; + auto stateStorage0 = make_shared(nullptr); + stateStorage0->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev0 = stateStorage0; + + auto tableName = "table_0"; + BOOST_REQUIRE(prev0->createTable(tableName, valueFields)); + + auto stateStorage1 = make_shared(nullptr); + stateStorage1->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev1 = stateStorage1; + BOOST_REQUIRE(prev1->createTable(tableName, valueFields)); + + auto stateStorage2 = make_shared(nullptr); + stateStorage2->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev2 = stateStorage2; + BOOST_REQUIRE(prev2->createTable(tableName, valueFields)); + + + size_t count = 100; + auto keyCount = 1000; + auto index = 0; + srand(time(NULL)); + // std::list keypages0; + std::list keypages1; + std::list keypages2; + for (size_t i = 0; i < count; ++i) + { + auto tableStorage0 = std::make_shared(prev0, pageSize); + auto table0 = tableStorage0->openTable(tableName); + BOOST_REQUIRE(table0); + + auto tableStorage1 = std::make_shared(prev1, pageSize); + auto table1 = tableStorage1->openTable(tableName); + BOOST_REQUIRE(table1); + + auto tableStorage2 = std::make_shared(prev2, pageSize); + auto table2 = tableStorage2->openTable(tableName); + BOOST_REQUIRE(table2); + + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + auto key = boost::lexical_cast(v); + auto value = + boost::lexical_cast(i) + "_" + boost::lexical_cast(v); + auto getKey = boost::lexical_cast(index + k); + auto entry0 = std::make_optional(table0->newEntry()); + entry0->setField(0, value); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + entry0 = table0->getRow(key); + BOOST_REQUIRE(entry0); + entry0 = table0->getRow(getKey); + + auto entry1 = std::make_optional(table1->newEntry()); + entry1->setField(0, value); + BOOST_REQUIRE_NO_THROW(table1->setRow(key, *entry1)); + entry1 = table1->getRow(key); + BOOST_REQUIRE(entry1); + entry1 = table1->getRow(getKey); + + auto entry2 = std::make_optional(table2->newEntry()); + entry2->setField(0, value); + BOOST_REQUIRE_NO_THROW(table2->setRow(key, *entry2)); + entry2 = table2->getRow(key); + BOOST_REQUIRE(entry2); + entry2 = table2->getRow(getKey); + } + auto hash0 = tableStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + BOOST_REQUIRE(hash0.hex() != crypto::HashType(0).hex()); + auto hash1 = tableStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + BOOST_REQUIRE(hash1.hex() != crypto::HashType(0).hex()); + auto hash2 = tableStorage2->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage2") << LOG_KV("i", i) + << LOG_KV("hash", hash2.hex()); + BOOST_TEST(hash0.hex() == hash1.hex()); + BOOST_TEST(hash2.hex() == hash1.hex()); + BOOST_REQUIRE(hash0.hex() == hash1.hex()); + BOOST_REQUIRE(hash2.hex() == hash1.hex()); + + tableStorage0->setReadOnly(true); + tableStorage1->setReadOnly(true); + tableStorage2->setReadOnly(true); + keypages1.push_back(tableStorage1); + keypages2.push_back(tableStorage2); + prev1 = tableStorage1; + prev2 = tableStorage2; + // 0 always commit + stateStorage0->merge(true, *tableStorage0); + if (i % 2 == 0) + { // 50% commit + auto s = keypages1.front(); + stateStorage1->merge(true, *s); + keypages1.pop_front(); + } + + if (rand() % 3 == 0) + { // random commit + auto s = keypages2.front(); + stateStorage2->merge(true, *s); + keypages2.pop_front(); + } + index += keyCount; + BCOS_LOG(DEBUG) << LOG_DESC("<<<<<<<<<<<<<<<<<<<<<<\n\n\n\n\n\n\n\n\n"); + } +} + +BOOST_AUTO_TEST_CASE(mockCommitProcessParallel) +{ + auto valueFields = "value1"; + auto cacheSize = 256 * 1024 * 1024; + auto pageSize = 512; + auto stateStorage0 = make_shared(nullptr); + stateStorage0->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev0 = stateStorage0; + + auto tableName = "table_0"; + BOOST_REQUIRE(prev0->createTable(tableName, valueFields)); + + auto stateStorage1 = make_shared(nullptr); + stateStorage1->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev1 = stateStorage1; + BOOST_REQUIRE(prev1->createTable(tableName, valueFields)); + + auto stateStorage2 = make_shared(nullptr); + stateStorage2->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev2 = stateStorage2; + BOOST_REQUIRE(prev2->createTable(tableName, valueFields)); + + + size_t count = 10; + auto keyCount = 1000; + auto index = 0; + srand(time(NULL)); + // std::list keypages0; + std::list keypages1; + std::list keypages2; + for (size_t i = 0; i < count; ++i) + { + auto tableStorage0 = std::make_shared(prev0, pageSize); + auto table0 = tableStorage0->openTable(tableName); + BOOST_REQUIRE(table0); + + auto tableStorage1 = std::make_shared(prev1, pageSize); + auto table1 = tableStorage1->openTable(tableName); + BOOST_REQUIRE(table1); + + auto tableStorage2 = std::make_shared(prev2, pageSize); + auto table2 = tableStorage2->openTable(tableName); + BOOST_REQUIRE(table2); + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + auto key = boost::lexical_cast(v); + auto value = + boost::lexical_cast(i) + "_" + boost::lexical_cast(v); + auto getKey = boost::lexical_cast(index + k); + auto entry0 = std::make_optional(table0->newEntry()); + entry0->setField(0, value); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + entry0 = table0->getRow(key); + BOOST_REQUIRE(entry0); + entry0 = table0->getRow(getKey); + + auto entry1 = std::make_optional(table1->newEntry()); + entry1->setField(0, value); + BOOST_REQUIRE_NO_THROW(table1->setRow(key, *entry1)); + entry1 = table1->getRow(key); + BOOST_REQUIRE(entry1); + entry1 = table1->getRow(getKey); + + auto entry2 = std::make_optional(table2->newEntry()); + entry2->setField(0, value); + BOOST_REQUIRE_NO_THROW(table2->setRow(key, *entry2)); + entry2 = table2->getRow(key); + BOOST_REQUIRE(entry2); + entry2 = table2->getRow(getKey); + } + auto hash0 = tableStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + BOOST_REQUIRE(hash0.hex() != crypto::HashType(0).hex()); + auto hash1 = tableStorage1->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage1") << LOG_KV("i", i) + << LOG_KV("hash", hash1.hex()); + BOOST_REQUIRE(hash1.hex() != crypto::HashType(0).hex()); + auto hash2 = tableStorage2->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage2") << LOG_KV("i", i) + << LOG_KV("hash", hash2.hex()); + BOOST_TEST(hash0.hex() == hash1.hex()); + BOOST_TEST(hash2.hex() == hash1.hex()); + BOOST_REQUIRE(hash0.hex() == hash1.hex()); + BOOST_REQUIRE(hash2.hex() == hash1.hex()); + + tableStorage0->setReadOnly(true); + tableStorage1->setReadOnly(true); + tableStorage2->setReadOnly(true); + keypages1.push_back(tableStorage1); + keypages2.push_back(tableStorage2); + prev1 = tableStorage1; + prev2 = tableStorage2; + // 0 always commit + stateStorage0->merge(true, *tableStorage0); + if (i % 2 == 0) + { // 50% commit + auto s = keypages1.front(); + stateStorage1->merge(true, *s); + keypages1.pop_front(); + } + + if (rand() % 3 == 0) + { // random commit + auto s = keypages2.front(); + stateStorage2->merge(true, *s); + keypages2.pop_front(); + } + index += keyCount; + BCOS_LOG(DEBUG) << LOG_DESC("<<<<<<<<<<<<<<<<<<<<<<\n\n\n\n\n\n\n\n\n"); + } +} + +BOOST_AUTO_TEST_CASE(pageMergeBig) +{ + auto valueFields = "value1"; + + auto stateStorage = make_shared(nullptr); + StateStorageInterface::Ptr prev = stateStorage; + + auto tableStorage = std::make_shared(prev, 1024); + auto tableCount = 5; + auto rowCount = 20000; + srand(time(NULL)); + std::vector> keys; + keys.resize(tableCount); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + BOOST_REQUIRE(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < rowCount; ++k) + { + keys[j][k] = true; + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + for (int k = rowCount - 1; k >= 0; --k) + { + if (k % 5 < 4) + { + keys[j][k] = false; + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int k = rowCount - 1; k >= 0; --k) + { + if (rand() % 2 == 0) + { + keys[j][k] = true; + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int k = 0; k < rowCount; ++k) + { + if (rand() % 3 == 0) + { + keys[j][k] = true; + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int k = rowCount - 1; k >= 0; --k) + { + if (k % 5 < 4) + { + keys[j][k] = false; + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + + for (int k = 0; k < rowCount; ++k) + { + if (rand() % 3 == 0) + { + keys[j][k] = true; + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(k)); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + for (int k = 0; k < rowCount; ++k) + { + if (rand() % 3 == 0) + { + keys[j][k] = false; + auto entry = std::make_optional(table->newDeletedEntry()); + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + // BCOS_LOG(TRACE) << LOG_DESC("delete") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + BOOST_REQUIRE_NO_THROW(table->setRow(key, *entry)); + } + } + } + + for (int j = 0; j < tableCount; ++j) + { + auto tableName = "table_" + boost::lexical_cast(j); + auto table = tableStorage->openTable(tableName); + BOOST_REQUIRE(table); + + for (int k = 0; k < rowCount; ++k) + { + auto key = + boost::lexical_cast(j) + "_" + boost::lexical_cast(k); + auto entry = table->getRow(key); + // BCOS_LOG(TRACE) << LOG_DESC("getRow") << LOG_KV("tableName", tableName) + // << LOG_KV("key", key); + if (keys[j][k]) + { + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->get() == boost::lexical_cast(k)); + } + } + } +} + +BOOST_AUTO_TEST_CASE(insertAndDelete) +{ + boost::log::core::get()->set_logging_enabled(true); + auto valueFields = "value1"; + auto cacheSize = 256 * 1024 * 1024; + auto pageSize = 512; + auto stateStorage0 = make_shared(nullptr); + stateStorage0->setMaxCapacity(cacheSize); + StateStorageInterface::Ptr prev0 = stateStorage0; + + auto tableName = "table_0"; + BOOST_REQUIRE(prev0->createTable(tableName, valueFields)); + + size_t count = 10; + auto keyCount = 100; + auto index = 0; + srand(time(NULL)); + for (size_t i = 0; i < count; ++i) + { + auto tableStorage0 = std::make_shared(prev0, pageSize); + auto table0 = tableStorage0->openTable(tableName); + BOOST_REQUIRE(table0); + + std::vector keys(keyCount, 0); +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + keys[k] = v; + auto key = boost::lexical_cast(v); + auto value = + boost::lexical_cast(i) + "_" + boost::lexical_cast(v); + auto entry0 = std::make_optional(table0->newEntry()); + entry0->setField(0, value); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + } + +#if defined(__APPLE__) +#pragma omp parallel for +#endif + for (int k = 0; k < keyCount; ++k) + { + auto v = rand() + index + k; + auto key = boost::lexical_cast(v); + auto entry0 = std::make_optional(table0->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + } + if (rand() % 2 == 0) + { + BCOS_LOG(DEBUG) << LOG_DESC("delete from head"); + for (int k = 0; k < keyCount; ++k) + { + auto key = boost::lexical_cast(keys[k]); + auto entry0 = std::make_optional(table0->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + } + } + else + { + BCOS_LOG(DEBUG) << LOG_DESC("delete from tail"); + for (int k = keyCount - 1; k >= 0; --k) + { + auto key = boost::lexical_cast(keys[k]); + auto entry0 = std::make_optional(table0->newDeletedEntry()); + BOOST_REQUIRE_NO_THROW(table0->setRow(key, *entry0)); + } + } + auto hash0 = tableStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>KeyPageStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + BOOST_TEST(hash0.hex() != crypto::HashType(0).hex()); + tableStorage0->setReadOnly(true); + stateStorage0->merge(true, *tableStorage0); + hash0 = stateStorage0->hash(hashImpl); + BCOS_LOG(DEBUG) << LOG_DESC(">>>>>>>>>>>>stateStorage0") << LOG_KV("i", i) + << LOG_KV("hash", hash0.hex()); + index += keyCount; + } +} + + +BOOST_AUTO_TEST_SUITE_END() +} // namespace bcos::test diff --git a/bcos-table/test/unittests/libtable/TestStateStorage.cpp b/bcos-table/test/unittests/libtable/TestStateStorage.cpp new file mode 100644 index 0000000..91ace9e --- /dev/null +++ b/bcos-table/test/unittests/libtable/TestStateStorage.cpp @@ -0,0 +1,1230 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the Table + * @file Table.cpp + */ + +#include "Hash.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-table/src/StateStorage.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::crypto; + +#if defined(__APPLE__) +#undef __APPLE__ +#endif + +namespace std +{ +inline ostream& operator<<(ostream& os, const std::optional& entry) +{ + os << entry.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::optional
& table) +{ + os << table.has_value(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::unique_ptr& error) +{ + os << error->what(); + return os; +} + +inline ostream& operator<<(ostream& os, const std::tuple& pair) +{ + os << std::get<0>(pair) << " " << std::get<1>(pair).hex(); + return os; +} +} // namespace std + +namespace bcos +{ +namespace test +{ +struct TableFactoryFixture +{ + TableFactoryFixture() + { + hashImpl = make_shared(); + memoryStorage = make_shared(nullptr); + BOOST_TEST(memoryStorage != nullptr); + tableFactory = make_shared(memoryStorage); + BOOST_TEST(tableFactory != nullptr); + } + + ~TableFactoryFixture() {} + std::optional
createDefaultTable() + { + std::promise> createPromise; + tableFactory->asyncCreateTable( + testTableName, valueField, [&](auto&& error, std::optional
table) { + BOOST_CHECK(!error); + createPromise.set_value(table); + }); + return createPromise.get_future().get(); + } + + std::shared_ptr hashImpl = nullptr; + std::shared_ptr memoryStorage = nullptr; + protocol::BlockNumber m_blockNumber = 0; + std::shared_ptr tableFactory = nullptr; + std::string testTableName = "t_test"; + std::string keyField = "key"; + std::string valueField = "value"; +}; +BOOST_FIXTURE_TEST_SUITE(StateStorageTest, TableFactoryFixture) + +BOOST_AUTO_TEST_CASE(constructor) +{ + auto threadPool = ThreadPool("a", 1); + auto tf = std::make_shared(memoryStorage); +} + +BOOST_AUTO_TEST_CASE(create_Table) +{ + std::string tableName("t_test1"); + auto table = tableFactory->openTable(tableName); + + BOOST_TEST(!table); + auto ret = tableFactory->createTable(tableName, valueField); + BOOST_TEST(ret); + + table = tableFactory->openTable(tableName); + BOOST_TEST(table); + + BOOST_CHECK_THROW(tableFactory->createTable(tableName, valueField), bcos::Error); +} + +BOOST_AUTO_TEST_CASE(rollback) +{ + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + auto table = tableFactory->openTable(testTableName); + + auto deleteEntry = table->newEntry(); + deleteEntry.setStatus(Entry::DELETED); + BOOST_REQUIRE_NO_THROW(table->setRow("name", deleteEntry)); + + auto hash = tableFactory->hash(hashImpl); + +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("ab98649ca506b076000000000000000000000000000000000000000000000001").hex()); +#endif + auto entry = std::make_optional(table->newEntry()); + BOOST_REQUIRE_NO_THROW(entry->setField(0, "Lili")); + BOOST_REQUIRE_NO_THROW(table->setRow("name", *entry)); + + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + BOOST_REQUIRE(entry->dirty() == true); + BOOST_REQUIRE(entry->getField(0) == "Lili"); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + + entry = table->newEntry(); + entry->setField(0, "12345"); + table->setRow("id", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint1 = std::make_shared(); + tableFactory->setRecoder(savePoint1); + + entry = table->newEntry(); + entry->setField(0, "500"); + table->setRow("balance", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + auto savePoint2 = std::make_shared(); + tableFactory->setRecoder(savePoint2); + + auto deleteEntry2 = std::make_optional(table->newDeletedEntry()); + table->setRow("name", *deleteEntry2); + hash = tableFactory->hash(hashImpl); + +// delete entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("4160d337ddd671e0000000000000000000000000000000000000000000000001").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("4160d337ddd671e0000000000000000000000000000000000000000000000001").hex()); +#endif + std::cout << "Try remove balance" << std::endl; + tableFactory->rollback(*savePoint2); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE_NE(entry->status(), Entry::DELETED); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2b7be3797d97dcf7000000000000000000000000000000000000000000000000").hex()); +#endif + tableFactory->rollback(*savePoint1); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + + tableFactory->rollback(*savePoint); + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + + // insert without version + entry = table->newEntry(); + entry->setField(0, "new record"); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("2c14904fc33bbbae000000000000000000000000000000000000000000000000").hex()); +#endif + + entry = table->newDeletedEntry(); + BOOST_REQUIRE_NO_THROW(table->setRow("id", *entry)); + hash = tableFactory->hash(hashImpl); + // delete entry will cause hash mismatch +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("159ca8eb7641c2c1000000000000000000000000000000000000000000000001").hex()); +#endif +} + +BOOST_AUTO_TEST_CASE(rollback2) +{ + auto hash0 = tableFactory->hash(hashImpl); + // auto savePoint0 = tableFactory->savepoint(); + auto savePoint0 = std::make_shared(); + tableFactory->setRecoder(savePoint0); + BOOST_REQUIRE(hash0 == crypto::HashType(0)); + auto ret = createDefaultTable(); + BOOST_REQUIRE(ret); + auto table = tableFactory->openTable(testTableName); + + auto deleteEntry = table->newDeletedEntry(); + table->setRow("name", deleteEntry); + auto hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("ab98649ca506b076000000000000000000000000000000000000000000000001").hex()); +#endif + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "Lili"); + table->setRow("name", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + // BOOST_REQUIRE(table->dirty() == true); + BOOST_REQUIRE(entry->dirty() == true); + BOOST_REQUIRE(entry->getField(0) == "Lili"); + // auto savePoint = tableFactory->savepoint(); + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + + entry = table->newEntry(); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + table->setRow("id", *entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("d26dbc9a92ed28b1000000000000000000000000000000000000000000000000").hex()); +#endif + // BOOST_REQUIRE(table->dirty() == true); + + tableFactory->rollback(*savePoint); + + entry = table->getRow("name"); + BOOST_REQUIRE(entry.has_value()); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("balance"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + entry = table->getRow("id"); + BOOST_REQUIRE(!entry); + hash = tableFactory->hash(hashImpl); +#if defined(__APPLE__) + BOOST_CHECK_EQUAL(hash.hex(), + crypto::HashType("c18354d205471d61000000000000000000000000000000000000000000000000").hex()); +#endif + + // BOOST_REQUIRE(table->dirty() == true); + tableFactory->rollback(*savePoint0); + hash = tableFactory->hash(hashImpl); + BOOST_REQUIRE(hash.hex() == crypto::HashType("").hex()); + entry = table->getRow("name"); + BOOST_REQUIRE(!entry); + + auto hash00 = tableFactory->hash(hashImpl); + BOOST_REQUIRE(hash00 == crypto::HashType(0)); + + BOOST_REQUIRE_EQUAL_COLLECTIONS(hash0.begin(), hash0.end(), hash00.begin(), hash00.end()); + BOOST_REQUIRE(hash00 == hash0); + table = tableFactory->openTable(testTableName); + BOOST_REQUIRE(!table); +} + +BOOST_AUTO_TEST_CASE(rollback3) +{ + // Test rollback multi state storage +} + +BOOST_AUTO_TEST_CASE(hash) +{ + auto ret = createDefaultTable(); + BOOST_TEST(ret); + + tableFactory->setEnableTraverse(true); + + auto table = tableFactory->openTable(testTableName); + auto entry = std::make_optional(table->newEntry()); + // entry->setField("key", "name"); + entry->setField(0, "Lili"); + BOOST_CHECK_NO_THROW(table->setRow("name", *entry)); + entry = table->getRow("name"); + BOOST_TEST(entry); + + entry = std::make_optional(table->newEntry()); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + BOOST_CHECK_NO_THROW(table->setRow("id", *entry)); + entry = table->getRow("id"); + BOOST_TEST(entry); + entry = table->getRow("name"); + BOOST_TEST(entry); + // BOOST_TEST(table->dirty() == true); + auto keys = table->getPrimaryKeys({}); + BOOST_TEST(keys.size() == 2); + + auto entries = table->getRows(keys); + BOOST_TEST(entries.size() == 2); + + auto dbHash1 = tableFactory->hash(hashImpl); + + auto savePoint = std::make_shared(); + tableFactory->setRecoder(savePoint); + auto idEntry = table->getRow("id"); + + auto deletedEntry = std::make_optional(table->newDeletedEntry()); + BOOST_CHECK_NO_THROW(table->setRow("id", *deletedEntry)); + entry = table->getRow("id"); + BOOST_CHECK(!entry); + + tableFactory->rollback(*savePoint); + entry = table->getRow("name"); + BOOST_TEST(entry); + entry = table->getRow("balance"); + BOOST_TEST(!entry); + // BOOST_TEST(table->dirty() == true); + + auto dbHash2 = tableFactory->hash(hashImpl); + BOOST_CHECK_EQUAL(dbHash1.hex(), dbHash2.hex()); + + // getPrimaryKeys and getRows + entry = table->newEntry(); + // entry->setField("key", "id"); + entry->setField(0, "12345"); + BOOST_CHECK_NO_THROW(table->setRow("id", *entry)); + entry = table->getRow("name"); + entry->setField(0, "Wang"); + BOOST_CHECK_NO_THROW(table->setRow("name", *entry)); + entry = table->newEntry(); + // entry->setField("key", "balance"); + entry->setField(0, "12345"); + BOOST_CHECK_NO_THROW(table->setRow("balance", *entry)); + BOOST_TEST(entry); + keys = table->getPrimaryKeys({}); + BOOST_TEST(keys.size() == 3); + + entries = table->getRows(keys); + BOOST_TEST(entries.size() == 3); + entry = table->getRow("name"); + BOOST_TEST(entry); + entry = table->getRow("balance"); + BOOST_TEST(entry); + entry = table->getRow("balance1"); + BOOST_TEST(!entry); + + auto nameEntry = table->getRow("name"); + auto deletedEntry2 = std::make_optional(table->newDeletedEntry()); + BOOST_CHECK_NO_THROW(table->setRow("name", *deletedEntry2)); + entry = table->getRow("name"); + BOOST_CHECK(!entry); + // BOOST_CHECK_EQUAL(entry->status(), Entry::DELETED); + keys = table->getPrimaryKeys({}); + BOOST_TEST(keys.size() == 2); + + entries = table->getRows(keys); + BOOST_TEST(entries.size() == 2); + + auto idEntry2 = table->getRow("id"); + auto deletedEntry3 = std::make_optional(table->newDeletedEntry()); + BOOST_CHECK_NO_THROW(table->setRow("id", *deletedEntry3)); + entry = table->getRow("id"); + BOOST_CHECK(!entry); + // BOOST_CHECK_EQUAL(entry->status(), Entry::DELETED); + keys = table->getPrimaryKeys({}); + BOOST_TEST(keys.size() == 1); + + entries = table->getRows(keys); + BOOST_TEST(entries.size() == 1); + // tableFactory->asyncCommit([](Error::Ptr, size_t) {}); +} + +BOOST_AUTO_TEST_CASE(open_sysTables) +{ + auto table = tableFactory->openTable(StorageInterface::SYS_TABLES); + BOOST_TEST(table); +} + +BOOST_AUTO_TEST_CASE(openAndCommit) +{ + auto hashImpl2 = make_shared(); + auto memoryStorage2 = make_shared(nullptr); + auto tableFactory2 = make_shared(memoryStorage2); + + for (int i = 10; i < 20; ++i) + { + BOOST_TEST(tableFactory2 != nullptr); + + std::string tableName = "testTable" + boost::lexical_cast(i); + auto key = "testKey" + boost::lexical_cast(i); + tableFactory2->createTable(tableName, "value"); + auto table = tableFactory2->openTable(tableName); + + auto entry = std::make_optional(table->newEntry()); + entry->setField(0, "hello world!"); + table->setRow(key, *entry); + + std::promise getRow; + table->asyncGetRow(key, [&](auto&& error, auto&& result) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(result->getField(0), "hello world!"); + + getRow.set_value(true); + }); + + getRow.get_future().get(); + } +} + +BOOST_AUTO_TEST_CASE(chainLink) +{ + std::vector storages; + auto valueFields = "value1"; + + StateStorage::Ptr prev = nullptr; + for (int i = 0; i < 10; ++i) + { + auto tableStorage = std::make_shared(prev); + for (int j = 0; j < 10; ++j) + { + auto tableName = "table_" + boost::lexical_cast(i) + "_" + + boost::lexical_cast(j); + BOOST_CHECK(tableStorage->createTable(tableName, valueFields)); + + auto table = tableStorage->openTable(tableName); + BOOST_TEST(table); + + for (int k = 0; k < 10; ++k) + { + auto entry = std::make_optional(table->newEntry()); + auto key = + boost::lexical_cast(i) + boost::lexical_cast(k); + entry->setField(0, boost::lexical_cast(i)); + BOOST_CHECK_NO_THROW(table->setRow(key, *entry)); + } + } + + prev = tableStorage; + storages.push_back(tableStorage); + } + + for (int index = 0; index < 10; ++index) + { + auto storage = storages[index]; + // Data count must be 10 * 10 + 10 + std::atomic totalCount = 0; + storage->parallelTraverse(false, [&](auto&&, auto&&, auto&&) { + ++totalCount; + return true; + }); + + BOOST_CHECK_EQUAL(totalCount, 10 * 10 + 10); // extra 100 for s_tables + + // Dirty data count must be 10 * 10 + 10 + std::atomic dirtyCount = 0; + storage->parallelTraverse(true, [&](auto&&, auto&&, auto&&) { + ++dirtyCount; + return true; + }); + + BOOST_CHECK_EQUAL(dirtyCount, 10 * 10 + 10); // extra 100 for s_tables + + // Low level can't touch high level's data + for (int i = 0; i < 10; ++i) + { + for (int j = 0; j < 10; ++j) + { + auto tableName = "table_" + boost::lexical_cast(i) + "_" + + boost::lexical_cast(j); + + auto table = storage->openTable(tableName); + if (i > index) + { + BOOST_TEST(!table); + } + else + { + BOOST_TEST(table); + + for (int k = 0; k < 10; ++k) + { + auto key = boost::lexical_cast(i) + + boost::lexical_cast(k); + + auto entry = table->getRow(key); + if (i > index) + { + BOOST_TEST(!entry); + } + else + { + BOOST_TEST(entry); + + BOOST_CHECK_GT(entry->size(), 0); + if (i == index) + { + BOOST_CHECK_EQUAL(entry->dirty(), true); + } + else + { + BOOST_CHECK_EQUAL(entry->dirty(), false); + } + BOOST_CHECK_EQUAL( + entry->getField(0), boost::lexical_cast(i)); + } + } + } + } + } + + // After reading, current storage should include previous storage's data, previous data's + // dirty should be false + totalCount = 0; + tbb::concurrent_vector> checks; + storage->parallelTraverse(false, [&](auto&& table, auto&&, auto&& entry) { + checks.push_back([index, table, entry] { + // BOOST_CHECK_NE(tableInfo, nullptr); + if (table != "s_tables") + { + auto i = boost::lexical_cast(entry.getField(0)); + + BOOST_CHECK_LE(i, index); + } + }); + + ++totalCount; + return true; + }); + + for (auto& it : checks) + { + it(); + } + + BOOST_CHECK_EQUAL(totalCount, (10 * 10 + 10) * (index + 1)); + + checks.clear(); + dirtyCount = 0; + storage->parallelTraverse(true, [&](auto&& table, auto&&, auto&& entry) { + checks.push_back([index, table, entry]() { + // BOOST_CHECK_NE(tableInfo, nullptr); + if (table != "s_tables") + { + auto i = boost::lexical_cast(entry.getField(0)); + + if (i == index) + { + BOOST_CHECK_EQUAL(entry.dirty(), true); + } + else + { + BOOST_CHECK_EQUAL(entry.dirty(), false); + } + } + }); + + ++dirtyCount; + return true; + }); + + for (auto& it : checks) + { + it(); + } + + BOOST_CHECK_EQUAL(dirtyCount, 10 * 10 + 10); + } +} + +BOOST_AUTO_TEST_CASE(getRows) +{ + std::vector storages; + auto valueFields = "value1,value2,value3"; + + StateStorage::Ptr prev = nullptr; + prev = std::make_shared(prev); + auto tableStorage = std::make_shared(prev); + + BOOST_CHECK(prev->createTable("t_test", valueFields)); + + auto table = prev->openTable("t_test"); + BOOST_TEST(table); + + for (size_t i = 0; i < 100; ++i) + { + auto entry = table->newEntry(); + entry.importFields({"data" + boost::lexical_cast(i)}); + table->setRow("key" + boost::lexical_cast(i), entry); + } + + // query 50-150 + std::vector keys; + for (size_t i = 50; i < 150; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + + auto queryTable = tableStorage->openTable("t_test"); + BOOST_TEST(queryTable); + + std::vector views; + for (auto& key : keys) + { + views.push_back(key); + } + auto values = queryTable->getRows(views); + + for (size_t i = 0; i < 100; ++i) + { + auto entry = values[i]; + if (i + 50 < 100) + { + BOOST_TEST(entry); + BOOST_CHECK_EQUAL(entry->dirty(), false); + BOOST_CHECK_GT(entry->size(), 0); + } + else + { + BOOST_TEST(!entry); + } + } + + for (size_t i = 0; i < 10; ++i) + { + auto entry = queryTable->newEntry(); + entry.importFields({"data" + boost::lexical_cast(i)}); + queryTable->setRow("key" + boost::lexical_cast(i), entry); + } + + // Query 0-30 local(0-9) prev(10-29) + keys.clear(); + for (size_t i = 0; i < 30; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + + views.clear(); + for (auto& key : keys) + { + views.push_back(key); + } + values = queryTable->getRows(views); + + for (size_t i = 0; i < 30; ++i) + { + auto entry = values[i]; + if (i < 10) + { + BOOST_TEST(entry); + BOOST_CHECK_EQUAL(entry->dirty(), true); + } + else + { + BOOST_TEST(entry); + BOOST_CHECK_EQUAL(entry->dirty(), false); + } + } + + // Test deleted entry + for (size_t i = 10; i < 20; ++i) + { + queryTable->setRow( + "key" + boost::lexical_cast(i), queryTable->newDeletedEntry()); + } + + auto values2 = queryTable->getRows(keys); + for (size_t i = 0; i < values2.size(); ++i) + { + if (i >= 10 && i < 20) + { + BOOST_CHECK(!values2[i]); + } + else + { + BOOST_CHECK(values2[i]); + } + } + + // Test rollback + auto recoder = std::make_shared(); + tableStorage->setRecoder(recoder); + for (size_t i = 70; i < 80; ++i) + { + Entry myEntry; + myEntry.importFields({"ddd1"}); + queryTable->setRow("key" + boost::lexical_cast(i), std::move(myEntry)); + } + + keys.clear(); + for (size_t i = 70; i < 80; ++i) + { + keys.push_back("key" + boost::lexical_cast(i)); + } + + auto values3 = queryTable->getRows(keys); + for (auto& it : values3) + { + BOOST_CHECK(it); + BOOST_CHECK_EQUAL(it->getField(0), "ddd1"); + BOOST_CHECK_EQUAL(it->dirty(), true); + } + + tableStorage->rollback(*recoder); + + auto values4 = queryTable->getRows(keys); + size_t count = 70; + for (auto& it : values4) + { + BOOST_CHECK(it); + BOOST_CHECK_EQUAL(it->getField(0), "data" + boost::lexical_cast(count)); + BOOST_CHECK_EQUAL(it->dirty(), false); + ++count; + } +} + +BOOST_AUTO_TEST_CASE(checkVersion) +{ + BOOST_CHECK_NO_THROW(tableFactory->createTable("testTable", "value1, value2, value3")); + auto table = tableFactory->openTable("testTable"); + + Entry value1; + value1.importFields({"v1"}); + table->setRow("abc", std::move(value1)); + + Entry value2; + value2.importFields({"v2"}); + BOOST_CHECK_NO_THROW(table->setRow("abc", std::move(value2))); + + Entry value3; + value3.importFields({"v3"}); + BOOST_CHECK_NO_THROW(table->setRow("abc", std::move(value3))); +} + +BOOST_AUTO_TEST_CASE(deleteAndGetRows) +{ + StateStorage::Ptr storage1 = std::make_shared(nullptr); + storage1->setEnableTraverse(true); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + Entry entry2; + entry2.importFields({"value2"}); + storage1->asyncSetRow( + "table", "key2", std::move(entry2), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage2 = std::make_shared(storage1); + storage2->setEnableTraverse(true); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key2", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage3 = std::make_shared(storage2); + storage3->asyncGetPrimaryKeys( + "table", std::nullopt, [](Error::UniquePtr error, std::vector keys) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(keys.size(), 1); + BOOST_CHECK_EQUAL(keys[0], "key1"); + }); +} + +BOOST_AUTO_TEST_CASE(deletedAndGetRow) +{ + StateStorage::Ptr storage1 = std::make_shared(nullptr); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage2 = std::make_shared(storage1); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key1", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + BOOST_CHECK(!entry); + }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + BOOST_CHECK(!entry); + }); +} + +BOOST_AUTO_TEST_CASE(deletedAndGetRows) +{ + StateStorage::Ptr storage1 = std::make_shared(nullptr); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage2 = std::make_shared(storage1); + Entry deleteEntry; + deleteEntry.setStatus(Entry::DELETED); + storage2->asyncSetRow("table", "key1", std::move(deleteEntry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + std::string_view keys[] = {"key1"}; + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(entry.size(), 1); + BOOST_CHECK(!entry[0]); + }); +} + +BOOST_AUTO_TEST_CASE(rollbackAndGetRow) +{ + StateStorage::Ptr storage1 = std::make_shared(nullptr); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage2 = std::make_shared(storage1); + auto recoder = std::make_shared(); + storage2->setRecoder(recoder); + + Entry entry2; + entry2.importFields({"value2"}); + storage2->asyncSetRow( + "table", "key1", std::move(entry2), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + BOOST_CHECK(entry); + BOOST_CHECK_EQUAL(entry->getField(0), "value2"); + }); + + storage2->rollback(*recoder); + + storage2->asyncGetRow("table", "key1", [](Error::UniquePtr error, std::optional entry) { + BOOST_CHECK(!error); + BOOST_CHECK(entry); + BOOST_CHECK_EQUAL(entry->getField(0), "value1"); + }); +} + +BOOST_AUTO_TEST_CASE(rollbackAndGetRows) +{ + StateStorage::Ptr storage1 = std::make_shared(nullptr); + + storage1->asyncCreateTable( + "table", "value", [](Error::UniquePtr error, std::optional
table) { + BOOST_CHECK(!error); + BOOST_CHECK(table); + }); + + Entry entry1; + entry1.importFields({"value1"}); + storage1->asyncSetRow( + "table", "key1", std::move(entry1), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + StateStorage::Ptr storage2 = std::make_shared(storage1); + auto recoder = std::make_shared(); + storage2->setRecoder(recoder); + + Entry entry2; + entry2.importFields({"value2"}); + storage2->asyncSetRow( + "table", "key1", std::move(entry2), [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + + std::string_view keys[] = {"key1"}; + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(entry.size(), 1); + BOOST_CHECK_EQUAL(entry[0].value().getField(0), "value2"); + }); + + storage2->rollback(*recoder); + + storage2->asyncGetRows( + "table", keys, [](Error::UniquePtr error, std::vector> entry) { + BOOST_CHECK(!error); + BOOST_CHECK_EQUAL(entry.size(), 1); + BOOST_CHECK_EQUAL(entry[0].value().getField(0), "value1"); + }); +} + +BOOST_AUTO_TEST_CASE(randomRWHash) +{ + std::vector> rwSet; + + std::random_device rd; + for (size_t i = 0; i < 3; ++i) + { + auto keyNum = rd(); + bool write = keyNum % 2; + + std::string table; + std::string key; + std::string value; + if (write || i == 0) + { + write = true; + table = boost::lexical_cast(keyNum % 10); + key = boost::lexical_cast(keyNum); + value = boost::lexical_cast(rd()); + } + else + { + auto index = keyNum % i; + table = std::get<1>(rwSet[index]); + key = std::get<2>(rwSet[index]); + } + + rwSet.emplace_back(std::make_tuple(write, table, key, value)); + } + + std::vector prevHashes; + for (size_t times = 0; times < 10; ++times) + { + std::vector hashes; + StateStorage::Ptr prev; + for (size_t i = 0; i < 10; ++i) + { + StateStorage::Ptr storage = std::make_shared(prev); + + for (auto& it : rwSet) + { + auto& [write, table, key, value] = it; + + storage->asyncOpenTable(table, [storage, tableName = table](Error::UniquePtr error, + std::optional
tableItem) { + BOOST_CHECK(!error); + if (!tableItem) + { + storage->asyncCreateTable(tableName, "value", + [](Error::UniquePtr error, std::optional
tableItem) { + BOOST_CHECK(!error); + BOOST_CHECK(tableItem); + }); + } + }); + + if (write) + { + Entry entry; + entry.importFields({value}); + storage->asyncSetRow(table, key, std::move(entry), + [](Error::UniquePtr error) { BOOST_CHECK(!error); }); + } + else + { + storage->asyncGetRow(table, key, + [](Error::UniquePtr error, std::optional) { BOOST_CHECK(!error); }); + } + } + + hashes.push_back(storage->hash(hashImpl)); + storage->setReadOnly(false); + prev = storage; + } + + if (!prevHashes.empty()) + { + BOOST_CHECK_EQUAL_COLLECTIONS( + prevHashes.begin(), prevHashes.end(), hashes.begin(), hashes.end()); + } + prevHashes.swap(hashes); + hashes.clear(); + } +} + +BOOST_AUTO_TEST_CASE(hash_map) +{ + class EntryKey + { + public: + EntryKey() {} + EntryKey(std::string_view table, std::string_view key) : m_table(table), m_key(key) {} + EntryKey(std::string_view table, std::string key) : m_table(table), m_key(std::move(key)) {} + + EntryKey(const EntryKey&) = default; + EntryKey& operator=(const EntryKey&) = default; + EntryKey(EntryKey&&) noexcept = default; + EntryKey& operator=(EntryKey&&) noexcept = default; + + std::string_view table() const { return m_table; } + + std::string_view key() const + { + std::string_view view; + std::visit([&view](auto&& key) { view = key; }, m_key); + + return view; + } + + bool operator==(const EntryKey& rhs) const + { + return m_table == rhs.m_table && key() == rhs.key(); + } + + bool operator<(const EntryKey& rhs) const + { + if (m_table != rhs.m_table) + { + return m_table < rhs.m_table; + } + + return m_key < rhs.m_key; + } + + private: + std::string_view m_table; + std::variant m_key; + }; + + struct EntryKeyHasher + { + size_t hash(const EntryKey& dataKey) const + { + size_t seed = hashString(dataKey.table()); + boost::hash_combine(seed, hashString(dataKey.key())); + + return seed; + } + + bool equal(const EntryKey& lhs, const EntryKey& rhs) const + { + return lhs.table() == rhs.table() && lhs.key() == rhs.key(); + } + + std::hash hashString; + }; + + tbb::concurrent_hash_map data; + + std::string tableName = "table"; + std::string key = "key"; + + decltype(data)::const_accessor it; + BOOST_CHECK(data.emplace(it, EntryKey("table", std::string_view("key")), 100)); + + decltype(data)::const_accessor findIt; + BOOST_CHECK(data.find(findIt, EntryKey("table", std::string_view("key")))); +} + +BOOST_AUTO_TEST_CASE(importPrev) {} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-table/test/unittests/main/main.cpp b/bcos-table/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-table/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-table/test/unittests/mock/MockTransactionalStorage.h b/bcos-table/test/unittests/mock/MockTransactionalStorage.h new file mode 100644 index 0000000..d23ba30 --- /dev/null +++ b/bcos-table/test/unittests/mock/MockTransactionalStorage.h @@ -0,0 +1,83 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +using namespace bcos::protocol; +namespace bcos::test +{ +class MockTransactionalStorage : public bcos::storage::TransactionalStorageInterface +{ +public: + MockTransactionalStorage(bcos::crypto::Hash::Ptr hashImpl) : m_hashImpl(std::move(hashImpl)) + { + m_inner = std::make_shared(nullptr); + m_inner->setEnableTraverse(true); + } + + void asyncGetPrimaryKeys(const std::string_view& table, + const std::optional& _condition, + std::function)> _callback) noexcept override + { + m_inner->asyncGetPrimaryKeys(table, _condition, std::move(_callback)); + } + + void asyncGetRow(const std::string_view& table, const std::string_view& _key, + std::function)> _callback) noexcept + override + { + m_inner->asyncGetRow(table, _key, std::move(_callback)); + } + + void asyncGetRows(const std::string_view& table, + const std::variant, + const gsl::span>& _keys, + std::function>)> + _callback) noexcept override + { + m_inner->asyncGetRows(table, _keys, std::move(_callback)); + } + + void asyncSetRow(const std::string_view& table, const std::string_view& key, + storage::Entry entry, std::function callback) noexcept override + { + m_inner->asyncSetRow(table, key, std::move(entry), std::move(callback)); + } + + void asyncOpenTable(std::string_view tableName, + std::function)> callback) noexcept + override + { + m_inner->asyncOpenTable(tableName, std::move(callback)); + } + + void asyncPrepare(const TwoPCParams& params, + const bcos::storage::TraverseStorageInterface::ConstPtr& storage, + std::function callback) noexcept override + { + boost::ignore_unused(params, storage); + callback(nullptr, 0); + } + + void asyncCommit(const TwoPCParams& params, + std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr, 0); + } + + void asyncRollback( + const TwoPCParams& params, std::function callback) noexcept override + { + BOOST_CHECK_GT(params.number, 0); + callback(nullptr); + } + + bcos::storage::StateStorage::Ptr m_inner; + bcos::crypto::Hash::Ptr m_hashImpl; +}; +} // namespace bcos::test \ No newline at end of file diff --git a/bcos-tars-protocol/CMakeLists.txt b/bcos-tars-protocol/CMakeLists.txt new file mode 100644 index 0000000..b51a150 --- /dev/null +++ b/bcos-tars-protocol/CMakeLists.txt @@ -0,0 +1,53 @@ +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +project(bcos-tars-protocol VERSION ${VERSION}) + +# for tars generator +set(TARS_HEADER_DIR ${CMAKE_BINARY_DIR}/generated/bcos-tars-protocol/tars) +find_program(TARS_TARS2CPP tars2cpp REQUIRED) + +file(GLOB_RECURSE TARS_INPUT "*.tars") + +# generate tars +if(TARS_INPUT) + foreach(TARS_FILE ${TARS_INPUT}) + get_filename_component(TARS_NAME ${TARS_FILE} NAME_WE) + get_filename_component(TARS_PATH ${TARS_FILE} PATH) + add_custom_command( + OUTPUT ${TARS_HEADER_DIR}/${TARS_NAME}.h + WORKING_DIRECTORY ${TARS_PATH} + COMMAND ${TARS_TARS2CPP} ${TARS_FILE} --unjson --without-trace --dir=${TARS_HEADER_DIR} + COMMENT "generating ${TARS_FILE} to ${TARS_HEADER_DIR}" + VERBATIM + ) + + list(APPEND OUT_TARS_H_LIST ${TARS_HEADER_DIR}/${TARS_NAME}.h) + endforeach() +endif() + +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${OUT_TARS_H_LIST}") + +file(GLOB_RECURSE SRC_LIST bcos-tars-protocol/*.cpp) + +find_package(tarscpp REQUIRED) +find_package(TBB REQUIRED) + +add_library(${TARS_PROTOCOL_TARGET} ${SRC_LIST} ${OUT_TARS_H_LIST}) +target_include_directories(${TARS_PROTOCOL_TARGET} PUBLIC + $ + $ + $ + $) +target_link_libraries(${TARS_PROTOCOL_TARGET} PUBLIC bcos-concepts bcos-crypto ${PROTOCOL_TARGET} ${TOOL_TARGET} tarscpp::tarsservant tarscpp::tarsutil TBB::tbb) + +if(TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +include(GNUInstallDirs) +install(TARGETS ${TARS_PROTOCOL_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-tars-protocol" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") +install(DIRECTORY "${CMAKE_BINARY_DIR}/generated/bcos-tars-protocol" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/Common.h b/bcos-tars-protocol/bcos-tars-protocol/Common.h new file mode 100644 index 0000000..cec8c10 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/Common.h @@ -0,0 +1,415 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once +#include "bcos-framework/executor/ParallelTransactionExecutorInterface.h" +#include "bcos-tars-protocol/tars/GatewayInfo.h" +#include "bcos-tars-protocol/tars/GroupInfo.h" +#include "bcos-tars-protocol/tars/LedgerConfig.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include "bcos-tars-protocol/tars/TwoPCParams.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +namespace protocol +{ +const static bcos::crypto::HashType emptyHash; + +template +class BufferWriter +{ +protected: + using ByteType = typename Container::value_type; + using SizeType = typename Container::size_type; + + mutable Container _buffer; + ByteType* _buf; + SizeType _len; + SizeType _buf_len; + std::function _reserve; + +private: + BufferWriter(const BufferWriter&); + BufferWriter& operator=(const BufferWriter& buf); + +public: + BufferWriter() : _buf(NULL), _len(0), _buf_len(0), _reserve({}) + { +#ifndef GEN_PYTHON_MASK + _reserve = [](BufferWriter& os, size_t len) { + os._buffer.resize(len); + return os._buffer.data(); + }; +#endif + } + + ~BufferWriter() {} + + void reset() { _len = 0; } + + void writeBuf(const ByteType* buf, size_t len) + { + TarsReserveBuf(*this, _len + len); + memcpy(_buf + _len, buf, len); + _len += len; + } + + const Container& getByteBuffer() const + { + _buffer.resize(_len); + return _buffer; + } + Container& getByteBuffer() + { + _buffer.resize(_len); + return _buffer; + } + const ByteType* getBuffer() const { return _buf; } + size_t getLength() const { return _len; } + void swap(std::vector& v) + { + _buffer.resize(_len); + v.swap(_buffer); + _buf = NULL; + _buf_len = 0; + _len = 0; + } + void swap(BufferWriter& buf) + { + buf._buffer.swap(_buffer); + std::swap(_buf, buf._buf); + std::swap(_buf_len, buf._buf_len); + std::swap(_len, buf._len); + } +}; + +using BufferWriterByteVector = BufferWriter>; +using BufferWriterStdByteVector = BufferWriter>; +using BufferWriterString = BufferWriter; +} // namespace protocol + +inline bcos::group::ChainNodeInfo::Ptr toBcosChainNodeInfo( + bcos::group::ChainNodeInfoFactory::Ptr _factory, bcostars::ChainNodeInfo const& _tarsNodeInfo) +{ + auto nodeInfo = _factory->createNodeInfo(); + nodeInfo->setNodeName(_tarsNodeInfo.nodeName); + nodeInfo->setNodeCryptoType((bcos::group::NodeCryptoType)_tarsNodeInfo.nodeCryptoType); + nodeInfo->setNodeID(_tarsNodeInfo.nodeID); + nodeInfo->setIniConfig(_tarsNodeInfo.iniConfig); + nodeInfo->setMicroService(_tarsNodeInfo.microService); + nodeInfo->setNodeType((bcos::protocol::NodeType)_tarsNodeInfo.nodeType); + for (auto const& it : _tarsNodeInfo.serviceInfo) + { + nodeInfo->appendServiceInfo((bcos::protocol::ServiceType)it.first, it.second); + } + // recover the nodeProtocolVersion + auto& protocolInfo = _tarsNodeInfo.protocolInfo; + auto bcosProtocolInfo = std::make_shared( + (bcos::protocol::ProtocolModuleID)protocolInfo.moduleID, + (bcos::protocol::ProtocolVersion)protocolInfo.minVersion, + (bcos::protocol::ProtocolVersion)protocolInfo.maxVersion); + nodeInfo->setNodeProtocol(std::move(*bcosProtocolInfo)); + // recover system version(data version) + nodeInfo->setCompatibilityVersion(_tarsNodeInfo.compatibilityVersion); + return nodeInfo; +} + +inline bcos::group::GroupInfo::Ptr toBcosGroupInfo( + bcos::group::ChainNodeInfoFactory::Ptr _nodeFactory, + bcos::group::GroupInfoFactory::Ptr _groupFactory, bcostars::GroupInfo const& _tarsGroupInfo) +{ + auto groupInfo = _groupFactory->createGroupInfo(); + groupInfo->setChainID(_tarsGroupInfo.chainID); + groupInfo->setGroupID(_tarsGroupInfo.groupID); + groupInfo->setGenesisConfig(_tarsGroupInfo.genesisConfig); + groupInfo->setIniConfig(_tarsGroupInfo.iniConfig); + groupInfo->setWasm(_tarsGroupInfo.isWasm); + for (auto const& tarsNodeInfo : _tarsGroupInfo.nodeList) + { + groupInfo->appendNodeInfo(toBcosChainNodeInfo(_nodeFactory, tarsNodeInfo)); + } + return groupInfo; +} + +inline bcostars::ChainNodeInfo toTarsChainNodeInfo(bcos::group::ChainNodeInfo::Ptr _nodeInfo) +{ + bcostars::ChainNodeInfo tarsNodeInfo; + if (!_nodeInfo) + { + return tarsNodeInfo; + } + tarsNodeInfo.nodeName = _nodeInfo->nodeName(); + tarsNodeInfo.nodeCryptoType = _nodeInfo->nodeCryptoType(); + tarsNodeInfo.nodeType = _nodeInfo->nodeType(); + auto const& info = _nodeInfo->serviceInfo(); + for (auto const& it : info) + { + tarsNodeInfo.serviceInfo[(int32_t)it.first] = it.second; + } + tarsNodeInfo.nodeID = _nodeInfo->nodeID(); + tarsNodeInfo.microService = _nodeInfo->microService(); + tarsNodeInfo.iniConfig = _nodeInfo->iniConfig(); + // set the nodeProtocolVersion + auto const& protocol = _nodeInfo->nodeProtocol(); + tarsNodeInfo.protocolInfo.moduleID = protocol->protocolModuleID(); + tarsNodeInfo.protocolInfo.minVersion = protocol->minVersion(); + tarsNodeInfo.protocolInfo.maxVersion = protocol->maxVersion(); + // write the compatibilityVersion + tarsNodeInfo.compatibilityVersion = _nodeInfo->compatibilityVersion(); + return tarsNodeInfo; +} + +inline bcostars::GroupInfo toTarsGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo) +{ + bcostars::GroupInfo tarsGroupInfo; + if (!_groupInfo) + { + return tarsGroupInfo; + } + tarsGroupInfo.chainID = _groupInfo->chainID(); + tarsGroupInfo.groupID = _groupInfo->groupID(); + tarsGroupInfo.genesisConfig = _groupInfo->genesisConfig(); + tarsGroupInfo.iniConfig = _groupInfo->iniConfig(); + tarsGroupInfo.isWasm = _groupInfo->wasm() ? 1 : 0; + // set nodeList + std::vector tarsNodeList; + auto bcosNodeList = _groupInfo->nodeInfos(); + for (auto const& it : bcosNodeList) + { + auto const& nodeInfo = it.second; + tarsNodeList.emplace_back(toTarsChainNodeInfo(nodeInfo)); + } + tarsGroupInfo.nodeList = std::move(tarsNodeList); + return tarsGroupInfo; +} + +inline bcos::consensus::ConsensusNodeListPtr toConsensusNodeList( + bcos::crypto::KeyFactory::Ptr _keyFactory, + vector const& _tarsConsensusNodeList) +{ + auto consensusNodeList = std::make_shared(); + for (auto const& node : _tarsConsensusNodeList) + { + auto nodeID = _keyFactory->createKey( + bcos::bytesConstRef((bcos::byte*)node.nodeID.data(), node.nodeID.size())); + consensusNodeList->push_back( + std::make_shared(nodeID, node.weight)); + } + return consensusNodeList; +} + +inline bcos::ledger::LedgerConfig::Ptr toLedgerConfig( + bcostars::LedgerConfig const& _ledgerConfig, bcos::crypto::KeyFactory::Ptr _keyFactory) +{ + auto ledgerConfig = std::make_shared(); + auto consensusNodeList = toConsensusNodeList(_keyFactory, _ledgerConfig.consensusNodeList); + ledgerConfig->setConsensusNodeList(*consensusNodeList); + + auto observerNodeList = toConsensusNodeList(_keyFactory, _ledgerConfig.observerNodeList); + ledgerConfig->setObserverNodeList(*observerNodeList); + + auto hash = bcos::crypto::HashType(); + if (_ledgerConfig.hash.size() >= bcos::crypto::HashType::SIZE) + { + hash = bcos::crypto::HashType( + (const bcos::byte*)_ledgerConfig.hash.data(), bcos::crypto::HashType::SIZE); + } + ledgerConfig->setHash(hash); + ledgerConfig->setBlockNumber(_ledgerConfig.blockNumber); + ledgerConfig->setBlockTxCountLimit(_ledgerConfig.blockTxCountLimit); + ledgerConfig->setLeaderSwitchPeriod(_ledgerConfig.leaderSwitchPeriod); + ledgerConfig->setSealerId(_ledgerConfig.sealerId); + ledgerConfig->setGasLimit(std::make_tuple(_ledgerConfig.gasLimit, _ledgerConfig.blockNumber)); + ledgerConfig->setCompatibilityVersion(_ledgerConfig.compatibilityVersion); + return ledgerConfig; +} + +inline vector toTarsConsensusNodeList( + bcos::consensus::ConsensusNodeList const& _nodeList) +{ + // set consensusNodeList + vector tarsConsensusNodeList; + for (auto node : _nodeList) + { + bcostars::ConsensusNode consensusNode; + consensusNode.nodeID.assign(node->nodeID()->data().begin(), node->nodeID()->data().end()); + consensusNode.weight = node->weight(); + tarsConsensusNodeList.emplace_back(consensusNode); + } + return tarsConsensusNodeList; +} +inline bcostars::LedgerConfig toTarsLedgerConfig(bcos::ledger::LedgerConfig::Ptr _ledgerConfig) +{ + bcostars::LedgerConfig ledgerConfig; + if (!_ledgerConfig) + { + return ledgerConfig; + } + auto hash = _ledgerConfig->hash().asBytes(); + ledgerConfig.hash.assign(hash.begin(), hash.end()); + ledgerConfig.blockNumber = _ledgerConfig->blockNumber(); + ledgerConfig.blockTxCountLimit = _ledgerConfig->blockTxCountLimit(); + ledgerConfig.leaderSwitchPeriod = _ledgerConfig->leaderSwitchPeriod(); + ledgerConfig.sealerId = _ledgerConfig->sealerId(); + ledgerConfig.gasLimit = std::get<0>(_ledgerConfig->gasLimit()); + ledgerConfig.compatibilityVersion = _ledgerConfig->compatibilityVersion(); + + // set consensusNodeList + ledgerConfig.consensusNodeList = toTarsConsensusNodeList(_ledgerConfig->consensusNodeList()); + // set observerNodeList + ledgerConfig.observerNodeList = toTarsConsensusNodeList(_ledgerConfig->observerNodeList()); + return ledgerConfig; +} + +inline bcostars::P2PInfo toTarsP2PInfo(bcos::gateway::P2PInfo const& _p2pInfo) +{ + bcostars::P2PInfo tarsP2PInfo; + tarsP2PInfo.p2pID = _p2pInfo.p2pID; + tarsP2PInfo.agencyName = _p2pInfo.agencyName; + tarsP2PInfo.nodeName = _p2pInfo.nodeName; + tarsP2PInfo.host = _p2pInfo.nodeIPEndpoint.address(); + tarsP2PInfo.port = _p2pInfo.nodeIPEndpoint.port(); + return tarsP2PInfo; +} + +inline bcostars::GroupNodeInfo toTarsNodeIDInfo( + std::string const& _groupID, std::set const& _nodeIDList, std::set const& _nodeTypeList) +{ + GroupNodeInfo groupNodeIDInfo; + groupNodeIDInfo.groupID = _groupID; + groupNodeIDInfo.nodeIDList = std::vector(_nodeIDList.begin(), _nodeIDList.end()); + groupNodeIDInfo.nodeTypeList = std::vector(_nodeTypeList.begin(), _nodeTypeList.end()); + return groupNodeIDInfo; +} +inline bcostars::GatewayInfo toTarsGatewayInfo(bcos::gateway::GatewayInfo::Ptr _bcosGatewayInfo) +{ + bcostars::GatewayInfo tarsGatewayInfo; + if (!_bcosGatewayInfo) + { + return tarsGatewayInfo; + } + tarsGatewayInfo.p2pInfo = toTarsP2PInfo(_bcosGatewayInfo->p2pInfo()); + auto nodeIDList = _bcosGatewayInfo->nodeIDInfo(); + std::vector tarsNodeIDInfos; + for (auto const& it : nodeIDList) + { + auto gourpID = it.first; + auto nodeInfos = it.second; + std::set nodeIDs; + std::set nodeTypes; + for (auto const& nodeInfo : nodeInfos) + { + auto nodeID = nodeInfo.first; + auto nodeType = nodeInfo.second; + nodeIDs.insert(nodeID); + nodeTypes.insert(nodeType); + } + tarsNodeIDInfos.emplace_back(toTarsNodeIDInfo(it.first, nodeIDs, nodeTypes)); + } + tarsGatewayInfo.nodeIDInfo = tarsNodeIDInfos; + return tarsGatewayInfo; +} + +// Note: use struct here maybe Inconvenient to override +inline bcos::gateway::P2PInfo toBcosP2PNodeInfo(bcostars::P2PInfo const& _tarsP2pInfo) +{ + bcos::gateway::P2PInfo p2pInfo; + p2pInfo.p2pID = _tarsP2pInfo.p2pID; + p2pInfo.agencyName = _tarsP2pInfo.agencyName; + p2pInfo.nodeName = _tarsP2pInfo.nodeName; + p2pInfo.nodeIPEndpoint = bcos::gateway::NodeIPEndpoint(_tarsP2pInfo.host, _tarsP2pInfo.port); + return p2pInfo; +} + +inline bcos::gateway::GatewayInfo::Ptr fromTarsGatewayInfo(bcostars::GatewayInfo _tarsGatewayInfo) +{ + auto bcosGatewayInfo = std::make_shared(); + auto p2pInfo = toBcosP2PNodeInfo(_tarsGatewayInfo.p2pInfo); + std::map> nodeIDInfos; + for (auto const& it : _tarsGatewayInfo.nodeIDInfo) + { + auto const& nodeIDListInfo = it.nodeIDList; + auto const& nodeTypeInfo = it.nodeTypeList; + for(size_t i = 0; i < nodeIDListInfo.size(); ++i) + { + auto nodeID = nodeIDListInfo[i]; + auto nodeType = nodeTypeInfo[i]; + nodeIDInfos[it.groupID].insert(std::pair(nodeID, nodeType)); + } + } + bcosGatewayInfo->setP2PInfo(std::move(p2pInfo)); + bcosGatewayInfo->setNodeIDInfo(std::move(nodeIDInfos)); + return bcosGatewayInfo; +} + +inline bcostars::LogEntry toTarsLogEntry(bcos::protocol::LogEntry const& _logEntry) +{ + bcostars::LogEntry logEntry; + logEntry.address.assign(_logEntry.address().begin(), _logEntry.address().end()); + for (auto& topicIt : _logEntry.topics()) + { + logEntry.topic.push_back(std::vector(topicIt.begin(), topicIt.end())); + } + logEntry.data.assign(_logEntry.data().begin(), _logEntry.data().end()); + return logEntry; +} + +inline bcos::protocol::LogEntry toBcosLogEntry(bcostars::LogEntry const& _logEntry) +{ + std::vector topics; + for (auto& topicIt : _logEntry.topic) + { + topics.emplace_back((const bcos::byte*)topicIt.data(), topicIt.size()); + } + return bcos::protocol::LogEntry(bcos::bytes(_logEntry.address.begin(), _logEntry.address.end()), + topics, bcos::bytes(_logEntry.data.begin(), _logEntry.data.end())); +} + +inline bcos::protocol::TwoPCParams toBcosTwoPCParams(bcostars::TwoPCParams const& _param) +{ + bcos::protocol::TwoPCParams bcosTwoPCParams; + bcosTwoPCParams.number = _param.blockNumber; + bcosTwoPCParams.primaryKey = _param.primaryKey; + bcosTwoPCParams.timestamp = _param.timePoint; + return bcosTwoPCParams; +} + +inline bcostars::TwoPCParams toTarsTwoPCParams(bcos::protocol::TwoPCParams _param) +{ + bcostars::TwoPCParams tarsTwoPCParams; + tarsTwoPCParams.blockNumber = _param.number; + tarsTwoPCParams.primaryKey = _param.primaryKey; + tarsTwoPCParams.timePoint = _param.timestamp; + return tarsTwoPCParams; +} +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/ErrorConverter.h b/bcos-tars-protocol/bcos-tars-protocol/ErrorConverter.h new file mode 100644 index 0000000..3613c9d --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/ErrorConverter.h @@ -0,0 +1,95 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ErrorConverter.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include +#include + +namespace bcostars +{ +inline Error toTarsError(const bcos::Error& error) +{ + Error tarsError; + tarsError.errorCode = error.errorCode(); + tarsError.errorMessage = error.errorMessage(); + + return tarsError; +} + +template +inline Error toTarsError(const T& error) +{ + Error tarsError; + + if (error) + { + tarsError.errorCode = error->errorCode(); + tarsError.errorMessage = error->errorMessage(); + } + + return tarsError; +} + +inline bcos::Error::Ptr toBcosError(const bcostars::Error& error) +{ + if (error.errorCode == 0) + { + return nullptr; + } + + auto bcosError = std::make_shared(error.errorCode, error.errorMessage); + return bcosError; +} + +inline bcos::Error::Ptr toBcosError(tars::Int32 ret) +{ + if (ret == 0) + { + return nullptr; + } + + auto bcosError = std::make_shared(ret, "TARS error!"); + return bcosError; +} + +inline bcos::Error::UniquePtr toUniqueBcosError(const bcostars::Error& error) +{ + if (error.errorCode == 0) + { + return nullptr; + } + + auto bcosError = std::make_unique(error.errorCode, error.errorMessage); + return bcosError; +} + +inline bcos::Error::UniquePtr toUniqueBcosError(tars::Int32 ret) +{ + if (ret == 0) + { + return nullptr; + } + + auto bcosError = std::make_unique(ret, "TARS error!"); + return bcosError; +} + +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.cpp new file mode 100644 index 0000000..207f5fe --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.cpp @@ -0,0 +1,591 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ExecutorServiceClient.cpp + * @author: yujiechen + * @date 2022-5-9 + */ +#include "ExecutorServiceClient.h" +#include "../Common.h" +#include "../ErrorConverter.h" +#include "../protocol/BlockHeaderImpl.h" +#include "../protocol/ExecutionMessageImpl.h" +#include + +using namespace bcostars; + +template +class AsyncCallback +{ +public: + AsyncCallback(std::weak_ptr threadPool, std::function callback) + : m_pool(threadPool), m_callback(std::move(callback)) + {} + + void operator()(Args&&... args) + { + auto pool = m_pool.lock(); + if (pool) + { + // m_callback(std::move(args)...); + pool->template enqueue( + [callback = std::move(m_callback), + m_args = std::make_shared>( + std::make_tuple(std::forward(args)...))]() mutable { + std::apply(callback, std::move(*m_args)); + }); + } + } + +private: + std::weak_ptr m_pool; + std::function m_callback; +}; + +void ExecutorServiceClient::status( + std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& + _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_status( + const bcostars::Error& ret, const bcostars::ExecutorStatus& _output) override + { + auto error = toUniqueBcosError(ret); + auto status = std::make_unique(); + if (!error) + { + status->setSeq(_output.seq); + } + m_callback(std::move(error), std::move(status)); + } + + void callback_status_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret), std::make_unique()); + } + + private: + AsyncCallback m_callback; + }; + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_status(new Callback(m_callbackPool, std::move(callback))); +} + +void ExecutorServiceClient::nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_nextBlockHeader(const bcostars::Error& ret) override + { + m_callback(toUniqueBcosError(ret)); + } + + void callback_nextBlockHeader_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret)); + } + + private: + AsyncCallback m_callback; + }; + auto blockHeaderImpl = + std::dynamic_pointer_cast(blockHeader); + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_nextBlockHeader( + new Callback(m_callbackPool, std::move(callback)), schedulerTermId, + blockHeaderImpl->inner()); +} + +void ExecutorServiceClient::executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_executeTransaction( + const bcostars::Error& ret, bcostars::ExecutionMessage const& executionMessage) override + { + auto executionMsgImpl = std::make_unique( + [m_executionMessage = executionMessage]() mutable { return &m_executionMessage; }); + m_callback(toUniqueBcosError(ret), std::move(executionMsgImpl)); + } + + void callback_executeTransaction_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret), nullptr); + } + + private: + AsyncCallback + m_callback; + }; + auto& executionMsgImpl = dynamic_cast(*input); + + // timeout is 2 min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_executeTransaction( + new Callback(m_callbackPool, std::move(callback)), executionMsgImpl.inner()); +} + +void ExecutorServiceClient ::call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_call( + const bcostars::Error& ret, bcostars::ExecutionMessage const& executionMessage) override + { + auto bcosExecutionMessage = std::make_unique( + [m_executionMessage = executionMessage]() mutable { return &m_executionMessage; }); + m_callback(toUniqueBcosError(ret), std::move(bcosExecutionMessage)); + } + + void callback_call_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret), nullptr); + } + + private: + AsyncCallback + m_callback; + }; + auto& executionMsgImpl = dynamic_cast(*input); + // timeout is 2min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_call(new Callback(m_callbackPool, std::move(callback)), executionMsgImpl.inner()); +} + +void ExecutorServiceClient::executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function)>&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_executeTransactions(const bcostars::Error& ret, + std::vector const& executionMessages) override + { + std::vector inputList; + for (auto const& it : executionMessages) + { + auto bcosExecutionMessage = + std::make_unique( + [m_executionMessage = it]() mutable { return &m_executionMessage; }); + inputList.emplace_back(std::move(bcosExecutionMessage)); + } + m_callback(toUniqueBcosError(ret), std::move(inputList)); + } + + void callback_executeTransactions_exception(tars::Int32 ret) override + { + m_callback( + toUniqueBcosError(ret), std::vector()); + } + + private: + AsyncCallback> + m_callback; + }; + std::vector tarsInputs; + for (auto const& it : inputs) + { + auto& executionMsgImpl = dynamic_cast(*it); + tarsInputs.emplace_back(executionMsgImpl.inner()); + } + // timeout is 2min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_executeTransactions( + new Callback(m_callbackPool, std::move(callback)), contractAddress, tarsInputs); +} + +void ExecutorServiceClient::dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function)>&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_dmcExecuteTransactions(const bcostars::Error& ret, + std::vector const& executionMessages) override + { + std::vector inputList; + for (auto const& it : executionMessages) + { + auto bcosExecutionMessage = + std::make_unique( + [m_executionMessage = it]() mutable { return &m_executionMessage; }); + inputList.emplace_back(std::move(bcosExecutionMessage)); + } + m_callback(toUniqueBcosError(ret), std::move(inputList)); + } + + void callback_dmcExecuteTransactions_exception(tars::Int32 ret) override + { + m_callback( + toUniqueBcosError(ret), std::vector()); + } + + private: + AsyncCallback> + m_callback; + }; + std::vector tarsInputs; + for (auto const& it : inputs) + { + auto& executionMsgImpl = dynamic_cast(*it); + tarsInputs.emplace_back(executionMsgImpl.inner()); + } + // timeout is 2min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_dmcExecuteTransactions( + new Callback(m_callbackPool, std::move(callback)), contractAddress, tarsInputs); +} + +void ExecutorServiceClient::dagExecuteTransactions( + gsl::span inputs, + std::function)> + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function)>&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_dagExecuteTransactions(const bcostars::Error& ret, + std::vector const& executionMessages) override + { + std::vector inputList; + for (auto const& it : executionMessages) + { + auto bcosExecutionMessage = + std::make_unique( + [m_executionMessage = it]() mutable { return &m_executionMessage; }); + inputList.emplace_back(std::move(bcosExecutionMessage)); + } + m_callback(toUniqueBcosError(ret), std::move(inputList)); + } + + void callback_dagExecuteTransactions_exception(tars::Int32 ret) override + { + m_callback( + toUniqueBcosError(ret), std::vector()); + } + + private: + AsyncCallback> + m_callback; + }; + std::vector tarsInput; + for (auto const& it : inputs) + { + auto& executionMsgImpl = dynamic_cast(*it); + tarsInput.emplace_back(executionMsgImpl.inner()); + } + // timeout is 2min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_dagExecuteTransactions( + new Callback(m_callbackPool, std::move(callback)), tarsInput); +} + +void ExecutorServiceClient::dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_dmcCall( + const bcostars::Error& ret, bcostars::ExecutionMessage const& executionMessage) override + { + auto bcosExecutionMessage = std::make_unique( + [m_executionMessage = executionMessage]() mutable { return &m_executionMessage; }); + m_callback(toUniqueBcosError(ret), std::move(bcosExecutionMessage)); + } + + void callback_dmcCall_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret), nullptr); + } + + private: + AsyncCallback + m_callback; + }; + auto& executionMsgImpl = dynamic_cast(*input); + // timeout is 2min + m_prx->tars_set_timeout(2 * 60 * 1000) + ->async_dmcCall( + new Callback(m_callbackPool, std::move(callback)), executionMsgImpl.inner()); +} + +void ExecutorServiceClient::getHash(bcos::protocol::BlockNumber number, + std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_getHash( + const bcostars::Error& ret, std::vector const& hashBytes) override + { + auto hash = bcos::crypto::HashType( + reinterpret_cast(hashBytes.data()), hashBytes.size()); + m_callback(toUniqueBcosError(ret), std::move(hash)); + } + + void callback_getHash_exception(tars::Int32 ret) override + { + m_callback(toUniqueBcosError(ret), bcos::crypto::HashType()); + } + + private: + AsyncCallback m_callback; + }; + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_getHash( + new Callback(m_callbackPool, std::move(callback)), number); +} + +void ExecutorServiceClient::prepare( + const bcos::protocol::TwoPCParams& params, std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_prepare(const bcostars::Error& ret) override { m_callback(toBcosError(ret)); } + + void callback_prepare_exception(tars::Int32 ret) override { m_callback(toBcosError(ret)); } + + private: + AsyncCallback m_callback; + }; + + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_prepare( + new Callback(m_callbackPool, std::move(callback)), toTarsTwoPCParams(params)); +} + +void ExecutorServiceClient::commit( + const bcos::protocol::TwoPCParams& params, std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_commit(const bcostars::Error& ret) override { m_callback(toBcosError(ret)); } + + void callback_commit_exception(tars::Int32 ret) override { m_callback(toBcosError(ret)); } + + private: + AsyncCallback m_callback; + }; + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_commit( + new Callback(m_callbackPool, std::move(callback)), toTarsTwoPCParams(params)); +} + +void ExecutorServiceClient::rollback( + const bcos::protocol::TwoPCParams& params, std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_rollback(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_rollback_exception(tars::Int32 ret) override { m_callback(toBcosError(ret)); } + + private: + AsyncCallback m_callback; + }; + m_prx->tars_set_timeout(30000)->async_rollback( + new Callback(m_callbackPool, std::move(callback)), toTarsTwoPCParams(params)); +} + +void ExecutorServiceClient::reset(std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_reset(const bcostars::Error& ret) override { m_callback(toBcosError(ret)); } + + void callback_reset_exception(tars::Int32 ret) override { m_callback(toBcosError(ret)); } + + private: + AsyncCallback m_callback; + }; + m_prx->tars_set_timeout(30000)->async_reset(new Callback(m_callbackPool, std::move(callback))); +} + +void ExecutorServiceClient::getCode( + std::string_view contract, std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_getCode( + const bcostars::Error& ret, std::vector const& code) override + { + bcos::bytes codeBytes(code.begin(), code.end()); + m_callback(toBcosError(ret), std::move(codeBytes)); + } + + void callback_getCode_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), bcos::bytes()); + } + + private: + AsyncCallback m_callback; + }; + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_getCode( + new Callback(m_callbackPool, std::move(callback)), std::string(contract)); +} + +void ExecutorServiceClient::getABI( + std::string_view contract, std::function callback) +{ + class Callback : public ExecutorServicePrxCallback + { + public: + Callback(std::weak_ptr threadPool, + std::function&& _callback) + : m_callback(threadPool, std::move(_callback)) + {} + ~Callback() override {} + + void callback_getABI(const bcostars::Error& ret, std::string const& abi) override + { + std::string tempAbi = abi; + m_callback(toBcosError(ret), std::move(tempAbi)); + } + + void callback_getABI_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), std::string()); + } + + private: + AsyncCallback m_callback; + }; + // timeout is 30s + m_prx->tars_set_timeout(30000)->async_getABI( + new Callback(m_callbackPool, std::move(callback)), std::string(contract)); +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.h new file mode 100644 index 0000000..42b1776 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/ExecutorServiceClient.h @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ExecutorServiceClient.h + * @author: yujiechen + * @date 2022-5-9 + */ + +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include + +namespace bcostars +{ +class ExecutorServiceClient : public bcos::executor::ParallelTransactionExecutorInterface +{ +public: + using Ptr = std::shared_ptr; + ExecutorServiceClient(ExecutorServicePrx _prx) + : m_prx(_prx), + m_callbackPool(std::make_shared( + "executorCallback", std::thread::hardware_concurrency())) + {} + ~ExecutorServiceClient() override {} + + void status( + std::function + callback) override; + + void nextBlockHeader(int64_t schedulerTermId, + const bcos::protocol::BlockHeader::ConstPtr& blockHeader, + std::function callback) override; + + void executeTransaction(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void call(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void executeTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override; + + void dmcExecuteTransactions(std::string contractAddress, + gsl::span inputs, + std::function)> + callback) override; + + void dagExecuteTransactions(gsl::span inputs, + std::function)> + callback) override; + + void dmcCall(bcos::protocol::ExecutionMessage::UniquePtr input, + std::function + callback) override; + + void getHash(bcos::protocol::BlockNumber number, + std::function callback) override; + + // Write data to storage uncommitted + void prepare(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + // Commit uncommitted data + void commit(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + // Rollback the changes + void rollback(const bcos::protocol::TwoPCParams& params, + std::function callback) override; + + /* ----- XA Transaction interface End ----- */ + + // drop all status + void reset(std::function callback) override; + void getCode(std::string_view contract, + std::function callback) override; + void getABI(std::string_view contract, + std::function callback) override; + +private: + ExecutorServicePrx m_prx; + bcos::ThreadPool::Ptr m_callbackPool; +}; +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/FrontServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/FrontServiceClient.h new file mode 100644 index 0000000..b8b1c59 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/FrontServiceClient.h @@ -0,0 +1,257 @@ +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "bcos-tars-protocol/Common.h" +#include "bcos-tars-protocol/ErrorConverter.h" +#include "bcos-tars-protocol/tars/FrontService.h" +#include +#include +#include +#include +#include + +namespace bcostars +{ +class FrontServiceClient : public bcos::front::FrontServiceInterface +{ +public: + void start() override {} + void stop() override {} + + FrontServiceClient(bcostars::FrontServicePrx proxy, bcos::crypto::KeyFactory::Ptr keyFactory) + : m_proxy(proxy), m_keyFactory(keyFactory) + {} + + void asyncGetGroupNodeInfo(bcos::front::GetGroupNodeInfoFunc _onGetGroupNodeInfo) override + { + class Callback : public FrontServicePrxCallback + { + public: + Callback(bcos::front::GetGroupNodeInfoFunc callback, FrontServiceClient* self) + : m_callback(callback) + {} + void callback_asyncGetGroupNodeInfo( + const bcostars::Error& ret, const GroupNodeInfo& groupNodeInfo) override + { + auto bcosGroupNodeInfo = std::make_shared( + [m_groupNodeInfo = groupNodeInfo]() mutable { return &m_groupNodeInfo; }); + m_callback(toBcosError(ret), bcosGroupNodeInfo); + } + void callback_asyncGetGroupNodeInfo_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr); + } + + private: + bcos::front::GetGroupNodeInfoFunc m_callback; + }; + + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_asyncGetGroupNodeInfo(new Callback(_onGetGroupNodeInfo, this)); + } + + void onReceiveGroupNodeInfo(const std::string& _groupID, + bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, + bcos::front::ReceiveMsgFunc _receiveMsgCallback) override + { + class Callback : public FrontServicePrxCallback + { + public: + Callback(bcos::front::ReceiveMsgFunc callback) : m_callback(callback) {} + + void callback_onReceiveGroupNodeInfo(const bcostars::Error& ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + void callback_onReceiveGroupNodeInfo_exception(tars::Int32 ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + private: + bcos::front::ReceiveMsgFunc m_callback; + }; + auto groupNodeInfoImpl = + std::dynamic_pointer_cast(_groupNodeInfo); + auto tarsGroupNodeInfo = groupNodeInfoImpl->inner(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_onReceiveGroupNodeInfo( + new Callback(_receiveMsgCallback), _groupID, tarsGroupNodeInfo); + } + + void onReceiveMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::bytesConstRef _data, bcos::front::ReceiveMsgFunc _receiveMsgCallback) override + { + class Callback : public FrontServicePrxCallback + { + public: + Callback(bcos::front::ReceiveMsgFunc callback) : m_callback(callback) {} + + void callback_onReceiveMessage(const bcostars::Error& ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + void callback_onReceiveMessage_exception(tars::Int32 ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + private: + bcos::front::ReceiveMsgFunc m_callback; + }; + auto nodeIDData = _nodeID->data(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_onReceiveMessage(new Callback(_receiveMsgCallback), _groupID, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); + } + + // Note: the _receiveMsgCallback maybe null in some cases + void onReceiveBroadcastMessage(const std::string& _groupID, bcos::crypto::NodeIDPtr _nodeID, + bcos::bytesConstRef _data, bcos::front::ReceiveMsgFunc _receiveMsgCallback) override + { + class Callback : public FrontServicePrxCallback + { + public: + Callback(bcos::front::ReceiveMsgFunc callback) : m_callback(callback) {} + + void callback_onReceiveBroadcastMessage(const bcostars::Error& ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + void callback_onReceiveBroadcastMessage_exception(tars::Int32 ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret)); + } + + private: + bcos::front::ReceiveMsgFunc m_callback; + }; + auto nodeIDData = _nodeID->data(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_onReceiveBroadcastMessage(new Callback(_receiveMsgCallback), _groupID, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); + } + + // Note: the _callback maybe null in some cases + void asyncSendMessageByNodeID(int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bcos::bytesConstRef _data, uint32_t _timeout, bcos::front::CallbackFunc _callback) override + { + class Callback : public FrontServicePrxCallback + { + public: + Callback(bcos::front::CallbackFunc callback, FrontServiceClient* self) + : m_callback(callback), m_self(self) + {} + + void callback_asyncSendMessageByNodeID(const bcostars::Error& ret, + const vector& responseNodeID, const vector& responseData, + const std::string& seq) override + { + if (!m_callback) + { + return; + } + auto bcosNodeID = m_self->m_keyFactory->createKey( + bcos::bytesConstRef((bcos::byte*)responseNodeID.data(), responseNodeID.size())); + m_callback(toBcosError(ret), bcosNodeID, + bcos::bytesConstRef((bcos::byte*)responseData.data(), responseData.size()), seq, + bcos::front::ResponseFunc()); + } + + void callback_asyncSendMessageByNodeID_exception(tars::Int32 ret) override + { + if (!m_callback) + { + return; + } + m_callback(toBcosError(ret), nullptr, bcos::bytesConstRef(), "", + bcos::front::ResponseFunc()); + } + + private: + bcos::front::CallbackFunc m_callback; + FrontServiceClient* m_self; + }; + + auto nodeIDData = _nodeID->data(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_asyncSendMessageByNodeID(new Callback(_callback, this), _moduleID, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end()), _timeout, + (_callback ? true : false)); + } + + void asyncSendResponse(const std::string& _id, int _moduleID, bcos::crypto::NodeIDPtr _nodeID, + bcos::bytesConstRef _data, bcos::front::ReceiveMsgFunc _receiveMsgCallback) override + { + auto nodeIDData = _nodeID->data(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->asyncSendResponse(_id, _moduleID, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); + } + + void asyncSendMessageByNodeIDs(int _moduleID, + const std::vector& _nodeIDs, bcos::bytesConstRef _data) override + { + std::vector> tarsNodeIDs; + tarsNodeIDs.reserve(_nodeIDs.size()); + for (auto const& it : _nodeIDs) + { + auto nodeIDData = it->data(); + tarsNodeIDs.emplace_back(nodeIDData.begin(), nodeIDData.end()); + } + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_asyncSendMessageByNodeIDs( + nullptr, _moduleID, tarsNodeIDs, std::vector(_data.begin(), _data.end())); + } + + void asyncSendBroadcastMessage( + uint16_t _type, int _moduleID, bcos::bytesConstRef _data) override + { + auto data = _data.toBytes(); + m_proxy->tars_set_timeout(c_frontServiceTimeout) + ->async_asyncSendBroadcastMessage( + nullptr, _type, _moduleID, std::vector(data.begin(), data.end())); + } + +private: + // 30s + const int c_frontServiceTimeout = 30000; + + bcostars::FrontServicePrx m_proxy; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + std::string const c_moduleName = "FrontServiceClient"; +}; +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.cpp new file mode 100644 index 0000000..93e5b09 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.cpp @@ -0,0 +1,23 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayServiceClient.cpp + * @author: ancelmo + * @date 2021-04-20 + */ +#include "GatewayServiceClient.h" + +std::atomic bcostars::GatewayServiceClient::s_tarsTimeoutCount = {0}; +const int64_t bcostars::GatewayServiceClient::c_maxTarsTimeoutCount = 500; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.h new file mode 100644 index 0000000..f7c7f4c --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/GatewayServiceClient.h @@ -0,0 +1,443 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GatewayServiceClient.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "../Common.h" +#include "../ErrorConverter.h" +#include "../protocol/GroupNodeInfoImpl.h" +#include "bcos-tars-protocol/tars/GatewayService.h" +#include +#include +#include + +#define GATEWAYCLIENT_LOG(LEVEL) BCOS_LOG(LEVEL) << "[GATEWAYCLIENT][INITIALIZER]" +#define GATEWAYCLIENT_BADGE "[GATEWAYCLIENT]" +namespace bcostars +{ +class GatewayServiceClient : public bcos::gateway::GatewayInterface +{ +public: + GatewayServiceClient(bcostars::GatewayServicePrx _prx, std::string const& _serviceName, + bcos::crypto::KeyFactory::Ptr _keyFactory) + : GatewayServiceClient(_prx, _serviceName) + { + m_keyFactory = _keyFactory; + } + GatewayServiceClient(bcostars::GatewayServicePrx _prx, std::string const& _serviceName) + : m_prx(_prx), m_gatewayServiceName(_serviceName) + {} + virtual ~GatewayServiceClient() {} + + void setKeyFactory(bcos::crypto::KeyFactory::Ptr keyFactory) { m_keyFactory = keyFactory; } + + void asyncSendMessageByNodeID(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::crypto::NodeIDPtr _dstNodeID, + bcos::bytesConstRef _payload, bcos::gateway::ErrorRespFunc _errorRespFunc) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(bcos::gateway::ErrorRespFunc callback) : m_callback(callback) {} + + void callback_asyncSendMessageByNodeID(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncSendMessageByNodeID_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret)); + } + + private: + bcos::gateway::ErrorRespFunc m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSendMessageByNodeID", m_prx, + [_errorRespFunc](bcos::Error::Ptr _error) { + if (_errorRespFunc) + { + _errorRespFunc(_error); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + auto srcNodeID = _srcNodeID->data(); + auto destNodeID = _dstNodeID->data(); + m_prx->tars_set_timeout(c_networkTimeout) + ->async_asyncSendMessageByNodeID(new Callback(_errorRespFunc), _groupID, _moduleID, + std::vector(srcNodeID.begin(), srcNodeID.end()), + std::vector(destNodeID.begin(), destNodeID.end()), + std::vector(_payload.begin(), _payload.end())); + } + + void asyncGetPeers(std::function + _callback) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(std::function + callback) + : m_callback(callback) + {} + + void callback_asyncGetPeers(const bcostars::Error& ret, + const bcostars::GatewayInfo& _localInfo, + const vector& _peers) override + { + s_tarsTimeoutCount.store(0); + auto localGatewayInfo = fromTarsGatewayInfo(_localInfo); + auto peersGatewayInfos = std::make_shared(); + for (auto const& peerNodeInfo : _peers) + { + peersGatewayInfos->emplace_back(fromTarsGatewayInfo(peerNodeInfo)); + } + m_callback(toBcosError(ret), localGatewayInfo, peersGatewayInfos); + } + void callback_asyncGetPeers_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret), nullptr, nullptr); + } + + private: + std::function + m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncGetPeers", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(_error, nullptr, nullptr); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + m_prx->async_asyncGetPeers(new Callback(_callback)); + } + + void asyncSendMessageByNodeIDs(const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, const bcos::crypto::NodeIDs& _dstNodeIDs, + bcos::bytesConstRef _payload) override + { + std::vector> tarsNodeIDs; + for (auto const& it : _dstNodeIDs) + { + auto nodeID = it->data(); + tarsNodeIDs.emplace_back(nodeID.begin(), nodeID.end()); + } + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSendMessageByNodeIDs", m_prx, nullptr, shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + auto srcNodeID = _srcNodeID->data(); + m_prx->async_asyncSendMessageByNodeIDs(nullptr, _groupID, _moduleID, + std::vector(srcNodeID.begin(), srcNodeID.end()), tarsNodeIDs, + std::vector(_payload.begin(), _payload.end())); + } + + void asyncSendBroadcastMessage(uint16_t _type, const std::string& _groupID, int _moduleID, + bcos::crypto::NodeIDPtr _srcNodeID, bcos::bytesConstRef _payload) override + { + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSendBroadcastMessage", m_prx, nullptr, shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + auto srcNodeID = _srcNodeID->data(); + m_prx->async_asyncSendBroadcastMessage(nullptr, _type, _groupID, _moduleID, + std::vector(srcNodeID.begin(), srcNodeID.end()), + std::vector(_payload.begin(), _payload.end())); + } + + void asyncGetGroupNodeInfo(const std::string& _groupID, + bcos::gateway::GetGroupNodeInfoFunc _onGetGroupNodeInfo) override + { + class Callback : public GatewayServicePrxCallback + { + public: + Callback(bcos::gateway::GetGroupNodeInfoFunc callback, + bcos::crypto::KeyFactory::Ptr keyFactory) + : m_callback(callback), m_keyFactory(keyFactory) + {} + void callback_asyncGetGroupNodeInfo( + const bcostars::Error& ret, const GroupNodeInfo& groupNodeInfo) override + { + s_tarsTimeoutCount.store(0); + auto bcosGroupNodeInfo = std::make_shared( + [m_groupNodeInfo = groupNodeInfo]() mutable { return &m_groupNodeInfo; }); + m_callback(toBcosError(ret), bcosGroupNodeInfo); + } + void callback_asyncGetGroupNodeInfo_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret), nullptr); + } + + private: + bcos::gateway::GetGroupNodeInfoFunc m_callback; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncGetGroupNodeInfo", m_prx, + [_onGetGroupNodeInfo](bcos::Error::Ptr _error) { + if (_onGetGroupNodeInfo) + { + _onGetGroupNodeInfo(_error, nullptr); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + m_prx->async_asyncGetGroupNodeInfo( + new Callback(_onGetGroupNodeInfo, m_keyFactory), _groupID); + } + + void asyncNotifyGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo, + std::function _callback) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncNotifyGroupInfo(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyGroupInfo_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncNotifyGroupInfo", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error)); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + + auto activeEndPoints = tarsProxyAvailableEndPoints(m_prx); + auto tarsGroupInfo = toTarsGroupInfo(_groupInfo); + + // notify groupInfo to all gateway nodes + for (auto const& endPoint : activeEndPoints) + { + auto prx = + bcostars::createServantProxy(m_gatewayServiceName, endPoint); + prx->async_asyncNotifyGroupInfo(new Callback(_callback), tarsGroupInfo); + } + } + + void asyncSendMessageByTopic(const std::string& _topic, bcos::bytesConstRef _data, + std::function _respFunc) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(std::function callback) + : m_callback(callback) + {} + void callback_asyncSendMessageByTopic(const bcostars::Error& ret, tars::Int32 _type, + const vector& _responseData) override + { + s_tarsTimeoutCount.store(0); + auto data = + std::make_shared(_responseData.begin(), _responseData.end()); + m_callback(toBcosError(ret), _type, data); + } + void callback_asyncSendMessageByTopic_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + return m_callback(toBcosError(ret), 0, nullptr); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSendMessageByTopic", m_prx, + [_respFunc](bcos::Error::Ptr _error) { + if (_respFunc) + { + _respFunc(std::move(_error), 0, nullptr); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + vector tarsRequestData(_data.begin(), _data.end()); + m_prx->tars_set_timeout(c_amopTimeout) + ->async_asyncSendMessageByTopic(new Callback(_respFunc), _topic, tarsRequestData); + } + + void asyncSendBroadcastMessageByTopic( + const std::string& _topic, bcos::bytesConstRef _data) override + { + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSendBroadcastMessageByTopic", m_prx, nullptr, shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + vector tarsRequestData(_data.begin(), _data.end()); + m_prx->async_asyncSendBroadcastMessageByTopic(nullptr, _topic, tarsRequestData); + } + + void asyncSubscribeTopic(std::string const& _clientID, std::string const& _topicInfo, + std::function _callback) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + void callback_asyncSubscribeTopic(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncSubscribeTopic_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + return m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncSubscribeTopic", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error)); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + m_prx->async_asyncSubscribeTopic(new Callback(_callback), _clientID, _topicInfo); + } + + void asyncRemoveTopic(std::string const& _clientID, std::vector const& _topicList, + std::function _callback) override + { + class Callback : public bcostars::GatewayServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + void callback_asyncRemoveTopic(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncRemoveTopic_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + return m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncRemoveTopic", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error)); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + m_prx->async_asyncRemoveTopic(new Callback(_callback), _clientID, _topicList); + } + + bcostars::GatewayServicePrx prx() { return m_prx; } + +protected: + void start() override {} + void stop() override {} + static bool shouldStopCall() { return (s_tarsTimeoutCount >= c_maxTarsTimeoutCount); } + +private: + bcostars::GatewayServicePrx m_prx; + std::string m_gatewayServiceName; + // Note: only useful for asyncGetGroupNodeInfo + bcos::crypto::KeyFactory::Ptr m_keyFactory; + std::string const c_moduleName = "GatewayServiceClient"; + // AMOP timeout 40s + const int c_amopTimeout = 40000; + const int c_networkTimeout = 40000; + static std::atomic s_tarsTimeoutCount; + static const int64_t c_maxTarsTimeoutCount; +}; +} // namespace bcostars diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.cpp new file mode 100644 index 0000000..86e0953 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.cpp @@ -0,0 +1,337 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LedgerServiceClient.cpp + * @author: yujiechen + * @date 2021-10-17 + */ +#include "LedgerServiceClient.h" +#include "../Common.h" +#include "../ErrorConverter.h" +#include "../protocol/BlockImpl.h" +#include "../protocol/TransactionImpl.h" +#include "../protocol/TransactionReceiptImpl.h" + +using namespace bcostars; + +void LedgerServiceClient::asyncGetBlockDataByNumber(bcos::protocol::BlockNumber _blockNumber, + int32_t _blockFlag, + std::function _onGetBlock) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function _callback, + bcos::protocol::BlockFactory::Ptr _blockFactory) + : m_callback(_callback), m_blockFactory(_blockFactory) + {} + void callback_asyncGetBlockDataByNumber( + const bcostars::Error& ret, const bcostars::Block& _block) override + { + auto bcosBlock = m_blockFactory->createBlock(); + auto tarsBlock = std::dynamic_pointer_cast(bcosBlock); + tarsBlock->setInner(std::move(*const_cast(&_block))); + m_callback(toBcosError(ret), tarsBlock); + } + void callback_asyncGetBlockDataByNumber_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function m_callback; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + }; + m_prx->async_asyncGetBlockDataByNumber( + new Callback(_onGetBlock, m_blockFactory), _blockNumber, _blockFlag); +} + +void LedgerServiceClient::asyncGetBlockNumber( + std::function _onGetBlock) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function _callback) + : m_callback(_callback) + {} + void callback_asyncGetBlockNumber( + const bcostars::Error& ret, tars::Int64 _blockNumber) override + { + m_callback(toBcosError(ret), _blockNumber); + } + void callback_asyncGetBlockNumber_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), -1); + } + + private: + std::function m_callback; + }; + m_prx->async_asyncGetBlockNumber(new Callback(_onGetBlock)); +} + +void LedgerServiceClient::asyncGetBlockHashByNumber(bcos::protocol::BlockNumber _blockNumber, + std::function _onGetBlock) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function _callback) + : m_callback(_callback) + {} + void callback_asyncGetBlockHashByNumber( + const bcostars::Error& ret, const vector& _blockHash) override + { + if (_blockHash.size() >= bcos::crypto::HashType::SIZE) + { + auto hashData = + bcos::crypto::HashType(reinterpret_cast(_blockHash.data()), + bcos::crypto::HashType::SIZE); + m_callback(toBcosError(ret), hashData); + return; + } + m_callback(toBcosError(ret), bcos::crypto::HashType()); + } + void callback_asyncGetBlockHashByNumber_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), bcos::crypto::HashType()); + } + + private: + std::function m_callback; + }; + m_prx->async_asyncGetBlockHashByNumber(new Callback(_onGetBlock), _blockNumber); +} + +void LedgerServiceClient::asyncGetBlockNumberByHash(bcos::crypto::HashType const& _blockHash, + std::function _onGetBlock) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function _callback) + : m_callback(_callback) + {} + void callback_asyncGetBlockNumberByHash( + const bcostars::Error& ret, tars::Int64 _blockNumber) override + { + m_callback(toBcosError(ret), _blockNumber); + } + void callback_asyncGetBlockNumberByHash_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), -1); + } + + private: + std::function m_callback; + }; + std::vector blockHash(_blockHash.begin(), _blockHash.end()); + m_prx->async_asyncGetBlockNumberByHash(new Callback(_onGetBlock), blockHash); +} + +void LedgerServiceClient::asyncGetBatchTxsByHashList(bcos::crypto::HashListPtr _txHashList, + bool _withProof, + std::function>)> + _onGetTx) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function>)> + _callback, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_callback(_callback), m_cryptoSuite(_cryptoSuite) + {} + + void callback_asyncGetBatchTxsByHashList(const bcostars::Error& ret, + const vector& _txs, + const map>& _merkleProofList) override + { + // decode the txsList + auto bcosTxsList = std::make_shared(); + for (auto const& tx : _txs) + { + auto bcosTx = std::make_shared( + [m_tx = tx]() mutable { return &m_tx; }); + bcosTxsList->emplace_back(bcosTx); + } + // decode the proof list + auto proofList = + std::make_shared>(); + for (auto const& it : _merkleProofList) + { + auto const& proof = it.second; + auto bcosProof = std::make_shared(); + for (auto const& item : proof) + { + bcosProof->emplace_back(bcos::fromHex(item)); + } + (*proofList)[it.first] = bcosProof; + } + m_callback(toBcosError(ret), bcosTxsList, proofList); + } + void callback_asyncGetBatchTxsByHashList_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr, nullptr); + } + + private: + std::function>)> + m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + std::vector> tarsTxsHashList; + for (auto const& txHash : *_txHashList) + { + tarsTxsHashList.emplace_back(vector(txHash.begin(), txHash.end())); + } + m_prx->async_asyncGetBatchTxsByHashList( + new Callback(_onGetTx, m_cryptoSuite), tarsTxsHashList, _withProof); +} + +void LedgerServiceClient::asyncGetTransactionReceiptByHash(bcos::crypto::HashType const& _txHash, + bool _withProof, + std::function + _onGetTx) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function + _callback, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_callback(_callback), m_cryptoSuite(_cryptoSuite) + {} + void callback_asyncGetTransactionReceiptByHash(const bcostars::Error& ret, + const bcostars::TransactionReceipt& _receipt, + const vector& _proof) override + { + auto bcosReceipt = std::make_shared( + [m_receipt = std::move(_receipt)]() mutable { return &m_receipt; }); + auto bcosProof = std::make_shared(); + for (auto const& item : _proof) + { + bcosProof->emplace_back(bcos::fromHex(item)); + } + m_callback(toBcosError(ret), bcosReceipt, bcosProof); + } + void callback_asyncGetTransactionReceiptByHash_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr, nullptr); + } + + private: + std::function + m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + std::vector txHash(_txHash.begin(), _txHash.end()); + m_prx->async_asyncGetTransactionReceiptByHash( + new Callback(_onGetTx, m_cryptoSuite), txHash, _withProof); +} + +void LedgerServiceClient::asyncGetTotalTransactionCount( + std::function + _callback) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function + _callback) + : m_callback(_callback) + {} + void callback_asyncGetTotalTransactionCount(const bcostars::Error& ret, + tars::Int64 _totalTxCount, tars::Int64 _failedTxCount, + tars::Int64 _latestBlockNumber) override + { + m_callback(toBcosError(ret), _totalTxCount, _failedTxCount, _latestBlockNumber); + } + void callback_asyncGetTotalTransactionCount_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), -1, -1, -1); + } + + private: + std::function + m_callback; + }; + m_prx->async_asyncGetTotalTransactionCount(new Callback(_callback)); +} + +void LedgerServiceClient::asyncGetSystemConfigByKey(std::string_view const& _key, + std::function _onGetConfig) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback(std::function + _callback) + : m_callback(_callback) + {} + void callback_asyncGetSystemConfigByKey(const bcostars::Error& ret, + const std::string& _value, tars::Int64 _blockNumber) override + { + m_callback(toBcosError(ret), _value, _blockNumber); + } + void callback_asyncGetSystemConfigByKey_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), "", -1); + } + + private: + std::function m_callback; + }; + m_prx->async_asyncGetSystemConfigByKey(new Callback(_onGetConfig), std::string{_key}); +} + +void LedgerServiceClient::asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) +{ + class Callback : public LedgerServicePrxCallback + { + public: + Callback( + std::function _callback, + bcos::crypto::KeyFactory::Ptr _keyFactory) + : m_callback(_callback), m_keyFactory(_keyFactory) + {} + virtual void callback_asyncGetNodeListByType( + const bcostars::Error& ret, const vector& _nodeList) + { + m_callback(toBcosError(ret), toConsensusNodeList(m_keyFactory, _nodeList)); + } + virtual void callback_asyncGetNodeListByType_exception(tars::Int32 ret) + { + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function m_callback; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + }; + m_prx->async_asyncGetNodeListByType( + new Callback(_onGetConfig, m_keyFactory), std::string{_type}); +} diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.h new file mode 100644 index 0000000..d0864c8 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/LedgerServiceClient.h @@ -0,0 +1,123 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file LedgerServiceClient.h + * @author: yujiechen + * @date 2021-10-17 + */ +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include +namespace bcostars +{ +class LedgerServiceClient : public bcos::ledger::LedgerInterface +{ +public: + LedgerServiceClient( + bcostars::LedgerServicePrx _prx, bcos::protocol::BlockFactory::Ptr _blockFactory) + : m_prx(_prx), m_blockFactory(_blockFactory) + { + if (m_blockFactory) + { + m_cryptoSuite = m_blockFactory->cryptoSuite(); + m_keyFactory = m_cryptoSuite->keyFactory(); + } + } + ~LedgerServiceClient() override {} + + // TODO: implement this + void asyncPrewriteBlock(bcos::storage::StorageInterface::Ptr, bcos::protocol::TransactionsPtr, + bcos::protocol::Block::ConstPtr, std::function, bool) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method asyncPrewriteBlock"); + } + + void asyncPreStoreBlockTxs(bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr, + std::function) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method asyncPreStoreBlockTxs"); + } + + // TODO: implement this + bcos::Error::Ptr storeTransactionsAndReceipts( + bcos::protocol::TransactionsPtr, bcos::protocol::Block::ConstPtr) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method"); + return nullptr; + } + + void asyncGetBlockDataByNumber(bcos::protocol::BlockNumber _blockNumber, int32_t _blockFlag, + std::function _onGetBlock) override; + + void asyncGetBlockNumber( + std::function _onGetBlock) override; + + void asyncGetBlockHashByNumber(bcos::protocol::BlockNumber _blockNumber, + std::function _onGetBlock) override; + + void asyncGetBlockNumberByHash(bcos::crypto::HashType const& _blockHash, + std::function _onGetBlock) override; + + void asyncGetBatchTxsByHashList(bcos::crypto::HashListPtr _txHashList, bool _withProof, + std::function>)> + _onGetTx) override; + + void asyncGetTransactionReceiptByHash(bcos::crypto::HashType const& _txHash, bool _withProof, + std::function + _onGetTx) override; + + void asyncGetTotalTransactionCount(std::function + _callback) override; + + virtual void asyncGetCurrentStateByKey(std::string_view const& _key, + std::function&&)> _callback) + override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method asyncGetCurrentStateByKey"); + } + + void asyncGetSystemConfigByKey(std::string_view const& _key, + std::function + _onGetConfig) override; + + void asyncGetNodeListByType(std::string_view const& _type, + std::function _onGetConfig) + override; + + // TODO: implement this + void asyncGetNonceList(bcos::protocol::BlockNumber, int64_t, + std::function>)>) + override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplement method asyncGetNonceList"); + } + +private: + bcostars::LedgerServicePrx m_prx; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::crypto::KeyFactory::Ptr m_keyFactory; +}; +} // namespace bcostars diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.cpp new file mode 100644 index 0000000..246a1a5 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.cpp @@ -0,0 +1,207 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief client for the PBFTService + * @file PBFTServiceClient.cpp + * @author: yujiechen + * @date 2021-06-29 + */ + +#include "PBFTServiceClient.h" +#include "../protocol/BlockFactoryImpl.h" +using namespace bcostars; + +void PBFTServiceClient::asyncSubmitProposal(bool _containSysTxs, bcos::bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) +{ + m_proxy->async_asyncSubmitProposal(new PBFTServiceCommonCallback(_onProposalSubmitted), + _containSysTxs, std::vector(_proposalData.begin(), _proposalData.end()), + _proposalIndex, std::vector(_proposalHash.begin(), _proposalHash.end())); +} + +void PBFTServiceClient::asyncGetPBFTView( + std::function _onGetView) +{ + class Callback : public PBFTServicePrxCallback + { + public: + explicit Callback( + std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncGetPBFTView(const bcostars::Error& ret, tars::Int64 _view) override + { + m_callback(toBcosError(ret), _view); + } + void callback_asyncGetPBFTView_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), 0); + } + + private: + std::function m_callback; + }; + m_proxy->async_asyncGetPBFTView(new Callback(_onGetView)); +} + +// the sync module calls this interface to check block +void PBFTServiceClient::asyncCheckBlock( + bcos::protocol::Block::Ptr _block, std::function _onVerifyFinish) +{ + class Callback : public PBFTServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncCheckBlock(const bcostars::Error& ret, tars::Bool _verifyResult) override + { + m_callback(toBcosError(ret), _verifyResult); + } + void callback_asyncCheckBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), false); + } + + private: + std::function m_callback; + }; + + auto blockImpl = std::dynamic_pointer_cast(_block); + m_proxy->async_asyncCheckBlock(new Callback(_onVerifyFinish), blockImpl->inner()); +} + +// the sync module calls this interface to notify new block +void PBFTServiceClient::asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr _ledgerConfig, std::function _onRecv) +{ + m_proxy->async_asyncNotifyNewBlock( + new PBFTServiceCommonCallback(_onRecv), toTarsLedgerConfig(_ledgerConfig)); +} + +// called by frontService to dispatch message +void PBFTServiceClient::asyncNotifyConsensusMessage(bcos::Error::Ptr, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) +{ + auto nodeIDData = _nodeID->data(); + m_proxy->async_asyncNotifyConsensusMessage(new PBFTServiceCommonCallback(_onRecv), _uuid, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); +} + +// Note: used for the txpool notify the unsealed txsSize +void PBFTServiceClient::asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecv) +{ + m_proxy->async_asyncNoteUnSealedTxsSize( + new PBFTServiceCommonCallback(_onRecv), _unsealedTxsSize); +} + +void BlockSyncServiceClient::asyncGetSyncInfo( + std::function _onGetSyncInfo) +{ + class Callback : public PBFTServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncGetSyncInfo( + const bcostars::Error& ret, const std::string& _syncInfo) override + { + m_callback(toBcosError(ret), _syncInfo); + } + void callback_asyncGetSyncInfo_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), "callback_asyncGetSyncInfo_exception"); + } + + private: + std::function m_callback; + }; + m_proxy->async_asyncGetSyncInfo(new Callback(_onGetSyncInfo)); +} + +void BlockSyncServiceClient::notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onRecvResponse) +{ + PBFTServiceClient::notifyConnectedNodes(_connectedNodes, _onRecvResponse); +} + +void PBFTServiceClient::notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) +{ + class Callback : public bcostars::PBFTServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncNotifyConnectedNodes(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyConnectedNodes_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + std::vector> tarsConnectedNodes; + for (auto const& it : _connectedNodes) + { + auto nodeID = it->data(); + tarsConnectedNodes.emplace_back(nodeID.begin(), nodeID.end()); + } + m_proxy->async_asyncNotifyConnectedNodes(new Callback(_onResponse), tarsConnectedNodes); +} + +void PBFTServiceClient::asyncGetConsensusStatus( + std::function _onGetConsensusStatus) +{ + class Callback : public PBFTServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncGetConsensusStatus( + const bcostars::Error& ret, const std::string& _consensusStatus) override + { + m_callback(toBcosError(ret), _consensusStatus); + } + void callback_asyncGetConsensusStatus_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), "callback_asyncGetConsensusStatus_exception"); + } + + private: + std::function m_callback; + }; + m_proxy->async_asyncGetConsensusStatus(new Callback(_onGetConsensusStatus)); +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.h new file mode 100644 index 0000000..2217572 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/PBFTServiceClient.h @@ -0,0 +1,219 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief client for the PBFTService + * @file PBFTServiceClient.h + * @author: yujiechen + * @date 2021-06-29 + */ + +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" +#include "../ErrorConverter.h" +#include +#include +#include +#include + +namespace bcostars +{ +class PBFTServiceCommonCallback : public bcostars::PBFTServicePrxCallback +{ +public: + PBFTServiceCommonCallback(std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~PBFTServiceCommonCallback() override {} + + void callback_asyncNoteUnSealedTxsSize(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNoteUnSealedTxsSize_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyConsensusMessage(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyConsensusMessage_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyNewBlock(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyNewBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncSubmitProposal(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncSubmitProposal_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyBlockSyncMessage(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyBlockSyncMessage_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + +private: + std::function m_callback; +}; + +class PBFTServiceClient : virtual public bcos::consensus::ConsensusInterface, + virtual public bcos::sealer::SealerInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTServiceClient(bcostars::PBFTServicePrx _proxy) : m_proxy(_proxy) {} + ~PBFTServiceClient() override {} + + void start() override {} + void stop() override {} + // called by frontService to dispatch message + void asyncNotifyConsensusMessage(bcos::Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) override; + void asyncGetPBFTView( + std::function _onGetView) override; + + // the txpool notify the unsealed txsSize to the sealer module + void asyncNoteUnSealedTxsSize( + uint64_t _unsealedTxsSize, std::function _onRecvResponse) override; + + // the sealer submit proposal to the consensus module + // Note: if the sealer module integrates with the PBFT module, no need to implement this + // interface + void asyncSubmitProposal(bool _containSysTxs, bcos::bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) override; + + // the sync module calls this interface to check block + // Note: if the sync module integrates with the PBFT module, no need to implement this + // interface + void asyncCheckBlock(bcos::protocol::Block::Ptr _block, + std::function _onVerifyFinish) override; + + // the sync module calls this interface to notify new block + // Note: if the sync module integrates with the PBFT module, no need to implement this + // interface + void asyncNotifyNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig, + std::function _onRecv) override; + + // for the sync module to notify the syncing number + // Note: since the sync module is integrated with the PBFT module, no need to implement the + // client interface + void notifyHighestSyncingNumber(bcos::protocol::BlockNumber _number) override + { + throw std::runtime_error( + "PBFTServiceClient: notifyHighestSyncingNumber: unimplemented interface!"); + } + void asyncNotifySealProposal( + uint64_t, uint64_t, uint64_t, std::function) override + { + throw std::runtime_error( + "PBFTServiceClient: asyncNotifySealProposal: unimplemented interface!"); + } + // for the consensus module to notify the latest blockNumber to the sealer module + // Note: since the sealer module is integrated with the PBFT module, no need to implement + // the client interface + void asyncNoteLatestBlockNumber(int64_t) override + { + throw std::runtime_error( + "PBFTServiceClient: asyncNoteLatestBlockNumber: unimplemented interface!"); + } + + // the consensus module notify the sealer to reset sealing when viewchange + void asyncResetSealing(std::function _onRecvResponse) override + { + throw std::runtime_error("PBFTServiceClient: asyncResetSealing: unimplemented interface!"); + } + + void asyncGetConsensusStatus( + std::function _onGetConsensusStatus) override; + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) override; + +protected: + bcostars::PBFTServicePrx m_proxy; +}; + +class BlockSyncServiceClient : virtual public bcos::sync::BlockSyncInterface, + public PBFTServiceClient +{ +public: + using Ptr = std::shared_ptr; + BlockSyncServiceClient(bcostars::PBFTServicePrx _proxy) : PBFTServiceClient(_proxy) {} + ~BlockSyncServiceClient() override {} + + // called by the consensus module when commit a new block + void asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr, std::function) override + { + throw std::runtime_error( + "BlockSyncServiceClient: asyncNotifyNewBlock: unimplemented interface!"); + } + + // called by the consensus module to notify the consensusing block number + void asyncNotifyCommittedIndex( + bcos::protocol::BlockNumber, std::function) override + { + throw std::runtime_error( + "BlockSyncServiceClient: asyncNotifyCommittedIndex: unimplemented interface!"); + } + + bool faultyNode(bcos::crypto::NodeIDPtr _nodeID) override + { + throw std::runtime_error("BlockSyncServiceClient: faultyNode: unimplemented interface!"); + } + + // called by the RPC to get the sync status + void asyncGetSyncInfo( + std::function _onGetSyncInfo) override; + + // called by the frontService to dispatch message + void asyncNotifyBlockSyncMessage(bcos::Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) override + { + auto nodeIDData = _nodeID->data(); + m_proxy->async_asyncNotifyBlockSyncMessage(new PBFTServiceCommonCallback(_onRecv), _uuid, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); + } + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onRecvResponse) override; + +protected: + void start() override {} + void stop() override {} +}; +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.cpp new file mode 100644 index 0000000..40fce5e --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.cpp @@ -0,0 +1,23 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RPCServiceClient.cpp + * @author: ancelmo + * @date 2021-04-20 + */ +#include "RpcServiceClient.h" + +std::atomic bcostars::RpcServiceClient::s_tarsTimeoutCount = {0}; +const int64_t bcostars::RpcServiceClient::c_maxTarsTimeoutCount = 500; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.h new file mode 100644 index 0000000..7e64580 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/RpcServiceClient.h @@ -0,0 +1,251 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RPCServiceClient.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "../Common.h" +#include "../ErrorConverter.h" +#include "../protocol/TransactionSubmitResultImpl.h" +#include +#include +#include +#include +#include + +namespace bcostars +{ +class RpcServiceClient : public bcos::rpc::RPCInterface +{ +public: + RpcServiceClient(bcostars::RpcServicePrx _prx, std::string const& _rpcServiceName) + : m_prx(_prx), m_rpcServiceName(_rpcServiceName) + {} + ~RpcServiceClient() override {} + + class Callback : public RpcServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : RpcServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncNotifyBlockNumber(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyBlockNumber_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + void asyncNotifyBlockNumber(std::string const& _groupID, std::string const& _nodeName, + bcos::protocol::BlockNumber _blockNumber, + std::function _callback) override + { + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncNotifyBlockNumber", m_prx, [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(_error); + } + }); + if (!ret && shouldBlockCall) + { + return; + } + + auto activeEndPoints = tarsProxyAvailableEndPoints(m_prx); + // notify block number to all rpc nodes + for (auto const& endPoint : activeEndPoints) + { + auto prx = bcostars::createServantProxy(m_rpcServiceName, endPoint); + prx->async_asyncNotifyBlockNumber( + new Callback(_callback), _groupID, _nodeName, _blockNumber); + } + } + + void asyncNotifyGroupInfo(bcos::group::GroupInfo::Ptr _groupInfo, + std::function _callback) override + { + class Callback : public bcostars::RpcServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncNotifyGroupInfo(const bcostars::Error& ret) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyGroupInfo_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncNotifyGroupInfo", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error)); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + + auto activeEndPoints = tarsProxyAvailableEndPoints(m_prx); + auto tarsGroupInfo = toTarsGroupInfo(_groupInfo); + + for (auto const& endPoint : activeEndPoints) + { + auto prx = bcostars::createServantProxy(m_rpcServiceName, endPoint); + prx->async_asyncNotifyGroupInfo(new Callback(_callback), tarsGroupInfo); + } + } + + void asyncNotifyAMOPMessage(int16_t _type, std::string const& _topic, bcos::bytesConstRef _data, + std::function _callback) + override + { + class Callback : public bcostars::RpcServicePrxCallback + { + public: + Callback(std::function callback) + : m_callback(callback) + {} + + void callback_asyncNotifyAMOPMessage( + const bcostars::Error& ret, const vector& _responseData) override + { + s_tarsTimeoutCount.store(0); + auto responseData = + std::make_shared(_responseData.begin(), _responseData.end()); + m_callback(toBcosError(ret), responseData); + } + void callback_asyncNotifyAMOPMessage_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncNotifyAMOPMessage", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error), nullptr); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + vector request(_data.begin(), _data.end()); + m_prx->tars_set_timeout(c_amopTimeout) + ->async_asyncNotifyAMOPMessage(new Callback(_callback), _type, _topic, request); + } + + void asyncNotifySubscribeTopic( + std::function _callback) override + { + class Callback : public bcostars::RpcServicePrxCallback + { + public: + Callback(std::function callback) + : m_callback(callback) + {} + + void callback_asyncNotifySubscribeTopic( + const bcostars::Error& ret, std::string const& _topicInfo) override + { + s_tarsTimeoutCount.store(0); + m_callback(toBcosError(ret), _topicInfo); + } + void callback_asyncNotifySubscribeTopic_exception(tars::Int32 ret) override + { + s_tarsTimeoutCount++; + m_callback(toBcosError(ret), ""); + } + + private: + std::function m_callback; + }; + auto shouldBlockCall = shouldStopCall(); + auto ret = checkConnection( + c_moduleName, "asyncNotifySubscribeTopic", m_prx, + [_callback](bcos::Error::Ptr _error) { + if (_callback) + { + _callback(std::move(_error), ""); + } + }, + shouldBlockCall); + if (!ret && shouldBlockCall) + { + return; + } + m_prx->async_asyncNotifySubscribeTopic(new Callback(_callback)); + } + + bcostars::RpcServicePrx prx() { return m_prx; } + +protected: + void start() override {} + void stop() override {} + + static bool shouldStopCall() { return (s_tarsTimeoutCount >= c_maxTarsTimeoutCount); } + +private: + bcostars::RpcServicePrx m_prx; + std::string m_rpcServiceName; + std::string const c_moduleName = "RpcServiceClient"; + // AMOP timeout 40s + const int c_amopTimeout = 40000; + + static std::atomic s_tarsTimeoutCount; + static const int64_t c_maxTarsTimeoutCount; +}; + +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.cpp b/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.cpp new file mode 100644 index 0000000..fbb2460 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.cpp @@ -0,0 +1,246 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SchedulerServiceClient.cpp + * @author: yujiechen + * @date 2021-10-17 + */ +#include "SchedulerServiceClient.h" +#include "../Common.h" +#include "../ErrorConverter.h" +#include "../protocol/BlockImpl.h" +#include "../protocol/TransactionImpl.h" +#include "../protocol/TransactionReceiptImpl.h" + +using namespace bcostars; + +void SchedulerServiceClient::call(bcos::protocol::Transaction::Ptr _tx, + std::function _callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function + _callback, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_callback(_callback), m_cryptoSuite(_cryptoSuite) + {} + ~Callback() override {} + + void callback_call( + const bcostars::Error& ret, const bcostars::TransactionReceipt& _receipt) override + { + auto bcosReceipt = std::make_shared( + [m_receipt = std::move(_receipt)]() mutable { return &m_receipt; }); + m_callback(toBcosError(ret), bcosReceipt); + } + + void callback_call_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function + m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + auto tarsTx = std::dynamic_pointer_cast(_tx); + m_prx->async_call(new Callback(_callback, m_cryptoSuite), tarsTx->inner()); +} + +void SchedulerServiceClient::getCode( + std::string_view contract, std::function callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function callback) + : m_callback(std::move(callback)) + {} + ~Callback() override {} + + void callback_getCode(const bcostars::Error& ret, const vector& code) override + { + bcos::bytes outCode(code.begin(), code.end()); + + m_callback(toBcosError(ret), std::move(outCode)); + } + + void callback_getCode_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), {}); + } + + private: + std::function m_callback; + }; + + m_prx->async_getCode(new Callback(std::move(callback)), std::string(contract)); +} + +void SchedulerServiceClient::getABI( + std::string_view contract, std::function callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function callback) + : m_callback(std::move(callback)) + {} + ~Callback() override {} + + void callback_getABI(const bcostars::Error& ret, const std::string& abi) override + { + std::string outCode(abi.begin(), abi.end()); + + m_callback(toBcosError(ret), std::move(outCode)); + } + + void callback_getABI_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), {}); + } + + private: + std::function m_callback; + }; + + m_prx->async_getABI(new Callback(std::move(callback)), std::string(contract)); +} + + +void SchedulerServiceClient::executeBlock(bcos::protocol::Block::Ptr _block, bool _verify, + std::function _callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function + _callback, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_callback(std::move(_callback)), m_cryptoSuite(_cryptoSuite) + {} + ~Callback() override {} + + void callback_executeBlock(const bcostars::Error& ret, + const bcostars::BlockHeader& _executedHeader, tars::Bool _sysBlock) override + { + auto bcosBlockHeader = std::make_shared( + [m_header = _executedHeader]() mutable { return &m_header; }); + m_callback(toBcosError(ret), std::move(bcosBlockHeader), _sysBlock); + } + + void callback_executeBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr, false); + } + + private: + std::function + m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + auto tarsBlock = std::dynamic_pointer_cast(_block); + m_prx->async_executeBlock( + new Callback(std::move(_callback), m_cryptoSuite), tarsBlock->inner(), _verify); +} + +void SchedulerServiceClient::commitBlock(bcos::protocol::BlockHeader::Ptr _blockHeader, + std::function _callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback( + std::function&& _callback, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_callback(std::move(_callback)), m_cryptoSuite(_cryptoSuite) + {} + ~Callback() override {} + + void callback_commitBlock( + const bcostars::Error& ret, const bcostars::LedgerConfig& _ledgerConfig) override + { + m_callback( + toBcosError(ret), toLedgerConfig(_ledgerConfig, m_cryptoSuite->keyFactory())); + } + + void callback_commitBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + auto tarsBlockHeader = + std::dynamic_pointer_cast(_blockHeader); + m_prx->async_commitBlock( + new Callback(std::move(_callback), m_cryptoSuite), tarsBlockHeader->inner()); +} + +void SchedulerServiceClient::registerExecutor(std::string _name, + bcos::executor::ParallelTransactionExecutorInterface::Ptr, + std::function _callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function _callback) : m_callback(_callback) {} + ~Callback() override {} + + void callback_registerExecutor(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_registerExecutor_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + m_prx->async_registerExecutor(new Callback(_callback), _name); +} + +void SchedulerServiceClient::preExecuteBlock( + bcos::protocol::Block::Ptr block, bool verify, std::function callback) +{ + class Callback : public SchedulerServicePrxCallback + { + public: + Callback(std::function _callback) : m_callback(_callback) {} + ~Callback() override {} + + void callback_registerExecutor(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_registerExecutor_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + auto tarsBlock = std::dynamic_pointer_cast(block); + m_prx->async_preExecuteBlock(new Callback(callback), tarsBlock->inner(), verify); +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.h new file mode 100644 index 0000000..c997a06 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/SchedulerServiceClient.h @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file SchedulerServiceClient.h + * @author: yujiechen + * @date 2021-10-17 + */ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include + +namespace bcostars +{ +class SchedulerServiceClient : public bcos::scheduler::SchedulerInterface +{ +public: + SchedulerServiceClient(SchedulerServicePrx _prx, bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_prx(_prx), m_cryptoSuite(_cryptoSuite) + {} + ~SchedulerServiceClient() override {} + + void call(bcos::protocol::Transaction::Ptr tx, + std::function) + override; + + void executeBlock(bcos::protocol::Block::Ptr _block, bool _verify, + std::function _callback) + override; + + void commitBlock(bcos::protocol::BlockHeader::Ptr _blockHeader, + std::function _callback) + override; + + void getCode(std::string_view contract, + std::function callback) override; + + void getABI(std::string_view contract, + std::function callback) override; + + void preExecuteBlock(bcos::protocol::Block::Ptr block, bool verify, + std::function callback) override; + + void status( + std::function) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method status"); + } + + + void registerExecutor(std::string, bcos::executor::ParallelTransactionExecutorInterface::Ptr, + std::function) override; + + void unregisterExecutor(const std::string&, std::function) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method unregisterExecutor"); + } + + void reset(std::function) override + { + BCOS_LOG(ERROR) << LOG_DESC("unimplemented method reset"); + } + +private: + SchedulerServicePrx m_prx; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/client/TxPoolServiceClient.h b/bcos-tars-protocol/bcos-tars-protocol/client/TxPoolServiceClient.h new file mode 100644 index 0000000..126dc26 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/client/TxPoolServiceClient.h @@ -0,0 +1,550 @@ +#pragma once + +#include +#include +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "bcos-tars-protocol/ErrorConverter.h" +#include "bcos-tars-protocol/protocol/BlockImpl.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include "bcos-tars-protocol/protocol/TransactionSubmitResultImpl.h" +#include "bcos-tars-protocol/tars/Transaction.h" +#include "bcos-tars-protocol/tars/TransactionSubmitResult.h" +#include "bcos-tars-protocol/tars/TxPoolService.h" +#include +#include +#include +#include +#include + +namespace bcostars +{ +class TxPoolServiceClient : public bcos::txpool::TxPoolInterface +{ +public: + TxPoolServiceClient(bcostars::TxPoolServicePrx _proxy, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::protocol::BlockFactory::Ptr _blockFactory) + : m_proxy(_proxy), m_cryptoSuite(_cryptoSuite), m_blockFactory(_blockFactory) + {} + ~TxPoolServiceClient() override = default; + + bcos::task::Task submitTransaction( + bcos::protocol::Transaction::Ptr transaction) override + { + struct TarsCallback : public bcostars::TxPoolServicePrxCallback + { + void callback_submit(const bcostars::Error& ret, + const bcostars::TransactionSubmitResult& result) override + { + auto bcosResult = std::make_shared( + std::move(m_cryptoSuite), + [inner = std::move(const_cast( + result))]() mutable { return &inner; }); + m_submitResult = std::move(bcosResult); + m_handle.resume(); + } + void callback_submit_exception(tars::Int32 ret) override + { + m_submitResult = toBcosError(ret); + m_handle.resume(); + } + + CO_STD::coroutine_handle<> m_handle; + std::variant + m_submitResult; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + + struct Awaitable + { + constexpr bool await_ready() { return false; } + void await_suspend(CO_STD::coroutine_handle<> handle) + { + m_callback->m_handle = handle; + m_proxy->tars_set_timeout(600000)->async_submit(m_callback, + dynamic_cast(*m_transaction) + .inner()); // tars take the m_callback ownership + } + bcostars::protocol::TransactionSubmitResultImpl::Ptr await_resume() + { + if (std::holds_alternative(m_callback->m_submitResult)) + { + BOOST_THROW_EXCEPTION(*std::get(m_callback->m_submitResult)); + } + + if (!std::holds_alternative( + m_callback->m_submitResult)) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "No value!")); + } + + return std::move(std::get( + m_callback->m_submitResult)); + } + + TarsCallback* m_callback = nullptr; + bcos::protocol::Transaction::Ptr m_transaction; + bcostars::TxPoolServicePrx m_proxy; + }; + + auto tarsCallback = std::make_unique(); + tarsCallback->m_cryptoSuite = m_cryptoSuite; + + auto awaitable = Awaitable{.m_callback = tarsCallback.release(), + .m_transaction = std::move(transaction), + .m_proxy = m_proxy}; + + co_return co_await awaitable; + } + + bcos::task::Task broadcastPushTransaction( + [[maybe_unused]] const bcos::protocol::Transaction& transaction) override + { + struct TarsCallback : public bcostars::TxPoolServicePrxCallback + { + void callback_broadcastPushTransaction(const bcostars::Error& ret) override + { + m_error = toBcosError(ret); + m_handle.resume(); + } + void callback_submit_exception(tars::Int32 ret) override + { + m_error = toBcosError(ret); + m_handle.resume(); + } + + CO_STD::coroutine_handle<> m_handle; + bcos::Error::Ptr m_error; + }; + + struct Awaitable + { + constexpr bool await_ready() const { return false; } + void await_suspend(CO_STD::coroutine_handle<> handle) + { + m_callback->m_handle = handle; + m_proxy->tars_set_timeout(600000)->async_broadcastPushTransaction(m_callback, + dynamic_cast(m_transaction) + .inner()); // tars take the m_callback ownership + } + void await_resume() const + { + if (m_callback->m_error) + { + BOOST_THROW_EXCEPTION(*m_callback->m_error); + } + } + + TarsCallback* m_callback = nullptr; + const bcos::protocol::Transaction& m_transaction; + bcostars::TxPoolServicePrx m_proxy; + }; + + auto tarsCallback = std::make_unique(); + auto awaitable = Awaitable{ + .m_callback = tarsCallback.release(), .m_transaction = transaction, .m_proxy = m_proxy}; + + co_return co_await awaitable; + } + + void asyncSealTxs(uint64_t _txsLimit, bcos::txpool::TxsHashSetPtr _avoidTxs, + std::function + _sealCallback) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(bcos::protocol::BlockFactory::Ptr _blockFactory, + std::function + callback) + : m_blockFactory(_blockFactory), m_callback(callback) + {} + + void callback_asyncSealTxs(const bcostars::Error& ret, const bcostars::Block& _txsList, + const bcostars::Block& _sysTxList) override + { + auto txsList = m_blockFactory->createBlock(); + std::dynamic_pointer_cast(txsList)->setInner( + std::move(*const_cast(&_txsList))); + + auto sysTxList = m_blockFactory->createBlock(); + std::dynamic_pointer_cast(sysTxList)->setInner( + std::move(*const_cast(&_sysTxList))); + + m_callback(toBcosError(ret), txsList, sysTxList); + } + + void callback_asyncSealTxs_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr, nullptr); + } + + private: + bcos::protocol::BlockFactory::Ptr m_blockFactory; + std::function + m_callback; + }; + + vector> tarsAvoidTxs; + if (_avoidTxs && _avoidTxs->size() > 0) + { + for (auto& it : *_avoidTxs) + { + tarsAvoidTxs.push_back(std::vector(it.begin(), it.end())); + } + } + + m_proxy->async_asyncSealTxs( + new Callback(m_blockFactory, _sealCallback), _txsLimit, tarsAvoidTxs); + } + + void asyncMarkTxs(bcos::crypto::HashListPtr _txsHash, bool _sealedFlag, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + std::function _onRecvResponse) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncMarkTxs(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncMarkTxs_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + vector> txHashList; + for (auto& it : *_txsHash) + { + txHashList.push_back(std::vector(it.begin(), it.end())); + } + + m_proxy->async_asyncMarkTxs(new Callback(_onRecvResponse), txHashList, _sealedFlag, + _batchId, std::vector(_batchHash.begin(), _batchHash.end())); + } + + void asyncVerifyBlock(bcos::crypto::PublicPtr _generatedNodeID, + bcos::bytesConstRef const& _block, + std::function _onVerifyFinished) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncVerifyBlock(const bcostars::Error& ret, tars::Bool result) override + { + m_callback(toBcosError(ret), result); + } + + void callback_asyncVerifyBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), false); + } + + private: + std::function m_callback; + }; + + auto nodeID = _generatedNodeID->data(); + m_proxy->async_asyncVerifyBlock(new Callback(_onVerifyFinished), + std::vector(nodeID.begin(), nodeID.end()), + std::vector(_block.begin(), _block.end())); + } + + void asyncFillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled) + override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback( + std::function callback, + bcos::crypto::CryptoSuite::Ptr cryptoSuite) + : m_callback(callback), m_cryptoSuite(cryptoSuite) + {} + + void callback_asyncFillBlock( + const bcostars::Error& ret, const vector& filled) override + { + auto mutableFilled = const_cast*>(&filled); + auto txs = std::make_shared(); + for (auto&& it : *mutableFilled) + { + auto tx = std::make_shared( + [m_tx = std::move(it)]() mutable { return &m_tx; }); + txs->push_back(tx); + } + m_callback(toBcosError(ret), txs); + } + + void callback_asyncFillBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), nullptr); + } + + private: + std::function m_callback; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + }; + + vector> hashList; + for (auto hashData : *_txsHash) + { + hashList.emplace_back(hashData.begin(), hashData.end()); + } + + m_proxy->async_asyncFillBlock(new Callback(_onBlockFilled, m_cryptoSuite), hashList); + } + + void asyncNotifyBlockResult(bcos::protocol::BlockNumber _blockNumber, + bcos::protocol::TransactionSubmitResultsPtr _txsResult, + std::function _onNotifyFinished) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) {} + + void callback_asyncNotifyBlockResult(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyBlockResult_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + vector resultList; + for (auto& it : *_txsResult) + { + resultList.emplace_back( + std::dynamic_pointer_cast(it) + ->inner()); + } + + m_proxy->async_asyncNotifyBlockResult( + new Callback(_onNotifyFinished), _blockNumber, resultList); + } + + void asyncNotifyTxsSyncMessage(bcos::Error::Ptr _error, std::string const& _id, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) + {} + + void callback_asyncNotifyTxsSyncMessage(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyTxsSyncMessage_exception(tars::Int32 ret) override + { + bcos::bytes empty; + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + auto nodeID = _nodeID->data(); + m_proxy->async_asyncNotifyTxsSyncMessage(new Callback(_onRecv), toTarsError(_error), _id, + std::vector(nodeID.begin(), nodeID.end()), + std::vector(_data.begin(), _data.end())); + } + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onRecvResponse) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) + {} + + void callback_notifyConnectedNodes(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_notifyConnectedNodes_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + std::vector> tarsConnectedNodes; + for (auto const& it : _connectedNodes) + { + auto nodeID = it->data(); + tarsConnectedNodes.emplace_back(nodeID.begin(), nodeID.end()); + } + m_proxy->async_notifyConnectedNodes(new Callback(_onRecvResponse), tarsConnectedNodes); + } + + void notifyConsensusNodeList(bcos::consensus::ConsensusNodeList const& _consensusNodeList, + std::function _onRecvResponse) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) + {} + + void callback_notifyConsensusNodeList(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_notifyConsensusNodeList_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + std::vector tarsConsensusNodeList; + for (auto const& it : _consensusNodeList) + { + bcostars::ConsensusNode node; + + auto nodeID = it->nodeID()->data(); + node.nodeID.assign(nodeID.begin(), nodeID.end()); + node.weight = it->weight(); + tarsConsensusNodeList.emplace_back(node); + } + + m_proxy->async_notifyConsensusNodeList( + new Callback(_onRecvResponse), tarsConsensusNodeList); + } + + void notifyObserverNodeList(bcos::consensus::ConsensusNodeList const& _observerNodeList, + std::function _onRecvResponse) override + { + class Callback : public bcostars::TxPoolServicePrxCallback + { + public: + Callback(std::function callback) : m_callback(callback) + {} + + void callback_notifyObserverNodeList(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_notifyObserverNodeList_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + + std::vector tarsConsensusNodeList; + for (auto const& it : _observerNodeList) + { + bcostars::ConsensusNode node; + auto nodeID = it->nodeID()->data(); + node.nodeID.assign(nodeID.begin(), nodeID.end()); + node.weight = it->weight(); + tarsConsensusNodeList.emplace_back(node); + } + + m_proxy->async_notifyObserverNodeList(new Callback(_onRecvResponse), tarsConsensusNodeList); + } + + // for RPC to get pending transactions + void asyncGetPendingTransactionSize( + std::function _onGetTxsSize) override + { + class Callback : public TxPoolServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : TxPoolServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncGetPendingTransactionSize( + const bcostars::Error& ret, tars::Int64 _txsSize) override + { + m_callback(toBcosError(ret), _txsSize); + } + void callback_asyncGetPendingTransactionSize_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret), 0); + } + + private: + std::function m_callback; + }; + m_proxy->async_asyncGetPendingTransactionSize(new Callback(_onGetTxsSize)); + } + + void asyncResetTxPool(std::function _onRecv) override + { + class Callback : public TxPoolServicePrxCallback + { + public: + explicit Callback(std::function _callback) + : TxPoolServicePrxCallback(), m_callback(_callback) + {} + ~Callback() override {} + + void callback_asyncResetTxPool(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncResetTxPool_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + private: + std::function m_callback; + }; + m_proxy->async_asyncResetTxPool(new Callback(_onRecv)); + } + +protected: + void start() override {} + void stop() override {} + +private: + bcostars::TxPoolServicePrx m_proxy; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::protocol::BlockFactory::Ptr m_blockFactory; +}; + +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/impl/TarsHashable.h b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsHashable.h new file mode 100644 index 0000000..8944482 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsHashable.h @@ -0,0 +1,140 @@ +#pragma once +#include "../Common.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::concepts::hash +{ + +template +void impl_calculate( + bcostars::Transaction const& transaction, bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + if (!transaction.dataHash.empty()) + { + bcos::concepts::bytebuffer::assignTo(transaction.dataHash, out); + return; + } + + Hasher hasher; + auto const& hashFields = transaction.data; + + int32_t version = boost::endian::native_to_big((int32_t)hashFields.version); + hasher.update(version); + hasher.update(hashFields.chainID); + hasher.update(hashFields.groupID); + int64_t blockLimit = boost::endian::native_to_big((int64_t)hashFields.blockLimit); + hasher.update(blockLimit); + hasher.update(hashFields.nonce); + hasher.update(hashFields.to); + hasher.update(hashFields.input); + hasher.update(hashFields.abi); + + hasher.final(out); +} + +template +void impl_calculate( + bcostars::TransactionReceipt const& receipt, bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + if (!receipt.dataHash.empty()) + { + bcos::concepts::bytebuffer::assignTo(receipt.dataHash, out); + return; + } + + Hasher hasher; + auto const& hashFields = receipt.data; + int32_t version = boost::endian::native_to_big((int32_t)hashFields.version); + hasher.update(version); + hasher.update(hashFields.gasUsed); + hasher.update(hashFields.contractAddress); + int32_t status = boost::endian::native_to_big((int32_t)hashFields.status); + hasher.update(status); + hasher.update(hashFields.output); + // vector logEntries: 6 + for (auto const& log : hashFields.logEntries) + { + hasher.update(log.address); + for (auto const& topicItem : log.topic) + { + hasher.update(topicItem); + } + hasher.update(log.data); + } + int64_t blockNumber = boost::endian::native_to_big((int64_t)hashFields.blockNumber); + hasher.update(blockNumber); + hasher.final(out); +} + +template +auto impl_calculate( + bcostars::BlockHeader const& blockHeader, bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + if (!blockHeader.dataHash.empty()) + { + bcos::concepts::bytebuffer::assignTo(blockHeader.dataHash, out); + return; + } + + Hasher hasher; + auto const& hashFields = blockHeader.data; + + int32_t version = boost::endian::native_to_big((int32_t)hashFields.version); + hasher.update(version); + for (auto const& parent : hashFields.parentInfo) + { + int64_t blockNumber = boost::endian::native_to_big((int64_t)parent.blockNumber); + hasher.update(blockNumber); + hasher.update(parent.blockHash); + } + hasher.update(hashFields.txsRoot); + hasher.update(hashFields.receiptRoot); + hasher.update(hashFields.stateRoot); + + int64_t number = boost::endian::native_to_big((int64_t)hashFields.blockNumber); + hasher.update(number); + hasher.update(hashFields.gasUsed); + + int64_t timestamp = boost::endian::native_to_big((int64_t)hashFields.timestamp); + hasher.update(timestamp); + + int64_t sealer = boost::endian::native_to_big((int64_t)hashFields.sealer); + hasher.update(sealer); + + for (auto const& nodeID : hashFields.sealerList) + { + hasher.update(nodeID); + } + // update extraData to hashBuffer: 12 + hasher.update(hashFields.extraData); + // update consensusWeights to hashBuffer: 13 + for (auto weight : hashFields.consensusWeights) + { + int64_t networkWeight = boost::endian::native_to_big((int64_t)weight); + hasher.update(networkWeight); + } + + hasher.final(out); +} + +template +auto impl_calculate(bcostars::Block const& block, bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + if (!block.blockHeader.dataHash.empty()) + { + bcos::concepts::bytebuffer::assignTo(block.blockHeader.dataHash, out); + return; + } + + impl_calculate(block.blockHeader, out); +} + +} // namespace bcos::concepts::hash diff --git a/bcos-tars-protocol/bcos-tars-protocol/impl/TarsOutput.h b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsOutput.h new file mode 100644 index 0000000..19e3c8a --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsOutput.h @@ -0,0 +1,13 @@ +#pragma once + +#include "TarsStruct.h" +#include + +namespace std +{ +ostream& operator<<(ostream& os, bcostars::protocol::impl::TarsStruct auto const& st) +{ + st.displaySimple(os); + return os; +} +} // namespace std \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/impl/TarsSerializable.h b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsSerializable.h new file mode 100644 index 0000000..6893445 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsSerializable.h @@ -0,0 +1,37 @@ +#pragma once +#include "../Common.h" +#include "TarsStruct.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::concepts::serialize +{ + +void impl_encode(bcostars::protocol::impl::TarsStruct auto const& object, + bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + using ContainerType = typename std::remove_cvref_t; + using WriterType = bcostars::protocol::BufferWriter; + + tars::TarsOutputStream output; + object.writeTo(output); + + output.getByteBuffer().swap(out); +} + +void impl_decode(bcos::concepts::bytebuffer::ByteBuffer auto const& in, + bcostars::protocol::impl::TarsStruct auto& out) +{ + tars::TarsInputStream input; + input.setBuffer((const char*)RANGES::data(in), RANGES::size(in)); + + out.readFrom(input); +} + +} // namespace bcos::concepts::serialize \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/impl/TarsServantProxyCallback.h b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsServantProxyCallback.h new file mode 100644 index 0000000..ab8ad65 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsServantProxyCallback.h @@ -0,0 +1,265 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for tars ServantProxyCallback + * @file TarsServantProxyCallback.h + * @author: octopuswang + * @date 2022-07-24 + */ +#pragma once + +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Error.h" +#include "bcos-utilities/Timer.h" +#include "servant/ServantProxy.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TARS_PING_PERIOD (3000) + +namespace bcostars +{ +struct TC_EndpointCompare +{ + bool operator()(const tars::TC_Endpoint& lhs, const tars::TC_Endpoint& rhs) const + { + return lhs.toString() < rhs.toString(); + } +}; + +using EndpointSet = std::set; + +using TarsServantProxyOnConnectHandler = std::function; +using TarsServantProxyOnCloseHandler = std::function; + +class TarsServantProxyCallback : public tars::ServantProxyCallback +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + +public: + TarsServantProxyCallback( + const std::string& _serviceName, const tars::TC_AutoPtr& _proxy) + : m_serviceName(_serviceName), m_proxy(_proxy) + { + BCOS_LOG(INFO) << LOG_BADGE("[NEWOBJ][TarsServantProxyCallback]") + << LOG_KV("_serviceName", _serviceName) << LOG_KV("this", this); + } + + TarsServantProxyCallback(TarsServantProxyCallback&&) = delete; + TarsServantProxyCallback(const TarsServantProxyCallback&) = delete; + const TarsServantProxyCallback& operator=(const TarsServantProxyCallback&) = delete; + TarsServantProxyCallback& operator=(TarsServantProxyCallback&&) = delete; + + ~TarsServantProxyCallback() override + { + BCOS_LOG(INFO) << LOG_BADGE("[DELOBJ][TarsServantProxyCallback]") << LOG_KV("this", this); + stop(); + } + +public: + int onDispatch(tars::ReqMessagePtr) override { return 0; } + + void onClose(const tars::TC_Endpoint& ep) override + { + try + { + auto p = addInactiveEndpoint(ep); + BCOS_LOG(INFO) << LOG_DESC("onClose") << m_serviceName + << LOG_KV("endpoint", ep.toString()) + << LOG_KV("inActiveEndPointSize", p.second); + if (p.first && m_onCloseHandler) + { + m_onCloseHandler(ep); + } + } + catch (const std::exception& e) + { + std::cout << "[TarsServantProxyCallback::onClose] " + << "exception: " << boost::diagnostic_information(e) << std::endl; + } + } + + void onConnect(const tars::TC_Endpoint& ep) override + { + auto p = addActiveEndpoint(ep); + BCOS_LOG(INFO) << LOG_BADGE("ServantProxyCallback::onConnect") << LOG_KV("this", this) + << LOG_KV("serviceName", m_serviceName) << LOG_KV("endpoint", ep.toString()) + << LOG_KV("result", p.first) << LOG_KV("activeEndpoints size", p.second); + + if (p.first && m_onConnectHandler) + { + m_onConnectHandler(ep); + } + } + + void heartbeat() + { + try + { + if (m_proxy) + { + m_proxy->tars_async_ping(); + } + } + catch (...) + {} + } + + void start() + { + if (m_keepAlive > 0) + { + // for heartbeat + m_heartbeat = std::make_shared(m_keepAlive); + m_heartbeat->registerTimeoutHandler([this]() { + heartbeat(); + m_heartbeat->restart(); + }); + m_heartbeat->start(); + } + } + + void stop() + { + if (m_heartbeat) + { + m_heartbeat->stop(); + } + } + +public: + const std::string& serviceName() const { return m_serviceName; } + + int32_t keepAlive() const { return m_keepAlive; } + void setKeepAlive(int32_t _keepAlive) { m_keepAlive = _keepAlive; } + + auto activeEndpoints() + { + std::shared_lock l(x_endpoints); + return m_activeEndpoints; + } + + EndpointSet inactiveEndpoints() + { + std::shared_lock l(x_endpoints); + return m_inactiveEndpoints; + } + + std::pair addActiveEndpoint(const tars::TC_Endpoint& ep) + { + std::unique_lock l(x_endpoints); + auto result = m_activeEndpoints.insert(ep); + m_inactiveEndpoints.erase(ep); + return std::make_pair(result.second, m_activeEndpoints.size()); + } + + std::pair addInactiveEndpoint(const tars::TC_Endpoint& ep) + { + { + std::shared_lock l(x_endpoints); + if (m_inactiveEndpoints.find(ep) != m_inactiveEndpoints.end()) + { + return std::make_pair(false, m_inactiveEndpoints.size()); + } + } + + { + std::unique_lock l(x_endpoints); + auto result = m_inactiveEndpoints.insert(ep); + m_activeEndpoints.erase(ep); + + BCOS_LOG(INFO) << LOG_BADGE("ServantProxyCallback::addInactiveEndpoint") + << LOG_KV("this", this) << LOG_KV("result", result.second) + << LOG_KV("endpoint", ep.toString()); + + return std::make_pair(result.second, m_inactiveEndpoints.size()); + } + } + + TarsServantProxyOnConnectHandler onConnectHandler() const { return m_onConnectHandler; } + TarsServantProxyOnCloseHandler onCloseHandler() const { return m_onCloseHandler; } + + void setOnConnectHandler(TarsServantProxyOnConnectHandler _handler) + { + m_onConnectHandler = std::move(_handler); + } + + void setOnCloseHandler(TarsServantProxyOnCloseHandler _handler) + { + m_onCloseHandler = std::move(_handler); + } + + bool available() { return !activeEndpoints().empty(); } + +private: + std::string m_serviceName; + + // lock for m_activeEndpoints and m_inactiveEndpoints + mutable std::shared_mutex x_endpoints; + // all active tars endpoints + EndpointSet m_activeEndpoints; + // all inactive tars endpoints + EndpointSet m_inactiveEndpoints; + + std::function m_onConnectHandler; + std::function m_onCloseHandler; + + int32_t m_keepAlive = 3000; + std::shared_ptr m_heartbeat = nullptr; + // TODO: circle reference + tars::TC_AutoPtr m_proxy; +}; + +template +bool checkConnection(std::string const& _module, std::string const& _func, const T& prx, + std::function _errorCallback, bool _callsErrorCallback = true) +{ + auto cb = prx->tars_get_push_callback(); + assert(cb); + auto* tarsServantProxyCallback = (TarsServantProxyCallback*)cb.get(); + + if (tarsServantProxyCallback->available()) + { + return true; + } + + if (_errorCallback && _callsErrorCallback) + { + std::string errorMessage = + _module + " calls interface " + _func + " failed for empty connection"; + _errorCallback(std::make_shared(-1, errorMessage)); + } + return false; +} + +template +auto tarsProxyAvailableEndPoints(const T& prx) +{ + auto cb = prx->tars_get_push_callback(); + assert(cb); + return ((TarsServantProxyCallback*)cb.get())->activeEndpoints(); +} + +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/impl/TarsStruct.h b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsStruct.h new file mode 100644 index 0000000..25e1dd6 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/impl/TarsStruct.h @@ -0,0 +1,19 @@ +#pragma once +#include +#include + +namespace bcostars::protocol::impl +{ + +template +concept TarsStruct = requires(TarsStructType tarsStruct) +{ + { + tarsStruct.className() + } -> std::same_as; + { + tarsStruct.MD5() + } -> std::same_as; + tarsStruct.resetDefautlt(); +}; +} // namespace bcostars::protocol::impl \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockFactoryImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockFactoryImpl.h new file mode 100644 index 0000000..77df070 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockFactoryImpl.h @@ -0,0 +1,102 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for BlockFactory + * @file BlockFactoryImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ +#pragma once + +#include "../Common.h" +#include "BlockImpl.h" +#include "bcos-tars-protocol/tars/Block.h" +#include +#include +#include +#include + +namespace bcostars::protocol +{ +class BlockFactoryImpl : public bcos::protocol::BlockFactory +{ +public: + BlockFactoryImpl(bcos::crypto::CryptoSuite::Ptr cryptoSuite, + bcos::protocol::BlockHeaderFactory::Ptr blockHeaderFactory, + bcos::protocol::TransactionFactory::Ptr transactionFactory, + bcos::protocol::TransactionReceiptFactory::Ptr receiptFactory) + : m_cryptoSuite(std::move(cryptoSuite)), + m_blockHeaderFactory(std::move(blockHeaderFactory)), + m_transactionFactory(std::move(transactionFactory)), + m_receiptFactory(std::move(receiptFactory)){}; + BlockFactoryImpl(BlockFactoryImpl const&) = default; + BlockFactoryImpl(BlockFactoryImpl&&) = default; + BlockFactoryImpl& operator=(BlockFactoryImpl const&) = default; + BlockFactoryImpl& operator=(BlockFactoryImpl&&) = default; + ~BlockFactoryImpl() override = default; + + bcos::protocol::Block::Ptr createBlock() override { return std::make_shared(); } + + bcos::protocol::Block::Ptr createBlock( + bcos::bytesConstRef _data, bool _calculateHash = true, bool _checkSig = true) override + { + auto block = std::make_shared(); + block->decode(_data, _calculateHash, _checkSig); + + if (block->inner().blockHeader.dataHash.empty()) + { + block->blockHeader()->calculateHash(*m_cryptoSuite->hashImpl()); + } + + return block; + } + + bcos::crypto::CryptoSuite::Ptr cryptoSuite() override { return m_cryptoSuite; } + bcos::protocol::BlockHeaderFactory::Ptr blockHeaderFactory() override + { + return m_blockHeaderFactory; + } + bcos::protocol::TransactionFactory::Ptr transactionFactory() override + { + return m_transactionFactory; + } + bcos::protocol::TransactionReceiptFactory::Ptr receiptFactory() override + { + return m_receiptFactory; + } + + bcos::protocol::TransactionMetaData::Ptr createTransactionMetaData() override + { + return std::make_shared( + [inner = bcostars::TransactionMetaData()]() mutable { return &inner; }); + } + + bcos::protocol::TransactionMetaData::Ptr createTransactionMetaData( + bcos::crypto::HashType const _hash, std::string const& _to) override + { + auto txMetaData = std::make_shared(); + txMetaData->setHash(_hash); + txMetaData->setTo(_to); + + return txMetaData; + } + +private: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::protocol::BlockHeaderFactory::Ptr m_blockHeaderFactory; + bcos::protocol::TransactionFactory::Ptr m_transactionFactory; + bcos::protocol::TransactionReceiptFactory::Ptr m_receiptFactory; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h new file mode 100644 index 0000000..bba91bf --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for BlockHeaderFactory + * @file BlockHeaderFactoryImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ +#pragma once +#include "BlockHeaderImpl.h" +#include +#include + + +namespace bcostars +{ +namespace protocol +{ +class BlockHeaderFactoryImpl : public bcos::protocol::BlockHeaderFactory +{ +public: + BlockHeaderFactoryImpl(bcos::crypto::CryptoSuite::Ptr cryptoSuite) + : m_cryptoSuite(std::move(cryptoSuite)) + {} + ~BlockHeaderFactoryImpl() override {} + bcos::protocol::BlockHeader::Ptr createBlockHeader() override + { + return std::make_shared( + [m_header = bcostars::BlockHeader()]() mutable { return &m_header; }); + } + bcos::protocol::BlockHeader::Ptr createBlockHeader(bcos::bytes const& _data) override + { + return createBlockHeader(bcos::ref(_data)); + } + bcos::protocol::BlockHeader::Ptr createBlockHeader(bcos::bytesConstRef _data) override + { + auto blockHeader = createBlockHeader(); + blockHeader->decode(_data); + + return blockHeader; + } + bcos::protocol::BlockHeader::Ptr createBlockHeader(bcos::protocol::BlockNumber _number) override + { + auto blockHeader = createBlockHeader(); + blockHeader->setNumber(_number); + + return blockHeader; + } + +private: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace protocol +} // namespace bcostars diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.cpp new file mode 100644 index 0000000..2bdba52 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.cpp @@ -0,0 +1,171 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for BlockHeader + * @file BlockHeaderImpl.cpp + * @author: ancelmo + * @date 2021-04-20 + */ + +#include "../impl/TarsHashable.h" + +#include "BlockHeaderImpl.h" +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcostars::protocol; + +struct EmptyBlockHeaderHash : public bcos::error::Exception +{ +}; + +void BlockHeaderImpl::decode(bcos::bytesConstRef _data) +{ + tars::TarsInputStream input; + input.setBuffer((const char*)_data.data(), _data.size()); + + m_inner()->readFrom(input); +} + +void BlockHeaderImpl::encode(bcos::bytes& _encodeData) const +{ + tars::TarsOutputStream output; + + m_inner()->writeTo(output); + output.getByteBuffer().swap(_encodeData); +} + +bcos::crypto::HashType BlockHeaderImpl::hash() const +{ + if (m_inner()->dataHash.empty()) + { + BOOST_THROW_EXCEPTION(EmptyBlockHeaderHash{}); + } + + bcos::crypto::HashType hashResult( + (bcos::byte*)m_inner()->dataHash.data(), m_inner()->dataHash.size()); + + return hashResult; +} + +void BlockHeaderImpl::calculateHash(const bcos::crypto::Hash& hashImpl) +{ + auto anyHasher = hashImpl.hasher(); + bcos::crypto::HashType hashResult; + std::visit( + [this, &hashResult](auto& hasher) { + using Hasher = std::remove_cvref_t; + bcos::concepts::hash::calculate(*m_inner(), hashResult); + + m_inner()->dataHash.assign(hashResult.begin(), hashResult.end()); + }, + anyHasher); +} + +void BlockHeaderImpl::clear() +{ + m_inner()->resetDefautlt(); +} + +RANGES::any_view +BlockHeaderImpl::parentInfo() const +{ + return m_inner()->data.parentInfo | + RANGES::views::transform([](const bcostars::ParentInfo& tarsParentInfo) { + return bcos::protocol::ParentInfo{.blockNumber = tarsParentInfo.blockNumber, + .blockHash = bcos::crypto::HashType((bcos::byte*)tarsParentInfo.blockHash.data(), + tarsParentInfo.blockHash.size())}; + }); +} + +bcos::crypto::HashType BlockHeaderImpl::txsRoot() const +{ + if (!m_inner()->data.txsRoot.empty()) + { + return *(reinterpret_cast(m_inner()->data.txsRoot.data())); + } + return {}; +} + +bcos::crypto::HashType BlockHeaderImpl::stateRoot() const +{ + if (!m_inner()->data.stateRoot.empty()) + { + return *(reinterpret_cast(m_inner()->data.stateRoot.data())); + } + return {}; +} + +bcos::crypto::HashType BlockHeaderImpl::receiptsRoot() const +{ + if (!m_inner()->data.receiptRoot.empty()) + { + return *( + reinterpret_cast(m_inner()->data.receiptRoot.data())); + } + return {}; +} + +bcos::u256 BlockHeaderImpl::gasUsed() const +{ + if (!m_inner()->data.gasUsed.empty()) + { + return boost::lexical_cast(m_inner()->data.gasUsed); + } + return {}; +} + +void BlockHeaderImpl::setParentInfo(RANGES::any_view parentInfos) +{ + auto* inner = m_inner(); + inner->data.parentInfo.clear(); + for (auto it : parentInfos) + { + auto& newParentInfo = inner->data.parentInfo.emplace_back(); + newParentInfo.blockNumber = it.blockNumber; + newParentInfo.blockHash.assign(it.blockHash.begin(), it.blockHash.end()); + } + clearDataHash(); +} + +void BlockHeaderImpl::setSealerList(gsl::span const& _sealerList) +{ + m_inner()->data.sealerList.clear(); + for (auto const& it : _sealerList) + { + m_inner()->data.sealerList.emplace_back(it.begin(), it.end()); + } + clearDataHash(); +} + +void BlockHeaderImpl::setSignatureList( + gsl::span const& _signatureList) +{ + bcos::WriteGuard l(x_inner); + // Note: must clear the old signatureList when set the new signatureList + // in case of the consensus module get the cached-sync-blockHeader with signatureList which will + // cause redundant signature lists to be stored + m_inner()->signatureList.clear(); + for (const auto& it : _signatureList) + { + Signature signature; + signature.sealerIndex = it.index; + signature.signature.assign(it.signature.begin(), it.signature.end()); + m_inner()->signatureList.emplace_back(signature); + } +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.h new file mode 100644 index 0000000..ef05de4 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockHeaderImpl.h @@ -0,0 +1,191 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for BlockHeader + * @file BlockHeaderImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include "bcos-tars-protocol/tars/Block.h" + +#include +#include +#include +#include +#include +#include + +namespace bcostars::protocol +{ +class BlockHeaderImpl : public bcos::protocol::BlockHeader +{ +public: + BlockHeaderImpl(std::function inner) : m_inner(std::move(inner)) {} + ~BlockHeaderImpl() override = default; + + void decode(bcos::bytesConstRef _data) override; + void encode(bcos::bytes& _encodeData) const override; + bcos::crypto::HashType hash() const override; + void calculateHash(const bcos::crypto::Hash& hashImpl) override; + + void clear() override; + + uint32_t version() const override { return m_inner()->data.version; } + RANGES::any_view + parentInfo() const override; + + bcos::crypto::HashType txsRoot() const override; + bcos::crypto::HashType stateRoot() const override; + bcos::crypto::HashType receiptsRoot() const override; + bcos::protocol::BlockNumber number() const override { return m_inner()->data.blockNumber; } + bcos::u256 gasUsed() const override; + int64_t timestamp() const override { return m_inner()->data.timestamp; } + int64_t sealer() const override { return m_inner()->data.sealer; } + + gsl::span sealerList() const override + { + return gsl::span(reinterpret_cast(m_inner()->data.sealerList.data()), + m_inner()->data.sealerList.size()); + } + bcos::bytesConstRef extraData() const override + { + return bcos::bytesConstRef( + reinterpret_cast(m_inner()->data.extraData.data()), + m_inner()->data.extraData.size()); + } + gsl::span signatureList() const override + { + bcos::ReadGuard l(x_inner); + return gsl::span( + reinterpret_cast(m_inner()->signatureList.data()), + m_inner()->signatureList.size()); + } + + gsl::span consensusWeights() const override + { + return gsl::span(reinterpret_cast(m_inner()->data.consensusWeights.data()), + m_inner()->data.consensusWeights.size()); + } + + void setVersion(uint32_t _version) override + { + m_inner()->data.version = _version; + clearDataHash(); + } + + void setParentInfo(RANGES::any_view parentInfo) override; + + void setTxsRoot(bcos::crypto::HashType _txsRoot) override + { + m_inner()->data.txsRoot.assign(_txsRoot.begin(), _txsRoot.end()); + clearDataHash(); + } + void setReceiptsRoot(bcos::crypto::HashType _receiptsRoot) override + { + m_inner()->data.receiptRoot.assign(_receiptsRoot.begin(), _receiptsRoot.end()); + clearDataHash(); + } + void setStateRoot(bcos::crypto::HashType _stateRoot) override + { + m_inner()->data.stateRoot.assign(_stateRoot.begin(), _stateRoot.end()); + clearDataHash(); + } + void setNumber(bcos::protocol::BlockNumber _blockNumber) override + { + m_inner()->data.blockNumber = _blockNumber; + clearDataHash(); + } + void setGasUsed(bcos::u256 _gasUsed) override + { + m_inner()->data.gasUsed = boost::lexical_cast(_gasUsed); + clearDataHash(); + } + void setTimestamp(int64_t _timestamp) override + { + m_inner()->data.timestamp = _timestamp; + clearDataHash(); + } + void setSealer(int64_t _sealerId) override + { + m_inner()->data.sealer = _sealerId; + clearDataHash(); + } + void setSealerList(gsl::span const& _sealerList) override; + void setSealerList(std::vector&& _sealerList) override + { + setSealerList(gsl::span(_sealerList.data(), _sealerList.size())); + clearDataHash(); + } + + void setConsensusWeights(gsl::span const& _weightList) override + { + m_inner()->data.consensusWeights.assign(_weightList.begin(), _weightList.end()); + clearDataHash(); + } + + void setConsensusWeights(std::vector&& _weightList) override + { + setConsensusWeights(gsl::span(_weightList.data(), _weightList.size())); + clearDataHash(); + } + + void setExtraData(bcos::bytes const& _extraData) override + { + m_inner()->data.extraData.assign(_extraData.begin(), _extraData.end()); + clearDataHash(); + } + void setExtraData(bcos::bytes&& _extraData) override + { + m_inner()->data.extraData.assign(_extraData.begin(), _extraData.end()); + clearDataHash(); + } + void setSignatureList( + gsl::span const& _signatureList) override; + + void setSignatureList(bcos::protocol::SignatureList&& _signatureList) override + { + setSignatureList(gsl::span(_signatureList.data(), _signatureList.size())); + } + + const bcostars::BlockHeader& inner() const + { + bcos::ReadGuard l(x_inner); + return *m_inner(); + } + + void setInner(const bcostars::BlockHeader& blockHeader) + { + bcos::WriteGuard l(x_inner); + *m_inner() = blockHeader; + } + void setInner(bcostars::BlockHeader&& blockHeader) + { + bcos::WriteGuard l(x_inner); + *m_inner() = std::move(blockHeader); + } + + +private: + // Note: When the field in the header used to calculate the hash changes, the dataHash needs to + // be cleaned up + void clearDataHash() { m_inner()->dataHash.clear(); } + + std::function m_inner; + mutable bcos::SharedMutex x_inner; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.cpp new file mode 100644 index 0000000..afbedb8 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.cpp @@ -0,0 +1,133 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for Block + * @file BlockImpl.cpp + * @author: ancelmo + * @date 2021-04-20 + */ + +#include "../impl/TarsSerializable.h" + +#include "BlockImpl.h" +#include +#include + +using namespace bcostars; +using namespace bcostars::protocol; + +void BlockImpl::decode(bcos::bytesConstRef _data, bool, bool) +{ + bcos::concepts::serialize::decode(_data, *m_inner); +} + +void BlockImpl::encode(bcos::bytes& _encodeData) const +{ + bcos::concepts::serialize::encode(*m_inner, _encodeData); +} + +bcos::protocol::BlockHeader::Ptr BlockImpl::blockHeader() +{ + bcos::ReadGuard l(x_blockHeader); + return std::make_shared( + [inner = this->m_inner]() mutable { return &inner->blockHeader; }); +} + +bcos::protocol::BlockHeader::ConstPtr BlockImpl::blockHeaderConst() const +{ + bcos::ReadGuard l(x_blockHeader); + return std::make_shared( + [inner = this->m_inner]() { return &inner->blockHeader; }); +} + +bcos::protocol::Transaction::ConstPtr BlockImpl::transaction(uint64_t _index) const +{ + return std::make_shared( + [inner = m_inner, _index]() { return &(inner->transactions[_index]); }); +} + +bcos::protocol::TransactionReceipt::ConstPtr BlockImpl::receipt(uint64_t _index) const +{ + return std::make_shared( + [inner = m_inner, _index]() { return &(inner->receipts[_index]); }); +} + +void BlockImpl::setBlockHeader(bcos::protocol::BlockHeader::Ptr _blockHeader) +{ + if (_blockHeader) + { + bcos::WriteGuard l(x_blockHeader); + m_inner->blockHeader = + std::dynamic_pointer_cast(_blockHeader)->inner(); + } +} + +void BlockImpl::setReceipt(uint64_t _index, bcos::protocol::TransactionReceipt::Ptr _receipt) +{ + if (_index >= m_inner->receipts.size()) + { + m_inner->receipts.resize(m_inner->transactions.size()); + } + auto innerReceipt = + std::dynamic_pointer_cast(_receipt)->inner(); + m_inner->receipts[_index] = innerReceipt; +} + +void BlockImpl::appendReceipt(bcos::protocol::TransactionReceipt::Ptr _receipt) +{ + m_inner->receipts.emplace_back( + std::dynamic_pointer_cast(_receipt)->inner()); +} + +void BlockImpl::setNonceList(RANGES::any_view nonces) +{ + m_inner->nonceList.clear(); + for (auto it : nonces) + { + m_inner->nonceList.emplace_back(boost::lexical_cast(it)); + } +} + +RANGES::any_view BlockImpl::nonceList() const +{ + return m_inner->nonceList | RANGES::views::transform([](const std::string& nonceStr) { + return boost::lexical_cast(nonceStr); + }); +} + +bcos::protocol::TransactionMetaData::ConstPtr BlockImpl::transactionMetaData(uint64_t _index) const +{ + if (_index >= transactionsMetaDataSize()) + { + return nullptr; + } + + auto txMetaData = std::make_shared( + [inner = m_inner, _index]() { return &inner->transactionsMetaData[_index]; }); + + return txMetaData; +} + +void BlockImpl::appendTransactionMetaData(bcos::protocol::TransactionMetaData::Ptr _txMetaData) +{ + auto txMetaDataImpl = + std::dynamic_pointer_cast(_txMetaData); + m_inner->transactionsMetaData.emplace_back(txMetaDataImpl->inner()); +} + +uint64_t BlockImpl::transactionsMetaDataSize() const +{ + return m_inner->transactionsMetaData.size(); +} diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.h new file mode 100644 index 0000000..0b73f5d --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/BlockImpl.h @@ -0,0 +1,189 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for Block + * @file BlockImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ +#pragma once + +#include "../impl/TarsHashable.h" + +#include "../Common.h" +#include "BlockHeaderImpl.h" +#include "TransactionImpl.h" +#include "TransactionMetaDataImpl.h" +#include "TransactionReceiptImpl.h" +#include "bcos-concepts/Hash.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-tars-protocol/tars/Block.h" +#include "bcos-tars-protocol/tars/Transaction.h" +#include "bcos-tars-protocol/tars/TransactionMetaData.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars::protocol +{ +class BlockImpl : public bcos::protocol::Block, public std::enable_shared_from_this +{ +public: + BlockImpl() : m_inner(std::make_shared()) {} + BlockImpl(bcostars::Block _block) : BlockImpl() { *m_inner = std::move(_block); } + ~BlockImpl() override = default; + + void decode(bcos::bytesConstRef _data, bool _calculateHash, bool _checkSig) override; + void encode(bcos::bytes& _encodeData) const override; + + int32_t version() const override { return m_inner->blockHeader.data.version; } + void setVersion(int32_t _version) override { m_inner->blockHeader.data.version = _version; } + + bcos::protocol::BlockType blockType() const override + { + return (bcos::protocol::BlockType)m_inner->type; + } + // FIXME: this will cause the same blockHeader calculate hash multiple times + bcos::protocol::BlockHeader::Ptr blockHeader() override; + bcos::protocol::BlockHeader::ConstPtr blockHeaderConst() const override; + + bcos::protocol::Transaction::ConstPtr transaction(uint64_t _index) const override; + bcos::protocol::TransactionReceipt::ConstPtr receipt(uint64_t _index) const override; + + // get transaction metaData + bcos::protocol::TransactionMetaData::ConstPtr transactionMetaData( + uint64_t _index) const override; + void setBlockType(bcos::protocol::BlockType _blockType) override + { + m_inner->type = (int32_t)_blockType; + } + + // set blockHeader + void setBlockHeader(bcos::protocol::BlockHeader::Ptr _blockHeader) override; + + void setTransaction(uint64_t _index, bcos::protocol::Transaction::Ptr _transaction) override + { + m_inner->transactions[_index] = + std::dynamic_pointer_cast(_transaction)->inner(); + } + void appendTransaction(bcos::protocol::Transaction::Ptr _transaction) override + { + m_inner->transactions.emplace_back( + std::dynamic_pointer_cast(_transaction)->inner()); + } + + void setReceipt(uint64_t _index, bcos::protocol::TransactionReceipt::Ptr _receipt) override; + void appendReceipt(bcos::protocol::TransactionReceipt::Ptr _receipt) override; + + void appendTransactionMetaData(bcos::protocol::TransactionMetaData::Ptr _txMetaData) override; + + // get transactions size + uint64_t transactionsSize() const override { return m_inner->transactions.size(); } + uint64_t transactionsMetaDataSize() const override; + // get receipts size + uint64_t receiptsSize() const override { return m_inner->receipts.size(); } + + void setNonceList(RANGES::any_view nonces) override; + RANGES::any_view nonceList() const override; + + const bcostars::Block& inner() const { return *m_inner; } + void setInner(bcostars::Block inner) { *m_inner = std::move(inner); } + + bcos::crypto::HashType calculateTransactionRoot( + const bcos::crypto::Hash& hashImpl) const override + { + auto txsRoot = bcos::crypto::HashType(); + // with no transactions + if (transactionsSize() == 0 && transactionsMetaDataSize() == 0) + { + return txsRoot; + } + + auto anyHasher = hashImpl.hasher(); + std::visit( + [this, &txsRoot](auto& hasher) { + using Hasher = std::remove_reference_t; + bcos::crypto::merkle::Merkle merkle; + + if (transactionsSize() > 0) + { + auto hashesRange = + m_inner->transactions | + RANGES::views::transform([](const bcostars::Transaction& transaction) { + std::array hash; + bcos::concepts::hash::calculate(transaction, hash); + return hash; + }); + merkle.generateMerkle(hashesRange, m_inner->transactionsMerkle); + } + else if (transactionsMetaDataSize() > 0) + { + auto hashesRange = + m_inner->transactionsMetaData | + RANGES::views::transform( + [](const bcostars::TransactionMetaData& transactionMetaData) { + return transactionMetaData.hash; + }); + merkle.generateMerkle(hashesRange, m_inner->transactionsMerkle); + } + bcos::concepts::bytebuffer::assignTo( + *RANGES::rbegin(m_inner->transactionsMerkle), txsRoot); + }, + anyHasher); + + return txsRoot; + } + + bcos::crypto::HashType calculateReceiptRoot(const bcos::crypto::Hash& hashImpl) const override + { + auto receiptsRoot = bcos::crypto::HashType(); + // with no receipts + if (receiptsSize() == 0) + { + return receiptsRoot; + } + auto anyHasher = hashImpl.hasher(); + std::visit( + [this, &receiptsRoot](auto& hasher) { + using Hasher = std::remove_reference_t; + auto hashesRange = + m_inner->receipts | + RANGES::views::transform([](const bcostars::TransactionReceipt& receipt) { + std::array hash; + bcos::concepts::hash::calculate(receipt, hash); + return hash; + }); + bcos::crypto::merkle::Merkle merkle; + merkle.generateMerkle(hashesRange, m_inner->receiptsMerkle); + bcos::concepts::bytebuffer::assignTo( + *RANGES::rbegin(m_inner->receiptsMerkle), receiptsRoot); + }, + anyHasher); + + return receiptsRoot; + } + +private: + std::shared_ptr m_inner; + mutable bcos::SharedMutex x_blockHeader; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.cpp new file mode 100644 index 0000000..66d4b39 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.cpp @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for ExecutionMessage + * @file ExecutionMessageImpl.cpp + * @author: yujiechen + * @date 2022-05-09 + */ +#include "ExecutionMessageImpl.h" +#include "../Common.h" +using namespace bcostars; +using namespace bcostars::protocol; + +void ExecutionMessageImpl::decodeLogEntries() +{ + m_logEntries.reserve(m_inner()->logEntries.size()); + for (auto& it : m_inner()->logEntries) + { + auto bcosLogEntry = toBcosLogEntry(it); + m_logEntries.emplace_back(std::move(bcosLogEntry)); + } +} + +void ExecutionMessageImpl::decodeKeyLocks() +{ + for (auto const& _keyLock : m_inner()->keyLocks) + { + m_keyLocks.emplace_back(_keyLock); + } +} + +gsl::span const ExecutionMessageImpl::logEntries() const +{ + return m_logEntries; +} +std::vector ExecutionMessageImpl::takeLogEntries() +{ + return std::move(m_logEntries); +} + +void ExecutionMessageImpl::setLogEntries(std::vector _logEntries) +{ + m_logEntries = _logEntries; + m_inner()->logEntries.clear(); + m_inner()->logEntries.reserve(_logEntries.size()); + + for (auto& it : _logEntries) + { + auto tarsLogEntry = toTarsLogEntry(it); + m_inner()->logEntries.emplace_back(std::move(tarsLogEntry)); + } +} + +gsl::span ExecutionMessageImpl::keyLocks() const +{ + return m_keyLocks; +} +std::vector ExecutionMessageImpl::takeKeyLocks() +{ + // Note: must clear the tars-container here when takeKeyLocks + m_inner()->keyLocks.clear(); + return std::move(m_keyLocks); +} + +void ExecutionMessageImpl::setKeyLocks(std::vector keyLocks) +{ + m_keyLocks = std::move(keyLocks); + // Note: must clear the tars-container here before set new keyLocks + m_inner()->keyLocks.clear(); + for (auto const& keyLock : m_keyLocks) + { + m_inner()->keyLocks.emplace_back(keyLock); + } +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.h new file mode 100644 index 0000000..0bf3d31 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionMessageImpl.h @@ -0,0 +1,236 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for ExecutionMessage + * @file ExecutionMessageImpl.h + * @author: yujiechen + * @date 2022-05-09 + */ + +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include +namespace bcostars +{ +namespace protocol +{ +class ExecutionMessageImpl : public bcos::protocol::ExecutionMessage +{ +public: + using Ptr = std::shared_ptr; + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + ExecutionMessageImpl() + : m_inner([m_executionMessage = bcostars::ExecutionMessage()]() mutable { + return &m_executionMessage; + }) + { + decodeLogEntries(); + decodeKeyLocks(); + } + ExecutionMessageImpl(std::function _inner) : m_inner(_inner) + { + decodeLogEntries(); + decodeKeyLocks(); + } + + ~ExecutionMessageImpl() override {} + + Type type() const override { return (Type)m_inner()->type; } + void setType(Type _type) override { m_inner()->type = _type; } + + bcos::crypto::HashType transactionHash() const override + { + if (m_inner()->transactionHash.size() < bcos::crypto::HashType::SIZE) + { + return bcos::crypto::HashType(); + } + return *(reinterpret_cast(m_inner()->transactionHash.data())); + } + void setTransactionHash(bcos::crypto::HashType hash) override + { + m_inner()->transactionHash.assign(hash.begin(), hash.end()); + } + + int64_t contextID() const override { return m_inner()->contextID; } + void setContextID(int64_t contextID) override { m_inner()->contextID = contextID; } + + int64_t seq() const override { return m_inner()->seq; } + void setSeq(int64_t seq) override { m_inner()->seq = seq; } + + std::string_view origin() const override { return m_inner()->origin; } + void setOrigin(std::string origin) override { m_inner()->origin = origin; } + + std::string_view from() const override { return m_inner()->from; } + void setFrom(std::string from) override { m_inner()->from = from; } + + std::string_view to() const override { return m_inner()->to; } + void setTo(std::string to) override { m_inner()->to = to; } + + std::string_view abi() const override { return m_inner()->abi; } + void setABI(std::string abi) override { m_inner()->abi = abi; } + + int32_t depth() const override { return m_inner()->depth; } + void setDepth(int32_t depth) override { m_inner()->depth = depth; } + + bool create() const override { return m_inner()->create; } + void setCreate(bool create) override { m_inner()->create = create; } + + bool internalCreate() const override { return m_inner()->internalCreate; } + void setInternalCreate(bool internalCreate) override + { + m_inner()->internalCreate = internalCreate; + } + + bool internalCall() const override { return m_inner()->internalCall; } + void setInternalCall(bool internalCall) override { m_inner()->internalCall = internalCall; } + + + int64_t gasAvailable() const override { return m_inner()->gasAvailable; } + void setGasAvailable(int64_t gasAvailable) override { m_inner()->gasAvailable = gasAvailable; } + + bcos::bytesConstRef data() const override + { + return bcos::bytesConstRef( + reinterpret_cast(m_inner()->data.data()), m_inner()->data.size()); + } + + bcos::bytes takeData() override + { + return bcos::bytes(m_inner()->data.begin(), m_inner()->data.end()); + } + void setData(bcos::bytes data) override { m_inner()->data.assign(data.begin(), data.end()); } + + bool staticCall() const override { return m_inner()->staticCall; } + void setStaticCall(bool staticCall) override { m_inner()->staticCall = staticCall; } + + // for evm + std::optional createSalt() const override + { + std::optional emptySalt; + if (m_inner()->salt.size() == 0) + { + return emptySalt; + } + try + { + return std::optional(boost::lexical_cast(m_inner()->salt)); + } + catch (std::exception const& e) + { + return emptySalt; + } + } + + void setCreateSalt(bcos::u256 createSalt) override + { + auto salt = boost::lexical_cast(createSalt); + m_inner()->salt = salt; + } + + int32_t status() const override { return m_inner()->status; } + void setStatus(int32_t status) override { m_inner()->status = status; } + + int32_t evmStatus() const override { return m_inner()->evmStatus; } + void setEvmStatus(int32_t evmStatus) override { m_inner()->evmStatus = evmStatus; } + + std::string_view message() const override { return m_inner()->message; } + void setMessage(std::string message) override { m_inner()->message = message; } + + // for evm + std::string_view newEVMContractAddress() const override + { + return m_inner()->newEVMContractAddress; + } + void setNewEVMContractAddress(std::string newEVMContractAddress) override + { + m_inner()->newEVMContractAddress = newEVMContractAddress; + } + std::string_view keyLockAcquired() const override { return m_inner()->keyLockAcquired; } + void setKeyLockAcquired(std::string keyLock) override { m_inner()->keyLockAcquired = keyLock; } + + gsl::span keyLocks() const override; + std::vector takeKeyLocks() override; + void setKeyLocks(std::vector keyLocks) override; + gsl::span const logEntries() const override; + std::vector takeLogEntries() override; + void setLogEntries(std::vector logEntries) override; + + bool delegateCall() const override { return m_inner()->delegateCall; } + void setDelegateCall(bool delegateCall) override { m_inner()->delegateCall = delegateCall; } + + std::string_view delegateCallAddress() const override { return m_inner()->delegateCallAddress; } + void setDelegateCallAddress(std::string delegateCallAddress) override + { + m_inner()->delegateCallAddress = delegateCallAddress; + } + + + bcos::bytesConstRef delegateCallCode() const override + { + return bcos::bytesConstRef( + reinterpret_cast(m_inner()->delegateCallCode.data()), + m_inner()->delegateCallCode.size()); + } + + bcos::bytes takeDelegateCallCode() override + { + return bcos::bytes(m_inner()->delegateCallCode.begin(), m_inner()->delegateCallCode.end()); + } + void setDelegateCallCode(bcos::bytes delegateCallCode) override + { + m_inner()->delegateCallCode.assign(delegateCallCode.begin(), delegateCallCode.end()); + } + + + std::string_view delegateCallSender() const override { return m_inner()->delegateCallSender; } + void setDelegateCallSender(std::string delegateCallSender) override + { + m_inner()->delegateCallSender = delegateCallSender; + } + + bcostars::ExecutionMessage inner() const { return *(m_inner()); } + +protected: + virtual void decodeLogEntries(); + virtual void decodeKeyLocks(); + +private: + std::function m_inner; + mutable std::vector m_logEntries; + std::vector m_keyLocks; +}; + +class ExecutionMessageFactoryImpl : public bcos::protocol::ExecutionMessageFactory +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + ExecutionMessageFactoryImpl() = default; + ~ExecutionMessageFactoryImpl() override {} + + bcos::protocol::ExecutionMessage::UniquePtr createExecutionMessage() override + { + return std::make_unique(); + } +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionResultImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionResultImpl.h new file mode 100644 index 0000000..747e029 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/ExecutionResultImpl.h @@ -0,0 +1,62 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for ExecutionResult + * @file ExecutionResultImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "TransactionReceiptImpl.h" +#include "bcos-tars-protocol/tars/ExecutionResult.h" +#include +#include + +namespace bcostars +{ +namespace protocol +{ +class ExecutionResultImpl : public bcos::protocol::ExecutionResult +{ +public: + ~ExecutionResultImpl() override {} + + Status status() const noexcept override { return (Status)m_inner->status; } + + bcos::protocol::TransactionReceipt::ConstPtr receipt() const noexcept override + { + std::shared_ptr receipt = + std::make_shared( + m_cryptoSuite, [m_inner = this->m_inner]() { return &m_inner->receipt; }); + + return receipt; + } + + bcos::bytesConstRef to() const noexcept override + { + return bcos::bytesConstRef((bcos::byte*)m_inner->to.data(), m_inner->to.size()); + } + +private: + std::shared_ptr m_inner; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupInfoCodecImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupInfoCodecImpl.h new file mode 100644 index 0000000..0125359 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupInfoCodecImpl.h @@ -0,0 +1,64 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the information used to deploy new node + * @file GroupInfoCodecImpl.h + * @author: yujiechen + * @date 2022-03-29 + */ +#pragma once +#include "bcos-framework/multigroup/GroupInfoCodec.h" +#include "bcos-tars-protocol/Common.h" + +namespace bcostars +{ +namespace protocol +{ +class GroupInfoCodecImpl : public bcos::group::GroupInfoCodec +{ +public: + GroupInfoCodecImpl() + : m_nodeFactory(std::make_shared()), + m_groupFactory(std::make_shared()) + {} + + ~GroupInfoCodecImpl() override {} + + bcos::group::GroupInfo::Ptr deserialize(const std::string& _encodedData) override + { + tars::TarsInputStream input; + input.setBuffer((const char*)_encodedData.data(), _encodedData.size()); + + bcostars::GroupInfo tarsGroupInfo; + tarsGroupInfo.readFrom(input); + return toBcosGroupInfo(m_nodeFactory, m_groupFactory, tarsGroupInfo); + } + + Json::Value serialize(bcos::group::GroupInfo::Ptr) override { return {}; } + + void serialize(std::string& _encodedData, bcos::group::GroupInfo::Ptr _groupInfo) override + { + auto tarsGroupInfo = toTarsGroupInfo(_groupInfo); + tars::TarsOutputStream output; + tarsGroupInfo.writeTo(output); + output.swap(_encodedData); + } + +private: + bcos::group::ChainNodeInfoFactory::Ptr m_nodeFactory; + bcos::group::GroupInfoFactory::Ptr m_groupFactory; +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupNodeInfoImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupNodeInfoImpl.h new file mode 100644 index 0000000..32c4939 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/GroupNodeInfoImpl.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file GroupNodeInfoImpl.h + * @author: yujiechen + * @date 2022-3-8 + */ +#pragma once + +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include + +namespace bcostars +{ +namespace protocol +{ +class GroupNodeInfoImpl : public bcos::gateway::GroupNodeInfo +{ +public: + GroupNodeInfoImpl() + : m_inner( + [m_groupNodeInfo = bcostars::GroupNodeInfo()]() mutable { return &m_groupNodeInfo; }) + { + decodeInner(); + } + explicit GroupNodeInfoImpl(std::function inner) : m_inner(inner) + { + decodeInner(); + } + ~GroupNodeInfoImpl() override {} + + // the groupID + void setGroupID(std::string const& _groupID) override { m_inner()->groupID = _groupID; } + // the nodeIDList + void setNodeIDList(std::vector&& _nodeIDList) override + { + m_inner()->nodeIDList = std::move(_nodeIDList); + } + void setNodeTypeList(std::vector&& _nodeTypeList) override + { + m_inner()->nodeTypeList = std::move(_nodeTypeList); + } + // the groupType + void setType(uint16_t _type) override { m_inner()->type = _type; } + + std::string const& groupID() const override { return m_inner()->groupID; } + // Note: externally ensure thread safety + std::vector const& nodeIDList() const override { return m_inner()->nodeIDList; } + std::vector const& nodeTypeList() const override {return m_inner()->nodeTypeList; } + int type() const override { return m_inner()->type; } + void setNodeProtocolList( + std::vector&& _protocolList) override + { + // encode protocolList into m_inner() + for (auto const& protocol : _protocolList) + { + appendInnerProtocol(protocol); + } + m_protocolList = std::move(_protocolList); + } + + std::vector const& nodeProtocolList() const override + { + return m_protocolList; + } + void appendNodeID(std::string const& _nodeID) override + { + m_inner()->nodeIDList.emplace_back(_nodeID); + } + + void appendProtocol(bcos::protocol::ProtocolInfo::ConstPtr _protocol) override + { + m_protocolList.emplace_back(_protocol); + appendInnerProtocol(_protocol); + } + bcos::protocol::ProtocolInfo::ConstPtr protocol(uint64_t _index) const override + { + if (m_protocolList.size() <= _index) + { + return nullptr; + } + return m_protocolList.at(_index); + } + const bcostars::GroupNodeInfo& inner() const { return *m_inner(); } + +protected: + virtual void appendInnerProtocol(bcos::protocol::ProtocolInfo::ConstPtr _protocol) + { + bcostars::ProtocolInfo tarsProtocol; + tarsProtocol.moduleID = _protocol->protocolModuleID(); + tarsProtocol.minVersion = _protocol->minVersion(); + tarsProtocol.maxVersion = _protocol->maxVersion(); + m_inner()->protocolList.emplace_back(std::move(tarsProtocol)); + } + + virtual void decodeInner() + { + // recover m_protocolList + auto const& tarsProtocols = m_inner()->protocolList; + for (auto const& protocol : tarsProtocols) + { + auto protocolInfo = std::make_shared( + (bcos::protocol::ProtocolModuleID)protocol.moduleID, + (bcos::protocol::ProtocolVersion)protocol.minVersion, + (bcos::protocol::ProtocolVersion)protocol.maxVersion); + m_protocolList.emplace_back(protocolInfo); + } + } + +private: + std::function m_inner; + std::vector m_protocolList; +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/MemberImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/MemberImpl.h new file mode 100644 index 0000000..5880f69 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/MemberImpl.h @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for member + * @file MemberImpl.h + * @author: yujiechen + * @date 2022-04-26 + */ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "bcos-tars-protocol/tars/Member.h" +#include +namespace bcostars +{ +namespace protocol +{ +class MemberImpl : public bcos::protocol::MemberInterface +{ +public: + using Ptr = std::shared_ptr; + MemberImpl(std::function _inner) : m_inner(_inner) {} + MemberImpl() : m_inner([m_rawMember = bcostars::Member()]() mutable { return &m_rawMember; }) {} + MemberImpl(std::string const& _memberData) : MemberImpl() { decode(_memberData); } + + ~MemberImpl() override {} + + // the memberID of different service, should be unique + void setMemberID(std::string const& _memberID) override { m_inner()->memberID = _memberID; } + // the memberConfig of different service + void setMemberConfig(std::string const& _config) override { m_inner()->memberConfig = _config; } + + std::string const& memberID() const override { return m_inner()->memberID; } + virtual std::string const& memberConfig() const override { return m_inner()->memberConfig; } + + // encode the member into string + virtual void encode(std::string& _encodedData) override + { + tars::TarsOutputStream output; + m_inner()->writeTo(output); + output.swap(_encodedData); + } + + // decode the member info + virtual void decode(std::string const& _memberData) override + { + tars::TarsInputStream input; + input.setBuffer(_memberData.data(), _memberData.length()); + m_inner()->readFrom(input); + } + +private: + std::function m_inner; +}; + +class MemberFactoryImpl : public bcos::protocol::MemberFactoryInterface +{ +public: + using Ptr = std::shared_ptr; + MemberFactoryImpl() = default; + ~MemberFactoryImpl() override {} + + bcos::protocol::MemberInterface::Ptr createMember() override + { + return std::make_shared(); + } + bcos::protocol::MemberInterface::Ptr createMember(std::string const& _memberData) override + { + return std::make_shared(_memberData); + } +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.cpp new file mode 100644 index 0000000..940a29a --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.cpp @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implement for ProtocolInfoCodec + * @file ProtocolInfoCodecImpl.h + * @author: yujiechen + * @date 2022-03-22 + */ +#include "ProtocolInfoCodecImpl.h" +#include "../Common.h" + +using namespace bcostars; +using namespace bcostars::protocol; + +void ProtocolInfoCodecImpl::encode( + bcos::protocol::ProtocolInfo::ConstPtr _protocol, bcos::bytes& _encodeData) const +{ + bcostars::ProtocolInfo tarsProtocolInfo; + tarsProtocolInfo.moduleID = _protocol->protocolModuleID(); + tarsProtocolInfo.minVersion = (int32_t)_protocol->minVersion(); + tarsProtocolInfo.maxVersion = (int32_t)_protocol->maxVersion(); + tars::TarsOutputStream output; + tarsProtocolInfo.writeTo(output); + output.getByteBuffer().swap(_encodeData); +} + +bcos::protocol::ProtocolInfo::Ptr ProtocolInfoCodecImpl::decode(bcos::bytesConstRef _data) const +{ + tars::TarsInputStream input; + input.setBuffer((const char*)_data.data(), _data.size()); + bcostars::ProtocolInfo tarsProtocolInfo; + tarsProtocolInfo.readFrom(input); + + auto protocolInfo = std::make_shared(); + protocolInfo->setProtocolModuleID((bcos::protocol::ProtocolModuleID)tarsProtocolInfo.moduleID); + protocolInfo->setMinVersion(tarsProtocolInfo.minVersion); + protocolInfo->setMaxVersion(tarsProtocolInfo.maxVersion); + return protocolInfo; +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.h new file mode 100644 index 0000000..78dd507 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/ProtocolInfoCodecImpl.h @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implement for ProtocolInfoCodec + * @file ProtocolInfoCodecImpl.h + * @author: yujiechen + * @date 2022-03-22 + */ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include + +namespace bcostars +{ +namespace protocol +{ +class ProtocolInfoCodecImpl : public bcos::protocol::ProtocolInfoCodec +{ +public: + ProtocolInfoCodecImpl() = default; + ~ProtocolInfoCodecImpl() override {} + + void encode( + bcos::protocol::ProtocolInfo::ConstPtr _protocol, bcos::bytes& _encodeData) const override; + bcos::protocol::ProtocolInfo::Ptr decode(bcos::bytesConstRef _data) const override; +}; +} // namespace protocol +} // namespace bcostars diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionFactoryImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionFactoryImpl.h new file mode 100644 index 0000000..00bdc8f --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionFactoryImpl.h @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionFactory + * @file TransactionFactoryImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ +#pragma once +#include "../impl/TarsHashable.h" +#include "TransactionImpl.h" +#include +#include +#include +#include +#include + +namespace bcostars::protocol +{ +class TransactionFactoryImpl : public bcos::protocol::TransactionFactory +{ +public: + using TransactionType = TransactionImpl; + + TransactionFactoryImpl(bcos::crypto::CryptoSuite::Ptr cryptoSuite) + : m_cryptoSuite(std::move(cryptoSuite)) + {} + TransactionFactoryImpl(const TransactionFactoryImpl&) = default; + TransactionFactoryImpl(TransactionFactoryImpl&&) = default; + TransactionFactoryImpl& operator=(const TransactionFactoryImpl&) = default; + TransactionFactoryImpl& operator=(TransactionFactoryImpl&&) = default; + ~TransactionFactoryImpl() override = default; + + bcos::protocol::Transaction::Ptr createTransaction( + bcos::bytesConstRef txData, bool checkSig = true, bool checkHash = false) override + { + auto transaction = std::make_shared( + [m_transaction = bcostars::Transaction()]() mutable { return &m_transaction; }); + + transaction->decode(txData); + + auto originDataHash = std::move(transaction->mutableInner().dataHash); + transaction->mutableInner().dataHash.clear(); + + auto anyHasher = m_cryptoSuite->hashImpl()->hasher(); + std::visit( + [&transaction](auto& hasher) { + transaction->calculateHash>(); + }, + anyHasher); + + // check if hash matching + if (checkHash && !originDataHash.empty() && + (originDataHash != transaction->mutableInner().dataHash)) [[unlikely]] + { + bcos::crypto::HashType originHashResult( + (bcos::byte*)originDataHash.data(), originDataHash.size()); + bcos::crypto::HashType hashResult( + (bcos::byte*)transaction->mutableInner().dataHash.data(), + transaction->mutableInner().dataHash.size()); + + BCOS_LOG(WARNING) << LOG_DESC("the transaction hash does not match") + << LOG_KV("originHash", originHashResult.hex()) + << LOG_KV("realHash", hashResult.hex()); + BOOST_THROW_EXCEPTION(std::invalid_argument("transaction hash mismatching")); + } + + if (checkSig) + { + transaction->verify(*m_cryptoSuite->hashImpl(), *m_cryptoSuite->signatureImpl()); + } + return transaction; + } + + bcos::protocol::Transaction::Ptr createTransaction(int32_t _version, std::string _to, + bcos::bytes const& _input, bcos::u256 const& _nonce, int64_t _blockLimit, + std::string _chainId, std::string _groupId, int64_t _importTime) override + { + auto transaction = std::make_shared( + [m_transaction = bcostars::Transaction()]() mutable { return &m_transaction; }); + auto& inner = transaction->mutableInner(); + inner.data.version = _version; + inner.data.to = std::move(_to); + inner.data.input.assign(_input.begin(), _input.end()); + inner.data.blockLimit = _blockLimit; + inner.data.chainID = std::move(_chainId); + inner.data.groupID = std::move(_groupId); + inner.data.nonce = boost::lexical_cast(_nonce); + inner.importTime = _importTime; + + // Update the hash field + std::visit( + [&inner](auto&& hasher) { + using HasherType = std::decay_t; + bcos::concepts::hash::calculate(inner, inner.dataHash); + }, + m_cryptoSuite->hashImpl()->hasher()); + + return transaction; + } + + bcos::protocol::Transaction::Ptr createTransaction(int32_t _version, std::string _to, + bcos::bytes const& _input, bcos::u256 const& _nonce, int64_t _blockLimit, + std::string _chainId, std::string _groupId, int64_t _importTime, + bcos::crypto::KeyPairInterface::Ptr keyPair) override + { + auto tx = createTransaction(_version, std::move(_to), _input, _nonce, _blockLimit, + std::move(_chainId), std::move(_groupId), _importTime); + auto sign = m_cryptoSuite->signatureImpl()->sign(*keyPair, tx->hash(), true); + + auto tarsTx = std::dynamic_pointer_cast(tx); + auto& inner = tarsTx->mutableInner(); + inner.signature.assign(sign->begin(), sign->end()); + + return tx; + } + + void setCryptoSuite(bcos::crypto::CryptoSuite::Ptr cryptoSuite) + { + m_cryptoSuite = std::move(cryptoSuite); + } + bcos::crypto::CryptoSuite::Ptr cryptoSuite() override { return m_cryptoSuite; } + +private: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; + +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.cpp new file mode 100644 index 0000000..0fc05ae --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.cpp @@ -0,0 +1,75 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for Transaction + * @file TransactionImpl.cpp + * @author: ancelmo + * @date 2021-04-20 + */ + +#include "../impl/TarsHashable.h" +#include "../impl/TarsSerializable.h" + +#include "TransactionImpl.h" +#include "bcos-concepts/Exception.h" +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcostars::protocol; + +struct EmptyTransactionHash : public bcos::error::Exception +{ +}; + +void TransactionImpl::decode(bcos::bytesConstRef _txData) +{ + bcos::concepts::serialize::decode(_txData, *m_inner()); +} + +void TransactionImpl::encode(bcos::bytes& txData) const +{ + bcos::concepts::serialize::encode(*m_inner(), txData); +} + +bcos::crypto::HashType TransactionImpl::hash() const +{ + if (m_inner()->dataHash.empty()) + { + BOOST_THROW_EXCEPTION(EmptyTransactionHash{}); + } + + bcos::crypto::HashType hashResult( + (bcos::byte*)m_inner()->dataHash.data(), m_inner()->dataHash.size()); + + return hashResult; +} + +bcos::u256 TransactionImpl::nonce() const +{ + if (!m_inner()->data.nonce.empty()) + { + m_nonce = boost::lexical_cast(m_inner()->data.nonce); + } + return m_nonce; +} + +bcos::bytesConstRef TransactionImpl::input() const +{ + return bcos::bytesConstRef(reinterpret_cast(m_inner()->data.input.data()), + m_inner()->data.input.size()); +} \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.h new file mode 100644 index 0000000..f17e7b9 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.h @@ -0,0 +1,104 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for Transaction + * @file TransactionImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include "../impl/TarsHashable.h" + +#include "bcos-concepts/Hash.h" +#include "bcos-tars-protocol/tars/Transaction.h" +#include +#include +#include +#include +#include +#include + +namespace bcostars::protocol +{ + +class TransactionImpl : public bcos::protocol::Transaction +{ +public: + explicit TransactionImpl(std::function inner) + : m_inner(std::move(inner)) + {} + ~TransactionImpl() override = default; + + friend class TransactionFactoryImpl; + + bool operator==(const Transaction& rhs) const { return this->hash() == rhs.hash(); } + + void decode(bcos::bytesConstRef _txData) override; + void encode(bcos::bytes& txData) const override; + + bcos::crypto::HashType hash() const override; + + template + void calculateHash() + { + bcos::concepts::hash::calculate(*m_inner(), m_inner()->dataHash); + } + + int32_t version() const override { return m_inner()->data.version; } + std::string_view chainId() const override { return m_inner()->data.chainID; } + std::string_view groupId() const override { return m_inner()->data.groupID; } + int64_t blockLimit() const override { return m_inner()->data.blockLimit; } + bcos::u256 nonce() const override; + std::string_view to() const override { return m_inner()->data.to; } + std::string_view abi() const override { return m_inner()->data.abi; } + bcos::bytesConstRef input() const override; + int64_t importTime() const override { return m_inner()->importTime; } + void setImportTime(int64_t _importTime) override { m_inner()->importTime = _importTime; } + bcos::bytesConstRef signatureData() const override + { + return {reinterpret_cast(m_inner()->signature.data()), + m_inner()->signature.size()}; + } + std::string_view sender() const override + { + return {m_inner()->sender.data(), m_inner()->sender.size()}; + } + void forceSender(bcos::bytes _sender) const override + { + m_inner()->sender.assign(_sender.begin(), _sender.end()); + } + + void setSignatureData(bcos::bytes& signature) + { + m_inner()->signature.assign(signature.begin(), signature.end()); + } + + int32_t attribute() const override { return m_inner()->attribute; } + void setAttribute(int32_t attribute) override { m_inner()->attribute = attribute; } + + std::string_view extraData() const override { return m_inner()->extraData; } + void setExtraData(std::string const& _extraData) override { m_inner()->extraData = _extraData; } + + const bcostars::Transaction& inner() const { return *m_inner(); } + bcostars::Transaction& mutableInner() { return *m_inner(); } + void setInner(bcostars::Transaction inner) { *m_inner() = std::move(inner); } + +private: + std::function m_inner; + mutable bcos::u256 m_nonce; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionMetaDataImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionMetaDataImpl.h new file mode 100644 index 0000000..d2df765 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionMetaDataImpl.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implement for TransactionMetaData + * @file TransactionMetaDataImpl.h + * @author: yujiechen + * @date: 2021-09-07 + */ +#pragma once + +#include "bcos-tars-protocol/tars/TransactionMetaData.h" +#include + +namespace bcostars +{ +namespace protocol +{ +class TransactionMetaDataImpl : public bcos::protocol::TransactionMetaData +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + TransactionMetaDataImpl() + : m_inner([inner = bcostars::TransactionMetaData()]() mutable { return &inner; }) + {} + + TransactionMetaDataImpl(bcos::crypto::HashType hash, std::string to) : TransactionMetaDataImpl() + { + setHash(std::move(hash)); + setTo(std::move(to)); + } + + explicit TransactionMetaDataImpl(std::function inner) + : m_inner(std::move(inner)) + {} + + ~TransactionMetaDataImpl() override {} + + bcos::crypto::HashType hash() const override + { + auto const& hashBytes = m_inner()->hash; + if (hashBytes.size() == bcos::crypto::HashType::SIZE) + { + bcos::crypto::HashType hash(reinterpret_cast(hashBytes.data()), + bcos::crypto::HashType::SIZE); + return hash; + } + return bcos::crypto::HashType(); + } + void setHash(bcos::crypto::HashType _hash) override + { + m_inner()->hash.assign(_hash.begin(), _hash.end()); + } + + std::string_view to() const override { return m_inner()->to; } + void setTo(std::string _to) override { m_inner()->to = std::move(_to); } + + uint32_t attribute() const override { return m_inner()->attribute; } + void setAttribute(uint32_t attribute) override { m_inner()->attribute = attribute; } + + std::string_view source() const override { return m_inner()->source; } + void setSource(std::string source) override { m_inner()->source = std::move(source); } + + const bcostars::TransactionMetaData& inner() const { return *m_inner(); } + bcostars::TransactionMetaData& mutableInner() { return *m_inner(); } + bcostars::TransactionMetaData takeInner() { return std::move(*m_inner()); } + void setInner(bcostars::TransactionMetaData inner) { *m_inner() = std::move(inner); } + +private: + std::function m_inner; +}; +} // namespace protocol +} // namespace bcostars diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h new file mode 100644 index 0000000..a417953 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptFactoryImpl.h @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionReceiptFactory + * @file TransactionReceiptFactoryImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ +#pragma once +#include "../impl/TarsHashable.h" + +#include "TransactionReceiptImpl.h" +#include +#include +#include + + +namespace bcostars::protocol +{ +class TransactionReceiptFactoryImpl : public bcos::protocol::TransactionReceiptFactory +{ +public: + TransactionReceiptFactoryImpl(const bcos::crypto::CryptoSuite::Ptr& cryptoSuite) + : m_hashImpl(cryptoSuite->hashImpl()) + {} + ~TransactionReceiptFactoryImpl() override = default; + + TransactionReceiptImpl::Ptr createReceipt(bcos::bytesConstRef _receiptData) override + { + auto transactionReceipt = std::make_shared( + [m_receipt = bcostars::TransactionReceipt()]() mutable { return &m_receipt; }); + + transactionReceipt->decode(_receiptData); + + return transactionReceipt; + } + + TransactionReceiptImpl::Ptr createReceipt(bcos::bytes const& _receiptData) override + { + return createReceipt(bcos::ref(_receiptData)); + } + + TransactionReceiptImpl::Ptr createReceipt(bcos::u256 const& gasUsed, + std::string contractAddress, const std::vector& logEntries, + int32_t status, bcos::bytesConstRef output, + bcos::protocol::BlockNumber blockNumber) override + { + auto transactionReceipt = std::make_shared( + [m_receipt = bcostars::TransactionReceipt()]() mutable { return &m_receipt; }); + auto& inner = transactionReceipt->mutableInner(); + inner.data.version = 0; + inner.data.gasUsed = boost::lexical_cast(gasUsed); + inner.data.contractAddress = std::move(contractAddress); + inner.data.status = status; + inner.data.output.assign(output.begin(), output.end()); + transactionReceipt->setLogEntries(logEntries); + inner.data.blockNumber = blockNumber; + + // Update the hash field + std::visit( + [&inner](auto&& hasher) { + using HasherType = std::decay_t; + bcos::concepts::hash::calculate(inner, inner.dataHash); + }, + m_hashImpl->hasher()); + return transactionReceipt; + } + +private: + bcos::crypto::Hash::Ptr m_hashImpl; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.cpp b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.cpp new file mode 100644 index 0000000..368cb0c --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.cpp @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionReceipt + * @file TransactionReceiptImpl.cpp + * @author: ancelmo + * @date 2021-04-20 + */ +#include "../impl/TarsHashable.h" +#include "../impl/TarsSerializable.h" + +#include "TransactionReceiptImpl.h" +#include +#include + +using namespace bcostars; +using namespace bcostars::protocol; + +struct EmptyReceiptHash : public bcos::error::Exception +{ +}; + +void TransactionReceiptImpl::decode(bcos::bytesConstRef _receiptData) +{ + bcos::concepts::serialize::decode(_receiptData, *m_inner()); +} + +void TransactionReceiptImpl::encode(bcos::bytes& _encodedData) const +{ + bcos::concepts::serialize::encode(*m_inner(), _encodedData); +} + +bcos::crypto::HashType TransactionReceiptImpl::hash() const +{ + if (m_inner()->dataHash.empty()) + { + BOOST_THROW_EXCEPTION(EmptyReceiptHash{}); + } + + bcos::crypto::HashType hashResult( + (bcos::byte*)m_inner()->dataHash.data(), m_inner()->dataHash.size()); + + return hashResult; +} + +bcos::u256 TransactionReceiptImpl::gasUsed() const +{ + if (!m_inner()->data.gasUsed.empty()) + { + return boost::lexical_cast(m_inner()->data.gasUsed); + } + return {}; +} diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.h new file mode 100644 index 0000000..b4c44ab --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionReceiptImpl.h @@ -0,0 +1,105 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionReceipt + * @file TransactionReceiptImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once + +#include "../Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars::protocol +{ +class TransactionReceiptImpl : public bcos::protocol::TransactionReceipt +{ +public: + explicit TransactionReceiptImpl(std::function inner) + : m_inner(std::move(inner)) + {} + + ~TransactionReceiptImpl() override = default; + void decode(bcos::bytesConstRef _receiptData) override; + void encode(bcos::bytes& _encodedData) const override; + bcos::crypto::HashType hash() const override; + + int32_t version() const override { return m_inner()->data.version; } + bcos::u256 gasUsed() const override; + + std::string_view contractAddress() const override { return m_inner()->data.contractAddress; } + int32_t status() const override { return m_inner()->data.status; } + bcos::bytesConstRef output() const override + { + return {(const unsigned char*)m_inner()->data.output.data(), m_inner()->data.output.size()}; + } + gsl::span logEntries() const override + { + if (m_logEntries.empty()) + { + m_logEntries.reserve(m_inner()->data.logEntries.size()); + for (auto& it : m_inner()->data.logEntries) + { + auto bcosLogEntry = toBcosLogEntry(it); + m_logEntries.emplace_back(std::move(bcosLogEntry)); + } + } + + return {m_logEntries.data(), m_logEntries.size()}; + } + bcos::protocol::BlockNumber blockNumber() const override { return m_inner()->data.blockNumber; } + + const bcostars::TransactionReceipt& inner() const { return *m_inner(); } + bcostars::TransactionReceipt& mutableInner() { return *m_inner(); } + + void setInner(const bcostars::TransactionReceipt& inner) { *m_inner() = inner; } + void setInner(bcostars::TransactionReceipt&& inner) { *m_inner() = std::move(inner); } + + std::function const& innerGetter() { return m_inner; } + + void setLogEntries(std::vector const& _logEntries) + { + m_logEntries.clear(); + m_inner()->data.logEntries.clear(); + m_inner()->data.logEntries.reserve(_logEntries.size()); + + for (const auto& it : _logEntries) + { + auto tarsLogEntry = toTarsLogEntry(it); + m_inner()->data.logEntries.emplace_back(std::move(tarsLogEntry)); + } + } + + std::string const& message() const override { return m_inner()->message; } + + void setMessage(std::string message) override { m_inner()->message = std::move(message); } + +private: + std::function m_inner; + mutable std::vector m_logEntries; +}; +} // namespace bcostars::protocol \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultFactoryImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultFactoryImpl.h new file mode 100644 index 0000000..85feac7 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultFactoryImpl.h @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionSubmitResultFactory + * @file TransactionSubmitResultFactoryImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "TransactionSubmitResultImpl.h" +#include +#include +namespace bcostars +{ +namespace protocol +{ +class TransactionSubmitResultFactoryImpl : public bcos::protocol::TransactionSubmitResultFactory +{ +public: + bcos::protocol::TransactionSubmitResult::Ptr createTxSubmitResult() override + { + return std::make_shared(m_cryptoSuite); + } + + void setCryptoSuite(bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + { + m_cryptoSuite = _cryptoSuite; + } + +private: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultImpl.h b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultImpl.h new file mode 100644 index 0000000..be58783 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionSubmitResultImpl.h @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief tars implementation for TransactionSubmitResult + * @file TransactionSubmitResultImpl.h + * @author: ancelmo + * @date 2021-04-20 + */ + +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "../Common.h" +#include "TransactionReceiptImpl.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include "bcos-tars-protocol/tars/TransactionSubmitResult.h" +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +namespace protocol +{ +// Note: this will create a default transactionReceipt +class TransactionSubmitResultImpl : public bcos::protocol::TransactionSubmitResult +{ +public: + TransactionSubmitResultImpl(bcos::crypto::CryptoSuite::Ptr _cryptoSuite) + : m_cryptoSuite(_cryptoSuite), + m_inner([inner = bcostars::TransactionSubmitResult()]() mutable { return &inner; }) + {} + + TransactionSubmitResultImpl(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + std::function inner) + : m_cryptoSuite(_cryptoSuite), m_inner(std::move(inner)) + {} + uint32_t status() const override { return m_inner()->status; } + void setStatus(uint32_t status) override { m_inner()->status = status; } + + bcos::crypto::HashType txHash() const override + { + if (m_inner()->txHash.size() == bcos::crypto::HashType::SIZE) + { + return *(reinterpret_cast(m_inner()->txHash.data())); + } + return bcos::crypto::HashType(); + } + void setTxHash(bcos::crypto::HashType txHash) override + { + m_inner()->txHash.assign(txHash.begin(), txHash.end()); + } + + bcos::crypto::HashType blockHash() const override + { + if (m_inner()->blockHash.size() == bcos::crypto::HashType::SIZE) + { + return *(reinterpret_cast(m_inner()->blockHash.data())); + } + return bcos::crypto::HashType(); + } + void setBlockHash(bcos::crypto::HashType blockHash) override + { + m_inner()->blockHash.assign(blockHash.begin(), blockHash.end()); + } + + int64_t transactionIndex() const override { return m_inner()->transactionIndex; } + void setTransactionIndex(int64_t index) override { m_inner()->transactionIndex = index; } + + bcos::protocol::NonceType nonce() const override + { + return bcos::protocol::NonceType(m_inner()->nonce); + } + void setNonce(bcos::protocol::NonceType nonce) override { m_inner()->nonce = nonce.str(); } + + bcos::protocol::TransactionReceipt::Ptr transactionReceipt() const override + { + return std::make_shared( + [innerPtr = &m_inner()->transactionReceipt]() { return innerPtr; }); + } + void setTransactionReceipt(bcos::protocol::TransactionReceipt::Ptr transactionReceipt) override + { + auto transactionReceiptImpl = + std::dynamic_pointer_cast(transactionReceipt); + m_inner()->transactionReceipt = transactionReceiptImpl->inner(); // FIXME: copy here! + } + + bcostars::TransactionSubmitResult const& inner() { return *m_inner(); } + + std::string const& sender() const override { return m_inner()->sender; } + void setSender(std::string const& _sender) override { m_inner()->sender = _sender; } + + std::string const& to() const override { return m_inner()->to; } + void setTo(std::string const& _to) override { m_inner()->to = _to; } + +private: + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + std::function m_inner; +}; +} // namespace protocol +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/Block.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/Block.tars new file mode 100644 index 0000000..4f87914 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/Block.tars @@ -0,0 +1,50 @@ +#include "Transaction.tars" +#include "TransactionReceipt.tars" +#include "TransactionMetaData.tars" + +module bcostars { + struct ParentInfo { + 1 optional long blockNumber; + 2 optional vector blockHash; + }; + + struct Signature { + 1 optional long sealerIndex; + 2 optional vector signature; + }; + + struct BlockHeaderData { + 2 optional int version; + 3 optional vector parentInfo; + 4 optional vector txsRoot; + 5 optional vector receiptRoot; + 6 optional vector stateRoot; + 7 optional long blockNumber; + 8 optional string gasUsed; + 9 optional long timestamp; + 10 optional long sealer; + 11 optional vector> sealerList; + 12 optional vector extraData; + 13 optional vector consensusWeights; + }; + + struct BlockHeader { + 1 optional BlockHeaderData data; + 2 optional vector dataHash; + 3 optional vector signatureList; + }; + + struct Block { + 1 optional int version; + 2 optional int type; + 3 optional BlockHeader blockHeader; + 4 optional vector transactions; + 5 optional vector receipts; + 6 optional vector transactionsMetaData; + 7 optional vector> receiptsHash; + 8 optional vector nonceList; + + 9 optional vector> transactionsMerkle; + 10 optional vector> receiptsMerkle; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/CommonProtocol.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/CommonProtocol.tars new file mode 100644 index 0000000..cb2a60c --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/CommonProtocol.tars @@ -0,0 +1,6 @@ +module bcostars { + struct Error { + 1 optional int errorCode; + 2 optional string errorMessage; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionMessage.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionMessage.tars new file mode 100644 index 0000000..2d38da0 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionMessage.tars @@ -0,0 +1,33 @@ +#include "TransactionReceipt.tars" +module bcostars { +struct ExecutionMessage +{ + 1 require int type; + 2 optional vector transactionHash; + 3 require long contextID; + 4 require long seq; + 5 optional string origin; + 6 optional string from; + 7 optional string to; + 8 optional string abi; + 9 optional int depth; + 10 require bool create = false; + 11 optional bool internalCreate = false; + 12 optional bool internalCall = false; + 13 optional long gasAvailable; + 14 optional vector data; + 15 require bool staticCall = false; + 16 optional string salt; + 17 optional int status; + 18 optional string message; + 19 optional vector logEntries; + 20 optional string newEVMContractAddress; + 21 optional vector keyLocks; + 22 optional string keyLockAcquired; + 23 require bool delegateCall = false; + 24 optional string delegateCallAddress; + 25 optional vector delegateCallCode; + 26 optional string delegateCallSender; + 27 optional int evmStatus; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionResult.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionResult.tars new file mode 100644 index 0000000..33ec3ca --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutionResult.tars @@ -0,0 +1,9 @@ +#include "TransactionReceipt.tars" + +module bcostars { + struct ExecutionResult { + 1 optional int status; + 2 optional TransactionReceipt receipt; + 3 optional vector to; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorService.tars new file mode 100644 index 0000000..369bb4a --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorService.tars @@ -0,0 +1,32 @@ +#include "Block.tars" +#include "CommonProtocol.tars" +#include "TwoPCParams.tars" +#include "ExecutionMessage.tars" +#include "ExecutorStatus.tars" +module bcostars { + interface ExecutorService + { + Error status(out ExecutorStatus _output); + + Error nextBlockHeader(long schedulerTermID, BlockHeader _blockHeader); + Error executeTransaction(ExecutionMessage _input, out ExecutionMessage _output); + Error call(ExecutionMessage _input, out ExecutionMessage _output); + + Error executeTransactions(string _contractAddress, vector _inputs, out vector _outputs); + //Error call(ExecutionMessage _input, out ExecutionMessage _output); + + Error dmcExecuteTransactions(string _contractAddress, vector _inputs, out vector _outputs); + Error dagExecuteTransactions(vector _inputs, out vector _outputs); + + Error dmcCall(ExecutionMessage _input, out ExecutionMessage _output); + Error getHash(long _blockNumber, out vector _hash); + + Error prepare(TwoPCParams _params); + Error commit(TwoPCParams _params); + Error rollback(TwoPCParams _params); + + Error getCode(string _contractAddress, out vector _code); + Error getABI(string _contractAddress, out string _abi); + Error reset(); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorStatus.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorStatus.tars new file mode 100644 index 0000000..e276485 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/ExecutorStatus.tars @@ -0,0 +1,7 @@ + +module bcostars { +struct ExecutorStatus +{ + 1 require long seq; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/FrontService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/FrontService.tars new file mode 100644 index 0000000..9a1bdab --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/FrontService.tars @@ -0,0 +1,22 @@ +#include "CommonProtocol.tars" +#include "GatewayInfo.tars" +module bcostars { + interface FrontService { + Error asyncGetGroupNodeInfo(out GroupNodeInfo groupNodeInfo); + + Error onReceiveGroupNodeInfo(string groupID, GroupNodeInfo groupNodeInfo); + + Error onReceiveMessage(string groupID, vector nodeID, vector data); + + Error onReceiveBroadcastMessage(string groupID, vector nodeID, vector data); + + Error asyncSendMessageByNodeID(int moduleID, vector nodeID, vector data, unsigned int timeout, bool requireRespCallback, + out vector responseNodeID, out vector responseData, out string seq); + + Error asyncSendResponse(string id, int moduleID, vector nodeID, vector data); + + void asyncSendMessageByNodeIDs(int moduleID, vector> nodeIDs, vector data); + + void asyncSendBroadcastMessage(int _nodeType, int moduleID, vector data); + }; +}; diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayInfo.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayInfo.tars new file mode 100644 index 0000000..be23747 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayInfo.tars @@ -0,0 +1,33 @@ +#include "ProtocolInfo.tars" +module bcostars +{ +struct P2PInfo +{ + 1 require string p2pID; + 2 optional string agencyName; + 3 optional string nodeName; + 4 optional string host; + 5 optional int port; +}; + +struct GroupNodeInfo +{ + 1 optional string groupID; + 2 optional vector nodeIDList; + 3 optional int type; + 4 optional vector protocolList; + 5 optional vector nodeTypeList; +}; +struct GatewayInfo +{ + 1 require P2PInfo p2pInfo; + 2 require vector nodeIDInfo; +}; + +struct GatewayNodeStatus +{ + 1 require string uuid; + 2 require int seq; + 3 optional vector nodeList; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayService.tars new file mode 100644 index 0000000..b534077 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/GatewayService.tars @@ -0,0 +1,32 @@ +#include "CommonProtocol.tars" +#include "GroupInfo.tars" +#include "GatewayInfo.tars" +module bcostars +{ + interface GatewayService + { + Error asyncSendMessageByNodeID( + string groupID, int moduleID, vector srcNodeID, vector dstNodeID, vector payload); + + Error asyncSendMessageByNodeIDs(string groupID, int moduleID, vector srcNodeID, + vector> dstNodeID, vector payload); + + Error asyncSendBroadcastMessage( + int _nodeType, string groupID, int moduleID, vector srcNodeID, vector payload); + + Error asyncGetPeers(out GatewayInfo localInfo, out vector peers); + + Error asyncGetGroupNodeInfo(string groupID, out GroupNodeInfo groupNodeInfo); + + Error asyncNotifyGroupInfo(GroupInfo groupInfo); + + Error asyncSendMessageByTopic( + string _topic, vector _data, out int _type, out vector _responseData); + + Error asyncSendBroadcastMessageByTopic(string _topic, vector _data); + + Error asyncSubscribeTopic(string _clientID, string _topicInfo); + + Error asyncRemoveTopic(string _clientID, vector _topicList); + }; +}; diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/GroupInfo.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/GroupInfo.tars new file mode 100644 index 0000000..0fc14dd --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/GroupInfo.tars @@ -0,0 +1,25 @@ +#include "ProtocolInfo.tars" +module bcostars +{ +struct ChainNodeInfo +{ + 1 require string nodeName; + 2 require int nodeCryptoType; + 3 optional string iniConfig; + 4 optional map serviceInfo; + 5 optional string nodeID; + 6 require bool microService = false; + 7 optional int nodeType; + 8 optional ProtocolInfo protocolInfo; + 9 optional int compatibilityVersion; +}; +struct GroupInfo +{ + 1 require string chainID; + 2 require string groupID; + 3 require vector nodeList; + 4 optional string genesisConfig; + 5 optional string iniConfig; + 6 optional int isWasm; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerConfig.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerConfig.tars new file mode 100644 index 0000000..d384eb6 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerConfig.tars @@ -0,0 +1,19 @@ +module bcostars +{ + struct ConsensusNode { + 1 optional vector nodeID; + 2 optional long weight; + }; + struct LedgerConfig + { + 1 optional vector consensusNodeList; + 2 optional vector observerNodeList; + 3 optional vector hash; + 4 optional long blockNumber; + 5 optional long blockTxCountLimit; + 6 optional long leaderSwitchPeriod; + 7 optional long sealerId; + 8 optional long gasLimit; + 9 optional int compatibilityVersion; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerService.tars new file mode 100644 index 0000000..f0d61d6 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/LedgerService.tars @@ -0,0 +1,18 @@ +#include "Block.tars" +#include "TransactionReceipt.tars" +#include "LedgerConfig.tars" +#include "CommonProtocol.tars" + +module bcostars { + interface LedgerService{ + Error asyncGetBlockDataByNumber(long _blockNumber, long _blockFlag, out Block _block); + Error asyncGetBlockNumber(out long _blockNumber); + Error asyncGetBlockHashByNumber(long _blockNumber, out vector _blockHash); + Error asyncGetBlockNumberByHash(vector _blockHash, out long _blockNumber); + Error asyncGetBatchTxsByHashList(vector> _txsHashList, bool _withProof, out vector _transactions, out map> _merkleProofList); + Error asyncGetTransactionReceiptByHash(vector _txHash, bool _withProof, out TransactionReceipt _receipt, out vector _proof); + Error asyncGetTotalTransactionCount(out long _totalTxCount, out long _failedTxCount, out long _latestBlockNumber); + Error asyncGetSystemConfigByKey(string _key, out string _value, out long _blockNumber); + Error asyncGetNodeListByType(string _type, out vector _nodeList); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/LightNode.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/LightNode.tars new file mode 100644 index 0000000..41a0d5e --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/LightNode.tars @@ -0,0 +1,79 @@ +#include "Block.tars" +#include "Transaction.tars" +#include "TransactionReceipt.tars" +#include "CommonProtocol.tars" + +module bcostars { + +struct RequestBlock +{ + 1 optional unsigned int blockNumber; + 2 optional bool onlyHeader; +}; + +struct ResponseBlock +{ + 1 optional Error error; + 2 optional Block block; +}; + +struct RequestTransactions +{ + 1 optional vector> hashes; + 2 optional bool withProof; +}; + +struct ResponseTransactions +{ + 1 optional Error error; + 2 optional vector transactions; +}; + +struct RequestReceipts +{ + 1 optional vector> hashes; + 2 optional bool withProof; +}; + +struct ResponseReceipts +{ + 1 optional Error error; + 2 optional vector receipts; +}; + +struct RequestGetStatus +{ + 0 optional int nothing; +}; + +struct ResponseGetStatus +{ + 1 optional Error error; + 2 optional unsigned int total; + 3 optional unsigned int failed; + 4 optional unsigned int blockNumber; +}; + +struct RequestSendTransaction +{ + 1 optional Transaction transaction; +}; + +struct ResponseSendTransaction +{ + 1 optional Error error; + 2 optional TransactionReceipt receipt; +}; + +struct RequestGetABI +{ + 1 optional string contractAddress; +}; + +struct ResponseGetABI +{ + 1 optional Error error; + 2 optional string abiStr; +}; + +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/Member.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/Member.tars new file mode 100644 index 0000000..2cb3772 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/Member.tars @@ -0,0 +1,6 @@ +module bcostars { + struct Member { + 1 require string memberID; + 2 optional string memberConfig; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/PBFTService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/PBFTService.tars new file mode 100644 index 0000000..f422be9 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/PBFTService.tars @@ -0,0 +1,19 @@ +#include "CommonProtocol.tars" +#include "Block.tars" +#include "LedgerConfig.tars" + +module bcostars { + interface PBFTService { + Error asyncNotifyConsensusMessage(string _uuid, vector _nodeId, vector _data); + Error asyncSubmitProposal(bool _containSysTxs, vector _proposalData, long _proposalIndex, vector _proposalHash); + Error asyncGetPBFTView(out long _view); + Error asyncCheckBlock(Block _block, out bool _verifyResult); + Error asyncNotifyNewBlock(LedgerConfig _ledgerConfig); + Error asyncNotifyBlockSyncMessage(string _uuid, vector _nodeId, vector _data); + Error asyncNoteUnSealedTxsSize(long _unsealedTxsSize); + + Error asyncGetSyncInfo(out string _syncInfo); + Error asyncGetConsensusStatus(out string _consensusStatus); + Error asyncNotifyConnectedNodes(vector> connectedNodes); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/ProtocolInfo.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/ProtocolInfo.tars new file mode 100644 index 0000000..2807fe4 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/ProtocolInfo.tars @@ -0,0 +1,9 @@ +module bcostars +{ +struct ProtocolInfo +{ + 1 require int moduleID; + 2 require int minVersion; + 3 require int maxVersion; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/RouterTable.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/RouterTable.tars new file mode 100644 index 0000000..ad67ce8 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/RouterTable.tars @@ -0,0 +1,13 @@ +module bcostars +{ +struct RouterTableEntry +{ + 1 require string dstNode; + 2 optional string nextHop; + 3 require int distance; +}; +struct RouterTable +{ + 1 optional vector routerEntries; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/RpcService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/RpcService.tars new file mode 100644 index 0000000..c51673d --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/RpcService.tars @@ -0,0 +1,12 @@ +#include "CommonProtocol.tars" +#include "GroupInfo.tars" +#include "TransactionSubmitResult.tars" + +module bcostars { + interface RpcService { + Error asyncNotifyBlockNumber(string groupID, string nodeName, long blockNumber); + Error asyncNotifyGroupInfo(GroupInfo groupInfo); + Error asyncNotifyAMOPMessage(int _type, string _topic, vector _requestData, out vector _responseData); + Error asyncNotifySubscribeTopic(out string _topicInfo); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/SchedulerService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/SchedulerService.tars new file mode 100644 index 0000000..5ebe647 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/SchedulerService.tars @@ -0,0 +1,21 @@ + +#include "Transaction.tars" +#include "Block.tars" +#include "TransactionReceipt.tars" +#include "CommonProtocol.tars" +#include "LedgerConfig.tars" + +module bcostars { + interface SchedulerService + { + Error preExecuteBlock(Block _block, bool _verify); + Error executeBlock(Block _block, bool _verify, out BlockHeader _executedHeader, out bool _sysBlock); + Error commitBlock(BlockHeader _header, out LedgerConfig _ledgerConfig); + + Error call(Transaction _tx, out TransactionReceipt _receipt); + Error getCode(string _contract, out vector _codeData); + Error getABI(string _contract, out string _abi); + + Error registerExecutor(string _name); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/StorageService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/StorageService.tars new file mode 100644 index 0000000..b28f000 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/StorageService.tars @@ -0,0 +1,52 @@ +#include "CommonProtocol.tars" + +module bcostars +{ + +struct TableInfo { + 1 optional string name; + 2 optional string _key; + 3 optional vector fields; + 4 optional vector indices; + 5 optional bool enableConsensus; + 6 optional bool enableCache; + 7 optional bool newTable; +}; + +struct Condition { + 1 optional vector conditions; + 2 optional long offset; + 3 optional long size; +}; + +struct Entry { + 1 optional long num; + 2 optional int status; + 3 optional map fields; + 4 optional bool isNull; +}; + +struct TableFactory { + 1 optional long num; + 2 optional vector tableInfos; + 3 optional vector> datas; +}; + +interface StorageService +{ + Error getPrimaryKeys(TableInfo tableInfo, Condition condition, out vector keys); + Error getRow(TableInfo tableInfo, string keys, out Entry row); + Error getRows(TableInfo tableInfo, vector keys, out map rows); + Error commitBlock(long blockNumber, vector infos, vector> datas, out long count); + + Error addStateCache(long blockNumber, TableFactory tableFactory); + Error dropStateCache(long blockNumber); + Error getStateCache(long blockNumber, out TableFactory tableFactory); + + Error put(string columnFamily, string _key, string value); + Error get(string columnFamily, string _key, out string value); + Error remove(string columnFamily, string _key); + Error getBatch(string columnFamily, vector keys, out vector values); +}; + +}; diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/Transaction.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/Transaction.tars new file mode 100644 index 0000000..8dd7b04 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/Transaction.tars @@ -0,0 +1,23 @@ +module bcostars { + struct TransactionData { + 1 optional int version; + 2 optional string chainID; + 3 optional string groupID; + 4 optional long blockLimit; + 5 optional string nonce; + 6 optional string to; + 7 optional vector input; + 8 optional string abi; + }; + + struct Transaction { + 1 optional TransactionData data; + 2 optional vector dataHash; + 3 optional vector signature; + 4 optional long importTime; + 5 optional int attribute; + // 6 optional string source; + 7 optional vector sender; + 8 optional string extraData; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionMetaData.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionMetaData.tars new file mode 100644 index 0000000..2b4b671 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionMetaData.tars @@ -0,0 +1,9 @@ +module bcostars { + struct TransactionMetaData + { + 1 optional vector hash; + 2 optional string to; + 3 optional string source; + 4 optional unsigned int attribute; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionReceipt.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionReceipt.tars new file mode 100644 index 0000000..a4613fa --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionReceipt.tars @@ -0,0 +1,23 @@ +module bcostars { + struct LogEntry { + 1 optional string address; + 2 optional vector> topic; + 3 optional vector data; + }; + + struct TransactionReceiptData { + 1 require int version; + 2 optional string gasUsed; + 3 optional string contractAddress; + 4 optional int status; + 5 optional vector output; + 6 optional vector logEntries; + 7 optional long blockNumber; + }; + + struct TransactionReceipt { + 1 optional TransactionReceiptData data; + 2 optional vector dataHash; + 3 optional string message; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionSubmitResult.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionSubmitResult.tars new file mode 100644 index 0000000..1ce3973 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/TransactionSubmitResult.tars @@ -0,0 +1,15 @@ +#include "CommonProtocol.tars" +#include "TransactionReceipt.tars" + +module bcostars { + struct TransactionSubmitResult { + 1 optional int status; + 2 optional vector txHash; + 3 optional vector blockHash; + 4 optional long transactionIndex; + 5 optional string nonce = "-1"; + 6 optional TransactionReceipt transactionReceipt; + 7 optional string sender; + 8 optional string to; + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/TwoPCParams.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/TwoPCParams.tars new file mode 100644 index 0000000..bb74713 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/TwoPCParams.tars @@ -0,0 +1,8 @@ +module bcostars { +struct TwoPCParams +{ + 1 require long blockNumber; + 2 require long timePoint; + 3 optional string primaryKey; +}; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/tars/TxPoolService.tars b/bcos-tars-protocol/bcos-tars-protocol/tars/TxPoolService.tars new file mode 100644 index 0000000..23bc8bd --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/tars/TxPoolService.tars @@ -0,0 +1,26 @@ +#include "CommonProtocol.tars" +#include "Transaction.tars" +#include "Block.tars" +#include "TransactionSubmitResult.tars" +#include "LedgerConfig.tars" + +module bcostars { + interface TxPoolService { + Error submit(Transaction tx, out TransactionSubmitResult result); + Error broadcastPushTransaction(Transaction tx); + + Error asyncSealTxs(long txsLimit, vector> avoidTxs, out Block txsList, out Block sysTxsList); + Error asyncMarkTxs(vector> txHashs, bool sealedFlag, long batchId, vector batchHash); + Error asyncVerifyBlock(vector generatedNodeID, vector block, out bool result); + Error asyncFillBlock(vector> txHashs, out vector filled); + Error asyncNotifyBlockResult(long blockNumber, vector result); + Error asyncNotifyTxsSyncMessage(Error error, string id, vector nodeID, vector data); + Error notifyConnectedNodes(vector> connectedNodes); + Error notifyConsensusNodeList(vector consensusNodeList); + Error notifyObserverNodeList(vector observerNodeList); + + Error asyncResetTxPool(); + + Error asyncGetPendingTransactionSize(out long _txsSize); + }; +}; \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlock.h b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlock.h new file mode 100644 index 0000000..2629a27 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlock.h @@ -0,0 +1,235 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for PBBlock + * @file PBBlockTest.cpp + * @author: yujiechen + * @date: 2021-03-23 + */ +#pragma once +#include "FakeBlockHeader.h" +#include "FakeTransaction.h" +#include "FakeTransactionReceipt.h" +#include "bcos-tars-protocol/protocol/BlockFactoryImpl.h" +#include "bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h" +#include "bcos-tars-protocol/protocol/BlockHeaderImpl.h" +#include "bcos-tars-protocol/protocol/TransactionFactoryImpl.h" +#include "bcos-tars-protocol/protocol/TransactionMetaDataImpl.h" +#include "bcos-tars-protocol/protocol/TransactionReceiptImpl.h" +#include +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +inline CryptoSuite::Ptr createNormalCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signImpl = std::make_shared(); + return std::make_shared(hashImpl, signImpl, nullptr); +} + +inline CryptoSuite::Ptr createSMCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signImpl = std::make_shared(); + return std::make_shared(hashImpl, signImpl, nullptr); +} + +inline BlockFactory::Ptr createBlockFactory(CryptoSuite::Ptr _cryptoSuite) +{ + auto blockHeaderFactory = + std::make_shared(_cryptoSuite); + auto transactionFactory = + std::make_shared(_cryptoSuite); + auto receiptFactory = + std::make_shared(_cryptoSuite); + return std::make_shared( + _cryptoSuite, blockHeaderFactory, transactionFactory, receiptFactory); +} + +inline void checkBlock(CryptoSuite::Ptr _cryptoSuite, Block::Ptr block, Block::Ptr decodedBlock) +{ + BOOST_CHECK(block->blockType() == decodedBlock->blockType()); + // check BlockHeader + if (block->blockHeader()) + { + checkBlockHeader(block->blockHeader(), decodedBlock->blockHeader()); + } + // check transactions + BOOST_CHECK_EQUAL(decodedBlock->transactionsSize(), block->transactionsSize()); + for (size_t i = 0; i < block->transactionsSize(); ++i) + { + checkTransaction(block->transaction(i), decodedBlock->transaction(i)); + } + /* + for (auto transaction : *(block->transactions())) + { + checkTransaction(transaction, (*(decodedBlock->transactions()))[index++]); + } + */ + // check receipts + BOOST_CHECK_EQUAL(decodedBlock->receiptsSize(), block->receiptsSize()); + for (size_t i = 0; i < block->receiptsSize(); ++i) + { + checkReceipts(_cryptoSuite->hashImpl(), block->receipt(i), decodedBlock->receipt(i)); + } + /* + for (auto receipt : *(block->receipts())) + { + checkReceipts(_cryptoSuite->hashImpl(), receipt, (*(decodedBlock->receipts()))[index++]); + } + */ + for (size_t i = 0; i < decodedBlock->transactionsHashSize(); i++) + { + BOOST_CHECK(decodedBlock->transactionHash(i) == block->transactionHash(i)); + BOOST_CHECK( + decodedBlock->transactionMetaData(i)->hash() == block->transactionMetaData(i)->hash()); + BOOST_CHECK( + decodedBlock->transactionMetaData(i)->to() == block->transactionMetaData(i)->to()); + } + // check receiptsRoot + h256 originHash = h256(); + auto hashImpl = _cryptoSuite->hashImpl(); + if (block->blockHeader()) + { + originHash = block->blockHeader()->hash(); + } + BOOST_CHECK( + block->calculateReceiptRoot(*hashImpl) == decodedBlock->calculateReceiptRoot(*hashImpl)); + + if (block->blockHeader()) + { + BOOST_CHECK_EQUAL( + block->blockHeader()->receiptsRoot(), block->calculateReceiptRoot(*hashImpl)); + BOOST_CHECK_EQUAL(decodedBlock->blockHeader()->receiptsRoot(), + decodedBlock->calculateReceiptRoot(*hashImpl)); + BOOST_CHECK_EQUAL(decodedBlock->blockHeader()->hash(), originHash); + originHash = block->blockHeader()->hash(); + } + // check transactionsRoot + BOOST_CHECK(block->calculateTransactionRoot(*hashImpl) == + decodedBlock->calculateTransactionRoot(*hashImpl)); + if (block->blockHeader()) + { + BOOST_CHECK_EQUAL( + block->blockHeader()->txsRoot(), block->calculateTransactionRoot(*hashImpl)); + BOOST_CHECK_EQUAL( + decodedBlock->blockHeader()->txsRoot(), block->calculateTransactionRoot(*hashImpl)); + BOOST_CHECK_EQUAL(decodedBlock->blockHeader()->hash(), originHash); + originHash = decodedBlock->blockHeader()->hash(); + } + // Check idempotence + auto txsRoot = block->calculateTransactionRoot(*hashImpl); + auto receiptsRoot = block->calculateReceiptRoot(*hashImpl); + BOOST_CHECK(txsRoot == block->calculateTransactionRoot(*hashImpl)); + BOOST_CHECK(receiptsRoot == block->calculateReceiptRoot(*hashImpl)); + if (decodedBlock->blockHeader()) + { + BOOST_CHECK(decodedBlock->blockHeader()->hash() == originHash); + } +} + +inline Block::Ptr fakeAndCheckBlock(CryptoSuite::Ptr _cryptoSuite, BlockFactory::Ptr _blockFactory, + bool _withHeader, size_t _txsNum, size_t _txsHashNum, bool _check = true) +{ + auto block = _blockFactory->createBlock(); + if (_withHeader) + { + auto blockHeader = testPBBlockHeader(_cryptoSuite); + block->setBlockHeader(blockHeader); + block->blockHeader()->calculateHash(*_blockFactory->cryptoSuite()->hashImpl()); + } + + block->setBlockType(CompleteBlock); + // fake transactions + for (size_t i = 0; i < _txsNum; i++) + { + auto tx = fakeTransaction(_cryptoSuite, utcTime() + i); + block->appendTransaction(tx); + + auto metaData = std::make_shared(); + metaData->setHash(tx->hash()); + metaData->setTo(std::string(tx->to())); + + block->appendTransactionMetaData(metaData); + } + + _txsHashNum = _txsNum; + // fake receipts + for (size_t i = 0; i < _txsNum; i++) + { + auto receipt = testPBTransactionReceipt(_cryptoSuite, _check); + block->setReceipt(i, receipt); + } + // fake txsHash + // for (size_t i = 0; i < _txsHashNum; i++) + // { + // auto content = "transaction: " + std::to_string(i); + // auto hash = _cryptoSuite->hashImpl()->hash(content); + // boost::ignore_unused(hash); + + // auto metaData = std::make_shared(); + // metaData->setHash(hash); + // metaData->setTo(*toHexString(hash)); + // // auto txMetaData = _blockFactory->createTransactionMetaData(hash, *toHexString(hash)); + // block->appendTransactionMetaData(metaData); + // } + + auto hashImpl = _cryptoSuite->hashImpl(); + if (block->blockHeaderConst()) + { + block->blockHeader()->setReceiptsRoot(block->calculateReceiptRoot(*hashImpl)); + block->blockHeader()->setTxsRoot(block->calculateTransactionRoot(*hashImpl)); + } + if (!_check) + { + return block; + } + + // encode block + auto encodedData = std::make_shared(); + block->encode(*encodedData); + // decode block + auto decodedBlock = _blockFactory->createBlock(*encodedData, true, true); + checkBlock(_cryptoSuite, block, decodedBlock); + // check txsHash + BOOST_CHECK(decodedBlock->transactionsHashSize() == _txsHashNum); + BOOST_CHECK(decodedBlock->transactionsMetaDataSize() == _txsHashNum); + for (size_t i = 0; i < _txsHashNum; i++) + { + auto hash = block->transaction(i)->hash(); + BOOST_CHECK(decodedBlock->transactionHash(i) == hash); + BOOST_CHECK(decodedBlock->transactionMetaData(i)->hash() == hash); + } + // exception test + /*(*encodedData)[0] += 1; + BOOST_CHECK_THROW( + _blockFactory->createBlock(*encodedData, true, true), PBObjectDecodeException);*/ + return block; +} + + +} // namespace test +} // namespace bcos diff --git a/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlockHeader.h b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlockHeader.h new file mode 100644 index 0000000..e052532 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeBlockHeader.h @@ -0,0 +1,240 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeBlockHeader.h + * @author: yujiechen + * @date: 2021-03-16 + */ +#pragma once +#include "bcos-protocol/Common.h" +#include "bcos-tars-protocol/protocol/BlockHeaderFactoryImpl.h" +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +inline void checkBlockHeader(BlockHeader::Ptr blockHeader, BlockHeader::Ptr decodedBlockHeader) +{ + BOOST_CHECK(decodedBlockHeader->version() == blockHeader->version()); + // BOOST_CHECK(decodedBlockHeader->parentInfo() == blockHeader->parentInfo()); + + auto originParent = blockHeader->parentInfo(); + auto decodedParent = decodedBlockHeader->parentInfo(); + BOOST_CHECK_EQUAL(originParent.size(), decodedParent.size()); + for (auto [originParentInfo, decodedParentInfo] : RANGES::zip_view(originParent, decodedParent)) + { + BOOST_CHECK_EQUAL(originParentInfo.blockHash, decodedParentInfo.blockHash); + BOOST_CHECK_EQUAL(originParentInfo.blockNumber, decodedParentInfo.blockNumber); + } + BOOST_CHECK(decodedBlockHeader->txsRoot() == blockHeader->txsRoot()); + BOOST_CHECK(decodedBlockHeader->receiptsRoot() == blockHeader->receiptsRoot()); + BOOST_CHECK(decodedBlockHeader->stateRoot() == blockHeader->stateRoot()); + BOOST_CHECK(decodedBlockHeader->number() == blockHeader->number()); + BOOST_CHECK(decodedBlockHeader->gasUsed() == blockHeader->gasUsed()); + BOOST_CHECK(decodedBlockHeader->timestamp() == blockHeader->timestamp()); + BOOST_CHECK(decodedBlockHeader->sealer() == blockHeader->sealer()); + + auto decodedSealerList = decodedBlockHeader->sealerList(); + BOOST_CHECK(decodedSealerList.size() == blockHeader->sealerList().size()); + for (decltype(decodedSealerList)::size_type i = 0; i < decodedSealerList.size(); i++) + { + BOOST_CHECK(decodedSealerList[i] == blockHeader->sealerList()[i]); + } + BOOST_CHECK(decodedBlockHeader->extraData().toBytes() == blockHeader->extraData().toBytes()); + BOOST_CHECK((decodedBlockHeader->consensusWeights()) == (blockHeader->consensusWeights())); + // check signature + BOOST_CHECK(decodedBlockHeader->signatureList().size() == blockHeader->signatureList().size()); + size_t index = 0; + for (auto signature : decodedBlockHeader->signatureList()) + { + BOOST_CHECK(signature.index == blockHeader->signatureList()[index].index); + BOOST_CHECK(signature.signature == blockHeader->signatureList()[index].signature); + index++; + } +#if 0 + std::cout << "### PBBlockHeaderTest: version:" << decodedBlockHeader->version() << std::endl; + std::cout << "### PBBlockHeaderTest: txsRoot:" << decodedBlockHeader->txsRoot().hex() + << std::endl; + std::cout << "### PBBlockHeaderTest: receiptsRoot:" << decodedBlockHeader->receiptsRoot().hex() + << std::endl; + std::cout << "### PBBlockHeaderTest: stateRoot:" << decodedBlockHeader->stateRoot().hex() + << std::endl; + std::cout << "### PBBlockHeaderTest: number:" << decodedBlockHeader->number() << std::endl; + std::cout << "### PBBlockHeaderTest: gasUsed:" << decodedBlockHeader->gasUsed() << std::endl; + std::cout << "### PBBlockHeaderTest: timestamp:" << decodedBlockHeader->timestamp() + << std::endl; + std::cout << "### PBBlockHeaderTest: sealer:" << decodedBlockHeader->sealer() << std::endl; + std::cout << "### PBBlockHeaderTest: sealer:" << *toHexString(decodedBlockHeader->extraData()) + << std::endl; + std::cout << "#### hash:" << decodedBlockHeader->hash().hex() << std::endl; + if (blockHeader->parentInfo().size() >= 1) + { + std::cout << "### parentHash:" << blockHeader->parentInfo()[0].blockHash.hex() << std::endl; + } +#endif +} + +inline BlockHeader::Ptr fakeAndTestBlockHeader(CryptoSuite::Ptr _cryptoSuite, int32_t _version, + const ParentInfoList& _parentInfo, h256 const& _txsRoot, h256 const& _receiptsRoot, + h256 const& _stateRoot, int64_t _number, u256 const& _gasUsed, int64_t _timestamp, + int64_t _sealer, const std::vector& _sealerList, bytes const& _extraData, + SignatureList _signatureList, bool _check = true) +{ + BlockHeaderFactory::Ptr blockHeaderFactory = + std::make_shared(_cryptoSuite); + BlockHeader::Ptr blockHeader = blockHeaderFactory->createBlockHeader(); + blockHeader->setVersion(_version); + blockHeader->setParentInfo(_parentInfo); + blockHeader->setTxsRoot(_txsRoot); + blockHeader->setReceiptsRoot(_receiptsRoot); + blockHeader->setStateRoot(_stateRoot); + blockHeader->setNumber(_number); + blockHeader->setGasUsed(_gasUsed); + blockHeader->setTimestamp(_timestamp); + blockHeader->setSealer(_sealer); + blockHeader->setSealerList(gsl::span(_sealerList)); + blockHeader->setExtraData(_extraData); + blockHeader->setSignatureList(_signatureList); + WeightList weights; + weights.push_back(0); + blockHeader->setConsensusWeights(weights); + if (_check) + { + tbb::parallel_invoke([blockHeader]() { blockHeader->hash(); }, + [blockHeader]() { blockHeader->hash(); }, [blockHeader]() { blockHeader->hash(); }, + [blockHeader]() { blockHeader->hash(); }); + // encode + std::shared_ptr encodedData = std::make_shared(); + blockHeader->encode(*encodedData); + + bcos::bytes buffer; + blockHeader->encode(buffer); + BOOST_CHECK(*encodedData == buffer); + + // decode + auto decodedBlockHeader = blockHeaderFactory->createBlockHeader(*encodedData); +#if 0 + std::cout << "### PBBlockHeaderTest: encodedData:" << *toHexString(*encodedData) << std::endl; +#endif + // Same tested in tars + // check the data of decodedBlockHeader + // checkBlockHeader(blockHeader, decodedBlockHeader); + // test encode exception + // (*encodedData)[0] += 1; + // bcostars::protocol::BlockHeaderImpl decodedBlock(_cryptoSuite); + // BOOST_CHECK_THROW( + // std::make_shared(_cryptoSuite, *encodedData), + // PBObjectDecodeException); + + // update the hash data field + blockHeader->setNumber(_number + 1); + BOOST_CHECK(blockHeader->hash() != decodedBlockHeader->hash()); + BOOST_CHECK(blockHeader->number() == decodedBlockHeader->number() + 1); + // recover the hash field + blockHeader->setNumber(_number); + BOOST_CHECK(blockHeader->hash() == decodedBlockHeader->hash()); + BOOST_CHECK(decodedBlockHeader->consensusWeights().size() == 1); + BOOST_CHECK(decodedBlockHeader->consensusWeights()[0] == 0); + } + return blockHeader; +} + +inline ParentInfoList fakeParentInfo(Hash::Ptr _hashImpl, size_t _size) +{ + ParentInfoList parentInfos; + for (size_t i = 0; i < _size; i++) + { + ParentInfo parentInfo; + parentInfo.blockNumber = i; + parentInfo.blockHash = _hashImpl->hash(std::to_string(i)); + parentInfos.emplace_back(parentInfo); + } + return parentInfos; +} + +inline std::vector fakeSealerList( + std::vector& _keyPairVec, SignatureCrypto::Ptr _signImpl, size_t size) +{ + std::vector sealerList; + for (size_t i = 0; i < size; i++) + { + KeyPairInterface::Ptr keyPair = _signImpl->generateKeyPair(); + _keyPairVec.emplace_back(keyPair); + sealerList.emplace_back(*(keyPair->publicKey()->encode())); + } + return sealerList; +} + +inline SignatureList fakeSignatureList(SignatureCrypto::Ptr _signImpl, + std::vector& _keyPairVec, h256 const& _hash) +{ + auto sealerIndex = 0; + SignatureList signatureList; + for (auto keyPair : _keyPairVec) + { + auto signature = _signImpl->sign(*keyPair, _hash); + Signature sig; + sig.index = sealerIndex++; + sig.signature = *signature; + signatureList.push_back(sig); + } + return signatureList; +} + +inline BlockHeader::Ptr testPBBlockHeader(CryptoSuite::Ptr _cryptoSuite) +{ + auto hashImpl = _cryptoSuite->hashImpl(); + auto signImpl = _cryptoSuite->signatureImpl(); + auto cryptoSuite = std::make_shared(hashImpl, signImpl, nullptr); + int version = 10; + auto parentInfo = fakeParentInfo(hashImpl, 3); + auto txsRoot = hashImpl->hash((std::string) "txsRoot"); + auto receiptsRoot = hashImpl->hash((std::string) "receiptsRoot"); + auto stateRoot = hashImpl->hash((std::string) "stateRoot"); + int64_t number = 12312312412; + u256 gasUsed = 3453456346534; + int64_t timestamp = 9234234234; + int64_t sealer = 100; + std::vector keyPairVec; + auto sealerList = fakeSealerList(keyPairVec, signImpl, 4); + bytes extraData = stateRoot.asBytes(); + auto signatureList = fakeSignatureList(signImpl, keyPairVec, receiptsRoot); + + auto blockHeader = + fakeAndTestBlockHeader(cryptoSuite, version, parentInfo, txsRoot, receiptsRoot, stateRoot, + number, gasUsed, timestamp, sealer, sealerList, extraData, signatureList); + + // test verifySignatureList + signatureList = fakeSignatureList(signImpl, keyPairVec, blockHeader->hash()); + blockHeader->setSignatureList(signatureList); + blockHeader->verifySignatureList(*hashImpl, *signImpl); + + auto invalidSignatureList = fakeSignatureList(signImpl, keyPairVec, receiptsRoot); + blockHeader->setSignatureList(invalidSignatureList); + BOOST_CHECK_THROW(blockHeader->verifySignatureList(*hashImpl, *signImpl), InvalidSignatureList); + + blockHeader->setSignatureList(signatureList); + blockHeader->verifySignatureList(*hashImpl, *signImpl); + return blockHeader; +} +} // namespace test +} // namespace bcos diff --git a/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransaction.h b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransaction.h new file mode 100644 index 0000000..d56abf2 --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransaction.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeTransaction.h + * @author: yujiechen + * @date: 2021-03-16 + */ +#pragma once +#include "../protocol/TransactionImpl.h" +#include "bcos-tars-protocol/protocol/TransactionFactoryImpl.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::protocol; + +namespace bcos +{ +namespace test +{ +inline auto fakeTransaction(CryptoSuite::Ptr _cryptoSuite, KeyPairInterface::Ptr _keyPair, + const std::string_view& _to, bytes const& _input, u256 const& _nonce, int64_t _blockLimit, + std::string const& _chainId, std::string const& _groupId, std::string const& _abi = "") +{ + bcostars::Transaction transaction; + transaction.data.to = _to; + transaction.data.input.assign(_input.begin(), _input.end()); + transaction.data.nonce = boost::lexical_cast(_nonce); + transaction.data.blockLimit = _blockLimit; + transaction.data.chainID = _chainId; + transaction.data.groupID = _groupId; + transaction.data.abi = _abi; + auto pbTransaction = std::make_shared( + [m_transaction = std::move(transaction)]() mutable { return &m_transaction; }); + std::visit( + [&pbTransaction]( + auto&& hasher) { pbTransaction->calculateHash>(); }, + _cryptoSuite->hashImpl()->hasher()); + + + auto signData = _cryptoSuite->signatureImpl()->sign(*_keyPair, pbTransaction->hash(), true); + pbTransaction->setSignatureData(*signData); + pbTransaction->forceSender(_keyPair->address(_cryptoSuite->hashImpl()).asBytes()); + return pbTransaction; +} + +inline void checkTransaction( + Transaction::ConstPtr pbTransaction, Transaction::ConstPtr decodedTransaction) +{ + // check the fields + BOOST_CHECK(decodedTransaction->hash() == pbTransaction->hash()); + BOOST_CHECK(decodedTransaction->sender() == pbTransaction->sender()); + BOOST_CHECK(decodedTransaction->type() == pbTransaction->type()); + BOOST_CHECK(decodedTransaction->to() == pbTransaction->to()); + // check the transaction hash fields + BOOST_CHECK(decodedTransaction->input().toBytes() == pbTransaction->input().toBytes()); + BOOST_CHECK(decodedTransaction->nonce() == pbTransaction->nonce()); + BOOST_CHECK(decodedTransaction->blockLimit() == pbTransaction->blockLimit()); + BOOST_CHECK(decodedTransaction->chainId() == pbTransaction->chainId()); + BOOST_CHECK(decodedTransaction->groupId() == pbTransaction->groupId()); +} + +inline Transaction::Ptr testTransaction(CryptoSuite::Ptr _cryptoSuite, + KeyPairInterface::Ptr _keyPair, const std::string_view& _to, bytes const& _input, + u256 const& _nonce, int64_t _blockLimit, std::string const& _chainId, + std::string const& _groupId) +{ + auto factory = std::make_shared(_cryptoSuite); + auto pbTransaction = fakeTransaction( + _cryptoSuite, _keyPair, _to, _input, _nonce, _blockLimit, _chainId, _groupId); + if (_to.empty()) + { + BOOST_CHECK(pbTransaction->type() == TransactionType::ContractCreation); + } + else + { + BOOST_CHECK(pbTransaction->type() == TransactionType::MessageCall); + } + auto addr = _keyPair->address(_cryptoSuite->hashImpl()); + BOOST_CHECK(pbTransaction->sender() == std::string_view((char*)addr.data(), 20)); + bcos::bytes encodedData; + pbTransaction->encode(encodedData); + // auto encodedDataCache = pbTransaction->encode(); + // BOOST_CHECK(encodedData.toBytes() == encodedDataCache.toBytes()); +#if 0 + std::cout << "#### encodedData is:" << *toHexString(encodedData) << std::endl; + std::cout << "### hash:" << pbTransaction->hash().hex() << std::endl; + std::cout << "### sender:" << *toHexString(pbTransaction->sender()) << std::endl; + std::cout << "### type:" << pbTransaction->type() << std::endl; + std::cout << "### to:" << *toHexString(pbTransaction->to()) << std::endl; +#endif + // decode + auto decodedTransaction = factory->createTransaction(bcos::ref(encodedData), true); + checkTransaction(pbTransaction, decodedTransaction); + return decodedTransaction; +} + +inline Transaction::Ptr fakeTransaction(CryptoSuite::Ptr _cryptoSuite, u256 nonce = 120012323, + int64_t blockLimit = 1000023, std::string chainId = "chainId", std::string groupId = "groupId", + bytes _to = bytes()) +{ + KeyPairInterface::Ptr keyPair = _cryptoSuite->signatureImpl()->generateKeyPair(); + auto to = keyPair->address(_cryptoSuite->hashImpl()).asBytes(); + if (_to != bytes()) + { + to = _to; + } + std::string inputStr = "testTransaction"; + bytes input = asBytes(inputStr); + return fakeTransaction(_cryptoSuite, keyPair, std::string_view((char*)_to.data(), _to.size()), + input, nonce, blockLimit, chainId, groupId); +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransactionReceipt.h b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransactionReceipt.h new file mode 100644 index 0000000..c3b29cc --- /dev/null +++ b/bcos-tars-protocol/bcos-tars-protocol/testutil/FakeTransactionReceipt.h @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FakeTransactionReceipt.h + * @author: yujiechen + * @date: 2021-03-16 + */ +#pragma once +#include "../protocol/TransactionReceiptFactoryImpl.h" +#include "bcos-protocol/TransactionStatus.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::protocol; + +namespace bcos +{ +namespace test +{ +inline protocol::LogEntriesPtr fakeLogEntries(Hash::Ptr _hashImpl, size_t _size) +{ + auto logEntries = std::make_shared(); + for (size_t i = 0; i < _size; i++) + { + auto topic = _hashImpl->hash(std::to_string(i)); + h256s topics; + topics.push_back(topic); + auto address = right160(topic).asBytes(); + bytes output = topic.asBytes(); + protocol::LogEntry logEntry(address, topics, output); + logEntries->push_back(logEntry); + } + return logEntries; +} + +inline void checkReceipts(Hash::Ptr hashImpl, bcos::protocol::TransactionReceipt::ConstPtr receipt, + TransactionReceipt::ConstPtr decodedReceipt) +{ + // check the decodedReceipt + BOOST_CHECK(decodedReceipt->version() == receipt->version()); + BOOST_CHECK(decodedReceipt->gasUsed() == receipt->gasUsed()); + BOOST_CHECK(decodedReceipt->contractAddress() == receipt->contractAddress()); + BOOST_CHECK(decodedReceipt->status() == receipt->status()); + BOOST_CHECK(decodedReceipt->output().toBytes() == receipt->output().toBytes()); + // BOOST_CHECK(decodedReceipt->hash() == receipt->hash()); + // check LogEntries + BOOST_CHECK(decodedReceipt->logEntries().size() == 2); + BOOST_CHECK(decodedReceipt->logEntries().size() == receipt->logEntries().size()); + auto& logEntry = (decodedReceipt->logEntries())[1]; + auto expectedTopic = hashImpl->hash(std::to_string(1)); + BOOST_CHECK(logEntry.topics()[0] == expectedTopic); + + // BOOST_CHECK(std::string(logEntry.address()) == right160(expectedTopic)); + // BOOST_CHECK(logEntry.data().toBytes() == expectedTopic.asBytes()); +} + +inline TransactionReceipt::Ptr testPBTransactionReceipt( + CryptoSuite::Ptr _cryptoSuite, bool _check = true) +{ + auto hashImpl = _cryptoSuite->hashImpl(); + u256 gasUsed = 12343242342; + auto contractAddress = std::string("5fe3c4c3e2079879a0dba1937aca95ac16e68f0f"); + auto logEntries = fakeLogEntries(hashImpl, 2); + TransactionStatus status = TransactionStatus::BadJumpDestination; + bytes output = toAddress(contractAddress).asBytes(); + for (int i = 0; i < 10; i++) + { + output += toAddress(contractAddress).asBytes(); + } + auto factory = + std::make_shared(_cryptoSuite); + auto receipt = factory->createReceipt(gasUsed, std::string((char*)contractAddress.data(), 20), + *logEntries, (int32_t)status, bcos::ref(output), 0); + if (!_check) + { + return receipt; + } + // encode + std::shared_ptr encodedData = std::make_shared(); + for (size_t i = 0; i < 2; i++) + { + receipt->encode(*encodedData); + } +#if 0 + std::cout << "##### testPBTransactionReceipt:" + << "encodedData:" << *toHexString(*encodedData) << std::endl; + std::cout << "receipt->output():" << *toHexString(receipt->output()) << std::endl; + std::cout << "receipt->contractAddress():" << *toHexString(receipt->contractAddress()) + << std::endl; + std::cout << "receipt->hash().hex(): " << receipt->hash().hex() << std::endl; + auto& logEntry = (receipt->logEntries())[1]; + std::cout << "(logEntry.topics()[0]).hex():" << (logEntry.topics()[0]).hex() << std::endl; + std::cout << "*toHexString(logEntry.address()):" << *toHexString(logEntry.address()) + << std::endl; + std::cout << "*toHexString(logEntry.data()):" << *toHexString(logEntry.data()) << std::endl; + + std::cout << "##### ScaleReceipt encodeT: " << (utcTime() - start) + << ", encodedData size:" << encodedData->size() << std::endl; +#endif + + auto encodedDataCache = std::make_shared(); + receipt->encode(*encodedDataCache); + BOOST_CHECK(*encodedData == *encodedDataCache); + + // decode + std::shared_ptr decodedReceipt; + for (size_t i = 0; i < 2; i++) + { + decodedReceipt = factory->createReceipt(*encodedData); + } +#if 0 + std::cout << "##### ScaleReceipt decodeT: " << (utcTime() - start) << std::endl; +#endif + checkReceipts(hashImpl, receipt, decodedReceipt); + return decodedReceipt; +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-tars-protocol/test/CMakeLists.txt b/bcos-tars-protocol/test/CMakeLists.txt new file mode 100644 index 0000000..89f098c --- /dev/null +++ b/bcos-tars-protocol/test/CMakeLists.txt @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-tars-protocol +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-tars-protocol) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) +find_package(jsoncpp REQUIRED) + +target_compile_options(${TEST_BINARY_NAME} PRIVATE -Wno-unused-variable) +target_link_libraries(${TEST_BINARY_NAME} PRIVATE ${TARS_PROTOCOL_TARGET} ${CRYPTO_TARGET} Boost::unit_test_framework jsoncpp_static) +add_test(NAME test-tars-protocol WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-tars-protocol/test/ProtocolTest.cpp b/bcos-tars-protocol/test/ProtocolTest.cpp new file mode 100644 index 0000000..bacfbb1 --- /dev/null +++ b/bcos-tars-protocol/test/ProtocolTest.cpp @@ -0,0 +1,696 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +namespace test +{ +struct Fixture +{ + Fixture() + { + cryptoSuite = + std::make_shared(std::make_shared(), + std::make_shared(), nullptr); + + blockHeaderFactory = + std::make_shared(cryptoSuite); + transactionFactory = + std::make_shared(cryptoSuite); + transactionReceiptFactory = + std::make_shared(cryptoSuite); + blockFactory = std::make_shared( + cryptoSuite, blockHeaderFactory, transactionFactory, transactionReceiptFactory); + } + + bcos::crypto::CryptoSuite::Ptr cryptoSuite; + std::shared_ptr blockHeaderFactory; + std::shared_ptr transactionFactory; + std::shared_ptr transactionReceiptFactory; + std::shared_ptr blockFactory; +}; + +BOOST_FIXTURE_TEST_SUITE(TestProtocol, Fixture) + +inline std::vector fakeSealerList( + std::vector& _keyPairVec, + bcos::crypto::SignatureCrypto::Ptr _signImpl, size_t size) +{ + std::vector sealerList; + for (size_t i = 0; i < size; i++) + { + bcos::crypto::KeyPairInterface::Ptr keyPair = _signImpl->generateKeyPair(); + _keyPairVec.emplace_back(keyPair); + sealerList.emplace_back(*(keyPair->publicKey()->encode())); + } + return sealerList; +} + +BOOST_AUTO_TEST_CASE(transaction) +{ + std::string to("Target"); + bcos::bytes input(bcos::asBytes("Arguments")); + bcos::u256 nonce(800); + + bcostars::protocol::TransactionFactoryImpl factory(cryptoSuite); + auto tx = factory.createTransaction(0, to, input, nonce, 100, "testChain", "testGroup", 1000, + cryptoSuite->signatureImpl()->generateKeyPair()); + + tx->verify(*cryptoSuite->hashImpl(), *cryptoSuite->signatureImpl()); + BOOST_CHECK(!tx->sender().empty()); + bcos::bytes buffer; + tx->encode(buffer); + + auto decodedTx = factory.createTransaction(bcos::ref(buffer), true); + + BOOST_CHECK_EQUAL(tx->hash(), decodedTx->hash()); + BOOST_CHECK_EQUAL(tx->version(), 0); + BOOST_CHECK_EQUAL(tx->to(), to); + BOOST_CHECK_EQUAL(bcos::asString(tx->input()), bcos::asString(input)); + + BOOST_CHECK_EQUAL(tx->nonce(), nonce); + BOOST_CHECK_EQUAL(tx->blockLimit(), 100); + BOOST_CHECK_EQUAL(tx->chainId(), "testChain"); + BOOST_CHECK_EQUAL(tx->groupId(), "testGroup"); + BOOST_CHECK_EQUAL(tx->importTime(), 1000); + BOOST_CHECK_EQUAL(decodedTx->sender(), tx->sender()); + + auto block = blockFactory->createBlock(); + block->appendTransaction(std::move(decodedTx)); + + auto blockTx = block->transaction(0); + BOOST_CHECK_EQUAL(blockTx->sender(), tx->sender()); +} + +BOOST_AUTO_TEST_CASE(transactionMetaData) +{ + bcos::h256 hash("5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9"); + + bcostars::protocol::TransactionMetaDataImpl metaData( + [inner = bcostars::TransactionMetaData()]() mutable { return &inner; }); + metaData.setTo(hash.hex()); + metaData.setTo("Hello world!"); + + tars::TarsOutputStream output; + metaData.inner().writeTo(output); + bcos::bytes buffer; + output.swap(buffer); + + bcostars::protocol::TransactionMetaDataImpl metaData2( + [inner = bcostars::TransactionMetaData()]() mutable { return &inner; }); + tars::TarsInputStream input; + input.setBuffer((const char*)buffer.data(), buffer.size()); + metaData2.mutableInner().readFrom(input); + + BOOST_CHECK_EQUAL(metaData2.hash().hex(), metaData.hash().hex()); + + bcostars::protocol::TransactionMetaDataImpl metaData3(hash, "Hello world!"); + BOOST_CHECK_EQUAL(metaData3.hash().hex(), hash.hex()); + BOOST_CHECK_EQUAL(metaData3.to(), "Hello world!"); +} + +BOOST_AUTO_TEST_CASE(transactionReceipt) +{ + bcos::crypto::HashType stateRoot(bcos::asBytes("root1")); + bcos::u256 gasUsed(8858); + std::string contractAddress("contract Address!"); + + auto logEntries = std::make_shared>(); + for (auto i : {1, 2, 3}) + { + bcos::h256s topics; + for (auto j : {100, 200, 300}) + { + topics.push_back( + bcos::h256(bcos::asBytes("topic: " + boost::lexical_cast(j)))); + } + bcos::protocol::LogEntry entry( + bcos::asBytes("Address: " + boost::lexical_cast(i)), topics, + bcos::asBytes("Data: " + boost::lexical_cast(i))); + logEntries->emplace_back(entry); + } + bcos::bytes output(bcos::asBytes("Output!")); + + bcostars::protocol::TransactionReceiptFactoryImpl factory(cryptoSuite); + auto receipt = + factory.createReceipt(gasUsed, contractAddress, *logEntries, 50, bcos::ref(output), 888); + + bcos::bytes buffer; + receipt->encode(buffer); + + auto decodedReceipt = factory.createReceipt(buffer); + + BOOST_CHECK_EQUAL(receipt->hash().hex(), decodedReceipt->hash().hex()); + BOOST_CHECK_EQUAL(receipt->version(), 0); + BOOST_CHECK_EQUAL(receipt->gasUsed(), gasUsed); + BOOST_CHECK_EQUAL(receipt->contractAddress(), contractAddress); + BOOST_CHECK_EQUAL(receipt->logEntries().size(), logEntries->size()); + for (auto i = 0u; i < receipt->logEntries().size(); ++i) + { + BOOST_CHECK_EQUAL(receipt->logEntries()[i].address(), (*logEntries)[i].address()); + BOOST_CHECK_EQUAL( + receipt->logEntries()[i].topics().size(), (*logEntries)[i].topics().size()); + for (auto j = 0u; j < receipt->logEntries()[i].topics().size(); ++j) + { + BOOST_CHECK_EQUAL( + receipt->logEntries()[i].topics()[j].hex(), (*logEntries)[i].topics()[j].hex()); + } + BOOST_CHECK_EQUAL( + receipt->logEntries()[i].data().toString(), (*logEntries)[i].data().toString()); + } + + BOOST_CHECK_EQUAL(receipt->status(), 50); + BOOST_CHECK_EQUAL(bcos::asString(receipt->output()), bcos::asString(output)); + BOOST_CHECK_EQUAL(receipt->blockNumber(), 888); +} + +BOOST_AUTO_TEST_CASE(block) +{ + auto block = blockFactory->createBlock(); + block->setVersion(883); + block->setBlockType(bcos::protocol::WithTransactionsHash); + + std::string to("Target"); + bcos::bytes input(bcos::asBytes("Arguments")); + bcos::u256 nonce(100); + + bcos::crypto::HashType stateRoot(bcos::asBytes("root1")); + std::string contractAddress("contract Address!"); + + // set the blockHeader + std::vector keyPairVec; + auto sealerList = fakeSealerList(keyPairVec, cryptoSuite->signatureImpl(), 4); + + auto header = block->blockHeader(); + header->setNumber(100); + header->setGasUsed(1000); + header->setStateRoot(bcos::crypto::HashType("62384386743874")); + header->setTimestamp(500); + + header->setSealerList(gsl::span(sealerList)); + BOOST_CHECK(header->sealerList().size() == 4); + header->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + auto signatureList = std::make_shared>(); + for (int64_t i = 0; i < 2; i++) + { + bcos::protocol::Signature signature; + signature.index = i; + std::string signatureStr = "signature"; + signature.signature = bcos::bytes(signatureStr.begin(), signatureStr.end()); + signatureList->push_back(signature); + } + header->setSignatureList(*signatureList); + BOOST_CHECK(header->signatureList().size() == 2); + BOOST_CHECK(header->signatureList().size() == 2); + + for (size_t i = 0; i < 100; ++i) + { + auto constHeader = block->blockHeaderConst(); + BOOST_CHECK(constHeader->signatureList().size() == 2); + std::cout << "### getHash:" << constHeader->hash().abridged() << std::endl; + + auto header2 = block->blockHeader(); + BOOST_CHECK(header2->signatureList().size() == 2); + } + + auto logEntries = std::make_shared>(); + for (auto i : {1, 2, 3}) + { + bcos::h256s topics; + for (auto j : {100, 200, 300}) + { + topics.push_back( + bcos::h256(bcos::asBytes("topic: " + boost::lexical_cast(j)))); + } + bcos::protocol::LogEntry entry( + bcos::asBytes("Address: " + boost::lexical_cast(i)), topics, + bcos::asBytes("Data: " + boost::lexical_cast(i))); + logEntries->emplace_back(entry); + } + bcos::bytes output(bcos::asBytes("Output!")); + + for (size_t i = 0; i < 1000; ++i) + { + auto transaction = transactionFactory->createTransaction( + 117, to, input, nonce, i, "testChain", "testGroup", 1000); + block->appendTransaction(transaction); + auto txMetaData = blockFactory->createTransactionMetaData( + transaction->hash(), transaction->hash().abridged()); + block->appendTransactionMetaData(txMetaData); + + auto receipt = transactionReceiptFactory->createReceipt( + 1000, contractAddress, *logEntries, 50, bcos::ref(output), i); + block->appendReceipt(receipt); + } + + bcos::bytes buffer; + BOOST_CHECK_NO_THROW(block->encode(buffer)); + + auto decodedBlock = blockFactory->createBlock(bcos::ref(buffer)); + + BOOST_CHECK(decodedBlock->blockHeader()->sealerList().size() == header->sealerList().size()); + // ensure the sealerlist lifetime + auto decodedSealerList = decodedBlock->blockHeader()->sealerList(); + for (auto i = 0u; i < decodedSealerList.size(); i++) + { + BOOST_CHECK(decodedSealerList[i] == sealerList[i]); + } + auto decodedBlockHeader = decodedBlock->blockHeader(); + BOOST_CHECK(decodedBlockHeader->signatureList().size() == 2); + + // ensure the blockheader lifetime + for (auto i = 0u; i < decodedBlock->blockHeader()->sealerList().size(); i++) + { + BOOST_CHECK(decodedBlock->blockHeader()->sealerList()[i] == sealerList[i]); + std::cout << "##### decodedSealerList size:" + << decodedBlock->blockHeader()->sealerList()[i].size() << std::endl; + } + BOOST_CHECK_EQUAL(block->blockHeader()->number(), decodedBlock->blockHeader()->number()); + BOOST_CHECK_EQUAL(block->blockHeader()->gasUsed(), decodedBlock->blockHeader()->gasUsed()); + BOOST_CHECK_EQUAL(block->blockHeader()->stateRoot(), decodedBlock->blockHeader()->stateRoot()); + BOOST_CHECK_EQUAL(block->blockHeader()->timestamp(), block->blockHeader()->timestamp()); + + BOOST_CHECK_EQUAL(block->version(), decodedBlock->version()); + BOOST_CHECK_EQUAL(block->blockType(), decodedBlock->blockType()); + + BOOST_CHECK_EQUAL(block->transactionsSize(), decodedBlock->transactionsSize()); + BOOST_CHECK_EQUAL(block->transactionsHashSize(), decodedBlock->transactionsHashSize()); + BOOST_CHECK_EQUAL(block->transactionsMetaDataSize(), decodedBlock->transactionsMetaDataSize()); + std::cout << "transactionsMetaDataSize:" << block->transactionsMetaDataSize() << std::endl; + for (size_t i = 0; i < block->transactionsSize(); ++i) + { + { + auto lhs = block->transaction(i); + auto rhs = decodedBlock->transaction(i); + + // check if transaction hash re-encode + bcos::bytes reencodeBuffer; + rhs->encode(reencodeBuffer); + auto redecodeBlock = + transactionFactory->createTransaction(bcos::ref(reencodeBuffer), false); + BOOST_CHECK_EQUAL(redecodeBlock->hash().hex(), lhs->hash().hex()); + + BOOST_CHECK_EQUAL(lhs->hash().hex(), rhs->hash().hex()); + BOOST_CHECK_EQUAL(lhs->version(), rhs->version()); + BOOST_CHECK_EQUAL(lhs->to(), rhs->to()); + BOOST_CHECK_EQUAL(bcos::asString(lhs->input()), bcos::asString(rhs->input())); + + BOOST_CHECK_EQUAL(lhs->nonce(), rhs->nonce()); + BOOST_CHECK_EQUAL(lhs->blockLimit(), rhs->blockLimit()); + BOOST_CHECK_EQUAL(lhs->chainId(), rhs->chainId()); + BOOST_CHECK_EQUAL(lhs->groupId(), rhs->groupId()); + BOOST_CHECK_EQUAL(lhs->importTime(), rhs->importTime()); + + // check the txMetaData + BOOST_CHECK_EQUAL(block->transactionMetaData(i)->hash(), + decodedBlock->transactionMetaData(i)->hash()); + BOOST_CHECK_EQUAL( + block->transactionMetaData(i)->to(), decodedBlock->transactionMetaData(i)->to()); + BOOST_CHECK_EQUAL(block->transactionHash(i), block->transactionHash(i)); + } + + { + // ensure the transaction's lifetime + BOOST_CHECK_EQUAL( + block->transaction(i)->hash().hex(), decodedBlock->transaction(i)->hash().hex()); + BOOST_CHECK_EQUAL( + block->transaction(i)->version(), decodedBlock->transaction(i)->version()); + BOOST_CHECK_EQUAL(block->transaction(i)->to(), decodedBlock->transaction(i)->to()); + BOOST_CHECK_EQUAL(bcos::asString(block->transaction(i)->input()), + bcos::asString(decodedBlock->transaction(i)->input())); + + BOOST_CHECK_EQUAL( + block->transaction(i)->nonce(), decodedBlock->transaction(i)->nonce()); + BOOST_CHECK_EQUAL( + block->transaction(i)->blockLimit(), decodedBlock->transaction(i)->blockLimit()); + BOOST_CHECK_EQUAL( + block->transaction(i)->chainId(), decodedBlock->transaction(i)->chainId()); + BOOST_CHECK_EQUAL( + block->transaction(i)->groupId(), decodedBlock->transaction(i)->groupId()); + BOOST_CHECK_EQUAL( + block->transaction(i)->importTime(), decodedBlock->transaction(i)->importTime()); + } + } + + BOOST_CHECK_EQUAL(block->receiptsSize(), decodedBlock->receiptsSize()); + for (size_t i = 0; i < block->receiptsSize(); ++i) + { + { + auto lhs = block->receipt(i); + auto rhs = decodedBlock->receipt(i); + + BOOST_CHECK_EQUAL(lhs->hash().hex(), rhs->hash().hex()); + BOOST_CHECK_EQUAL(lhs->version(), rhs->version()); + BOOST_CHECK_EQUAL(lhs->gasUsed(), rhs->gasUsed()); + BOOST_CHECK_EQUAL(lhs->contractAddress(), rhs->contractAddress()); + BOOST_CHECK_EQUAL(lhs->logEntries().size(), rhs->logEntries().size()); + for (auto i = 0u; i < lhs->logEntries().size(); ++i) + { + BOOST_CHECK_EQUAL(lhs->logEntries()[i].address(), rhs->logEntries()[i].address()); + BOOST_CHECK_EQUAL( + lhs->logEntries()[i].topics().size(), rhs->logEntries()[i].topics().size()); + for (auto j = 0u; j < lhs->logEntries()[i].topics().size(); ++j) + { + BOOST_CHECK_EQUAL(lhs->logEntries()[i].topics()[j].hex(), + rhs->logEntries()[i].topics()[j].hex()); + } + BOOST_CHECK_EQUAL( + lhs->logEntries()[i].data().toString(), rhs->logEntries()[i].data().toString()); + } + + BOOST_CHECK_EQUAL(lhs->status(), rhs->status()); + BOOST_CHECK_EQUAL(bcos::asString(lhs->output()), bcos::asString(rhs->output())); + BOOST_CHECK_EQUAL(lhs->blockNumber(), rhs->blockNumber()); + } + // ensure the receipt's lifetime + { + BOOST_CHECK_EQUAL( + block->receipt(i)->hash().hex(), decodedBlock->receipt(i)->hash().hex()); + BOOST_CHECK_EQUAL(block->receipt(i)->version(), decodedBlock->receipt(i)->version()); + BOOST_CHECK_EQUAL(block->receipt(i)->gasUsed(), decodedBlock->receipt(i)->gasUsed()); + BOOST_CHECK_EQUAL( + block->receipt(i)->contractAddress(), decodedBlock->receipt(i)->contractAddress()); + BOOST_CHECK_EQUAL(block->receipt(i)->logEntries().size(), + decodedBlock->receipt(i)->logEntries().size()); + for (auto i = 0u; i < block->receipt(i)->logEntries().size(); ++i) + { + BOOST_CHECK_EQUAL(block->receipt(i)->logEntries()[i].address(), + decodedBlock->receipt(i)->logEntries()[i].address()); + BOOST_CHECK_EQUAL(block->receipt(i)->logEntries()[i].topics().size(), + decodedBlock->receipt(i)->logEntries()[i].topics().size()); + for (auto j = 0u; j < block->receipt(i)->logEntries()[i].topics().size(); ++j) + { + BOOST_CHECK_EQUAL(block->receipt(i)->logEntries()[i].topics()[j].hex(), + decodedBlock->receipt(i)->logEntries()[i].topics()[j].hex()); + } + BOOST_CHECK_EQUAL(block->receipt(i)->logEntries()[i].data().toString(), + decodedBlock->receipt(i)->logEntries()[i].data().toString()); + } + + BOOST_CHECK_EQUAL(block->receipt(i)->status(), decodedBlock->receipt(i)->status()); + BOOST_CHECK_EQUAL(bcos::asString(block->receipt(i)->output()), + bcos::asString(decodedBlock->receipt(i)->output())); + BOOST_CHECK_EQUAL( + block->receipt(i)->blockNumber(), decodedBlock->receipt(i)->blockNumber()); + } + } +} + +BOOST_AUTO_TEST_CASE(blockHeader) +{ + auto header = blockHeaderFactory->createBlockHeader(); + + BOOST_CHECK_EQUAL(header->gasUsed(), bcos::u256(0)); + + header->setNumber(100); + header->setTimestamp(200); + + bcos::u256 gasUsed(1000); + header->setGasUsed(gasUsed); + + bcos::protocol::ParentInfo parentInfo; + parentInfo.blockHash = bcos::crypto::HashType(10000); + parentInfo.blockNumber = 2000; + + std::vector parentInfoList; + parentInfoList.emplace_back(parentInfo); + + header->setParentInfo(parentInfoList); + + bcos::bytes buffer; + header->encode(buffer); + + auto decodedHeader = blockHeaderFactory->createBlockHeader(buffer); + + BOOST_CHECK_EQUAL(header->number(), decodedHeader->number()); + BOOST_CHECK_EQUAL(header->timestamp(), decodedHeader->timestamp()); + BOOST_CHECK_EQUAL(header->gasUsed(), decodedHeader->gasUsed()); + BOOST_CHECK_EQUAL(header->parentInfo().size(), decodedHeader->parentInfo().size()); + for (auto [originParentInfo, decodeParentInfo] : + RANGES::zip_view(header->parentInfo(), decodedHeader->parentInfo())) + { + BOOST_CHECK_EQUAL( + bcos::toString(originParentInfo.blockHash), bcos::toString(decodeParentInfo.blockHash)); + BOOST_CHECK_EQUAL(originParentInfo.blockNumber, decodeParentInfo.blockNumber); + } + + BOOST_CHECK_NO_THROW(header->setExtraData(header->extraData().toBytes())); +} + +BOOST_AUTO_TEST_CASE(emptyBlockHeader) +{ + auto blockHeaderFactory = + std::make_shared(cryptoSuite); + auto transactionFactory = + std::make_shared(cryptoSuite); + auto transactionReceiptFactory = + std::make_shared(cryptoSuite); + bcostars::protocol::BlockFactoryImpl blockFactory( + cryptoSuite, blockHeaderFactory, transactionFactory, transactionReceiptFactory); + + auto block = blockFactory.createBlock(); + + BOOST_CHECK_NO_THROW(block->setBlockHeader(nullptr)); +} + +BOOST_AUTO_TEST_CASE(submitResult) +{ + protocol::TransactionSubmitResultImpl submitResult(nullptr); + submitResult.setNonce(bcos::protocol::NonceType("1234567")); + + BOOST_CHECK_EQUAL(submitResult.nonce().str(), "1234567"); +} + +BOOST_AUTO_TEST_CASE(tarsMovable) +{ + bcostars::Transaction tx1; + tx1.data.chainID = "chainID"; + std::string input("input data for test"); + tx1.data.input.assign(input.begin(), input.end()); + + auto addressTx1 = tx1.data.input.data(); + + bcostars::Transaction tx2 = std::move(tx1); + + BOOST_CHECK_EQUAL((intptr_t)addressTx1, (intptr_t)tx2.data.input.data()); + + BOOST_CHECK_EQUAL((intptr_t)tx1.data.input.data(), (intptr_t) nullptr); +} + +BOOST_AUTO_TEST_CASE(testMemberImpl) +{ + auto memberFactory = std::make_shared(); + auto member = memberFactory->createMember(); + std::string memberID = "testID"; + std::string memberConfig = "testConfig"; + member->setMemberID(memberID); + member->setMemberConfig(memberConfig); + BOOST_CHECK(member->memberID() == memberID); + BOOST_CHECK(member->memberConfig() == memberConfig); + + std::string encodedData; + member->encode(encodedData); + + auto member2 = memberFactory->createMember(encodedData); + BOOST_CHECK(member2->memberID() == memberID); + BOOST_CHECK(member2->memberConfig() == memberConfig); + + // test groupInfoCodec + auto groupInfoCodec = std::make_shared(); + std::string chainID = "test_chain"; + std::string groupID = "groupID"; + std::string genesisConfig = "genesis;"; + std::string iniConfig = "ini"; + + // the nodeInfo + std::string nodeName = "node_test"; + std::string nodeID = "node_tid"; + bcos::group::NodeCryptoType nodeCryptoType = bcos::group::NodeCryptoType::SM_NODE; + bcos::protocol::ProtocolInfo protocolInfo; + protocolInfo.setProtocolModuleID(bcos::protocol::ProtocolModuleID::GatewayService); + protocolInfo.setMaxVersion(10); + protocolInfo.setMinVersion(1); + auto groupInfo = std::make_shared(chainID, groupID); + for (int i = 0; i < 3; i++) + { + auto chainNode = std::make_shared(); + chainNode->setNodeName(nodeName + std::to_string(i)); + chainNode->setNodeCryptoType(nodeCryptoType); + chainNode->appendServiceInfo(bcos::protocol::ServiceType::SCHEDULER, "SCHEDULER"); + chainNode->setIniConfig(iniConfig); + chainNode->setNodeID(nodeID); + chainNode->setCompatibilityVersion(10); + chainNode->setNodeType(bcos::protocol::NodeType::CONSENSUS_NODE); + chainNode->setMicroService(true); + chainNode->setNodeProtocol(protocolInfo); + groupInfo->appendNodeInfo(chainNode); + } + groupInfo->setGenesisConfig(genesisConfig); + groupInfo->setIniConfig(iniConfig); + std::string encodedData2; + groupInfoCodec->serialize(encodedData2, groupInfo); + + auto decodedGroupInfo = groupInfoCodec->deserialize(encodedData2); + BOOST_CHECK(decodedGroupInfo->groupID() == groupID); + BOOST_CHECK(decodedGroupInfo->chainID() == chainID); + BOOST_CHECK(decodedGroupInfo->iniConfig() == iniConfig); + BOOST_CHECK(decodedGroupInfo->genesisConfig() == genesisConfig); + BOOST_CHECK(decodedGroupInfo->nodesNum() == 3); + + auto nodesInfo = decodedGroupInfo->nodeInfos(); + auto firstNodeInfo = nodesInfo.at(nodeName + std::to_string(0)); + BOOST_CHECK(firstNodeInfo->nodeCryptoType() == nodeCryptoType); + BOOST_CHECK(firstNodeInfo->iniConfig() == iniConfig); + BOOST_CHECK(firstNodeInfo->nodeID() == nodeID); + BOOST_CHECK(firstNodeInfo->microService() == true); + BOOST_CHECK(firstNodeInfo->compatibilityVersion() == 10); + BOOST_CHECK(firstNodeInfo->nodeType() == bcos::protocol::NodeType::CONSENSUS_NODE); + BOOST_CHECK(firstNodeInfo->serviceName(bcos::protocol::ServiceType::SCHEDULER) == "SCHEDULER"); + + auto decodedProtocolInfo = firstNodeInfo->nodeProtocol(); + BOOST_CHECK(decodedProtocolInfo->protocolModuleID() == protocolInfo.protocolModuleID()); + BOOST_CHECK(decodedProtocolInfo->maxVersion() == protocolInfo.maxVersion()); + BOOST_CHECK(decodedProtocolInfo->minVersion() == protocolInfo.minVersion()); +} + +void checkExecutionMessage(bcostars::protocol::ExecutionMessageImpl::Ptr executionMsg, + bcostars::protocol::ExecutionMessageImpl::Ptr anotherExecutionMsg) +{ + BOOST_CHECK_EQUAL((int8_t)anotherExecutionMsg->type(), executionMsg->type()); + BOOST_CHECK_EQUAL( + anotherExecutionMsg->transactionHash().hex(), executionMsg->transactionHash().hex()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->contextID(), executionMsg->contextID()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->seq(), executionMsg->seq()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->origin(), executionMsg->origin()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->from(), executionMsg->from()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->to(), executionMsg->to()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->abi(), executionMsg->abi()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->depth(), executionMsg->depth()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->create(), executionMsg->create()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->internalCreate(), executionMsg->internalCreate()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->internalCall(), executionMsg->internalCall()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->gasAvailable(), executionMsg->gasAvailable()); + BOOST_CHECK_EQUAL(*(bcos::toHexString(anotherExecutionMsg->data().toBytes())), + *(bcos::toHexString(executionMsg->data().toBytes()))); + BOOST_CHECK_EQUAL(anotherExecutionMsg->staticCall(), executionMsg->staticCall()); + BOOST_CHECK_EQUAL( + anotherExecutionMsg->createSalt().value(), executionMsg->createSalt().value()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->status(), executionMsg->status()); + BOOST_CHECK_EQUAL(anotherExecutionMsg->message(), executionMsg->message()); + + BOOST_CHECK_EQUAL(anotherExecutionMsg->keyLocks().size(), executionMsg->keyLocks().size()); + auto keyLocks = executionMsg->keyLocks(); + auto anotherKeyLocks = anotherExecutionMsg->keyLocks(); + for (int i = 0; i < 10; i++) + { + BOOST_CHECK_EQUAL(keyLocks[i], anotherKeyLocks[i]); + } +} + +BOOST_AUTO_TEST_CASE(testExecutionMessage) +{ + auto executionMsg = std::make_shared(); + int8_t type = 2; + executionMsg->setType((bcos::protocol::ExecutionMessage::Type)type); + executionMsg->transactionHash(); + + auto txsHash = cryptoSuite->hash("###abc"); + executionMsg->setTransactionHash(txsHash); + int64_t contextID = 10000; + executionMsg->setContextID(contextID); + int64_t seq = 123432; + executionMsg->setSeq(seq); + std::string origin = "abcde"; + executionMsg->setOrigin(origin); + std::string from = "##sdksdf"; + executionMsg->setFrom(from); + std::string to = "### to"; + executionMsg->setTo(to); + std::string abi = "abixx"; + executionMsg->setABI(abi); + int32_t depth = 23; + executionMsg->setDepth(depth); + bool create = false; + executionMsg->setCreate(create); + bool internalCreate = true; + executionMsg->setInternalCreate(internalCreate); + bool internalCall = false; + executionMsg->setInternalCall(internalCall); + int64_t gasAvailable = 23423423; + executionMsg->setGasAvailable(gasAvailable); + std::string dataStr = "abdcsd"; + bcos::bytes data(dataStr.begin(), dataStr.end()); + executionMsg->setData(data); + bool staticCall = false; + executionMsg->setStaticCall(staticCall); + bcos::u256 salt(787667543453); + executionMsg->setCreateSalt(salt); + int status = -1000001; + executionMsg->setStatus(status); + std::string message = "abctest"; + executionMsg->setMessage(message); + + // check + BOOST_CHECK_EQUAL((int8_t)executionMsg->type(), type); + BOOST_CHECK_EQUAL(executionMsg->transactionHash().hex(), txsHash.hex()); + BOOST_CHECK_EQUAL(executionMsg->contextID(), contextID); + BOOST_CHECK_EQUAL(executionMsg->seq(), seq); + BOOST_CHECK_EQUAL(executionMsg->origin(), origin); + BOOST_CHECK_EQUAL(executionMsg->from(), from); + BOOST_CHECK_EQUAL(executionMsg->to(), to); + BOOST_CHECK_EQUAL(executionMsg->abi(), abi); + BOOST_CHECK_EQUAL(executionMsg->depth(), depth); + BOOST_CHECK_EQUAL(executionMsg->create(), create); + BOOST_CHECK_EQUAL(executionMsg->internalCreate(), internalCreate); + BOOST_CHECK_EQUAL(executionMsg->internalCall(), internalCall); + BOOST_CHECK_EQUAL(executionMsg->gasAvailable(), gasAvailable); + BOOST_CHECK_EQUAL( + *(bcos::toHexString(executionMsg->data().toBytes())), *(bcos::toHexString(data))); + BOOST_CHECK_EQUAL(executionMsg->staticCall(), staticCall); + BOOST_CHECK_EQUAL(executionMsg->createSalt().value(), salt); + BOOST_CHECK_EQUAL(executionMsg->status(), status); + BOOST_CHECK_EQUAL(executionMsg->message(), message); + + std::vector keyLocks; + for (int i = 0; i < 10; i++) + { + keyLocks.emplace_back("keyLock" + std::to_string(i)); + } + executionMsg->setKeyLocks(keyLocks); + BOOST_CHECK_EQUAL(executionMsg->keyLocks().size(), 10); + auto keyLocksData = executionMsg->keyLocks(); + for (int i = 0; i < 10; i++) + { + BOOST_CHECK_EQUAL(keyLocksData[i], "keyLock" + std::to_string(i)); + } + auto anotherExecutionMsg = std::make_shared( + [m_inner = executionMsg->inner()]() mutable { return &m_inner; }); + checkExecutionMessage(anotherExecutionMsg, executionMsg); +} +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/test/ProxyCallbackTest.cpp b/bcos-tars-protocol/test/ProxyCallbackTest.cpp new file mode 100644 index 0000000..137fc8c --- /dev/null +++ b/bcos-tars-protocol/test/ProxyCallbackTest.cpp @@ -0,0 +1,149 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for TarsServantProxyCallback + * @author: octopus + * @date 2022-07-24 + */ +#include "bcos-tars-protocol/client/GatewayServiceClient.h" +#include "bcos-tars-protocol/client/LedgerServiceClient.h" +#include "bcos-tars-protocol/client/PBFTServiceClient.h" +#include "bcos-tars-protocol/client/RpcServiceClient.h" +#include "bcos-tars-protocol/client/SchedulerServiceClient.h" +#include "bcos-tars-protocol/client/TxPoolServiceClient.h" +#include "bcos-tars-protocol/tars/GatewayService.h" +#include "bcos-utilities/Exceptions.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::test; +namespace bcostars +{ +namespace test +{ + +BOOST_FIXTURE_TEST_SUITE(TarsServantProxyCallbackTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testTarsServantProxyCallbackTest) +{ + tars::TC_Endpoint ep("127.0.0.1", 1111, 0); + tars::TC_Endpoint ep0("127.0.0.2", 1112, 0); + tars::TC_Endpoint ep1("127.0.0.3", 1113, 0); + + std::string serviceName = "HelloApp.HelloServer.HelloObj"; + + TarsServantProxyCallback cb(serviceName, nullptr); + + int conCount = 0; + cb.setOnConnectHandler([&conCount](const tars::TC_Endpoint& _ep) { conCount++; }); + + int closeCount = 0; + cb.setOnCloseHandler([&closeCount](const tars::TC_Endpoint& _ep) { closeCount++; }); + + std::this_thread::sleep_for(std::chrono::seconds(3)); + + auto activeEndpoints = cb.activeEndpoints(); + auto inactiveEndpoints = cb.inactiveEndpoints(); + + BOOST_CHECK_EQUAL(cb.serviceName(), serviceName); + + BOOST_CHECK_EQUAL(activeEndpoints.size(), 0); + BOOST_CHECK_EQUAL(inactiveEndpoints.size(), 0); + BOOST_CHECK(!cb.available()); + + auto p = cb.addActiveEndpoint(ep); + BOOST_CHECK(p.first); + BOOST_CHECK(p.second == 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 1); + + p = cb.addActiveEndpoint(ep); + BOOST_CHECK(!p.first); + BOOST_CHECK(p.second == 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 1); + + p = cb.addActiveEndpoint(ep); + BOOST_CHECK(!p.first); + BOOST_CHECK(p.second == 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 1); + + p = cb.addInactiveEndpoint(ep); + BOOST_CHECK(p.first); + BOOST_CHECK_EQUAL(p.second, 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 0); + BOOST_CHECK_EQUAL(cb.inactiveEndpoints().size(), 1); + + p = cb.addInactiveEndpoint(ep); + BOOST_CHECK(!p.first); + BOOST_CHECK(p.second == 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 0); + BOOST_CHECK_EQUAL(cb.inactiveEndpoints().size(), 1); + + p = cb.addInactiveEndpoint(ep); + BOOST_CHECK(!p.first); + BOOST_CHECK(p.second == 1); + BOOST_CHECK_EQUAL(cb.activeEndpoints().size(), 0); + BOOST_CHECK_EQUAL(cb.inactiveEndpoints().size(), 1); + + BOOST_CHECK(!cb.available()); + + cb.onConnect(ep); + BOOST_CHECK(cb.available()); + BOOST_CHECK_EQUAL(conCount, 1); + + cb.onConnect(ep0); + BOOST_CHECK(cb.available()); + BOOST_CHECK_EQUAL(conCount, 2); + + cb.onConnect(ep1); + BOOST_CHECK(cb.available()); + BOOST_CHECK_EQUAL(conCount, 3); + + activeEndpoints = cb.activeEndpoints(); + inactiveEndpoints = cb.inactiveEndpoints(); + + BOOST_CHECK_EQUAL(activeEndpoints.size(), 3); + BOOST_CHECK_EQUAL(inactiveEndpoints.size(), 0); + + cb.onClose(ep); + BOOST_CHECK(cb.available()); + BOOST_CHECK_EQUAL(closeCount, 1); + + cb.onClose(ep0); + BOOST_CHECK(cb.available()); + BOOST_CHECK_EQUAL(closeCount, 2); + + cb.onClose(ep1); + BOOST_CHECK(!cb.available()); + BOOST_CHECK_EQUAL(closeCount, 3); + + activeEndpoints = cb.activeEndpoints(); + inactiveEndpoints = cb.inactiveEndpoints(); + + BOOST_CHECK_EQUAL(activeEndpoints.size(), 0); + BOOST_CHECK_EQUAL(inactiveEndpoints.size(), 3); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/test/ServiceClientTest.cpp b/bcos-tars-protocol/test/ServiceClientTest.cpp new file mode 100644 index 0000000..5654690 --- /dev/null +++ b/bcos-tars-protocol/test/ServiceClientTest.cpp @@ -0,0 +1,137 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief test for ServiceClient + * @file ServiceClientTest.h + * @author: yujiechen + * @date 2021-10-13 + */ +#include "bcos-tars-protocol/client/GatewayServiceClient.h" +#include "bcos-tars-protocol/client/LedgerServiceClient.h" +#include "bcos-tars-protocol/client/PBFTServiceClient.h" +#include "bcos-tars-protocol/client/RpcServiceClient.h" +#include "bcos-tars-protocol/client/SchedulerServiceClient.h" +#include "bcos-tars-protocol/client/TxPoolServiceClient.h" +#include "bcos-utilities/Exceptions.h" +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::test; +namespace bcostars +{ +namespace test +{ + +#if 0 + +BOOST_FIXTURE_TEST_SUITE(testServiceClient, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testGatewayService) +{ + bcostars::GatewayServicePrx proxy; + std::make_shared(proxy, "", nullptr); +} + +BOOST_AUTO_TEST_CASE(testPBFTService) +{ + bcostars::PBFTServicePrx proxy; + std::make_shared(proxy); +} + +BOOST_AUTO_TEST_CASE(testRpcService) +{ + bcostars::RpcServicePrx proxy; + std::make_shared(proxy, ""); +} + +BOOST_AUTO_TEST_CASE(testTxPoolService) +{ + bcostars::TxPoolServicePrx proxy; + std::make_shared(proxy, nullptr, nullptr); +} +BOOST_AUTO_TEST_CASE(testLedgerService) +{ + bcostars::LedgerServicePrx prx; + std::make_shared(prx, nullptr); +} +BOOST_AUTO_TEST_CASE(testSchedulerService) +{ + bcostars::SchedulerServicePrx prx; + std::make_shared(prx, nullptr); +} + +BOOST_AUTO_TEST_CASE(testEndPointToString) +{ + { + std::string serviceName = "HelloApp.HelloServant.HelloObj"; + std::string host = "127.0.0.1"; + uint16_t port = 1111; + + auto r = endPointToString(serviceName, host, port); + BOOST_CHECK_EQUAL(r, "HelloApp.HelloServant.HelloObj@tcp -h 127.0.0.1 -p 1111"); + } + + { + std::string serviceName = "HelloApp.HelloServant.HelloObj"; + std::string host = "127.0.0.1"; + uint16_t port = 12345; + + tars::TC_Endpoint endPoint(host, port, 0); + + auto r = endPointToString(serviceName, host, port); + BOOST_CHECK_EQUAL(r, "HelloApp.HelloServant.HelloObj@tcp -h 127.0.0.1 -p 12345"); + } + + { + std::string serviceName = "HelloApp.HelloServant.HelloObj"; + std::vector endPoints; + BOOST_CHECK_THROW(endPointToString(serviceName, endPoints), bcos::InvalidParameter); + } + + { + std::string serviceName = "HelloApp.HelloServant.HelloObj"; + + std::string host0 = "127.0.0.1"; + uint16_t port0 = 11111; + tars::TC_Endpoint endPoint0(host0, port0, 0); + + std::string host1 = "127.0.0.2"; + uint16_t port1 = 22222; + tars::TC_Endpoint endPoint1(host1, port1, 0); + + std::string host2 = "127.0.0.3"; + uint16_t port2 = 33333; + tars::TC_Endpoint endPoint2(host2, port2, 0); + + std::vector endPoints; + endPoints.push_back(endPoint0); + endPoints.push_back(endPoint1); + endPoints.push_back(endPoint2); + + auto r = endPointToString(serviceName, endPoints); + BOOST_CHECK_EQUAL( + "HelloApp.HelloServant.HelloObj@tcp -h 127.0.0.1 -p 11111:tcp -h 127.0.0.2 -p " + "22222:tcp -h 127.0.0.3 -p 33333", + r); + } +} + +BOOST_AUTO_TEST_SUITE_END() + +#endif +} // namespace test +} // namespace bcostars \ No newline at end of file diff --git a/bcos-tars-protocol/test/main.cpp b/bcos-tars-protocol/test/main.cpp new file mode 100644 index 0000000..0e27edc --- /dev/null +++ b/bcos-tars-protocol/test/main.cpp @@ -0,0 +1,3 @@ +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/bcos-tool/CMakeLists.txt b/bcos-tool/CMakeLists.txt new file mode 100644 index 0000000..76dd590 --- /dev/null +++ b/bcos-tool/CMakeLists.txt @@ -0,0 +1,50 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-tool +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-tool +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + + +project(bcos-tool VERSION ${VERSION}) + +find_package(Boost REQUIRED COMPONENTS serialization) +find_package(jsoncpp CONFIG REQUIRED) +find_package(tarscpp REQUIRED) +find_package(TBB REQUIRED) + +file(GLOB SRCS bcos-tool/*.cpp) +add_library(${TOOL_TARGET} ${SRCS}) +target_include_directories(${TOOL_TARGET} PUBLIC + $ +) +target_link_libraries(${TOOL_TARGET} PUBLIC ${TABLE_TARGET} ${UTILITIES_TARGET} bcos-framework jsoncpp_static tarscpp::tarsservant tarscpp::tarsutil TBB::tbb) + +if(TESTS) + enable_testing() + set(ENV{CTEST_OUTPUT_ON_FAILURE} True) + add_subdirectory(test) +endif() + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("tool-cov" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () + +include(GNUInstallDirs) +install(TARGETS ${TOOL_TARGET} EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") \ No newline at end of file diff --git a/bcos-tool/bcos-tool/BfsFileFactory.cpp b/bcos-tool/bcos-tool/BfsFileFactory.cpp new file mode 100644 index 0000000..f5ea283 --- /dev/null +++ b/bcos-tool/bcos-tool/BfsFileFactory.cpp @@ -0,0 +1,166 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BfsFileFactory.cpp + * @author: kyonGuo + * @date 2022/10/18 + */ + +#include "BfsFileFactory.h" +#include +#include +#include +#include + +using namespace bcos::tool; +using namespace bcos::storage; + +void BfsFileFactory::buildAsync(bcos::storage::StorageInterface::Ptr const& _storage, + std::string_view fileName, FileType fileType, std::function _callback) +{ + _storage->asyncOpenTable(fileName, + [_callback = std::move(_callback), fileType](auto&& _error, std::optional
&& _table) { + if (_error) + { + _callback(std::forward(_error)); + return; + } + if (!_table.has_value()) + { + _callback(BCOS_ERROR_UNIQUE_PTR(-1, "Table not exist")); + return; + } + bool buildRet = false; + switch (fileType) + { + case DIRECTOR: + buildRet = buildDir(_table.value()); + break; + case LINK: + buildRet = buildLink(_table.value(), "", ""); + break; + case AUTH: + buildRet = buildAuth(_table.value(), ""); + break; + case CONTRACT: + buildRet = buildContract(_table.value()); + break; + } + _callback(buildRet ? nullptr : BCOS_ERROR_UNIQUE_PTR(-1, "Build BFS file error.")); + }); +} + +std::optional
BfsFileFactory::createDir( + const bcos::storage::StorageInterface::Ptr& _storage, std::string _table) +{ + std::promise>> createPromise; + _storage->asyncCreateTable(std::move(_table), std::string(FS_DIR_FIELDS), + [&createPromise](auto&& error, std::optional
&& _table) { + createPromise.set_value({std::forward(error), std::move(_table)}); + }); + auto [createError, table] = createPromise.get_future().get(); + if (createError) + { + BOOST_THROW_EXCEPTION(*createError); + } + return table; +} + +bool BfsFileFactory::buildDir(Table& _table) +{ + return false; +} + +void BfsFileFactory::buildDirEntry( + storage::Entry& _mutableEntry, std::variant fileType) +{ + std::string_view type; + std::visit( + [&type](const auto& _type) { + using T = std::decay_t; + if constexpr (std::is_same_v) + { + type = _type; + } + else if constexpr (std::is_same_v) + { + if (_type == FileType::DIRECTOR) + type = FS_TYPE_DIR; + else if (_type == FileType::LINK) + type = FS_TYPE_LINK; + else + type = FS_TYPE_CONTRACT; + } + }, + fileType); + _mutableEntry.setObject>({type.data(), "0", "0", "", "", ""}); +} + +bool BfsFileFactory::buildLink( + Table& _table, const std::string& _address, const std::string& _abi, const std::string& name) +{ + Entry tEntry; + tEntry.importFields({std::string(FS_TYPE_LINK)}); + _table.setRow(FS_KEY_TYPE, std::move(tEntry)); + + Entry linkEntry; + linkEntry.importFields({_address}); + _table.setRow(FS_LINK_ADDRESS, std::move(linkEntry)); + + if (!_abi.empty()) + { + BCOS_LOG(TRACE) << LOG_BADGE("BFS") << "buildLink with abi" + << LOG_KV("abiSize", _abi.size()); + Entry abiEntry; + abiEntry.importFields({_abi}); + _table.setRow(FS_LINK_ABI, std::move(abiEntry)); + } + + if (!name.empty()) + { + Entry nameEntry; + nameEntry.importFields({name}); + _table.setRow(FS_KEY_NAME, std::move(nameEntry)); + } + + return true; +} +bool BfsFileFactory::buildAuth(Table& _table, const std::string& _admin) +{ + Entry adminEntry; + adminEntry.importFields({_admin}); + _table.setRow(ADMIN_FIELD, std::move(adminEntry)); + + Entry statusEntry; + statusEntry.importFields({"normal"}); + _table.setRow(STATUS_FIELD, std::move(statusEntry)); + + Entry emptyType; + emptyType.importFields({""}); + _table.setRow(METHOD_AUTH_TYPE, std::move(emptyType)); + + Entry emptyWhite; + emptyWhite.importFields({""}); + _table.setRow(METHOD_AUTH_WHITE, std::move(emptyWhite)); + + Entry emptyBlack; + emptyBlack.importFields({""}); + _table.setRow(METHOD_AUTH_BLACK, std::move(emptyBlack)); + return true; +} +bool BfsFileFactory::buildContract(Table& _table) +{ + return false; +} diff --git a/bcos-tool/bcos-tool/BfsFileFactory.h b/bcos-tool/bcos-tool/BfsFileFactory.h new file mode 100644 index 0000000..c6c3284 --- /dev/null +++ b/bcos-tool/bcos-tool/BfsFileFactory.h @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BfsFileFactory.h + * @author: kyonGuo + * @date 2022/10/18 + */ + +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos::tool +{ +/// BFS base dir +constexpr static const std::string_view FS_ROOT{"/"}; +constexpr static const std::string_view FS_APPS{"/apps"}; +constexpr static const std::string_view FS_USER{"/usr"}; +constexpr static const std::string_view FS_SYS_BIN{"/sys"}; +constexpr static const std::string_view FS_USER_TABLE{"/tables"}; +constexpr static const uint8_t FS_ROOT_SUB_COUNT = 5; +constexpr static const std::array FS_ROOT_SUBS = { + FS_ROOT, FS_APPS, FS_USER, FS_USER_TABLE, FS_SYS_BIN}; + +// not use in version > 3.1.0 +constexpr static const std::string_view FS_KEY_SUB{"sub"}; +constexpr static const std::string_view FS_KEY_NAME{"name"}; +constexpr static const std::string_view FS_KEY_TYPE{"type"}; +constexpr static const std::string_view FS_KEY_STAT{"status"}; +constexpr static const std::string_view FS_ACL_TYPE{"acl_type"}; +constexpr static const std::string_view FS_ACL_WHITE{"acl_white"}; +constexpr static const std::string_view FS_ACL_BLACK{"acl_black"}; +constexpr static const std::string_view FS_KEY_EXTRA{"extra"}; +constexpr static const std::array FS_FIELDS = { + FS_KEY_TYPE, FS_KEY_STAT, FS_ACL_TYPE, FS_ACL_WHITE, FS_ACL_BLACK, FS_KEY_EXTRA}; +// static const auto FS_DIR_FIELDS = boost::join( +// FS_FIELDS | RANGES::views::transform([](auto& str) -> std::string { return std::string(str); +// }), +// ","); +constexpr static const std::string_view FS_DIR_FIELDS{ + "type,status,acl_type,acl_white,acl_black,extra"}; + +/// BFS file type +constexpr static const std::string_view FS_TYPE_DIR{"directory"}; +constexpr static const std::string_view FS_TYPE_CONTRACT{"contract"}; +constexpr static const std::string_view FS_TYPE_LINK{"link"}; + +/// BFS link type +constexpr static const std::string_view FS_LINK_ADDRESS{"link_address"}; +constexpr static const std::string_view FS_LINK_ABI{"link_abi"}; + +/// auth +constexpr static const std::string_view CONTRACT_SUFFIX{"_accessAuth"}; +constexpr static const std::string_view ADMIN_FIELD{"admin"}; +constexpr static const std::string_view STATUS_FIELD{"status"}; +constexpr static const std::string_view METHOD_AUTH_TYPE{"method_auth_type"}; +constexpr static const std::string_view METHOD_AUTH_WHITE{"method_auth_white"}; +constexpr static const std::string_view METHOD_AUTH_BLACK{"method_auth_black"}; + +enum FileType : uint16_t +{ + DIRECTOR = 0, + LINK = 1, + AUTH = 2, + CONTRACT = 3, +}; +class BfsFileFactory +{ +public: + BfsFileFactory() = delete; + ~BfsFileFactory() = default; + BfsFileFactory(const BfsFileFactory&) = delete; + BfsFileFactory(BfsFileFactory&&) noexcept = delete; + BfsFileFactory& operator=(const BfsFileFactory&) = delete; + BfsFileFactory& operator=(BfsFileFactory&&) noexcept = delete; + static void buildAsync(bcos::storage::StorageInterface::Ptr const& _storage, + std::string_view fileName, FileType fileType, + std::function _callback); + + static bool buildDir(storage::Table& _table); + // sync create dir + static std::optional createDir( + bcos::storage::StorageInterface::Ptr const& _storage, std::string _table); + static void buildDirEntry( + storage::Entry& _mutableEntry, std::variant fileType); + static bool buildLink(storage::Table& _table, const std::string& _address, + const std::string& _abi, const std::string& name = ""); + static bool buildAuth(storage::Table& _table, const std::string& _admin); + static bool buildContract(storage::Table& _table); +}; +} // namespace bcos::tool diff --git a/bcos-tool/bcos-tool/ConsensusNode.h b/bcos-tool/bcos-tool/ConsensusNode.h new file mode 100644 index 0000000..f3e4fe4 --- /dev/null +++ b/bcos-tool/bcos-tool/ConsensusNode.h @@ -0,0 +1,70 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::ledger +{ +struct ConsensusNode +{ + ConsensusNode(){}; + ConsensusNode(std::string _nodeID, u256 _weight, std::string _type, std::string _enableNumber) + : nodeID(std::move(_nodeID)), + weight(_weight), + type(std::move(_type)), + enableNumber(std::move(_enableNumber)) + {} + + std::string nodeID; + u256 weight; + std::string type; + std::string enableNumber; + + template + void serialize(Archive& ar, const unsigned int version) + { + boost::ignore_unused(version); + ar& nodeID; + ar& weight; + ar& type; + ar& enableNumber; + } +}; + +using ConsensusNodeList = std::vector; + +inline ConsensusNodeList decodeConsensusList(const std::string_view& value) +{ + boost::iostreams::stream inputStream( + value.data(), value.size()); + boost::archive::binary_iarchive archive(inputStream, + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking); + + ConsensusNodeList consensusList; + archive >> consensusList; + + return consensusList; +} + +inline std::string encodeConsensusList(const ConsensusNodeList& consensusList) +{ + std::string value; + boost::iostreams::stream> outputStream(value); + boost::archive::binary_oarchive archive(outputStream, + boost::archive::no_header | boost::archive::no_codecvt | boost::archive::no_tracking); + + archive << consensusList; + outputStream.flush(); + + return value; +} + +} // namespace bcos::ledger \ No newline at end of file diff --git a/bcos-tool/bcos-tool/Exceptions.h b/bcos-tool/bcos-tool/Exceptions.h new file mode 100644 index 0000000..c70e1bb --- /dev/null +++ b/bcos-tool/bcos-tool/Exceptions.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief exceptions for tool + * @file Exceptions.h + * @author: yujiechen + * @date: 2021-03-16 + */ +#pragma once +#include +namespace bcos +{ +namespace tool +{ +DERIVE_BCOS_EXCEPTION(LedgerConfigFetcherException); +DERIVE_BCOS_EXCEPTION(InvalidConfig); +DERIVE_BCOS_EXCEPTION(InvalidVersion); + +class ExceptionHolder +{ +public: + auto run(std::invocable auto&& func) noexcept + { + try + { + return func(); + } + catch (...) + { + m_exception = std::current_exception(); + } + } + + void rethrow() + { + if (m_exception) + { + std::rethrow_exception(m_exception); + } + } + +private: + std::exception_ptr m_exception; +}; +} // namespace tool +} // namespace bcos diff --git a/bcos-tool/bcos-tool/LedgerConfigFetcher.cpp b/bcos-tool/bcos-tool/LedgerConfigFetcher.cpp new file mode 100644 index 0000000..7e48b45 --- /dev/null +++ b/bcos-tool/bcos-tool/LedgerConfigFetcher.cpp @@ -0,0 +1,204 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Public function to get information from Ledger + * @file LedgerConfigFetcher.cpp + * @author: yujiechen + * @date 2021-05-19 + */ +#include "LedgerConfigFetcher.h" +#include "Exceptions.h" +#include "VersionConverter.h" +#include +#include +#include +#include +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::consensus; +using namespace bcos::tool; +using namespace bcos::ledger; + +void LedgerConfigFetcher::fetchBlockNumberAndHash() +{ + std::promise> blockNumberPromise; + m_ledger->asyncGetBlockNumber([&blockNumberPromise](Error::Ptr _error, BlockNumber _number) { + blockNumberPromise.set_value(std::make_pair(_error, _number)); + }); + auto ret = blockNumberPromise.get_future().get(); + auto error = ret.first; + if (error) + { + TOOL_LOG(WARNING) << LOG_DESC("LedgerConfigFetcher: fetchBlockNumber failed") + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()); + BOOST_THROW_EXCEPTION(LedgerConfigFetcherException() + << errinfo_comment("LedgerConfigFetcher: fetchBlockNumber failed ")); + } + auto blockNumber = ret.second; + m_ledgerConfig->setBlockNumber(blockNumber); + TOOL_LOG(INFO) << LOG_DESC("LedgerConfigFetcher: fetchBlockNumber success") + << LOG_KV("blockNumber", blockNumber); + // fetch blockHash + auto hash = fetchBlockHash(blockNumber); + TOOL_LOG(INFO) << LOG_DESC("LedgerConfigFetcher: fetchBlockHash success") + << LOG_KV("blockNumber", blockNumber) << LOG_KV("hash", hash.abridged()); + m_ledgerConfig->setHash(hash); +} + +void LedgerConfigFetcher::fetchGenesisHash() +{ + m_genesisHash = fetchBlockHash(0); + TOOL_LOG(INFO) << LOG_DESC("fetchGenesisHash success") + << LOG_KV("genesisHash", m_genesisHash.abridged()); +} + +HashType LedgerConfigFetcher::fetchBlockHash(BlockNumber _blockNumber) +{ + std::promise> hashPromise; + m_ledger->asyncGetBlockHashByNumber( + _blockNumber, [&hashPromise](Error::Ptr _error, HashType _hash) { + hashPromise.set_value(std::make_pair(_error, _hash)); + }); + auto result = hashPromise.get_future().get(); + auto error = result.first; + if (error) + { + TOOL_LOG(WARNING) << LOG_DESC("LedgerConfigFetcher: fetchBlockHash failed") + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()) + << LOG_KV("number", _blockNumber); + BOOST_THROW_EXCEPTION(LedgerConfigFetcherException() + << errinfo_comment("LedgerConfigFetcher: fetchBlockHash failed ")); + } + return result.second; +} + + +std::string LedgerConfigFetcher::fetchSystemConfig(std::string_view _key) +{ + std::promise> systemConfigPromise; + m_ledger->asyncGetSystemConfigByKey(_key, + [&systemConfigPromise](Error::Ptr _error, std::string _sysValue, BlockNumber _blockNumber) { + systemConfigPromise.set_value(std::tuple(_error, _sysValue, _blockNumber)); + }); + auto ret = systemConfigPromise.get_future().get(); + auto error = std::get<0>(ret); + if (error) + { + TOOL_LOG(WARNING) << LOG_DESC("fetchSystemConfig failed") + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMessage", error->errorMessage()) << LOG_KV("key", _key); + BOOST_THROW_EXCEPTION( + LedgerConfigFetcherException() + << errinfo_comment("LedgerConfigFetcher: fetchSystemConfig for " + std::string{_key} + " failed")); + } + return std::get<1>(ret); +} + +ConsensusNodeListPtr LedgerConfigFetcher::fetchNodeListByNodeType(std::string_view _type) +{ + std::promise> nodeListPromise; + m_ledger->asyncGetNodeListByType( + _type, [&nodeListPromise](Error::Ptr _error, ConsensusNodeListPtr _nodes) { + nodeListPromise.set_value(std::make_pair(_error, _nodes)); + }); + auto ret = nodeListPromise.get_future().get(); + auto error = ret.first; + if (error) + { + TOOL_LOG(WARNING) << LOG_DESC("fetchNodeListByNodeType failed") << LOG_KV("type", _type) + << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + BOOST_THROW_EXCEPTION( + LedgerConfigFetcherException() << errinfo_comment( + "LedgerConfigFetcher: fetchNodeListByNodeType of type " + std::string{_type} + " failed")); + } + return ret.second; +} + +void LedgerConfigFetcher::fetchConsensusNodeList() +{ + auto consensusNodeList = fetchNodeListByNodeType(CONSENSUS_SEALER); + TOOL_LOG(INFO) << LOG_DESC("fetchConsensusNodeList success") + << LOG_KV("size", consensusNodeList->size()); + m_ledgerConfig->setConsensusNodeList(*consensusNodeList); +} + +void LedgerConfigFetcher::fetchObserverNodeList() +{ + auto observerList = fetchNodeListByNodeType(CONSENSUS_OBSERVER); + TOOL_LOG(INFO) << LOG_DESC("fetchObserverNodeList success") + << LOG_KV("size", observerList->size()); + m_ledgerConfig->setObserverNodeList(*observerList); +} + +void LedgerConfigFetcher::fetchConsensusLeaderPeriod() +{ + auto ret = fetchSystemConfig(SYSTEM_KEY_CONSENSUS_LEADER_PERIOD); + TOOL_LOG(INFO) << LOG_DESC("fetchConsensusLeaderPeriod success") << LOG_KV("value", ret); + m_ledgerConfig->setLeaderSwitchPeriod(boost::lexical_cast(ret)); +} + +void LedgerConfigFetcher::fetchBlockTxCountLimit() +{ + auto ret = fetchSystemConfig(SYSTEM_KEY_TX_COUNT_LIMIT); + TOOL_LOG(INFO) << LOG_DESC("fetchBlockTxCountLimit success") << LOG_KV("value", ret); + m_ledgerConfig->setBlockTxCountLimit(boost::lexical_cast(ret)); +} + +void LedgerConfigFetcher::fetchNonceList(BlockNumber _startNumber, int64_t _offset) +{ + std::promise>>> + noncePromise; + m_ledger->asyncGetNonceList(_startNumber, _offset, + [&noncePromise]( + Error::Ptr _error, std::shared_ptr> _nonceList) { + noncePromise.set_value(std::make_pair(_error, _nonceList)); + }); + auto ret = noncePromise.get_future().get(); + auto error = ret.first; + if (error) + { + TOOL_LOG(WARNING) << LOG_DESC("LedgerConfigFetcher: fetchNonceList failed") + << LOG_KV("errorCode", error->errorCode()) + << LOG_KV("errorMsg", error->errorMessage()) + << LOG_KV("startNumber", _startNumber) << LOG_KV("offset", _offset); + BOOST_THROW_EXCEPTION(LedgerConfigFetcherException() << errinfo_comment( + "LedgerConfigFetcher: fetchNonceList failed, start: " + + boost::lexical_cast(_startNumber) + + ", offset:" + boost::lexical_cast(_offset))); + } + m_nonceList = ret.second; +} + +void LedgerConfigFetcher::fetchCompatibilityVersion() +{ + TOOL_LOG(INFO) << LOG_DESC("fetchCompatibilityVersion"); + auto versionStr = fetchSystemConfig(SYSTEM_KEY_COMPATIBILITY_VERSION); + if (versionStr.empty()) + { + m_ledgerConfig->setCompatibilityVersion((uint32_t)(bcos::protocol::DEFAULT_VERSION)); + TOOL_LOG(INFO) << LOG_DESC("fetchCompatibilityVersion: empty version, use " + + bcos::protocol::V3_1_VERSION_STR + " as default version."); + return; + } + auto version = toVersionNumber(versionStr); + m_ledgerConfig->setCompatibilityVersion(version); + TOOL_LOG(INFO) << LOG_DESC("fetchCompatibilityVersion success") << LOG_KV("version", versionStr) + << LOG_KV("versionNumber", version) + << LOG_KV("minSupportedVersion", g_BCOSConfig.minSupportedVersion()) + << LOG_KV("maxSupportedVersion", g_BCOSConfig.maxSupportedVersion()); +} \ No newline at end of file diff --git a/bcos-tool/bcos-tool/LedgerConfigFetcher.h b/bcos-tool/bcos-tool/LedgerConfigFetcher.h new file mode 100644 index 0000000..8b7b4a1 --- /dev/null +++ b/bcos-tool/bcos-tool/LedgerConfigFetcher.h @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Public function to get information from Ledger + * @file LedgerConfigFetcher.h + * @author: yujiechen + * @date 2021-05-19 + */ +#pragma once +#include "bcos-framework/ledger/LedgerConfig.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include + +#define TOOL_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TOOL") + +namespace bcos +{ +namespace tool +{ +class LedgerConfigFetcher : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + explicit LedgerConfigFetcher(bcos::ledger::LedgerInterface::Ptr _ledger) + : m_ledger(_ledger), m_ledgerConfig(std::make_shared()) + {} + + virtual ~LedgerConfigFetcher() {} + + virtual void fetchBlockNumberAndHash(); + virtual void fetchConsensusNodeList(); + virtual void fetchObserverNodeList(); + virtual void fetchBlockTxCountLimit(); + virtual void fetchGenesisHash(); + virtual void fetchNonceList(protocol::BlockNumber _startNumber, int64_t _offset); + virtual void fetchConsensusLeaderPeriod(); + + // consensus_leader_period + virtual bcos::ledger::LedgerConfig::Ptr ledgerConfig() { return m_ledgerConfig; } + virtual std::shared_ptr> nonceList() + { + return m_nonceList; + } + virtual bcos::crypto::HashType const& genesisHash() const { return m_genesisHash; } + + virtual void fetchCompatibilityVersion(); + + virtual bcos::crypto::HashType fetchBlockHash(bcos::protocol::BlockNumber _blockNumber); + +protected: + virtual std::string fetchSystemConfig(std::string_view _key); + virtual bcos::consensus::ConsensusNodeListPtr fetchNodeListByNodeType(std::string_view _type); + + bcos::ledger::LedgerInterface::Ptr m_ledger; + bcos::ledger::LedgerConfig::Ptr m_ledgerConfig; + std::shared_ptr> m_nonceList; + bcos::crypto::HashType m_genesisHash; +}; +} // namespace tool +} // namespace bcos \ No newline at end of file diff --git a/bcos-tool/bcos-tool/NodeConfig.cpp b/bcos-tool/bcos-tool/NodeConfig.cpp new file mode 100644 index 0000000..01cea1b --- /dev/null +++ b/bcos-tool/bcos-tool/NodeConfig.cpp @@ -0,0 +1,956 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief configuration for the node + * @file NodeConfig.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "NodeConfig.h" +#include "VersionConverter.h" +#include "bcos-framework/bcos-framework/protocol/Protocol.h" +#include "bcos-framework/consensus/ConsensusNode.h" +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/protocol/ServiceDesc.h" +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/FileUtility.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_BLOCK_LIMIT 5000 + +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::tool; +using namespace bcos::consensus; +using namespace bcos::ledger; +using namespace bcos::protocol; + +NodeConfig::NodeConfig(KeyFactory::Ptr _keyFactory) + : m_keyFactory(_keyFactory), m_ledgerConfig(std::make_shared()) +{} + +void NodeConfig::loadConfig(boost::property_tree::ptree const& _pt, bool _enforceMemberID, + bool _enforceChainConfig, bool _enforceGroupId) +{ + // if version < 3.1.0, config.ini include chainConfig + if (_enforceChainConfig || + (m_compatibilityVersion < (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION && + m_compatibilityVersion >= (uint32_t)bcos::protocol::BlockVersion::MIN_VERSION)) + { + loadChainConfig(_pt, _enforceGroupId); + } + loadCertConfig(_pt); + loadRpcConfig(_pt); + loadGatewayConfig(_pt); + loadSealerConfig(_pt); + loadTxPoolConfig(_pt); + loadStorageSecurityConfig(_pt); + + loadFailOverConfig(_pt, _enforceMemberID); + loadSecurityConfig(_pt); + loadStorageConfig(_pt); + loadConsensusConfig(_pt); + loadOthersConfig(_pt); +} + +void NodeConfig::loadGenesisConfig(boost::property_tree::ptree const& _genesisConfig) +{ + // if version >= 3.1.0, genesisBlock include chainConfig + m_compatibilityVersionStr = _genesisConfig.get( + "version.compatibility_version", bcos::protocol::RC4_VERSION_STR); + m_compatibilityVersion = toVersionNumber(m_compatibilityVersionStr); + if (m_compatibilityVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + loadChainConfig(_genesisConfig, true); + } + loadLedgerConfig(_genesisConfig); + loadExecutorConfig(_genesisConfig); + generateGenesisData(); +} + +std::string NodeConfig::getServiceName(boost::property_tree::ptree const& _pt, + std::string const& _configSection, std::string const& _objName, + std::string const& _defaultValue, bool _require) +{ + auto serviceName = _pt.get(_configSection, _defaultValue); + if (!_require) + { + return serviceName; + } + checkService(_configSection, serviceName); + return getPrxDesc(serviceName, _objName); +} + +void NodeConfig::loadRpcServiceConfig(boost::property_tree::ptree const& _pt) +{ + // rpc service name + m_rpcServiceName = getServiceName(_pt, "service.rpc", RPC_SERVANT_NAME); + NodeConfig_LOG(INFO) << LOG_DESC("loadServiceConfig") + << LOG_KV("rpcServiceName", m_rpcServiceName); +} + +void NodeConfig::loadGatewayServiceConfig(boost::property_tree::ptree const& _pt) +{ + // gateway service name + m_gatewayServiceName = getServiceName(_pt, "service.gateway", GATEWAY_SERVANT_NAME); + NodeConfig_LOG(INFO) << LOG_DESC("loadServiceConfig") + << LOG_KV("gatewayServiceName", m_gatewayServiceName); +} +void NodeConfig::loadServiceConfig(boost::property_tree::ptree const& _pt) +{ + loadGatewayServiceConfig(_pt); + loadRpcServiceConfig(_pt); + + /* + [service] + without_tars_framework = true + tars_proxy_conf = tars_proxy.ini + */ + + auto withoutTarsFramework = _pt.get("service.without_tars_framework", false); + m_withoutTarsFramework = withoutTarsFramework; + + NodeConfig_LOG(INFO) << LOG_DESC("loadServiceConfig") + << LOG_KV("withoutTarsFramework", m_withoutTarsFramework); + + if (m_withoutTarsFramework) + { + std::string tarsProxyConf = + _pt.get("service.tars_proxy_conf", "./tars_proxy.ini"); + loadTarsProxyConfig(tarsProxyConf); + } +} + +void NodeConfig::loadWithoutTarsFrameworkConfig(boost::property_tree::ptree const& _pt) +{ + /* + [service] + without_tars_framework = true + tars_proxy_conf = conf/tars_proxy.ini + */ + + auto withoutTarsFramework = _pt.get("service.without_tars_framework", false); + m_withoutTarsFramework = withoutTarsFramework; + + NodeConfig_LOG(INFO) << LOG_DESC("loadWithoutTarsFrameworkConfig") + << LOG_KV("withoutTarsFramework", m_withoutTarsFramework); +} + +void NodeConfig::loadNodeServiceConfig( + std::string const& _nodeID, boost::property_tree::ptree const& _pt, bool _require) +{ + auto nodeName = _pt.get("service.node_name", ""); + if (nodeName.size() == 0) + { + nodeName = _nodeID; + } + if (!isalNumStr(nodeName)) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("The node name must be number or digit")); + } + + /* + [service] + without_tars_framework = true + tars_proxy_conf = conf/tars_proxy.ini + */ + + auto withoutTarsFramework = _pt.get("service.without_tars_framework", false); + m_withoutTarsFramework = withoutTarsFramework; + + NodeConfig_LOG(INFO) << LOG_DESC("loadNodeServiceConfig") + << LOG_KV("withoutTarsFramework", m_withoutTarsFramework); + + if (m_withoutTarsFramework) + { + std::string tarsProxyConf = + _pt.get("service.tars_proxy_conf", "conf/tars_proxy.ini"); + loadTarsProxyConfig(tarsProxyConf); + } + + m_nodeName = nodeName; + m_schedulerServiceName = getServiceName(_pt, "service.scheduler", SCHEDULER_SERVANT_NAME, + getDefaultServiceName(nodeName, SCHEDULER_SERVICE_NAME), _require); + m_executorServiceName = getServiceName(_pt, "service.executor", EXECUTOR_SERVANT_NAME, + getDefaultServiceName(nodeName, EXECUTOR_SERVICE_NAME), _require); + m_txpoolServiceName = getServiceName(_pt, "service.txpool", TXPOOL_SERVANT_NAME, + getDefaultServiceName(nodeName, TXPOOL_SERVICE_NAME), _require); + + NodeConfig_LOG(INFO) << LOG_DESC("load node service") << LOG_KV("nodeName", m_nodeName) + << LOG_KV("withoutTarsFramework", m_withoutTarsFramework) + << LOG_KV("schedulerServiceName", m_schedulerServiceName) + << LOG_KV("executorServiceName", m_executorServiceName); +} + +void NodeConfig::loadTarsProxyConfig(const std::string& _tarsProxyConf) +{ + if (!m_tarsSN2EndPoints.empty()) + { + NodeConfig_LOG(INFO) << LOG_BADGE("loadTarsProxyConfig") + << LOG_DESC("tars proxy config has been loaded"); + return; + } + + boost::property_tree::ptree pt; + try + { + boost::property_tree::read_ini(_tarsProxyConf, pt); + + loadServiceTarsProxyConfig("front", pt); + loadServiceTarsProxyConfig("rpc", pt); + loadServiceTarsProxyConfig("gateway", pt); + loadServiceTarsProxyConfig("executor", pt); + loadServiceTarsProxyConfig("txpool", pt); + loadServiceTarsProxyConfig("scheduler", pt); + loadServiceTarsProxyConfig("pbft", pt); + loadServiceTarsProxyConfig("ledger", pt); + + NodeConfig_LOG(INFO) << LOG_BADGE("loadTarsProxyConfig") + << LOG_KV("tars service endpoints size", m_tarsSN2EndPoints.size()); + } + catch (const std::exception& e) + { + NodeConfig_LOG(ERROR) << LOG_BADGE("loadTarsProxyConfig") + << LOG_DESC("load tars proxy config failed") << LOG_KV("e", e.what()) + << LOG_KV("tarsProxyConf", _tarsProxyConf); + + BOOST_THROW_EXCEPTION(InvalidParameter() << errinfo_comment( + "Load tars proxy config failed, e: " + std::string(e.what()))); + } +} + +void NodeConfig::loadServiceTarsProxyConfig( + const std::string& _serviceName, boost::property_tree::ptree const& _pt) +{ + if (!_pt.get_child_optional(_serviceName)) + { + NodeConfig_LOG(WARNING) << LOG_BADGE("loadServiceTarsProxyConfig") + << LOG_DESC("service name not exist") + << LOG_KV("serviceName", _serviceName); + return; + } + + for (auto const& it : _pt.get_child(_serviceName)) + { + if (it.first.find("proxy.") != 0) + { + continue; + } + + std::string data = it.second.data(); + + // string to endpoint + tars::TC_Endpoint endpoint = bcostars::string2TarsEndPoint(data); + m_tarsSN2EndPoints[_serviceName].push_back(endpoint); + + NodeConfig_LOG(INFO) << LOG_BADGE("loadTarsProxyConfig") << LOG_DESC("add element") + << LOG_KV("serviceName", _serviceName) + << LOG_KV("endpoint", endpoint.toString()); + } + + NodeConfig_LOG(INFO) << LOG_BADGE("loadTarsProxyConfig") << LOG_KV("serviceName", _serviceName) + << LOG_KV("endpoints size", m_tarsSN2EndPoints[_serviceName].size()); +} + +// +void NodeConfig::getTarsClientProxyEndpoints( + const std::string& _clientPrx, std::vector& _endpoints) +{ + if (!m_withoutTarsFramework) + { + NodeConfig_LOG(TRACE) << LOG_BADGE("getTarsClientProxyEndpoints") + << "not work with tars rpc" + << LOG_KV("withoutTarsFramework", m_withoutTarsFramework); + return; + } + + _endpoints.clear(); + + auto it = m_tarsSN2EndPoints.find(boost::to_lower_copy(_clientPrx)); + if (it != m_tarsSN2EndPoints.end()) + { + _endpoints = it->second; + + NodeConfig_LOG(INFO) << LOG_BADGE("getTarsClientProxyEndpoints") + << LOG_DESC("find tars client proxy endpoints") + << LOG_KV("serviceName", _clientPrx) + << LOG_KV("endpoints size", _endpoints.size()); + } + + if (_endpoints.empty()) + { + NodeConfig_LOG(WARNING) << LOG_BADGE("getTarsClientProxyEndpoints") + << LOG_DESC("can not find tars client proxy endpoints") + << LOG_KV("serviceName", _clientPrx); + + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + ("Can't find tars client proxy endpoints, serviceName : " + _clientPrx))); + } +} + +void NodeConfig::checkService(std::string const& _serviceType, std::string const& _serviceName) +{ + if (_serviceName.empty()) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Must set service name for " + _serviceType + "!")); + } + std::vector serviceNameList; + boost::split(serviceNameList, _serviceName, boost::is_any_of(".")); + std::string errorMsg = + "Must set service name in format of application_name.server_name with only include letters " + "and numbers for " + + _serviceType + ", invalid config now is:" + _serviceName; + if (serviceNameList.size() != 2) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment(errorMsg)); + } + for (const auto& serviceName : serviceNameList) + { + if (!isalNumStr(serviceName)) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment(errorMsg)); + } + } +} + +void NodeConfig::loadRpcConfig(boost::property_tree::ptree const& _pt) +{ + /* + [rpc] + listen_ip=0.0.0.0 + listen_port=30300 + thread_count=16 + sm_ssl=false + disable_ssl=false + */ + std::string listenIP = _pt.get("rpc.listen_ip", "0.0.0.0"); + int listenPort = _pt.get("rpc.listen_port", 20200); + int threadCount = _pt.get("rpc.thread_count", 8); + bool smSsl = _pt.get("rpc.sm_ssl", false); + bool disableSsl = _pt.get("rpc.disable_ssl", false); + + m_rpcListenIP = listenIP; + m_rpcListenPort = listenPort; + m_rpcThreadPoolSize = threadCount; + m_rpcDisableSsl = disableSsl; + m_rpcSmSsl = smSsl; + + NodeConfig_LOG(INFO) << LOG_DESC("loadRpcConfig") << LOG_KV("listenIP", listenIP) + << LOG_KV("listenPort", listenPort) << LOG_KV("listenPort", listenPort) + << LOG_KV("smSsl", smSsl) << LOG_KV("disableSsl", disableSsl); +} + +void NodeConfig::loadGatewayConfig(boost::property_tree::ptree const& _pt) +{ + /* + [p2p] + listen_ip=0.0.0.0 + listen_port=30300 + sm_ssl=false + nodes_path=./ + nodes_file=nodes.json + */ + std::string listenIP = _pt.get("p2p.listen_ip", "0.0.0.0"); + int listenPort = _pt.get("p2p.listen_port", 30300); + std::string nodesDir = _pt.get("p2p.nodes_path", "./"); + std::string nodesFile = _pt.get("p2p.nodes_file", "nodes.json"); + bool smSsl = _pt.get("p2p.sm_ssl", false); + + m_p2pListenIP = listenIP; + m_p2pListenPort = listenPort; + m_p2pNodeDir = nodesDir; + m_p2pSmSsl = smSsl; + m_p2pNodeFileName = nodesFile; + + NodeConfig_LOG(INFO) << LOG_DESC("loadGatewayConfig") << LOG_KV("listenIP", listenIP) + << LOG_KV("listenPort", listenPort) << LOG_KV("listenPort", listenPort) + << LOG_KV("smSsl", smSsl) << LOG_KV("nodesFile", nodesFile); +} + +void NodeConfig::loadCertConfig(boost::property_tree::ptree const& _pt) +{ + /* + [cert] + ; directory the certificates located in + ca_path=./ + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + node_key=ssl.key + ; the node certificate file + node_cert=ssl.crt + + or + + [cert] + ; directory the certificates located in + ca_path=./ + ; the ca certificate file + sm_ca_cert=sm_ca.crt + ; the node private key file + sm_node_key=sm_ssl.key + ; the node certificate file + sm_node_cert=sm_ssl.crt + ; the node private key file + sm_ennode_key=sm_enssl.key + ; the node certificate file + sm_ennode_cert=sm_enssl.crt + */ + + // load sm cert + m_certPath = _pt.get("cert.ca_path", "./"); + + std::string smCaCertFile = + m_certPath + "/" + _pt.get("cert.sm_ca_cert", "sm_ca.crt"); + std::string smNodeCertFile = + m_certPath + "/" + _pt.get("cert.sm_node_cert", "sm_ssl.crt"); + std::string smNodeKeyFile = + m_certPath + "/" + _pt.get("cert.sm_node_key", "sm_ssl.key"); + std::string smEnNodeCertFile = + m_certPath + "/" + _pt.get("cert.sm_ennode_cert", "sm_enssl.crt"); + std::string smEnNodeKeyFile = + m_certPath + "/" + _pt.get("cert.sm_ennode_key", "sm_enssl.key"); + + m_smCaCert = smCaCertFile; + m_smNodeCert = smNodeCertFile; + m_smNodeKey = smNodeKeyFile; + m_enSmNodeCert = smEnNodeCertFile; + m_enSmNodeKey = smEnNodeKeyFile; + + NodeConfig_LOG(INFO) << LOG_DESC("loadCertConfig") << LOG_KV("ca_path", m_certPath) + << LOG_KV("sm_ca_cert", smCaCertFile) + << LOG_KV("sm_node_cert", smNodeCertFile) + << LOG_KV("sm_node_key", smNodeKeyFile) + << LOG_KV("sm_ennode_cert", smEnNodeCertFile) + << LOG_KV("sm_ennode_key", smEnNodeKeyFile); + + // load cert + std::string caCertFile = m_certPath + "/" + _pt.get("cert.ca_cert", "ca.crt"); + std::string nodeCertFile = m_certPath + "/" + _pt.get("cert.node_cert", "ssl.crt"); + std::string nodeKeyFile = m_certPath + "/" + _pt.get("cert.node_key", "ssl.key"); + + m_caCert = caCertFile; + m_nodeCert = nodeCertFile; + m_nodeKey = nodeKeyFile; + + NodeConfig_LOG(INFO) << LOG_DESC("loadCertConfig") << LOG_KV("ca_path", m_certPath) + << LOG_KV("ca_cert", caCertFile) << LOG_KV("node_cert", nodeCertFile) + << LOG_KV("node_key", nodeKeyFile); +} + +// load the txpool related params +void NodeConfig::loadTxPoolConfig(boost::property_tree::ptree const& _pt) +{ + m_txpoolLimit = checkAndGetValue(_pt, "txpool.limit", "15000"); + if (m_txpoolLimit <= 0) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Please set txpool.limit to positive !")); + } + m_notifyWorkerNum = checkAndGetValue(_pt, "txpool.notify_worker_num", "2"); + if (m_notifyWorkerNum <= 0) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set txpool.notify_worker_num to positive !")); + } + m_verifierWorkerNum = checkAndGetValue( + _pt, "txpool.verify_worker_num", std::to_string(std::thread::hardware_concurrency())); + if (m_verifierWorkerNum <= 0) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set txpool.verify_worker_num to positive !")); + } + // the txs expiration time, in second + auto txsExpirationTime = checkAndGetValue(_pt, "txpool.txs_expiration_time", "600"); + if (txsExpirationTime * 1000 <= DEFAULT_MIN_CONSENSUS_TIME_MS) + [[unlikely]] + { + NodeConfig_LOG(WARNING) << LOG_DESC( + "loadTxPoolConfig: the configured txs_expiration_time " + "is smaller than default " + "consensus time, reset to the consensus time") + << LOG_KV("txsExpirationTime(seconds)", txsExpirationTime) + << LOG_KV("defaultConsTime", DEFAULT_MIN_CONSENSUS_TIME_MS); + } + m_txsExpirationTime = std::max( + {txsExpirationTime * 1000, (int64_t)DEFAULT_MIN_CONSENSUS_TIME_MS, (int64_t)m_minSealTime}); + + NodeConfig_LOG(INFO) << LOG_DESC("loadTxPoolConfig") << LOG_KV("txpoolLimit", m_txpoolLimit) + << LOG_KV("notifierWorkers", m_notifyWorkerNum) + << LOG_KV("verifierWorkers", m_verifierWorkerNum) + << LOG_KV("txsExpirationTime(ms)", m_txsExpirationTime); +} + +void NodeConfig::loadChainConfig(boost::property_tree::ptree const& _pt, bool _enforceGroupId) +{ + try + { + m_smCryptoType = _pt.get("chain.sm_crypto"); + if (_enforceGroupId) + { + m_groupId = _pt.get("chain.group_id"); + } + m_chainId = _pt.get("chain.chain_id"); + } + catch (std::exception const& e) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "config.genesis chain.sm_crypto/chain.group_id/chain.chain_id is " + "null, please set it!")); + } + if (!isalNumStr(m_chainId)) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("The chainId must be number or digit")); + } + m_blockLimit = checkAndGetValue(_pt, "chain.block_limit", "1000"); + if (m_blockLimit <= 0 || m_blockLimit > MAX_BLOCK_LIMIT) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set chain.block_limit to positive and less than " + + std::to_string(MAX_BLOCK_LIMIT) + " !")); + } + NodeConfig_LOG(INFO) << METRIC << LOG_DESC("loadChainConfig") + << LOG_KV("smCrypto", m_smCryptoType) << LOG_KV("chainId", m_chainId) + << LOG_KV("groupId", m_groupId) << LOG_KV("blockLimit", m_blockLimit); +} + +void NodeConfig::loadSecurityConfig(boost::property_tree::ptree const& _pt) +{ + m_privateKeyPath = _pt.get("security.private_key_path", "node.pem"); + m_hsmEnable = _pt.get("security.enable_hsm", false); + if (m_hsmEnable) + { + m_hsmLibPath = + _pt.get("security.hsm_lib_path", "/usr/local/lib/libgmt0018.so"); + m_keyIndex = _pt.get("security.key_index"); + m_password = _pt.get("security.password", ""); + NodeConfig_LOG(INFO) << LOG_DESC("loadSecurityConfig HSM") + << LOG_KV("lib_path", m_hsmLibPath) << LOG_KV("key_index", m_keyIndex) + << LOG_KV("password", m_password); + } + + NodeConfig_LOG(INFO) << LOG_DESC("loadSecurityConfig") << LOG_KV("enable_hsm", m_hsmEnable) + << LOG_KV("privateKeyPath", m_privateKeyPath); +} + +void NodeConfig::loadSealerConfig(boost::property_tree::ptree const& _pt) +{ + m_minSealTime = checkAndGetValue(_pt, "consensus.min_seal_time", "500"); + if (m_minSealTime <= 0 || m_minSealTime > DEFAULT_MAX_SEAL_TIME_MS) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set consensus.min_seal_time between 1 and 600000!")); + } + NodeConfig_LOG(INFO) << LOG_DESC("loadSealerConfig") << LOG_KV("minSealTime", m_minSealTime); +} + +void NodeConfig::loadStorageSecurityConfig(boost::property_tree::ptree const& _pt) +{ + m_storageSecurityEnable = _pt.get("storage_security.enable", false); + if (!m_storageSecurityEnable) + { + return; + } + std::string storageSecurityKeyCenterUrl = + _pt.get("storage_security.key_center_url", ""); + + std::vector values; + boost::split( + values, storageSecurityKeyCenterUrl, boost::is_any_of(":"), boost::token_compress_on); + if (2 != values.size()) + { + BOOST_THROW_EXCEPTION( + InvalidParameter() << errinfo_comment( + "initGlobalConfig storage_security failed! Invalid key_center_url!")); + } + + m_storageSecurityKeyCenterIp = values[0]; + m_storageSecurityKeyCenterPort = boost::lexical_cast(values[1]); + if (false == isValidPort(m_storageSecurityKeyCenterPort)) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment( + "initGlobalConfig storage_security failed! Invalid key_manange_port!")); + } + + m_storageSecurityCipherDataKey = _pt.get("storage_security.cipher_data_key", ""); + if (true == m_storageSecurityCipherDataKey.empty()) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Please provide cipher_data_key!")); + } + NodeConfig_LOG(INFO) << LOG_DESC("loadStorageSecurityConfig") + << LOG_KV("keyCenterUrl", storageSecurityKeyCenterUrl); +} + +void NodeConfig::loadStorageConfig(boost::property_tree::ptree const& _pt) +{ + m_storagePath = _pt.get("storage.data_path", "data/" + m_groupId); + m_storageType = _pt.get("storage.type", "RocksDB"); + m_keyPageSize = _pt.get("storage.key_page_size", 10240); + m_pdCaPath = _pt.get("storage.pd_ssl_ca_path", ""); + m_pdCertPath = _pt.get("storage.pd_ssl_cert_path", ""); + m_pdKeyPath = _pt.get("storage.pd_ssl_key_path", ""); + m_enableArchive = _pt.get("storage.enable_archive", false); + if (m_enableArchive) + { + m_archiveListenIP = _pt.get("storage.archive_ip"); + m_archiveListenPort = _pt.get("storage.archive_port"); + } + + // if (m_keyPageSize < 4096 || m_keyPageSize > (1 << 25)) + // { + // BOOST_THROW_EXCEPTION( + // InvalidConfig() << errinfo_comment("Please set storage.key_page_size in 4K~32M")); + // } + auto pd_addrs = _pt.get("storage.pd_addrs", "127.0.0.1:2379"); + boost::split(m_pd_addrs, pd_addrs, boost::is_any_of(",")); + m_enableLRUCacheStorage = _pt.get("storage.enable_cache", true); + m_cacheSize = _pt.get("storage.cache_size", DEFAULT_CACHE_SIZE); + NodeConfig_LOG(INFO) << LOG_DESC("loadStorageConfig") << LOG_KV("storagePath", m_storagePath) + << LOG_KV("KeyPage", m_keyPageSize) << LOG_KV("storageType", m_storageType) + << LOG_KV("pdAddrs", pd_addrs) << LOG_KV("pdCaPath", m_pdCaPath) + << LOG_KV("enableArchive", m_enableArchive) + << LOG_KV("archiveListenIP", m_archiveListenIP) + << LOG_KV("archiveListenPort", m_archiveListenPort) + << LOG_KV("enableLRUCacheStorage", m_enableLRUCacheStorage); +} + +// Note: In components that do not require failover, do not need to set member_id +void NodeConfig::loadFailOverConfig(boost::property_tree::ptree const& _pt, bool _enforceMemberID) +{ + // only enable leaderElection when using tikv + m_enableFailOver = _pt.get("failover.enable", false); + if (!m_enableFailOver) + { + return; + } + m_failOverClusterUrl = _pt.get("failover.cluster_url", "127.0.0.1:2379"); + m_memberID = _pt.get("failover.member_id", ""); + if (m_memberID.size() == 0 && _enforceMemberID) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Please set failover.member_id must be non-empty ")); + } + m_leaseTTL = + checkAndGetValue(_pt, "failover.lease_ttl", std::to_string(DEFAULT_MIN_LEASE_TTL_SECONDS)); + if (m_leaseTTL < DEFAULT_MIN_LEASE_TTL_SECONDS) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set failover.lease_ttl to no less than " + + std::to_string(DEFAULT_MIN_LEASE_TTL_SECONDS) + " seconds!")); + } + + NodeConfig_LOG(INFO) << LOG_DESC("loadFailOverConfig") + << LOG_KV("failOverClusterUrl", m_failOverClusterUrl) + << LOG_KV("memberID", m_memberID.size() > 0 ? m_memberID : "not-set") + << LOG_KV("leaseTTL", m_leaseTTL) + << LOG_KV("enableFailOver", m_enableFailOver); +} + +void NodeConfig::loadOthersConfig(boost::property_tree::ptree const& _pt) +{ + m_sendTxTimeout = _pt.get("others.send_tx_timeout", -1); + m_vmCacheSize = _pt.get("executor.vm_cache_size", 1024); + + NodeConfig_LOG(INFO) << LOG_DESC("loadOthersConfig") + << LOG_KV("sendTxTimeout", m_sendTxTimeout) + << LOG_KV("vmCacheSize", m_vmCacheSize); +} + +void NodeConfig::loadConsensusConfig(boost::property_tree::ptree const& _pt) +{ + m_checkPointTimeoutInterval = checkAndGetValue( + _pt, "consensus.checkpoint_timeout", std::to_string(DEFAULT_MIN_CONSENSUS_TIME_MS)); + if (m_checkPointTimeoutInterval < DEFAULT_MIN_CONSENSUS_TIME_MS) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set consensus.checkpoint_timeout to no less than " + + std::to_string(DEFAULT_MIN_CONSENSUS_TIME_MS) + "ms!")); + } + NodeConfig_LOG(INFO) << LOG_DESC("loadConsensusConfig") + << LOG_KV("checkPointTimeoutInterval", m_checkPointTimeoutInterval); +} + +void NodeConfig::loadLedgerConfig(boost::property_tree::ptree const& _genesisConfig) +{ + // consensus type + try + { + m_consensusType = _genesisConfig.get("consensus.consensus_type"); + } + catch (std::exception const& e) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "consensus.consensus_type is null, please set it!")); + } + // blockTxCountLimit + auto blockTxCountLimit = checkAndGetValue(_genesisConfig, "consensus.block_tx_count_limit"); + if (blockTxCountLimit <= 0) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set consensus.block_tx_count_limit to positive!")); + } + m_ledgerConfig->setBlockTxCountLimit(blockTxCountLimit); + // txGasLimit + auto txGasLimit = checkAndGetValue(_genesisConfig, "tx.gas_limit"); + if (txGasLimit <= TX_GAS_LIMIT_MIN) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment( + "Please set tx.gas_limit to more than " + std::to_string(TX_GAS_LIMIT_MIN) + " !")); + } + + m_txGasLimit = txGasLimit; + // the compatibility version + m_compatibilityVersionStr = _genesisConfig.get("version.compatibility_version"); + // must call here to check the compatibility_version + m_compatibilityVersion = toVersionNumber(m_compatibilityVersionStr); + // sealerList + auto consensusNodeList = parseConsensusNodeList(_genesisConfig, "consensus", "node."); + if (!consensusNodeList || consensusNodeList->empty()) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment("Must set sealerList!")); + } + m_ledgerConfig->setConsensusNodeList(*consensusNodeList); + + // leaderSwitchPeriod + auto consensusLeaderPeriod = checkAndGetValue(_genesisConfig, "consensus.leader_period"); + if (consensusLeaderPeriod <= 0) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Please set consensus.leader_period to positive!")); + } + m_ledgerConfig->setLeaderSwitchPeriod(consensusLeaderPeriod); + NodeConfig_LOG(INFO) << LOG_DESC("loadLedgerConfig") + << LOG_KV("consensus_type", m_consensusType) + << LOG_KV("block_tx_count_limit", m_ledgerConfig->blockTxCountLimit()) + << LOG_KV("gas_limit", m_txGasLimit) + << LOG_KV("leader_period", m_ledgerConfig->leaderSwitchPeriod()) + << LOG_KV("minSealTime", m_minSealTime) + << LOG_KV("compatibilityVersion", + (bcos::protocol::BlockVersion)m_compatibilityVersion); +} + +ConsensusNodeListPtr NodeConfig::parseConsensusNodeList(boost::property_tree::ptree const& _pt, + std::string const& _sectionName, std::string const& _subSectionName) +{ + if (!_pt.get_child_optional(_sectionName)) + { + NodeConfig_LOG(DEBUG) << LOG_DESC("parseConsensusNodeList return for empty config") + << LOG_KV("sectionName", _sectionName); + return nullptr; + } + auto nodeList = std::make_shared(); + for (auto const& it : _pt.get_child(_sectionName)) + { + if (it.first.find(_subSectionName) != 0) + { + continue; + } + std::string data = it.second.data(); + std::vector nodeInfo; + boost::split(nodeInfo, data, boost::is_any_of(":")); + if (nodeInfo.size() == 0) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment( + "Uninitialized nodeInfo, key: " + it.first + ", value: " + data)); + } + std::string nodeId = nodeInfo[0]; + boost::to_lower(nodeId); + int64_t weight = 1; + if (nodeInfo.size() == 2) + { + auto& weightInfoStr = nodeInfo[1]; + boost::trim(weightInfoStr); + weight = boost::lexical_cast(weightInfoStr); + } + if (weight <= 0) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Please set weight for " + nodeId + " to positive!")); + } + auto consensusNode = std::make_shared( + m_keyFactory->createKey(*fromHexString(nodeId)), weight); + NodeConfig_LOG(INFO) << LOG_BADGE("parseConsensusNodeList") + << LOG_KV("sectionName", _sectionName) << LOG_KV("nodeId", nodeId) + << LOG_KV("weight", weight); + nodeList->push_back(consensusNode); + } + // only sort nodeList after rc3 version + std::sort(nodeList->begin(), nodeList->end(), bcos::consensus::ConsensusNodeComparator()); + NodeConfig_LOG(INFO) << LOG_BADGE("parseConsensusNodeList") + << LOG_KV("totalNodesSize", nodeList->size()); + return nodeList; +} + +void NodeConfig::generateGenesisData() +{ + std::string versionData = ""; + std::string executorConfig = ""; + std::string genesisdata = ""; + if (m_compatibilityVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + auto genesisData = std::make_shared(m_smCryptoType, m_chainId, + m_groupId, m_consensusType, m_ledgerConfig->blockTxCountLimit(), + m_ledgerConfig->leaderSwitchPeriod(), m_compatibilityVersionStr, m_txGasLimit, m_isWasm, + m_isAuthCheck, m_authAdminAddress, m_isSerialExecute); + genesisdata = genesisData->genesisDataOutPut(); + size_t j = 0; + for (const auto& node : m_ledgerConfig->consensusNodeList()) + { + genesisdata = genesisdata + "node." + boost::lexical_cast(j) + ":" + + *toHexString(node->nodeID()->data()) + "," + + std::to_string(node->weight()) + "\n"; + ++j; + } + NodeConfig_LOG(INFO) << LOG_BADGE("generateGenesisData") + << LOG_KV("genesisData", genesisdata); + m_genesisData = genesisdata; + return; + } + + versionData = m_compatibilityVersionStr + "-"; + std::stringstream ss; + ss << m_isWasm << "-" << m_isAuthCheck << "-" << m_authAdminAddress << "-" << m_isSerialExecute; + executorConfig = ss.str(); + + ss.str(""); + ss << m_ledgerConfig->blockTxCountLimit() << "-" << m_ledgerConfig->leaderSwitchPeriod() << "-" + << m_txGasLimit << "-" << versionData << executorConfig; + for (const auto& node : m_ledgerConfig->consensusNodeList()) + { + ss << *toHexString(node->nodeID()->data()) << "," << node->weight() << ";"; + } + m_genesisData = ss.str(); + NodeConfig_LOG(INFO) << LOG_BADGE("generateGenesisData") + << LOG_KV("genesisData", m_genesisData); +} + +void NodeConfig::loadExecutorConfig(boost::property_tree::ptree const& _genesisConfig) +{ + try + { + m_isWasm = _genesisConfig.get("executor.is_wasm"); + m_isAuthCheck = _genesisConfig.get("executor.is_auth_check"); + m_isSerialExecute = _genesisConfig.get("executor.is_serial_execute"); + } + catch (std::exception const& e) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "executor.is_wasm/executor.is_auth_check/" + "executor.is_serial_execute is null, please set it!")); + } + if (m_isWasm && !m_isSerialExecute) + { + if (m_compatibilityVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "loadExecutorConfig wasm only support serial executing, " + "please set is_serial_execute to true")); + } + NodeConfig_LOG(WARNING) + << METRIC + << LOG_DESC("loadExecutorConfig wasm with serial executing is not recommended"); + } + if (m_isWasm && m_isAuthCheck) + { + if (m_compatibilityVersion >= (uint32_t)bcos::protocol::BlockVersion::V3_1_VERSION) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "loadExecutorConfig auth only support solidity, " + "please set is_auth_check to false or set is_wasm to false")); + } + NodeConfig_LOG(WARNING) << METRIC + << LOG_DESC( + "loadExecutorConfig wasm auth is not supported for now"); + } + try + { + m_authAdminAddress = _genesisConfig.get("executor.auth_admin_account"); + } + catch (std::exception const& e) + { + if (m_isAuthCheck) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("executor.auth_admin_account is null, " + "please set correct auth_admin_account")); + } + } + NodeConfig_LOG(INFO) << METRIC << LOG_DESC("loadExecutorConfig") << LOG_KV("isWasm", m_isWasm) + << LOG_KV("isAuthCheck", m_isAuthCheck) + << LOG_KV("authAdminAccount", m_authAdminAddress) + << LOG_KV("ismSerialExecute", m_isSerialExecute); +} + +// Note: make sure the consensus param checker is consistent with the precompiled param checker +int64_t NodeConfig::checkAndGetValue(boost::property_tree::ptree const& _pt, + std::string const& _key, std::string const& _defaultValue) +{ + auto value = _pt.get(_key, _defaultValue); + try + { + return boost::lexical_cast(value); + } + catch (std::exception const& e) + { + BOOST_THROW_EXCEPTION(InvalidConfig() << errinfo_comment( + "Invalid value " + value + " for configuration " + _key + + ", please set the value with a valid number")); + } +} + +int64_t NodeConfig::checkAndGetValue( + boost::property_tree::ptree const& _pt, std::string const& _key) +{ + try + { + auto value = _pt.get(_key); + return boost::lexical_cast(value); + } + catch (std::exception const& e) + { + BOOST_THROW_EXCEPTION( + InvalidConfig() << errinfo_comment("Invalid value for configuration " + _key + + ", please set the value with a valid number")); + } +} + +bool NodeConfig::isValidPort(int port) +{ + if (port <= 1024 || port > 65535) + return false; + return true; +} diff --git a/bcos-tool/bcos-tool/NodeConfig.h b/bcos-tool/bcos-tool/NodeConfig.h new file mode 100644 index 0000000..eb4baed --- /dev/null +++ b/bcos-tool/bcos-tool/NodeConfig.h @@ -0,0 +1,384 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief configuration for the node + * @file NodeConfig.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include "Exceptions.h" +#include "bcos-framework/consensus/ConsensusNodeInterface.h" +#include "bcos-framework/ledger/LedgerConfig.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define NodeConfig_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("NodeConfig") +namespace bcos::tool +{ +class NodeConfig +{ +public: + constexpr static ssize_t DEFAULT_CACHE_SIZE = 32 * 1024 * 1024; + constexpr static ssize_t DEFAULT_MIN_CONSENSUS_TIME_MS = 3000; + constexpr static ssize_t DEFAULT_MIN_LEASE_TTL_SECONDS = 3; + constexpr static ssize_t DEFAULT_MAX_SEAL_TIME_MS = 600000; + + using Ptr = std::shared_ptr; + NodeConfig() : m_ledgerConfig(std::make_shared()) {} + + explicit NodeConfig(bcos::crypto::KeyFactory::Ptr _keyFactory); + virtual ~NodeConfig() = default; + + virtual void loadConfig(std::string const& _configPath, bool _enforceMemberID = true, + bool enforceChainConfig = false, bool enforceGroupId = true) + { + boost::property_tree::ptree iniConfig; + boost::property_tree::read_ini(_configPath, iniConfig); + loadConfig(iniConfig, _enforceMemberID, enforceChainConfig, enforceGroupId); + } + virtual void loadServiceConfig(boost::property_tree::ptree const& _pt); + virtual void loadRpcServiceConfig(boost::property_tree::ptree const& _pt); + virtual void loadGatewayServiceConfig(boost::property_tree::ptree const& _pt); + + virtual void loadWithoutTarsFrameworkConfig(boost::property_tree::ptree const& _pt); + + virtual void loadNodeServiceConfig( + std::string const& _nodeID, boost::property_tree::ptree const& _pt, bool _require = false); + + virtual void loadTarsProxyConfig(const std::string& _tarsProxyConf); + + virtual void loadServiceTarsProxyConfig( + const std::string& _serviceSectionName, boost::property_tree::ptree const& _pt); + + virtual void loadGenesisConfig(std::string const& _genesisConfigPath) + { + boost::property_tree::ptree genesisConfig; + boost::property_tree::read_ini(_genesisConfigPath, genesisConfig); + loadGenesisConfig(genesisConfig); + } + + virtual void loadConfigFromString(std::string const& _content) + { + boost::property_tree::ptree iniConfig; + std::stringstream contentStream(_content); + boost::property_tree::read_ini(contentStream, iniConfig); + loadConfig(iniConfig); + } + + virtual void loadGenesisConfigFromString(std::string const& _content) + { + boost::property_tree::ptree genesisConfig; + std::stringstream contentStream(_content); + boost::property_tree::read_ini(contentStream, genesisConfig); + loadGenesisConfig(genesisConfig); + } + + virtual void loadConfig(boost::property_tree::ptree const& _pt, bool _enforceMemberID = true, + bool _enforceChainConfig = false, bool _enforceGroupId = true); + virtual void loadGenesisConfig(boost::property_tree::ptree const& _genesisConfig); + + // the txpool configurations + size_t txpoolLimit() const { return m_txpoolLimit; } + size_t notifyWorkerNum() const { return m_notifyWorkerNum; } + size_t verifierWorkerNum() const { return m_verifierWorkerNum; } + int64_t txsExpirationTime() const { return m_txsExpirationTime; } + + bool smCryptoType() const { return m_smCryptoType; } + std::string const& chainId() const { return m_chainId; } + std::string const& groupId() const { return m_groupId; } + size_t blockLimit() const { return m_blockLimit; } + + std::string const& privateKeyPath() const { return m_privateKeyPath; } + bool const& hsmEnable() const { return m_hsmEnable; } + std::string const& hsmLibPath() const { return m_hsmLibPath; } + int const& keyIndex() const { return m_keyIndex; } + std::string const& password() const { return m_password; } + + size_t minSealTime() const { return m_minSealTime; } + size_t checkPointTimeoutInterval() const { return m_checkPointTimeoutInterval; } + + std::string const& storagePath() const { return m_storagePath; } + std::string const& storageType() const { return m_storageType; } + size_t keyPageSize() const { return m_keyPageSize; } + std::vector const& pdAddrs() const { return m_pd_addrs; } + std::string const& pdCaPath() const { return m_pdCaPath; } + std::string const& pdCertPath() const { return m_pdCertPath; } + std::string const& pdKeyPath() const { return m_pdKeyPath; } + std::string const& storageDBName() const { return m_storageDBName; } + std::string const& stateDBName() const { return m_stateDBName; } + bool enableArchive() const { return m_enableArchive; } + std::string const& archiveListenIP() const { return m_archiveListenIP; } + uint16_t archiveListenPort() const { return m_archiveListenPort; } + + bcos::crypto::KeyFactory::Ptr keyFactory() { return m_keyFactory; } + + bcos::ledger::LedgerConfig::Ptr ledgerConfig() { return m_ledgerConfig; } + + std::string const& consensusType() const { return m_consensusType; } + size_t txGasLimit() const { return m_txGasLimit; } + std::string const& genesisData() const { return m_genesisData; } + + bool isWasm() const { return m_isWasm; } + bool isAuthCheck() const { return m_isAuthCheck; } + bool isSerialExecute() const { return m_isSerialExecute; } + size_t vmCacheSize() const { return m_vmCacheSize; } + + std::string const& authAdminAddress() const { return m_authAdminAddress; } + + std::string const& rpcServiceName() const { return m_rpcServiceName; } + std::string const& gatewayServiceName() const { return m_gatewayServiceName; } + + std::string const& schedulerServiceName() const { return m_schedulerServiceName; } + std::string const& executorServiceName() const { return m_executorServiceName; } + std::string const& txpoolServiceName() const { return m_txpoolServiceName; } + + std::string const& nodeName() const { return m_nodeName; } + + std::string getDefaultServiceName(std::string const& _nodeName, std::string const& _serviceName) + { + return m_chainId + "." + _nodeName + _serviceName; + } + + // the rpc configurations + const std::string& rpcListenIP() const { return m_rpcListenIP; } + uint16_t rpcListenPort() const { return m_rpcListenPort; } + uint32_t rpcThreadPoolSize() const { return m_rpcThreadPoolSize; } + bool rpcSmSsl() const { return m_rpcSmSsl; } + bool rpcDisableSsl() const { return m_rpcDisableSsl; } + + // the gateway configurations + const std::string& p2pListenIP() const { return m_p2pListenIP; } + uint16_t p2pListenPort() const { return m_p2pListenPort; } + bool p2pSmSsl() const { return m_p2pSmSsl; } + const std::string& p2pNodeDir() const { return m_p2pNodeDir; } + const std::string& p2pNodeFileName() const { return m_p2pNodeFileName; } + + // config for cert + const std::string& certPath() { return m_certPath; } + void setCertPath(const std::string& _certPath) { m_certPath = _certPath; } + + const std::string& caCert() { return m_caCert; } + void setCaCert(const std::string& _caCert) { m_caCert = _caCert; } + + const std::string& nodeCert() { return m_nodeCert; } + void setNodeCert(const std::string& _nodeCert) { m_nodeCert = _nodeCert; } + + const std::string& nodeKey() { return m_nodeKey; } + void setNodeKey(const std::string& _nodeKey) { m_nodeKey = _nodeKey; } + + const std::string& smCaCert() const { return m_smCaCert; } + void setSmCaCert(const std::string& _smCaCert) { m_smCaCert = _smCaCert; } + + const std::string& smNodeCert() const { return m_smNodeCert; } + void setSmNodeCert(const std::string& _smNodeCert) { m_smNodeCert = _smNodeCert; } + + const std::string& smNodeKey() const { return m_smNodeKey; } + void setSmNodeKey(const std::string& _smNodeKey) { m_smNodeKey = _smNodeKey; } + + const std::string& enSmNodeCert() const { return m_enSmNodeCert; } + void setEnSmNodeCert(const std::string& _enSmNodeCert) { m_enSmNodeCert = _enSmNodeCert; } + + const std::string& enSmNodeKey() const { return m_enSmNodeKey; } + void setEnSmNodeKey(const std::string& _enSmNodeKey) { m_enSmNodeKey = _enSmNodeKey; } + + bool enableLRUCacheStorage() const { return m_enableLRUCacheStorage; } + ssize_t cacheSize() const { return m_cacheSize; } + + uint32_t compatibilityVersion() const { return m_compatibilityVersion; } + std::string const& compatibilityVersionStr() const { return m_compatibilityVersionStr; } + + std::string const& memberID() const { return m_memberID; } + unsigned leaseTTL() const { return m_leaseTTL; } + bool enableFailOver() const { return m_enableFailOver; } + std::string const& failOverClusterUrl() const { return m_failOverClusterUrl; } + + bool storageSecurityEnable() const { return m_storageSecurityEnable; } + std::string storageSecurityKeyCenterIp() const { return m_storageSecurityKeyCenterIp; } + unsigned short storageSecurityKeyCenterPort() const { return m_storageSecurityKeyCenterPort; } + std::string storageSecurityCipherDataKey() const { return m_storageSecurityCipherDataKey; } + + int sendTxTimeout() const { return m_sendTxTimeout; } + + bool withoutTarsFramework() const { return m_withoutTarsFramework; } + void setWithoutTarsFramework(bool _withoutTarsFramework) + { + m_withoutTarsFramework = _withoutTarsFramework; + } + void getTarsClientProxyEndpoints( + const std::string& _clientPrx, std::vector& _endPoints); + +protected: + virtual void loadChainConfig(boost::property_tree::ptree const& _pt, bool _enforceGroupId); + virtual void loadRpcConfig(boost::property_tree::ptree const& _pt); + virtual void loadGatewayConfig(boost::property_tree::ptree const& _pt); + virtual void loadCertConfig(boost::property_tree::ptree const& _pt); + virtual void loadTxPoolConfig(boost::property_tree::ptree const& _pt); + virtual void loadSecurityConfig(boost::property_tree::ptree const& _pt); + virtual void loadSealerConfig(boost::property_tree::ptree const& _pt); + virtual void loadStorageSecurityConfig(boost::property_tree::ptree const& _pt); + + virtual void loadStorageConfig(boost::property_tree::ptree const& _pt); + virtual void loadConsensusConfig(boost::property_tree::ptree const& _pt); + virtual void loadFailOverConfig( + boost::property_tree::ptree const& _pt, bool _enforceMemberID = true); + virtual void loadOthersConfig(boost::property_tree::ptree const& _pt); + + virtual void loadLedgerConfig(boost::property_tree::ptree const& _genesisConfig); + + void loadExecutorConfig(boost::property_tree::ptree const& _pt); + + std::string getServiceName(boost::property_tree::ptree const& _pt, + std::string const& _configSection, std::string const& _objName, + std::string const& _defaultValue = "", bool _require = true); + void checkService(std::string const& _serviceType, std::string const& _serviceName); + + +private: + bcos::consensus::ConsensusNodeListPtr parseConsensusNodeList( + boost::property_tree::ptree const& _pt, std::string const& _sectionName, + std::string const& _subSectionName); + + void generateGenesisData(); + virtual int64_t checkAndGetValue(boost::property_tree::ptree const& _pt, + std::string const& _value, std::string const& _defaultValue); + + bool isValidPort(int port); + + bcos::crypto::KeyFactory::Ptr m_keyFactory; + // txpool related configuration + size_t m_txpoolLimit; + size_t m_notifyWorkerNum; + size_t m_verifierWorkerNum; + int64_t m_txsExpirationTime; + // TODO: the block sync module need some configurations? + + // chain configuration + bool m_smCryptoType; + std::string m_chainId; + std::string m_groupId; + size_t m_blockLimit; + + // sealer configuration + size_t m_minSealTime = 0; + size_t m_checkPointTimeoutInterval; + + // for security + std::string m_privateKeyPath; + bool m_hsmEnable; + std::string m_hsmLibPath; + int m_keyIndex; + std::string m_password; + + // storage security configuration + bool m_storageSecurityEnable; + std::string m_storageSecurityKeyCenterIp; + unsigned short m_storageSecurityKeyCenterPort; + std::string m_storageSecurityCipherDataKey; + + // ledger configuration + std::string m_consensusType; + bcos::ledger::LedgerConfig::Ptr m_ledgerConfig; + size_t m_txGasLimit; + std::string m_genesisData; + + // storage configuration + std::string m_storagePath; + std::string m_storageType = "RocksDB"; + size_t m_keyPageSize = 10240; + std::vector m_pd_addrs; + std::string m_pdCaPath; + std::string m_pdCertPath; + std::string m_pdKeyPath; + bool m_enableArchive = false; + std::string m_archiveListenIP; + uint16_t m_archiveListenPort = 0; + + std::string m_storageDBName = "storage"; + std::string m_stateDBName = "state"; + + // executor config + bool m_isWasm = false; + bool m_isAuthCheck = false; + bool m_isSerialExecute = false; + size_t m_vmCacheSize = 1024; + std::string m_authAdminAddress; + + // Pro and Max versions run do not apply to tars admin site + bool m_withoutTarsFramework = {false}; + + // service name to tars endpoints + std::unordered_map> m_tarsSN2EndPoints; + + std::string m_rpcServiceName; + std::string m_gatewayServiceName; + + // the serviceName of other modules + std::string m_schedulerServiceName; + std::string m_executorServiceName; + std::string m_txpoolServiceName; + std::string m_nodeName; + + // config for rpc + std::string m_rpcListenIP; + uint16_t m_rpcListenPort; + uint32_t m_rpcThreadPoolSize; + bool m_rpcSmSsl; + bool m_rpcDisableSsl = false; + + // config for gateway + std::string m_p2pListenIP; + uint16_t m_p2pListenPort; + bool m_p2pSmSsl; + std::string m_p2pNodeDir; + std::string m_p2pNodeFileName; + + // config for cert + std::string m_certPath; + + std::string m_caCert; + std::string m_nodeCert; + std::string m_nodeKey; + + std::string m_smCaCert; + std::string m_smNodeCert; + std::string m_smNodeKey; + std::string m_enSmNodeCert; + std::string m_enSmNodeKey; + + bool m_enableLRUCacheStorage = true; + ssize_t m_cacheSize = DEFAULT_CACHE_SIZE; // 32MB for default + uint32_t m_compatibilityVersion; + std::string m_compatibilityVersionStr; + + // failover config + std::string m_memberID; + unsigned m_leaseTTL = 0; + bool m_enableFailOver = false; + // etcd/zookeeper/consual url + std::string m_failOverClusterUrl; + + // others config + int m_sendTxTimeout = -1; + int64_t checkAndGetValue(const boost::property_tree::ptree& _pt, const std::string& _key); +}; +} // namespace bcos::tool diff --git a/bcos-tool/bcos-tool/NodeTimeMaintenance.cpp b/bcos-tool/bcos-tool/NodeTimeMaintenance.cpp new file mode 100644 index 0000000..4d8e8ec --- /dev/null +++ b/bcos-tool/bcos-tool/NodeTimeMaintenance.cpp @@ -0,0 +1,105 @@ +/** + * @brief : maintain the node time + * @file: NodeTimeMaintenance.cpp + * @author: yujiechen + * @date: 2020-06-12 + */ + +#include "NodeTimeMaintenance.h" + +#include +#include + +using namespace bcos::tool; + +void NodeTimeMaintenance::tryToUpdatePeerTimeInfo( + bcos::crypto::PublicPtr nodeID, const std::int64_t time) +{ + std::int64_t localTime = utcTime(); + auto peerTimeOffset = time - localTime; + + { + Guard l(x_mutex); + // The time information of the same node is within m_minTimeOffset, + // and the time information of the node is not updated + if (m_node2TimeOffset.count(nodeID)) + { + auto orgTimeOffset = m_node2TimeOffset[nodeID]; + if (std::abs(orgTimeOffset - peerTimeOffset) <= m_minTimeOffset) + return; + + m_node2TimeOffset[nodeID] = peerTimeOffset; + } + else + { + // update time information + m_node2TimeOffset.insert(std::make_pair(nodeID, peerTimeOffset)); + } + } + + // check remote time + if (std::abs(peerTimeOffset) > m_maxTimeOffset) + { + TIMESYNC_LOG(WARNING) + << LOG_DESC("Invalid remote peer time: too much difference from local time") + << LOG_KV("peer", nodeID->shortHex()) << LOG_KV("peerTime", time) + << LOG_KV("localTime", localTime) << LOG_KV("medianTimeOffset", m_medianTimeOffset); + } + updateTimeInfo(); + + TIMESYNC_LOG(INFO) << LOG_DESC("updateTimeInfo: update median time offset") + << LOG_KV("updatedMedianTimeOffset", m_medianTimeOffset) + << LOG_KV("peer", nodeID->shortHex()) << LOG_KV("peerTime", time) + << LOG_KV("peerOffset", peerTimeOffset) << LOG_KV("utcTime", utcTime()); +} + +void NodeTimeMaintenance::updateTimeInfo() +{ + // get median time offset + std::vector timeOffsetVec; + { + Guard l(x_mutex); + for (auto const& it : m_node2TimeOffset) + timeOffsetVec.emplace_back(it.second); + } + std::sort(timeOffsetVec.begin(), timeOffsetVec.end()); + + auto medianIndex = timeOffsetVec.size() >> 1; + std::int64_t medianTimeOffset{ 0 }; + if (timeOffsetVec.size() % 2 == 0) + { + medianTimeOffset = + (std::int64_t)(timeOffsetVec[medianIndex] + timeOffsetVec[medianIndex - 1]) >> 1; + } + else + { + medianTimeOffset = timeOffsetVec[medianIndex]; + } + if (std::abs(m_medianTimeOffset) >= m_maxTimeOffset) + { + checkLocalTimeAndWarning(timeOffsetVec); + } + m_medianTimeOffset = medianTimeOffset; +} + +void NodeTimeMaintenance::checkLocalTimeAndWarning(const std::vector& timeOffsetVec) +{ + // If nobody has a time different than ours but within m_minTimeOffset of ours, give a warning + for (auto rIter = timeOffsetVec.rbegin(); rIter != timeOffsetVec.rend(); ++rIter) + { + if (std::abs(*rIter) > m_minTimeOffset) + { + TIMESYNC_LOG(WARNING) << LOG_DESC( + "Please check that your node's date and time are correct!") + << LOG_KV("medianTimeOffset", m_medianTimeOffset) + << LOG_KV("peersSize", timeOffsetVec.size()); + } + else + break; + } +} + +std::int64_t NodeTimeMaintenance::getAlignedTime() const +{ + return (utcTime() + m_medianTimeOffset); +} \ No newline at end of file diff --git a/bcos-tool/bcos-tool/NodeTimeMaintenance.h b/bcos-tool/bcos-tool/NodeTimeMaintenance.h new file mode 100644 index 0000000..7e3eb50 --- /dev/null +++ b/bcos-tool/bcos-tool/NodeTimeMaintenance.h @@ -0,0 +1,44 @@ +/** + * @brief : maintain the node time + * @file: NodeTimeMaintenance.h + * @author: yujiechen + * @date: 2020-06-12 + */ +#pragma once + +#include + +#define TIMESYNC_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TIMESYNC") + +namespace bcos +{ +namespace tool +{ + +class NodeTimeMaintenance +{ +public: + using Ptr = std::shared_ptr; + + void tryToUpdatePeerTimeInfo(bcos::crypto::PublicPtr nodeId, const std::int64_t time); + int64_t getAlignedTime() const; + int64_t medianTimeOffset() const { return m_medianTimeOffset; } + +private: + void updateTimeInfo(); + void checkLocalTimeAndWarning(const std::vector& timeOffsetVec); + +private: + // maps between nodeID and the timeOffset + mutable Mutex x_mutex; + std::map m_node2TimeOffset; + + std::atomic_int64_t m_medianTimeOffset{ 0 }; + + // 30min + std::int64_t m_maxTimeOffset{ 30 * 60 * 1000 }; + // 3min + std::int64_t m_minTimeOffset{ 3 * 60 * 1000 }; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-tool/bcos-tool/VersionConverter.h b/bcos-tool/bcos-tool/VersionConverter.h new file mode 100644 index 0000000..59bde8e --- /dev/null +++ b/bcos-tool/bcos-tool/VersionConverter.h @@ -0,0 +1,77 @@ + +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Public function for version converter + * @file VersionConverter.h + * @author: yujiechen + * @date 2021-05-19 + */ +#pragma once +#include "Exceptions.h" +#include +#include +#include + +namespace bcos::tool +{ +inline uint32_t toVersionNumber(const std::string& _version) +{ + auto version = _version; + boost::to_lower(version); + // 3.0.0-rc{x} version + if (_version.starts_with(bcos::protocol::RC_VERSION_PREFIX)) + { + std::string versionNumber = _version.substr(bcos::protocol::RC_VERSION_PREFIX.length()); + return boost::lexical_cast(versionNumber); + } + std::vector versionFields; + boost::split(versionFields, version, boost::is_any_of(".")); + if (versionFields.size() < 2) + { + BOOST_THROW_EXCEPTION(InvalidVersion() << errinfo_comment( + "The version must be in format of MAJOR.MINOR.PATCH, " + "and the PATCH version is optional, current version is " + + _version)); + } + try + { + // MAJOR.MINOR.PATCH 0xMMmmpp00 every field is uint8_t, last byte is reserved + // v3.1.1 => 0x03010100 + auto majorVersion = boost::lexical_cast(versionFields[0]); + auto minorVersion = boost::lexical_cast(versionFields[1]); + auto patchVersion = 0; + if (versionFields.size() == 3) + { + patchVersion = boost::lexical_cast(versionFields[2]); + } + // check the major version + if (majorVersion > bcos::protocol::MAX_MAJOR_VERSION || + majorVersion < bcos::protocol::MIN_MAJOR_VERSION) + { + BOOST_THROW_EXCEPTION( + InvalidVersion() << errinfo_comment( + "The major version must between " + + std::to_string(bcos::protocol::MIN_MAJOR_VERSION) + " to " + + std::to_string(bcos::protocol::MAX_MAJOR_VERSION) + ", version:" + _version)); + } + return (majorVersion << 24) + (minorVersion << 16) + (patchVersion << 8); + } + catch (const boost::bad_lexical_cast& e) + { + BOOST_THROW_EXCEPTION(InvalidVersion() << errinfo_comment(_version)); + } +} +} // namespace bcos::tool \ No newline at end of file diff --git a/bcos-tool/test/CMakeLists.txt b/bcos-tool/test/CMakeLists.txt new file mode 100644 index 0000000..49422c7 --- /dev/null +++ b/bcos-tool/test/CMakeLists.txt @@ -0,0 +1,28 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-tool +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-tool) +find_package(Boost REQUIRED unit_test_framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +target_link_libraries(${TEST_BINARY_NAME} PUBLIC ${TOOL_TARGET} ${CRYPTO_TARGET} Boost::unit_test_framework) +add_test(NAME ${TEST_BINARY_NAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-tool/test/unittests/libtool/NodeTimeMaintenanceTest.cpp b/bcos-tool/test/unittests/libtool/NodeTimeMaintenanceTest.cpp new file mode 100644 index 0000000..56a85c1 --- /dev/null +++ b/bcos-tool/test/unittests/libtool/NodeTimeMaintenanceTest.cpp @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_AUTO_TEST_CASE(testNodeTimeMaintenance_doubleNode) +{ + // create four node + auto fixedSec1 = h256( + "4edbf97a0c6c3decde00ccd41f069dc30377f859fb1a9eb5759d0c9c995be244"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto pub1 = secp256k1PriToPub(sec1); + + auto fixedSec2 = h256( + "52ca4bd084c9d5a309dd5d5e08e6ddb3424168ee329e9a65cdf9f20c791dbe4d"); + auto sec2 = std::make_shared(fixedSec2.asBytes()); + auto pub2 = secp256k1PriToPub(sec2); + + auto fixedSec3 = h256( + "ba7699fcdc502b1ae4a7eb924ccc02db80e7d04056d2b3a114b2b2ccada4928d"); + auto sec3 = std::make_shared(fixedSec3.asBytes()); + auto pub3 = secp256k1PriToPub(sec3); + + auto fixedSec4 = h256( + "21b08860aa297501e51089e01631cc915d305d18c145136a55560277ad18b283"); + auto sec4 = std::make_shared(fixedSec4.asBytes()); + auto pub4 = secp256k1PriToPub(sec4); + + NodeTimeMaintenance nodeTimeMaintenance; + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub1, utcTime()); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub2, utcTime() + 1 * 60 * 1000); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub3, utcTime() + 2 * 60 * 1000); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub4, utcTime() + 3 * 60 * 1000); + + BOOST_CHECK_EQUAL(1.5 * 60 * 1000, nodeTimeMaintenance.medianTimeOffset()); + BOOST_CHECK_EQUAL(utcTime() + 1.5 * 60 * 1000, nodeTimeMaintenance.getAlignedTime()); +} + +BOOST_AUTO_TEST_CASE(testNodeTimeMaintenance_singlarNode) +{ + // create five node +auto fixedSec1 = h256( + "4edbf97a0c6c3decde00ccd41f069dc30377f859fb1a9eb5759d0c9c995be244"); + auto sec1 = std::make_shared(fixedSec1.asBytes()); + auto pub1 = secp256k1PriToPub(sec1); + + auto fixedSec2 = h256( + "52ca4bd084c9d5a309dd5d5e08e6ddb3424168ee329e9a65cdf9f20c791dbe4d"); + auto sec2 = std::make_shared(fixedSec2.asBytes()); + auto pub2 = secp256k1PriToPub(sec2); + + auto fixedSec3 = h256( + "ba7699fcdc502b1ae4a7eb924ccc02db80e7d04056d2b3a114b2b2ccada4928d"); + auto sec3 = std::make_shared(fixedSec3.asBytes()); + auto pub3 = secp256k1PriToPub(sec3); + + auto fixedSec4 = h256( + "21b08860aa297501e51089e01631cc915d305d18c145136a55560277ad18b283"); + auto sec4 = std::make_shared(fixedSec4.asBytes()); + auto pub4 = secp256k1PriToPub(sec4); + + auto fixedSec5 = h256( + "badf6be7ea9865501aec46322b3ab2f0ddbd54e1c2c2c0502251eef85992ec1e"); + auto sec5 = std::make_shared(fixedSec5.asBytes()); + auto pub5 = secp256k1PriToPub(sec5); + + NodeTimeMaintenance nodeTimeMaintenance; + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub1, utcTime()); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub2, utcTime() + 1 * 60 * 1000); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub3, utcTime() + 2 * 60 * 1000); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub4, utcTime() + 3 * 60 * 1000); + nodeTimeMaintenance.tryToUpdatePeerTimeInfo(pub5, utcTime() + 4 * 60 * 1000); + + BOOST_CHECK_EQUAL(2 * 60 * 1000, nodeTimeMaintenance.medianTimeOffset()); + BOOST_CHECK_EQUAL(utcTime() + 2 * 60 * 1000, nodeTimeMaintenance.getAlignedTime()); +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-tool/test/unittests/libtool/VersionConvert.cpp b/bcos-tool/test/unittests/libtool/VersionConvert.cpp new file mode 100644 index 0000000..846fb0b --- /dev/null +++ b/bcos-tool/test/unittests/libtool/VersionConvert.cpp @@ -0,0 +1,24 @@ + +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; + +namespace bcos +{ +namespace test +{ +BOOST_AUTO_TEST_CASE(testVersionConvert) +{ + BOOST_CHECK_EQUAL(toVersionNumber("3.2.3"), 0x03020300); + BOOST_CHECK_EQUAL(toVersionNumber("3.2"), 0x03020000); + BOOST_CHECK_THROW(toVersionNumber("1"), InvalidVersion); + BOOST_CHECK_THROW(toVersionNumber("2.1"), InvalidVersion); + BOOST_CHECK_THROW(toVersionNumber("256.1"), InvalidVersion); +} + +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-tool/test/unittests/main/main.cpp b/bcos-tool/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-tool/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-txpool/CMakeLists.txt b/bcos-txpool/CMakeLists.txt new file mode 100644 index 0000000..7cc7bd1 --- /dev/null +++ b/bcos-txpool/CMakeLists.txt @@ -0,0 +1,44 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-txpool +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 bcos-txpool +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ + +cmake_minimum_required(VERSION 3.10) +set(CMAKE_OSX_DEPLOYMENT_TARGET "12" CACHE STRING "Minimum OS X deployment version") + +project(bcos-txpool VERSION ${VERSION}) + +set(PROTO_PATH ${PROJECT_SOURCE_DIR}) +set(SYNC_PROTO_GENERATE_BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}) +set(SYNC_PROTO_SUB_DIR "bcos-txpool/sync/protocol/proto") + +add_subdirectory(bcos-txpool) + +if (TESTS) + enable_testing() + set(CTEST_OUTPUT_ON_FAILURE TRUE) + add_subdirectory(test) +endif() + +# for doxygen +# include(BuildDocs) +# buildDoc(bcos-txpool-doc) + +# for code coverage +if (COVERAGE) + include(Coverage) + config_coverage("txpool-cov" "'/usr*' '${CMAKE_CURRENT_SOURCE_DIR}/bcos-cmake-scripts*' '${CMAKE_CURRENT_SOURCE_DIR}/test/bcos-test*'") +endif () diff --git a/bcos-txpool/bcos-txpool/CMakeLists.txt b/bcos-txpool/bcos-txpool/CMakeLists.txt new file mode 100644 index 0000000..6e929bc --- /dev/null +++ b/bcos-txpool/bcos-txpool/CMakeLists.txt @@ -0,0 +1,32 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") +aux_source_directory(. SRC_LIST) +include_directories(.) + +# generate sync protobuf files + +set(MESSAGES_PROTOS TxsSync.proto) +set(SYNC_PROTO_GENERATE_DIR ${SYNC_PROTO_GENERATE_BASE_DIR}/${SYNC_PROTO_SUB_DIR}) +include(GenerateSources) +protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${MESSAGES_PROTOS} ${PROTO_PATH} "sync/protocol/proto" ${SYNC_PROTO_GENERATE_BASE_DIR} ${SYNC_PROTO_GENERATE_DIR}) + +aux_source_directory(./txpool SRC_LIST) +include_directories(./txpool) +aux_source_directory(./txpool/storage SRC_LIST) +include_directories(./txpool/storage) +aux_source_directory(./txpool/validator SRC_LIST) +include_directories(./txpool/validator) + +aux_source_directory(./sync/ SRC_LIST) +include_directories(./sync/) + +aux_source_directory(./sync/protocol/PB SRC_LIST) +include_directories(./sync/protocol/PB) + +add_library(${TXPOOL_TARGET} ${SRC_LIST} ${PROTO_SRCS} ${HEADERS} ${PROTO_HDRS}) + +find_package(TBB CONFIG REQUIRED) +find_package(Protobuf CONFIG REQUIRED) +target_include_directories(${TXPOOL_TARGET} PUBLIC .) +target_include_directories(${TXPOOL_TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/bcos-txpool) +target_link_libraries(${TXPOOL_TARGET} PUBLIC TBB::tbb protobuf::libprotobuf bcos-protocol ${UTILITIES_TARGET} ${TOOL_TARGET}) diff --git a/bcos-txpool/bcos-txpool/TxPool.cpp b/bcos-txpool/bcos-txpool/TxPool.cpp new file mode 100644 index 0000000..94ca8c9 --- /dev/null +++ b/bcos-txpool/bcos-txpool/TxPool.cpp @@ -0,0 +1,531 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for txpool + * @file TxPool.cpp + * @author: yujiechen + * @date 2021-05-10 + */ +#include "TxPool.h" +#include "bcos-utilities/Error.h" +#include "txpool/validator/LedgerNonceChecker.h" +#include "txpool/validator/TxValidator.h" +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::sync; +using namespace bcos::consensus; +using namespace bcos::tool; +void TxPool::start() +{ + if (m_running) + { + TXPOOL_LOG(INFO) << LOG_DESC("The txpool has already been started!"); + return; + } + + // m_transactionSync->start(); + + m_txpoolStorage->start(); + m_running = true; + TXPOOL_LOG(INFO) << LOG_DESC("Start the txpool."); +} + +void TxPool::stop() +{ + if (!m_running) + { + TXPOOL_LOG(INFO) << LOG_DESC("The txpool has already been stopped!"); + return; + } + if (m_worker) + { + m_worker->stop(); + } + if (m_txpoolStorage) + { + m_txpoolStorage->stop(); + } + + // m_transactionSync->stop(); + + m_running = false; + TXPOOL_LOG(INFO) << LOG_DESC("Stop the txpool."); +} + +task::Task TxPool::submitTransaction( + protocol::Transaction::Ptr transaction) +{ + co_return co_await m_txpoolStorage->submitTransaction(std::move(transaction)); +} + +task::Task TxPool::broadcastPushTransaction(const protocol::Transaction& transaction) +{ + bcos::bytes buffer; + transaction.encode(buffer); + + m_frontService->asyncSendBroadcastMessage( + protocol::NodeType::CONSENSUS_NODE, protocol::SYNC_PUSH_TRANSACTION, bcos::ref(buffer)); + + co_return; +} + +task::Task TxPool::onReceivePushTransaction( + bcos::crypto::NodeIDPtr nodeID, const std::string& messageID, bytesConstRef data) +{ + try + { + auto transaction = m_transactionFactory->createTransaction(data, false); + auto submitResult = co_await submitTransaction(std::move(transaction)); + } + catch (std::exception& e) + { + TXPOOL_LOG(DEBUG) << "Submit transaction failed from p2p. " + << boost::diagnostic_information(e); + } +} + +task::Task> TxPool::getMissedTransactions( + std::vector transactionHashes, bcos::crypto::NodeIDPtr fromNodeID) +{ + co_return std::vector{}; +} + +bool TxPool::checkExistsInGroup(TxSubmitCallback _txSubmitCallback) +{ + auto syncConfig = m_transactionSync->config(); + if (!_txSubmitCallback || syncConfig->existsInGroup()) + { + return true; + } + auto txResult = m_config->txResultFactory()->createTxSubmitResult(); + txResult->setTxHash(HashType()); + txResult->setStatus((uint32_t)TransactionStatus::RequestNotBelongToTheGroup); + + auto errorMsg = "Do not send transactions to nodes that are not in the group"; + _txSubmitCallback(std::make_shared((int32_t)txResult->status(), errorMsg), txResult); + TXPOOL_LOG(WARNING) << LOG_DESC(errorMsg); + return false; +} + +void TxPool::asyncSealTxs(uint64_t _txsLimit, TxsHashSetPtr _avoidTxs, + std::function _sealCallback) +{ + // Note: not block seal new block here + auto self = weak_from_this(); + m_sealer->enqueue([self, _txsLimit, _avoidTxs, _sealCallback]() { + auto txpool = self.lock(); + if (!txpool) + { + return; + } + auto fetchedTxs = txpool->m_config->blockFactory()->createBlock(); + auto sysTxs = txpool->m_config->blockFactory()->createBlock(); + txpool->m_txpoolStorage->batchFetchTxs(fetchedTxs, sysTxs, _txsLimit, _avoidTxs, true); + _sealCallback(nullptr, fetchedTxs, sysTxs); + }); +} + +void TxPool::asyncNotifyBlockResult(BlockNumber _blockNumber, TransactionSubmitResultsPtr txsResult, + std::function _onNotifyFinished) +{ + m_worker->enqueue([this, txsResult = std::move(txsResult), _blockNumber]() { + m_txpoolStorage->batchRemove(_blockNumber, *txsResult); + }); + + if (_onNotifyFinished) + { + _onNotifyFinished(nullptr); + } +} + +void TxPool::asyncVerifyBlock(PublicPtr _generatedNodeID, bytesConstRef const& _block, + std::function _onVerifyFinished) +{ + auto block = m_config->blockFactory()->createBlock(_block); + auto blockHeader = block->blockHeader(); + TXPOOL_LOG(INFO) << LOG_DESC("begin asyncVerifyBlock") + << LOG_KV("consNum", blockHeader ? blockHeader->number() : -1) + << LOG_KV("hash", blockHeader ? blockHeader->hash().abridged() : "null"); + // Note: here must have thread pool for lock in the callback + // use single thread here to decrease thread competition + auto self = weak_from_this(); + m_verifier->enqueue([self, _generatedNodeID, blockHeader, block, _onVerifyFinished]() { + try + { + auto startT = utcTime(); + auto txpool = self.lock(); + if (!txpool) + { + if (_onVerifyFinished) + { + _onVerifyFinished(std::make_shared( + -1, "asyncVerifyBlock failed for lock txpool failed"), + false); + } + return; + } + auto txpoolStorage = txpool->m_txpoolStorage; + auto missedTxs = txpoolStorage->batchVerifyProposal(block); + auto onVerifyFinishedWrapper = + [txpool, txpoolStorage, _onVerifyFinished, block, blockHeader, missedTxs, startT]( + Error::Ptr _error, bool _ret) { + auto verifyRet = _ret; + auto verifyError = _error; + if (missedTxs->size() > 0) + { + // try to fetch the missed txs from the local txpool again + if (_error && _error->errorCode() == CommonError::TransactionsMissing) + { + verifyRet = txpoolStorage->batchVerifyProposal(missedTxs); + } + if (verifyRet) + { + verifyError = nullptr; + } + } + TXPOOL_LOG(INFO) + << METRIC << LOG_DESC("asyncVerifyBlock finished") + << LOG_KV("consNum", blockHeader ? blockHeader->number() : -1) + << LOG_KV("hash", blockHeader ? blockHeader->hash().abridged() : "null") + << LOG_KV("code", verifyError ? verifyError->errorCode() : 0) + << LOG_KV("msg", verifyError ? verifyError->errorMessage() : "success") + << LOG_KV("result", verifyRet) << LOG_KV("timecost", (utcTime() - startT)); + if (!_onVerifyFinished) + { + return; + } + _onVerifyFinished(verifyError, verifyRet); + // batchPreStore the proposal txs when verifySuccess in the case of not enable + // txsPreStore + // Note: here storeVerifiedBlock will block m_verifier and decrease the + // proposal-verify-perf, so we async the storeVerifiedBlock here using + // m_txsPreStore + if (!verifyError && verifyRet && block && block->blockHeader()) + { + txpool->m_txsPreStore->enqueue( + [txpool, block]() { txpool->storeVerifiedBlock(block); }); + } + }; + + if (missedTxs->size() == 0) + { + TXPOOL_LOG(DEBUG) << LOG_DESC("asyncVerifyBlock: hit all transactions in txpool") + << LOG_KV("consNum", blockHeader ? blockHeader->number() : -1) + << LOG_KV("nodeId", + txpool->m_transactionSync->config()->nodeID()->shortHex()); + onVerifyFinishedWrapper(nullptr, true); + return; + } + TXPOOL_LOG(DEBUG) << LOG_DESC("asyncVerifyBlock") + << LOG_KV("consNum", blockHeader ? blockHeader->number() : -1) + << LOG_KV("totalTxs", block->transactionsHashSize()) + << LOG_KV("missedTxs", missedTxs->size()); + txpool->m_transactionSync->requestMissedTxs( + _generatedNodeID, missedTxs, block, onVerifyFinishedWrapper); + } + catch (std::exception const& e) + { + TXPOOL_LOG(WARNING) << LOG_DESC("asyncVerifyBlock exception") + << LOG_KV("fromNodeId", _generatedNodeID->shortHex()) + << LOG_KV("consNum", blockHeader ? blockHeader->number() : -1) + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void TxPool::asyncNotifyTxsSyncMessage(Error::Ptr _error, std::string const& _uuid, + NodeIDPtr _nodeID, bytesConstRef _data, std::function _onRecv) +{ + auto self = weak_from_this(); + m_transactionSync->onRecvSyncMessage( + _error, _nodeID, _data, [self, _uuid, _nodeID](bytesConstRef _respData) { + try + { + auto txpool = self.lock(); + if (!txpool) + { + return; + } + txpool->m_sendResponseHandler( + _uuid, bcos::protocol::ModuleID::TxsSync, _nodeID, _respData); + } + catch (std::exception const& e) + { + TXPOOL_LOG(WARNING) << LOG_DESC("asyncNotifyTxsSyncMessage: sendResponse failed") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("uuid", _uuid) << LOG_KV("dst", _nodeID->shortHex()); + } + }); + if (!_onRecv) + { + return; + } + _onRecv(nullptr); +} + +void TxPool::notifyConsensusNodeList( + ConsensusNodeList const& _consensusNodeList, std::function _onRecvResponse) +{ + m_transactionSync->config()->setConsensusNodeList(_consensusNodeList); + if (!_onRecvResponse) + { + return; + } + _onRecvResponse(nullptr); +} + +void TxPool::notifyObserverNodeList( + ConsensusNodeList const& _observerNodeList, std::function _onRecvResponse) +{ + m_transactionSync->config()->setObserverList(_observerNodeList); + if (!_onRecvResponse) + { + return; + } + _onRecvResponse(nullptr); +} + +void TxPool::getTxsFromLocalLedger(HashListPtr _txsHash, HashListPtr _missedTxs, + std::function _onBlockFilled) +{ + // fetch from the local ledger + auto self = weak_from_this(); + m_worker->enqueue([self, _txsHash, _missedTxs, _onBlockFilled]() { + auto txpool = self.lock(); + if (!txpool) + { + _onBlockFilled( + std::make_shared(CommonError::TransactionsMissing, "TransactionsMissing"), + nullptr); + return; + } + auto sync = txpool->m_transactionSync; + sync->requestMissedTxs(nullptr, _missedTxs, nullptr, + [txpool, _txsHash, _onBlockFilled](Error::Ptr _error, bool _verifyResult) { + if (_error || !_verifyResult) + { + TXPOOL_LOG(WARNING) + << LOG_DESC("getTxsFromLocalLedger failed") + << LOG_KV("code", _error ? _error->errorCode() : 0) + << LOG_KV("msg", _error ? _error->errorMessage() : "fetchSucc") + << LOG_KV("verifyResult", _verifyResult); + _onBlockFilled(std::make_shared( + CommonError::TransactionsMissing, "TransactionsMissing"), + nullptr); + return; + } + TXPOOL_LOG(INFO) << LOG_DESC( + "asyncFillBlock miss and try to get the transaction from the ledger success"); + txpool->fillBlock(_txsHash, _onBlockFilled, false); + }); + }); +} + +// Note: the transaction must be all hit in local txpool +void TxPool::asyncFillBlock( + HashListPtr _txsHash, std::function _onBlockFilled) +{ + fillBlock(std::move(_txsHash), std::move(_onBlockFilled), true); +} + +void TxPool::fillBlock(HashListPtr _txsHash, + std::function _onBlockFilled, bool _fetchFromLedger) +{ + HashListPtr missedTxs = std::make_shared(); + auto txs = m_txpoolStorage->fetchTxs(*missedTxs, *_txsHash); + if (!missedTxs->empty()) + { + TXPOOL_LOG(WARNING) << LOG_DESC("asyncFillBlock failed for missing some transactions") + << LOG_KV("missedTxsSize", missedTxs->size()); + if (_fetchFromLedger) + { + TXPOOL_LOG(INFO) << LOG_DESC("getTxsFromLocalLedger") + << LOG_KV("txsSize", _txsHash->size()) + << LOG_KV("missedSize", missedTxs->size()); + getTxsFromLocalLedger(_txsHash, missedTxs, _onBlockFilled); + } + else + { + _onBlockFilled( + std::make_shared(CommonError::TransactionsMissing, "TransactionsMissing"), + nullptr); + } + return; + } + _onBlockFilled(nullptr, txs); +} + + +void TxPool::asyncMarkTxs(HashListPtr _txsHash, bool _sealedFlag, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + std::function _onRecvResponse) +{ + m_txpoolStorage->batchMarkTxs(*_txsHash, _batchId, _batchHash, _sealedFlag); + if (!_onRecvResponse) + { + return; + } + _onRecvResponse(nullptr); +} + +void TxPool::asyncResetTxPool(std::function _onRecvResponse) +{ + // mark all the transactions as unsealed + m_txpoolStorage->batchMarkAllTxs(false); + if (!_onRecvResponse) + { + return; + } + TXPOOL_LOG(INFO) << LOG_DESC("asyncResetTxPool") << LOG_KV("txsSize", m_txpoolStorage->size()); + _onRecvResponse(nullptr); +} + +void TxPool::init() +{ + initSendResponseHandler(); + auto ledgerConfigFetcher = std::make_shared(m_config->ledger()); + TXPOOL_LOG(INFO) << LOG_DESC("fetch LedgerConfig information"); + ledgerConfigFetcher->fetchBlockNumberAndHash(); + ledgerConfigFetcher->fetchConsensusNodeList(); + ledgerConfigFetcher->fetchObserverNodeList(); + TXPOOL_LOG(INFO) << LOG_DESC("fetch LedgerConfig success"); + + auto blockLimit = m_config->blockLimit(); + auto ledgerConfig = ledgerConfigFetcher->ledgerConfig(); + auto startNumber = + (ledgerConfig->blockNumber() > blockLimit ? (ledgerConfig->blockNumber() - blockLimit + 1) : + 0); + if (startNumber > 0) + { + auto toNumber = ledgerConfig->blockNumber(); + auto fetchedSize = std::min(blockLimit, (toNumber - startNumber + 1)); + TXPOOL_LOG(INFO) << LOG_DESC("fetch history nonces information") + << LOG_KV("startNumber", startNumber) + << LOG_KV("fetchedSize", fetchedSize); + ledgerConfigFetcher->fetchNonceList(startNumber, fetchedSize); + } + TXPOOL_LOG(INFO) << LOG_DESC("fetch history nonces success"); + + // create LedgerNonceChecker and set it into the validator + TXPOOL_LOG(INFO) << LOG_DESC("init txs validator"); + auto ledgerNonceChecker = std::make_shared( + ledgerConfigFetcher->nonceList(), ledgerConfig->blockNumber(), blockLimit); + + auto validator = std::dynamic_pointer_cast(m_config->txValidator()); + validator->setLedgerNonceChecker(ledgerNonceChecker); + TXPOOL_LOG(INFO) << LOG_DESC("init txs validator success"); + + // init syncConfig + TXPOOL_LOG(INFO) << LOG_DESC("init sync config"); + auto txsSyncConfig = m_transactionSync->config(); + txsSyncConfig->setConsensusNodeList(ledgerConfig->consensusNodeList()); + txsSyncConfig->setObserverList(ledgerConfig->observerNodeList()); + TXPOOL_LOG(INFO) << LOG_DESC("init sync config success"); +} + +void TxPool::initSendResponseHandler() +{ + // set the sendResponse callback + std::weak_ptr weakFrontService = + m_transactionSync->config()->frontService(); + m_sendResponseHandler = [weakFrontService](std::string const& _id, int _moduleID, + NodeIDPtr _dstNode, bytesConstRef _data) { + try + { + auto frontService = weakFrontService.lock(); + if (!frontService) + { + return; + } + frontService->asyncSendResponse( + _id, _moduleID, _dstNode, _data, [_id, _moduleID, _dstNode](Error::Ptr _error) { + if (_error) + { + TXPOOL_LOG(WARNING) + << LOG_DESC("sendResponse failed") << LOG_KV("uuid", _id) + << LOG_KV("module", std::to_string(_moduleID)) + << LOG_KV("dst", _dstNode->shortHex()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + } + catch (std::exception const& e) + { + TXPOOL_LOG(WARNING) << LOG_DESC("sendResponse exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("uuid", _id) << LOG_KV("moduleID", _moduleID) + << LOG_KV("peer", _dstNode->shortHex()); + } + }; +} + + +void TxPool::storeVerifiedBlock(bcos::protocol::Block::Ptr _block) +{ + auto blockHeader = _block->blockHeader(); + TXPOOL_LOG(INFO) << LOG_DESC("storeVerifiedBlock") << LOG_KV("consNum", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("txsSize", _block->transactionsHashSize()); + auto txsHashList = std::make_shared(); + for (size_t i = 0; i < _block->transactionsHashSize(); i++) + { + txsHashList->emplace_back(_block->transactionHash(i)); + } + + auto self = weak_from_this(); + auto startT = utcTime(); + asyncFillBlock( + txsHashList, [self, startT, blockHeader, _block](Error::Ptr _error, TransactionsPtr _txs) { + if (_error) + { + TXPOOL_LOG(WARNING) + << LOG_DESC("storeVerifiedBlock, fillBlock error") + << LOG_KV("consNum", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("msg", _error->errorMessage()) << LOG_KV("code", _error->errorCode()); + return; + } + auto txpool = self.lock(); + if (!txpool) + { + return; + } + txpool->m_config->ledger()->asyncPreStoreBlockTxs( + _txs, _block, [startT, blockHeader](Error::UniquePtr&& _error) { + if (_error) + { + TXPOOL_LOG(WARNING) + << LOG_DESC("storeVerifiedBlock: asyncPreStoreBlockTxs error") + << LOG_KV("consNum", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("msg", _error->errorMessage()) + << LOG_KV("code", _error->errorCode()); + return; + } + TXPOOL_LOG(INFO) << LOG_DESC("storeVerifiedBlock success") + << LOG_KV("consNum", blockHeader->number()) + << LOG_KV("hash", blockHeader->hash().abridged()) + << LOG_KV("timecost", (utcTime() - startT)); + }); + }); +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/TxPool.h b/bcos-txpool/bcos-txpool/TxPool.h new file mode 100644 index 0000000..dabcfda --- /dev/null +++ b/bcos-txpool/bcos-txpool/TxPool.h @@ -0,0 +1,194 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for txpool + * @file TxPool.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once +#include "TxPoolConfig.h" +#include "bcos-framework/front/FrontServiceInterface.h" +#include "bcos-framework/ledger/LedgerInterface.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-framework/protocol/TransactionFactory.h" +#include "sync/interfaces/TransactionSyncInterface.h" +#include "txpool/interfaces/TxPoolStorageInterface.h" +#include +#include +#include +#include +namespace bcos::txpool +{ +class TxPool : public TxPoolInterface, public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + TxPool(TxPoolConfig::Ptr config, TxPoolStorageInterface::Ptr txpoolStorage, + bcos::sync::TransactionSyncInterface::Ptr transactionSync, size_t verifierWorkerNum = 1) + : m_config(std::move(config)), + m_txpoolStorage(std::move(txpoolStorage)), + m_transactionSync(std::move(transactionSync)), + m_frontService(m_transactionSync->config()->frontService()), + m_transactionFactory(m_config->blockFactory()->transactionFactory()), + m_ledger(m_config->ledger()) + { + m_worker = std::make_shared("submitter", verifierWorkerNum); + m_verifier = std::make_shared("verifier", 4); + m_sealer = std::make_shared("txsSeal", 1); + // worker to pre-store-texs + m_txsPreStore = std::make_shared("txsPreStore", 1); + TXPOOL_LOG(INFO) << LOG_DESC("create TxPool") + << LOG_KV("submitterWorkerNum", verifierWorkerNum); + } + + ~TxPool() noexcept override { stop(); } + + void start() override; + void stop() override; + + // For transaction sync + task::Task submitTransaction( + protocol::Transaction::Ptr transaction) override; + + task::Task broadcastPushTransaction(const protocol::Transaction& transaction) override; + + task::Task onReceivePushTransaction( + bcos::crypto::NodeIDPtr nodeID, const std::string& messageID, bytesConstRef data) override; + + task::Task> getMissedTransactions( + std::vector transactionHashes, + bcos::crypto::NodeIDPtr fromNodeID) override; + // ended + + void asyncSealTxs(uint64_t _txsLimit, TxsHashSetPtr _avoidTxs, + std::function + _sealCallback) override; + + void asyncNotifyBlockResult(bcos::protocol::BlockNumber _blockNumber, + bcos::protocol::TransactionSubmitResultsPtr _txsResult, + std::function _onNotifyFinished) override; + + void asyncVerifyBlock(bcos::crypto::PublicPtr _generatedNodeID, bytesConstRef const& _block, + std::function _onVerifyFinished) override; + + void asyncNotifyTxsSyncMessage(bcos::Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bytesConstRef _data, + std::function _onRecv) override; + + void notifyConsensusNodeList(bcos::consensus::ConsensusNodeList const& _consensusNodeList, + std::function _onRecvResponse) override; + + void asyncFillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled) override; + + void notifyObserverNodeList(bcos::consensus::ConsensusNodeList const& _observerNodeList, + std::function _onRecvResponse) override; + + void asyncMarkTxs(bcos::crypto::HashListPtr _txsHash, bool _sealedFlag, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + std::function _onRecvResponse) override; + + void asyncResetTxPool(std::function _onRecvResponse) override; + + TxPoolConfig::Ptr txpoolConfig() { return m_config; } + TxPoolStorageInterface::Ptr txpoolStorage() { return m_txpoolStorage; } + + auto& transactionSync() { return m_transactionSync; } + void setTransactionSync(bcos::sync::TransactionSyncInterface::Ptr _transactionSync) + { + m_transactionSync = std::move(_transactionSync); + } + + virtual void init(); + virtual void registerUnsealedTxsNotifier( + std::function)> _unsealedTxsNotifier) + { + m_txpoolStorage->registerUnsealedTxsNotifier(std::move(_unsealedTxsNotifier)); + } + + void asyncGetPendingTransactionSize( + std::function _onGetTxsSize) override + { + if (!_onGetTxsSize) + { + return; + } + auto pendingTxsSize = m_txpoolStorage->size(); + _onGetTxsSize(nullptr, pendingTxsSize); + } + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onResponse) override + { + m_transactionSync->config()->notifyConnectedNodes(_connectedNodes, _onResponse); + if (m_txpoolStorage->size() > 0) + { + return; + } + // try to broadcast empty txsStatus and request txs from the connected nodes when the txpool + // is empty + m_transactionSync->onEmptyTxs(); + } + + void tryToSyncTxsFromPeers() override { m_transactionSync->onEmptyTxs(); } + + // for UT + void setTxPoolStorage(TxPoolStorageInterface::Ptr _txpoolStorage) + { + m_txpoolStorage = _txpoolStorage; + m_transactionSync->config()->setTxPoolStorage(_txpoolStorage); + } + + void registerTxsCleanUpSwitch(std::function _txsCleanUpSwitch) override + { + m_txpoolStorage->registerTxsCleanUpSwitch(_txsCleanUpSwitch); + } + + void clearAllTxs() override { m_txpoolStorage->clear(); } + +protected: + virtual bool checkExistsInGroup(bcos::protocol::TxSubmitCallback _txSubmitCallback); + virtual void getTxsFromLocalLedger(bcos::crypto::HashListPtr _txsHash, + bcos::crypto::HashListPtr _missedTxs, + std::function _onBlockFilled); + + virtual void fillBlock(bcos::crypto::HashListPtr _txsHash, + std::function _onBlockFilled, + bool _fetchFromLedger = true); + + void initSendResponseHandler(); + + virtual void storeVerifiedBlock(bcos::protocol::Block::Ptr _block); + +private: + TxPoolConfig::Ptr m_config; + TxPoolStorageInterface::Ptr m_txpoolStorage; + bcos::sync::TransactionSyncInterface::Ptr m_transactionSync; + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcos::protocol::TransactionFactory::Ptr m_transactionFactory; + bcos::ledger::LedgerInterface::Ptr m_ledger; + + std::function + m_sendResponseHandler; + + ThreadPool::Ptr m_worker; + ThreadPool::Ptr m_verifier; + ThreadPool::Ptr m_sealer; + ThreadPool::Ptr m_txsPreStore; + std::atomic_bool m_running = {false}; +}; +} // namespace bcos::txpool diff --git a/bcos-txpool/bcos-txpool/TxPoolConfig.h b/bcos-txpool/bcos-txpool/TxPoolConfig.h new file mode 100644 index 0000000..6b09341 --- /dev/null +++ b/bcos-txpool/bcos-txpool/TxPoolConfig.h @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Transaction pool configuration module, + * including transaction pool dependent modules and related configuration information + * @file TxPoolConfig.h + * @author: yujiechen + * @date 2021-05-08 + */ +#pragma once +#include "txpool/interfaces/NonceCheckerInterface.h" +#include "txpool/interfaces/TxPoolStorageInterface.h" +#include "txpool/interfaces/TxValidatorInterface.h" +#include +#include +#include +#include +namespace bcos +{ +namespace txpool +{ +class TxPoolConfig +{ +public: + using Ptr = std::shared_ptr; + TxPoolConfig(TxValidatorInterface::Ptr _txValidator, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory, + bcos::protocol::BlockFactory::Ptr _blockFactory, + std::shared_ptr _ledger, + NonceCheckerInterface::Ptr _txpoolNonceChecker, int64_t _blockLimit = 1000) + : m_txValidator(std::move(_txValidator)), + m_txResultFactory(std::move(_txResultFactory)), + m_blockFactory(std::move(_blockFactory)), + m_ledger(std::move(_ledger)), + m_txPoolNonceChecker(std::move(_txpoolNonceChecker)), + m_blockLimit(_blockLimit) + {} + + virtual ~TxPoolConfig() {} + virtual void setPoolLimit(size_t _poolLimit) { m_poolLimit = _poolLimit; } + virtual size_t poolLimit() const { return m_poolLimit; } + + NonceCheckerInterface::Ptr txPoolNonceChecker() { return m_txPoolNonceChecker; } + + TxValidatorInterface::Ptr txValidator() { return m_txValidator; } + bcos::protocol::TransactionSubmitResultFactory::Ptr txResultFactory() + { + return m_txResultFactory; + } + + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + void setBlockFactory(bcos::protocol::BlockFactory::Ptr _blockFactory) + { + m_blockFactory = _blockFactory; + } + + bcos::protocol::TransactionFactory::Ptr txFactory() + { + return m_blockFactory->transactionFactory(); + } + std::shared_ptr ledger() { return m_ledger; } + int64_t blockLimit() const { return m_blockLimit; } + +private: + TxValidatorInterface::Ptr m_txValidator; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + std::shared_ptr m_ledger; + NonceCheckerInterface::Ptr m_txPoolNonceChecker; + size_t m_poolLimit = 15000; + int64_t m_blockLimit = 1000; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/TxPoolFactory.cpp b/bcos-txpool/bcos-txpool/TxPoolFactory.cpp new file mode 100644 index 0000000..0450fb8 --- /dev/null +++ b/bcos-txpool/bcos-txpool/TxPoolFactory.cpp @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create txpool + * @file TxPoolFactory.cpp + * @author: yujiechen + * @date 2021-05-19 + */ +#include "TxPoolFactory.h" +#include "bcos-txpool/sync/TransactionSync.h" +#include "bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h" +#include "bcos-txpool/txpool/validator/TxValidator.h" +#include "txpool/storage/MemoryStorage.h" +#include "txpool/validator/TxPoolNonceChecker.h" +#include + +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::protocol; + +TxPoolFactory::TxPoolFactory(NodeIDPtr _nodeId, CryptoSuite::Ptr _cryptoSuite, + TransactionSubmitResultFactory::Ptr _txResultFactory, BlockFactory::Ptr _blockFactory, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::ledger::LedgerInterface::Ptr _ledger, std::string const& _groupId, + std::string const& _chainId, int64_t _blockLimit) + : m_nodeId(_nodeId), + m_cryptoSuite(_cryptoSuite), + m_txResultFactory(_txResultFactory), + m_blockFactory(_blockFactory), + m_frontService(_frontService), + m_ledger(_ledger), + m_groupId(_groupId), + m_chainId(_chainId), + m_blockLimit(_blockLimit) +{} + + +TxPool::Ptr TxPoolFactory::createTxPool( + size_t _notifyWorkerNum, size_t _verifierWorkerNum, int64_t _txsExpirationTime) +{ + TXPOOL_LOG(INFO) << LOG_DESC("create transaction validator"); + auto txpoolNonceChecker = std::make_shared(); + auto validator = + std::make_shared(txpoolNonceChecker, m_cryptoSuite, m_groupId, m_chainId); + + TXPOOL_LOG(INFO) << LOG_DESC("create transaction config"); + auto txpoolConfig = std::make_shared( + validator, m_txResultFactory, m_blockFactory, m_ledger, txpoolNonceChecker, m_blockLimit); + + TXPOOL_LOG(INFO) << LOG_DESC("create transaction storage"); + auto txpoolStorage = + std::make_shared(txpoolConfig, _notifyWorkerNum, _txsExpirationTime); + + auto syncMsgFactory = std::make_shared(); + TXPOOL_LOG(INFO) << LOG_DESC("create sync config"); + auto txsSyncConfig = std::make_shared( + m_nodeId, m_frontService, txpoolStorage, syncMsgFactory, m_blockFactory, m_ledger); + TXPOOL_LOG(INFO) << LOG_DESC("create sync engine"); + auto txsSync = std::make_shared(txsSyncConfig); + + TXPOOL_LOG(INFO) << LOG_DESC("create txpool") << LOG_KV("submitWorkerNum", _verifierWorkerNum) + << LOG_KV("notifyWorkerNum", _notifyWorkerNum); + return std::make_shared(txpoolConfig, txpoolStorage, txsSync, _verifierWorkerNum); +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/TxPoolFactory.h b/bcos-txpool/bcos-txpool/TxPoolFactory.h new file mode 100644 index 0000000..d8ae6f1 --- /dev/null +++ b/bcos-txpool/bcos-txpool/TxPoolFactory.h @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory to create txpool + * @file TxPoolFactory.h + * @author: yujiechen + * @date 2021-05-19 + */ +#pragma once +#include "TxPool.h" +#include "TxPoolConfig.h" +#include "sync/TransactionSyncConfig.h" +#include +namespace bcos +{ +namespace txpool +{ +class TxPoolFactory +{ +public: + using Ptr = std::shared_ptr; + TxPoolFactory(bcos::crypto::NodeIDPtr _nodeId, bcos::crypto::CryptoSuite::Ptr _cryptoSuite, + bcos::protocol::TransactionSubmitResultFactory::Ptr _txResultFactory, + bcos::protocol::BlockFactory::Ptr _blockFactory, + bcos::front::FrontServiceInterface::Ptr _frontService, + std::shared_ptr _ledger, std::string const& _groupId, + std::string const& _chainId, int64_t _blockLimit); + + virtual ~TxPoolFactory() {} + TxPool::Ptr createTxPool(size_t _notifyWorkerNum = 2, size_t _verifierWorkerNum = 1, + int64_t _txsExpirationTime = 10 * 60 * 1000); + +private: + bcos::crypto::NodeIDPtr m_nodeId; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::front::FrontServiceInterface::Ptr m_frontService; + std::shared_ptr m_ledger; + std::string m_groupId; + std::string m_chainId; + int64_t m_blockLimit = 1000; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/TransactionSync.cpp b/bcos-txpool/bcos-txpool/sync/TransactionSync.cpp new file mode 100644 index 0000000..dbdf6d3 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/TransactionSync.cpp @@ -0,0 +1,773 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for transaction sync + * @file TransactionSync.cpp + * @author: yujiechen + * @date 2021-05-11 + */ +#include "bcos-txpool/sync/TransactionSync.h" +#include "bcos-txpool/sync/utilities/Common.h" +#include +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::txpool; +using namespace bcos::protocol; +using namespace bcos::ledger; +using namespace bcos::consensus; +static unsigned const c_maxSendTransactions = 10000; + +void TransactionSync::start() +{ + startWorking(); + m_running.store(true); + SYNC_LOG(DEBUG) << LOG_DESC("start TransactionSync"); +} + +void TransactionSync::stop() +{ + if (!m_running) + { + SYNC_LOG(DEBUG) << LOG_DESC("TransactionSync already stopped"); + return; + } + m_running.store(false); + if (m_worker) + { + m_worker->stop(); + } + if (m_txsRequester) + { + m_txsRequester->stop(); + } + finishWorker(); + stopWorking(); + terminate(); + SYNC_LOG(DEBUG) << LOG_DESC("stop SyncTransaction"); +} + +void TransactionSync::executeWorker() +{ + if (!downloadTxsBufferEmpty()) + { + maintainDownloadingTransactions(); + } + if (m_config->existsInGroup() && downloadTxsBufferEmpty() && m_newTransactions.load()) + { + maintainTransactions(); + } + if (!m_config->existsInGroup() || (!m_newTransactions && downloadTxsBufferEmpty())) + { + boost::unique_lock l(x_signalled); + m_signalled.wait_for(l, boost::chrono::milliseconds(10)); + } +} + +void TransactionSync::onRecvSyncMessage( + Error::Ptr _error, NodeIDPtr _nodeID, bytesConstRef _data, SendResponseCallback _sendResponse) +{ + try + { + if (_error != nullptr) + { + SYNC_LOG(WARNING) << LOG_DESC("onRecvSyncMessage error") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMsg", _error->errorMessage()); + return; + } + // reject the message from the outside-group + if (!m_config->existsInGroup(_nodeID)) + { + return; + } + auto txsSyncMsg = m_config->msgFactory()->createTxsSyncMsg(_data); + // receive transactions + if (txsSyncMsg->type() == TxsSyncPacketType::TxsPacket) + { + txsSyncMsg->setFrom(_nodeID); + appendDownloadTxsBuffer(txsSyncMsg); + m_signalled.notify_all(); + return; + } + // receive txs request, and response the transactions + if (txsSyncMsg->type() == TxsSyncPacketType::TxsRequestPacket) + { + auto self = weak_from_this(); + m_worker->enqueue([self, txsSyncMsg, _sendResponse, _nodeID]() { + try + { + auto transactionSync = self.lock(); + if (!transactionSync) + { + return; + } + transactionSync->onReceiveTxsRequest(txsSyncMsg, _sendResponse, _nodeID); + } + catch (std::exception const& e) + { + SYNC_LOG(WARNING) << LOG_DESC("onRecvSyncMessage: send txs response exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("peer", _nodeID->shortHex()); + } + }); + } + if (txsSyncMsg->type() == TxsSyncPacketType::TxsStatusPacket) + { + auto self = weak_from_this(); + m_txsRequester->enqueue([self, _nodeID, txsSyncMsg]() { + try + { + auto transactionSync = self.lock(); + if (!transactionSync) + { + return; + } + transactionSync->onPeerTxsStatus(_nodeID, txsSyncMsg); + } + catch (std::exception const& e) + { + SYNC_LOG(WARNING) << LOG_DESC("onRecvSyncMessage: onPeerTxsStatus exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("peer", _nodeID->shortHex()); + } + }); + } + } + catch (std::exception const& e) + { + SYNC_LOG(WARNING) << LOG_DESC("onRecvSyncMessage exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("peer", _nodeID->shortHex()); + } +} + +void TransactionSync::onReceiveTxsRequest(TxsSyncMsgInterface::Ptr _txsRequest, + SendResponseCallback _sendResponse, bcos::crypto::PublicPtr _peer) +{ + auto const& txsHash = _txsRequest->txsHash(); + HashList missedTxs; + auto txs = m_config->txpoolStorage()->fetchTxs(missedTxs, txsHash); + // Note: here assume that all the transaction should be hit in the txpool + if (missedTxs.size() > 0) + { + SYNC_LOG(DEBUG) << LOG_DESC("onReceiveTxsRequest: transaction missing") + << LOG_KV("missedTxsSize", missedTxs.size()) + << LOG_KV("peer", _peer ? _peer->shortHex() : "unknown") + << LOG_KV("nodeId", m_config->nodeID()->shortHex()); +#if FISCO_DEBUG + // TODO: remove this, now just for bug tracing + for (auto txHash : missedTxs) + { + SYNC_LOG(WARNING) << LOG_DESC("miss tx") << txHash.abridged(); + } +#endif + } + // response the txs + auto block = m_config->blockFactory()->createBlock(); + for (auto constTx : *txs) + { + auto tx = std::const_pointer_cast(constTx); + block->appendTransaction(tx); + } + bytesPointer txsData = std::make_shared(); + block->encode(*txsData); + auto txsResponse = m_config->msgFactory()->createTxsSyncMsg( + TxsSyncPacketType::TxsResponsePacket, std::move(*txsData)); + auto packetData = txsResponse->encode(); + _sendResponse(ref(*packetData)); + SYNC_LOG(INFO) << LOG_DESC("onReceiveTxsRequest: response txs") + << LOG_KV("peer", _peer ? _peer->shortHex() : "unknown") + << LOG_KV("txsSize", txs->size()); +} + +void TransactionSync::requestMissedTxs(PublicPtr _generatedNodeID, HashListPtr _missedTxs, + Block::Ptr _verifiedProposal, std::function _onVerifyFinished) +{ + auto missedTxsSet = + std::make_shared>(_missedTxs->begin(), _missedTxs->end()); + auto startT = utcTime(); + auto self = weak_from_this(); + m_config->ledger()->asyncGetBatchTxsByHashList(_missedTxs, false, + [self, startT, _verifiedProposal, missedTxsSet, _generatedNodeID, _onVerifyFinished]( + Error::Ptr _error, TransactionsPtr _fetchedTxs, + std::shared_ptr>) { + auto txsSync = self.lock(); + if (!txsSync) + { + return; + } + // hit all the txs + auto missedTxsSize = txsSync->onGetMissedTxsFromLedger( + *missedTxsSet, _error, _fetchedTxs, _verifiedProposal, _onVerifyFinished); + if (missedTxsSize == 0) + { + return; + } + if (!_generatedNodeID || + _generatedNodeID->data() == txsSync->m_config->nodeID()->data()) + { + SYNC_LOG(WARNING) + << LOG_DESC("requestMissedTxs failed from the ledger for Transaction missing") + << LOG_KV("missedTxs", missedTxsSize); + _onVerifyFinished( + std::make_shared(CommonError::TransactionsMissing, + "requestMissedTxs failed from the ledger for Transaction missing"), + false); + return; + } + // fetch missed txs from the given peer + auto ledgerMissedTxs = + std::make_shared(missedTxsSet->begin(), missedTxsSet->end()); + SYNC_LOG(DEBUG) + << LOG_DESC("requestMissedTxs: missing txs from ledger and fetch from the peer") + << LOG_KV("txsSize", ledgerMissedTxs->size()) + << LOG_KV("peer", _generatedNodeID->shortHex()) + << LOG_KV("readDBTime", utcTime() - startT) + << LOG_KV("consNum", _verifiedProposal && _verifiedProposal->blockHeader() ? + _verifiedProposal->blockHeader()->number() : + -1) + << LOG_KV("hash", _verifiedProposal && _verifiedProposal->blockHeader() ? + _verifiedProposal->blockHeader()->hash().abridged() : + "null"); + txsSync->requestMissedTxsFromPeer( + _generatedNodeID, ledgerMissedTxs, _verifiedProposal, _onVerifyFinished); + }); +} + +size_t TransactionSync::onGetMissedTxsFromLedger(std::set& _missedTxs, Error::Ptr _error, + TransactionsPtr _fetchedTxs, Block::Ptr _verifiedProposal, + VerifyResponseCallback _onVerifyFinished) +{ + if (_error != nullptr) + { + SYNC_LOG(TRACE) << LOG_DESC("onGetMissedTxsFromLedger: get error response") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + return _missedTxs.size(); + } + // import and verify the transactions + auto ret = importDownloadedTxs(m_config->nodeID(), _fetchedTxs, _verifiedProposal); + if (!ret) + { + SYNC_LOG(WARNING) << LOG_DESC("onGetMissedTxsFromLedger: verify tx failed"); + return _missedTxs.size(); + } + // fetch missed transactions from the local ledger + for (auto tx : *_fetchedTxs) + { + if (!_missedTxs.count(tx->hash())) + { + SYNC_LOG(WARNING) << LOG_DESC( + "onGetMissedTxsFromLedger: Encounter transaction that was " + "not expected to fetch from the ledger") + << LOG_KV("tx", tx->hash().abridged()); + continue; + } + // update the missedTxs + _missedTxs.erase(tx->hash()); + } + if (_missedTxs.size() == 0 && _onVerifyFinished) + { + SYNC_LOG(DEBUG) << LOG_DESC("onGetMissedTxsFromLedger: hit all transactions"); + _onVerifyFinished(nullptr, true); + } + SYNC_LOG(TRACE) << LOG_DESC("onGetMissedTxsFromLedger: missing txs") + << LOG_KV("missCount", _missedTxs.size()); + return _missedTxs.size(); +} + +void TransactionSync::requestMissedTxsFromPeer(PublicPtr _generatedNodeID, HashListPtr _missedTxs, + Block::Ptr _verifiedProposal, std::function _onVerifyFinished) +{ + BlockHeader::Ptr proposalHeader = nullptr; + if (_verifiedProposal) + { + proposalHeader = _verifiedProposal->blockHeader(); + } + if (_missedTxs->empty() && _onVerifyFinished) + { + _onVerifyFinished(nullptr, true); + return; + } + + + auto protocolID = _verifiedProposal ? ModuleID::ConsTxsSync : ModuleID::TxsSync; + + auto txsRequest = + m_config->msgFactory()->createTxsSyncMsg(TxsSyncPacketType::TxsRequestPacket, *_missedTxs); + auto encodedData = txsRequest->encode(); + auto startT = utcTime(); + auto self = weak_from_this(); + m_config->frontService()->asyncSendMessageByNodeID(protocolID, std::move(_generatedNodeID), + ref(*encodedData), m_config->networkTimeout(), + [self, startT, _missedTxs, _verifiedProposal, proposalHeader, _onVerifyFinished]( + Error::Ptr _error, NodeIDPtr _nodeID, bytesConstRef _data, const std::string&, + SendResponseCallback) { + try + { + auto transactionSync = self.lock(); + if (!transactionSync) + { + return; + } + auto networkT = utcTime() - startT; + auto recordT = utcTime(); + transactionSync->verifyFetchedTxs(_error, _nodeID, _data, _missedTxs, + _verifiedProposal, + [networkT, recordT, proposalHeader, _onVerifyFinished]( + Error::Ptr _error, bool _result) { + if (!_onVerifyFinished) + { + return; + } + _onVerifyFinished(_error, _result); + if (!(proposalHeader)) + { + return; + } + SYNC_LOG(DEBUG) + << LOG_DESC("requestMissedTxs: response verify result") + << LOG_KV("propIndex", proposalHeader->number()) + << LOG_KV("propHash", proposalHeader->hash().abridged()) + << LOG_KV("_result", _result) << LOG_KV("networkT", networkT) + << LOG_KV("verifyAndSubmitT", (utcTime() - recordT)); + }); + } + catch (std::exception const& e) + { + SYNC_LOG(WARNING) + << LOG_DESC( + "requestMissedTxs: verifyFetchedTxs when recv txs response exception") + << LOG_KV("error", boost::diagnostic_information(e)) + << LOG_KV("_peer", _nodeID->shortHex()); + } + }); +} + +void TransactionSync::verifyFetchedTxs(Error::Ptr _error, NodeIDPtr _nodeID, bytesConstRef _data, + HashListPtr _missedTxs, Block::Ptr _verifiedProposal, VerifyResponseCallback _onVerifyFinished) +{ + auto startT = utcTime(); + auto recordT = utcTime(); + if (_error != nullptr) + { + SYNC_LOG(INFO) << LOG_DESC("asyncVerifyBlock: fetch missed txs failed") + << LOG_KV("peer", _nodeID ? _nodeID->shortHex() : "unknown") + << LOG_KV("missedTxsSize", _missedTxs->size()) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()) + << LOG_KV( + "propHash", (_verifiedProposal && _verifiedProposal->blockHeader()) ? + _verifiedProposal->blockHeader()->hash().abridged() : + "unknown") + << LOG_KV( + "propIndex", (_verifiedProposal && _verifiedProposal->blockHeader()) ? + _verifiedProposal->blockHeader()->number() : + -1); + _onVerifyFinished(_error, false); + return; + } + auto txsResponse = m_config->msgFactory()->createTxsSyncMsg(_data); + auto error = nullptr; + if (txsResponse->type() != TxsSyncPacketType::TxsResponsePacket) + { + SYNC_LOG(WARNING) << LOG_DESC("requestMissedTxs: receive invalid txsResponse") + << LOG_KV("peer", _nodeID->shortHex()) + << LOG_KV("expectedType", TxsSyncPacketType::TxsResponsePacket) + << LOG_KV("recvType", txsResponse->type()); + _onVerifyFinished(std::make_shared( + CommonError::FetchTransactionsFailed, "FetchTransactionsFailed"), + false); + return; + } + // verify missedTxs + auto transactions = m_config->blockFactory()->createBlock(txsResponse->txsData(), true, false); + auto decodeT = utcTime() - startT; + startT = utcTime(); + BlockHeader::Ptr proposalHeader = nullptr; + if (_verifiedProposal) + { + proposalHeader = _verifiedProposal->blockHeader(); + } + if (_missedTxs->size() != transactions->transactionsSize()) + { + SYNC_LOG(INFO) << LOG_DESC("verifyFetchedTxs failed") + << LOG_KV("expectedTxs", _missedTxs->size()) + << LOG_KV("fetchedTxs", transactions->transactionsSize()) + << LOG_KV("peer", _nodeID->shortHex()) + << LOG_KV("hash", + (proposalHeader) ? proposalHeader->hash().abridged() : "unknown") + << LOG_KV("consNum", (proposalHeader) ? proposalHeader->number() : -1); + // response to verify result + _onVerifyFinished( + std::make_shared(CommonError::TransactionsMissing, "TransactionsMissing"), + false); + // try to import the transactions even when verify failed + importDownloadedTxs(_nodeID, transactions); + return; + } + if (!importDownloadedTxs(_nodeID, transactions, _verifiedProposal)) + { + _onVerifyFinished(std::make_shared(CommonError::TxsSignatureVerifyFailed, + "invalid transaction for invalid signature or nonce or blockLimit"), + false); + return; + } + // check the transaction hash + for (size_t i = 0; i < _missedTxs->size(); i++) + { + if ((*_missedTxs)[i] != transactions->transaction(i)->hash()) + { + _onVerifyFinished(std::make_shared(CommonError::InconsistentTransactions, + "InconsistentTransactions"), + false); + return; + } + } + _onVerifyFinished(error, true); + SYNC_LOG(DEBUG) << METRIC << LOG_DESC("requestMissedTxs and verify success") + << LOG_KV( + "hash", (proposalHeader) ? proposalHeader->hash().abridged() : "unknown") + << LOG_KV("consNum", (proposalHeader) ? proposalHeader->number() : -1) + << LOG_KV("decodeT", decodeT) << LOG_KV("importT", (utcTime() - startT)) + << LOG_KV("timecost", (utcTime() - recordT)); +} + +void TransactionSync::maintainDownloadingTransactions() +{ + if (downloadTxsBufferEmpty()) + { + return; + } + auto localBuffer = swapDownloadTxsBuffer(); + if (!m_config->existsInGroup()) + { + SYNC_LOG(DEBUG) + << LOG_DESC( + "stop maintainDownloadingTransactions for the node is not belong to the group") + << LOG_KV("txpoolSize", m_config->txpoolStorage()->size()) + << LOG_KV("shardSize", m_downloadTxsBuffer->size()); + return; + } + auto self = weak_from_this(); + for (size_t i = 0; i < localBuffer->size(); ++i) + { + auto txsBuffer = (*localBuffer)[i]; + auto transactions = + m_config->blockFactory()->createBlock(txsBuffer->txsData(), true, false); + // async here to accelerate the txs process + m_worker->enqueue([self, txsBuffer, transactions]() { + auto txsSync = self.lock(); + if (!txsSync) + { + return; + } + txsSync->importDownloadedTxs(txsBuffer->from(), transactions); + }); + } +} + +bool TransactionSync::importDownloadedTxs( + NodeIDPtr _fromNode, Block::Ptr _txsBuffer, Block::Ptr _verifiedProposal) +{ + auto txs = std::make_shared(); + for (size_t i = 0; i < _txsBuffer->transactionsSize(); i++) + { + txs->emplace_back(std::const_pointer_cast(_txsBuffer->transaction(i))); + } + return importDownloadedTxs(std::move(_fromNode), txs, std::move(_verifiedProposal)); +} + +bool TransactionSync::importDownloadedTxs( + NodeIDPtr _fromNode, TransactionsPtr _txs, Block::Ptr _verifiedProposal) +{ + if (_txs->empty()) + { + return true; + } + auto txsSize = _txs->size(); + // Note: only need verify the signature for the transactions + bool enforceImport = false; + BlockHeader::Ptr proposalHeader = nullptr; + if (_verifiedProposal && _verifiedProposal->blockHeader()) + { + proposalHeader = _verifiedProposal->blockHeader(); + enforceImport = true; + } + auto recordT = utcTime(); + auto startT = utcTime(); + // verify the transactions + std::atomic_bool verifySuccess = {true}; + tbb::parallel_for( + tbb::blocked_range(0, txsSize), [&](const tbb::blocked_range& _range) { + for (size_t i = _range.begin(); i < _range.end(); i++) + { + auto tx = (*_txs)[i]; + if (!tx) + { + continue; + } + tx->appendKnownNode(_fromNode); + if (_verifiedProposal && proposalHeader) + { + tx->setBatchId(proposalHeader->number()); + tx->setBatchHash(proposalHeader->hash()); + } + if (m_config->txpoolStorage()->exist(tx->hash())) + { + continue; + } + try + { + tx->verify(*m_hashImpl, *m_signatureImpl); + } + catch (std::exception const& e) + { + tx->setInvalid(true); + SYNC_LOG(WARNING) << LOG_DESC("verify sender for tx failed") + << LOG_KV("reason", boost::diagnostic_information(e)) + << LOG_KV("hash", tx->hash().abridged()); + verifySuccess = false; + } + } + }); + if (enforceImport && !verifySuccess) + { + return false; + } + auto verifyT = utcTime() - startT; + startT = utcTime(); + // import the transactions into txpool + auto txpool = m_config->txpoolStorage(); + if (enforceImport) + { + if (!txpool->batchVerifyAndSubmitTransaction(proposalHeader, _txs)) + { + return false; + } + } + else + { + txpool->batchImportTxs(_txs); + } + SYNC_LOG(DEBUG) << LOG_DESC("importDownloadedTxs success") + << LOG_KV("hash", proposalHeader ? proposalHeader->hash().abridged() : "none") + << LOG_KV("number", proposalHeader ? proposalHeader->number() : -1) + << LOG_KV("totalTxs", txsSize) << LOG_KV("verifyT", verifyT) + << LOG_KV("submitT", (utcTime() - startT)) + << LOG_KV("timecost", (utcTime() - recordT)); + return true; +} + +void TransactionSync::maintainTransactions() +{ + auto consensusNodeList = m_config->consensusNodeList(); + auto connectedNodeList = m_config->connectedNodeList(); + // only one node + if (connectedNodeList.empty()) + { + m_newTransactions = false; + return; + } + if (consensusNodeList.size() == 1 && + consensusNodeList[0]->nodeID()->data() == m_config->nodeID()->data()) + { + m_newTransactions = false; + return; + } + auto txs = m_config->txpoolStorage()->fetchNewTxs(c_maxSendTransactions); + if (txs->empty()) + { + m_newTransactions = false; + return; + } + broadcastTxsFromRpc(consensusNodeList, txs); + forwardTxsFromP2P(connectedNodeList, consensusNodeList, txs); +} + +// Randomly select a number of nodes to forward the transaction status +void TransactionSync::forwardTxsFromP2P(bcos::crypto::NodeIDSet const& _connectedPeers, + bcos::consensus::ConsensusNodeList const& _consensusNodeList, ConstTransactionsPtr _txs) +{ + auto expectedPeers = (_connectedPeers.size() * m_config->forwardPercent() + 99) / 100; + std::map peerToForwardedTxs; + for (const auto& tx : *_txs) + { + // Note: in some cases the tx may be a empty shared_ptr with _vptr.Transaction to be 0x0 + // add determination here to in case of coredump + if (!tx || tx.get() == nullptr) + { + continue; + } + // TODO: Not forward txs status from the rpc directly + /*if (tx->submitCallback()) + { + continue; + }*/ + auto selectedPeers = selectPeers(tx, _connectedPeers, _consensusNodeList, expectedPeers); + for (const auto& peer : *selectedPeers) + { + if (!peerToForwardedTxs.count(peer)) + { + peerToForwardedTxs[peer] = std::make_shared(); + } + peerToForwardedTxs[peer]->emplace_back(tx->hash()); + } + } + // broadcast the txsStatus + for (auto const& it : peerToForwardedTxs) + { + auto peer = it.first; + auto txsHash = it.second; + if (txsHash->empty()) + { + continue; + } + auto txsStatus = + m_config->msgFactory()->createTxsSyncMsg(TxsSyncPacketType::TxsStatusPacket, *txsHash); + auto packetData = txsStatus->encode(); + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::TxsSync, peer, ref(*packetData), 0, nullptr); + SYNC_LOG(DEBUG) << LOG_DESC("txsStatus: forwardTxsFromP2P") + << LOG_KV("to", peer->shortHex()) << LOG_KV("txsSize", txsHash->size()) + << LOG_KV("packetSize", packetData->size()); + } +} + +NodeIDListPtr TransactionSync::selectPeers(Transaction::ConstPtr _tx, + NodeIDSet const& _connectedPeers, ConsensusNodeList const& _consensusNodeList, + size_t _expectedSize) +{ + auto selectedPeers = std::make_shared(); + for (const auto& consensusNode : _consensusNodeList) + { + auto nodeId = consensusNode->nodeID(); + // check connection + if (!_connectedPeers.contains(nodeId)) + { + continue; + } + // the node self or not + if (nodeId->data() == m_config->nodeID()->data()) + { + _tx->appendKnownNode(m_config->nodeID()); + continue; + } + // check tx existence + if (_tx->isKnownBy(nodeId)) + { + continue; + } + _tx->appendKnownNode(nodeId); + selectedPeers->emplace_back(nodeId); + if (selectedPeers->size() >= _expectedSize) + { + break; + } + } + return selectedPeers; +} + +void TransactionSync::broadcastTxsFromRpc( + ConsensusNodeList const& _consensusNodeList, ConstTransactionsPtr _txs) +{ + auto block = m_config->blockFactory()->createBlock(); + // get the transactions from RPC + for (const auto& tx : *_txs) + { + if (!tx->submitCallback()) + { + continue; + } + for (auto const& node : _consensusNodeList) + { + tx->appendKnownNode(node->nodeID()); + } + block->appendTransaction(std::const_pointer_cast(tx)); + } + if (block->transactionsSize() == 0) + { + return; + } + // broadcast the txs to all consensus node + auto encodedData = std::make_shared(); + block->encode(*encodedData); + auto txsPacket = m_config->msgFactory()->createTxsSyncMsg( + TxsSyncPacketType::TxsPacket, std::move(*encodedData)); + auto packetData = txsPacket->encode(); + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE, ModuleID::TxsSync, ref(*packetData)); + SYNC_LOG(DEBUG) << LOG_DESC("broadcastTxsFromRpc") + << LOG_KV("txsNum", block->transactionsSize()) + << LOG_KV("messageSize(B)", packetData->size()); +} + +void TransactionSync::onPeerTxsStatus(NodeIDPtr _fromNode, TxsSyncMsgInterface::Ptr _txsStatus) +{ + // insert all downloaded transaction into the txpool + while (!downloadTxsBufferEmpty()) + { + maintainDownloadingTransactions(); + } + if (_txsStatus->txsHash().empty()) + { + responseTxsStatus(_fromNode); + return; + } + auto requestTxs = m_config->txpoolStorage()->filterUnknownTxs(_txsStatus->txsHash(), _fromNode); + if (requestTxs->empty()) + { + return; + } + requestMissedTxsFromPeer(_fromNode, requestTxs, nullptr, nullptr); + SYNC_LOG(DEBUG) << LOG_DESC("onPeerTxsStatus") << LOG_KV("reqSize", requestTxs->size()) + << LOG_KV("peerTxsSize", _txsStatus->txsHash().size()) + << LOG_KV("peer", _fromNode->shortHex()); +} + +void TransactionSync::responseTxsStatus(NodeIDPtr _fromNode) +{ + auto txsHash = m_config->txpoolStorage()->getTxsHash(c_MaxResponsedTxsToNodesWithEmptyTxs); + if (txsHash->empty()) + { + return; + } + auto txsStatus = + m_config->msgFactory()->createTxsSyncMsg(TxsSyncPacketType::TxsStatusPacket, *txsHash); + auto packetData = txsStatus->encode(); + m_config->frontService()->asyncSendMessageByNodeID( + ModuleID::TxsSync, _fromNode, ref(*packetData), 0, nullptr); + SYNC_LOG(DEBUG) << LOG_DESC("onPeerTxsStatus: receive empty txsStatus and responseTxsStatus") + << LOG_KV("to", _fromNode->shortHex()) << LOG_KV("txsSize", txsHash->size()) + << LOG_KV("packetSize", packetData->size()); +} + +void TransactionSync::onEmptyTxs() +{ + if (m_config->txpoolStorage()->size() > 0) + { + return; + } + SYNC_LOG(DEBUG) << LOG_DESC("onEmptyTxs: broadcast txs status to all consensus node list"); + auto txsStatus = + m_config->msgFactory()->createTxsSyncMsg(TxsSyncPacketType::TxsStatusPacket, HashList()); + auto packetData = txsStatus->encode(); + m_config->frontService()->asyncSendBroadcastMessage( + bcos::protocol::NodeType::CONSENSUS_NODE | bcos::protocol::NodeType::OBSERVER_NODE, + ModuleID::TxsSync, ref(*packetData)); +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/TransactionSync.h b/bcos-txpool/bcos-txpool/sync/TransactionSync.h new file mode 100644 index 0000000..a5374c9 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/TransactionSync.h @@ -0,0 +1,164 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for transaction sync + * @file TransactionSync.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once + +#include "bcos-crypto/interfaces/crypto/CryptoSuite.h" +#include "bcos-crypto/interfaces/crypto/Signature.h" +#include "bcos-txpool/sync/TransactionSyncConfig.h" +#include "bcos-txpool/sync/interfaces/TransactionSyncInterface.h" +#include +#include +#include + +namespace bcos::sync +{ +class TransactionSync : public TransactionSyncInterface, + public Worker, + public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + explicit TransactionSync(TransactionSyncConfig::Ptr config) + : TransactionSyncInterface(std::move(config)), + Worker("txsSync", 0), + m_downloadTxsBuffer(std::make_shared()), + m_worker( + std::make_shared("txsSyncWorker", std::thread::hardware_concurrency())), + m_txsRequester(std::make_shared("txsRequester", 4)), + m_forwardWorker(std::make_shared("txsForward", 1)) + { + m_txsSubmitted = m_config->txpoolStorage()->onReady([&]() { noteNewTransactions(); }); + m_hashImpl = m_config->blockFactory()->cryptoSuite()->hashImpl(); + m_signatureImpl = m_config->blockFactory()->cryptoSuite()->signatureImpl(); + } + TransactionSync(const TransactionSync&) = delete; + TransactionSync(TransactionSync&&) = delete; + TransactionSync& operator=(const TransactionSync&) = delete; + TransactionSync& operator=(TransactionSync&&) = delete; + + ~TransactionSync() override = default; + + void start() override; + void stop() override; + + using SendResponseCallback = std::function; + void onRecvSyncMessage(bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, SendResponseCallback _sendResponse) override; + + using VerifyResponseCallback = std::function; + void requestMissedTxs(bcos::crypto::PublicPtr _generatedNodeID, + bcos::crypto::HashListPtr _missedTxs, bcos::protocol::Block::Ptr _verifiedProposal, + VerifyResponseCallback _onVerifyFinished) override; + + [[deprecated("Use TxPool::broadcastPushTransaction")]] virtual void maintainTransactions(); + [[deprecated("Use TxPool::broadcastPushTransaction")]] virtual void + maintainDownloadingTransactions(); + void onEmptyTxs() override; + +protected: + virtual void responseTxsStatus(bcos::crypto::NodeIDPtr _fromNode); + [[deprecated("Use TxPool::broadcastPushTransaction")]] void executeWorker() override; + + void broadcastTxsFromRpc(bcos::consensus::ConsensusNodeList const& _consensusNodeList, + bcos::protocol::ConstTransactionsPtr _txs); + virtual void forwardTxsFromP2P(bcos::crypto::NodeIDSet const& _connectedPeers, + bcos::consensus::ConsensusNodeList const& _consensusNodeList, + bcos::protocol::ConstTransactionsPtr _txs); + virtual bcos::crypto::NodeIDListPtr selectPeers(bcos::protocol::Transaction::ConstPtr _tx, + bcos::crypto::NodeIDSet const& _connectedPeers, + bcos::consensus::ConsensusNodeList const& _consensusNodeList, size_t _expectedSize); + virtual void onPeerTxsStatus( + bcos::crypto::NodeIDPtr _fromNode, TxsSyncMsgInterface::Ptr _txsStatus); + + virtual void onReceiveTxsRequest(TxsSyncMsgInterface::Ptr _txsRequest, + SendResponseCallback _sendResponse, bcos::crypto::PublicPtr _peer); + + // functions called by requestMissedTxs + virtual void verifyFetchedTxs(Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, bcos::crypto::HashListPtr _missedTxs, + bcos::protocol::Block::Ptr _verifiedProposal, VerifyResponseCallback _onVerifyFinished); + virtual void requestMissedTxsFromPeer(bcos::crypto::PublicPtr _generatedNodeID, + bcos::crypto::HashListPtr _missedTxs, bcos::protocol::Block::Ptr _verifiedProposal, + VerifyResponseCallback _onVerifyFinished); + + virtual size_t onGetMissedTxsFromLedger(std::set& _missedTxs, + Error::Ptr _error, bcos::protocol::TransactionsPtr _fetchedTxs, + bcos::protocol::Block::Ptr _verifiedProposal, VerifyResponseCallback _onVerifyFinished); + + + virtual bool downloadTxsBufferEmpty() + { + ReadGuard lock(x_downloadTxsBuffer); + return (m_downloadTxsBuffer->empty()); + } + + virtual void appendDownloadTxsBuffer(TxsSyncMsgInterface::Ptr _txsBuffer) + { + WriteGuard lock(x_downloadTxsBuffer); + m_downloadTxsBuffer->emplace_back(_txsBuffer); + } + + virtual TxsSyncMsgListPtr swapDownloadTxsBuffer() + { + UpgradableGuard lock(x_downloadTxsBuffer); + auto localBuffer = m_downloadTxsBuffer; + UpgradeGuard uLock(lock); + m_downloadTxsBuffer = std::make_shared(); + return localBuffer; + } + virtual bool importDownloadedTxs(bcos::crypto::NodeIDPtr _fromNode, + bcos::protocol::Block::Ptr _txsBuffer, + bcos::protocol::Block::Ptr _verifiedProposal = nullptr); + + virtual bool importDownloadedTxs(bcos::crypto::NodeIDPtr _fromNode, + bcos::protocol::TransactionsPtr _txs, + bcos::protocol::Block::Ptr _verifiedProposal = nullptr); + + void noteNewTransactions() + { + m_newTransactions = true; + m_signalled.notify_all(); + } + +private: + TxsSyncMsgListPtr m_downloadTxsBuffer; + SharedMutex x_downloadTxsBuffer; + ThreadPool::Ptr m_worker; + ThreadPool::Ptr m_txsRequester; + ThreadPool::Ptr m_forwardWorker; + + bcos::Handler<> m_txsSubmitted; + + std::atomic_bool m_running = {false}; + + std::atomic_bool m_newTransactions = {false}; + + // signal to notify all thread to work + boost::condition_variable m_signalled; + // mutex to access m_signalled + boost::mutex x_signalled; + + bcos::crypto::Hash::Ptr m_hashImpl; + bcos::crypto::SignatureCrypto::Ptr m_signatureImpl; + + const int c_MaxResponsedTxsToNodesWithEmptyTxs = 1000; +}; +} // namespace bcos::sync \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/TransactionSyncConfig.h b/bcos-txpool/bcos-txpool/sync/TransactionSyncConfig.h new file mode 100644 index 0000000..9126549 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/TransactionSyncConfig.h @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief config for transaction sync + * @file TransactionSyncConfig.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include "../txpool/interfaces/TxPoolStorageInterface.h" +#include "interfaces/TxsSyncMsgFactory.h" +#include +#include +#include +#include + +#include +namespace bcos +{ +namespace sync +{ +class TransactionSyncConfig : public SyncConfig +{ +public: + using Ptr = std::shared_ptr; + TransactionSyncConfig(bcos::crypto::NodeIDPtr _nodeId, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::txpool::TxPoolStorageInterface::Ptr _txpoolStorage, + bcos::sync::TxsSyncMsgFactory::Ptr _msgFactory, + bcos::protocol::BlockFactory::Ptr _blockFactory, + std::shared_ptr _ledger) + : SyncConfig(std::move(_nodeId)), + m_frontService(std::move(_frontService)), + m_txpoolStorage(std::move(_txpoolStorage)), + m_msgFactory(std::move(_msgFactory)), + m_blockFactory(std::move(_blockFactory)), + m_ledger(std::move(_ledger)) + {} + + ~TransactionSyncConfig() override = default; + + bcos::front::FrontServiceInterface::Ptr frontService() { return m_frontService; } + bcos::txpool::TxPoolStorageInterface::Ptr txpoolStorage() { return m_txpoolStorage; } + bcos::sync::TxsSyncMsgFactory::Ptr msgFactory() { return m_msgFactory; } + + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + + unsigned networkTimeout() const { return m_networkTimeout; } + void setNetworkTimeout(unsigned _networkTimeout) { m_networkTimeout = _networkTimeout; } + unsigned forwardPercent() const { return m_forwardPercent; } + void setForwardPercent(unsigned _forwardPercent) { m_forwardPercent = _forwardPercent; } + std::shared_ptr ledger() { return m_ledger; } + + // for ut + void setTxPoolStorage(bcos::txpool::TxPoolStorageInterface::Ptr _txpoolStorage) + { + m_txpoolStorage = _txpoolStorage; + } + +private: + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcos::txpool::TxPoolStorageInterface::Ptr m_txpoolStorage; + bcos::sync::TxsSyncMsgFactory::Ptr m_msgFactory; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + std::shared_ptr m_ledger; + + // set networkTimeout to 500ms + unsigned m_networkTimeout = 500; + + unsigned m_forwardPercent = 25; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/interfaces/TransactionSyncInterface.h b/bcos-txpool/bcos-txpool/sync/interfaces/TransactionSyncInterface.h new file mode 100644 index 0000000..f42bdb7 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/interfaces/TransactionSyncInterface.h @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for transaction sync + * @file TransactionSyncInterface.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once +#include "../TransactionSyncConfig.h" +#include +#include +#include + +namespace bcos::sync +{ +class TransactionSyncInterface +{ +public: + using Ptr = std::shared_ptr; + explicit TransactionSyncInterface(TransactionSyncConfig::Ptr _config) + : m_config(std::move(_config)) + {} + + virtual ~TransactionSyncInterface() = default; + + virtual void start() = 0; + virtual void stop() = 0; + + virtual void requestMissedTxs(bcos::crypto::PublicPtr _generatedNodeID, + bcos::crypto::HashListPtr _missedTxs, bcos::protocol::Block::Ptr _verifiedProposal, + std::function _onVerifyFinished) = 0; + + virtual void onRecvSyncMessage(bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bytesConstRef _data, std::function _sendResponse) = 0; + + virtual TransactionSyncConfig::Ptr config() { return m_config; } + virtual void onEmptyTxs() = 0; + +protected: + TransactionSyncConfig::Ptr m_config; +}; +} // namespace bcos::sync \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgFactory.h b/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgFactory.h new file mode 100644 index 0000000..4d0cb27 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgFactory.h @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for create the txs-sync-message + * @file TxsSyncMsgFactory.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include "TxsSyncMsgInterface.h" + +namespace bcos::sync +{ +class TxsSyncMsgFactory +{ +public: + using Ptr = std::shared_ptr; + TxsSyncMsgFactory() = default; + virtual ~TxsSyncMsgFactory() = default; + + virtual TxsSyncMsgInterface::Ptr createTxsSyncMsg() = 0; + virtual TxsSyncMsgInterface::Ptr createTxsSyncMsg( + uint32_t _type, bytes&& _txsData, int32_t _version = 1) + { + auto txsSyncMsg = createTxsSyncMsg(); + txsSyncMsg->setType(_type); + txsSyncMsg->setTxsData(std::move(_txsData)); + txsSyncMsg->setVersion(_version); + return txsSyncMsg; + } + + virtual TxsSyncMsgInterface::Ptr createTxsSyncMsg( + uint32_t _type, bcos::crypto::HashList const& _txsHash, int32_t _version = 1) + { + auto txsSyncMsg = createTxsSyncMsg(); + txsSyncMsg->setType(_type); + txsSyncMsg->setTxsHash(_txsHash); + txsSyncMsg->setVersion(_version); + return txsSyncMsg; + } + + virtual TxsSyncMsgInterface::Ptr createTxsSyncMsg(bytesConstRef _data) = 0; +}; +} // namespace bcos::sync diff --git a/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgInterface.h b/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgInterface.h new file mode 100644 index 0000000..4114fa0 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/interfaces/TxsSyncMsgInterface.h @@ -0,0 +1,58 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interfaces for the txs-sync-message + * @file TxsSyncMsgInterface.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace sync +{ +class TxsSyncMsgInterface +{ +public: + using Ptr = std::shared_ptr; + TxsSyncMsgInterface() = default; + virtual ~TxsSyncMsgInterface() {} + + virtual bytesPointer encode() const = 0; + virtual void decode(bytesConstRef _data) = 0; + + virtual int32_t version() const = 0; + virtual int32_t type() const = 0; + virtual bytesConstRef txsData() const = 0; + virtual bcos::crypto::HashList const& txsHash() const = 0; + + virtual void setVersion(int32_t _version) = 0; + virtual void setType(int32_t _type) = 0; + virtual void setTxsData(bytes const& _txsData) = 0; + virtual void setTxsData(bytes&& _txsData) = 0; + virtual void setTxsHash(bcos::crypto::HashList const& _txsHash) = 0; + + virtual void setFrom(bcos::crypto::NodeIDPtr _from) { m_from = _from; } + virtual bcos::crypto::NodeIDPtr from() const { return m_from; } + +protected: + bcos::crypto::NodeIDPtr m_from; +}; +using TxsSyncMsgList = std::vector; +using TxsSyncMsgListPtr = std::shared_ptr; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.cpp b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.cpp new file mode 100644 index 0000000..8eaa2ca --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.cpp @@ -0,0 +1,100 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for the txs-sync-message + * @file TxsSync.cpp + * @author: yujiechen + * @date 2021-05-11 + */ +#include "TxsSyncMsg.h" +#include "bcos-protocol/Common.h" + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +using namespace bcos::protocol; + +bytesPointer TxsSyncMsg::encode() const +{ + return encodePBObject(m_rawSyncMessage); +} + +void TxsSyncMsg::decode(bytesConstRef _data) +{ + decodePBObject(m_rawSyncMessage, _data); + deserializeObject(); +} + +int32_t TxsSyncMsg::version() const +{ + return m_rawSyncMessage->version(); +} + +int32_t TxsSyncMsg::type() const +{ + return m_rawSyncMessage->type(); +} + +bytesConstRef TxsSyncMsg::txsData() const +{ + auto const& txsData = m_rawSyncMessage->txsdata(); + return bytesConstRef((byte const*)txsData.data(), txsData.size()); +} + +HashList const& TxsSyncMsg::txsHash() const +{ + return *m_txsHash; +} + +void TxsSyncMsg::setVersion(int32_t _version) +{ + m_rawSyncMessage->set_version(_version); +} + +void TxsSyncMsg::setType(int32_t _type) +{ + m_rawSyncMessage->set_type(_type); +} + +void TxsSyncMsg::setTxsData(bytes const& _txsData) +{ + m_rawSyncMessage->set_txsdata(_txsData.data(), _txsData.size()); +} +void TxsSyncMsg::setTxsData(bytes&& _txsData) +{ + auto dataSize = _txsData.size(); + m_rawSyncMessage->set_txsdata(std::move(_txsData).data(), dataSize); +} + +void TxsSyncMsg::setTxsHash(HashList const& _txsHash) +{ + *m_txsHash = _txsHash; + m_rawSyncMessage->clear_txshash(); + for (auto const& hash : _txsHash) + { + m_rawSyncMessage->add_txshash(hash.data(), HashType::SIZE); + } +} + +void TxsSyncMsg::deserializeObject() +{ + m_txsHash->clear(); + for (int i = 0; i < m_rawSyncMessage->txshash_size(); i++) + { + auto const& hashData = m_rawSyncMessage->txshash(i); + m_txsHash->emplace_back( + HashType((byte const*)hashData.c_str(), bcos::crypto::HashType::SIZE)); + } +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.h b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.h new file mode 100644 index 0000000..67ebe01 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsg.h @@ -0,0 +1,62 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for the txs-sync-message + * @file TxsSync.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include +#include + +namespace bcos +{ +namespace sync +{ +class TxsSyncMsg : public TxsSyncMsgInterface +{ +public: + TxsSyncMsg() + : m_rawSyncMessage(std::make_shared()), + m_txsHash(std::make_shared()) + {} + + explicit TxsSyncMsg(bytesConstRef _data) : TxsSyncMsg() { decode(_data); } + ~TxsSyncMsg() override {} + + bytesPointer encode() const override; + void decode(bytesConstRef _data) override; + + int32_t version() const override; + int32_t type() const override; + bytesConstRef txsData() const override; + bcos::crypto::HashList const& txsHash() const override; + + void setVersion(int32_t _version) override; + void setType(int32_t _type) override; + void setTxsData(bytes const& _txsData) override; + void setTxsData(bytes&& _txsData) override; + void setTxsHash(bcos::crypto::HashList const& _txsHash) override; + +protected: + virtual void deserializeObject(); + +private: + std::shared_ptr m_rawSyncMessage; + bcos::crypto::HashListPtr m_txsHash; +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h new file mode 100644 index 0000000..79adf79 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief factory for create the txs-sync-message + * @file TxsSyncMsgFactoryImpl.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include "TxsSyncMsg.h" +#include "bcos-txpool/sync/interfaces/TxsSyncMsgFactory.h" + +namespace bcos +{ +namespace sync +{ +class TxsSyncMsgFactoryImpl : public TxsSyncMsgFactory +{ +public: + using Ptr = std::shared_ptr; + TxsSyncMsgFactoryImpl() = default; + ~TxsSyncMsgFactoryImpl() override {} + + TxsSyncMsgInterface::Ptr createTxsSyncMsg() override { return std::make_shared(); } + TxsSyncMsgInterface::Ptr createTxsSyncMsg(bytesConstRef _data) override + { + return std::make_shared(_data); + } +}; +} // namespace sync +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/protocol/proto/TxsSync.proto b/bcos-txpool/bcos-txpool/sync/protocol/proto/TxsSync.proto new file mode 100644 index 0000000..c1221e0 --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/protocol/proto/TxsSync.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package bcos.sync; +message TxsSyncMessage +{ + int32 version = 1; + int32 type = 2; + bytes txsData = 3; + repeated bytes txsHash = 4; +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/sync/utilities/Common.h b/bcos-txpool/bcos-txpool/sync/utilities/Common.h new file mode 100644 index 0000000..6b2c4cf --- /dev/null +++ b/bcos-txpool/bcos-txpool/sync/utilities/Common.h @@ -0,0 +1,39 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Common for the sync module + * @file Common.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include +#include + +#define SYNC_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("SYNC") +namespace bcos +{ +namespace sync +{ +enum TxsSyncPacketType : int32_t +{ + TxsPacket = 0x00, + TxsStatusPacket = 0x01, + TxsRequestPacket = 0x02, + TxsResponsePacket = 0x03, + PacketCount +}; +} +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/interfaces/NonceCheckerInterface.h b/bcos-txpool/bcos-txpool/txpool/interfaces/NonceCheckerInterface.h new file mode 100644 index 0000000..672d999 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/interfaces/NonceCheckerInterface.h @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief interface for nonce check + * @file NonceCheckerInterface.h + * @author: yujiechen + * @date 2021-05-08 + */ +#pragma once +#include +#include +#include +#include + +#define NONCECHECKER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TXPOOL") << LOG_BADGE("NonceChecker") + +namespace bcos +{ +namespace txpool +{ +class NonceCheckerInterface +{ +public: + using Ptr = std::shared_ptr; + NonceCheckerInterface() = default; + virtual ~NonceCheckerInterface() {} + + virtual bcos::protocol::TransactionStatus checkNonce( + bcos::protocol::Transaction::ConstPtr _tx, bool _shouldUpdate = false) = 0; + virtual bool exists(bcos::protocol::NonceType const& _nonce) = 0; + virtual void batchInsert( + bcos::protocol::BlockNumber _batchId, bcos::protocol::NonceListPtr const& _nonceList) = 0; + virtual void batchRemove(bcos::protocol::NonceList const& _nonceList) = 0; + virtual void batchRemove(tbb::concurrent_unordered_set> const& _nonceList) = 0; + virtual void insert(bcos::protocol::NonceType const& _nonce) = 0; + +protected: + virtual void remove(bcos::protocol::NonceType const& _nonce) = 0; +}; +} // namespace txpool +} // namespace bcos diff --git a/bcos-txpool/bcos-txpool/txpool/interfaces/TxPoolStorageInterface.h b/bcos-txpool/bcos-txpool/txpool/interfaces/TxPoolStorageInterface.h new file mode 100644 index 0000000..c9e2a19 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/interfaces/TxPoolStorageInterface.h @@ -0,0 +1,123 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Storage interface for TxPool + * @file TxPoolStorageInterface.h + * @author: yujiechen + * @date 2021-05-07 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace txpool +{ +class TxPoolStorageInterface +{ +public: + using Ptr = std::shared_ptr; + TxPoolStorageInterface() = default; + virtual ~TxPoolStorageInterface() {} + + virtual task::Task submitTransaction( + protocol::Transaction::Ptr transaction) = 0; + + virtual bcos::protocol::TransactionStatus insert(bcos::protocol::Transaction::Ptr _tx) = 0; + virtual void batchInsert(bcos::protocol::Transactions const& _txs) = 0; + + virtual bcos::protocol::Transaction::Ptr remove(bcos::crypto::HashType const& _txHash) = 0; + virtual bcos::protocol::Transaction::Ptr removeSubmittedTx( + bcos::protocol::TransactionSubmitResult::Ptr _txSubmitResult) = 0; + virtual void batchRemove(bcos::protocol::BlockNumber _batchId, + bcos::protocol::TransactionSubmitResults const& _txsResult) = 0; + + // Note: the transactions may be missing from the transaction pool + virtual bcos::protocol::TransactionsPtr fetchTxs( + bcos::crypto::HashList& _missedTxs, bcos::crypto::HashList const& _txsList) = 0; + + + virtual bool batchVerifyAndSubmitTransaction( + bcos::protocol::BlockHeader::Ptr _header, bcos::protocol::TransactionsPtr _txs) = 0; + virtual void batchImportTxs(bcos::protocol::TransactionsPtr _txs) = 0; + + /** + * @brief Get newly inserted transactions from the txpool + * + * @param _txsLimit Maximum number of transactions that can be obtained at a time + * @return List of new transactions + */ + virtual bcos::protocol::ConstTransactionsPtr fetchNewTxs(size_t _txsLimit) = 0; + virtual void batchFetchTxs(bcos::protocol::Block::Ptr _txsList, + bcos::protocol::Block::Ptr _sysTxsList, size_t _txsLimit, TxsHashSetPtr _avoidTxs, + bool _avoidDuplicate = true) = 0; + + virtual bool exist(bcos::crypto::HashType const& _txHash) = 0; + + virtual bcos::crypto::HashListPtr filterUnknownTxs( + bcos::crypto::HashList const& _txsHashList, bcos::crypto::NodeIDPtr _peer) = 0; + + virtual size_t size() const = 0; + virtual void clear() = 0; + + // Register a handler that will be called once there is a new transaction imported + template + bcos::Handler<> onReady(T const& _t) + { + return m_onReady.add(_t); + } + + virtual void batchMarkTxs(bcos::crypto::HashList const& _txsHashList, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + bool _sealFlag) = 0; + virtual void batchMarkAllTxs(bool _sealFlag) = 0; + + virtual size_t unSealedTxsSize() = 0; + + virtual void registerUnsealedTxsNotifier( + std::function)> _unsealedTxsNotifier) + { + m_unsealedTxsNotifier = _unsealedTxsNotifier; + } + + virtual void stop() = 0; + virtual void start() = 0; + virtual void printPendingTxs() {} + + virtual std::shared_ptr batchVerifyProposal( + bcos::protocol::Block::Ptr _block) = 0; + + virtual bool batchVerifyProposal(std::shared_ptr _txsHashList) = 0; + virtual bcos::crypto::HashListPtr getTxsHash(int _limit) = 0; + + void registerTxsCleanUpSwitch(std::function _txsCleanUpSwitch) + { + m_txsCleanUpSwitch = _txsCleanUpSwitch; + } + +protected: + bcos::CallbackCollectionHandler<> m_onReady; + // notify the sealer the latest unsealed txs + std::function)> m_unsealedTxsNotifier; + // Determine to periodically clean up expired transactions or not + std::function m_txsCleanUpSwitch; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/interfaces/TxValidatorInterface.h b/bcos-txpool/bcos-txpool/txpool/interfaces/TxValidatorInterface.h new file mode 100644 index 0000000..43dcb53 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/interfaces/TxValidatorInterface.h @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Interface to verify the validity of the transaction + * @file TxValidatorInterface.h + * @author: yujiechen + * @date 2021-05-08 + */ +#pragma once +#include "bcos-txpool/txpool/interfaces/NonceCheckerInterface.h" +#include +#include +namespace bcos +{ +namespace txpool +{ +class TxValidatorInterface +{ +public: + using Ptr = std::shared_ptr; + TxValidatorInterface() = default; + virtual ~TxValidatorInterface() {} + + virtual bcos::protocol::TransactionStatus verify(bcos::protocol::Transaction::ConstPtr _tx) = 0; + virtual bcos::protocol::TransactionStatus submittedToChain( + bcos::protocol::Transaction::ConstPtr _tx) = 0; + virtual NonceCheckerInterface::Ptr ledgerNonceChecker() { return m_ledgerNonceChecker; } + virtual void setLedgerNonceChecker(NonceCheckerInterface::Ptr _ledgerNonceChecker) + { + m_ledgerNonceChecker = _ledgerNonceChecker; + } + +protected: + NonceCheckerInterface::Ptr m_ledgerNonceChecker; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.cpp b/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.cpp new file mode 100644 index 0000000..147e27a --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.cpp @@ -0,0 +1,1091 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief an implementation of using memory to store transactions + * @file MemoryStorage.cpp + * @author: yujiechen + * @date 2021-05-07 + */ +#include "bcos-txpool/txpool/storage/MemoryStorage.h" +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::crypto; +using namespace bcos::protocol; + +MemoryStorage::MemoryStorage( + TxPoolConfig::Ptr _config, size_t _notifyWorkerNum, int64_t _txsExpirationTime) + : m_config(std::move(_config)), m_txsExpirationTime(_txsExpirationTime) +{ + m_blockNumberUpdatedTime = utcTime(); + // Trigger a transaction cleanup operation every 3s + m_cleanUpTimer = std::make_shared(3000, "txpoolTimer"); + m_cleanUpTimer->registerTimeoutHandler([this] { cleanUpExpiredTransactions(); }); + TXPOOL_LOG(INFO) << LOG_DESC("init MemoryStorage of txpool") + << LOG_KV("txNotifierWorkerNum", _notifyWorkerNum) + << LOG_KV("txsExpirationTime", m_txsExpirationTime); +} + +void MemoryStorage::start() +{ + if (m_cleanUpTimer) + { + m_cleanUpTimer->start(); + } +} + +void MemoryStorage::stop() +{ + if (m_cleanUpTimer) + { + m_cleanUpTimer->stop(); + } +} + +task::Task MemoryStorage::submitTransaction( + protocol::Transaction::Ptr transaction) +{ + transaction->setImportTime(utcTime()); + struct Awaitable + { + constexpr bool await_ready() { return false; } + void await_suspend(CO_STD::coroutine_handle<> handle) + { + try + { + auto result = m_self->verifyAndSubmitTransaction( + std::move(m_transaction), + [this, m_handle = handle](Error::Ptr error, + bcos::protocol::TransactionSubmitResult::Ptr result) mutable { + if (error) + { + m_submitResult.emplace(std::move(error)); + } + else + { + m_submitResult.emplace( + std::move(result)); + } + if (m_handle) + { + m_handle.resume(); + } + }, + true, true); + + if (result != TransactionStatus::None) + { + TXPOOL_LOG(DEBUG) << "Submit transaction error! " << result; + m_submitResult.emplace( + BCOS_ERROR_PTR((int32_t)result, bcos::protocol::toString(result))); + handle.resume(); + } + } + catch (std::exception& e) + { + TXPOOL_LOG(ERROR) << "Unexpected exception: " << boost::diagnostic_information(e); + m_submitResult.emplace( + BCOS_ERROR_PTR((int32_t)TransactionStatus::Malform, "Unknown exception")); + handle.resume(); + } + } + bcos::protocol::TransactionSubmitResult::Ptr await_resume() + { + if (std::holds_alternative(m_submitResult)) + { + BOOST_THROW_EXCEPTION(*std::get(m_submitResult)); + } + + return std::move( + std::get(m_submitResult)); + } + + protocol::Transaction::Ptr m_transaction; + std::shared_ptr m_self; + std::variant + m_submitResult; + }; + + Awaitable awaitable{ + .m_transaction = transaction, .m_self = shared_from_this(), .m_submitResult = {}}; + co_return co_await awaitable; +} + +TransactionStatus MemoryStorage::txpoolStorageCheck(const Transaction& transaction) +{ + auto txHash = transaction.hash(); + auto it = m_txsTable.find(txHash); + if (it != m_txsTable.end()) + { + return TransactionStatus::AlreadyInTxPool; + } + return TransactionStatus::None; +} + +// Note: the signature of the tx has already been verified +TransactionStatus MemoryStorage::enforceSubmitTransaction(Transaction::Ptr _tx) +{ + auto txHash = _tx->hash(); + // the transaction has already onChain, reject it + auto result = m_config->txValidator()->submittedToChain(_tx); + auto it = m_txsTable.find(txHash); + Transaction::ConstPtr tx = nullptr; + if (it != m_txsTable.end()) + { + tx = it->second; + } + if (result == TransactionStatus::NonceCheckFail) + { + if (tx) + { + TXPOOL_LOG(WARNING) << LOG_DESC("enforce to seal failed for nonce check failed: ") + << tx->hash().abridged() << LOG_KV("batchId", tx->batchId()) + << LOG_KV("batchHash", tx->batchHash().abridged()) + << LOG_KV("importBatchId", _tx->batchId()) + << LOG_KV("importBatchHash", _tx->batchHash().abridged()); + } + return TransactionStatus::NonceCheckFail; + } + + if (tx) + { + if (!tx->sealed() || tx->batchHash() == HashType()) + { + if (!tx->sealed()) + { + m_sealedTxsSize++; + tx->setSealed(true); + } + tx->setBatchId(_tx->batchId()); + tx->setBatchHash(_tx->batchHash()); + TXPOOL_LOG(TRACE) << LOG_DESC("enforce to seal:") << tx->hash().abridged() + << LOG_KV("num", tx->batchId()) + << LOG_KV("hash", tx->batchHash().abridged()); + return TransactionStatus::None; + } + // sealed for the same proposal + if (tx->batchId() == _tx->batchId() && tx->batchHash() == _tx->batchHash()) + { + return TransactionStatus::None; + } + TXPOOL_LOG(WARNING) << LOG_DESC("enforce to seal failed: ") << tx->hash().abridged() + << LOG_KV("batchId", tx->batchId()) + << LOG_KV("batchHash", tx->batchHash().abridged()) + << LOG_KV("importBatchId", _tx->batchId()) + << LOG_KV("importBatchHash", _tx->batchHash().abridged()); + // The transaction has already been sealed by another node + return TransactionStatus::AlreadyInTxPool; + } + + auto status = insertWithoutLock(_tx); + if (status != TransactionStatus::None) + { + auto tx = m_txsTable.at(_tx->hash()); + TXPOOL_LOG(WARNING) << LOG_DESC("insertWithoutLock failed for already has the tx") + << LOG_KV("hash", tx->hash().abridged()) + << LOG_KV("status", tx->sealed()); + if (!tx->sealed()) + { + tx->setSealed(true); + m_sealedTxsSize++; + } + } + else + { + // avoid the sealed txs be sealed again + _tx->setSealed(true); + m_sealedTxsSize++; + } + return TransactionStatus::None; +} + +TransactionStatus MemoryStorage::verifyAndSubmitTransaction( + Transaction::Ptr transaction, TxSubmitCallback txSubmitCallback, bool checkPoolLimit, bool lock) +{ + size_t txsSize = 0; + { + std::optional lockMutex; + if (lock) + { + lockMutex.emplace(x_txpoolMutex); + } + txsSize = m_txsTable.size(); + + auto result = txpoolStorageCheck(*transaction); + if (result != TransactionStatus::None) + { + return result; + } + } + + // start stat the tps when receive first new tx from the sdk + if (m_tpsStatstartTime == 0 && txsSize == 0) + { + m_tpsStatstartTime = utcTime(); + } + // Note: In order to ensure that transactions can reach all nodes, transactions from P2P are not + // restricted + if (checkPoolLimit && txsSize >= m_config->poolLimit()) + { + return TransactionStatus::TxPoolIsFull; + } + + // verify the transaction + auto result = m_config->txValidator()->verify(transaction); + if (result == TransactionStatus::None) + { + if (txSubmitCallback) + { + transaction->setSubmitCallback(std::move(txSubmitCallback)); + } + if (lock) + { + result = insert(std::move(transaction)); + } + else + { + result = insertWithoutLock(std::move(transaction)); + } + } + + return result; +} + +void MemoryStorage::notifyInvalidReceipt( + HashType const& _txHash, TransactionStatus _status, TxSubmitCallback _txSubmitCallback) +{ + if (!_txSubmitCallback) + { + return; + } + // notify txResult + auto txResult = m_config->txResultFactory()->createTxSubmitResult(); + txResult->setTxHash(_txHash); + txResult->setStatus((uint32_t)_status); + std::stringstream errorMsg; + errorMsg << _status; + _txSubmitCallback(std::make_shared((int32_t)_status, errorMsg.str()), txResult); + TXPOOL_LOG(WARNING) << LOG_DESC("notifyReceipt: reject invalid tx") + << LOG_KV("tx", _txHash.abridged()) << LOG_KV("exception", _status); +} + +TransactionStatus MemoryStorage::insert(Transaction::Ptr transaction) +{ + ReadGuard lock(x_txpoolMutex); + return insertWithoutLock(std::move(transaction)); +} + +TransactionStatus MemoryStorage::insertWithoutLock(Transaction::Ptr transaction) +{ + auto [it, inserted] = m_txsTable.insert(std::make_pair(transaction->hash(), transaction)); + if (!inserted) + { + return TransactionStatus::AlreadyInTxPool; + } + m_onReady(); + + notifyUnsealedTxsSize(); + return TransactionStatus::None; +} + +void MemoryStorage::batchInsert(Transactions const& _txs) +{ + for (const auto& tx : _txs) + { + insert(tx); + } + WriteGuard l(x_missedTxs); + for (const auto& tx : _txs) + { + m_missedTxs.unsafe_erase(tx->hash()); + } +} + +Transaction::Ptr MemoryStorage::removeWithoutLock(HashType const& _txHash) +{ + auto it = m_txsTable.find(_txHash); + if (it == m_txsTable.end()) + { + return nullptr; + } + auto tx = std::move(it->second); + if (tx && tx->sealed()) + { + --m_sealedTxsSize; + } + m_txsTable.unsafe_erase(it); +#if FISCO_DEBUG + // TODO: remove this, now just for bug tracing + TXPOOL_LOG(DEBUG) << LOG_DESC("remove tx: ") << tx->hash().abridged() + << LOG_KV("index", tx->batchId()) + << LOG_KV("hash", tx->batchHash().abridged()) << LOG_KV("txPointer", tx); +#endif + return tx; +} + +Transaction::Ptr MemoryStorage::remove(HashType const& _txHash) +{ + WriteGuard l(x_txpoolMutex); + auto tx = removeWithoutLock(_txHash); + notifyUnsealedTxsSize(); + return tx; +} + +Transaction::Ptr MemoryStorage::removeSubmittedTxWithoutLock( + TransactionSubmitResult::Ptr txSubmitResult, bool _notify) +{ + auto tx = removeWithoutLock(txSubmitResult->txHash()); + if (!tx) + { + return nullptr; + } + if (_notify) + { + notifyTxResult(*tx, std::move(txSubmitResult)); + } + return tx; +} + +Transaction::Ptr MemoryStorage::removeSubmittedTx(TransactionSubmitResult::Ptr txSubmitResult) +{ + auto tx = remove(txSubmitResult->txHash()); + if (!tx) + { + return nullptr; + } + notifyTxResult(*tx, std::move(txSubmitResult)); + return tx; +} + +void MemoryStorage::notifyTxResult( + Transaction& transaction, TransactionSubmitResult::Ptr txSubmitResult) +{ + auto txSubmitCallback = transaction.takeSubmitCallback(); + if (!txSubmitCallback) + { + return; + } + + auto txHash = transaction.hash(); + txSubmitResult->setSender(std::string(transaction.sender())); + txSubmitResult->setTo(std::string(transaction.to())); + try + { + txSubmitCallback(nullptr, std::move(txSubmitResult)); + } + catch (std::exception const& e) + { + TXPOOL_LOG(WARNING) << LOG_DESC("notifyTxResult failed") << LOG_KV("tx", txHash.abridged()) + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } +} + +// TODO: remove this, now just for bug tracing +void MemoryStorage::printPendingTxs() +{ + if (m_printed) + { + return; + } + if (utcTime() - m_blockNumberUpdatedTime <= 1000 * 50) + { + return; + } + if (unSealedTxsSize() > 0 || m_txsTable.size() == 0) + { + return; + } + TXPOOL_LOG(DEBUG) << LOG_DESC("printPendingTxs for some txs unhandle") + << LOG_KV("pendingSize", m_txsTable.size()); + for (auto item : m_txsTable) + { + auto tx = item.second; + if (!tx) + { + continue; + } + TXPOOL_LOG(DEBUG) << LOG_KV("hash", tx->hash().abridged()) << LOG_KV("id", tx->batchId()) + << LOG_KV("hash", tx->batchHash().abridged()) + << LOG_KV("seal", tx->sealed()); + } + TXPOOL_LOG(DEBUG) << LOG_DESC("printPendingTxs for some txs unhandle finish"); + m_printed = true; +} +void MemoryStorage::batchRemove(BlockNumber batchId, TransactionSubmitResults const& txsResult) +{ + auto startT = utcTime(); + auto recordT = startT; + uint64_t lockT = 0; + m_blockNumberUpdatedTime = recordT; + size_t succCount = 0; + NonceList nonceList; + std::vector> results; + + results.reserve(txsResult.size()); + nonceList.reserve(txsResult.size()); + { + WriteGuard lock(x_txpoolMutex); + for (const auto& it : txsResult) + { + auto const& txResult = it; + auto tx = removeWithoutLock(txResult->txHash()); + if (!tx && txResult->nonce() != NonceType(-1)) + { + nonceList.emplace_back(txResult->nonce()); + } + else if (tx) + { + ++succCount; + nonceList.emplace_back(tx->nonce()); + } + results.emplace_back(std::tuple{std::move(tx), txResult}); + } + + if (batchId > m_blockNumber) + { + m_blockNumber = batchId; + } + lockT = utcTime() - startT; + } + + m_onChainTxsCount += txsResult.size(); + // stop stat the tps when there has no pending txs + if (m_tpsStatstartTime.load() > 0 && m_txsTable.size() == 0) + { + auto totalTime = (utcTime() - m_tpsStatstartTime); + if (totalTime > 0) + { + auto tps = (m_onChainTxsCount * 1000) / totalTime; + TXPOOL_LOG(INFO) << METRIC << LOG_DESC("StatTPS") << LOG_KV("tps", tps) + << LOG_KV("totalTime", totalTime); + } + m_tpsStatstartTime.store(0); + m_onChainTxsCount.store(0); + } + + auto removeT = utcTime() - startT; + + startT = utcTime(); + notifyUnsealedTxsSize(); + // update the ledger nonce + auto nonceListPtr = std::make_shared(std::move(nonceList)); + m_config->txValidator()->ledgerNonceChecker()->batchInsert(batchId, nonceListPtr); + auto updateLedgerNonceT = utcTime() - startT; + + startT = utcTime(); + // update the txpool nonce + m_config->txPoolNonceChecker()->batchRemove(*nonceListPtr); + auto updateTxPoolNonceT = utcTime() - startT; + + for (auto& [tx, txResult] : results) + { + if (tx) + { + notifyTxResult(*tx, std::move(txResult)); + } + } + + TXPOOL_LOG(INFO) << METRIC << LOG_DESC("batchRemove txs success") + << LOG_KV("expectedSize", txsResult.size()) << LOG_KV("succCount", succCount) + << LOG_KV("batchId", batchId) << LOG_KV("timecost", (utcTime() - recordT)) + << LOG_KV("lockT", lockT) << LOG_KV("removeT", removeT) + << LOG_KV("updateLedgerNonceT", updateLedgerNonceT) + << LOG_KV("updateTxPoolNonceT", updateTxPoolNonceT); +} + +TransactionsPtr MemoryStorage::fetchTxs(HashList& _missedTxs, HashList const& _txs) +{ + ReadGuard l(x_txpoolMutex); + auto fetchedTxs = std::make_shared(); + _missedTxs.clear(); + for (auto const& hash : _txs) + { + auto it = m_txsTable.find(hash); + if (it == m_txsTable.end()) + { + _missedTxs.emplace_back(hash); + continue; + } + auto& tx = it->second; + + fetchedTxs->emplace_back(std::const_pointer_cast(tx)); + } + if (c_fileLogLevel <= TRACE) + [[unlikely]] + { + for (auto const& tx : _missedTxs) + { + TXPOOL_LOG(TRACE) << "miss: " << tx.abridged(); + } + } + return fetchedTxs; +} + +ConstTransactionsPtr MemoryStorage::fetchNewTxs(size_t _txsLimit) +{ + ReadGuard l(x_txpoolMutex); + auto fetchedTxs = std::make_shared(); + fetchedTxs->reserve(_txsLimit); + + for (auto const& it : m_txsTable) + { + const auto& tx = it.second; + // Note: When inserting data into tbb::concurrent_unordered_map while traversing, it.second + // will occasionally be a null pointer. + if (!tx || tx->synced()) + { + continue; + } + tx->setSynced(true); + fetchedTxs->emplace_back(tx); + if (fetchedTxs->size() >= _txsLimit) + { + break; + } + } + return fetchedTxs; +} + +void MemoryStorage::batchFetchTxs(Block::Ptr _txsList, Block::Ptr _sysTxsList, size_t _txsLimit, + TxsHashSetPtr _avoidTxs, bool _avoidDuplicate) +{ + TXPOOL_LOG(INFO) << LOG_DESC("begin batchFetchTxs") << LOG_KV("pendingTxs", m_txsTable.size()) + << LOG_KV("limit", _txsLimit); + auto blockFactory = m_config->blockFactory(); + auto recordT = utcTime(); + auto startT = utcTime(); + UpgradableGuard l(x_txpoolMutex); + auto lockT = utcTime() - startT; + startT = utcTime(); + auto currentTime = (int64_t)utcTime(); + size_t traverseCount = 0; + for (auto const& it : m_txsTable) + { + traverseCount++; + const auto& tx = it.second; + // Note: When inserting data into tbb::concurrent_unordered_map while traversing, + // it.second will occasionally be a null pointer. + if (!tx) + { + continue; + } + + auto txHash = tx->hash(); + auto it2 = m_invalidTxs.find(txHash); + if (it2 != m_invalidTxs.end()) + { + continue; + } + // the transaction has already been sealed for newer proposal + if (_avoidDuplicate && tx->sealed()) + { + continue; + } + if (currentTime > (tx->importTime() + m_txsExpirationTime)) + { + // add to m_invalidTxs to be deleted + m_invalidTxs.insert(txHash); + m_invalidNonces.insert(tx->nonce()); + continue; + } + /// check nonce again when obtain transactions + // since the invalid nonce has already been checked before the txs import into the + // txPool the txs with duplicated nonce here are already-committed, but have not been + // dropped + auto result = m_config->txValidator()->submittedToChain(tx); + if (result == TransactionStatus::NonceCheckFail) + { + // in case of the same tx notified more than once + auto transaction = std::const_pointer_cast(tx); + transaction->takeSubmitCallback(); + // add to m_invalidTxs to be deleted + m_invalidTxs.insert(txHash); + m_invalidNonces.insert(tx->nonce()); + continue; + } + // blockLimit expired + if (result == TransactionStatus::BlockLimitCheckFail) + { + m_invalidTxs.insert(txHash); + m_invalidNonces.insert(tx->nonce()); + continue; + } + if (_avoidTxs && _avoidTxs->count(txHash)) + { + continue; + } + auto txMetaData = m_config->blockFactory()->createTransactionMetaData(); + + txMetaData->setHash(tx->hash()); + txMetaData->setTo(std::string(tx->to())); + txMetaData->setAttribute(tx->attribute()); + if (tx->systemTx()) + { + _sysTxsList->appendTransactionMetaData(txMetaData); + } + else + { + _txsList->appendTransactionMetaData(txMetaData); + } + if (!tx->sealed()) + { + m_sealedTxsSize++; + } +#if FISCO_DEBUG + // TODO: remove this, now just for bug tracing + TXPOOL_LOG(INFO) << LOG_DESC("fetch ") << tx->hash().abridged() + << LOG_KV("sealed", tx->sealed()) << LOG_KV("batchId", tx->batchId()) + << LOG_KV("batchHash", tx->batchHash().abridged()) + << LOG_KV("txPointer", tx); +#endif + tx->setSealed(true); + tx->setBatchId(-1); + tx->setBatchHash(HashType()); + if ((_txsList->transactionsMetaDataSize() + _sysTxsList->transactionsMetaDataSize()) >= + _txsLimit) + { + break; + } + } + auto fetchTxsT = utcTime() - startT; + notifyUnsealedTxsSize(); + + UpgradeGuard writeLock(l); + removeInvalidTxs(false); + TXPOOL_LOG(INFO) << METRIC << LOG_DESC("batchFetchTxs success") + << LOG_KV("timecost", (utcTime() - recordT)) + << LOG_KV("txsSize", _txsList->transactionsMetaDataSize()) + << LOG_KV("sysTxsSize", _sysTxsList->transactionsMetaDataSize()) + << LOG_KV("pendingTxs", m_txsTable.size()) << LOG_KV("limit", _txsLimit) + << LOG_KV("fetchTxsT", fetchTxsT) << LOG_KV("lockT", lockT) + << LOG_KV("traverseCount", traverseCount); +} + +void MemoryStorage::removeInvalidTxs(bool lock) +{ + try + { + if (m_invalidTxs.empty()) + { + return; + } + + std::optional writeLock; + if (lock) + { + writeLock.emplace(x_txpoolMutex); + } + // remove invalid txs + for (auto const& txHash : m_invalidTxs) + { + auto txResult = m_config->txResultFactory()->createTxSubmitResult(); + txResult->setTxHash(txHash); + txResult->setStatus(static_cast(TransactionStatus::TransactionPoolTimeout)); + + removeSubmittedTxWithoutLock(std::move(txResult), true); + } + notifyUnsealedTxsSize(); + // remove invalid nonce + m_config->txPoolNonceChecker()->batchRemove(m_invalidNonces); + TXPOOL_LOG(DEBUG) << LOG_DESC("removeInvalidTxs") << LOG_KV("size", m_invalidTxs.size()); + m_invalidTxs.clear(); + m_invalidNonces.clear(); + } + catch (std::exception const& e) + { + TXPOOL_LOG(WARNING) << LOG_DESC("removeInvalidTxs exception") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } +} + +void MemoryStorage::clear() +{ + WriteGuard lock(x_txpoolMutex); + m_txsTable.clear(); + m_invalidTxs.clear(); + m_invalidNonces.clear(); + m_missedTxs.clear(); + notifyUnsealedTxsSize(); +} + +HashListPtr MemoryStorage::filterUnknownTxs(HashList const& _txsHashList, NodeIDPtr _peer) +{ + ReadGuard lock(x_txpoolMutex); + for (auto txHash : _txsHashList) + { + auto it = m_txsTable.find(txHash); + if (it == m_txsTable.end()) + { + continue; + } + auto& tx = it->second; + if (!tx) + { + continue; + } + tx->appendKnownNode(_peer); + } + auto unknownTxsList = std::make_shared(); + UpgradableGuard missedTxsLock(x_missedTxs); + for (auto const& txHash : _txsHashList) + { + if (m_txsTable.count(txHash)) + { + continue; + } + if (m_missedTxs.count(txHash)) + { + continue; + } + unknownTxsList->push_back(txHash); + m_missedTxs.insert(txHash); + } + if (m_missedTxs.size() >= m_config->poolLimit()) + { + UpgradeGuard ul(missedTxsLock); + m_missedTxs.clear(); + } + return unknownTxsList; +} + +void MemoryStorage::batchMarkTxs( + HashList const& _txsHashList, BlockNumber _batchId, HashType const& _batchHash, bool _sealFlag) +{ + if (_sealFlag) + { + ReadGuard l(x_txpoolMutex); + batchMarkTxsWithoutLock(_txsHashList, _batchId, _batchHash, _sealFlag); + return; + } + // Note: setting flag to false is pessimistic, use writeLock here in case of the same txs has + // been sealed twice + WriteGuard l(x_txpoolMutex); + batchMarkTxsWithoutLock(_txsHashList, _batchId, _batchHash, _sealFlag); +} + +void MemoryStorage::batchMarkTxsWithoutLock( + HashList const& _txsHashList, BlockNumber _batchId, HashType const& _batchHash, bool _sealFlag) +{ + auto recordT = utcTime(); + auto startT = utcTime(); + ssize_t successCount = 0; + for (auto txHash : _txsHashList) + { + auto it = m_txsTable.find(txHash); + if (it == m_txsTable.end()) + { + TXPOOL_LOG(TRACE) << LOG_DESC("batchMarkTxs: missing transaction") + << LOG_KV("tx", txHash.abridged()) << LOG_KV("sealFlag", _sealFlag); + continue; + } + auto tx = it->second; + if (!tx) + { + continue; + } + // the tx has already been re-sealed, can not enforce unseal + if ((tx->batchId() != _batchId || tx->batchHash() != _batchHash) && tx->sealed() && + !_sealFlag) + { + continue; + } + if (_sealFlag && !tx->sealed()) + { + m_sealedTxsSize++; + } + if (!_sealFlag && tx->sealed()) + { + m_sealedTxsSize--; + } + tx->setSealed(_sealFlag); + successCount += 1; + // set the block information for the transaction + if (_sealFlag) + { + tx->setBatchId(_batchId); + tx->setBatchHash(_batchHash); + } +#if FISCO_DEBUG + // TODO: remove this, now just for bug tracing + TXPOOL_LOG(DEBUG) << LOG_DESC("mark ") << tx->hash().abridged() << ":" << _sealFlag + << LOG_KV("index", tx->batchId()) + << LOG_KV("hash", tx->batchHash().abridged()) << LOG_KV("txPointer", tx); +#endif + } + TXPOOL_LOG(DEBUG) << LOG_DESC("batchMarkTxs ") << LOG_KV("txsSize", _txsHashList.size()) + << LOG_KV("batchId", _batchId) << LOG_KV("hash", _batchHash.abridged()) + << LOG_KV("flag", _sealFlag) << LOG_KV("succ", successCount) + << LOG_KV("timecost", utcTime() - recordT) + << LOG_KV("markT", (utcTime() - startT)); + notifyUnsealedTxsSize(); +} + +void MemoryStorage::batchMarkAllTxs(bool _sealFlag) +{ + ReadGuard l(x_txpoolMutex); + for (auto item : m_txsTable) + { + auto tx = item.second; + if (!tx) + { + continue; + } + tx->setSealed(_sealFlag); + if (!_sealFlag) + { + tx->setBatchId(-1); + tx->setBatchHash(HashType()); + } + } + if (_sealFlag) + { + m_sealedTxsSize = m_txsTable.size(); + } + else + { + m_sealedTxsSize = 0; + } + notifyUnsealedTxsSize(); +} + +size_t MemoryStorage::unSealedTxsSize() +{ + ReadGuard l(x_txpoolMutex); + return unSealedTxsSizeWithoutLock(); +} + +size_t MemoryStorage::unSealedTxsSizeWithoutLock() +{ + if (m_txsTable.size() < m_sealedTxsSize) + { + m_sealedTxsSize = m_txsTable.size(); + return 0; + } + return (m_txsTable.size() - m_sealedTxsSize); +} + +void MemoryStorage::notifyUnsealedTxsSize(size_t _retryTime) +{ + // Note: must set the notifier + if (!m_unsealedTxsNotifier) + { + return; + } + + auto unsealedTxsSize = unSealedTxsSizeWithoutLock(); + auto self = weak_from_this(); + m_unsealedTxsNotifier(unsealedTxsSize, [_retryTime, self](Error::Ptr _error) { + if (_error == nullptr) + { + return; + } + TXPOOL_LOG(WARNING) << LOG_DESC("notifyUnsealedTxsSize failed") + << LOG_KV("errorCode", _error->errorCode()) + << LOG_KV("errorMsg", _error->errorMessage()); + auto memoryStorage = self.lock(); + if (!memoryStorage) + { + return; + } + if (_retryTime >= memoryStorage->c_maxRetryTime) + { + return; + } + memoryStorage->notifyUnsealedTxsSize((_retryTime + 1)); + }); +} + +std::shared_ptr MemoryStorage::batchVerifyProposal(Block::Ptr _block) +{ + auto missedTxs = std::make_shared(); + auto txsSize = _block->transactionsHashSize(); + if (txsSize == 0) + { + return missedTxs; + } + auto batchId = (_block && _block->blockHeader()) ? _block->blockHeader()->number() : -1; + auto batchHash = (_block && _block->blockHeader()) ? _block->blockHeader()->hash() : + bcos::crypto::HashType(); + auto startT = utcTime(); + ReadGuard l(x_txpoolMutex); + auto lockT = utcTime() - startT; + startT = utcTime(); + for (size_t i = 0; i < txsSize; i++) + { + auto txHash = _block->transactionHash(i); + if (!(m_txsTable.count(txHash))) + { + missedTxs->emplace_back(txHash); + } + } + TXPOOL_LOG(INFO) << LOG_DESC("batchVerifyProposal") << LOG_KV("consNum", batchId) + << LOG_KV("hash", batchHash.abridged()) << LOG_KV("txsSize", txsSize) + << LOG_KV("lockT", lockT) << LOG_KV("verifyT", (utcTime() - startT)); + return missedTxs; +} + +bool MemoryStorage::batchVerifyProposal(std::shared_ptr _txsHashList) +{ + ReadGuard l(x_txpoolMutex); + + for (auto const& txHash : *_txsHashList) + { + if (!(m_txsTable.count(txHash))) + { + return false; + } + } + return true; +} + +HashListPtr MemoryStorage::getTxsHash(int _limit) +{ + auto txsHash = std::make_shared(); + ReadGuard l(x_txpoolMutex); + for (auto const& it : m_txsTable) + { + auto tx = it.second; + if (!tx) + { + continue; + } + if ((int)txsHash->size() >= _limit) + { + break; + } + txsHash->emplace_back(it.first); + } + return txsHash; +} + +void MemoryStorage::cleanUpExpiredTransactions() +{ + m_cleanUpTimer->restart(); + + // Note: In order to minimize the impact of cleanUp on performance, + // the normal consensus node does not clear expired txs in m_clearUpTimer, but clears + // expired txs in the process of sealing txs + if (m_txsCleanUpSwitch && !m_txsCleanUpSwitch()) + { + return; + } + UpgradableGuard l(x_txpoolMutex); + if (m_txsTable.empty()) + { + return; + } + size_t traversedTxsNum = 0; + size_t erasedTxs = 0; + int64_t currentTime = utcTime(); + for (auto it = m_txsTable.begin(); + traversedTxsNum <= c_maxTraverseTxsNum && it != m_txsTable.end(); it++) + { + auto tx = it->second; + if (m_invalidTxs.count(tx->hash())) + { + continue; + } + if (tx->sealed() && tx->batchId() >= m_blockNumber) + { + continue; + } + // the txs expired or not + if (currentTime > (tx->importTime() + m_txsExpirationTime)) + { + m_invalidTxs.insert(tx->hash()); + m_invalidNonces.insert(tx->nonce()); + erasedTxs++; + } + traversedTxsNum++; + } + TXPOOL_LOG(INFO) << LOG_DESC("cleanUpExpiredTransactions") + << LOG_KV("pendingTxs", m_txsTable.size()) << LOG_KV("erasedTxs", erasedTxs); + + UpgradeGuard ul(l); + removeInvalidTxs(false); +} + + +void MemoryStorage::batchImportTxs(TransactionsPtr _txs) +{ + auto recordT = utcTime(); + ReadGuard l(x_txpoolMutex); + size_t successCount = 0; + for (auto const& tx : *_txs) + { + if (!tx || tx->invalid()) + { + continue; + } + // not checkLimit when receive txs from p2p + auto ret = verifyAndSubmitTransaction(tx, nullptr, false, false); + if (ret != TransactionStatus::None) + { + TXPOOL_LOG(TRACE) << LOG_DESC("batchImportTxs failed") + << LOG_KV("tx", tx->hash().abridged()) << LOG_KV("error", ret); + continue; + } + successCount++; + } + notifyUnsealedTxsSize(); + TXPOOL_LOG(DEBUG) << LOG_DESC("batchImportTxs success") << LOG_KV("importTxs", successCount) + << LOG_KV("totalTxs", _txs->size()) << LOG_KV("pendingTxs", m_txsTable.size()) + << LOG_KV("timecost", (utcTime() - recordT)); +} + +bool MemoryStorage::batchVerifyAndSubmitTransaction( + bcos::protocol::BlockHeader::Ptr _header, TransactionsPtr _txs) +{ + // use writeGuard here in case of the transaction status will be modified by other + // interfaces + auto recordT = utcTime(); + // use writeGuard here in case of the transaction status will be modified by other + // interfaces + WriteGuard l(x_txpoolMutex); + auto lockT = utcTime() - recordT; + recordT = utcTime(); + for (auto const& tx : *_txs) + { + if (!tx || tx->invalid()) + { + continue; + } + auto result = enforceSubmitTransaction(tx); + if (result != TransactionStatus::None) + { + TXPOOL_LOG(WARNING) << LOG_BADGE("batchSubmitTransaction: verify proposal failed") + << LOG_KV("tx", tx->hash().abridged()) << LOG_KV("result", result) + << LOG_KV("txBatchID", tx->batchId()) + << LOG_KV("txBatchHash", tx->batchHash().abridged()) + << LOG_KV("consIndex", _header->number()) + << LOG_KV("propHash", _header->hash().abridged()); + return false; + } + } + notifyUnsealedTxsSize(); + TXPOOL_LOG(DEBUG) << LOG_DESC("batchVerifyAndSubmitTransaction success") + << LOG_KV("totalTxs", _txs->size()) << LOG_KV("lockT", lockT) + << LOG_KV("submitT", (utcTime() - recordT)); + return true; +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.h b/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.h new file mode 100644 index 0000000..ed6dae0 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/storage/MemoryStorage.h @@ -0,0 +1,166 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief an implementation of using memory to store transactions + * @file MemoryStorage.h + * @author: yujiechen + * @date 2021-05-07 + */ +#pragma once + +#include "bcos-txpool/TxPoolConfig.h" +#include +#include +#include +#include +#include + +namespace bcos::txpool +{ +class MemoryStorage : public TxPoolStorageInterface, + public std::enable_shared_from_this +{ +public: + // the default txsExpirationTime is 10 minutes + explicit MemoryStorage(TxPoolConfig::Ptr _config, size_t _notifyWorkerNum = 2, + int64_t _txsExpirationTime = 10 * 60 * 1000); + ~MemoryStorage() override = default; + + task::Task submitTransaction( + protocol::Transaction::Ptr transaction) override; + + bcos::protocol::TransactionStatus insert(bcos::protocol::Transaction::Ptr transaction) override; + void batchInsert(bcos::protocol::Transactions const& _txs) override; + + bcos::protocol::Transaction::Ptr remove(bcos::crypto::HashType const& _txHash) override; + void batchRemove(bcos::protocol::BlockNumber _batchId, + bcos::protocol::TransactionSubmitResults const& _txsResult) override; + bcos::protocol::Transaction::Ptr removeSubmittedTx( + bcos::protocol::TransactionSubmitResult::Ptr _txSubmitResult) override; + + bcos::protocol::TransactionsPtr fetchTxs( + bcos::crypto::HashList& _missedTxs, bcos::crypto::HashList const& _txsList) override; + + bcos::protocol::ConstTransactionsPtr fetchNewTxs(size_t _txsLimit) override; + void batchFetchTxs(bcos::protocol::Block::Ptr _txsList, bcos::protocol::Block::Ptr _sysTxsList, + size_t _txsLimit, TxsHashSetPtr _avoidTxs, bool _avoidDuplicate = true) override; + + bool exist(bcos::crypto::HashType const& _txHash) override + { + ReadGuard lock(x_txpoolMutex); + auto it = m_txsTable.find(_txHash); + return it != m_txsTable.end(); + } + size_t size() const override + { + ReadGuard l(x_txpoolMutex); + return m_txsTable.size(); + } + void clear() override; + + bcos::crypto::HashListPtr filterUnknownTxs( + bcos::crypto::HashList const& _txsHashList, bcos::crypto::NodeIDPtr _peer) override; + + bcos::crypto::HashListPtr getTxsHash(int _limit) override; + void batchMarkAllTxs(bool _sealFlag) override; + + size_t unSealedTxsSize() override; + + void stop() override; + void start() override; + void printPendingTxs() override; + + std::shared_ptr batchVerifyProposal( + bcos::protocol::Block::Ptr _block) override; + + bool batchVerifyProposal(std::shared_ptr _txsHashList) override; + + bool batchVerifyAndSubmitTransaction( + bcos::protocol::BlockHeader::Ptr _header, bcos::protocol::TransactionsPtr _txs) override; + void batchImportTxs(bcos::protocol::TransactionsPtr _txs) override; + + void batchMarkTxs(bcos::crypto::HashList const& _txsHashList, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + bool _sealFlag) override; + +protected: + bcos::protocol::TransactionStatus insertWithoutLock( + bcos::protocol::Transaction::Ptr transaction); + bcos::protocol::TransactionStatus enforceSubmitTransaction( + bcos::protocol::Transaction::Ptr _tx); + bcos::protocol::TransactionStatus verifyAndSubmitTransaction( + protocol::Transaction::Ptr transaction, protocol::TxSubmitCallback txSubmitCallback, + bool checkPoolLimit, bool lock); + size_t unSealedTxsSizeWithoutLock(); + bcos::protocol::TransactionStatus txpoolStorageCheck( + const bcos::protocol::Transaction& transaction); + + virtual bcos::protocol::Transaction::Ptr removeWithoutLock( + bcos::crypto::HashType const& _txHash); + virtual bcos::protocol::Transaction::Ptr removeSubmittedTxWithoutLock( + bcos::protocol::TransactionSubmitResult::Ptr _txSubmitResult, bool _notify = true); + + virtual void notifyInvalidReceipt(bcos::crypto::HashType const& _txHash, + bcos::protocol::TransactionStatus _status, + bcos::protocol::TxSubmitCallback _txSubmitCallback); + + virtual void notifyTxResult(bcos::protocol::Transaction& transaction, + bcos::protocol::TransactionSubmitResult::Ptr txSubmitResult); + + virtual void removeInvalidTxs(bool lock); + + virtual void notifyUnsealedTxsSize(size_t _retryTime = 0); + virtual void cleanUpExpiredTransactions(); + + virtual void batchMarkTxsWithoutLock(bcos::crypto::HashList const& _txsHashList, + bcos::protocol::BlockNumber _batchId, bcos::crypto::HashType const& _batchHash, + bool _sealFlag); + +protected: + TxPoolConfig::Ptr m_config; + + tbb::concurrent_unordered_map> + m_txsTable; + mutable SharedMutex x_txpoolMutex; + + tbb::concurrent_unordered_set> + m_invalidTxs; + tbb::concurrent_unordered_set> + m_invalidNonces; + tbb::concurrent_unordered_set> + m_missedTxs; + mutable SharedMutex x_missedTxs; + std::atomic m_sealedTxsSize = {0}; + + size_t c_maxRetryTime = 3; + + std::atomic m_blockNumber = {0}; + std::atomic_bool m_printed = {false}; + uint64_t m_blockNumberUpdatedTime; + + // the txs expiration time, default is 10 minutes + int64_t m_txsExpirationTime = 10 * 60 * 1000; + // timer to clear up the expired txs in-period + std::shared_ptr m_cleanUpTimer; + // Maximum number of transactions traversed by m_cleanUpTimer, + // The limit set here is to minimize the impact of the cleanup operation on txpool performance + uint64_t c_maxTraverseTxsNum = 10000; + + // for tps stat + std::atomic_uint64_t m_tpsStatstartTime = {0}; + std::atomic_uint64_t m_onChainTxsCount = {0}; +}; +} // namespace bcos::txpool \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.cpp b/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.cpp new file mode 100644 index 0000000..eaf9e31 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.cpp @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ledger nonce-checker + * @file LedgerNonceChecker.cpp + * @author: yujiechen + * @date 2021-05-10 + */ +#include "LedgerNonceChecker.h" +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::txpool; + +void LedgerNonceChecker::initNonceCache( + std::map _initialNonces) +{ + for (auto const& it : _initialNonces) + { + m_blockNonceCache[it.first] = it.second; + TxPoolNonceChecker::batchInsert(it.first, it.second); + } +} + +TransactionStatus LedgerNonceChecker::checkNonce(Transaction::ConstPtr _tx, bool _shouldUpdate) +{ + // check nonce + auto status = TxPoolNonceChecker::checkNonce(_tx, _shouldUpdate); + if (status != TransactionStatus::None) + { + return status; + } + // check blockLimit + return checkBlockLimit(_tx); +} + +TransactionStatus LedgerNonceChecker::checkBlockLimit(bcos::protocol::Transaction::ConstPtr _tx) +{ + auto blockNumber = m_blockNumber.load(); + if (blockNumber >= _tx->blockLimit() || (blockNumber + m_blockLimit) < _tx->blockLimit()) + { + NONCECHECKER_LOG(WARNING) << LOG_DESC("InvalidBlockLimit") + << LOG_KV("blkLimit", _tx->blockLimit()) + << LOG_KV("blockLimit", m_blockLimit) + << LOG_KV("curBlk", m_blockNumber) + << LOG_KV("tx", _tx->hash().abridged()); + return TransactionStatus::BlockLimitCheckFail; + } + return TransactionStatus::None; +} + + +void LedgerNonceChecker::batchInsert(BlockNumber _batchId, NonceListPtr const& _nonceList) +{ + if (m_blockNumber < _batchId) + { + m_blockNumber.store(_batchId); + } + ssize_t batchToBeRemoved = (_batchId > m_blockLimit) ? (_batchId - m_blockLimit) : -1; + // insert the latest nonces + TxPoolNonceChecker::batchInsert(_batchId, _nonceList); + + WriteGuard l(x_blockNonceCache); + if (!m_blockNonceCache.count(_batchId)) + { + m_blockNonceCache[_batchId] = _nonceList; + NONCECHECKER_LOG(DEBUG) << LOG_DESC("batchInsert nonceList") << LOG_KV("batchId", _batchId) + << LOG_KV("nonceSize", _nonceList->size()); + } + // the genesis has no nonceList + if (batchToBeRemoved == -1) + { + return; + } + // remove the expired nonces + if (!m_blockNonceCache.count(batchToBeRemoved)) + { + NONCECHECKER_LOG(WARNING) << LOG_DESC("batchInsert: miss cache when remove expired cache") + << LOG_KV("batchToBeRemoved", batchToBeRemoved); + return; + } + auto nonceList = m_blockNonceCache[batchToBeRemoved]; + m_blockNonceCache.erase(batchToBeRemoved); + batchRemove(*nonceList); + NONCECHECKER_LOG(DEBUG) << LOG_DESC("batchInsert: remove expired nonce") + << LOG_KV("batchToBeRemoved", batchToBeRemoved) + << LOG_KV("nonceSize", nonceList->size()); +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.h b/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.h new file mode 100644 index 0000000..8c6ce98 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/LedgerNonceChecker.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for ledger nonce-checker + * @file LedgerNonceChecker.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once +#include "bcos-txpool/txpool/validator/TxPoolNonceChecker.h" +#include + +namespace bcos +{ +namespace txpool +{ +class LedgerNonceChecker : public TxPoolNonceChecker +{ +public: + LedgerNonceChecker( + std::shared_ptr > _initialNonces, + bcos::protocol::BlockNumber _blockNumber, int64_t _blockLimit) + : TxPoolNonceChecker(), m_blockNumber(_blockNumber), m_blockLimit(_blockLimit) + { + if (_initialNonces) + { + initNonceCache(*_initialNonces); + } + } + bcos::protocol::TransactionStatus checkNonce( + bcos::protocol::Transaction::ConstPtr _tx, bool _shouldUpdate = false) override; + + void batchInsert(bcos::protocol::BlockNumber _batchId, + bcos::protocol::NonceListPtr const& _nonceList) override; + +protected: + virtual bcos::protocol::TransactionStatus checkBlockLimit( + bcos::protocol::Transaction::ConstPtr _tx); + virtual void initNonceCache(std::map _initialNonces); + +private: + std::atomic m_blockNumber = {0}; + int64_t m_blockLimit; + + /// cache the block nonce to in case of accessing the DB to get nonces of given block frequently + /// key: block number + /// value: all the nonces of a given block + /// we cache at most m_blockLimit entries(occuppy about 32KB) + std::map m_blockNonceCache; + mutable SharedMutex x_blockNonceCache; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.cpp b/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.cpp new file mode 100644 index 0000000..dc598e5 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.cpp @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for txpool nonce-checker + * @file TxPoolNonceChecker.cpp + * @author: yujiechen + * @date 2021-05-10 + */ +#include "TxPoolNonceChecker.h" +#include + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::txpool; + +bool TxPoolNonceChecker::exists(NonceType const& _nonce) +{ + decltype(m_nonces)::const_accessor it; + return m_nonces.find(it, _nonce); +} + +TransactionStatus TxPoolNonceChecker::checkNonce(Transaction::ConstPtr _tx, bool _shouldUpdate) +{ + auto nonce = _tx->nonce(); + + decltype(m_nonces)::const_accessor it; + if (m_nonces.find(it, nonce)) + { + return TransactionStatus::NonceCheckFail; + } + + if (_shouldUpdate) + { + m_nonces.emplace(it, std::move(nonce), std::monostate{}); + } + return TransactionStatus::None; +} + +void TxPoolNonceChecker::insert(NonceType const& _nonce) +{ + m_nonces.emplace(_nonce, std::monostate{}); +} + +void TxPoolNonceChecker::batchInsert(BlockNumber /*_batchId*/, NonceListPtr const& _nonceList) +{ + for (auto const& nonce : *_nonceList) + { + m_nonces.emplace(nonce, std::monostate{}); + } +} + +void TxPoolNonceChecker::remove(NonceType const& _nonce) +{ + m_nonces.erase(_nonce); +} + +void TxPoolNonceChecker::batchRemove(NonceList const& _nonceList) +{ + for (auto const& nonce : _nonceList) + { + remove(nonce); + } +} + +void TxPoolNonceChecker::batchRemove(tbb::concurrent_unordered_set> const& _nonceList) +{ + for (auto const& nonce : _nonceList) + { + remove(nonce); + } +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.h b/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.h new file mode 100644 index 0000000..4b3d381 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/TxPoolNonceChecker.h @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for txpool nonce-checker + * @file TxPoolNonceChecker.h + * @author: yujiechen + * @date 2021-05-10 + */ +#pragma once +#include "bcos-txpool/txpool/interfaces/NonceCheckerInterface.h" +#include +#include + +namespace bcos::txpool +{ +class TxPoolNonceChecker : public NonceCheckerInterface +{ +public: + TxPoolNonceChecker() = default; + bcos::protocol::TransactionStatus checkNonce( + bcos::protocol::Transaction::ConstPtr _tx, bool _shouldUpdate = false) override; + void batchInsert(bcos::protocol::BlockNumber _batchId, + bcos::protocol::NonceListPtr const& _nonceList) override; + void batchRemove(bcos::protocol::NonceList const& _nonceList) override; + void batchRemove(tbb::concurrent_unordered_set> const& _nonceList) override; + bool exists(bcos::protocol::NonceType const& _nonce) override; + + void insert(bcos::protocol::NonceType const& _nonce) override; + +protected: + void remove(bcos::protocol::NonceType const& _nonce) override; + + tbb::concurrent_hash_map m_nonces; +}; +} // namespace bcos::txpool \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.cpp b/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.cpp new file mode 100644 index 0000000..f1b465b --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.cpp @@ -0,0 +1,84 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of TxValidator + * @file TxValidator.cpp + * @author: yujiechen + * @date 2021-05-11 + */ +#include "TxValidator.h" + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::txpool; + +TransactionStatus TxValidator::verify(bcos::protocol::Transaction::ConstPtr _tx) +{ + if (_tx->invalid()) + { + return TransactionStatus::InvalidSignature; + } + // check groupId and chainId + if (_tx->groupId() != m_groupId) + { + return TransactionStatus::InvalidGroupId; + } + if (_tx->chainId() != m_chainId) + { + return TransactionStatus::InvalidChainId; + } + // compare with nonces cached in memory + auto status = m_txPoolNonceChecker->checkNonce(_tx, false); + if (status != TransactionStatus::None) + { + return status; + } + status = submittedToChain(_tx); + if (status != TransactionStatus::None) + { + return status; + } + // check signature + try + { + _tx->verify(*m_cryptoSuite->hashImpl(), *m_cryptoSuite->signatureImpl()); + } + catch (std::exception const& e) + { + return TransactionStatus::InvalidSignature; + } + + if (isSystemTransaction(_tx)) + { + _tx->setSystemTx(true); + } + m_txPoolNonceChecker->insert(_tx->nonce()); + return TransactionStatus::None; +} + +TransactionStatus TxValidator::submittedToChain(bcos::protocol::Transaction::ConstPtr _tx) +{ + // compare with nonces stored on-chain + auto status = m_ledgerNonceChecker->checkNonce(_tx); + if (status != TransactionStatus::None) + { + return status; + } + if (isSystemTransaction(_tx)) + { + _tx->setSystemTx(true); + } + return TransactionStatus::None; +} \ No newline at end of file diff --git a/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.h b/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.h new file mode 100644 index 0000000..73254e4 --- /dev/null +++ b/bcos-txpool/bcos-txpool/txpool/validator/TxValidator.h @@ -0,0 +1,63 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation of TxValidator + * @file TxValidator.h + * @author: yujiechen + * @date 2021-05-11 + */ +#pragma once +#include "bcos-txpool/txpool/interfaces/NonceCheckerInterface.h" +#include "bcos-txpool/txpool/interfaces/TxValidatorInterface.h" +#include +#include +namespace bcos +{ +namespace txpool +{ +class TxValidator : public TxValidatorInterface +{ +public: + using Ptr = std::shared_ptr; + TxValidator(NonceCheckerInterface::Ptr _txPoolNonceChecker, + bcos::crypto::CryptoSuite::Ptr _cryptoSuite, std::string const& _groupId, + std::string const& _chainId) + : m_txPoolNonceChecker(_txPoolNonceChecker), + m_cryptoSuite(_cryptoSuite), + m_groupId(_groupId), + m_chainId(_chainId) + {} + ~TxValidator() override {} + + bcos::protocol::TransactionStatus verify(bcos::protocol::Transaction::ConstPtr _tx) override; + bcos::protocol::TransactionStatus submittedToChain( + bcos::protocol::Transaction::ConstPtr _tx) override; + +protected: + virtual bool isSystemTransaction(bcos::protocol::Transaction::ConstPtr _tx) + { + auto txAddress = _tx->to(); + return bcos::precompiled::c_systemTxsAddress.count( + std::string(txAddress.begin(), txAddress.end())); + } + +private: + NonceCheckerInterface::Ptr m_txPoolNonceChecker; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + std::string m_groupId; + std::string m_chainId; +}; +} // namespace txpool +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/test/CMakeLists.txt b/bcos-txpool/test/CMakeLists.txt new file mode 100644 index 0000000..9eea494 --- /dev/null +++ b/bcos-txpool/test/CMakeLists.txt @@ -0,0 +1,33 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-txpool +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "unittests/*.cpp" "unittests/*.h" "unittests/*.sol") +file(GLOB_RECURSE DEMO_SOURCES "demo/*.cpp" "demo/*.h" "demo/*.sol") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-txpool) +set(DEMO_BINARY_NAME bcos-txpool-demo) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +add_executable(${DEMO_BINARY_NAME} ${DEMO_SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED unit_test_framework) + +target_link_libraries(${TEST_BINARY_NAME} ${TXPOOL_TARGET} bcos-crypto ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) +target_link_libraries(${DEMO_BINARY_NAME} ${TXPOOL_TARGET} bcos-crypto ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) +add_test(NAME test-txpool WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) \ No newline at end of file diff --git a/bcos-txpool/test/demo/txpool_demo.cpp b/bcos-txpool/test/demo/txpool_demo.cpp new file mode 100644 index 0000000..fb90cd0 --- /dev/null +++ b/bcos-txpool/test/demo/txpool_demo.cpp @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief demo for bcos-txpool + * @file txpool_demo.cpp + * @date 2022.01.24 + * @author yujiechen + */ + +#include "bcos-crypto/hash/Keccak256.h" +#include "bcos-crypto/hash/SM3.h" +#include "bcos-protocol/TransactionSubmitResultImpl.h" +#include "bcos-txpool/test/unittests/txpool/TxPoolFixture.h" +#include +#include +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::front; +using namespace bcos::protocol; +using namespace bcos::test; +using namespace bcos::txpool; +using namespace bcos::crypto; + +void testSubmitAndRemoveTransaction(bcos::crypto::CryptoSuite::Ptr _cryptoSuite, size_t _count) +{ + auto signatureImpl = _cryptoSuite->signatureImpl(); + auto hashImpl = _cryptoSuite->hashImpl(); + auto keyPair = signatureImpl->generateKeyPair(); + std::string groupId = "group_test_for_txpool"; + std::string chainId = "chain_test_for_txpool"; + int64_t blockLimit = 1000; + auto fakeGateWay = std::make_shared(); + auto faker = std::make_shared( + keyPair->publicKey(), _cryptoSuite, groupId, chainId, blockLimit, fakeGateWay); + faker->init(); + faker->appendSealer(faker->nodeID()); + auto ledger = faker->ledger(); + auto txpool = faker->txpool(); + + auto txsResult = std::make_shared(); + txsResult->resize(_count); + txpool->txpoolConfig()->setPoolLimit(_count + 1000); + tbb::parallel_for(tbb::blocked_range(0, _count), [&](const tbb::blocked_range& _r) { + for (auto i = _r.begin(); i < _r.end(); i++) + { + auto tx = fakeTransaction(_cryptoSuite, 1000 + i, + ledger->blockNumber() + blockLimit - 4, faker->chainId(), faker->groupId()); + ~txpool->submitTransaction(tx); + auto result = std::make_shared(); + result->setTxHash(tx->hash()); + (*txsResult)[i] = result; + } + }); + while (txpool->txpoolStorage()->size() < _count) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + std::cout << "### remove submitted txs, size:" << txpool->txpoolStorage()->size() << std::endl; + // remove the txs + txpool->asyncNotifyBlockResult(ledger->blockNumber() + 1, txsResult, [](Error::Ptr) {}); + faker.reset(); +} + +void Usage(std::string const& _appName) +{ + std::cout << _appName << " count" << std::endl; +} + +int main(int argc, char* argv[]) +{ + if (argc < 2) + { + Usage(argv[0]); + return -1; + } + size_t count = atoi(argv[1]); + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + testSubmitAndRemoveTransaction(cryptoSuite, count); + getchar(); +} \ No newline at end of file diff --git a/bcos-txpool/test/unittests/main/main.cpp b/bcos-txpool/test/unittests/main/main.cpp new file mode 100644 index 0000000..5029377 --- /dev/null +++ b/bcos-txpool/test/unittests/main/main.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include +#include diff --git a/bcos-txpool/test/unittests/sync/FakeTxsSyncMsg.h b/bcos-txpool/test/unittests/sync/FakeTxsSyncMsg.h new file mode 100644 index 0000000..54122af --- /dev/null +++ b/bcos-txpool/test/unittests/sync/FakeTxsSyncMsg.h @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fake the txsSyncMsg + * @file FakeTxsSyncMsg.h + */ +#pragma once +#include "bcos-txpool/sync/protocol/PB/TxsSyncMsg.h" +#include "bcos-txpool/sync/protocol/PB/TxsSyncMsgFactoryImpl.h" +#include + +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +class FakeTxsSyncMsg +{ +public: + FakeTxsSyncMsg() { m_msgFactory = std::make_shared(); } + TxsSyncMsgInterface::Ptr fakeTxsMsg( + int32_t _type, int32_t _version, HashList const& _txsHash, bytes const& _txsData) + { + auto msg = m_msgFactory->createTxsSyncMsg(); + msg->setType(_type); + msg->setVersion(_version); + msg->setTxsHash(_txsHash); + msg->setTxsData(_txsData); + + // check encode/decode + auto encodedData = msg->encode(); + auto decodedMsg = m_msgFactory->createTxsSyncMsg(ref(*encodedData)); + BOOST_CHECK(msg->type() == decodedMsg->type()); + BOOST_CHECK(msg->version() == decodedMsg->version()); + BOOST_CHECK(msg->txsHash() == decodedMsg->txsHash()); + BOOST_CHECK(msg->txsData().toBytes() == decodedMsg->txsData().toBytes()); + + // compare with the origin data + BOOST_CHECK(_type == decodedMsg->type()); + BOOST_CHECK(_version == decodedMsg->version()); + BOOST_CHECK(_txsHash == decodedMsg->txsHash()); + BOOST_CHECK(_txsData == decodedMsg->txsData().toBytes()); + return msg; + } + +private: + TxsSyncMsgFactory::Ptr m_msgFactory; +}; +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/test/unittests/sync/TxsSyncMsgTest.cpp b/bcos-txpool/test/unittests/sync/TxsSyncMsgTest.cpp new file mode 100644 index 0000000..98d850f --- /dev/null +++ b/bcos-txpool/test/unittests/sync/TxsSyncMsgTest.cpp @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit test for TxsSyncMsg + * @file TxsSyncMsgTest.h + */ +#include "FakeTxsSyncMsg.h" +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::sync; +using namespace bcos::crypto; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(TxsSyncMsgTest, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testTxsSyncMsg) +{ + auto faker = std::make_shared(); + int32_t type = 100; + int32_t version = 1000; + HashList hashList; + auto hashImpl = std::make_shared(); + for (int i = 0; i < 10; i++) + { + hashList.emplace_back(hashImpl->hash(std::to_string(i))); + } + std::string data = "adflwerjw39ewelrew"; + bytes txsData = bytes(data.begin(), data.end()); + faker->fakeTxsMsg(type, version, hashList, txsData); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/test/unittests/txpool/TxPoolFixture.h b/bcos-txpool/test/unittests/txpool/TxPoolFixture.h new file mode 100644 index 0000000..32ab37d --- /dev/null +++ b/bcos-txpool/test/unittests/txpool/TxPoolFixture.h @@ -0,0 +1,294 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief fixture for the txpool + * @file TxPoolFixture.h + * @author: yujiechen + * @date 2021-05-25 + */ +#pragma once +#include +#include + +#include "bcos-txpool/TxPoolConfig.h" +#include "bcos-txpool/TxPoolFactory.h" +#include "bcos-txpool/sync/TransactionSync.h" +#include "bcos-txpool/txpool/storage/MemoryStorage.h" +#include "bcos-txpool/txpool/validator/TxValidator.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::ledger; +using namespace bcos::consensus; +using namespace bcos::front; +using namespace bcos::sync; + +namespace bcos +{ +namespace test +{ +class FakeTransactionSync1 : public TransactionSync +{ +public: + explicit FakeTransactionSync1(TransactionSyncConfig::Ptr _config) : TransactionSync(_config) {} + ~FakeTransactionSync1() override {} + void start() override {} +}; + +class FakeTransactionSync : public FakeTransactionSync1 +{ +public: + explicit FakeTransactionSync(TransactionSyncConfig::Ptr _config) : FakeTransactionSync1(_config) + {} + ~FakeTransactionSync() override {} + + // only broadcast txsStatus + void maintainTransactions() override + { + auto txs = config()->txpoolStorage()->fetchNewTxs(10000); + if (txs->size() == 0) + { + return; + } + auto connectedNodeList = m_config->connectedNodeList(); + auto consensusNodeList = m_config->consensusNodeList(); + + forwardTxsFromP2P(connectedNodeList, consensusNodeList, txs); + } +}; + +class FakeMemoryStorage : public MemoryStorage +{ +public: + FakeMemoryStorage(TxPoolConfig::Ptr _config, size_t _notifyWorkerNum = 2) + : MemoryStorage(_config, _notifyWorkerNum) + {} +}; + +class TxPoolFixture +{ +public: + using Ptr = std::shared_ptr; + TxPoolFixture(NodeIDPtr _nodeId, CryptoSuite::Ptr _cryptoSuite, std::string const& _groupId, + std::string const& _chainId, int64_t _blockLimit, FakeGateWay::Ptr _fakeGateWay) + : m_nodeId(_nodeId), + m_cryptoSuite(_cryptoSuite), + m_groupId(_groupId), + m_chainId(_chainId), + m_blockLimit(_blockLimit), + m_fakeGateWay(_fakeGateWay) + { + auto blockHeaderFactory = + std::make_shared(_cryptoSuite); + auto txFactory = std::make_shared(_cryptoSuite); + auto receiptFactory = + std::make_shared(_cryptoSuite); + m_blockFactory = std::make_shared( + _cryptoSuite, blockHeaderFactory, txFactory, receiptFactory); + m_txResultFactory = std::make_shared(); + m_ledger = std::make_shared(m_blockFactory, 20, 10, 10); + + m_frontService = std::make_shared(_nodeId); + auto txPoolFactory = + std::make_shared(_nodeId, _cryptoSuite, m_txResultFactory, + m_blockFactory, m_frontService, m_ledger, m_groupId, m_chainId, m_blockLimit); + m_txpool = txPoolFactory->createTxPool(); + auto fakeMemoryStorage = std::make_shared(m_txpool->txpoolConfig()); + m_txpool->setTxPoolStorage(fakeMemoryStorage); + + m_sync = std::dynamic_pointer_cast(m_txpool->transactionSync()); + auto syncConfig = m_sync->config(); + m_sync = std::make_shared(syncConfig); + m_txpool->setTransactionSync(m_sync); + m_txpool->start(); + + m_fakeGateWay->addTxPool(_nodeId, m_txpool); + m_frontService->setGateWay(m_fakeGateWay); + } + virtual ~TxPoolFixture() + { + std::cout << "#### TxPoolFixture de-constructor" << std::endl; + if (m_txpool) + { + m_txpool->stop(); + } + if (m_sync) + { + m_sync->stop(); + } + } + + BlockFactory::Ptr blockFactory() { return m_blockFactory; } + TxPool::Ptr txpool() { return m_txpool; } + FakeLedger::Ptr ledger() { return m_ledger; } + NodeIDPtr nodeID() { return m_nodeId; } + std::string const& chainId() { return m_chainId; } + std::string const& groupId() { return m_groupId; } + FakeFrontService::Ptr frontService() { return m_frontService; } + TransactionSync::Ptr sync() { return m_sync; } + void appendSealer(NodeIDPtr _nodeId) + { + auto consensusNode = std::make_shared(_nodeId); + m_ledger->ledgerConfig()->mutableConsensusNodeList().emplace_back(consensusNode); + m_txpool->notifyConsensusNodeList(m_ledger->ledgerConfig()->consensusNodeList(), nullptr); + updateConnectedNodeList(); + } + void init() + { + // init the txpool + m_txpool->init(); + } + + void resetToFakeTransactionSync() + { + auto syncConfig = m_sync->config(); + syncConfig->setForwardPercent(100); + m_sync = std::make_shared(syncConfig); + m_txpool->setTransactionSync(m_sync); + } + + void asyncNotifyBlockResult(BlockNumber _blockNumber, TransactionSubmitResultsPtr _txsResult, + std::function _onNotifyFinished) + { + m_txpool->txpoolStorage()->batchRemove(_blockNumber, *_txsResult); + if (_onNotifyFinished) + { + _onNotifyFinished(nullptr); + } + } + +private: + void updateConnectedNodeList() + { + NodeIDSet nodeIdSet; + for (auto node : m_ledger->ledgerConfig()->consensusNodeList()) + { + nodeIdSet.insert(node->nodeID()); + } + m_txpool->transactionSync()->config()->setConnectedNodeList(nodeIdSet); + m_txpool->transactionSync()->config()->notifyConnectedNodes(nodeIdSet, nullptr); + m_frontService->setNodeIDList(nodeIdSet); + } + +private: + NodeIDPtr m_nodeId; + CryptoSuite::Ptr m_cryptoSuite; + BlockFactory::Ptr m_blockFactory; + TransactionSubmitResultFactory::Ptr m_txResultFactory; + std::string m_groupId; + std::string m_chainId; + int64_t m_blockLimit; + + FakeLedger::Ptr m_ledger; + FakeFrontService::Ptr m_frontService; + FakeGateWay::Ptr m_fakeGateWay; + TxPool::Ptr m_txpool; + TransactionSync::Ptr m_sync; +}; + +inline void checkTxSubmit(TxPoolInterface::Ptr _txpool, TxPoolStorageInterface::Ptr _storage, + Transaction::Ptr _tx, HashType const& _expectedTxHash, uint32_t _expectedStatus, + size_t expectedTxSize, bool _needWaitResult = true, bool _waitNothing = false, + bool _maybeExpired = false) +{ + struct Defer + { + ~Defer() + { + for (auto& it : m_futures) + { + it.get(); + } + } + + void addFuture(std::future future) + { + std::unique_lock lock(m_mutex); + m_futures.emplace_back(std::move(future)); + } + + std::mutex m_mutex; + std::list> m_futures; + }; + + static Defer defer; + + auto promise = std::make_unique>(); + auto future = promise->get_future(); + + bcos::task::wait([](decltype(_txpool) txpool, decltype(_tx) transaction, + decltype(promise) promise, bool _maybeExpired, HashType _expectedTxHash, + uint32_t _expectedStatus) -> bcos::task::Task { + try + { + auto submitResult = co_await txpool->submitTransaction(std::move(transaction)); + if (submitResult->txHash() != _expectedTxHash) + { + // do something + std::cout << "Mismatch!" << std::endl; + } + BOOST_CHECK_EQUAL(submitResult->txHash(), _expectedTxHash); + std::cout << "##### _expectedStatus: " << std::to_string(_expectedStatus) << std::endl; + std::cout << "##### receiptStatus:" << std::to_string(submitResult->status()) + << std::endl; + if (_maybeExpired) + { + BOOST_CHECK( + (submitResult->status() == _expectedStatus) || + (submitResult->status() == (int32_t)TransactionStatus::TransactionPoolTimeout)); + } + } + catch (std::exception& e) + { + std::cout << "Submit transaction exception! " << boost::diagnostic_information(e); + } + + promise->set_value(); + }(_txpool, _tx, std::move(promise), _maybeExpired, _expectedTxHash, _expectedStatus)); + + if (_waitNothing) + { + defer.addFuture(std::move(future)); + return; + } + + future.get(); + + if (!_needWaitResult) + { + while (_storage->size() != expectedTxSize) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + } + BOOST_CHECK(_storage->size() == expectedTxSize); +} +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/test/unittests/txpool/TxPoolTest.cpp b/bcos-txpool/test/unittests/txpool/TxPoolTest.cpp new file mode 100644 index 0000000..40cb51c --- /dev/null +++ b/bcos-txpool/test/unittests/txpool/TxPoolTest.cpp @@ -0,0 +1,653 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit test for the txpool + * @file TxPoolTest.cpp + * @author: yujiechen + * @date 2021-05-26 + */ +#include "bcos-crypto/interfaces/crypto/KeyPairInterface.h" +#include "bcos-crypto/signature/sm2/SM2Crypto.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include "test/unittests/txpool/TxPoolFixture.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::protocol; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(TxPoolTest, TestPromptFixture) +void testAsyncFillBlock(TxPoolFixture::Ptr _faker, TxPoolInterface::Ptr _txpool, + TxPoolStorageInterface::Ptr _txpoolStorage, CryptoSuite::Ptr _cryptoSuite) +{ + // case1: miss all transactions and verify failed + auto block = _faker->txpool()->txpoolConfig()->blockFactory()->createBlock(); + auto blockHeader = + _faker->txpool()->txpoolConfig()->blockFactory()->blockHeaderFactory()->createBlockHeader(); + block->setBlockHeader(blockHeader); + auto blockFactory = _faker->txpool()->txpoolConfig()->blockFactory(); + HashListPtr txsHash = std::make_shared(); + for (size_t i = 0; i < 10; i++) + { + auto txHash = _cryptoSuite->hashImpl()->hash(std::to_string(i)); + // auto txMetaData = transactionMetaDataFactory.createTransactionMetaData(txHash, + // txHash.abridged()); + auto txMetaData = _faker->blockFactory()->createTransactionMetaData(); + txMetaData->setHash(txHash); + txMetaData->setTo(txHash.abridged()); + + txsHash->emplace_back(txHash); + block->appendTransactionMetaData(txMetaData); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + bool finish = false; + _txpool->asyncFillBlock(txsHash, [&](Error::Ptr _error, TransactionsPtr) { + BOOST_CHECK(_error->errorCode() == CommonError::TransactionsMissing); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // verify block with invalid txsHash + auto blockData = std::make_shared(); + block->encode(*blockData); + finish = false; + _txpool->asyncVerifyBlock( + _faker->nodeID(), ref(*blockData), [&](Error::Ptr _error, bool _result) { + BOOST_CHECK(_error->errorCode() == CommonError::TransactionsMissing); + BOOST_CHECK(_result == false); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // case2: hit all the transactions and verify success + auto txs = _txpoolStorage->fetchNewTxs(10000); + block = _faker->txpool()->txpoolConfig()->blockFactory()->createBlock(); + blockHeader = + _faker->txpool()->txpoolConfig()->blockFactory()->blockHeaderFactory()->createBlockHeader(); + block->setBlockHeader(blockHeader); + BOOST_CHECK(txs->size() > 0); + txsHash->clear(); + for (auto tx : *txs) + { + txsHash->emplace_back(tx->hash()); + // auto txMetaData = + // blockFactory->createTransactionMetaData(tx->hash(), tx->hash().abridged()); + auto txMetaData = _faker->blockFactory()->createTransactionMetaData(); + txMetaData->setHash(tx->hash()); + txMetaData->setTo(tx->hash().abridged()); + block->appendTransactionMetaData(txMetaData); + } + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + + finish = false; + _txpool->asyncFillBlock(txsHash, [&](Error::Ptr _error, TransactionsPtr _fetchedTxs) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(txsHash->size() == _fetchedTxs->size()); + size_t i = 0; + for (auto tx : *_fetchedTxs) + { + BOOST_CHECK((*txsHash)[i++] == tx->hash()); + } + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // verify the blocks + blockData = std::make_shared(); + block->encode(*blockData); + finish = false; + _txpool->asyncVerifyBlock( + _faker->nodeID(), ref(*blockData), [&](Error::Ptr _error, bool _result) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_result == true); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // case3: with some txs hitted + auto txHash = _cryptoSuite->hashImpl()->hash("test"); + txsHash->emplace_back(txHash); + // auto txMetaData = blockFactory->createTransactionMetaData(txHash, txHash.abridged()); + auto txMetaData = _faker->blockFactory()->createTransactionMetaData(); + txMetaData->setHash(txHash); + txMetaData->setTo(txHash.abridged()); + block->appendTransactionMetaData(txMetaData); + + finish = false; + _txpool->asyncFillBlock(txsHash, [&](Error::Ptr _error, TransactionsPtr) { + BOOST_CHECK(_error->errorCode() == CommonError::TransactionsMissing); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + finish = false; + blockData = std::make_shared(); + block->encode(*blockData); + std::cout << "#### test case3" << std::endl; + _txpool->asyncVerifyBlock( + _faker->nodeID(), ref(*blockData), [&](Error::Ptr _error, bool _result) { + BOOST_CHECK(_error->errorCode() == CommonError::TransactionsMissing); + BOOST_CHECK(_result == false); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } +} + +void testAsyncSealTxs(TxPoolFixture::Ptr _faker, TxPoolInterface::Ptr _txpool, + TxPoolStorageInterface::Ptr _txpoolStorage, int64_t _blockLimit, CryptoSuite::Ptr _cryptoSuite) +{ + // asyncSealTxs + auto originTxsSize = _txpoolStorage->size(); + size_t txsLimit = 10; + HashListPtr sealedTxs = std::make_shared(); + bool finish = false; + _txpool->asyncSealTxs( + txsLimit, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == txsLimit); + for (size_t i = 0; i < _txsMetaDataList->transactionsMetaDataSize(); i++) + { + sealedTxs->emplace_back(_txsMetaDataList->transactionHash(i)); + } + BOOST_CHECK(_txpoolStorage->size() == originTxsSize); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // seal again to fetch all unsealed txs + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == (originTxsSize - txsLimit)); + BOOST_CHECK(_txpoolStorage->size() == originTxsSize); + std::set txsSet(sealedTxs->begin(), sealedTxs->end()); + for (size_t i = 0; i < _txsMetaDataList->transactionsMetaDataSize(); i++) + { + auto const& hash = _txsMetaDataList->transactionHash(i); + BOOST_CHECK(!txsSet.count(hash)); + } + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + finish = false; + _txpool->asyncMarkTxs(sealedTxs, false, -1, HashType(), [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // seal again + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == sealedTxs->size()); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == sealedTxs->size()); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // mark txs to given proposal as false, expect: mark failed + finish = false; + auto blockHash = _cryptoSuite->hashImpl()->hash("blockHash"); + auto blockNumber = 10; + _txpool->asyncMarkTxs(sealedTxs, false, blockNumber, blockHash, [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // re-seal + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == 0); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == 0); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // mark txs to as false, expect mark success + finish = false; + _txpool->asyncMarkTxs(sealedTxs, false, -1, HashType(), [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // re-seal success + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == sealedTxs->size()); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == sealedTxs->size()); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // mark txs to given proposal as true + finish = false; + _txpool->asyncMarkTxs(sealedTxs, true, blockNumber, blockHash, [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // reseal failed + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == 0); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == 0); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // mark txs to given proposal as false, expect success + finish = false; + _txpool->asyncMarkTxs(sealedTxs, false, blockNumber, blockHash, [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // re-seal success + finish = false; + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == sealedTxs->size()); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == sealedTxs->size()); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + + // test asyncNotifyBlockResult + blockNumber = _faker->ledger()->blockNumber() + _blockLimit; + auto txsResult = std::make_shared(); + for (auto txHash : *sealedTxs) + { + auto txResult = std::make_shared(); + txResult->setTxHash(txHash); + txResult->setStatus((uint32_t)TransactionStatus::None); + txsResult->emplace_back(txResult); + } + auto missedTxs = std::make_shared(); + auto notifiedTxs = _txpoolStorage->fetchTxs(*missedTxs, *sealedTxs); + BOOST_CHECK(missedTxs->size() == 0); + BOOST_CHECK(notifiedTxs->size() == sealedTxs->size()); + + finish = false; + _faker->asyncNotifyBlockResult(blockNumber, txsResult, [&](Error::Ptr _error) { + BOOST_CHECK(_error == nullptr); + finish = true; + }); + auto startT = utcTime(); + while ((!finish || (_txpoolStorage->size() != originTxsSize - sealedTxs->size())) && + (utcTime() - startT <= 10 * 1000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // check the txpool size + BOOST_CHECK(_txpoolStorage->size() == originTxsSize - sealedTxs->size()); + // check the txpoolNonce + auto txPoolNonceChecker = _faker->txpool()->txpoolConfig()->txPoolNonceChecker(); + auto validator = + std::dynamic_pointer_cast(_faker->txpool()->txpoolConfig()->txValidator()); + auto ledgerNonceChecker = validator->ledgerNonceChecker(); + for (auto tx : *notifiedTxs) + { + BOOST_CHECK(txPoolNonceChecker->checkNonce(tx) == TransactionStatus::None); + BOOST_CHECK(ledgerNonceChecker->checkNonce(tx) == TransactionStatus::NonceCheckFail); + } + // check the nonce of ledger->blockNumber() hash been removed from ledgerNonceChecker + auto const& blockData = _faker->ledger()->ledgerData(); + auto const& nonceList = blockData[_faker->ledger()->blockNumber()]->nonces(); + for (auto const& nonce : *nonceList) + { + BOOST_CHECK(ledgerNonceChecker->exists(nonce) == false); + } + + // case: the other left txs expired for invalid blockLimit + finish = false; + std::cout << "######### asyncSealTxs with invalid blocklimit" << std::endl; + std::cout << "##### origin txsSize:" << _txpoolStorage->size() << std::endl; + + _txpool->asyncResetTxPool(nullptr); + _txpool->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _txsMetaDataList, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_txsMetaDataList->transactionsMetaDataSize() == 0); + BOOST_CHECK(_txsMetaDataList->transactionsHashSize() == 0); + finish = true; + }); + while (!finish || (_txpoolStorage->size() > 0)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + BOOST_CHECK(_txpoolStorage->size() == 0); +} + +void txPoolInitAndSubmitTransactionTest(bool _sm, CryptoSuite::Ptr _cryptoSuite) +{ + auto signatureImpl = _cryptoSuite->signatureImpl(); + auto hashImpl = _cryptoSuite->hashImpl(); + auto keyPair = signatureImpl->generateKeyPair(); + std::string groupId = "group_test_for_txpool"; + std::string chainId = "chain_test_for_txpool"; + int64_t blockLimit = 10; + auto fakeGateWay = std::make_shared(); + auto faker = std::make_shared( + keyPair->publicKey(), _cryptoSuite, groupId, chainId, blockLimit, fakeGateWay); + faker->init(); + + // check the txpool config + auto txpoolConfig = faker->txpool()->txpoolConfig(); + BOOST_CHECK(txpoolConfig->txPoolNonceChecker()); + BOOST_CHECK(txpoolConfig->txValidator()); + BOOST_CHECK(txpoolConfig->blockFactory()); + BOOST_CHECK(txpoolConfig->txFactory()); + BOOST_CHECK(txpoolConfig->ledger()); + + auto txpool = faker->txpool(); + auto txpoolStorage = txpool->txpoolStorage(); + // case1: the node is not in the consensus/observerList + auto tx = fakeTransaction(_cryptoSuite, utcTime()); + + checkTxSubmit(txpool, txpoolStorage, tx, HashType(), + (uint32_t)TransactionStatus::RequestNotBelongToTheGroup, 0); + + // case2: transaction with invalid blockLimit + faker->appendSealer(faker->nodeID()); + auto ledger = faker->ledger(); + tx = fakeTransaction(_cryptoSuite, utcTime() + 11000, ledger->blockNumber() + blockLimit + 1, + faker->chainId(), faker->groupId()); + checkTxSubmit( + txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::BlockLimitCheckFail, 0); + + // case3: transaction with invalid nonce(conflict with the ledger nonce) + auto const& blockData = ledger->ledgerData(); + auto duplicatedNonce = + blockData[ledger->blockNumber() - blockLimit + 1]->transaction(0)->nonce(); + tx = fakeTransaction(_cryptoSuite, duplicatedNonce, ledger->blockNumber() + blockLimit - 4, + faker->chainId(), faker->groupId()); + checkTxSubmit( + txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::NonceCheckFail, 0); + + // case4: invalid groupId + tx = fakeTransaction(_cryptoSuite, utcTime(), ledger->blockNumber() + blockLimit - 4, + faker->chainId(), "invalidGroup"); + checkTxSubmit( + txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::InvalidGroupId, 0); + + // case5: invalid chainId + tx = fakeTransaction(_cryptoSuite, utcTime(), ledger->blockNumber() + blockLimit - 4, + "invalidChainId", faker->groupId()); + checkTxSubmit( + txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::InvalidChainId, 0); + + // case6: invalid signature + tx = fakeTransaction(_cryptoSuite, utcTime() + 100000, ledger->blockNumber() + blockLimit - 4, + faker->chainId(), faker->groupId()); + auto pbTx = std::dynamic_pointer_cast(tx); + bcos::crypto::KeyPairInterface::Ptr invalidKeyPair = signatureImpl->generateKeyPair(); + auto invalidHash = hashImpl->hash(std::string("test")); + auto signatureData = signatureImpl->sign(*invalidKeyPair, invalidHash, true); + pbTx->setSignatureData(*signatureData); + pbTx->forceSender(bcos::bytes()); + size_t importedTxNum = 0; + if (!_sm) + { + importedTxNum++; + checkTxSubmit(txpool, txpoolStorage, pbTx, pbTx->hash(), (uint32_t)TransactionStatus::None, + importedTxNum, false, true, true); + } + else + { + checkTxSubmit(txpool, txpoolStorage, pbTx, pbTx->hash(), + (uint32_t)TransactionStatus::InvalidSignature, importedTxNum); + } + + // case7: submit success + importedTxNum++; + tx = fakeTransaction(_cryptoSuite, utcTime() + 2000000, ledger->blockNumber() + blockLimit - 4, + faker->chainId(), faker->groupId()); + checkTxSubmit(txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::None, + importedTxNum, false, true, true); + // case8: submit duplicated tx + checkTxSubmit(txpool, txpoolStorage, tx, tx->hash(), + (uint32_t)TransactionStatus::AlreadyInTxPool, importedTxNum); + + // batch import transactions with multiple thread + auto threadPool = std::make_shared("txpoolSubmitter", 8); + + Transactions transactions; + for (auto i = 0; i < 40; i++) + { + auto tmpTx = fakeTransaction(_cryptoSuite, utcTime() + 1000 + i, + ledger->blockNumber() + blockLimit - 4, faker->chainId(), faker->groupId()); + transactions.push_back(tmpTx); + } + + for (size_t i = 0; i < transactions.size(); i++) + { + auto tmpTx = transactions[i]; + checkTxSubmit(txpool, txpoolStorage, tmpTx, tmpTx->hash(), + (uint32_t)TransactionStatus::None, 0, false, true, true); + } + importedTxNum += transactions.size(); + auto startT = utcTime(); + while ((txpoolStorage->size() < importedTxNum) && (utcTime() - startT <= 10000)) + { + std::cout << "#### txpoolStorage->size:" << txpoolStorage->size() << std::endl; + std::cout << "#### importedTxNum:" << importedTxNum << std::endl; + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + std::cout << "#### txpoolStorage size:" << txpoolStorage->size() << std::endl; + std::cout << "#### importedTxNum:" << importedTxNum << std::endl; + + // check txs submitted to the ledger + + // TxPool doesn't commit any data before block commited + // auto txsHash2Data = ledger->txsHashToData(); + // for (size_t i = 0; i < transactions.size(); i++) + // { + // auto startT = utcTime(); + // while (!txsHash2Data.count(transactions[i]->hash()) && (utcTime() - startT <= 5000)) + // { + // std::this_thread::sleep_for(std::chrono::milliseconds(2)); + // txsHash2Data = ledger->txsHashToData(); + // } + // std::cout << "### txsHash2Data size: " << txsHash2Data.size() << ", i: " << i + // << ", transactions size:" << transactions.size() << std::endl; + // } + + // case9: the txpool is full + txpoolConfig->setPoolLimit(importedTxNum); + checkTxSubmit(txpool, txpoolStorage, tx, tx->hash(), (uint32_t)TransactionStatus::TxPoolIsFull, + importedTxNum); + + // case10: malformed transaction + bcos::bytes encodedData; + tx->encode(encodedData); + auto txData = std::make_shared(encodedData.begin(), encodedData.end()); + // fake invalid txData + for (size_t i = 0; i < txData->size(); i++) + { + (*txData)[i] += 100; + } + bool verifyFinish = false; + try + { + auto _result = ~txpool->submitTransaction(tx); + } + catch (bcos::Error& e) + { + // TODO: Put TransactionStatus::Malform into bcos::Error + // BOOST_CHECK(e.errorCode() == _result->status()); + std::cout << "#### error info:" << e.errorMessage() << std::endl; + // BOOST_CHECK(_result->txHash() == HashType()); + // BOOST_CHECK(_result->status() == (uint32_t)(TransactionStatus::Malform)); + } + + verifyFinish = true; + + while (!verifyFinish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + std::cout << "#### testAsyncFillBlock" << std::endl; + testAsyncFillBlock(faker, txpool, txpoolStorage, _cryptoSuite); + std::cout << "#### testAsyncSealTxs" << std::endl; + testAsyncSealTxs(faker, txpool, txpoolStorage, blockLimit, _cryptoSuite); + // clear all the txs before exit + txpool->txpoolStorage()->clear(); + std::cout << "#### txPoolInitAndSubmitTransactionTest finish" << std::endl; +} + +BOOST_AUTO_TEST_CASE(testTxPoolInitAndSubmitTransaction) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + txPoolInitAndSubmitTransactionTest(false, cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(testSMTxPoolInitAndSubmitTransaction) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + txPoolInitAndSubmitTransactionTest(true, cryptoSuite); +} + +BOOST_AUTO_TEST_CASE(fillWithSubmit) +{ + // auto hashImpl = std::make_shared(); + // auto signatureImpl = std::make_shared(); + // auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + + // auto keyPair = signatureImpl->generateKeyPair(); + // std::string groupId = "group_test_for_txpool"; + // std::string chainId = "chain_test_for_txpool"; + // int64_t blockLimit = 10; + // auto fakeGateWay = std::make_shared(); + // auto faker = std::make_shared( + // keyPair->publicKey(), cryptoSuite, groupId, chainId, blockLimit, fakeGateWay); + // faker->init(); + + // // check the txpool config + // auto txpoolConfig = faker->txpool()->txpoolConfig(); + // BOOST_CHECK(txpoolConfig->txPoolNonceChecker()); + // BOOST_CHECK(txpoolConfig->txValidator()); + // BOOST_CHECK(txpoolConfig->blockFactory()); + // BOOST_CHECK(txpoolConfig->txFactory()); + // BOOST_CHECK(txpoolConfig->ledger()); + + // auto txpool = faker->txpool(); + // auto txpoolStorage = txpool->txpoolStorage(); + + // // case7: submit success + // auto tx = + // fakeTransaction(cryptoSuite, utcTime() + 2000000, 100, chainId, groupId); + + // tx->encode(); + // auto encodedPtr = std::make_shared(tx->takeEncoded()); + + // auto hashList = std::make_shared(); + // hashList->push_back(tx->hash()); + + // std::promise fillPromise; + // txpool->asyncFillBlock(hashList, + // [originTx = tx, &fillPromise](Error::Ptr error, bcos::protocol::TransactionsPtr tx) { + // BOOST_CHECK(!error); + // BOOST_CHECK(tx); + // BOOST_CHECK_EQUAL(tx->size(), 1); + // BOOST_CHECK_EQUAL((*tx)[0].get(), originTx.get()); + // fillPromise.set_value(); + // }); + // fillPromise.get_future().get(); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos \ No newline at end of file diff --git a/bcos-txpool/test/unittests/txpool/TxsSyncTest.cpp b/bcos-txpool/test/unittests/txpool/TxsSyncTest.cpp new file mode 100644 index 0000000..1b5f414 --- /dev/null +++ b/bcos-txpool/test/unittests/txpool/TxsSyncTest.cpp @@ -0,0 +1,296 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit test for txs-fetching related logic of txpool + * @file TxsSyncTest.cpp.cpp + * @author: yujiechen + * @date 2021-05-26 + */ +#include "test/unittests/txpool/TxPoolFixture.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::txpool; +using namespace bcos::sync; +using namespace bcos::crypto; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(txsSyncTest, TestPromptFixture) + +void importTransactions( + size_t _txsNum, CryptoSuite::Ptr _cryptoSuite, const TxPoolFixture::Ptr& _faker) +{ + auto txpool = _faker->txpool(); + auto ledger = _faker->ledger(); + Transactions transactions; + for (size_t i = 0; i < _txsNum; i++) + { + auto transaction = fakeTransaction(_cryptoSuite, utcTime() + 1000 + i, + ledger->blockNumber() + 1, _faker->chainId(), _faker->groupId()); + transactions.push_back(transaction); + task::wait(txpool->submitTransaction(transaction)); + } + auto startT = utcTime(); + while (txpool->txpoolStorage()->size() < _txsNum && (utcTime() - startT <= 10000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } +} + +void importTransactionsNew( + size_t _txsNum, CryptoSuite::Ptr _cryptoSuite, const TxPoolFixture::Ptr& _faker) +{ + auto txpool = _faker->txpool(); + auto ledger = _faker->ledger(); + Transactions transactions; + for (size_t i = 0; i < _txsNum; i++) + { + auto transaction = fakeTransaction(_cryptoSuite, utcTime() + 1000 + i, + ledger->blockNumber() + 1, _faker->chainId(), _faker->groupId()); + transactions.push_back(transaction); + } + + // Test parallel submit + tbb::parallel_for( + tbb::blocked_range(0, transactions.size()), [&txpool, &transactions](auto& range) { + for (auto i = range.begin(); i < range.end(); ++i) + { + auto& transaction = transactions[i]; + task::wait(txpool->submitTransaction(transaction), [](auto&& result) { + using ResultType = std::decay_t; + if constexpr (std::is_same_v) + { + std::rethrow_exception(result); + } + else + { + BOOST_CHECK_EQUAL(result->status(), 0); + } + + TXPOOL_LOG(DEBUG) << "Submit transaction successed"; + }); + } + }); + + auto startT = utcTime(); + while (txpool->txpoolStorage()->size() < _txsNum && (utcTime() - startT <= 10000)) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } +} + +void testTransactionSync(bool _onlyTxsStatus = false) +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto cryptoSuite = std::make_shared(hashImpl, signatureImpl, nullptr); + auto keyPair = cryptoSuite->signatureImpl()->generateKeyPair(); + std::string groupId = "test-group"; + std::string chainId = "test-chain"; + int64_t blockLimit = 15; + auto fakeGateWay = std::make_shared(); + auto faker = std::make_shared( + keyPair->publicKey(), cryptoSuite, groupId, chainId, blockLimit, fakeGateWay); + if (_onlyTxsStatus) + { + faker->resetToFakeTransactionSync(); + } + faker->appendSealer(keyPair->publicKey()); + // init the config + faker->init(); + auto txpool = faker->txpool(); + auto ledger = faker->ledger(); + // append sessions + size_t sessionSize = 8; + std::vector txpoolPeerList; + std::vector sessionNodeIDs; + sessionNodeIDs.emplace_back(keyPair->publicKey()); + for (size_t i = 0; i < sessionSize; i++) + { + auto nodeId = signatureImpl->generateKeyPair()->publicKey(); + auto sessionFaker = std::make_shared( + nodeId, cryptoSuite, groupId, chainId, blockLimit, fakeGateWay); + sessionFaker->init(); + if (_onlyTxsStatus) + { + sessionFaker->resetToFakeTransactionSync(); + } + sessionNodeIDs.emplace_back(nodeId); + faker->appendSealer(nodeId); + txpoolPeerList.push_back(sessionFaker); + } + for (auto& sessionFaker : txpoolPeerList) + { + for (auto const& nodeID : sessionNodeIDs) + { + // make sure the session in the group + sessionFaker->appendSealer(nodeID); + } + } + size_t txsNum = 10; + importTransactions(txsNum, cryptoSuite, faker); + + // check maintain transactions + faker->sync()->maintainTransactions(); + if (_onlyTxsStatus) + { + for (auto txpoolPeer : txpoolPeerList) + { + // all the peers has received the txsStatus, and fetch txs from other peers + BOOST_CHECK(faker->frontService()->getAsyncSendSizeByNodeID(txpoolPeer->nodeID()) >= 1); + auto startT = utcTime(); + while (txpoolPeer->txpool()->txpoolStorage()->size() < txsNum && + (utcTime() - startT <= 10000)) + { + // maintain the downloading txs + txpoolPeer->sync()->maintainDownloadingTransactions(); + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + std::cout << "### txpoolSize: " << txpoolPeer->txpool()->txpoolStorage()->size() + << ", txsNum:" << txsNum << ", peer: " << txpoolPeer->nodeID()->shortHex() + << std::endl; + BOOST_CHECK(txpoolPeer->txpool()->txpoolStorage()->size() == txsNum); + } + // maintain transactions again + auto originSendSize = faker->frontService()->totalSendMsgSize(); + faker->sync()->maintainTransactions(); + BOOST_CHECK(faker->frontService()->totalSendMsgSize() == originSendSize); + return; + } + // check the transactions has been broadcasted to all the node + // maintainDownloadingTransactions and check the size + for (auto txpoolPeer : txpoolPeerList) + { + BOOST_CHECK(faker->frontService()->getAsyncSendSizeByNodeID(txpoolPeer->nodeID()) >= 1); + txpoolPeer->sync()->maintainDownloadingTransactions(); + auto startT = utcTime(); + while ( + txpoolPeer->txpool()->txpoolStorage()->size() < txsNum && (utcTime() - startT <= 10000)) + { + txpoolPeer->sync()->maintainDownloadingTransactions(); + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + BOOST_CHECK(txpoolPeer->txpool()->txpoolStorage()->size() == txsNum); + } + // +1 for include the node self + auto forwardSize = + ((txpoolPeerList.size() + 1) * faker->sync()->config()->forwardPercent() + 99) / 100; + + // with requestMissedTxs request + auto maxSendSize = txpoolPeerList.size() + forwardSize + forwardSize; + BOOST_CHECK(faker->frontService()->totalSendMsgSize() <= maxSendSize); + auto originSendSize = faker->frontService()->totalSendMsgSize(); + faker->sync()->maintainTransactions(); + std::cout << "##### totalSendMsgSize: " << faker->frontService()->totalSendMsgSize() + << std::endl; + std::cout << "#### txpoolPeerList size:" << txpoolPeerList.size() << std::endl; + std::cout << "##### forwardSize:" << forwardSize << std::endl; + BOOST_CHECK(faker->frontService()->totalSendMsgSize() == originSendSize); + + // test forward txs status + auto syncPeer = txpoolPeerList[0]; + // update connected node list + originSendSize = syncPeer->frontService()->totalSendMsgSize(); + std::cout << "#### before maintainTransactions totalSendMsgSize: " << originSendSize + << std::endl; + for (auto txpoolPeer : txpoolPeerList) + { + syncPeer->appendSealer(txpoolPeer->nodeID()); + } + std::cout << "#### after maintainTransactions totalSendMsgSize: " + << syncPeer->frontService()->totalSendMsgSize() << std::endl; + syncPeer->sync()->maintainTransactions(); + // BOOST_CHECK(syncPeer->frontService()->totalSendMsgSize() == originSendSize + forwardSize); + + syncPeer->sync()->maintainTransactions(); + // BOOST_CHECK(syncPeer->frontService()->totalSendMsgSize() == originSendSize + forwardSize); + + // import new transaction to the syncPeer, but not broadcast the imported transaction + std::cout << "###### test fetch and verify block" << std::endl; + auto newTxsSize = 1000; + importTransactionsNew(newTxsSize, cryptoSuite, syncPeer); // Use new method to import + // transaction + // the syncPeer sealTxs + HashListPtr txsHash = std::make_shared(); + bool finish = false; + syncPeer->txpool()->asyncSealTxs( + 100000, nullptr, [&](Error::Ptr _error, Block::Ptr _fetchedTxs, Block::Ptr) { + BOOST_CHECK(_error == nullptr); + // BOOST_CHECK(_fetchedTxs->size() == syncPeer->txpool()->txpoolStorage()->size()); + for (size_t i = 0; i < _fetchedTxs->transactionsMetaDataSize(); i++) + { + txsHash->emplace_back(_fetchedTxs->transactionHash(i)); + } + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } + // assume the faker verify the syncPeer generated proposal + auto blockFactory = faker->txpool()->txpoolConfig()->blockFactory(); + auto block = blockFactory->createBlock(); + for (auto const& txHash : *txsHash) + { + // auto txMetaData = blockFactory->createTransactionMetaData(txHash, txHash.abridged()); + auto txMetaData = blockFactory->createTransactionMetaData(); + txMetaData->setHash(txHash); + txMetaData->setTo(txHash.abridged()); + + block->appendTransactionMetaData(txMetaData); + } + auto encodedData = std::make_shared(); + block->blockHeader()->calculateHash(*blockFactory->cryptoSuite()->hashImpl()); + block->encode(*encodedData); + finish = false; + faker->txpool()->asyncVerifyBlock( + syncPeer->nodeID(), ref(*encodedData), [&](Error::Ptr _error, bool _result) { + BOOST_CHECK(_error == nullptr); + BOOST_CHECK(_result == true); + finish = true; + }); + while (!finish) + { + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + } +} + +BOOST_AUTO_TEST_CASE(testMatainTransactions) +{ + testTransactionSync(false); +} + +BOOST_AUTO_TEST_CASE(testOnPeerTxsStatus) +{ + testTransactionSync(true); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/CMakeLists.txt b/bcos-utilities/CMakeLists.txt new file mode 100644 index 0000000..b6193e2 --- /dev/null +++ b/bcos-utilities/CMakeLists.txt @@ -0,0 +1,21 @@ + +project(bcos-utilities VERSION ${VERSION}) +aux_source_directory(bcos-utilities SRCS) + +find_package(Boost REQUIRED COMPONENTS log filesystem chrono thread serialization) +find_package(zstd CONFIG REQUIRED) + +add_library(bcos-utilities ${SRCS}) +target_include_directories(bcos-utilities PUBLIC + $ + $) +target_link_libraries(bcos-utilities PUBLIC Boost::log Boost::filesystem Boost::chrono Boost::thread Boost::serialization zstd::libzstd_static) + +if(TESTS) + enable_testing() + add_subdirectory(test) +endif() + +include(GNUInstallDirs) +install(TARGETS bcos-utilities EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-utilities" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/Base64.cpp b/bcos-utilities/bcos-utilities/Base64.cpp new file mode 100644 index 0000000..4029000 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Base64.cpp @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Base64.cpp + * @author: xingqiangbai + */ + +#include "Base64.h" +#include "Ranges.h" +#include +#include +#include +#include +#include + +using namespace boost::archive::iterators; + +std::string bcos::base64Encode(const byte* _begin, size_t _dataSize) +{ + using It = base64_from_binary>; + auto tmp = std::string(It(_begin), It(_begin + _dataSize)); + return tmp.append((3 - _dataSize % 3) % 3, '='); +} + +std::string bcos::base64Encode(std::string const& _data) +{ + return base64Encode((const byte*)_data.data(), _data.size()); +} + +std::string bcos::base64Encode(bytesConstRef _data) +{ + return base64Encode(_data.data(), _data.size()); +} + +std::string bcos::base64Decode(std::string const& _data) +{ + size_t suffix = 0; + for (size_t i = _data.size() - 1; i >= _data.size() - 3; --i) + { + if (_data[i] == '=') + { + ++suffix; + } + else + { + break; + } + } + using It = transform_width, 8, 6>; + auto ret = std::string(It(_data.begin()), It(RANGES::end(_data))); + ret.resize(ret.size() - suffix); + return ret; +} + +std::shared_ptr bcos::base64DecodeBytes(std::string const& _data) +{ + auto s = base64Decode(_data); + return std::make_shared(s.begin(), s.end()); +} diff --git a/bcos-utilities/bcos-utilities/Base64.h b/bcos-utilities/bcos-utilities/Base64.h new file mode 100644 index 0000000..25d3f9a --- /dev/null +++ b/bcos-utilities/bcos-utilities/Base64.h @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Base64.h + * @author: xingqiangbai + */ +#pragma once +#include "Common.h" + +namespace bcos +{ +std::string base64Encode(const byte* _begin, size_t _dataSize); + +std::string base64Encode(std::string const& _data); +std::string base64Encode(bytesConstRef _data); + +std::shared_ptr base64DecodeBytes(std::string const& _data); +std::string base64Decode(std::string const& _data); +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/BoostLog.cpp b/bcos-utilities/bcos-utilities/BoostLog.cpp new file mode 100644 index 0000000..ffe54f1 --- /dev/null +++ b/bcos-utilities/bcos-utilities/BoostLog.cpp @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: define Log + * + * @file: Log.cpp + * @author: yujiechen + * @date 2021-02-24 + */ +#include "Log.h" +#include + +namespace bcos +{ +std::string const FileLogger = "FileLogger"; +boost::log::sources::severity_channel_logger_mt + FileLoggerHandler(boost::log::keywords::channel = FileLogger); + +std::string const StatFileLogger = "StatFileLogger"; +boost::log::sources::severity_channel_logger_mt + StatFileLoggerHandler(boost::log::keywords::channel = StatFileLogger); + +LogLevel c_fileLogLevel = LogLevel::TRACE; +LogLevel c_statLogLevel = LogLevel::INFO; + +void setFileLogLevel(LogLevel const& _level) +{ + c_fileLogLevel = _level; +} + +void setStatLogLevel(LogLevel const& _level) +{ + c_statLogLevel = _level; +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/BoostLog.h b/bcos-utilities/bcos-utilities/BoostLog.h new file mode 100644 index 0000000..ebd2bc0 --- /dev/null +++ b/bcos-utilities/bcos-utilities/BoostLog.h @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: define Log + * + * @file: Log.h + * @author: yujiechen + * @date 2021-02-24 + */ +#pragma once + +#include +#include +#include +#include + +// BCOS log format +#ifndef LOG_BADGE +#define LOG_BADGE(_NAME) "[" << (_NAME) << "]" +#endif + +#ifndef LOG_TYPE +#define LOG_TYPE(_TYPE) (_TYPE) << "|" +#endif + +#ifndef LOG_DESC +#define LOG_DESC(_DESCRIPTION) (_DESCRIPTION) +#endif + +#ifndef LOG_KV +#define LOG_KV(_K, _V) "," << (_K) << "=" << (_V) +#endif + +#ifdef ERROR +#undef ERROR +#endif + +namespace bcos +{ +extern std::string const FileLogger; +/// the file logger +extern boost::log::sources::severity_channel_logger_mt + FileLoggerHandler; + +// the statFileLogger +extern std::string const StatFileLogger; +extern boost::log::sources::severity_channel_logger_mt + StatFileLoggerHandler; + +enum LogLevel +{ + FATAL = boost::log::trivial::fatal, + ERROR = boost::log::trivial::error, + WARNING = boost::log::trivial::warning, + INFO = boost::log::trivial::info, + DEBUG = boost::log::trivial::debug, + TRACE = boost::log::trivial::trace +}; + +extern LogLevel c_fileLogLevel; +extern LogLevel c_statLogLevel; + +void setFileLogLevel(LogLevel const& _level); +void setStatLogLevel(LogLevel const& _level); + +#define BCOS_LOG(level) \ + if (bcos::LogLevel::level >= bcos::c_fileLogLevel) \ + BOOST_LOG_SEV( \ + bcos::FileLoggerHandler, (boost::log::trivial::severity_level)(bcos::LogLevel::level)) +// for block number log +#define BLOCK_NUMBER(NUMBER) "[blk-" << (NUMBER) << "]" +} // namespace bcos \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/BoostLogInitializer.cpp b/bcos-utilities/bcos-utilities/BoostLogInitializer.cpp new file mode 100644 index 0000000..2c4276a --- /dev/null +++ b/bcos-utilities/bcos-utilities/BoostLogInitializer.cpp @@ -0,0 +1,315 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: setting log + * + * @file: BoostLogInitializer.cpp + * @author: yujiechen + */ +#include "BoostLogInitializer.h" +#include "bcos-framework/bcos-framework/Common.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include + +using namespace bcos; + +namespace logging = boost::log; +namespace expr = boost::log::expressions; + +// register SIGUSE2 for dynamic reset log level +struct BoostLogLevelResetHandler +{ + static void handle(int sig) + { + BCOS_LOG(INFO) << LOG_BADGE("BoostLogInitializer::Signal") + << LOG_DESC("receive SIGUSE2 sig"); + + try + { + boost::property_tree::ptree pt; + boost::property_tree::read_ini(configFile, pt); + + auto logLevelStr = pt.get("log.level", "info"); + /// set log level + unsigned logLevel = bcos::BoostLogInitializer::getLogLevel(logLevelStr); + + setFileLogLevel((LogLevel)logLevel); + + BCOS_LOG(INFO) << LOG_BADGE("BoostLogInitializer::Signal") << LOG_DESC("set log level") + << LOG_KV("logLevelStr", logLevelStr) << LOG_KV("logLevel", logLevel); + } + catch (...) + {} + } + + static std::string configFile; +}; + +std::string BoostLogLevelResetHandler::configFile; + +/// handler to solve log rotate +bool BoostLogInitializer::canRotate(size_t const& _index) +{ + const boost::posix_time::ptime now = boost::posix_time::second_clock::local_time(); + int hour = (int)now.time_of_day().hours(); + if (hour != m_currentHourVec[_index]) + { + m_currentHourVec[_index] = hour; + return true; + } + return false; +} + +// init statLog +void BoostLogInitializer::initStatLog(boost::property_tree::ptree const& _pt, + std::string const& _logger, std::string const& _logPrefix) +{ + m_running.store(true); + // not set the log path before init + if (m_logPath.size() == 0) + { + m_logPath = _pt.get("log.log_path", "log"); + } + /// set log level + unsigned logLevel = getLogLevel(_pt.get("log.level", "info")); + auto sink = initLogSink(_pt, logLevel, m_logPath, _logPrefix, _logger); + + setStatLogLevel((LogLevel)logLevel); + + /// set file format + /// log-level|timestamp | message + sink->set_formatter(expr::stream + << boost::log::expressions::attr( + "Severity") + << "|" + << boost::log::expressions::format_date_time( + "TimeStamp", "%Y-%m-%d %H:%M:%S.%f") + << "|" << boost::log::expressions::smessage); +} + +boost::shared_ptr +BoostLogInitializer::initConsoleLogSink( + boost::property_tree::ptree const& _pt, unsigned const& _logLevel, std::string const& channel) +{ + boost::log::add_common_attributes(); + boost::shared_ptr consoleSink(new console_sink_t()); + consoleSink->locked_backend()->add_stream( + boost::shared_ptr(&std::cout, boost::null_deleter())); + + bool need_flush = _pt.get("log.flush", true); + consoleSink->locked_backend()->auto_flush(need_flush); + consoleSink->set_filter(boost::log::expressions::attr("Channel") == channel && + boost::log::trivial::severity >= _logLevel); + boost::log::core::get()->add_sink(consoleSink); + m_consoleSinks.push_back(consoleSink); + bool enable_log = _pt.get("log.enable", true); + boost::log::core::get()->set_logging_enabled(enable_log); + return consoleSink; +} + +void BoostLogInitializer::initLog( + const std::string& _configFile, std::string const& _logger, std::string const& _logPrefix) +{ + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configFile, pt); + + initLog(pt, _logger, _logPrefix); + + // register SIGUSR2 for reset boost log level + BoostLogLevelResetHandler::configFile = _configFile; + signal(BOOST_LOG_RELOAD_LOG_LEVEL, BoostLogLevelResetHandler::handle); +} + +void BoostLogInitializer::initStatLog( + const std::string& _configFile, std::string const& _logger, std::string const& _logPrefix) +{ + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configFile, pt); + + return initStatLog(pt, _logger, _logPrefix); +} + +/** + * @brief: set log for specified channel + * + * @param pt: ptree that contains the log configuration + * @param channel: channel name + * @param logType: log prefix + */ +void BoostLogInitializer::initLog(boost::property_tree::ptree const& _pt, + std::string const& _logger, std::string const& _logPrefix) +{ + m_running.store(true); + // get log level + unsigned logLevel = getLogLevel(_pt.get("log.level", "info")); + bool consoleLog = _pt.get("log.enable_console_output", false); + if (consoleLog) + { + boost::shared_ptr sink = initConsoleLogSink(_pt, logLevel, _logger); + setLogFormatter(sink); + } + else + { + if (m_logPath.size() == 0) + { + m_logPath = _pt.get("log.log_path", "log"); + } + + auto enableRotateByHour = _pt.get("log.enable_rotate_by_hour", true); + boost::shared_ptr sink = nullptr; + if (enableRotateByHour) + { + sink = initHourLogSink(_pt, logLevel, m_logPath, _logPrefix, _logger); + } + else + { + sink = initLogSink(_pt, logLevel, m_logPath, _logPrefix, _logger); + } + + setLogFormatter(sink); + } + setFileLogLevel((LogLevel)logLevel); +} + +// rotate the log file the log every hour +boost::shared_ptr BoostLogInitializer::initHourLogSink( + boost::property_tree::ptree const& pt, unsigned const& _logLevel, std::string const& _logPath, + std::string const& _logPrefix, std::string const& channel) +{ + m_currentHourVec.push_back( + (int)boost::posix_time::second_clock::local_time().time_of_day().hours()); + /// set file name + std::string fileName = _logPath + "/" + _logPrefix + "_%Y%m%d%H.%M.log"; + + boost::shared_ptr sink(new sink_t()); + sink->locked_backend()->set_open_mode(std::ios::app); + sink->locked_backend()->set_time_based_rotation( + boost::bind(&BoostLogInitializer::canRotate, this, (m_currentHourVec.size() - 1))); + + sink->locked_backend()->set_file_name_pattern(fileName); + /// set rotation size MB + uint64_t rotation_size = pt.get("log.max_log_file_size", 200) * 1048576; + sink->locked_backend()->set_rotation_size(rotation_size); + /// set auto-flush according to log configuration + bool need_flush = pt.get("log.flush", true); + sink->locked_backend()->auto_flush(need_flush); + sink->set_filter(boost::log::expressions::attr("Channel") == channel); + + boost::log::core::get()->add_sink(sink); + m_sinks.push_back(sink); + bool enable_log = pt.get("log.enable", true); + boost::log::core::get()->set_logging_enabled(enable_log); + // add attributes + boost::log::add_common_attributes(); + return sink; +} + +boost::shared_ptr BoostLogInitializer::initLogSink( + boost::property_tree::ptree const& pt, unsigned const& _logLevel, std::string const& _logPath, + std::string const& _logPrefix, std::string const& channel) +{ + /// set file name + std::string fileName = _logPath + "/" + _logPrefix + "_%Y%m%d_%N.log"; + // std::string targetFileNamePattern = _logPath + "/" + _logPrefix + "_%Y%m%d_%N.log"; + boost::shared_ptr sink(new sink_t()); + + sink->locked_backend()->set_open_mode(std::ios::app); + sink->locked_backend()->set_time_based_rotation( + boost::log::sinks::file::rotation_at_time_point(0, 0, 0)); + // sink->locked_backend()->set_file_name_pattern(fileName); + sink->locked_backend()->set_file_name_pattern(fileName); + // sink->locked_backend()->set_target_file_name_pattern(targetFileNamePattern); + /// set rotation size MB + uint64_t rotation_size = pt.get("log.max_log_file_size", 1024) * 1048576; + sink->locked_backend()->set_rotation_size(rotation_size); + /// set auto-flush according to log configuration + bool need_flush = pt.get("log.flush", true); + sink->locked_backend()->auto_flush(need_flush); + sink->set_filter(boost::log::expressions::attr("Channel") == channel); + + boost::log::core::get()->add_sink(sink); + m_sinks.push_back(sink); + bool enable_log = pt.get("log.enable", true); + boost::log::core::get()->set_logging_enabled(enable_log); + // add attributes + boost::log::add_common_attributes(); + return sink; +} + +/** + * @brief: get log level according to given string + * + * @param levelStr: the given string that should be transformed to boost log level + * @return unsigned: the log level + */ +unsigned BoostLogInitializer::getLogLevel(std::string const& levelStr) +{ + if (boost::iequals(levelStr, "trace")) + return boost::log::trivial::severity_level::trace; + if (boost::iequals(levelStr, "debug")) + return boost::log::trivial::severity_level::debug; + if (boost::iequals(levelStr, "warning")) + return boost::log::trivial::severity_level::warning; + if (boost::iequals(levelStr, "error")) + return boost::log::trivial::severity_level::error; + if (boost::iequals(levelStr, "fatal")) + return boost::log::trivial::severity_level::fatal; + /// default log level is info + return boost::log::trivial::severity_level::info; +} + +/// stop and remove all sinks after the program exit +void BoostLogInitializer::stopLogging() +{ + if (!m_running) + { + return; + } + m_running.store(false); + for (auto const& sink : m_sinks) + { + stopLogging(sink); + } + m_sinks.clear(); + + for (auto const& sink : m_consoleSinks) + { + stopLogging(sink); + } + m_consoleSinks.clear(); +} + +/// stop a single sink +void BoostLogInitializer::stopLogging(boost::shared_ptr sink) +{ + if (!sink) + { + return; + } + // remove the sink from the core, so that no records are passed to it + if (boost::log::core::get()) + { + boost::log::core::get()->remove_sink(sink); + } + // break the feeding loop + sink->stop(); + // flush all log records that may have left buffered + sink->flush(); + sink.reset(); +} diff --git a/bcos-utilities/bcos-utilities/BoostLogInitializer.h b/bcos-utilities/bcos-utilities/BoostLogInitializer.h new file mode 100644 index 0000000..f55e68e --- /dev/null +++ b/bcos-utilities/bcos-utilities/BoostLogInitializer.h @@ -0,0 +1,161 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: setting log + * + * @file: BoostLogInitializer.h + * @author: yujiechen + */ +#pragma once + +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +class BoostLogInitializer +{ +public: + class Sink : public boost::log::sinks::text_file_backend + { + public: + void consume(const boost::log::record_view& rec, const std::string& str) + { + boost::log::sinks::text_file_backend::consume(rec, str); + auto severity = + rec.attribute_values()[boost::log::aux::default_attribute_names::severity()] + .extract(); + // bug fix: determine m_ptr before get the log level + // serverity.get() will call BOOST_ASSERT(m_ptr) + if (severity.get_ptr() && severity.get() == boost::log::trivial::severity_level::fatal) + { + // abort if encounter fatal, will generate coredump + // must make sure only use LOG(FATAL) when encounter the most serious problem + // forbid use LOG(FATAL) in the function that should exit normally + std::abort(); + } + } + }; + class ConsoleSink : public boost::log::sinks::text_ostream_backend + { + public: + void consume(const boost::log::record_view& rec, const std::string& str) + { + boost::log::sinks::text_ostream_backend::consume(rec, str); + auto severity = + rec.attribute_values()[boost::log::aux::default_attribute_names::severity()] + .extract(); + // bug fix: determine m_ptr before get the log level + // serverity.get() will call BOOST_ASSERT(m_ptr) + if (severity.get_ptr() && severity.get() == boost::log::trivial::severity_level::fatal) + { + // abort if encounter fatal, will generate coredump + // must make sure only use LOG(FATAL) when encounter the most serious problem + // forbid use LOG(FATAL) in the function that should exit normally + std::abort(); + } + } + }; + using Ptr = std::shared_ptr; + using sink_t = boost::log::sinks::asynchronous_sink; + using console_sink_t = boost::log::sinks::asynchronous_sink; + virtual ~BoostLogInitializer() { stopLogging(); } + BoostLogInitializer() {} + + void initLog(const std::string& _configFile, std::string const& _logger = bcos::FileLogger, + std::string const& _logPrefix = "log"); + + void initStatLog(const std::string& _configFile, + std::string const& _logger = bcos::StatFileLogger, std::string const& _logPrefix = "stat"); + + void initLog(boost::property_tree::ptree const& _pt, + std::string const& _logger = bcos::FileLogger, std::string const& _logPrefix = "log"); + + void initStatLog(boost::property_tree::ptree const& _pt, + std::string const& _logger = bcos::StatFileLogger, std::string const& _logPrefix = "stat"); + + void stopLogging(); + + static unsigned getLogLevel(std::string const& levelStr); + + void setLogPath(std::string const& _logPath) { m_logPath = _logPath; } + std::string logPath() const { return m_logPath; } + +private: + bool canRotate(size_t const& _index); + + boost::shared_ptr initLogSink(boost::property_tree::ptree const& _pt, + unsigned const& _logLevel, std::string const& _logPath, std::string const& _logPrefix, + std::string const& channel); + + // rotate the log file the log every hour + boost::shared_ptr initHourLogSink(boost::property_tree::ptree const& _pt, + unsigned const& _logLevel, std::string const& _logPath, std::string const& _logPrefix, + std::string const& channel); + + boost::shared_ptr initConsoleLogSink(boost::property_tree::ptree const& _pt, + unsigned const& _logLevel, std::string const& channel); + + template + void setLogFormatter(T _sink) + { + /// set file format + /// log-level|timestamp | message + _sink->set_formatter( + boost::log::expressions::stream + << boost::log::expressions::attr("Severity") << "|" + << boost::log::expressions::format_date_time( + "TimeStamp", "%Y-%m-%d %H:%M:%S.%f") + << "|" << boost::log::expressions::smessage); + } + + template + void stopLogging(boost::shared_ptr sink) + { + if (!sink) + { + return; + } + // remove the sink from the core, so that no records are passed to it + boost::log::core::get()->remove_sink(sink); + // break the feeding loop + sink->stop(); + // flush all log records that may have left buffered + sink->flush(); + sink.reset(); + } + +private: + void stopLogging(boost::shared_ptr sink); + std::vector> m_sinks; + std::vector> m_consoleSinks; + + std::vector m_currentHourVec; + std::string m_logPath; + std::atomic_bool m_running = {false}; +}; +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/CallbackCollectionHandler.h b/bcos-utilities/bcos-utilities/CallbackCollectionHandler.h new file mode 100644 index 0000000..5d222b7 --- /dev/null +++ b/bcos-utilities/bcos-utilities/CallbackCollectionHandler.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @author wheatli + * @date 2018.8.27 + * @modify add CallbackCollectionHandler.h + * + */ +#pragma once +#include "Common.h" +#include "DataConvertUtility.h" + +namespace bcos +{ +template +class CallbackCollectionHandler +{ +public: + using Callback = std::function; + + class SingleCallback + { + friend class CallbackCollectionHandler; + + public: + ~SingleCallback() + { + if (m_callbackCollectionHandler) + { + m_callbackCollectionHandler->m_callbackCollection.erase(m_iterator); + } + } + void reset() { m_callbackCollectionHandler = nullptr; } + void call(Args const&... _args) { m_callback(_args...); } + + private: + SingleCallback(unsigned _iterator, CallbackCollectionHandler* _callbackCollectionHandler, + Callback const& _callback) + : m_iterator(_iterator), + m_callbackCollectionHandler(_callbackCollectionHandler), + m_callback(_callback) + {} + + unsigned m_iterator = 0; + CallbackCollectionHandler* m_callbackCollectionHandler = nullptr; + Callback m_callback; + }; + + ~CallbackCollectionHandler() + { + for (auto const& item : m_callbackCollection) + { + if (auto callback = item.second.lock()) + { + callback->reset(); + } + } + } + + std::shared_ptr add(Callback _callback) + { + auto iterator = + m_callbackCollection.empty() ? 0 : (m_callbackCollection.rbegin()->first + 1); + auto callback = std::shared_ptr( + new SingleCallback(iterator, this, std::move(_callback))); + m_callbackCollection[iterator] = callback; + return callback; + } + + void operator()(Args const&... _args) + { + auto callbackCollection = convertMapToVector(m_callbackCollection); + for (auto const& singleCallback : *callbackCollection) + { + auto callback = singleCallback.lock(); + if (callback) + { + callback->call(_args...); + } + } + } + +private: + std::map> + m_callbackCollection; +}; + +template +using Handler = std::shared_ptr::SingleCallback>; +} // namespace bcos \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/Common.cpp b/bcos-utilities/bcos-utilities/Common.cpp new file mode 100644 index 0000000..6fad460 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Common.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.cpp + * @author Asherli + * @date 2021-02-24 + */ + +#define NOMINMAX + +#include "Common.h" +#include "Exceptions.h" +#include +#if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN32_) +#include +#else +#include +#endif +#ifdef __APPLE__ +#include +#endif + +using namespace std; + +namespace bcos +{ +bytes const NullBytes; +/// get utc time(ms) +uint64_t utcTime() +{ + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); +} + +// getSteadyTime(ms) +uint64_t utcSteadyTime() +{ + // trans (ns) into (ms) + return std::chrono::duration_cast( + std::chrono::steady_clock::now().time_since_epoch()) + .count(); +} + +/// get utc time(us) +uint64_t utcTimeUs() +{ + return std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); +} + +uint64_t utcSteadyTimeUs() +{ + return std::chrono::duration_cast( + std::chrono::steady_clock::now().time_since_epoch()) + .count(); +} + +std::string getCurrentDateTime() +{ + using std::chrono::system_clock; + char buffer[40]; + auto currentTime = system_clock::to_time_t(system_clock::now()); + strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localtime(¤tTime)); + return std::string(buffer); +} + +void errorExit(std::stringstream& _exitInfo, Exception const& _exception) +{ + BCOS_LOG(WARNING) << _exitInfo.str(); + std::cerr << _exitInfo.str(); + raise(SIGTERM); + BOOST_THROW_EXCEPTION(_exception << errinfo_comment(_exitInfo.str())); +} + +} // namespace bcos + +void bcos::pthread_setThreadName(std::string const& _n) +{ +#if defined(__GLIBC__) + pthread_setname_np(pthread_self(), _n.c_str()); +#elif defined(__APPLE__) + pthread_setname_np(_n.c_str()); +#endif +} diff --git a/bcos-utilities/bcos-utilities/Common.h b/bcos-utilities/bcos-utilities/Common.h new file mode 100644 index 0000000..f632042 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Common.h @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#pragma once + +#include "Log.h" +#include "RefDataContainer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +using namespace boost::multiprecision::literals; + +// vector of byte data +using byte = uint8_t; +using bytes = std::vector; +using bytesPointer = std::shared_ptr>; +using bytesConstPtr = std::shared_ptr; +using bytesRef = RefDataContainer; +using bytesConstRef = RefDataContainer; + +// Numeric types. +using bigint = boost::multiprecision::number>; + +// unsigned int256 +using u256 = boost::multiprecision::number>; +// signed int256 +using s256 = boost::multiprecision::number>; +// unsigned int160 +using u160 = boost::multiprecision::number>; +// signed int160 +using s160 = boost::multiprecision::number>; +// unsigned int256 +using u512 = boost::multiprecision::number>; +// signed int256 +using s512 = boost::multiprecision::number>; + +// Map types. +using BytesMap = std::map; +// Fixed-length string types. +using string32 = std::array; +// Map types. +using HexMap = std::map; + +// Null/Invalid values for convenience. +extern bytes const NullBytes; +u256 constexpr Invalid256 = + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui256; + + +using Mutex = std::mutex; +using RecursiveMutex = std::recursive_mutex; +using SharedMutex = boost::shared_mutex; + +using Guard = std::lock_guard; +using UniqueGuard = std::unique_lock; +using RecursiveGuard = std::lock_guard; +using ReadGuard = boost::shared_lock; +using UpgradableGuard = boost::upgrade_lock; +using UpgradeGuard = boost::upgrade_to_unique_lock; +using WriteGuard = boost::unique_lock; + +template +inline u256 exp10() +{ + return exp10() * u256(10); +} + +template <> +inline u256 exp10<0>() +{ + return u256(1); +} + +//------------ Type interprets and Convertions---------------- +/// Interprets @a _u as a two's complement signed number and returns the resulting s256. +inline s256 u2s(u256 _u) +{ + static const bigint c_end = bigint(1) << 256; + /// get the +/- symbols + if (boost::multiprecision::bit_test(_u, 255)) + return s256(-(c_end - _u)); + else + return s256(_u); +} + +/// @returns the two's complement signed representation of the signed number _u. +inline u256 s2u(s256 _u) +{ + static const bigint c_end = bigint(1) << 256; + if (_u >= 0) + return u256(_u); + else + return u256(c_end + _u); +} + +inline bool isalNumStr(std::string const& _stringData) +{ + for (auto ch : _stringData) + { + if (isalnum(ch)) + { + continue; + } + return false; + } + return true; +} + +/// Get the current time in seconds since the epoch in UTC(ms) +uint64_t utcTime(); +uint64_t utcSteadyTime(); + +/// Get the current time in seconds since the epoch in UTC(us) +uint64_t utcTimeUs(); +uint64_t utcSteadyTimeUs(); + +// get the current datatime +std::string getCurrentDateTime(); + +struct Exception; +// callback when throw exceptions +void errorExit(std::stringstream& _exitInfo, Exception const& exception); + +void pthread_setThreadName(std::string const& _n); + +/* +template +struct overloaded : Ts... +{ + using Ts::operator()...; +}; +// explicit deduction guide (not needed as of C++20) +template +overloaded(Ts...) -> overloaded; +*/ + +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/ConcurrentQueue.h b/bcos-utilities/bcos-utilities/ConcurrentQueue.h new file mode 100644 index 0000000..0cb675d --- /dev/null +++ b/bcos-utilities/bcos-utilities/ConcurrentQueue.h @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: Implement a queue with notification/consumption mechanism + * @file ConcurrentQueue.h + */ +#pragma once +#include +#include +#include + + +namespace bcos +{ +/// Concurrent queue. +/// You can push and pop elements to/from the queue. Pop will block until the queue is not empty. +/// The default backend (QueueT) is std::queue. It can be changed to any type that has +/// proper push(), pop(), empty() and front() methods. +template > +class ConcurrentQueue +{ +public: + template + void push(_U&& _elem) + { + { + std::lock_guard guard{x_mutex}; + m_queue.push(std::forward<_U>(_elem)); + } + m_cv.notify_one(); + } + + bool empty() + { + boost::unique_lock lock{x_mutex}; + return m_queue.empty(); + } + + _T pop() + { + boost::unique_lock lock{x_mutex}; + m_cv.wait(lock, [this] { return !m_queue.empty(); }); + auto item = std::move(m_queue.front()); + m_queue.pop(); + return item; + } + + std::pair tryPop(int milliseconds) + { + boost::unique_lock lock{x_mutex}; + // in consideration that when the system time has been changed, + // the process maybe stucked in 'wait_for' + auto ret = m_cv.wait_for( + lock, boost::chrono::milliseconds(milliseconds), [this] { return !m_queue.empty(); }); + if (!ret) + { + return std::make_pair(false, _T()); + } + auto item = std::move(m_queue.front()); + m_queue.pop(); + return std::make_pair(ret, item); + } + +private: + QueueT m_queue; + boost::mutex x_mutex; + boost::condition_variable m_cv; +}; +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/DataConvertUtility.cpp b/bcos-utilities/bcos-utilities/DataConvertUtility.cpp new file mode 100644 index 0000000..afecaaf --- /dev/null +++ b/bcos-utilities/bcos-utilities/DataConvertUtility.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DataConvertUtility.cpp + */ + +#include "DataConvertUtility.h" +#include + +#include "Exceptions.h" + +using namespace std; +using namespace bcos; +/** + * @brief: convert the hex char into the hex number + * + * @param _hexChar: the hex char to be converted + * @return int : the converted hex number + */ +int convertCharToHexNumber(char _hexChar) +{ + if (_hexChar >= '0' && _hexChar <= '9') + return _hexChar - '0'; + if (_hexChar >= 'a' && _hexChar <= 'f') + return _hexChar - 'a' + 10; + if (_hexChar >= 'A' && _hexChar <= 'F') + return _hexChar - 'A' + 10; + return -1; +} + +bool bcos::isHexString(string const& _string) +{ + auto it = _string.begin(); + if (_string.find("0x") == 0) + { + it += 2; + } + for (; it != _string.end(); it++) + { + if (convertCharToHexNumber(*it) == -1) + { + return false; + } + } + return true; +} + +std::shared_ptr bcos::fromHexString(std::string const& _hexedString) +{ + unsigned startIndex = + (_hexedString.size() >= 2 && _hexedString[0] == '0' && _hexedString[1] == 'x') ? 2 : 0; + std::shared_ptr bytesData = std::make_shared(); + bytesData->reserve((_hexedString.size() - startIndex + 1) / 2); + + if (_hexedString.size() % 2) + { + int h = convertCharToHexNumber(_hexedString[startIndex++]); + if (h == -1) + { + BOOST_THROW_EXCEPTION(BadHexCharacter()); + } + bytesData->push_back(h); + } + for (unsigned i = startIndex; i < _hexedString.size(); i += 2) + { + int highValue = convertCharToHexNumber(_hexedString[i]); + int lowValue = convertCharToHexNumber(_hexedString[i + 1]); + if (highValue == -1 || lowValue == -1) + { + BOOST_THROW_EXCEPTION(BadHexCharacter()); + } + bytesData->push_back((bcos::byte)(highValue << 4) + lowValue); + } + return bytesData; +} + +std::string bcos::toString(string32 const& _s) +{ + std::string ret; + for (unsigned i = 0; i < 32 && _s[i]; ++i) + ret.push_back(_s[i]); + return ret; +} diff --git a/bcos-utilities/bcos-utilities/DataConvertUtility.h b/bcos-utilities/bcos-utilities/DataConvertUtility.h new file mode 100644 index 0000000..95f68e2 --- /dev/null +++ b/bcos-utilities/bcos-utilities/DataConvertUtility.h @@ -0,0 +1,390 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file DataConvertUtility.h + */ + +#pragma once + +#include "Common.h" +#include "Error.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +template +Out toHex(const Binary& binary, std::string_view prefix = std::string_view()) +{ + Out out; + + out.reserve(binary.size() * 2 + prefix.size()); + + if (!prefix.empty()) + { + out.insert(out.end(), prefix.begin(), prefix.end()); + } + + if (binary.empty()) + { + return out; + } + + boost::algorithm::hex_lower(binary.begin(), binary.end(), std::back_inserter(out)); + return out; +} + +template +Out fromHex(const Hex& hex, std::string_view prefix = std::string_view()) +{ + if (hex.empty()) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Empty input hex string")); + } + + if ((hex.size() < prefix.size() + 2) || (hex.size() % 2 != 0)) + { + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "Invalid input hex string size")); + } + + Out out; + out.reserve(hex.size() / 2); + + boost::algorithm::unhex(hex.begin() + prefix.size(), hex.end(), std::back_inserter(out)); + return out; +} + +template +Out fromHexWithPrefix(const Hex& hex) +{ + return fromHex(hex, "0x"); +} + +/** + * @brief convert the specified bytes data into hex string + * + * @tparam Iterator: the iterator type of the data + * @param _begin : the begin pointer of the data that need to be converted to hex string + * @param _end : the end pointer of the data that need to be converted to the hex string + * @param _prefix: prefix of the converted hex string + * @return std::shared_ptr : the converted hex string + */ +template +std::shared_ptr toHexString( + Iterator _begin, Iterator _end, std::string const& _prefix = "") +{ + static_assert(sizeof(typename std::iterator_traits::value_type) == 1, + "only support byte-sized element type"); + auto hexStringSize = std::distance(_begin, _end) * 2 + _prefix.size(); + std::shared_ptr hexString = std::make_shared(hexStringSize, '0'); + // set the _prefix + memcpy((void*)hexString->data(), (const void*)_prefix.data(), _prefix.size()); + static char const* hexCharsCollection = "0123456789abcdef"; + // covert the bytes into hex chars + size_t offset = _prefix.size(); + for (auto it = _begin; it != _end; it++) + { + (*hexString)[offset++] = hexCharsCollection[(*it >> 4) & 0x0f]; + (*hexString)[offset++] = hexCharsCollection[*it & 0x0f]; + } + return hexString; +} + +/** + * @brief : convert the given data to hex string(without prefix) + * + * @tparam T : the type of the given data + * @param _data : the data need to be converted to hex + * @return std::shared_ptr : the pointer of the converted hex string + */ +template +std::shared_ptr toHexString(T const& _data) +{ + return toHexString(_data.begin(), _data.end()); +} + +/** + * @brief convert the bytes into hex string with 0x prefixed + * + * @tparam T : the type of data to be converted + * @param _data : the data to be converted + * @return std::string : the hex string + */ +template +std::string toHexStringWithPrefix(T const& _data) +{ + std::string out; + out.reserve(_data.size() * 2 + 2); + out = "0x"; + boost::algorithm::hex_lower(_data.begin(), _data.end(), std::back_inserter(out)); + + return out; +} + +/** + * @brief convert hex string to bytes + * + * @param _hexedString: the hex string need to be converted + * @return std::shared_ptr: the converted bytes + */ +std::shared_ptr fromHexString(std::string const& _hexedString); + +/** + * @brief determine the input string is hex string or not + * + * @param _string the string to be determined + * @return true : the input string is hex string + * @return false : the input string is not hex string + */ +bool isHexString(std::string const& _string); + +/// Converts byte array to a string containing the same (binary) data. Unless +/// the byte array happens to contain ASCII data, this won't be printable. +inline std::string asString(bytes const& _b) +{ + return std::string((char const*)_b.data(), (char const*)(_b.data() + _b.size())); +} + +/// Converts byte array ref to a string containing the same (binary) data. Unless +/// the byte array happens to contain ASCII data, this won't be printable. +inline std::string asString(bytesConstRef _b) +{ + return std::string((char const*)_b.data(), (char const*)(_b.data() + _b.size())); +} + +/// Converts a string to a byte array containing the string's (byte) data. +inline bytes asBytes(std::string const& _b) +{ + return bytes((byte const*)_b.data(), (byte const*)(_b.data() + _b.size())); +} + +// Big-endian to/from host endian conversion functions. + +/// Converts a templated integer value to the big-endian byte-stream represented on a templated +/// collection. The size of the collection object will be unchanged. If it is too small, it will not +/// represent the value properly, if too big then the additional elements will be zeroed out. +/// @a Out will typically be either std::string or bytes. +/// @a T will typically by unsigned, u160, u256 or bigint. +template +inline void toBigEndian(T _val, Out& o_out) +{ + static_assert(std::is_same::value || !std::numeric_limits::is_signed, + "only unsigned types or bigint supported"); // bigint does not carry sign bit on shift + for (auto i = o_out.size(); i != 0; _val >>= 8, i--) + { + T v = _val & (T)0xff; + o_out[i - 1] = (typename Out::value_type)(uint8_t)v; + } +} + +/// Converts a big-endian byte-stream represented on a templated collection to a templated integer +/// value. +/// @a _In will typically be either std::string or bytes. +/// @a T will typically by unsigned, u160, u256 or bigint. +template +inline T fromBigEndian(_In const& _bytes) +{ + T ret = (T)0; + for (auto i : _bytes) + ret = (T)((ret << 8) | (byte)(typename std::make_unsigned::type)i); + return ret; +} + +inline bytes toBigEndian(u256 _val) +{ + bytes ret(32); + toBigEndian(_val, ret); + return ret; +} +inline bytes toBigEndian(u160 _val) +{ + bytes ret(20); + toBigEndian(_val, ret); + return ret; +} + +/// Convenience function for toBigEndian. +/// @returns a byte array just big enough to represent @a _val. +template +inline bytes toCompactBigEndian(T _val, unsigned _min = 0) +{ + static_assert(std::is_same::value || !std::numeric_limits::is_signed, + "only unsigned types or bigint supported"); // bigint does not carry sign bit on shift + unsigned i = 0; + for (T v = _val; v; ++i, v >>= 8) + {} + bytes ret((std::max)(_min, i), 0); + toBigEndian(_val, ret); + return ret; +} +inline bytes toCompactBigEndian(byte _val, unsigned _min = 0) +{ + return (_min || _val) ? bytes{_val} : bytes{}; +} + +/// Convenience function for toBigEndian. +/// @returns a string just big enough to represent @a _val. +template +inline std::string toCompactBigEndianString(T _val, unsigned _min = 0) +{ + static_assert(std::is_same::value || !std::numeric_limits::is_signed, + "only unsigned types or bigint supported"); // bigint does not carry sign bit on shift + unsigned i = 0; + for (T v = _val; v; ++i, v >>= 8) + {} + std::string ret((std::max)(_min, i), '\0'); + toBigEndian(_val, ret); + return ret; +} + +// Algorithms for string and string-like collections. +// Concatenate two vectors of elements of POD types. +template +inline std::vector& operator+=( + std::vector::value, T>::type>& _a, + std::vector const& _b) +{ + auto s = _a.size(); + _a.resize(_a.size() + _b.size()); + memcpy(_a.data() + s, _b.data(), _b.size() * sizeof(T)); + return _a; +} + +/// Concatenate two vectors of elements. +template +inline std::vector& operator+=( + std::vector::value, T>::type>& _a, + std::vector const& _b) +{ + _a.reserve(_a.size() + _b.size()); + for (auto& i : _b) + _a.push_back(i); + return _a; +} + +/// Insert the contents of a container into a set +template +std::set& operator+=(std::set& _a, U const& _b) +{ + for (auto const& i : _b) + _a.insert(i); + return _a; +} + +/// Insert the contents of a container into an unordered_set +template +std::unordered_set& operator+=(std::unordered_set& _a, U const& _b) +{ + for (auto const& i : _b) + _a.insert(i); + return _a; +} + +/// Concatenate the contents of a container onto a vector +template +std::vector& operator+=(std::vector& _a, U const& _b) +{ + for (auto const& i : _b) + _a.push_back(i); + return _a; +} + +/// Insert the contents of a container into a set +template +std::set operator+(std::set _a, U const& _b) +{ + return _a += _b; +} + +/// Insert the contents of a container into an unordered_set +template +std::unordered_set operator+(std::unordered_set _a, U const& _b) +{ + return _a += _b; +} + +/// Concatenate the contents of a container onto a vector +template +std::vector operator+(std::vector _a, U const& _b) +{ + return _a += _b; +} + +/// Concatenate two vectors of elements. +template +inline std::vector operator+(std::vector const& _a, std::vector const& _b) +{ + std::vector ret(_a); + return ret += _b; +} + +template +inline std::ostream& operator<<(std::ostream& _out, std::vector const& _e) +{ + _out << "["; + for (auto const& element : _e) + { + _out << "," << element; + } + + _out << "]"; + return _out; +} + +template +std::shared_ptr> convertMapToVector(std::map const& _map) +{ + std::shared_ptr> convertedVec = std::make_shared>(); + for (auto const& it : _map) + { + convertedVec->push_back(it.second); + } + return convertedVec; +} + +/// Make normal string from fixed-length string. +std::string toString(string32 const& _s); + +/// Converts arbitrary value to string representation using std::stringstream. +template +inline std::string toString(_T const& _t) +{ + std::ostringstream o; + o << _t; + return o.str(); +} + +template <> +inline std::string toString(std::string const& _s) +{ + return _s; +} + +template <> +inline std::string toString(uint8_t const& _u) +{ + std::ostringstream o; + o << static_cast(_u); + return o.str(); +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/Error.h b/bcos-utilities/bcos-utilities/Error.h new file mode 100644 index 0000000..a568ccd --- /dev/null +++ b/bcos-utilities/bcos-utilities/Error.h @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Error.h + * @author: yujiechen + * @date: 2021-04-07 + */ +#pragma once +#include "Common.h" +#include "Exceptions.h" +#include +#include +#include +#include +#include +#include +#include + +#if 0 +#define BCOS_ERROR(errorCode, errorMessage) \ + ::bcos::Error::buildError(BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, errorCode, errorMessage) +#define BCOS_ERROR_WITH_PREV(errorCode, errorMessage, prev) \ + ::bcos::Error::buildError( \ + BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, errorCode, errorMessage, prev) +#endif + +#define BCOS_ERROR(errorCode, errorMessage) \ + ::bcos::Error::buildError(BOOST_CURRENT_LOCATION.to_string(), errorCode, errorMessage) +#define BCOS_ERROR_WITH_PREV(errorCode, errorMessage, prev) \ + ::bcos::Error::buildError(BOOST_CURRENT_LOCATION.to_string(), errorCode, errorMessage, prev) + +#define BCOS_ERROR_PTR(code, message) std::make_shared(BCOS_ERROR(code, message)) +#define BCOS_ERROR_WITH_PREV_PTR(code, message, prev) \ + std::make_shared(BCOS_ERROR_WITH_PREV(code, message, prev)) + +#define BCOS_ERROR_UNIQUE_PTR(code, message) std::make_unique(BCOS_ERROR(code, message)) +#define BCOS_ERROR_WITH_PREV_UNIQUE_PTR(code, message, prev) \ + std::make_unique(BCOS_ERROR_WITH_PREV(code, message, prev)) + +namespace bcos +{ +class Error : public bcos::Exception +{ +public: + using Ptr = std::shared_ptr; + using ConstPtr = std::shared_ptr; + + using UniquePtr = std::unique_ptr; + using UniqueConstPtr = std::unique_ptr; + + using PrevStdError = boost::error_info; + + static Error buildError(char const* func, char const* file, int line, int32_t errorCode, + const std::string& errorMessage) + { + Error error(errorCode, errorMessage); + error << boost::throw_function(func); + error << boost::throw_file(file); + error << boost::throw_line(line); + + return error; + } + + static Error buildError(char const* func, char const* file, int line, int32_t errorCode, + const std::string& errorMessage, const Error& prev) + { + auto error = buildError(func, file, line, errorCode, errorMessage); + error << PrevStdError(boost::diagnostic_information(prev)); + return error; + } + + static Error buildError(char const* func, char const* file, int line, int32_t errorCode, + const std::string& errorMessage, const std::exception& prev) + { + auto error = buildError(func, file, line, errorCode, errorMessage); + error << PrevStdError(boost::diagnostic_information(prev)); + return error; + } + + static Error buildError( + const std::string& context, int32_t errorCode, const std::string& errorMessage) + { + Error error(errorCode, errorMessage); + error << boost::error_info(context); + return error; + } + + static Error buildError(const std::string& context, int32_t errorCode, + const std::string& errorMessage, const Error& prev) + { + auto error = buildError(context, errorCode, errorMessage); + error << PrevStdError(boost::diagnostic_information(prev)); + return error; + } + + static Error buildError(const std::string& context, int32_t errorCode, + const std::string& errorMessage, const std::exception& prev) + { + auto error = buildError(context, errorCode, errorMessage); + error << PrevStdError(boost::diagnostic_information(prev)); + return error; + } + + Error() = default; + Error(int64_t _errorCode, std::string _errorMessage) + : bcos::Exception(_errorMessage), + m_errorCode(_errorCode), + m_errorMessage(std::move(_errorMessage)) + {} + + virtual int64_t errorCode() const { return m_errorCode; } + virtual std::string const& errorMessage() const { return m_errorMessage; } + + virtual void setErrorCode(int64_t _errorCode) { m_errorCode = _errorCode; } + virtual void setErrorMessage(std::string const& _errorMessage) + { + m_errorMessage = _errorMessage; + } + +private: + int64_t m_errorCode = 0; + std::string m_errorMessage; +}; +} // namespace bcos \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/Exceptions.h b/bcos-utilities/bcos-utilities/Exceptions.h new file mode 100644 index 0000000..d8317bf --- /dev/null +++ b/bcos-utilities/bcos-utilities/Exceptions.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief define basic Exceptions + * @file Exceptions.h + */ + +#pragma once +#include "Common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +/** + * @brief : Base class for all exceptions + */ +struct Exception : virtual std::exception, virtual boost::exception +{ + Exception(std::string _message = std::string()) : m_message(std::move(_message)) {} + const char* what() const noexcept override + { + return m_message.empty() ? std::exception::what() : m_message.c_str(); + } + +private: + std::string m_message; +}; + +/// construct a new exception class overriding Exception +#define DERIVE_BCOS_EXCEPTION(X) \ + struct X : virtual Exception \ + { \ + } +DERIVE_BCOS_EXCEPTION(ConstructFixedBytesFailed); +DERIVE_BCOS_EXCEPTION(BadCast); +DERIVE_BCOS_EXCEPTION(BadHexCharacter); +DERIVE_BCOS_EXCEPTION(InvalidAddress); +DERIVE_BCOS_EXCEPTION(InvalidParameter); + +using errinfo_invalidSymbol = boost::error_info; +using errinfo_comment = boost::error_info; +using errinfo_required = boost::error_info; +using errinfo_got = boost::error_info; +using RequirementError = boost::tuple; +using RequirementErrorComment = boost::tuple; +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/FileUtility.cpp b/bcos-utilities/bcos-utilities/FileUtility.cpp new file mode 100644 index 0000000..1904575 --- /dev/null +++ b/bcos-utilities/bcos-utilities/FileUtility.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FileUtility.cpp + */ + +#include "FileUtility.h" +#include +#include +#include +#include +#include +using namespace std; + +namespace bcos +{ +template +inline std::shared_ptr genericReadContents(boost::filesystem::path const& _file) +{ + std::shared_ptr content = std::make_shared(); + size_t const c_elementSize = sizeof(typename T::value_type); + + boost::filesystem::ifstream fileStream(_file, std::ifstream::binary); + if (!fileStream) + { + return content; + } + fileStream.seekg(0, fileStream.end); + streamoff length = fileStream.tellg(); + + if (length == 0) + { + return content; + } + fileStream.seekg(0, fileStream.beg); + content->resize((length + c_elementSize - 1) / c_elementSize); + fileStream.read(const_cast(reinterpret_cast(content->data())), length); + return content; +} + +std::shared_ptr readContents(boost::filesystem::path const& _file) +{ + return genericReadContents(_file); +} + +std::shared_ptr readContentsToString(boost::filesystem::path const& _file) +{ + return genericReadContents(_file); +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/FileUtility.h b/bcos-utilities/bcos-utilities/FileUtility.h new file mode 100644 index 0000000..e3297eb --- /dev/null +++ b/bcos-utilities/bcos-utilities/FileUtility.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file FileUtility.h + */ + +#pragma once + +#include "Common.h" +#include +namespace bcos +{ +/** + * @brief : read the specified file + * + * @param _file : the file to be read + * @return std::shared_ptr : the file content + * If the file doesn't exist or isn't readable, + * returns an empty bytes. + */ +std::shared_ptr readContents(boost::filesystem::path const& _file); + +/** + * @brief : read the content of the specified file, and return the content as string + * + * @param _file : the file + * @return std::shared_ptr : the content of the specified file + * If the file doesn't exist or isn't readable, + * returns an empty string + */ +std::shared_ptr readContentsToString(boost::filesystem::path const& _file); +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/FixedBytes.cpp b/bcos-utilities/bcos-utilities/FixedBytes.cpp new file mode 100644 index 0000000..22c1a45 --- /dev/null +++ b/bcos-utilities/bcos-utilities/FixedBytes.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: Implement the fixed-size bytes + * @file FixedBytes.cpp + * @date 2021-02-26 + */ + +#include "FixedBytes.h" +#include + +namespace bcos +{ +std::random_device s_fixedBytesEngine; +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/FixedBytes.h b/bcos-utilities/bcos-utilities/FixedBytes.h new file mode 100644 index 0000000..6c76400 --- /dev/null +++ b/bcos-utilities/bcos-utilities/FixedBytes.h @@ -0,0 +1,728 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: Implement the fixed-size bytes + * @file FixedBytes.h + * @date 2021-02-26 + */ + +#pragma once + +#include "DataConvertUtility.h" +#include "Exceptions.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +/// Compile-time calculation of Log2 of constant values. +template +struct StaticLog2 +{ + enum + { + result = 1 + StaticLog2::result + }; +}; +template <> +struct StaticLog2<1> +{ + enum + { + result = 0 + }; +}; + +extern std::random_device s_fixedBytesEngine; + +/// Fixed-size raw-byte array container type, with an API optimised for storing hashes. +/// Transparently converts to/from the corresponding arithmetic type; this will +/// assume the data contained in the hash is big-endian. +template +class FixedBytes +{ +public: + /// The corresponding arithmetic type. + using ArithType = boost::multiprecision::number>; + enum + { + SIZE = N + }; + // construct FixedBytes from string + enum StringDataType + { + FromHex, + FromBinary + }; + + // align type when construct FixedBytes from the given bytes + enum DataAlignType + { + AlignLeft, + AlignRight, + AcquireEqual + }; + + enum ConstructorType + { + FromPointer, + }; + + /** + * @brief Construct a new empty Fixed Bytes object + */ + FixedBytes() { m_data.fill(0); } + + /// Explicitly construct, copying from a byte array. + explicit FixedBytes( + bytesConstRef _bytesRefData, DataAlignType _alignType = DataAlignType::AlignRight) + : FixedBytes() + { + constructFixedBytes(_bytesRefData, _alignType); + } + + explicit FixedBytes( + bytes const& _bytesData, DataAlignType _alignType = DataAlignType::AlignRight) + : FixedBytes() + { + constructFixedBytes(bytesConstRef(_bytesData.data(), _bytesData.size()), _alignType); + } + + explicit FixedBytes(std::string_view view, StringDataType type, + DataAlignType _alignType = DataAlignType::AlignRight) + { + if (view.size() >= 2 && (view[0] == '0' && view[1] == 'x')) + { + view = view.substr(2); + } + + if (type == FromHex) [[likely]] + { + if ((view.size() > static_cast(N * 2)) || + (view.size() % 2 != 0)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::invalid_argument{"Invalid input string!"}); + } + + if (view.size() != N) + {} + + auto startIndex = 0; + if (_alignType == DataAlignType::AlignRight) [[likely]] + { + startIndex = N - (view.size() / 2); + std::fill(m_data.begin(), m_data.begin() + startIndex, 0); + } + else + { + auto endIndex = view.size() / 2; + std::fill(m_data.begin() + endIndex, m_data.end(), 0); + } + boost::algorithm::unhex(view.begin(), view.end(), m_data.begin() + startIndex); + } + else + { + constructFixedBytes( + bytesConstRef((const bcos::byte*)view.data(), view.size()), _alignType); + } + } + + /** + * @brief Construct a new Fixed Bytes object from the given FixedBytes according to the align + * type + * + * @tparam M: the size of the given FixedBytes + * @param _fixedBytes: the given FixedBytes that used to construct the new FixedBytes + * @param _alignType: the align type, support AlignLeft/AlignRight now + */ + template + explicit FixedBytes( + FixedBytes const& _fixedBytes, DataAlignType _alignType = DataAlignType::AlignLeft) + { + m_data.fill(0); + constructFixedBytes(_fixedBytes.ref(), _alignType); + } + + /** + * @brief Construct a new Fixed Bytes object according to the given number + * @param _arithNumber: the number used to construct the new FixedBytes + */ + FixedBytes(ArithType const& _arithNumber) : FixedBytes() { toBigEndian(_arithNumber, m_data); } + FixedBytes(unsigned _arithNumber) : FixedBytes() { toBigEndian(_arithNumber, m_data); } + + explicit FixedBytes(byte const* _data, size_t _dataSize) : FixedBytes() + { + memcpy(m_data.data(), _data, (std::min)(_dataSize, (size_t)N)); + } + + explicit FixedBytes(byte const* _bs, ConstructorType) : FixedBytes() + { + memcpy(m_data.data(), _bs, N); + } + + /// Explicitly construct, copying from a string. + explicit FixedBytes(std::string const& _s, StringDataType _t = FromHex, + DataAlignType _alignType = DataAlignType::AlignRight) + : FixedBytes(_t == FromHex ? *fromHexString(_s) : bcos::asBytes(_s), _alignType) + {} + + // Convert to Arith type. + operator ArithType() const { return fromBigEndian(m_data); } + explicit operator bool() const + { + return std::any_of(m_data.begin(), m_data.end(), [](byte _b) { return _b != 0; }); + } + bool operator==(FixedBytes const& _comparedFixedBytes) const + { + return m_data == _comparedFixedBytes.m_data; + } + bool operator!=(FixedBytes const& _comparedFixedBytes) const + { + return m_data != _comparedFixedBytes.m_data; + } + bool operator<(FixedBytes const& _comparedFixedBytes) const + { + for (unsigned index = 0; index < N; index++) + { + if (m_data[index] < _comparedFixedBytes[index]) + { + return true; + } + else if (m_data[index] > _comparedFixedBytes[index]) + { + return false; + } + } + return false; + } + bool operator>=(FixedBytes const& _comparedFixedBytes) const + { + return !operator<(_comparedFixedBytes); + } + bool operator<=(FixedBytes const& _comparedFixedBytes) const + { + return operator==(_comparedFixedBytes) || operator<(_comparedFixedBytes); + } + bool operator>(FixedBytes const& _comparedFixedBytes) const + { + return !operator<=(_comparedFixedBytes); + } + FixedBytes& operator^=(FixedBytes const& _rightFixedBytes) + { + for (unsigned index = 0; index < N; index++) + { + m_data[index] ^= _rightFixedBytes.m_data[index]; + } + return *this; + } + FixedBytes operator^(FixedBytes const& _rightFixedBytes) const + { + return FixedBytes(*this) ^= _rightFixedBytes; + } + FixedBytes& operator|=(FixedBytes const& _rightFixedBytes) + { + for (unsigned index = 0; index < N; index++) + { + m_data[index] |= _rightFixedBytes.m_data[index]; + } + return *this; + } + FixedBytes operator|(FixedBytes const& _rightFixedBytes) const + { + return FixedBytes(*this) |= _rightFixedBytes; + } + FixedBytes& operator&=(FixedBytes const& _rightFixedBytes) + { + for (unsigned index = 0; index < N; index++) + { + m_data[index] &= _rightFixedBytes.m_data[index]; + } + return *this; + } + FixedBytes operator&(FixedBytes const& _rightFixedBytes) const + { + return FixedBytes(*this) &= _rightFixedBytes; + } + FixedBytes operator~() const + { + FixedBytes result; + for (unsigned index = 0; index < N; index++) + { + result[index] = ~m_data[index]; + } + return result; + } + // @returns a specified byte from the FixedBytes + byte& operator[](unsigned _index) { return m_data[_index]; } + byte operator[](unsigned _index) const { return m_data[_index]; } + + // @returns an abridged version of the hash as a user-readable hex string + std::string abridged() const { return *toHexString(ref().getCroppedData(0, 4)) + "..."; } + /// @returns the hash as a user-readable hex string. + std::string hex() const { return *toHexString(ref()); } + /// @returns the hash as a user-readable hex string with 0x perfix. + std::string hexPrefixed() const { return toHexStringWithPrefix(ref()); } + + /// @returns a mutable byte RefDataContainer to the object's data. + bytesRef ref() { return bytesRef(m_data.data(), N); } + /// @returns a constant byte RefDataContainer to the object's data. + bytesConstRef ref() const { return bytesConstRef(m_data.data(), N); } + /// @returns a mutable byte pointer to the object's data. + byte* data() { return m_data.data(); } + /// @returns a constant byte pointer to the object's data. + byte const* data() const { return m_data.data(); } + + /// @returns begin iterator. + auto begin() const -> typename std::array::const_iterator { return m_data.begin(); } + /// @returns end iterator. + auto end() const -> typename std::array::const_iterator { return m_data.end(); } + /// @returns a copy of the object's data as a byte vector. + bytes asBytes() const { return bytes(data(), data() + N); } + + /// Populate with random data. + template + void generateRandomFixedBytesByEngine(Engine& _eng) + { + std::uniform_int_distribution dis(0, 255); + for (auto& element : m_data) + { + element = dis(_eng); + } + } + + /// @returns a random valued object. + static FixedBytes generateRandomFixedBytes() + { + FixedBytes randomFixedBytes; + randomFixedBytes.generateRandomFixedBytesByEngine(s_fixedBytesEngine); + return randomFixedBytes; + } + + struct hash + { + /// Make a hash of the object's data. + size_t operator()(FixedBytes const& _value) const + { + return boost::hash_range(_value.m_data.cbegin(), _value.m_data.cend()); + } + }; + + template + inline FixedBytes& shiftBloom(FixedBytes const& _FixedBytes) + { + return (*this |= _FixedBytes.template bloomPart()); + } + + template + inline FixedBytes bloomPart() const + { + unsigned const c_bloomBits = M * 8; + unsigned const c_mask = c_bloomBits - 1; + unsigned const c_bloomBytes = (StaticLog2::result + 7) / 8; + + static_assert((M & (M - 1)) == 0, "M must be power-of-two"); + static_assert(P * c_bloomBytes <= N, "out of range"); + + FixedBytes ret; + byte const* p = data(); + for (unsigned i = 0; i < P; ++i) + { + unsigned index = 0; + for (unsigned j = 0; j < c_bloomBytes; ++j, ++p) + index = (index << 8) | *p; + index &= c_mask; + ret[M - 1 - index / 8] |= (1 << (index % 8)); + } + return ret; + } + + /// Returns the index of the first bit set to one, or size() * 8 if no bits are set. + inline unsigned firstBitSet() const + { + unsigned ret = 0; + for (auto d : m_data) + { + if (d) + { + for (;; ++ret, d <<= 1) + { + if (d & 0x80) + { + return ret; + } + } + } + else + { + ret += 8; + } + } + return ret; + } + + auto begin() { return m_data.begin(); } + auto end() { return m_data.end(); } + auto size() const { return SIZE; } + void clear() { m_data.fill(0); } + +private: + void constructFixedBytes(bytesConstRef _bytesData, DataAlignType _alignType) + { + m_data.fill(0); + auto copyDataSize = (std::min)((unsigned)_bytesData.size(), N); + switch (_alignType) + { + case DataAlignType::AlignLeft: + { + memcpy(m_data.data(), _bytesData.data(), copyDataSize); + break; + } + case DataAlignType::AlignRight: + { + auto startIndex = N - copyDataSize; + memcpy(m_data.data() + startIndex, _bytesData.data(), copyDataSize); + break; + } + case DataAlignType::AcquireEqual: + { + if (_bytesData.size() != N) + { + BCOS_LOG(WARNING) << LOG_DESC("ConstructFixedBytesFailed") + << LOG_KV("requiredLen", N) + << LOG_KV("dataLen", _bytesData.size()); + BOOST_THROW_EXCEPTION(ConstructFixedBytesFailed() << errinfo_comment( + "Require " + std::to_string(N) + " length input data")); + } + memcpy(m_data.data(), _bytesData.data(), N); + break; + } + } + } + +private: + std::array m_data; ///< The binary data. +}; + +template +class SecureFixedBytes : private FixedBytes +{ +public: + using DataAlignType = typename FixedBytes::DataAlignType; + using StringDataType = typename FixedBytes::StringDataType; + using ConstructorType = typename FixedBytes::ConstructorType; + SecureFixedBytes() = default; + explicit SecureFixedBytes( + bytesConstRef _fixedBytesRef, DataAlignType _alignType = DataAlignType::AlignRight) + : FixedBytes(_fixedBytesRef, _alignType) + {} + + template + explicit SecureFixedBytes( + FixedBytes const& _fixedBytes, DataAlignType _alignType = DataAlignType::AlignLeft) + : FixedBytes(_fixedBytes, _alignType) + {} + template + explicit SecureFixedBytes(SecureFixedBytes const& _secureFixedBytes, + DataAlignType _alignType = DataAlignType::AlignLeft) + : FixedBytes(_secureFixedBytes.makeInsecure(), _alignType) + {} + explicit SecureFixedBytes(byte const* _bytesPtr, ConstructorType _type) + : FixedBytes(_bytesPtr, _type) + {} + explicit SecureFixedBytes(std::string const& _stringData, + StringDataType _stringType = FixedBytes::FromHex, + DataAlignType _alignType = DataAlignType::AlignRight) + : FixedBytes(_stringData, _stringType, _alignType) + {} + SecureFixedBytes(SecureFixedBytes const& _c) = default; + ~SecureFixedBytes() { ref().cleanMemory(); } + SecureFixedBytes& operator=(SecureFixedBytes const& _secureFixedBytes) + { + if (&_secureFixedBytes == this) + { + return *this; + } + ref().cleanMemory(); + FixedBytes::operator=(static_cast const&>(_secureFixedBytes)); + return *this; + } + using FixedBytes::size; + + FixedBytes const& makeInsecure() const { return static_cast const&>(*this); } + FixedBytes& writable() + { + clear(); + return static_cast&>(*this); + } + + using FixedBytes::operator bool; + + // The obvious comparison operators. + bool operator==(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator==( + static_cast const&>(_c)); + } + bool operator!=(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator!=( + static_cast const&>(_c)); + } + bool operator<(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator<( + static_cast const&>(_c)); + } + bool operator>=(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator>=( + static_cast const&>(_c)); + } + bool operator<=(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator<=( + static_cast const&>(_c)); + } + bool operator>(SecureFixedBytes const& _c) const + { + return static_cast const&>(*this).operator>( + static_cast const&>(_c)); + } + + using FixedBytes::operator==; + using FixedBytes::operator!=; + using FixedBytes::operator<; + using FixedBytes::operator>=; + using FixedBytes::operator<=; + using FixedBytes::operator>; + + // The obvious binary operators. + SecureFixedBytes& operator^=(FixedBytes const& _c) + { + static_cast&>(*this).operator^=(_c); + return *this; + } + SecureFixedBytes operator^(FixedBytes const& _c) const + { + return SecureFixedBytes(*this) ^= _c; + } + SecureFixedBytes& operator|=(FixedBytes const& _c) + { + static_cast&>(*this).operator^=(_c); + return *this; + } + SecureFixedBytes operator|(FixedBytes const& _c) const + { + return SecureFixedBytes(*this) |= _c; + } + SecureFixedBytes& operator&=(FixedBytes const& _c) + { + static_cast&>(*this).operator^=(_c); + return *this; + } + SecureFixedBytes operator&(FixedBytes const& _c) const + { + return SecureFixedBytes(*this) &= _c; + } + + SecureFixedBytes& operator^=(SecureFixedBytes const& _c) + { + static_cast&>(*this).operator^=(static_cast const&>(_c)); + return *this; + } + SecureFixedBytes operator^(SecureFixedBytes const& _c) const + { + return SecureFixedBytes(*this) ^= _c; + } + SecureFixedBytes& operator|=(SecureFixedBytes const& _c) + { + static_cast&>(*this).operator^=(static_cast const&>(_c)); + return *this; + } + SecureFixedBytes operator|(SecureFixedBytes const& _c) const + { + return SecureFixedBytes(*this) |= _c; + } + SecureFixedBytes& operator&=(SecureFixedBytes const& _c) + { + static_cast&>(*this).operator^=(static_cast const&>(_c)); + return *this; + } + SecureFixedBytes operator&(SecureFixedBytes const& _c) const + { + return SecureFixedBytes(*this) &= _c; + } + SecureFixedBytes operator~() const + { + auto r = ~static_cast const&>(*this); + return static_cast(r); + } + + using FixedBytes::abridged; + + bytesConstRef ref() const { return FixedBytes::ref(); } + byte const* data() const { return FixedBytes::data(); } + + static SecureFixedBytes generateRandomFixedBytes() + { + SecureFixedBytes randomFixedBytes; + randomFixedBytes.generateRandomFixedBytesByEngine(s_fixedBytesEngine); + return randomFixedBytes; + } + using FixedBytes::firstBitSet; + + void clear() { ref().cleanMemory(); } +}; + +/// Fast equality operator for h256. +template <> +inline bool FixedBytes<32>::operator==(FixedBytes<32> const& _other) const +{ + const uint64_t* hash1 = (const uint64_t*)data(); + const uint64_t* hash2 = (const uint64_t*)_other.data(); + return (hash1[0] == hash2[0]) && (hash1[1] == hash2[1]) && (hash1[2] == hash2[2]) && + (hash1[3] == hash2[3]); +} + +/// Fast std::hash compatible hash function object for h256. +template <> +inline size_t FixedBytes<32>::hash::operator()(FixedBytes<32> const& value) const +{ + uint64_t const* data = reinterpret_cast(value.data()); + return boost::hash_range(data, data + 4); +} + +/// Stream I/O for the FixedBytes class. +template +inline std::ostream& operator<<(std::ostream& _out, FixedBytes const& _h) +{ + _out << *toHexString(_h); + return _out; +} + +template +inline std::istream& operator>>(std::istream& _in, FixedBytes& o_h) +{ + std::string s; + _in >> s; + o_h = FixedBytes(s, FixedBytes::FromHex, FixedBytes::AlignRight); + return _in; +} + +/// Stream I/O for the SecureFixedBytes class. +template +inline std::ostream& operator<<(std::ostream& _out, SecureFixedBytes const& _h) +{ + _out << "SecureFixedBytes#" << std::hex << typename FixedBytes::hash()(_h.makeInsecure()) + << std::dec; + return _out; +} + +// Common types of FixedBytes. +using h2048 = FixedBytes<256>; +using h1024 = FixedBytes<128>; +using h520 = FixedBytes<65>; +using h512 = FixedBytes<64>; +using h256 = FixedBytes<32>; +using h160 = FixedBytes<20>; +using h128 = FixedBytes<16>; +using h64 = FixedBytes<8>; +using h512s = std::vector; +using h256s = std::vector; +using h160s = std::vector; +using h256Set = std::set; +using h160Set = std::set; +using h256Hash = std::unordered_set; +using h160Hash = std::unordered_set; + +using Address = h160; +/// A vector of addresses. +using Addresses = h160s; +/// A hash set of addresses. +using AddressHash = std::unordered_set; +Address const ZeroAddress; + +/// Convert the given value into h160 (160-bit unsigned integer) using the right 20 bytes. +inline h160 right160(h256 const& _t) +{ + h160 ret; + memcpy(ret.data(), _t.data() + 12, 20); + return ret; +} + +/// Convert the given value into h160 (160-bit unsigned integer) using the left 20 bytes. +inline h160 left160(h256 const& _t) +{ + h160 ret; + memcpy(&ret[0], _t.data(), 20); + return ret; +} + +inline std::string toString(h256s const& _bs) +{ + std::ostringstream out; + out << "[ "; + for (h256 const& i : _bs) + out << i.abridged() << ", "; + out << "]"; + return out.str(); +} +// Convert from a 256-bit integer stack/memory entry into a 160-bit Address hash. +// Currently we just pull out the right (low-order in BE) 160-bits. +inline Address asAddress(u256 _item) +{ + return right160(h256(_item)); +} + +inline u256 fromAddress(Address _a) +{ + return (u160)_a; +} + +inline Address toAddress(std::string const& _address) +{ + auto address = fromHexString(_address); + if (address->size() == 20) + { + return Address(*address); + } + BOOST_THROW_EXCEPTION(InvalidAddress()); +} + +} // namespace bcos + +namespace std +{ +template <> +struct hash : bcos::h160::hash +{ +}; +template <> +struct hash : bcos::h256::hash +{ +}; +template <> +struct hash : bcos::h512::hash +{ +}; +} // namespace std diff --git a/bcos-utilities/bcos-utilities/IOServicePool.h b/bcos-utilities/bcos-utilities/IOServicePool.h new file mode 100644 index 0000000..d7d832b --- /dev/null +++ b/bcos-utilities/bcos-utilities/IOServicePool.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * m_limitations under the License. + * + * @file IOServicePool.h + * @date 2022-06-14 + */ + +#pragma once +#include +#include +namespace bcos +{ +class IOServicePool +{ +public: + using Ptr = std::shared_ptr; + + using IOService = boost::asio::io_context; + using ExecutorType = boost::asio::io_context::executor_type; + using Work = boost::asio::executor_work_guard; + using WorkPtr = std::unique_ptr; + IOServicePool(size_t _workerNum = std::thread::hardware_concurrency()) + : m_works(_workerNum), m_nextIOService(0) + { + // create the ioservices + for (size_t i = 0; i < _workerNum; i++) + { + m_ioServices.emplace_back(std::make_shared()); + } + } + + IOServicePool(const IOServicePool&) = delete; + IOServicePool& operator=(const IOServicePool&) = delete; + + void start() + { + if (m_running) + { + return; + } + m_running = true; + for (size_t i = 0; i < m_ioServices.size(); ++i) + { + m_works[i] = std::make_unique(m_ioServices[i]->get_executor()); + } + + // one io_context per thread + for (size_t i = 0; i < m_ioServices.size(); ++i) + { + auto ioService = m_ioServices[i]; + m_threads.emplace_back([ioService]() { ioService->run(); }); + } + } + + std::shared_ptr getIOService() + { + auto selectedIoService = (m_nextIOService % m_ioServices.size()); + m_nextIOService++; + return m_ioServices.at(selectedIoService); + } + + void stop() + { + if (!m_running) + { + return; + } + m_running = false; + // stop the io service + for (auto& ioService : m_ioServices) + { + ioService->stop(); + } + // stop the work + for (auto& work : m_works) + { + work.reset(); + } + // stop the thread + for (auto& thread : m_threads) + { + if (thread.get_id() != std::this_thread::get_id()) + { + thread.join(); + } + else + { + thread.detach(); + } + } + } + +private: + std::vector> m_ioServices; + std::vector m_works; + std::vector m_threads; + size_t m_nextIOService; + bool m_running = false; +}; +} // namespace bcos \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/JsonDataConvertUtility.h b/bcos-utilities/bcos-utilities/JsonDataConvertUtility.h new file mode 100644 index 0000000..7de1c71 --- /dev/null +++ b/bcos-utilities/bcos-utilities/JsonDataConvertUtility.h @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file JsonDataConvertUtility.h + */ + +#pragma once +#include "DataConvertUtility.h" +#include "Exceptions.h" +#include "FixedBytes.h" +#include + +namespace bcos +{ +inline std::string toJonString(byte _data) +{ + return "0x" + std::to_string(_data); +} +inline std::string toJonString(bytes const& _bytesData) +{ + return toHexStringWithPrefix(_bytesData); +} +template +std::string toJonString(boost::multiprecision::number> const& + _arithNumber) +{ + auto hexString = toHexString(toCompactBigEndian(_arithNumber, 1)); + return "0x" + ((*hexString)[0] == '0' ? (hexString->substr(1)) : *hexString); +} + +template +std::string toJonString(SecureFixedBytes const& _i) +{ + std::stringstream stream; + stream << "0x" << _i.makeInsecure().hex(); + return stream.str(); +} + +template +std::string toJonString(T const& _i) +{ + std::stringstream stream; + stream << "0x" << std::hex << _i; + return stream.str(); +} + +bytes jonStringToBytes(std::string const& _stringData) +{ + return *fromHexString(_stringData); +} + +template +FixedBytes jonStringToFixedBytes(std::string const& _s) +{ + if (_s.substr(0, 2) == "0x") + // Hex + return FixedBytes(_s.substr(2 + std::max(N * 2, (unsigned)(_s.size() - 2)) - N * 2)); + else if (_s.find_first_not_of("0123456789") == std::string::npos) + // Decimal + return (typename FixedBytes::ArithType)(_s); + else + // Binary + return FixedBytes(); +} + +template +boost::multiprecision::number> +jsonStringToInt(std::string const& _s) +{ + // Hex + if (_s.substr(0, 2) == "0x") + { + return fromBigEndian>>(*fromHexString(_s.substr(2))); + } + // Decimal + else if (_s.find_first_not_of("0123456789") == std::string::npos) + { + return boost::multiprecision::number>(_s); + } + else + { + BOOST_THROW_EXCEPTION( + bcos::BadCast() << errinfo_comment("can't convert " + _s + " to int")); + } +} + +inline u256 jonStringToU256(std::string const& _s) +{ + return jsonStringToInt<32>(_s); +} + +/// Convert a string representation of a number to an int +/// String can be a normal decimal number, or a hex prefixed by 0x or 0X, or an octal if prefixed by +/// 0 Returns 0 in case of failure +inline int64_t jsonStringToInt(std::string const& _s) +{ + return int64_t(jsonStringToInt<8>(_s)); +} + +inline Address jsonStringToAddress(std::string const& _s) +{ + return toAddress(_s); +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/Log.h b/bcos-utilities/bcos-utilities/Log.h new file mode 100644 index 0000000..97dcf6a --- /dev/null +++ b/bcos-utilities/bcos-utilities/Log.h @@ -0,0 +1,3 @@ +#pragma once + +#include "BoostLog.h" diff --git a/bcos-utilities/bcos-utilities/Ranges.h b/bcos-utilities/bcos-utilities/Ranges.h new file mode 100644 index 0000000..2cde16e --- /dev/null +++ b/bcos-utilities/bcos-utilities/Ranges.h @@ -0,0 +1,9 @@ +#pragma once + +#ifdef USE_STD_RANGES +#include +namespace RANGES = ::std::ranges; +#else +#include +namespace RANGES = ::ranges; +#endif \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/RefDataContainer.h b/bcos-utilities/bcos-utilities/RefDataContainer.h new file mode 100644 index 0000000..52dac92 --- /dev/null +++ b/bcos-utilities/bcos-utilities/RefDataContainer.h @@ -0,0 +1,213 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: manager the STL data without copy overhead + * @file RefDataContainer.h + * @date 2021-02-24 + */ +#pragma once +#include +#include +#include +#include +#include + +namespace bcos +{ + +template +class RefDataContainer +{ +public: + RefDataContainer() = default; + RefDataContainer(T* _data, size_t _count) : m_dataPointer(_data), m_dataCount(_count) {} + using RequiredStringPointerType = + std::conditional::value, std::string const*, std::string*>; + using RequiredVecType = std::conditional::value, + std::vector::type> const*, std::vector*>; + using RequiredStringRefType = + std::conditional::value, std::string const&, std::string&>; + + RefDataContainer(typename RequiredStringPointerType::type _data) + : m_dataPointer(reinterpret_cast(_data->data())), m_dataCount(_data->size() / sizeof(T)) + {} + + RefDataContainer(typename RequiredVecType::type _data) + : m_dataPointer(reinterpret_cast(_data->data())), m_dataCount(_data->size()) + {} + + RefDataContainer(typename RequiredStringRefType::type _data) + : m_dataPointer(reinterpret_cast(_data.data())), m_dataCount(_data.size() / sizeof(T)) + {} + + operator RefDataContainer() const + { + return RefDataContainer(m_dataPointer, m_dataCount); + } + + explicit operator bool() { return m_dataPointer && m_dataCount; } + + T& operator[](size_t _index) + { + assert(_index < m_dataCount); + return m_dataPointer[_index]; + } + + T const& operator[](size_t _index) const + { + assert(_index < m_dataCount); + return m_dataPointer[_index]; + } + + bool operator==(RefDataContainer _comparedContainer) const + { + return (data() == _comparedContainer.data()) && (size() == _comparedContainer.size()); + } + + bool operator!=(RefDataContainer _comparedContainer) const + { + return !(operator==(_comparedContainer)); + } + + T* data() const { return m_dataPointer; } + T* begin() const { return m_dataPointer; } + T* end() const { return m_dataPointer + m_dataCount; } + + size_t count() const { return m_dataCount; } + size_t size() const { return m_dataCount; } + std::vector toBytes() const + { + unsigned const char* dataPointer = reinterpret_cast(m_dataPointer); + return std::vector(dataPointer, dataPointer + m_dataCount * sizeof(T)); + } + + std::string toString() const + { + return std::string( + (char const*)m_dataPointer, ((char const*)m_dataPointer) + m_dataCount * sizeof(T)); + } + + bool empty() const { return (m_dataCount == 0); } + RefDataContainer getCroppedData(size_t _startIndex, size_t _count) const + { + if (m_dataPointer && _startIndex <= m_dataCount && _count <= m_dataCount && + _startIndex + _count <= m_dataCount) + { + return RefDataContainer(m_dataPointer + _startIndex, _count); + } + return RefDataContainer(); + } + + /** + * @brief Get the Cropped Data object + * + * @param _startIndex + * @return RefDataContainer + */ + RefDataContainer getCroppedData(size_t _startIndex) const + { + if (m_dataPointer && m_dataCount >= _startIndex) + { + return getCroppedData(_startIndex, (m_dataCount - _startIndex)); + } + return RefDataContainer(); + } + + bool dataOverlap(RefDataContainer _dataContainer) + { + // data overlap + if (begin() < _dataContainer.end() && _dataContainer.begin() < end()) + { + return true; + } + return false; + } + + // populate new RefDataContainer + void populate(RefDataContainer _dataContainer) + { + // data overlap + if (dataOverlap(_dataContainer)) + { + memmove((void*)_dataContainer.data(), (void*)data(), + (std::min)(_dataContainer.count(), count()) * sizeof(T)); + } + else + { + memcpy((void*)_dataContainer.data(), (void*)data(), + (std::min)(_dataContainer.count(), count()) * sizeof(T)); + } + // reset the remaining data to 0 + if (_dataContainer.count() > count()) + { + memset((void*)(_dataContainer.data() + count() * sizeof(T)), 0, + (_dataContainer.count() - count()) * sizeof(T)); + } + } + + void reset() + { + m_dataPointer = nullptr; + m_dataCount = 0; + } + + void retarget(T* _newDataPointer, size_t _newSize) + { + m_dataPointer = _newDataPointer; + m_dataCount = _newSize; + } + + void cleanMemory() + { + static std::atomic s_cleanCounter{0u}; + uint8_t* p = (uint8_t*)begin(); + size_t const len = (uint8_t*)end() - p; + size_t loop = len; + size_t count = s_cleanCounter; + while (loop--) + { + *(p++) = (uint8_t)count; + count += (17 + ((size_t)p & 0xf)); + } + p = (uint8_t*)memchr((uint8_t*)begin(), (uint8_t)count, len); + if (p) + count += (63 + (size_t)p); + s_cleanCounter = (uint8_t)count; + memset((uint8_t*)begin(), 0, len); + } + +private: + T* m_dataPointer = nullptr; + size_t m_dataCount = 0; +}; + +template +RefDataContainer ref(T& _data) +{ + return RefDataContainer(_data.data(), _data.size()); +} + +template +RefDataContainer ref(std::vector& _data) +{ + return RefDataContainer(_data.data(), _data.size()); +} + +template +RefDataContainer ref(std::vector const& _data) +{ + return RefDataContainer(_data.data(), _data.size()); +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/ThreadPool.h b/bcos-utilities/bcos-utilities/ThreadPool.h new file mode 100644 index 0000000..fcaf85f --- /dev/null +++ b/bcos-utilities/bcos-utilities/ThreadPool.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: threadpool that can execute tasks asyncly + * + * @file ThreadPool.h + * @author: yujiechen + * @date 2021-02-26 + */ + +#pragma once +#include "Common.h" +#include +#include +#include +#include + +namespace bcos +{ +class ThreadPool +{ +public: + typedef std::shared_ptr Ptr; + + explicit ThreadPool(const std::string& threadName, size_t size) : m_work(_ioService) + { + _threadName = threadName; + + for (size_t i = 0; i < size; ++i) + { + _workers.create_thread([this] { + bcos::pthread_setThreadName(_threadName); + _ioService.run(); + }); + } + } + void stop() + { + _ioService.stop(); + if (!_workers.is_this_thread_in()) + { + _workers.join_all(); + } + } + + ~ThreadPool() { stop(); } + + // Add new work item to the pool. + template + void enqueue(F f) + { + _ioService.post(f); + } + + bool hasStopped() { return _ioService.stopped(); } + +private: + std::string _threadName; + boost::thread_group _workers; + boost::asio::io_service _ioService; + // m_work ensures that io_service's run() function will not exit while work is underway + boost::asio::io_service::work m_work; +}; + +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/Timer.cpp b/bcos-utilities/bcos-utilities/Timer.cpp new file mode 100644 index 0000000..1370c23 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Timer.cpp @@ -0,0 +1,117 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for Timer + * @file Timer.cpp + * @author: yujiechen + * @date 2021-04-26 + */ +#include "Timer.h" +#include "Common.h" +#include "Log.h" +#include + +using namespace bcos; + +void Timer::start() +{ + if (!m_working) + { + return; + } + try + { + startTimer(); + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("startTimer exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } +} + +void Timer::startTimer() +{ + if (m_running || !m_timer) + { + return; + } + m_timer->expires_from_now(std::chrono::milliseconds(adjustTimeout())); + auto timer = std::weak_ptr(shared_from_this()); + // calls the timeout handler + m_timer->async_wait([timer](const boost::system::error_code& error) { + // the timer has been cancelled + if (error == boost::asio::error::operation_aborted) + { + return; + } + if (error) + { + BCOS_LOG(WARNING) << LOG_DESC("Timer async_wait error") << LOG_KV("error", error); + return; + } + try + { + auto t = timer.lock(); + if (!t) + { + return; + } + t->run(); + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("calls timeout handler failed") + << LOG_KV("errorInfo", boost::diagnostic_information(e)); + } + }); + m_running = true; +} + +// stop the timer +void Timer::stop() +{ + if (!m_working || !m_timer) + { + return; + } + if (!m_running) + { + return; + } + m_running = false; + // cancel the timer + m_timer->cancel(); +} + +void Timer::destroy() +{ + if (!m_working || !m_worker) + { + return; + } + m_working = false; + stop(); + m_ioService->stop(); + if (m_worker->get_id() != std::this_thread::get_id()) + { + m_worker->join(); + m_worker.reset(); + } + else + { + m_worker->detach(); + } +} \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/Timer.h b/bcos-utilities/bcos-utilities/Timer.h new file mode 100644 index 0000000..d44c270 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Timer.h @@ -0,0 +1,113 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief implementation for Timer + * @file Timer.h + * @author: yujiechen + * @date 2021-04-26 + */ +#pragma once +#include "Common.h" +#include +#include +namespace bcos +{ +class Timer : public std::enable_shared_from_this +{ +public: + explicit Timer(uint64_t _timeout, std::string const& _threadName = "timer") + : m_timeout(_timeout), + m_ioService(std::make_shared()), + m_timer(std::make_shared(*m_ioService)), + m_work(*m_ioService), + m_threadName(_threadName) + { + m_working = true; + m_worker.reset(new std::thread([&]() { + bcos::pthread_setThreadName(m_threadName); + while (m_working) + { + try + { + m_ioService->run(); + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("Exception in Worker Thread of timer") + << LOG_KV("error", boost::diagnostic_information(e)); + } + m_ioService->reset(); + } + })); + } + + virtual ~Timer() { destroy(); } + + virtual void destroy(); + virtual void start(); + virtual void stop(); + virtual void restart() + { + if (!m_working) + { + return; + } + stop(); + start(); + } + + virtual void reset(uint64_t _timeout) + { + m_timeout = _timeout; + restart(); + } + + virtual bool running() { return m_running; } + virtual int64_t timeout() { return m_timeout; } + + virtual void registerTimeoutHandler(std::function _timeoutHandler) + { + m_timeoutHandler = _timeoutHandler; + } + +protected: + virtual void startTimer(); + + // invoked everytime when it reaches the timeout + virtual void run() + { + if (m_timeoutHandler) + { + m_timeoutHandler(); + } + } + // adjust the timeout + virtual uint64_t adjustTimeout() { return m_timeout; } + std::atomic m_timeout = {0}; + + std::atomic_bool m_running = {false}; + std::atomic_bool m_working = {false}; + + std::shared_ptr m_ioService; + std::shared_ptr m_timer; + std::unique_ptr m_worker; + + std::function m_timeoutHandler; + // m_work ensures that io_service's run() function will not exit while work is underway + boost::asio::io_service::work m_work; + + std::string m_threadName; +}; +} // namespace bcos \ No newline at end of file diff --git a/bcos-utilities/bcos-utilities/Worker.cpp b/bcos-utilities/bcos-utilities/Worker.cpp new file mode 100644 index 0000000..5ba8e64 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Worker.cpp @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Worker.cpp + */ +#include "Worker.h" + +#if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN32_) +#include +#else +#include +#endif + +#include +#include +#include +#include +using namespace std; +using namespace bcos; + +void setThreadName(const char* _threadName) +{ +#if defined(__GLIBC__) + pthread_setname_np(pthread_self(), _threadName); +#elif defined(__APPLE__) + pthread_setname_np(_threadName); +#endif +} + +void Worker::startWorking() +{ + boost::unique_lock l(x_work); + if (m_workerThread) + { + WorkerState workerState = WorkerState::Stopped; + m_workerState.compare_exchange_strong(workerState, WorkerState::Starting); + m_workerStateNotifier.notify_all(); + } + else + { + m_workerState = WorkerState::Starting; + m_workerStateNotifier.notify_all(); + m_workerThread.reset(new thread([&]() { + setThreadName(m_threadName.c_str()); + while (m_workerState != WorkerState::Killing) + { + WorkerState ex = WorkerState::Starting; + { + // the condition variable-related lock + boost::unique_lock l(x_work); + m_workerState = WorkerState::Started; + } + + m_workerStateNotifier.notify_all(); + + try + { + initWorker(); + workerProcessLoop(); + finishWorker(); + } + catch (std::exception const& e) + { + BCOS_LOG(WARNING) << LOG_DESC("Exception thrown in Worker thread") + << LOG_KV("threadName", m_threadName) + << LOG_KV("errorMsg", boost::diagnostic_information(e)); + } + + { + // the condition variable-related lock + boost::unique_lock l(x_work); + ex = m_workerState.exchange(WorkerState::Stopped); + if (ex == WorkerState::Killing || ex == WorkerState::Starting) + m_workerState.exchange(ex); + } + m_workerStateNotifier.notify_all(); + + { + boost::unique_lock l(x_work); + while (m_workerState == WorkerState::Stopped) + m_workerStateNotifier.wait_for(l, boost::chrono::milliseconds(100)); + } + } + })); + } + + while (m_workerState == WorkerState::Starting) + m_workerStateNotifier.wait_for(l, boost::chrono::milliseconds(100)); +} + +void Worker::stopWorking() +{ + boost::unique_lock l(x_work); + if (m_workerThread) + { + WorkerState ex = WorkerState::Started; + if (!m_workerState.compare_exchange_strong(ex, WorkerState::Stopping)) + return; + m_workerStateNotifier.notify_all(); + while (m_workerState != WorkerState::Stopped) + { + m_workerStateNotifier.wait_for(l, boost::chrono::milliseconds(100)); + } + } +} + +void Worker::terminate() +{ + boost::unique_lock l(x_work); + if (m_workerThread) + { + if (m_workerState.exchange(WorkerState::Killing) == WorkerState::Killing) + return; // Somebody else is doing this + l.unlock(); + m_workerStateNotifier.notify_all(); + m_workerThread->join(); + + l.lock(); + m_workerThread.reset(); + } +} + +void Worker::workerProcessLoop() +{ + while (m_workerState == WorkerState::Started) + { + if (m_idleWaitMs) + this_thread::sleep_for(chrono::milliseconds(m_idleWaitMs)); + executeWorker(); + } +} diff --git a/bcos-utilities/bcos-utilities/Worker.h b/bcos-utilities/bcos-utilities/Worker.h new file mode 100644 index 0000000..f4b9931 --- /dev/null +++ b/bcos-utilities/bcos-utilities/Worker.h @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Worker.h + */ + +#pragma once + +#include "Common.h" +#include +#include +#include +#include + +namespace bcos +{ +enum class WorkerState +{ + Starting, + Started, + Stopping, + Stopped, + Killing +}; + +class Worker +{ +protected: + Worker(std::string _threadName = "worker", unsigned _idleWaitMs = 30) + : m_threadName(std::move(_threadName)), m_idleWaitMs(_idleWaitMs) + {} + virtual ~Worker() { terminate(); } + + /** + * @brief Set thread name for the worker + * @param _threadName: the thread name + */ + void setName(std::string const& _threadName) + { + if (!isWorking()) + m_threadName = _threadName; + } + + std::string const& threadName() const { return m_threadName; } + + // Starts worker thread by calling startedWorking + void startWorking(); + + // Stop worker thread + void stopWorking(); + + // Return true if the worker thread is working + bool isWorking() const + { + boost::unique_lock l(x_work); + return m_workerState == WorkerState::Started; + } + + // Called after thread is started from startWorking to init the worker + virtual void initWorker() {} + + // worker execute logic (Called continuously following sleep for m_idleWaitMs) + virtual void executeWorker() {} + + // schedule the task inner a loop before stop the worker thread + virtual void workerProcessLoop(); + bool shouldStop() const { return m_workerState != WorkerState::Started; } + + // Called when is to be stopped, just prior to thread being joined. + virtual void finishWorker() {} + // stop the worker + void terminate(); + + std::atomic& workerState() { return m_workerState; } + unsigned idleWaitMs() const { return m_idleWaitMs; } + +private: + std::string m_threadName; + + unsigned m_idleWaitMs = 0; + + mutable boost::mutex x_work; + // the worker thread + std::unique_ptr m_workerThread; + // Notification when m_workerState changes + mutable boost::condition_variable m_workerStateNotifier; + std::atomic m_workerState = {WorkerState::Starting}; +}; + +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/ZstdCompress.cpp b/bcos-utilities/bcos-utilities/ZstdCompress.cpp new file mode 100644 index 0000000..22d3990 --- /dev/null +++ b/bcos-utilities/bcos-utilities/ZstdCompress.cpp @@ -0,0 +1,94 @@ +/** + * @CopyRight: + * FISCO-BCOS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FISCO-BCOS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FISCO-BCOS. If not, see + * (c) 2016-2018 fisco-dev contributors. + * + * @brief : complement compress and uncompress with zstd + * + * @file ZstdCompress.cpp + * @author: lucasli + * @date 2022-09-22 + */ +#include "ZstdCompress.h" + +namespace bcos +{ +bool ZstdCompress::compress(bytesConstRef inputData, bytes& compressedData, int compressionLevel) +{ + // auto start_t = utcTimeUs(); + size_t const cBuffSize = ZSTD_compressBound(inputData.size()); + compressedData.resize(cBuffSize); + auto compressedDataPtr = const_cast(static_cast(&compressedData[0])); + auto inputDataPtr = static_cast(inputData.data()); + size_t const compressedSize = ZSTD_compress( + compressedDataPtr, cBuffSize, inputDataPtr, inputData.size(), compressionLevel); + auto code = ZSTD_isError(compressedSize); + if (code) + { + // if code == 1, means compress failed + BCOS_LOG(ERROR) << LOG_BADGE("ZstdCompress") + << LOG_DESC("compress failed, error code check failed") + << LOG_KV("code", code); + return false; + } + compressedData.resize(compressedSize); +#if 0 + BCOS_LOG(DEBUG) << LOG_BADGE("ZstdCompress") << LOG_DESC("Compress") + << LOG_KV("org_len", inputData.size()) << LOG_KV("compressed_len", compressedSize) + << LOG_KV("ratio", (float)inputData.size() / (float)compressedData.size()) + << LOG_KV("timecost", (utcTimeUs() - start_t)); +#endif + + return true; +} + +bool ZstdCompress::uncompress(bytesConstRef compressedData, bytes& uncompressedData) +{ + // auto start_t = utcTimeUs(); + size_t const cBuffSize = ZSTD_getFrameContentSize(compressedData.data(), compressedData.size()); + if (0 == cBuffSize || ZSTD_CONTENTSIZE_UNKNOWN == cBuffSize || + ZSTD_CONTENTSIZE_ERROR == cBuffSize) + { + BCOS_LOG(ERROR) << LOG_BADGE("ZstdUncompress") + << LOG_DESC("compress failed, compressedData size error") + << LOG_KV("compressedData size", cBuffSize); + return false; + } + + uncompressedData.resize(cBuffSize); + auto uncompressedDataPtr = const_cast(static_cast(&uncompressedData[0])); + auto compressedDataPtr = static_cast(compressedData.data()); + size_t const uncompressSize = + ZSTD_decompress(uncompressedDataPtr, cBuffSize, compressedDataPtr, compressedData.size()); + auto code = ZSTD_isError(uncompressSize); + if (code) + { + // if code == 1, means uncompress failed + BCOS_LOG(ERROR) << LOG_BADGE("ZstdUncompress") + << LOG_DESC("uncompress failed, error code check failed") + << LOG_KV("code", code); + return false; + } + uncompressedData.resize(uncompressSize); +#if 0 + BCOS_LOG(DEBUG) << LOG_BADGE("ZstdUncompress") << LOG_DESC("uncompress") + << LOG_KV("org_len", uncompressSize) + << LOG_KV("compress_len", compressedData.size()) + << LOG_KV("ratio", (float)uncompressSize / (float)compressedData.size()) + << LOG_KV("timecost", (utcTimeUs() - start_t)); +#endif + + return true; +} +} // namespace bcos diff --git a/bcos-utilities/bcos-utilities/ZstdCompress.h b/bcos-utilities/bcos-utilities/ZstdCompress.h new file mode 100644 index 0000000..a085361 --- /dev/null +++ b/bcos-utilities/bcos-utilities/ZstdCompress.h @@ -0,0 +1,37 @@ +/** + * @CopyRight: + * FISCO-BCOS is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * FISCO-BCOS is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with FISCO-BCOS. If not, see + * (c) 2016-2018 fisco-dev contributors. + * + * @brief : complement compress and uncompress with zstd + * + * @file ZstdCompress.h + * @author: lucasli + * @date 2022-09-22 + */ +#pragma once +#include "Common.h" +#include "zstd.h" + +namespace bcos +{ + +class ZstdCompress +{ +public: + static bool compress(bytesConstRef inputData, bytes& compressedData, int compressionLevel); + static bool uncompress(bytesConstRef compressedData, bytes& uncompressedData); +}; + +} // namespace bcos diff --git a/bcos-utilities/test/CMakeLists.txt b/bcos-utilities/test/CMakeLists.txt new file mode 100644 index 0000000..73b0776 --- /dev/null +++ b/bcos-utilities/test/CMakeLists.txt @@ -0,0 +1,28 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for ut of bcos-utilities +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +file(GLOB_RECURSE SOURCES "*.cpp") + +# cmake settings +set(TEST_BINARY_NAME test-bcos-utilities) +find_package(Boost REQUIRED COMPONENTS unit_test_framework) + +add_executable(${TEST_BINARY_NAME} ${SOURCES}) +target_include_directories(${TEST_BINARY_NAME} PRIVATE . ${CMAKE_SOURCE_DIR}) + +target_link_libraries(${TEST_BINARY_NAME} bcos-utilities Boost::unit_test_framework) +add_test(NAME ${TEST_BINARY_NAME} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND ${TEST_BINARY_NAME}) diff --git a/bcos-utilities/test/unittests/libutilities/Base64Test.cpp b/bcos-utilities/test/unittests/libutilities/Base64Test.cpp new file mode 100644 index 0000000..1f8ffd7 --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/Base64Test.cpp @@ -0,0 +1,98 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the Base64 + * @file Base64.cpp + */ +#include "bcos-utilities/Base64.h" +#include "bcos-utilities/DataConvertUtility.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include + +using namespace bcos; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(Base64, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testBase64DecodeBytes) +{ + const std::string encodeStr = "MTIzNEFCY2Q="; + auto decodeStr = base64DecodeBytes(encodeStr); + std::string oriStr; + for (size_t i = 0; i < decodeStr->size(); i++) + { + oriStr += char((*decodeStr)[i]); + } + BOOST_CHECK(oriStr == "1234ABcd"); + + std::string originString = "1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b"; + bytes originBytes = *fromHexString(originString); + std::string base64Str = base64Encode(bytesConstRef(originBytes.data(), originBytes.size())); + std::cout << "base64Encode for " << *toHexString(originBytes) << " is: " << base64Str + << std::endl; + // decode the base64Str + auto decodedBytes = base64DecodeBytes(base64Str); + std::cout << "decodedBytes is: " << *toHexString(*decodedBytes) << std::endl; + BOOST_CHECK(*toHexString(*decodedBytes) == originString); + + auto encodedStr = base64Encode(originString); + std::string decodedString = base64Decode(encodedStr); + std::cout << "encodedStr for " << originString << " is " << encodedStr << std::endl; + std::cout << "decodedString for " << originString << " is " << decodedString << std::endl; + BOOST_CHECK(decodedString == originString); +} + +BOOST_AUTO_TEST_CASE(testBase64Encode) +{ + const std::string decodeStr = "1234ABcd"; + BOOST_CHECK(base64Encode(decodeStr) == "MTIzNEFCY2Q="); +} + +BOOST_AUTO_TEST_CASE(testBase64Codec) +{ + std::string org = + "aabbddeejlaskdjfaksldfjaksdjflkasdjfkasldjfkasdjfkalsdjfkaljfdk98qe9r8eq-" + "9r0qw0eriq0wepotlasadf"; + auto toBase64Length = [](size_t l) -> size_t { return (l + 2) / 3 * 4; }; + for (int i = 0; i < 100; ++i) + { + std::string s = org + std::to_string(i); + auto base64 = base64Encode(s); + BOOST_CHECK_EQUAL(base64.size(), toBase64Length(s.size())); + auto s0 = base64Decode(base64); + BOOST_CHECK_EQUAL(s0.size(), s.size()); + BOOST_CHECK_EQUAL(s, s0); + auto bytes = base64DecodeBytes(base64); + BOOST_CHECK_EQUAL(bytes->size(), s.size()); + auto s1 = std::string(bytes->begin(), bytes->end()); + BOOST_CHECK_EQUAL(s1.size(), s.size()); + BOOST_CHECK_EQUAL(s, s1); + } +} + +BOOST_AUTO_TEST_CASE(testBase64CodecZero) +{ + std::vector v(100, '\0'); + auto ev = base64Encode((uint8_t*)v.data(), v.size()); + auto ov = base64Decode(ev); + BOOST_CHECK_EQUAL(ov.size(), 100); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/CommonTest.cpp b/bcos-utilities/test/unittests/libutilities/CommonTest.cpp new file mode 100644 index 0000000..f2b6766 --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/CommonTest.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief: unit test for Common.* of bcos-utilities + * + * @file CommonTest.cpp + * @author: yujiechen + * @date 2021-02-24 + */ + + +#include "bcos-utilities/Common.h" +#include "bcos-utilities/Error.h" +#include "bcos-utilities/Exceptions.h" +#include "bcos-utilities/Ranges.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include + + +using namespace bcos; +using namespace std; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(DevcoreCommonTest, TestPromptFixture) +/// test Arith Calculations +BOOST_AUTO_TEST_CASE(testArithCal) +{ + ///=========test u2s================== + u256 u_bigint("343894723987432"); + bigint c_end = bigint(1) << 256; + BOOST_CHECK(u2s(u_bigint) == u_bigint); + u_bigint = Invalid256; + BOOST_CHECK(u2s(u_bigint) < s256(0)); + u_bigint = u256("0xa170d8e0ae1b57d7ecc121f6fe5ceb03c1267801ff720edd2f8463e7effac6c6"); + BOOST_CHECK(u2s(u_bigint) < s256(0)); + BOOST_CHECK(u2s(u_bigint) == s256(-(c_end - u_bigint))); + u_bigint = u256("0x7170d8e0ae1b57d7ecc121f6fe5ceb03c1267801ff720edd2f8463e7effac6c6"); + BOOST_CHECK(u2s(u_bigint) == u_bigint); + ///=========test s2u================== + s256 s_bigint("0x7170d8e0ae1b57d7ecc121f6fe5ceb03c1267801ff720edd2f8463e7effac6c6"); + BOOST_CHECK(s2u(s_bigint) == s_bigint); + s_bigint = s256("0xf170d8e0ae1b57d7ecc121f6fe5ceb03c1267801ff720edd2f8463e7effac6c6"); + BOOST_CHECK(s2u(s_bigint) == u256(c_end + s_bigint)); + ///=========test exp10================== + BOOST_CHECK(exp10<1>() == u256(10)); + BOOST_CHECK(exp10<9>() == u256(1000000000)); + BOOST_CHECK(exp10<0>() == u256(1)); +} +/// test utcTime +BOOST_AUTO_TEST_CASE(testUtcTime) +{ + uint64_t old_time = utcTime(); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + BOOST_CHECK(old_time < utcTime()); +} + +BOOST_AUTO_TEST_CASE(testGuards) +{ + Mutex mutex; + int count = 0; + int max = 8; + + auto f = [&]() { + Guard l(mutex); + count++; + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + }; + + // auto begin = std::chrono::high_resolution_clock::now(); + + thread* t = new thread[max]; + for (int i = 0; i < max; i++) + { + t[i] = thread(f); + } + + for (int i = 0; i < max; i++) + { + t[i].join(); + } + + // auto duration = std::chrono::duration_cast( + // std::chrono::high_resolution_clock::now() - begin); + + BOOST_CHECK(count == max); + + // uint64_t end_time = end.tv_sec * 1000000 + end.tv_usec; + // uint64_t begin_time = begin.tv_sec * 1000000 + begin.tv_usec; + // BOOST_CHECK((end_time - begin_time) >= (uint64_t(max) * 1000)); + delete[] t; +} + +BOOST_AUTO_TEST_CASE(testWriteGuard) +{ + SharedMutex mutex; + int count = 0; + int max = 8; + + auto f = [&]() { + WriteGuard l(mutex); + count++; + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + }; + + // struct timeval begin; + // gettimeofday(&begin, NULL); + + thread* t = new thread[max]; + for (int i = 0; i < max; i++) + { + t[i] = thread(f); + } + + for (int i = 0; i < max; i++) + { + t[i].join(); + } + + // struct timeval end; + // gettimeofday(&end, NULL); + + // uint64_t end_time = end.tv_sec * 1000000 + end.tv_usec; + // uint64_t begin_time = begin.tv_sec * 1000000 + begin.tv_usec; + + // BOOST_CHECK((end_time - begin_time) > (uint64_t(max) * 1000)); + BOOST_CHECK(count == max); + delete[] t; +} + +BOOST_AUTO_TEST_CASE(testRecursiveGuard) +{ + RecursiveMutex mutex; + int count = 0; + int max = 8; + + auto f0 = [&]() { + RecursiveGuard l(mutex); + count++; + }; + + auto f1 = [&]() { + RecursiveGuard l(mutex); + count++; + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + f0(); // recursive + }; + + // struct timeval begin; + // gettimeofday(&begin, NULL); + + thread* t = new thread[max]; + for (int i = 0; i < max; i++) + { + t[i] = thread(f1); + } + + for (int i = 0; i < max; i++) + { + t[i].join(); + } + + // struct timeval end; + // gettimeofday(&end, NULL); + + // uint64_t end_time = end.tv_sec * 1000000 + end.tv_usec; + // uint64_t begin_time = begin.tv_sec * 1000000 + begin.tv_usec; + // BOOST_CHECK((end_time - begin_time) >= (uint64_t(max) * 1000)); + BOOST_CHECK(count == 2 * max); + delete[] t; +} +BOOST_AUTO_TEST_CASE(testError) +{ + std::string errorMessage = " test error"; + int64_t errorCode = -100042; + Error::Ptr error = std::make_unique(errorCode, errorMessage); + BOOST_CHECK(error->errorCode() == errorCode); + BOOST_CHECK(error->errorMessage() == errorMessage); + + errorMessage = " test error234"; + errorCode = 100044; + error->setErrorCode(errorCode); + error->setErrorMessage(errorMessage); + BOOST_CHECK(error->errorCode() == errorCode); + BOOST_CHECK(error->errorMessage() == errorMessage); +} + +void testRange(RANGES::range auto range) +{ + BOOST_CHECK(RANGES::size(range) > 0); +} + +BOOST_AUTO_TEST_CASE(range) +{ + std::vector list = {1, 2, 3, 4, 5}; + + testRange(list); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/DataConvertUtilityTest.cpp b/bcos-utilities/test/unittests/libutilities/DataConvertUtilityTest.cpp new file mode 100644 index 0000000..5edb3ff --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/DataConvertUtilityTest.cpp @@ -0,0 +1,131 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief unit test for DataConvertUtility.*(mainly type covert) + * + * @file DataConvertUtility.cpp + * @author: yujiechen + */ +#include "bcos-utilities/DataConvertUtility.h" +#include "bcos-utilities/Exceptions.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include +#include + +using namespace bcos; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(CommonDataTests, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(testHex) +{ + // toHex && fromHexString + unsigned int round = 10; + unsigned int size = 10; + bytes hexVec(size, 0); + std::string hexStr; + std::string hexStrWithPrefix; + std::srand(std::time(nullptr)); + for (unsigned int i = 0; i < round; i++) + { + for (unsigned int j = 0; j < size; j++) + { + hexVec[j] = std::rand() % 16; + } + hexStr = *toHexString(hexVec); + hexStrWithPrefix = *toHexString(hexVec); + BOOST_CHECK(*fromHexString(hexStr) == hexVec); + BOOST_CHECK(*fromHexString(hexStrWithPrefix) == hexVec); + } + // fromHexString Exception + BOOST_CHECK_THROW(fromHexString("0934xyz"), BadHexCharacter); + BOOST_CHECK(isHexString("0934xyz") == false); + + BOOST_CHECK(isHexString("0x000abc") == true); + + BOOST_CHECK(isHexString("000123123") == true); +} + +/// test asString && asBytes +BOOST_AUTO_TEST_CASE(testStringTrans) +{ + std::string tmp_str = "abcdef012343"; + BOOST_CHECK(asString(asBytes(tmp_str)) == tmp_str); + BOOST_CHECK(asString(asBytes(tmp_str)) == tmp_str); + // construct random vector + unsigned int round = 10; + unsigned int size = 10; + std::string tmp_str_from_ref; + bytes tmp_bytes(size, 0); + for (unsigned int i = 0; i < round; i++) + { + for (unsigned int j = 0; j < size; j++) + { + tmp_bytes[j] = std::rand(); + } + tmp_str = asString(tmp_bytes); + tmp_str_from_ref = asString(ref(tmp_bytes)); + BOOST_CHECK(tmp_str == tmp_str_from_ref); + BOOST_CHECK(asBytes(tmp_str) == tmp_bytes); + } +} + +/// test toBigEndian && fromBigEndian +BOOST_AUTO_TEST_CASE(testBigEndian) +{ + // check u256 + u256 number("9832989324908234742342343243243234324324243432432234324"); + u160 number_u160("983298932"); + bytes big_endian_bytes = toBigEndian(number); + BOOST_CHECK(fromBigEndian(big_endian_bytes) == number); + BOOST_CHECK(fromBigEndian(toBigEndian(number_u160)) == number_u160); +} +/// test operator+ +BOOST_AUTO_TEST_CASE(testOperators) +{ + // test is_pod operator+ + std::string a_str = "abcdef"; + std::string b_str = "01234"; + std::vector a_vec(a_str.begin(), a_str.end()); + std::vector b_vec(b_str.begin(), b_str.end()); + std::vector result = a_vec + b_vec; + BOOST_CHECK(std::string(result.begin(), result.end()) == (a_str + b_str)); + // test common operator+ + std::vector total_array; + std::vector a_str_array; + a_str_array.push_back("11"); + a_str_array.push_back("22"); + total_array = a_str_array; + std::vector b_str_array; + b_str_array.push_back("aa"); + b_str_array.push_back("cc"); + total_array.push_back("aa"); + total_array.push_back("cc"); + std::vector c_str_array = a_str_array + b_str_array; + BOOST_CHECK(c_str_array == total_array); + + // test toString + string32 s_32 = {{'a', 'b', 'c'}}; + std::string s = toString(s_32); + BOOST_CHECK(s == "abc"); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/JsonDataConvertUtilityTest.cpp b/bcos-utilities/test/unittests/libutilities/JsonDataConvertUtilityTest.cpp new file mode 100644 index 0000000..178f502 --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/JsonDataConvertUtilityTest.cpp @@ -0,0 +1,110 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the FixedBytes + * @file FixedBytesTest.cpp + * @author: chaychen + */ + +#include "bcos-utilities/JsonDataConvertUtility.h" +#include "bcos-utilities/DataConvertUtility.h" +#include "bcos-utilities/FixedBytes.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include + +using namespace bcos; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(FixedBytes, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testLeft160) +{ + const std::string str = "0x067150c07dab4facb7160e075548007e067150c07dab4facb7160e075548007e"; + h256 h = jonStringToFixedBytes<32>(str); + BOOST_CHECK("0x067150c07dab4facb7160e075548007e067150c0" == toJonString(left160(h))); +} + +BOOST_AUTO_TEST_CASE(testRight160) +{ + const std::string str = "0x067150c07dab4facb7160e075548007e067150c07dab4facb7160e075548007e"; + h256 h = jonStringToFixedBytes<32>(str); + BOOST_CHECK("0x5548007e067150c07dab4facb7160e075548007e" == toJonString(right160(h))); + // test u256 + h256 h256Data( + *fromHexString("12b5155eda010a5b7ae26a4a268e466a4b8d31547ad875fce9ab298c639a1b2f")); + // trans h256Data to u256 + u256 value(h256Data); + // trans value to h256 again + h256 convertedH256Data = value; + std::cout << "### value: " << value << ", h256Data:" << *toHexString(h256Data) + << "convertedH256Data" << *toHexString(convertedH256Data) << std::endl; + BOOST_CHECK(convertedH256Data == h256Data); +} + +BOOST_AUTO_TEST_CASE(testToJonString) +{ + h64 a("0xbaadf00ddeadbeef"); + uint64_t c = 38990234243; + bytes d = {0xff, 0x0, 0xef, 0xbc}; + + BOOST_CHECK(toJonString(a) == "0xbaadf00ddeadbeef"); + BOOST_CHECK(toJonString(c) == "0x913ffc283"); + BOOST_CHECK(toJonString(d) == "0xff00efbc"); +} + +BOOST_AUTO_TEST_CASE(testJonStringToBytes) +{ + bytes a = {0xff, 0xaa, 0xbb, 0xcc}; + bytes b = {0x03, 0x89, 0x90, 0x23, 0x42, 0x43}; + BOOST_CHECK(a == jonStringToBytes("0xffaabbcc")); + BOOST_CHECK(b == jonStringToBytes("38990234243")); + BOOST_CHECK(bytes() == jonStringToBytes("")); + BOOST_CHECK_THROW(jonStringToBytes("Invalid hex chars"), bcos::BadHexCharacter); +} + +BOOST_AUTO_TEST_CASE(testJonStringToFixedBytes) +{ + h256 a("0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + BOOST_CHECK(a == jonStringToFixedBytes<32>( + "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); + h256 b("0x000000000000000000000000000000000000000000000000000000740c54b42f"); + BOOST_CHECK(b == jonStringToFixedBytes<32>("498423084079")); + BOOST_CHECK(h256() == jonStringToFixedBytes<32>("NotAHexadecimalOrDecimal")); +} + +BOOST_AUTO_TEST_CASE(testJsonStringToInt) +{ + BOOST_CHECK(43832124 == jsonStringToInt("43832124")); + BOOST_CHECK(1342356623 == jsonStringToInt("0x5002bc8f")); + BOOST_CHECK(3483942 == jsonStringToInt("015224446")); + BOOST_CHECK_THROW(jsonStringToInt("NotAHexadecimalOrDecimal"), std::exception); + + BOOST_CHECK(u256("983298932490823474234") == jsonStringToInt<32>("983298932490823474234")); + BOOST_CHECK(u256("983298932490823474234") == jsonStringToInt<32>("0x354e03915c00571c3a")); + BOOST_CHECK_THROW(jsonStringToInt<32>("NotAHexadecimalOrDecimal"), std::exception); + BOOST_CHECK_THROW(jsonStringToInt<16>("NotAHexadecimalOrDecimal"), bcos::BadCast); +} + +BOOST_AUTO_TEST_CASE(testJonStringToU256) +{ + BOOST_CHECK(u256("983298932490823474234") == jonStringToU256("983298932490823474234")); + BOOST_CHECK_THROW(jonStringToU256("NotAHexadecimalOrDecimal"), bcos::BadCast); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/RefDataContainerTest.cpp b/bcos-utilities/test/unittests/libutilities/RefDataContainerTest.cpp new file mode 100644 index 0000000..5e79f9b --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/RefDataContainerTest.cpp @@ -0,0 +1,178 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file RefDataContainerTest.cpp + * @date 2021-02-26 + */ + +#include "bcos-utilities/RefDataContainer.h" +#include "bcos-utilities/Common.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include + + +using namespace bcos; + +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(VectorRefTests, TestPromptFixture) + +/// test constructor of RefDataContainer: +/// case1: empty RefDataContainer +/// case2: pointing to part data of given object +BOOST_AUTO_TEST_CASE(testConstructor) +{ + // case1: empty RefDataContainer + RefDataContainer ref; + BOOST_CHECK(ref.data() == nullptr); + BOOST_CHECK(ref.count() == 0); + BOOST_CHECK(ref.empty() == true); + + // case2: pointing to part data of given object + unsigned int size = 10; + char* test_char = new char[size]; + RefDataContainer char_ref(test_char, size); + BOOST_CHECK(char_ref.empty() == false); + BOOST_CHECK(char_ref.data() == test_char); + BOOST_CHECK(char_ref.count() == size); + for (unsigned int i = 0; i < size - 1; i++) + { + test_char[i] = '0' + i; + BOOST_CHECK(char_ref[i] == test_char[i]); + } + if (size > 4) + { + char_ref[3] = 'a'; + BOOST_CHECK(test_char[3] == 'a'); + } + delete[] test_char; +} + +/// case3: create a new RefDataContainer pointing to the data part of a string (given as reference). +/// case4: create a new RefDataContainer pointing to the data part of a string (given as pointer). +BOOST_AUTO_TEST_CASE(testConstructString) +{ + // test reference + std::string str = "abcd"; + std::string str2 = "abcd"; + RefDataContainer string_ref(str); + BOOST_CHECK_EQUAL(string_ref.data(), str); + BOOST_CHECK_EQUAL(string_ref.size(), str.length()); + BOOST_CHECK_EQUAL(str, string_ref.toString()); + BOOST_CHECK((RefDataContainer)(&str) == string_ref); + BOOST_CHECK((RefDataContainer)(&str2) != string_ref); + // test retarget + string_ref.retarget(str2.c_str(), str2.length()); + BOOST_CHECK((RefDataContainer)(&str) != string_ref); + BOOST_CHECK((RefDataContainer)(&str2) == string_ref); + + // test pointer + std::string* pstr = &str; + RefDataContainer pstring_ref(pstr); + BOOST_CHECK_EQUAL(pstring_ref.data(), *pstr); + BOOST_CHECK_EQUAL(pstring_ref.size(), pstr->length()); + BOOST_CHECK_EQUAL(*pstr, pstring_ref.toString()); + BOOST_CHECK((RefDataContainer)(pstr) == pstring_ref); + pstr = &str2; + BOOST_CHECK((RefDataContainer)(pstr) != pstring_ref); + // to vector + // test retarget + pstring_ref.retarget(str2.c_str(), str2.length()); + BOOST_CHECK((RefDataContainer)(pstr) == pstring_ref); + pstr = &str; + BOOST_CHECK((RefDataContainer)(pstr) != pstring_ref); +} + +/// case4: create a new RefDataContainer pointing to the data part of a vector (given as pointer). +/// case5: create a new RefDataContainer pointing to the data part of a string (given as reference). +BOOST_AUTO_TEST_CASE(testConstructVector) +{ + unsigned int size = 10; + std::vector int_v1(size); + std::vector int_v2(size); + RefDataContainer ref_v1(&int_v1); + for (unsigned i = 0; i < size; i++) + { + ref_v1[i] = i; + int_v2[i] = i; + BOOST_CHECK(ref_v1[i] == (signed)(i)); + } + // vector to RefDataContainer + BOOST_CHECK(RefDataContainer(&int_v1) == ref_v1); +} + +BOOST_AUTO_TEST_CASE(testContentsEqual) +{ + std::vector v1(10, 19); + std::vector v2(10, 19); + RefDataContainer ref_v1(&v1); + BOOST_CHECK(RefDataContainer(&v2) != ref_v1); +} + +BOOST_AUTO_TEST_CASE(testEmptyCropped) +{ + std::vector v1(1, 19); + RefDataContainer origin = ref(v1); + RefDataContainer ret = origin.getCroppedData(2, 10); + BOOST_CHECK(ret.empty() == true); +} + +// test function "Overlap" +BOOST_AUTO_TEST_CASE(testOverlap) +{ + /// ====test string Overlap ==== + unsigned int size = 10; + std::string str(size, 0); + for (unsigned i = 0; i < size; i++) + { + str[i] = '0' + i; + } + RefDataContainer str_ref(str.c_str()); + // all overlap + RefDataContainer sub_str_ref1( + str_ref.data() + 1, (size_t)(std::min)((size_t)str.length() - 2, (size_t)5) / sizeof(char)); + // part overlap + RefDataContainer sub_str_ref2( + str_ref.data() + 3, (size_t)(std::min)((size_t)str.length() - 2, (size_t)5) / sizeof(char)); + // std::string tmp_str = "abcd"; + // RefDataContainer non_overlap_ref(tmp_str); + BOOST_CHECK(str_ref.dataOverlap(sub_str_ref1) == true); + BOOST_CHECK(str_ref.dataOverlap(sub_str_ref2) == true); + BOOST_CHECK(sub_str_ref1.dataOverlap(sub_str_ref2) == true); + + /// ====test vector Overlap ==== + std::vector v1_int(size); + RefDataContainer v1_ref(&v1_int); + for (unsigned i = 0; i < size; i++) + { + v1_ref[i] = i; + } + + RefDataContainer v2_ref(&(*v1_int.begin()) + (size_t)(std::min)(v1_int.size(), (size_t)(1)), + (std::min)(v1_int.size(), (size_t)(5))); + // test overlap + BOOST_CHECK(v2_ref.dataOverlap(v1_ref)); + std::vector tmp_v; + // test no-overlap + BOOST_CHECK(v2_ref.dataOverlap(RefDataContainer(&tmp_v)) == false); +} +BOOST_AUTO_TEST_SUITE_END() + +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/TestFixedBytes.cpp b/bcos-utilities/test/unittests/libutilities/TestFixedBytes.cpp new file mode 100644 index 0000000..d4ec915 --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/TestFixedBytes.cpp @@ -0,0 +1,56 @@ +#include "../../../bcos-utilities/FixedBytes.h" +#include +#include +#include +#include + +class TestFixedBytesFixture +{ +public: +}; + +constexpr static size_t LENGTH = 32; + +BOOST_FIXTURE_TEST_SUITE(TestFixedBytes, TestFixedBytesFixture) + +BOOST_AUTO_TEST_CASE(fromStringView) +{ + std::string hex = "abc"; + BOOST_CHECK_THROW( + bcos::FixedBytes(std::string_view(hex), bcos::FixedBytes<32>::FromHex), + std::invalid_argument); + + hex = "abcd"; + bcos::FixedBytes rightBytes(std::string_view{hex}, bcos::FixedBytes<32>::FromHex); + + BOOST_CHECK_EQUAL(rightBytes.size(), LENGTH); + std::string outHex; + boost::algorithm::hex_lower(rightBytes.begin(), rightBytes.end(), std::back_inserter(outHex)); + BOOST_CHECK_NE(outHex, hex); + auto expect = std::string(30 * 2, '0') + hex; + BOOST_CHECK_EQUAL(outHex, expect); + + outHex.clear(); + bcos::FixedBytes leftBytes(std::string_view{hex}, bcos::FixedBytes<32>::FromHex, + bcos::FixedBytes<32>::DataAlignType::AlignLeft); + boost::algorithm::hex_lower(leftBytes.begin(), leftBytes.end(), std::back_inserter(outHex)); + BOOST_CHECK_NE(outHex, hex); + expect = hex + std::string(30 * 2, '0'); + BOOST_CHECK_EQUAL(outHex, expect); + + outHex.clear(); + hex = "0x50d0902a2f0da872d528fb09f6102362919e017496d62eb28f2a9bcac5ca370b"; + bcos::FixedBytes prefixRightBytes(std::string_view{hex}, bcos::FixedBytes<32>::FromHex, + bcos::FixedBytes<32>::DataAlignType::AlignLeft); + boost::algorithm::hex_lower( + prefixRightBytes.begin(), prefixRightBytes.end(), std::back_inserter(outHex)); + BOOST_CHECK_EQUAL("0x" + outHex, hex); + + outHex.clear(); + bcos::FixedBytes prefixLeftBytes(std::string_view{hex}, bcos::FixedBytes<32>::FromHex, + bcos::FixedBytes<32>::DataAlignType::AlignLeft); + boost::algorithm::hex_lower( + prefixLeftBytes.begin(), prefixLeftBytes.end(), std::back_inserter(outHex)); + BOOST_CHECK_EQUAL("0x" + outHex, hex); +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/bcos-utilities/test/unittests/libutilities/WorkerTest.cpp b/bcos-utilities/test/unittests/libutilities/WorkerTest.cpp new file mode 100644 index 0000000..4fc68cc --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/WorkerTest.cpp @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Construct a new boost auto test case object for Worker + * + * @file Worker.cpp + * @author: tabsu + */ + +#include "bcos-utilities/Worker.h" +#include "bcos-utilities/Timer.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include +using namespace bcos; +using namespace std; + +namespace bcos +{ +namespace test +{ +class TestWorkerImpl : public Worker +{ +public: + TestWorkerImpl() : Worker("TestWorkerImpl", 1) + { + m_timer = std::make_shared(1); + m_timer->registerTimeoutHandler([]() { std::cout << "#### call timer" << std::endl; }); + } + void run() { startWorking(); } + void stop() { stopWorking(); } + +protected: + virtual void initWorker() { cout << "initWorker..." << endl; } + virtual void executeWorker() + { + cout << "count:" << count << endl; + count++; + } + virtual void finishWorker() { cout << "finishWorker..." << endl; } + +private: + int count = 0; + std::shared_ptr m_timer; +}; + +BOOST_FIXTURE_TEST_SUITE(Worker, TestPromptFixture) + +BOOST_AUTO_TEST_CASE(testWorker) +{ + TestWorkerImpl workerImpl; + workerImpl.run(); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + workerImpl.stop(); +} +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/libutilities/ZstdCompressTest.cpp b/bcos-utilities/test/unittests/libutilities/ZstdCompressTest.cpp new file mode 100644 index 0000000..6065bd4 --- /dev/null +++ b/bcos-utilities/test/unittests/libutilities/ZstdCompressTest.cpp @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Unit tests for the ZstdCompress + * @file ZstdCompressTest.cpp + */ +#include "bcos-utilities/ZstdCompress.h" +#include "bcos-utilities/testutils/TestPromptFixture.h" +#include +#include +#include + +using namespace bcos; +namespace bcos +{ +namespace test +{ +BOOST_FIXTURE_TEST_SUITE(ZstdCompressTests, TestPromptFixture) +BOOST_AUTO_TEST_CASE(testZstdCompress) +{ + auto payload = std::make_shared(10000, 'a'); + auto wrongCompressedData = std::make_shared(10000, 'b'); + std::shared_ptr compressData = std::make_shared(); + std::shared_ptr uncompressData = std::make_shared(); + + // compress uncompress success + bool retCompress = ZstdCompress::compress(ref(*payload), *compressData, 1); + BOOST_CHECK(retCompress); + ssize_t retUncompress = ZstdCompress::uncompress(ref(*compressData), *uncompressData); + BOOST_CHECK(retUncompress); + BOOST_CHECK_EQUAL(std::string(uncompressData->begin(), uncompressData->end()), + std::string(payload->begin(), payload->end())); + + // uncompress fail + bool retUncompressFail = ZstdCompress::uncompress(ref(*wrongCompressedData), *uncompressData); + BOOST_CHECK(!retUncompressFail); +} + +BOOST_AUTO_TEST_SUITE_END() +} // namespace test +} // namespace bcos diff --git a/bcos-utilities/test/unittests/main/main.cpp b/bcos-utilities/test/unittests/main/main.cpp new file mode 100644 index 0000000..bcf6dad --- /dev/null +++ b/bcos-utilities/test/unittests/main/main.cpp @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file main.cpp + * @author: yujiechen, jimmyshi + * @date 2021-02-24 + */ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include diff --git a/bcos-utilities/testutils/TestPromptFixture.h b/bcos-utilities/testutils/TestPromptFixture.h new file mode 100644 index 0000000..6f5c2f9 --- /dev/null +++ b/bcos-utilities/testutils/TestPromptFixture.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file: TestPromptFixture.h + * fixture class for test case prompt + */ + +#pragma once +#include "bcos-utilities/Common.h" +#include +#include + +namespace bcos +{ +namespace test +{ +class TestPrompt +{ +public: + static TestPrompt& get() + { + static TestPrompt instance; + return instance; + } + TestPrompt(TestPrompt const&) = delete; + void operator=(TestPrompt const&) = delete; + /** + * @brief : init every test-suite by printting the name of cases + * @param _maxTests + */ + void initTest(size_t _maxTests = 1) + { + m_currentTestName = "unknown"; + m_currentTestFileName = std::string(); + m_startTime = utcTime(); + m_currentTestCaseName = boost::unit_test::framework::current_test_case().p_name; + std::cout << "===== BCOS Test Case : " + m_currentTestCaseName << "=====" << std::endl; + m_maxTests = _maxTests; + m_currTest = 0; + }; + + /** + * @brief : release resources when test-suite finished + */ + void finishTest() + { + execTimeName res; + res.first = (double)(utcTime() - m_startTime); + res.second = caseName(); + std::cout << "#### Run " << res.second << " time elapsed: " << res.first << std::endl; + m_execTimeResults.push_back(res); + } + + void setCurrentTestFile(boost::filesystem::path const& _name) { m_currentTestFileName = _name; } + void setCurrentTestName(std::string const& _name) { m_currentTestName = _name; } + std::string const& testName() { return m_currentTestName; } + std::string const& caseName() { return m_currentTestCaseName; } + boost::filesystem::path const& testFile() { return m_currentTestFileName; } + +private: + TestPrompt() {} + size_t m_currTest; + size_t m_maxTests; + std::string m_currentTestName; + std::string m_currentTestCaseName; + boost::filesystem::path m_currentTestFileName; + typedef std::pair execTimeName; + std::vector m_execTimeResults; + int64_t m_startTime; +}; + +class TestPromptFixture +{ +public: + // init test-suite fixture + TestPromptFixture() { TestPrompt::get().initTest(); } + // release test-suite fixture + ~TestPromptFixture() { TestPrompt::get().finishTest(); } +}; +} // namespace test +} // namespace bcos diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt new file mode 100644 index 0000000..9f5db57 --- /dev/null +++ b/benchmark/CMakeLists.txt @@ -0,0 +1,4 @@ +find_package(Boost REQUIRED program_options) + +add_executable(merkleBench merkleBench.cpp) +target_link_libraries(merkleBench ${TOOL_TARGET} ${PROTOCOL_TARGET} bcos-crypto Boost::program_options) \ No newline at end of file diff --git a/benchmark/merkleBench.cpp b/benchmark/merkleBench.cpp new file mode 100644 index 0000000..804c6ad --- /dev/null +++ b/benchmark/merkleBench.cpp @@ -0,0 +1,128 @@ +#include "bcos-crypto/interfaces/crypto/CryptoSuite.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using Hasher = bcos::crypto::hasher::openssl::OpenSSL_SM3_Hasher; + +std::string generateTestData(int count) +{ + std::string buffer; + buffer.resize(count * Hasher::HASH_SIZE); + tbb::enumerable_thread_specific hasher; + tbb::parallel_for(tbb::blocked_range(0, count), [&hasher, &buffer](auto const& range) { + auto& localHasher = hasher.local(); + for (size_t i = range.begin(); i < range.end(); ++i) + { + localHasher.update(i); + std::span view(&buffer[i * Hasher::HASH_SIZE], Hasher::HASH_SIZE); + localHasher.final(view); + } + }); + + return buffer; +} + +void testOldMerkle(const std::vector& datas) +{ + auto cryptoSuite = std::make_shared( + std::make_shared(), nullptr, nullptr); + auto timePoint = std::chrono::high_resolution_clock::now(); + + auto root = bcos::protocol::calculateMerkleProofRoot(cryptoSuite, datas); + + auto duration = std::chrono::high_resolution_clock::now() - timePoint; + std::cout << "Root[old]: " << root << " " + << std::chrono::duration_cast(duration).count() << "ms" + << std::endl; +} + +void testNewMerkle(const std::vector& datas) +{ + auto timePoint = std::chrono::high_resolution_clock::now(); + std::vector out; + + bcos::crypto::merkle::Merkle merkle; + merkle.generateMerkle(datas, out); + + auto root = *(out.rbegin()); + std::string rootString; + boost::algorithm::hex_lower( + (char*)root.data(), (char*)(root.data() + root.size()), std::back_inserter(rootString)); + + auto duration = std::chrono::high_resolution_clock::now() - timePoint; + std::cout << "Root[new]: " << rootString << " " + << std::chrono::duration_cast(duration).count() << "ms" + << std::endl; +} + +int main(int argc, char* argv[]) +{ + boost::program_options::options_description options("Merkle benchmark"); + + // clang-format off + options.add_options() + ("type,t", boost::program_options::value()->default_value(0), "0 for old merkle, 1 for new merkle") + ("prepare,p", boost::program_options::value()->default_value(0), "Prepare test data, count of hashes") + ("filename,f", boost::program_options::value()->default_value("merkle_test.data"), "Test data file name") + ; + // clang-format on + boost::program_options::variables_map vm; + boost::program_options::store( + boost::program_options::parse_command_line(argc, argv, options), vm); + + if (vm.empty()) + { + options.print(std::cout); + return -1; + } + + auto filename = vm["filename"].as(); + auto count = vm["prepare"].as(); + if (count) + { + auto data = generateTestData(count); + std::ofstream fileOutput( + filename, std::ios_base::out | std::ios_base::binary | std::ios_base::trunc); + fileOutput << count; + fileOutput << data; + fileOutput.close(); + + std::cout << "Write " << count << " data successed!" << std::endl; + + return 0; + } + + std::ifstream fileInput(filename, std::ios_base::in | std::ios_base::binary); + fileInput >> count; + std::vector inputDatas; + inputDatas.reserve(count); + for (auto i = 0; i < count; ++i) + { + bcos::bytes data(Hasher::HASH_SIZE); + fileInput.read((char*)data.data(), (std::streamsize)data.size()); + + inputDatas.emplace_back(std::move(data)); + } + + auto type = vm["type"].as(); + if (type) + { + testNewMerkle(inputDatas); + } + else + { + testOldMerkle(inputDatas); + } + fileInput.close(); +} \ No newline at end of file diff --git a/cmake/CompilerSettings.cmake b/cmake/CompilerSettings.cmake new file mode 100644 index 0000000..8cbaad0 --- /dev/null +++ b/cmake/CompilerSettings.cmake @@ -0,0 +1,186 @@ +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# File: CompilerSettings.cmake +# Function: Common cmake file for setting compilation environment variables +# ------------------------------------------------------------------------------ + +#add_definitions(-Wno-unused-value -Wunused-parameter) + +set(CMAKE_CXX_STANDARD 20) +set(Boost_NO_WARN_NEW_VERSIONS ON) +message(STATUS "COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}") +if(("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")) + find_program(CCACHE_PROGRAM ccache) + + if(CCACHE_PROGRAM) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}") + endif() + + add_compile_options(-Werror) + add_compile_options(-Wall) + add_compile_options(-pedantic) + add_compile_options(-Wextra) + + # Ignore warnings + add_compile_options(-Wno-unused-parameter) + add_compile_options(-Wno-unused-variable) + add_compile_options(-Wno-error=unknown-pragmas) + add_compile_options(-Wno-error=deprecated-declarations) + + add_compile_options(-fno-omit-frame-pointer) + + if(NOT APPLE) + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + add_compile_options(-fvisibility=hidden) + add_compile_options(-fvisibility-inlines-hidden) + endif() + + # for boost json spirit + add_compile_options(-DBOOST_SPIRIT_THREADSAFE) + + # for tbb, TODO: https://software.intel.com/sites/default/files/managed/b2/d2/TBBRevamp.pdf + add_compile_options(-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1) + + # build deps lib Release + set(_only_release_configuration "-DCMAKE_BUILD_TYPE=Release") + + if(BUILD_STATIC) + SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") + SET(BUILD_SHARED_LIBRARIES OFF) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + + # Note: If bring the -static option, apple will fail to link + if(NOT APPLE) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") + endif() + + # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Bdynamic -ldl -lpthread -Wl,-Bstatic -static-libstdc++ ") + endif() + + if(TESTS) + add_compile_options(-DBOOST_TEST_THREAD_SAFE) + endif() + + # Configuration-specific compiler settings. + set(CMAKE_CXX_FLAGS_DEBUG "-Og -g") + set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g -DNDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG") + + if(USE_LD_GOLD) + execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) + if("${LD_VERSION}" MATCHES "GNU gold") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold") + endif() + endif() + + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + # Check that we've got GCC 10.0 or newer. + set(GCC_MIN_VERSION "10.0") + execute_process( + COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MARCH_TYPE}") + set(CMAKE_C_FLAGS "-std=c99 -fexceptions ${CMAKE_C_FLAGS} ${MARCH_TYPE}") + + add_compile_options(-fstack-protector-strong) + add_compile_options(-fstack-protector) + + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0) + add_compile_options(-fcoroutines) + endif() + + add_compile_options(-fPIC) + add_compile_options(-fconcepts-diagnostics-depth=10) + elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) + set(CMAKE_CXX_FLAGS_DEBUG "-O -g") + endif() + + add_compile_options(-fstack-protector) + add_compile_options(-Winconsistent-missing-override) + + # Some Linux-specific Clang settings. We don't want these for OS X. + if("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") + # Tell Boost that we're using Clang's libc++. Not sure exactly why we need to do. + add_definitions(-DBOOST_ASIO_HAS_CLANG_LIBCXX) + + # Use fancy colors in the compiler diagnostics + add_compile_options(-fcolor-diagnostics) + endif() + endif() + + if(SANITIZE_ADDRESS) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -fno-omit-frame-pointer -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fsanitize-address-use-after-scope -fsanitize-recover=all") + endif() + + if(SANITIZE_THREAD) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb -fno-omit-frame-pointer -fsanitize=thread") + endif() + + if(COVERAGE) + set(TESTS ON) + + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + set(CMAKE_CXX_FLAGS "-g --coverage ${CMAKE_CXX_FLAGS}") + set(CMAKE_C_FLAGS "-g --coverage ${CMAKE_C_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "--coverage ${CMAKE_SHARED_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "--coverage ${CMAKE_EXE_LINKER_FLAGS}") + elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + add_compile_options(-Wno-unused-command-line-argument) + set(CMAKE_CXX_FLAGS "-g -fprofile-arcs -ftest-coverage ${CMAKE_CXX_FLAGS}") + set(CMAKE_C_FLAGS "-g -fprofile-arcs -ftest-coverage ${CMAKE_C_FLAGS}") + endif() + endif() +elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC") + add_definitions(-DUSE_STD_RANGES) + add_compile_options(/std:c++latest) + add_compile_options(-bigobj) + + # MSVC only support static build + set(CMAKE_CXX_FLAGS_DEBUG "/MTd /DEBUG") + set(CMAKE_CXX_FLAGS_MINSIZEREL "/MT /Os") + set(CMAKE_CXX_FLAGS_RELEASE "/MT") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MT /DEBUG") + link_libraries(ws2_32 Crypt32 userenv) +else() + message(WARNING "Your compiler is not tested, if you run into any issues, we'd welcome any patches.") +endif() + +if(ALLOCATOR STREQUAL "tcmalloc") + # include(FindPkgConfig) + # pkg_check_modules(tcmalloc REQUIRED libtcmalloc) + # link_libraries(${tcmalloc_LINK_LIBRARIES}) +elseif(ALLOCATOR STREQUAL "jemalloc") + find_package(jemalloc REQUIRED) + link_libraries(jemalloc) +elseif(ALLOCATOR STREQUAL "mimalloc") + find_package(mimalloc REQUIRED) + link_libraries(mimalloc) +endif() + +# rust static library linking requirements for macos +if(APPLE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Security -framework CoreFoundation") +else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-as-needed -ldl") +endif() + +message("CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}") +message("CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}") +set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY ON) diff --git a/cmake/Coverage.cmake b/cmake/Coverage.cmake new file mode 100644 index 0000000..02551cc --- /dev/null +++ b/cmake/Coverage.cmake @@ -0,0 +1,31 @@ +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# File: Coverage.cmake +# Function: Define coverage related functions +# ------------------------------------------------------------------------------ +# REMOVE_FILE_PATTERN eg.: '/usr*' '${CMAKE_SOURCE_DIR}/deps**' '${CMAKE_SOURCE_DIR}/evmc*' ‘${CMAKE_SOURCE_DIR}/fisco-bcos*’ +function(config_coverage TARGET REMOVE_FILE_PATTERN) + find_program(LCOV_TOOL lcov) + message(STATUS "lcov tool: ${LCOV_TOOL}") + if (LCOV_TOOL) + add_custom_target(${TARGET} + COMMAND ${LCOV_TOOL} -o ${CMAKE_BINARY_DIR}/coverage.info.in -c -d ${CMAKE_BINARY_DIR}/ + COMMAND ${LCOV_TOOL} -r ${CMAKE_BINARY_DIR}/coverage.info.in ${REMOVE_FILE_PATTERN} -o ${CMAKE_BINARY_DIR}/coverage.info + COMMAND genhtml -q -o ${CMAKE_BINARY_DIR}/CodeCoverage ${CMAKE_BINARY_DIR}/coverage.info) + else () + message(FATAL_ERROR "Can't find lcov tool. Please install lcov") + endif() +endfunction() \ No newline at end of file diff --git a/cmake/GenerateSources.cmake b/cmake/GenerateSources.cmake new file mode 100644 index 0000000..93ccfed --- /dev/null +++ b/cmake/GenerateSources.cmake @@ -0,0 +1,21 @@ +function(protobuf_generate_cpp PROTO_SRCS PROTO_HDRS MESSAGES_PROTOS PROTO_PATH PROTO_DIR GENERATED_BASE_DIR GENERATED_DIR) + set(MESSAGES_SRCS) + set(MESSAGES_HDRS) + foreach(proto_file ${MESSAGES_PROTOS}) + get_filename_component(proto_dir_abs ${PROTO_DIR} ABSOLUTE) + set(proto_file_abs ${proto_dir_abs}/${proto_file}) + get_filename_component(basename ${proto_file} NAME_WE) + set(generated_files ${GENERATED_DIR}/${basename}.pb.cc ${GENERATED_DIR}/${basename}.pb.h) + + add_custom_command( + OUTPUT ${generated_files} + COMMAND protobuf::protoc --cpp_out ${GENERATED_BASE_DIR} -I ${PROTO_PATH} ${proto_file_abs} + COMMENT "Generating ${generated_files} from ${proto_file_abs}" + VERBATIM + ) + list(APPEND MESSAGES_SRCS ${GENERATED_DIR}/${basename}.pb.cc) + list(APPEND MESSAGES_HDRS ${GENERATED_DIR}/${basename}.pb.h) + endforeach() + set(PROTO_SRCS ${MESSAGES_SRCS} PARENT_SCOPE) + set(PROTO_HDRS ${MESSAGES_HDRS} PARENT_SCOPE) +endfunction(protobuf_generate_cpp) \ No newline at end of file diff --git a/cmake/IncludeDirectories.cmake b/cmake/IncludeDirectories.cmake new file mode 100644 index 0000000..2dc166f --- /dev/null +++ b/cmake/IncludeDirectories.cmake @@ -0,0 +1,16 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +# include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# include_directories(${CMAKE_CURRENT_BINARY_DIR}/bcos-protocol) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-protocol) +include_directories(${CMAKE_CURRENT_BINARY_DIR}/bcos-txpool) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-txpool) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-front) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-sealer) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-pbft) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-sync) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-gateway) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-rpc) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-security) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-tool) +# include_directories(${CMAKE_CURRENT_SOURCE_DIR}/fisco-bcos-tars-service) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/bcos-crypto) \ No newline at end of file diff --git a/cmake/Options.cmake b/cmake/Options.cmake new file mode 100644 index 0000000..4b8384c --- /dev/null +++ b/cmake/Options.cmake @@ -0,0 +1,150 @@ +# ------------------------------------------------------------------------------ + # Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# File: Options.cmake +# Function: Define common compilation options +# ------------------------------------------------------------------------------ + +macro(default_option O DEF) + if (DEFINED ${O}) + if (${${O}}) + set(${O} ON) + else () + set(${O} OFF) + endif() + else () + set(${O} ${DEF}) + endif() +endmacro() + +set(MARCH_TYPE "-mtune=generic") +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") + message(FATAL "The ${PROJECT_NAME} does not support compiling on 32-bit systems") +endif() + +EXECUTE_PROCESS(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE) +macro(configure_project) + set(NAME ${PROJECT_NAME}) + + if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING + "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) + endif() + + default_option(BUILD_STATIC OFF) + + default_option(NATIVE OFF) + set(USE_LD_GOLD ON) + if ("${ARCHITECTURE}" MATCHES "aarch64" OR "${ARCHITECTURE}" MATCHES "arm64") + set(NATIVE ON) + set(USE_LD_GOLD OFF) + endif() + if(NATIVE) + set(MARCH_TYPE "-march=native -mtune=native") + endif() + default_option(SANITIZE_ADDRESS OFF) + default_option(SANITIZE_THREAD OFF) + default_option(IPO OFF) + if(IPO) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + endif() + + default_option(TESTS OFF) + default_option(COVERAGE OFF) + + default_option(DEBUG OFF) + if (DEBUG) + add_definitions(-DFISCO_DEBUG) + endif() + + default_option(FULLNODE ON) + default_option(WITH_LIGHTNODE ON) + default_option(WITH_TIKV ON) + default_option(WITH_TARS_SERVICES ON) + default_option(WITH_SM2_OPTIMIZE ON) + default_option(WITH_CPPSDK ON) + default_option(WITH_BENCHMARK ON) + default_option(WITH_WASM ON) + + if(FULLNODE) + list(APPEND VCPKG_MANIFEST_FEATURES "fullnode") + endif() + if(WITH_LIGHTNODE) + list(APPEND VCPKG_MANIFEST_FEATURES "lightnode") + add_compile_definitions(WITH_LIGHTNODE) + endif() + if(WITH_TIKV) + list(APPEND VCPKG_MANIFEST_FEATURES "etcd") + add_compile_definitions(WITH_TIKV) + endif() + if(WITH_SM2_OPTIMIZE) + add_compile_definitions(WITH_SM2_OPTIMIZE) + endif() + + if(NOT ALLOCATOR) + set(ALLOCATOR "default") + endif() + + if(ALLOCATOR STREQUAL "tcmalloc") + include(ProjectTCMalloc) + link_libraries(TCMalloc) + elseif(ALLOCATOR STREQUAL "jemalloc") + list(APPEND VCPKG_MANIFEST_FEATURES "jemalloc") + elseif(ALLOCATOR STREQUAL "mimalloc") + list(APPEND VCPKG_MANIFEST_FEATURES "mimalloc") + else() + set(ALLOCATOR "default") + endif() + + if(WITH_WASM) + add_compile_definitions(WITH_WASM) + endif() + + if (NOT DEFINED VERSION_SUFFIX) + set(VERSION_SUFFIX "") + endif() +endmacro() + +macro(print_config NAME) + message("") + message("------------------------------------------------------------------------") + message("-- Configuring ${NAME} ${PROJECT_VERSION}${VERSION_SUFFIX}") + message("------------------------------------------------------------------------") + message("-- CMAKE Cmake version and location ${CMAKE_VERSION} (${CMAKE_COMMAND})") + message("-- COMPILER C++ compiler version ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}") + message("-- CMAKE_BUILD_TYPE Build type ${CMAKE_BUILD_TYPE}") + message("-- TARGET_PLATFORM Target platform ${CMAKE_SYSTEM_NAME} ${ARCHITECTURE}") + message("-- BUILD_STATIC Build static ${BUILD_STATIC}") + message("-- COVERAGE Build code coverage ${COVERAGE}") + message("-- TESTS Build tests ${TESTS}") + message("-- NATIVE Build native binary ${NATIVE}") + message("-- IPO Enable IPO optimization ${IPO}") + message("-- SANITIZE_ADDRESS Enable sanitize ${SANITIZE_ADDRESS}") + message("-- SANITIZE_THREAD Enable sanitize ${SANITIZE_THREAD}") + message("-- TOOLCHAIN_FILE CMake toolchain file ${CMAKE_TOOLCHAIN_FILE}") + message("-- ALLOCATOR Allocator ${ALLOCATOR}") + message("------------------------------------------------------------------------") + message("-- Components") + message("------------------------------------------------------------------------") + message("-- FULLNODE Build full node ${FULLNODE}") + message("-- WITH_LIGHTNODE Enable light node ${WITH_LIGHTNODE}") + message("-- WITH_TIKV Enable tikv ${WITH_TIKV}") + message("-- WITH_TARS_SERVICES Enable tars services ${WITH_TARS_SERVICES}") + message("-- WITH_SM2_OPTIMIZE Enable sm2 optimize ${WITH_SM2_OPTIMIZE}") + message("-- WITH_CPPSDK Enable cpp sdk ${WITH_CPPSDK}") + message("-- WITH_WASM Enable wasm ${WITH_WASM}") + message("------------------------------------------------------------------------") + message("") +endmacro() \ No newline at end of file diff --git a/cmake/ProjectBCOSWASM.cmake b/cmake/ProjectBCOSWASM.cmake new file mode 100644 index 0000000..fd157c2 --- /dev/null +++ b/cmake/ProjectBCOSWASM.cmake @@ -0,0 +1,69 @@ +include(ExternalProject) +include(GNUInstallDirs) + +if(CMAKE_HOST_WIN32) + set(USER_HOME "$ENV{USERPROFILE}") +else() + set(USER_HOME "$ENV{HOME}") +endif() + +message(${USER_HOME}) + +find_program(CARGO_COMMAND NAMES cargo REQUIRED PATHS "${USER_HOME}\\.cargo\\bin") +find_program(RUSTUP_COMMAND NAMES rustup REQUIRED PATHS "${USER_HOME}\\.cargo\\bin") + +if(NOT CARGO_COMMAND OR NOT RUSTUP_COMMAND) + message(FATAL_ERROR "cargo/rustup is not installed") +endif() + +find_program(RUSTC_COMMAND NAMES rustc REQUIRED PATHS "${USER_HOME}\\.cargo\\bin") +if(NOT CARGO_COMMAND OR NOT RUSTC_COMMAND) + message(FATAL_ERROR "rustc is not installed") +endif() + +execute_process(COMMAND ${RUSTC_COMMAND} -V OUTPUT_VARIABLE RUSTC_VERSION_INFO OUTPUT_STRIP_TRAILING_WHITESPACE) +STRING(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" RUSTC_VERSION ${RUSTC_VERSION_INFO}) +# if (${RUSTC_VERSION} VERSION_LESS "1.53.0") +# message(STATUS "rustc ${RUSTC_VERSION} is too old, executing `rustup update` to update it.") +# execute_process(COMMAND rustup update) +# endif() + +# same as https://github.com/WeBankBlockchain/WeDPR-Lab-Crypto/blob/main/rust-toolchain +if(NOT RUSTC_VERSION_REQUIRED) + set(RUSTC_VERSION_REQUIRED "nightly-2022-07-28") +endif() +message(STATUS "set rustc to ${RUSTC_VERSION_REQUIRED} of path ${CMAKE_CURRENT_SOURCE_DIR}/deps/src/") +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/src/) +execute_process(COMMAND rustup override set ${RUSTC_VERSION_REQUIRED} --path ${CMAKE_CURRENT_SOURCE_DIR}/deps/src/ OUTPUT_QUIET ERROR_QUIET) + +if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(BCOS_WASM_BUILD_MODE "debug") +else() + set(BCOS_WASM_BUILD_MODE "release") +endif() + +ExternalProject_Add(bcos_wasm_project + PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/deps + # DOWNLOAD_NO_PROGRESS 1 + GIT_REPOSITORY https://${URL_BASE}/FISCO-BCOS/bcos-wasm.git + GIT_TAG 5c05f91d55c7bd4e7d88d2461bbded57539c8127 + GIT_SHALLOW false + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CARGO_COMMAND} build && ${CARGO_COMMAND} build --release + INSTALL_COMMAND "" + LOG_DOWNLOAD 1 + LOG_CONFIGURE 1 + LOG_BUILD 0 + LOG_INSTALL 1 + BUILD_BYPRODUCTS /target/${BCOS_WASM_BUILD_MODE}/libbcos_wasm.a /FBWASM.h +) + +ExternalProject_Get_Property(bcos_wasm_project SOURCE_DIR) +set(HERA_INCLUDE_DIRS ${SOURCE_DIR}/include) +file(MAKE_DIRECTORY ${HERA_INCLUDE_DIRS}) # Must exist. + +add_library(fbwasm STATIC IMPORTED) +set_property(TARGET fbwasm PROPERTY IMPORTED_LOCATION ${SOURCE_DIR}/target/release/libbcos_wasm.a) +set_property(TARGET fbwasm PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include) +add_dependencies(fbwasm bcos_wasm_project evmc::instructions) diff --git a/cmake/ProjectGroupSig.cmake b/cmake/ProjectGroupSig.cmake new file mode 100644 index 0000000..1e41203 --- /dev/null +++ b/cmake/ProjectGroupSig.cmake @@ -0,0 +1,56 @@ +include(ExternalProject) +include(GNUInstallDirs) +ExternalProject_Add(GroupSigLib + PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/deps + DOWNLOAD_NAME group_sig_lib-b8b9164.tar.gz + DOWNLOAD_NO_PROGRESS 1 + URL https://${URL_BASE}/FISCO-BCOS/group-signature-lib/archive/9da5a205cb372b721a8581161e92580673a36a2d.tar.gz + URL_HASH SHA256=7749932bda2eb311ad41f0b8da21b1f4861317e98387e6d88fcb9415f698ec7a + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + BUILD_IN_SOURCE 1 +) + +ExternalProject_Get_Property(GroupSigLib SOURCE_DIR) +set(LIB_SUFFIX .a) +set(DEPS_INCLUDE_DIR ${SOURCE_DIR}/deps/include) +file(MAKE_DIRECTORY ${DEPS_INCLUDE_DIR}) + +find_library(GMP_LIBRARIES NAMES "libgmp.a") +find_path(GMP_INCLUDE_DIR "gmp.h") +if(NOT GMP_INCLUDE_DIR) + message(FATAL_ERROR "Please install libgmp first") +endif() +add_library(Gmp UNKNOWN IMPORTED GLOBAL) +set_property(TARGET Gmp PROPERTY IMPORTED_LOCATION ${GMP_LIBRARIES}) +set_property(TARGET Gmp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR}) + +add_library(Pbc STATIC IMPORTED GLOBAL) +set_property(TARGET Pbc PROPERTY IMPORTED_LOCATION ${SOURCE_DIR}/deps/lib/libpbc${LIB_SUFFIX}) +set_property(TARGET Pbc PROPERTY INTERFACE_LINK_LIBRARIES Gmp) +set_property(TARGET Pbc PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${DEPS_INCLUDE_DIR} ${GMP_INCLUDE_DIR}) +add_dependencies(Pbc GroupSigLib) + +add_library(PbcSig STATIC IMPORTED GLOBAL) +set_property(TARGET PbcSig PROPERTY IMPORTED_LOCATION ${SOURCE_DIR}/deps/lib/libpbc_sig${LIB_SUFFIX}) +set_property(TARGET PbcSig PROPERTY INTERFACE_LINK_LIBRARIES Pbc) +set_property(TARGET PbcSig PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${DEPS_INCLUDE_DIR}) +add_dependencies(PbcSig GroupSigLib) + +add_library(GroupSig STATIC IMPORTED GLOBAL) +set(GROUPSIG_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/deps/lib/libgroup_sig${LIB_SUFFIX}) +set(GROUPSIG_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/deps/include) + +file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/deps/lib) # Must exist. +file(MAKE_DIRECTORY ${GROUPSIG_INCLUDE_DIR}) # Must exist. + +find_package(cryptopp CONFIG REQUIRED) +set_property(TARGET GroupSig PROPERTY IMPORTED_LOCATION ${GROUPSIG_LIBRARY}) +set_property(TARGET GroupSig PROPERTY INTERFACE_LINK_LIBRARIES PbcSig Pbc Gmp cryptopp-static) +set_property(TARGET GroupSig PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${GROUPSIG_INCLUDE_DIR} ${DEPS_INCLUDE_DIR}) +add_dependencies(GroupSig GroupSigLib) +unset(SOURCE_DIR) diff --git a/cmake/ProjectSDF.cmake b/cmake/ProjectSDF.cmake new file mode 100644 index 0000000..ff9b432 --- /dev/null +++ b/cmake/ProjectSDF.cmake @@ -0,0 +1,29 @@ +include(ExternalProject) +include(GNUInstallDirs) + +EXECUTE_PROCESS(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE ARCHITECTURE) +set(SDF_LIB_NAME "libsdf-crypto.a") + +ExternalProject_Add(libsdf + PREFIX ${CMAKE_SOURCE_DIR}/deps + GIT_REPOSITORY https://${URL_BASE}/WeBankBlockchain/hsm-crypto.git + GIT_TAG b8a1f5e27cf87028d35f9c1ee80be535b312fa00 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= + BUILD_IN_SOURCE true + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 +) + +ExternalProject_Get_Property(libsdf INSTALL_DIR) + +set(HSM_INCLUDE_DIR ${INSTALL_DIR}/include/) +file(MAKE_DIRECTORY ${HSM_INCLUDE_DIR}) # Must exist. + +set(SDF_LIB "${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/${SDF_LIB_NAME}") + +add_library(SDF STATIC IMPORTED GLOBAL) +set_property(TARGET SDF PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${HSM_INCLUDE_DIR}) +set_property(TARGET SDF PROPERTY IMPORTED_LOCATION ${SDF_LIB}) +add_dependencies(SDF libsdf) +unset(INSTALL_DIR) \ No newline at end of file diff --git a/cmake/ProjectTCMalloc.cmake b/cmake/ProjectTCMalloc.cmake new file mode 100644 index 0000000..702c0d0 --- /dev/null +++ b/cmake/ProjectTCMalloc.cmake @@ -0,0 +1,43 @@ +include(ExternalProject) + +set(GPERFTOOLS_OPTIONS --disable-shared --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal) +set(TCMALLOC_LIB_NAME "libtcmalloc_minimal.a") +if (DEBUG) + set(GPERFTOOLS_OPTIONS "") + set(TCMALLOC_LIB_NAME "libtcmalloc${CMAKE_STATIC_LIBRARY_SUFFIX}") +endif() + +set(TCMALLOC_CONFIG ./configure CXXFLAGS=-DHAVE_POSIX_MEMALIGN_SYMBOL=1 --enable-frame-pointers ${GPERFTOOLS_OPTIONS} --prefix=${CMAKE_SOURCE_DIR}/deps/src/gperftools) + +set(TCMALLOC_MAKE make install) + +ExternalProject_Add(gperftools + PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/deps/ + DOWNLOAD_NAME gperftools-2.10.tar.gz + DOWNLOAD_NO_PROGRESS 1 + URL https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz + # https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/FISCO-BCOS/deps/gperftools-2.7.tar.gz + # https://raw.githubusercontent.com/FISCO-BCOS/LargeFiles/master/libs/gperftools-2.7.tar.gz + URL_HASH SHA256=83e3bfdd28b8bcf53222c3798d4d395d52dadbbae59e8730c4a6d31a9c3732d8 + BUILD_IN_SOURCE 1 + LOG_CONFIGURE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + CONFIGURE_COMMAND ${TCMALLOC_CONFIG} + BUILD_COMMAND ${TCMALLOC_MAKE} + INSTALL_COMMAND "" + BUILD_BYPRODUCTS /.libs/${TCMALLOC_LIB_NAME} +) + +ExternalProject_Get_Property(gperftools SOURCE_DIR) +add_library(TCMalloc STATIC IMPORTED GLOBAL) + +set(TCMALLOC_INCLUDE_DIR ${SOURCE_DIR}/include/) +set(TCMALLOC_LIBRARY ${SOURCE_DIR}/.libs/${TCMALLOC_LIB_NAME}) +file(MAKE_DIRECTORY ${TCMALLOC_INCLUDE_DIR}) # Must exist. + +set_property(TARGET TCMalloc PROPERTY IMPORTED_LOCATION ${TCMALLOC_LIBRARY}) +set_property(TARGET TCMalloc PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${TCMALLOC_INCLUDE_DIR}) + +add_dependencies(TCMalloc gperftools) +unset(SOURCE_DIR) diff --git a/cmake/ProjectTiKVClient.cmake b/cmake/ProjectTiKVClient.cmake new file mode 100644 index 0000000..bcbcf13 --- /dev/null +++ b/cmake/ProjectTiKVClient.cmake @@ -0,0 +1,36 @@ +include(ExternalProject) +include(GNUInstallDirs) + +if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(TIKV_BUILD_MODE "debug") +else() + set(TIKV_BUILD_MODE "release") +endif() + +find_program(CARGO_COMMAND NAMES cargo REQUIRED PATHS "${USER_HOME}\\.cargo\\bin") + +ExternalProject_Add(tikv_client_project + PREFIX ${CMAKE_SOURCE_DIR}/deps + GIT_REPOSITORY https://${URL_BASE}/FISCO-BCOS/tikv-client-cpp.git + GIT_TAG 534fd25539f3971250a124bcc1eb5649b57248d9 + BUILD_IN_SOURCE true + # SOURCE_DIR ${CMAKE_SOURCE_DIR}/deps/src/ + CONFIGURE_COMMAND ${CARGO_COMMAND} install cxxbridge-cmd@1.0.75 + BUILD_COMMAND ${CARGO_COMMAND} build && ${CARGO_COMMAND} build --release && make target/${TIKV_BUILD_MODE}/libtikv_client.a + INSTALL_COMMAND "" + BUILD_BYPRODUCTS /target/${TIKV_BUILD_MODE}/libtikv_client.a + # LOG_BUILD true +) + +ExternalProject_Get_Property(tikv_client_project SOURCE_DIR) +ExternalProject_Get_Property(tikv_client_project BINARY_DIR) +set(KVCLIENT_INCLUDE_DIRS ${SOURCE_DIR}/include) +file(MAKE_DIRECTORY ${KVCLIENT_INCLUDE_DIRS}) # Must exist. + +find_package(OpenSSL REQUIRED) + +add_library(kv_client INTERFACE IMPORTED) +set_property(TARGET kv_client PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${KVCLIENT_INCLUDE_DIRS}) +set_property(TARGET kv_client PROPERTY INTERFACE_LINK_LIBRARIES ${SOURCE_DIR}/target/${TIKV_BUILD_MODE}/libtikv_client.a OpenSSL::SSL OpenSSL::Crypto) + +add_dependencies(kv_client tikv_client_project) diff --git a/cmake/ProjectWABT.cmake b/cmake/ProjectWABT.cmake new file mode 100644 index 0000000..57112fd --- /dev/null +++ b/cmake/ProjectWABT.cmake @@ -0,0 +1,40 @@ +include(ExternalProject) + +if (APPLE) + set(PATCH_COMMAND "") +else() + set(PATCH_COMMAND COMMAND sed -i "53a if (NOT \"\${CMAKE_PROJECT_VERSION}\")" CMakeLists.txt COMMAND sed -i "54a set(CMAKE_PROJECT_VERSION \${PROJECT_VERSION})" CMakeLists.txt COMMAND sed -i "55a endif()" CMakeLists.txt) +endif() + +ExternalProject_Add(wabt_project + PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/deps + DOWNLOAD_NAME wabt_1.0.23.tar.gz + DOWNLOAD_NO_PROGRESS 1 + URL https://codeload.github.com/WebAssembly/wabt/tar.gz/1.0.23 + URL_HASH SHA256=925f47020705cd2cc00a4ff6a36ab08f8adf6d08c7eac5057db0db38b6b2f16d + # PATCH_COMMAND ${PATCH_COMMAND} + BUILD_IN_SOURCE 0 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DBUILD_TESTS=OFF -DBUILD_TOOLS=OFF -DBUILD_LIBWASM=OFF + LOG_CONFIGURE 1 + LOG_DOWNLOAD 1 + LOG_UPDATE 1 + LOG_BUILD 1 + LOG_INSTALL 1 + BUILD_BYPRODUCTS /libwabt.a +) + +ExternalProject_Get_Property(wabt_project SOURCE_DIR) +ExternalProject_Get_Property(wabt_project BINARY_DIR) +add_library(wabt STATIC IMPORTED GLOBAL) + +set(WABT_INCLUDE_DIR ${SOURCE_DIR}/ ${BINARY_DIR}/) +set(WABT_LIBRARY ${BINARY_DIR}/libwabt.a) +file(MAKE_DIRECTORY ${WABT_INCLUDE_DIR}) # Must exist. + +set_property(TARGET wabt PROPERTY IMPORTED_LOCATION ${WABT_LIBRARY}) +set_property(TARGET wabt PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${WABT_INCLUDE_DIR}) + +add_dependencies(wabt wabt_project) +unset(SOURCE_DIR) diff --git a/cmake/SearchTestCases.cmake b/cmake/SearchTestCases.cmake new file mode 100644 index 0000000..436d364 --- /dev/null +++ b/cmake/SearchTestCases.cmake @@ -0,0 +1,65 @@ +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ------------------------------------------------------------------------------ +# File: SearchTestCases.cmake +# Function: cmake to help search test cases +# ------------------------------------------------------------------------------ +function(config_test_cases TEST_ARGS SOURCES TEST_BINARY_PATH EXCLUDE_SUITES) + foreach(file ${SOURCES}) + file(STRINGS ${file} test_list_raw REGEX "BOOST_.*TEST_(SUITE|CASE|SUITE_END)") + set(TestSuite "DEFAULT") + set(TestSuitePath "") + foreach(test_raw ${test_list_raw}) + string(REGEX REPLACE ".*TEST_(SUITE|CASE)\\(([^ ,\\)]*).*" "\\1 \\2" test ${test_raw}) + + #skip disabled + if (";${EXCLUDE_SUITES};" MATCHES ";${TestSuite};") + continue() + endif() + + if(test MATCHES "^SUITE .*") + string(SUBSTRING ${test} 6 -1 TestSuite) + set(TestSuitePath "${TestSuitePath}/${TestSuite}") + + if(FASTCTEST) + if (";${EXCLUDE_SUITES};" MATCHES ";${TestSuite};") + continue() + endif() + if (NOT ";${allSuites};" MATCHES ";${TestSuite};") + string(SUBSTRING ${TestSuitePath} 1 -1 TestSuitePathFixed) + list(APPEND allSuites ${TestSuite}) + separate_arguments(TEST_ARGS) + set(TestArgs -t ${TestSuitePathFixed} -- ${TEST_ARGS}) + add_test(NAME ${TestSuitePathFixed} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${TEST_BINARY_PATH} ${TestArgs}) + endif() + endif() + elseif(test MATCHES "^CASE .*") + if(NOT FASTCTEST) + if(NOT test MATCHES "^CASE &createRandom.*") + string(SUBSTRING ${test} 5 -1 TestCase) + string(SUBSTRING ${TestSuitePath} 1 -1 TestSuitePathFixed) + separate_arguments(TEST_ARGS) + set(TestArgs -t ${TestSuitePathFixed}/${TestCase} -- ${TEST_ARGS}) + add_test(NAME ${TestSuitePathFixed}/${TestCase} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${TEST_BINARY_PATH} ${TestArgs}) + endif() + endif() + elseif (";${test_raw};" MATCHES "BOOST_AUTO_TEST_SUITE_END()") + #encountered SUITE_END block. remove one test suite from the suite path. + string(FIND ${TestSuitePath} "/" Position REVERSE) + string(SUBSTRING ${TestSuitePath} 0 ${Position} TestSuitePath) + endif() + endforeach(test_raw) + endforeach(file) +endfunction() diff --git a/cmake/TargetSettings.cmake b/cmake/TargetSettings.cmake new file mode 100644 index 0000000..19f5ab8 --- /dev/null +++ b/cmake/TargetSettings.cmake @@ -0,0 +1,72 @@ +# bcos-utilities +set(UTILITIES_TARGET "bcos-utilities") + +# bcos-table +set(TABLE_TARGET "table") + +# bcos-crypto +set(CRYPTO_TARGET "bcos-crypto") +set(WEDPR_CRYPTO_TARGET "wedpr-crypto::crypto") +set(WEDPR_EXTEND_LIB "wedpr-crypto::extend-crypto") + +# bcos-codec +set(CODEC_TARGET "codec") + +# bcos-protocol +set(PROTOCOL_TARGET "protocol") + +# bcos-tars-protocol +set(TARS_PROTOCOL_TARGET "protocol-tars") + +# bcos-txpool +set(TXPOOL_TARGET "txpool") + +# bcos-sealer +set(SEALER_TARGET "sealer") + +#bcos-security +set(SECURITY_TARGET "security") + +# bcos-sync +set(SYNC_TARGET "sync") + +# bcos-pbft +set(PBFT_TARGET "pbft") + +# bcos-storage +set(STORAGE_TARGET "storage") + +# bcos-ledger +set(LEDGER_TARGET "ledger") + +# bcos-executor +set(EXECUTOR_TARGET "executor") + +# bcos-scheduler +set(SCHEDULER_TARGET "scheduler") + +# bcos-front +SET(FRONT_TARGET "front") + +# bcos-gateway +set(GATEWAY_TARGET "gateway") + +# bcos-rcp +set(RPC_TARGET "rpc") + +# bcos-tool +set(TOOL_TARGET "tool") + +# bcos-leader-election +set(LEADER_ELECTION_TARGET "leader_election") + +# light node +set(LIGHTNODE_TARGET "bcos-lightnode") + +# libinitializer +set(PROTOCOL_INIT_LIB protocol_init) +set(FRONTSERVICE_INIT_LIB front_init) +set(PBFT_INIT_LIB pbft_init) +set(TXPOOL_INIT_LIB txpool_init) +set(COMMAND_HELPER_LIB command) +set(INIT_LIB init) diff --git a/cmake/fiscobcos-config.cmake.in b/cmake/fiscobcos-config.cmake.in new file mode 100644 index 0000000..51670bb --- /dev/null +++ b/cmake/fiscobcos-config.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/fiscobcosTargets.cmake") + +check_required_components(fiscobcos) \ No newline at end of file diff --git a/cmake/shell/check-commit.sh b/cmake/shell/check-commit.sh new file mode 100644 index 0000000..8c07dc0 --- /dev/null +++ b/cmake/shell/check-commit.sh @@ -0,0 +1,110 @@ +#!/bin/bash +# "Copyright [2018] " +# @ function: check code format of {.h, .hpp and .cpp} files +# @ require : Make sure your machine is linux (centos/ubuntu), yum or apt is ready +# @ author : wheatli +# @ file : check-commit.sh +# @ date : 2018 + +SHELL_FOLDER=$( + cd $(dirname $0) + pwd +) + +check_script="clang-format-9" +commit_limit=6 +file_limit=35 +insert_limit=$1 +# eg: https://api.github.com/repos/FISCO-BCOS/FISCO-BCOS +repo_api=${2} +new_file_header_length=35 + +skip_check_words="sync code" + +LOG_ERROR() { + content=${1} + echo -e "\033[31m${content}\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m${content}\033[0m" +} + +execute_cmd() { + command="${1}" + eval ${command} + ret=$? + if [ $ret -ne 0 ]; then + LOG_ERROR "FAILED of command: ${command}" + exit 1 + else + LOG_INFO "SUCCESS of command: ${command}" + fi +} + +function check_codeFormat() { + # Redirect output to stderr. + exec 1>&2 + sum=0 + for file in $(git diff-index --name-status HEAD^ -- | grep -v D | grep -E '\.[ch](pp)?$' | awk '{print $2}'); do + execute_cmd "$check_script -style=file -i $file" + sum=$(expr ${sum} + $?) + done + + if [ ${sum} -ne 0 ]; then + echo "######### ERROR: Format check failed, please adjust them before commit" + exit 1 + fi +} + +function check_PR_limit() { + if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then + local skip=$(curl -s ${repo_api}/pulls/${TRAVIS_PULL_REQUEST} | grep "title\"" | grep "${skip_check_words}") + if [ ! -z "${skip}" ]; then + LOG_INFO "sync code PR, skip PR limit check!" + exit 0 + else + LOG_INFO "PR-${TRAVIS_PULL_REQUEST}, checking PR limit..." + fi + fi + local files=$(git diff --shortstat HEAD^ | awk -F ' ' '{print $1}') + # if [ ${file_limit} -lt ${files} ]; then + # LOG_ERROR "modify ${files} files, limit is ${file_limit}" + # exit 1 + # fi + local new_files=$(git diff HEAD^ | grep "new file" | wc -l) + local test_insertions=$(git diff --numstat HEAD^ | grep "test/" | awk -F ' ' '{sum+=$1}END{print sum}') + local insertions=$(git diff --shortstat HEAD^ | awk -F ' ' '{print $4}') + local valid_insertions=$((insertions - new_files * new_file_header_length - test_insertions)) + + if [ ${insert_limit} -lt ${valid_insertions} ]; then + LOG_ERROR "insert ${insertions} lines, valid is ${valid_insertions}, limit is ${insert_limit}" + exit 1 + fi + + local deletions=$(git diff --shortstat HEAD^ | awk -F ' ' '{print $6}') + #if [ ${delete_limit} -lt ${deletions} ];then + # LOG_ERROR "delete ${deletions} lines, limit is ${delete_limit}" + # exit 1 + #fi + local commits=$(git rev-list --count HEAD^..HEAD) + if [ ${commit_limit} -lt ${commits} ]; then + LOG_ERROR "${commits} commits, limit is ${commit_limit}" + exit 1 + fi + local unique_commit=$(git log --format=%s HEAD^..HEAD | sort -u | wc -l) + if [ ${unique_commit} -ne ${commits} ]; then + LOG_ERROR "${commits} != ${unique_commit}, please make commit message unique!" + exit 1 + fi + local merges=$(git log --format=%s HEAD^..HEAD | grep -i merge | wc -l) + if [ ${merges} -gt 2 ]; then + LOG_ERROR "PR contain merge : ${merges}, Please rebase!" + exit 1 + fi + LOG_INFO "modify ${files} files, insert ${insertions} lines, valid insertion ${valid_insertions}, delete ${deletions} lines. Total ${commits} commits." +} + +check_codeFormat +check_PR_limit diff --git a/cmake/test/CMakeLists.txt b/cmake/test/CMakeLists.txt new file mode 100644 index 0000000..86f23ab --- /dev/null +++ b/cmake/test/CMakeLists.txt @@ -0,0 +1,36 @@ +#------------------------------------------------------------------------------ +# Top-level CMake file for bcos-cmake-scripts. +# ------------------------------------------------------------------------------ +# Copyright (C) 2021 FISCO BCOS. +# SPDX-License-Identifier: Apache-2.0 +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#------------------------------------------------------------------------------ +cmake_minimum_required(VERSION 3.10) +list(APPEND CMAKE_MODULE_PATH ../) +set(BCOS_DOXYGEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../") + +#init hunter +include(HunterGate) +HunterGate( + URL "https://github.com/cpp-pm/hunter/archive/v0.23.295.tar.gz" + SHA1 "8a3447594fa5948cc7c6888dd86a9e823259c69f" +) +project(bcos-cmake-scripts-test VERSION "3.0") +# basic settings +include(Options) +configure_project() +include(CompilerSettings) +include(BuildDocs) + +include(Coverage) +config_coverage("test_cov" "") diff --git a/concepts/CMakeLists.txt b/concepts/CMakeLists.txt new file mode 100644 index 0000000..4923913 --- /dev/null +++ b/concepts/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.17) +project(bcos-concepts VERSION ${VERSION}) + +add_library(bcos-concepts INTERFACE) +target_include_directories(bcos-concepts INTERFACE + $ + $) +target_link_libraries(bcos-concepts INTERFACE bcos-framework bcos-crypto) + +include(GNUInstallDirs) +install(TARGETS bcos-concepts EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-concepts" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") \ No newline at end of file diff --git a/concepts/bcos-concepts/Basic.h b/concepts/bcos-concepts/Basic.h new file mode 100644 index 0000000..bb246ba --- /dev/null +++ b/concepts/bcos-concepts/Basic.h @@ -0,0 +1,62 @@ +#pragma once +#include "Exception.h" +#include +#include +#include +#include +#include + +namespace bcos::concepts +{ + +// clang-format off +struct NoEnoughSpace : public bcos::error::Exception {}; +// clang-format on + +template +concept ByteBuffer = RANGES::contiguous_range && + std::is_trivial_v>> && + std::is_standard_layout_v>> && + (sizeof(RANGES::range_value_t>) == 1); + +template +concept PointerLike = requires(Pointer pointer) +{ + *pointer; + pointer.operator->(); +}; + +template +auto& getRef(Input& input) +{ + if constexpr (PointerLike) + { + return *input; + } + else + { + return input; + } +} + +template +concept DynamicRange = requires(Range range, size_t newSize) +{ + requires RANGES::range; + range.resize(newSize); + range.reserve(newSize); +}; + +void resizeTo(RANGES::range auto& out, std::integral auto size) +{ + if ((size_t)RANGES::size(out) < (size_t)size) + { + if constexpr (bcos::concepts::DynamicRange>) + { + out.resize(size); + return; + } + BOOST_THROW_EXCEPTION(NoEnoughSpace{}); + } +} +} // namespace bcos::concepts diff --git a/concepts/bcos-concepts/ByteBuffer.h b/concepts/bcos-concepts/ByteBuffer.h new file mode 100644 index 0000000..5e65e38 --- /dev/null +++ b/concepts/bcos-concepts/ByteBuffer.h @@ -0,0 +1,45 @@ +#pragma once + +#include "Basic.h" +#include +#include +#include +#include +#include + +namespace bcos::concepts::bytebuffer +{ + +template +concept ByteBuffer = RANGES::contiguous_range && + std::is_trivial_v>> && + std::is_standard_layout_v>> && + (sizeof(RANGES::range_value_t>) == 1); + +template +concept Hash = ByteBuffer; + +std::string_view toView(ByteBuffer auto const& buffer) +{ + return std::string_view((const char*)RANGES::data(buffer), RANGES::size(buffer)); +} + +void assignTo(ByteBuffer auto const& from, ByteBuffer auto& to) +{ + resizeTo(to, RANGES::size(from)); + std::copy_n(reinterpret_cast(RANGES::data(from)), RANGES::size(from), + reinterpret_cast(RANGES::data(to))); +} + +bool equalTo(ByteBuffer auto const& left, ByteBuffer auto const& right) +{ + if (RANGES::size(left) != RANGES::size(right)) + { + return false; + } + + return std::equal(reinterpret_cast(RANGES::data(left)), + reinterpret_cast(RANGES::data(left)) + RANGES::size(left), + reinterpret_cast(RANGES::data(right))); +} +} // namespace bcos::concepts::bytebuffer \ No newline at end of file diff --git a/concepts/bcos-concepts/Exception.h b/concepts/bcos-concepts/Exception.h new file mode 100644 index 0000000..5653708 --- /dev/null +++ b/concepts/bcos-concepts/Exception.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include +#include + +namespace bcos::error +{ +struct Exception : public virtual std::exception, public virtual boost::exception +{ +}; + +using ErrorCode = boost::error_info; +using ErrorMessage = boost::error_info; +} // namespace bcos::error \ No newline at end of file diff --git a/concepts/bcos-concepts/Hash.h b/concepts/bcos-concepts/Hash.h new file mode 100644 index 0000000..4b8d37a --- /dev/null +++ b/concepts/bcos-concepts/Hash.h @@ -0,0 +1,26 @@ +#pragma once +#include "Basic.h" +#include +#include +#include + +namespace bcos::concepts::hash +{ + +// ADL-based customization points +template +concept Hashable = requires(ObjectType object, std::string out1, std::vector out2, + std::vector out3, std::vector out4) +{ + impl_calculate(object, out1); + impl_calculate(object, out2); + impl_calculate(object, out3); + impl_calculate(object, out4); +}; + +template +auto calculate(auto const& obj, ByteBuffer auto& out) +{ + return impl_calculate(obj, out); +} +} // namespace bcos::concepts::hash diff --git a/concepts/bcos-concepts/Serialize.h b/concepts/bcos-concepts/Serialize.h new file mode 100644 index 0000000..04bd1e1 --- /dev/null +++ b/concepts/bcos-concepts/Serialize.h @@ -0,0 +1,30 @@ +#pragma once +#include "Basic.h" +#include "ByteBuffer.h" +#include + +namespace bcos::concepts::serialize +{ + +// ADL-based customization points +template +concept Serializable = requires( + ObjectType object, std::vector out, std::vector in) +{ + impl_encode(object, out); + impl_decode(in, object); +}; + +template +auto encode(ObjectType const& in, bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + impl_encode(in, out); +} + +template +void decode(bcos::concepts::bytebuffer::ByteBuffer auto const& in, ObjectType& out) +{ + impl_decode(in, out); +} + +} // namespace bcos::concepts::serialize \ No newline at end of file diff --git a/concepts/bcos-concepts/front/Front.h b/concepts/bcos-concepts/front/Front.h new file mode 100644 index 0000000..f7628c8 --- /dev/null +++ b/concepts/bcos-concepts/front/Front.h @@ -0,0 +1,45 @@ +#pragma once +#include "../Basic.h" +#include "../Serialize.h" +#include +#include +#include + +namespace bcos::concepts::front +{ + +template +class FrontBase +{ +public: + using NodeType = uint16_t; + using ModuleID = int; + + template + task::Task nodeIDs() + { + return impl().impl_nodeIDs(); + } + + task::Task sendMessageByNodeID(ModuleID moduleID, auto const& nodeID, + bcos::concepts::serialize::Serializable auto const& request, + bcos::concepts::serialize::Serializable auto& response) + { + return impl().impl_sendMessageByNodeID(moduleID, nodeID, request, response); + } + + task::Task broadcastMessage(NodeType type, ModuleID moduleID, + bcos::concepts::serialize::Serializable auto const& request) + { + return impl().impl_broadcastMessage(type, moduleID, request); + } + +private: + friend Impl; + auto& impl() { return static_cast(*this); } +}; + +template +concept Front = std::derived_from> || + std::derived_from>; +} // namespace bcos::concepts::front \ No newline at end of file diff --git a/concepts/bcos-concepts/ledger/Ledger.h b/concepts/bcos-concepts/ledger/Ledger.h new file mode 100644 index 0000000..c62005c --- /dev/null +++ b/concepts/bcos-concepts/ledger/Ledger.h @@ -0,0 +1,128 @@ +#pragma once +#include "../protocol/Block.h" +#include "../storage/Storage.h" +#include +#include + +namespace bcos::concepts::ledger +{ + +template +concept TransactionOrReceipt = bcos::concepts::transaction::Transaction || + bcos::concepts::receipt::TransactionReceipt; + +// clang-format off +struct DataFlagBase {}; +struct ALL: public DataFlagBase {}; +struct HEADER: public DataFlagBase {}; +struct TRANSACTIONS_METADATA: public DataFlagBase {}; +struct TRANSACTIONS: public DataFlagBase {}; +struct RECEIPTS: public DataFlagBase {}; +struct NONCES: public DataFlagBase {}; +// clang-format on +template +concept DataFlag = std::derived_from; + +struct Status +{ + int64_t total = 0; + int64_t failed = 0; + int64_t blockNumber = 0; +}; + +// All method in ledger is uncacheed +template +class LedgerBase +{ +public: + template + auto getBlock(bcos::concepts::block::BlockNumber auto blockNumber, + bcos::concepts::block::Block auto& block) + { + return impl().template impl_getBlock(blockNumber, block); + } + + template + auto setBlock(bcos::concepts::block::Block auto block) + { + return impl().template impl_setBlock(std::move(block)); + } + + auto getBlockNumberByHash( + bcos::concepts::bytebuffer::ByteBuffer auto const& hash, std::integral auto& number) + { + return impl().impl_getBlockNumberByHash(hash, number); + } + + auto getBlockHashByNumber( + std::integral auto number, bcos::concepts::bytebuffer::ByteBuffer auto& hash) + { + return impl().impl_getBlockHashByNumber(number, hash); + } + + auto getABI(std::string contractAddress) + { + return impl().impl_getABI(contractAddress); + } + + + auto getTransactions(RANGES::range auto const& hashes, RANGES::range auto& out) requires + TransactionOrReceipt>> + { + return impl().impl_getTransactions(hashes, out); + } + + auto getStatus() { return impl().impl_getStatus(); } + + template + auto setTransactions(RANGES::range auto const& inputs) requires bcos::concepts::ledger:: + TransactionOrReceipt>> + { + auto hashesRange = inputs | RANGES::views::transform([](auto const& input) { + std::array hash; + bcos::concepts::hash::calculate(input, hash); + return hash; + }); + auto buffersRange = inputs | RANGES::views::transform([](auto const& input) { + std::vector buffer; + bcos::concepts::serialize::encode(input, buffer); + return buffer; + }); + + constexpr auto isTransaction = + bcos::concepts::transaction::Transaction>; + return setTransactionBuffers( + std::move(hashesRange), std::move(buffersRange)); + } + + template + auto setTransactionBuffers(RANGES::range auto hashes, RANGES::range auto buffers) + { + return impl().template impl_setTransactions( + std::move(hashes), std::move(buffers)); + } + + template + requires std::derived_from> || + std::derived_from> + auto sync(LedgerType& source, bool onlyHeader) + { + return impl().template impl_sync(source, onlyHeader); + } + + auto setupGenesisBlock(bcos::concepts::block::Block auto block) + { + return impl().template impl_setupGenesisBlock(std::move(block)); + } + +private: + friend Impl; + auto& impl() { return static_cast(*this); } +}; + +template +concept Ledger = std::derived_from> || + std::derived_from>; + +} // namespace bcos::concepts::ledger \ No newline at end of file diff --git a/concepts/bcos-concepts/protocol/Block.h b/concepts/bcos-concepts/protocol/Block.h new file mode 100644 index 0000000..2d9ce75 --- /dev/null +++ b/concepts/bcos-concepts/protocol/Block.h @@ -0,0 +1,73 @@ +#pragma once +#include "Receipt.h" +#include "Transaction.h" +#include +#include +#include + +namespace bcos::concepts::block +{ + +template +concept BlockNumber = std::integral; + +template +concept ParentInfo = requires(ParentInfoType parentInfo) +{ + requires std::integral; + parentInfo.blockHash; +}; + +template +concept Signature = requires(SignatureType signature) +{ + requires std::integral; + signature.signature; +}; + +template +concept BlockHeaderData = requires(BlockHeaderDataType blockHeaderData) +{ + requires std::integral; + requires RANGES::range && + ParentInfo>; + blockHeaderData.txsRoot; + blockHeaderData.receiptRoot; + blockHeaderData.stateRoot; + requires BlockNumber; + requires std::integral; + requires std::integral; + requires RANGES::range; + blockHeaderData.extraData; + requires RANGES::range; +}; + +template +concept BlockHeader = requires(BlockHeaderType block) +{ + BlockHeaderType{}; + requires BlockHeaderData; + block.dataHash; + requires RANGES::range && + Signature>; +}; + +template +concept Block = requires(BlockType block) +{ + BlockType{}; + requires std::integral; + requires std::integral; + requires BlockHeader; + requires RANGES::range && + bcos::concepts::transaction::Transaction< + RANGES::range_value_t>; + requires RANGES::range && bcos::concepts::receipt::TransactionReceipt< + RANGES::range_value_t>; + requires RANGES::range; // TODO: add metadata concept + requires RANGES::range && + ByteBuffer>; + requires RANGES::range && + ByteBuffer>; +}; +} // namespace bcos::concepts::block \ No newline at end of file diff --git a/concepts/bcos-concepts/protocol/Receipt.h b/concepts/bcos-concepts/protocol/Receipt.h new file mode 100644 index 0000000..38e4bd5 --- /dev/null +++ b/concepts/bcos-concepts/protocol/Receipt.h @@ -0,0 +1,36 @@ +#pragma once +#include "../Basic.h" +#include "../Hash.h" +#include "../Serialize.h" + +namespace bcos::concepts::receipt +{ +template +concept LogEntry = requires(LogEntryType logEntry) +{ + logEntry.address; + requires RANGES::range; + logEntry.data; +}; + +template +concept TransactionReceiptData = requires(TransactionReceiptDataType transactionReceiptData) +{ + requires std::integral; + transactionReceiptData.gasUsed; + transactionReceiptData.contractAddress; + requires std::integral; + transactionReceiptData.output; + requires RANGES::range && + LogEntry>; + requires std::integral; +}; + +template +concept TransactionReceipt = requires(TransactionReceiptType transactionReceipt) +{ + requires TransactionReceiptData; + transactionReceipt.dataHash; + transactionReceipt.message; +}; +} // namespace bcos::concepts::receipt \ No newline at end of file diff --git a/concepts/bcos-concepts/protocol/Transaction.h b/concepts/bcos-concepts/protocol/Transaction.h new file mode 100644 index 0000000..2911192 --- /dev/null +++ b/concepts/bcos-concepts/protocol/Transaction.h @@ -0,0 +1,40 @@ +#pragma once + +#include "../Basic.h" +#include "../Hash.h" +#include "../Serialize.h" +#include +#include +#include +#include + +namespace bcos::concepts::transaction +{ +template +concept TransactionData = requires(TransactionDataType transactionData) +{ + requires std::integral; + transactionData.chainID; + transactionData.groupID; + requires std::integral; + transactionData.nonce; + transactionData.to; + transactionData.input; + transactionData.abi; +}; + +template +concept Transaction = requires(TransactionType transaction) +{ + TransactionType{}; + requires TransactionData; + transaction.dataHash; + transaction.signature; + transaction.sender; + requires std::integral; + requires std::integral; +}; + +// template +// concept Transaction = std::derived_from; +} // namespace bcos::concepts::transaction \ No newline at end of file diff --git a/concepts/bcos-concepts/scheduler/Scheduler.h b/concepts/bcos-concepts/scheduler/Scheduler.h new file mode 100644 index 0000000..78a4d70 --- /dev/null +++ b/concepts/bcos-concepts/scheduler/Scheduler.h @@ -0,0 +1,27 @@ +#pragma once + +#include "../Basic.h" +#include "../protocol/Receipt.h" +#include "../protocol/Transaction.h" + +namespace bcos::concepts::scheduler +{ +template +class SchedulerBase +{ +public: + auto call(bcos::concepts::transaction::Transaction auto const& transaction, + bcos::concepts::receipt::TransactionReceipt auto& receipt) + { + return impl().impl_call(transaction, receipt); + } + +private: + friend Impl; + auto& impl() { return static_cast(*this); } +}; + +template +concept Scheduler = std::derived_from> || + std::derived_from>; +} // namespace bcos::concepts::scheduler \ No newline at end of file diff --git a/concepts/bcos-concepts/storage/Storage.h b/concepts/bcos-concepts/storage/Storage.h new file mode 100644 index 0000000..5860b8a --- /dev/null +++ b/concepts/bcos-concepts/storage/Storage.h @@ -0,0 +1,42 @@ +#pragma once + +#include "../Basic.h" +#include +#include +#include + +namespace bcos::concepts::storage +{ + +template +class StorageBase +{ +public: + std::optional getRow(std::string_view table, std::string_view key) + { + return impl().impl_getRow(table, key); + } + + std::vector> getRows( + std::string_view table, RANGES::range auto&& keys) + { + return impl().impl_getRows(table, std::forward(keys)); + } + + void setRow(std::string_view table, std::string_view key, bcos::storage::Entry entry) + { + impl().impl_setRow(table, key, std::move(entry)); + } + + void createTable(std::string tableName) { impl().impl_createTable(std::move(tableName)); } + +private: + friend Impl; + StorageBase() = default; + auto& impl() { return static_cast(*this); } +}; + +template +concept Storage = std::derived_from>; + +} // namespace bcos::concepts::storage \ No newline at end of file diff --git a/concepts/bcos-concepts/storage/Storage2.h b/concepts/bcos-concepts/storage/Storage2.h new file mode 100644 index 0000000..d9e9760 --- /dev/null +++ b/concepts/bcos-concepts/storage/Storage2.h @@ -0,0 +1,83 @@ +#pragma once + +#include "../Basic.h" +#include "../ByteBuffer.h" +#include +#include +#include +#include + +namespace bcos::concepts::storage +{ + +template +concept TableName = bytebuffer::ByteBuffer; + +template +concept Key = bytebuffer::ByteBuffer; + +template +concept Keys = RANGES::range && bytebuffer::ByteBuffer>; + +using OptionalEntry = std::optional; + +template +concept OptionalEntries = + RANGES::range && std::same_as, OptionalEntry>; + +template +concept Entries = RANGES::range && + std::same_as, bcos::storage::Entry>; + +// The class Impl only need impl_getRows and impl_setRows +template +class StorageBase +{ +public: + task::Task getRow(TableName auto const& tableName, Key auto const& key) + { + RANGES::single_view keys{bytebuffer::toView(key)}; + + OptionalEntry entry; + RANGES::single_view entries(entry); + + co_await impl().impl_getRows(tableName, keys, entries); + co_return entry; + } + + task::Task setRow( + TableName auto const& tableName, Key auto const& key, bcos::storage::Entry entry) + { + RANGES::single_view keys{bytebuffer::toView(key)}; + RANGES::single_view entries(&entry); + + co_await impl().impl_setRows(tableName, keys, entries); + } + + task::Task getRows( + TableName auto const& tableName, Keys auto const& keys, OptionalEntries auto& out) + { + co_await impl().impl_getRows(tableName, keys, out); + } + + task::Task setRows( + TableName auto const& tableName, Keys auto const& keys, Entries auto const& entries) + { + co_await impl().impl_setRows(tableName, keys, entries); + } + + task::Task createTable(TableName auto const& tableName) + { + // Impl it + } + +private: + friend Impl; + StorageBase() = default; + auto& impl() { return static_cast(*this); } +}; + +template +concept Storage = std::derived_from>; + +} // namespace bcos::concepts::storage \ No newline at end of file diff --git a/concepts/bcos-concepts/transaction-executor/TransactionExecutor.h b/concepts/bcos-concepts/transaction-executor/TransactionExecutor.h new file mode 100644 index 0000000..5ed4e28 --- /dev/null +++ b/concepts/bcos-concepts/transaction-executor/TransactionExecutor.h @@ -0,0 +1,45 @@ +#pragma once + +#include "../protocol/Block.h" +#include + +namespace bcos::concepts::transaction_executor +{ + +// All auto interfaces is awaitable +template +class TransactionExecutorBase +{ +public: + void nextBlockHeader(block::Block auto const& blockHeader) + { + return impl_nextBlockHeader(blockHeader); + } + + // Return awaitable receipt::TransactionReceipt + auto call(transaction::Transaction auto const& transaction) { return impl_call(transaction); } + + // Return awaitable receipts + auto executeTransactions(RANGES::range auto const& transactions) requires + transaction::Transaction> + { + return impl().impl_executeTransactions(transactions); + } + + // Return awaitable bytes + auto getABI(bytebuffer::ByteBuffer auto const& contract) + { + return impl().impl_getABI(contract); + } + + // Return awaitable bytes + auto getCode(bytebuffer::ByteBuffer auto const& contract) + { + return impl().impl_getCode(contract); + } + +private: + friend Impl; + auto& impl() { return static_cast(*this); } +}; +} // namespace bcos::concepts::transaction_executor \ No newline at end of file diff --git a/concepts/bcos-concepts/transaction-pool/TransactionPool.h b/concepts/bcos-concepts/transaction-pool/TransactionPool.h new file mode 100644 index 0000000..d7400ef --- /dev/null +++ b/concepts/bcos-concepts/transaction-pool/TransactionPool.h @@ -0,0 +1,34 @@ +#pragma once + +#include "../Basic.h" +#include "../protocol/Receipt.h" +#include "../protocol/Transaction.h" + +namespace bcos::concepts::transacton_pool +{ +template +class TransactionPoolBase +{ +public: + auto submitTransaction(auto transaction, auto& receipt) + { + return impl().impl_submitTransaction(transaction, receipt); + } + + auto broadcastTransaction(concepts::transaction::Transaction auto const& transaction) + { + return impl().impl_broadcastTransaction(transaction); + } + + // auto onTransaction(auto nodeID, auto const& messageID, auto const& data) {} + +private: + friend Impl; + auto& impl() { return static_cast(*this); } +}; + +template +concept TransactionPool = std::derived_from> || + std::derived_from>; +} // namespace bcos::concepts::transacton_pool \ No newline at end of file diff --git a/concepts/tests/testTask.cpp b/concepts/tests/testTask.cpp new file mode 100644 index 0000000..e69de29 diff --git a/conf/ca.crt b/conf/ca.crt deleted file mode 100644 index 17ef086..0000000 --- a/conf/ca.crt +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC/TCCAeUCFHDEW5Rwl2aeuLMkUqRWFNevBZ+sMA0GCSqGSIb3DQEBCwUAMDox -EzARBgNVBAMMCkZJU0NPLUJDT1MxEzARBgNVBAoMCkZJU0NPLUJDT1MxDjAMBgNV -BAsMBWNoYWluMCAXDTIzMDQxNTA3MjkxMFoYDzIxMjMwMzIyMDcyOTEwWjA6MRMw -EQYDVQQDDApGSVNDTy1CQ09TMRMwEQYDVQQKDApGSVNDTy1CQ09TMQ4wDAYDVQQL -DAVjaGFpbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6aA7+5tbCT -BPonC3s6gHfVf4smUvG9JCFtbfQ1fhD6rcz0dnI8GdgztRrvXhsOe9qkS2tEZQFa -k4k65bumXCsPEFwSr7JMlBGdwO54gVNZRmV/hfiFWCEgyjZEoUvcSv7TYaRhUzC6 -YUh1vm1g1me83nLn1Yyp26rttvoAhq0LpqcRV+ywtYAkPgXAcC+EVlMF79RWmXZV -Bfzu7KXpYwEJvY64Ne2/jqVqo0n3ocb+aWZMRIhwCQaCHHuWTk6ZEf/TuStDa+KF -iQFKCcCToAbNI+Tw+cj+dbj8Ek7ETKZUSMN86RS5YN0tfmKkC2jviHBKAHTckfui -Cp0uGU3vlVkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAgUlZiXZgMCvyg5VJLvjj -4eehAV6Hr3qUh7nNl2EfFi+GGSYHShWZ+KepgnLD1DOy4cuf6nyJAPltuFiV4pDO -CKPooJ4yun7CGwrcsLEBYInCUD15TIpMOtW9rGv6Ka/if8T39IKomlSgB6yn8rck -I9frwKYVgOZoef5DGDphyctheDmolEGZ+vkdDwX6cCSTaMdN3ErJVJpgb5Lk2eMN -qmGLpq4/YgWoa8GfJfQUqdhD0iLInEib8J0MC6o0JfUdJWNpqWuXn6gL5oAV5Kep -4uNcsmlOsqs+KlkKdxSSpf+CMWf2jQL1N6+HMX6YhE9iMjKncEgxj40Eso40uv4i -Hw== ------END CERTIFICATE----- diff --git a/conf/cert.cnf b/conf/cert.cnf deleted file mode 100644 index 81edcb4..0000000 --- a/conf/cert.cnf +++ /dev/null @@ -1,31 +0,0 @@ -[ca] -default_ca=default_ca - -[default_ca] -default_days = 36500 -default_md = sha256 - -[req] -distinguished_name = req_distinguished_name -req_extensions = v3_req - -[req_distinguished_name] -countryName = CN -countryName_default = CN -stateOrProvinceName = State or Province Name (full name) -stateOrProvinceName_default =GuangDong -localityName = Locality Name (eg, city) -localityName_default = ShenZhen -organizationalUnitName = Organizational Unit Name (eg, section) -organizationalUnitName_default = FISCO-BCOS -commonName = Organizational commonName (eg, FISCO-BCOS) -commonName_default = FISCO-BCOS -commonName_max = 64 - -[ v3_req ] -basicConstraints = CA:FALSE -keyUsage = nonRepudiation, digitalSignature, keyEncipherment - -[ v4_req ] -basicConstraints = CA:FALSE - diff --git a/conf/node.nodeid b/conf/node.nodeid deleted file mode 100644 index 96bad36..0000000 --- a/conf/node.nodeid +++ /dev/null @@ -1 +0,0 @@ -7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587 diff --git a/conf/node.pem b/conf/node.pem deleted file mode 100644 index f4ad48f..0000000 --- a/conf/node.pem +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgd9KSITHe+y/LkMhMkZWW -73mJxOWJfO9wqjCpTbetPm2hRANCAAR+jbmWQ+eCUcj+a8nSHmT0YdUKpTcfRBNC -fVWouQ+2KdrgK6ny2p1KYY2SXMPaMmiYOWKWDQ/gyJjjPpRKziWH ------END PRIVATE KEY----- diff --git a/conf/ssl.crt b/conf/ssl.crt deleted file mode 100644 index e911fca..0000000 --- a/conf/ssl.crt +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDEjCCAfqgAwIBAgIUFV7PZd2NtL63+NMn4MdubyOlutwwDQYJKoZIhvcNAQEL -BQAwOjETMBEGA1UEAwwKRklTQ08tQkNPUzETMBEGA1UECgwKRklTQ08tQkNPUzEO -MAwGA1UECwwFY2hhaW4wIBcNMjMwNDE1MDcyOTEwWhgPMjEyMzAzMjIwNzI5MTBa -MDsxEzARBgNVBAMMCkZJU0NPLUJDT1MxEzARBgNVBAoMCmZpc2NvLWJjb3MxDzAN -BgNVBAsMBmFnZW5jeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTH -m6Bd1DEDGEpSdrG3ySrSHkRn9d4POQ3jxKlO5Gp9yYAp76YmRH6bls+tYN5ptzQF -lnYqtp79rYOZvquwa3B4v7obo/subCg8Okn7wAndJ7U02My8Q2kgVTMhtcfGHzDy -4IUEHUdAHbix/yua2Eo33xJQFlnk92WpT5hk61iBrJcteu+XxbV6qq1Qi/1jPakx -+1NNIf/tz2JXPil5UDoFYutUrVESZUifuG3WdHUN1Ld+SlyQeS5OI+DWxJJwDGhB -p60QhOTmJOwh3bg21JGQIZsL7onRnO/DMkrjiEw73x2OMFRU73ZgaNq0hOwnlQyE -AQrzFHWL5RLiOKjPrz0CAwEAAaMNMAswCQYDVR0TBAIwADANBgkqhkiG9w0BAQsF -AAOCAQEAoNfuo9PigIFK+nQzhzFxPQmYm0AvaMgz3vWgzAY2w+I874yn3XelaAJE -ZkLiswtLDMxb3DufiihvO+2c9xtU4pN/NV//FBbNCdsc1TqBNyQAKT21+w/I5Yw9 -jXeZzQpATjqxLpnC+Wrtrvf3fA4z8v6xOKmHdGcZACQTGYj7kf+hBg1QsSYXuFpn -01pCk5iHQ9dpIJF8Y7jUPsAjRaE2/WFfGWSAncv10RQ+Es6RMyvhKxui+WyStDMA -EEz3oFz54lmopdaeso2w0LOEIRL47xuWMpxyyYo0SjLlAB+KrJ8R0nKPeW/epsyc -6o8cwxye3AAEcT8MCTnl0QFvaAjOtQ== ------END CERTIFICATE----- diff --git a/conf/ssl.key b/conf/ssl.key deleted file mode 100644 index 5bdb803..0000000 --- a/conf/ssl.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCkx5ugXdQxAxhK -Unaxt8kq0h5EZ/XeDzkN48SpTuRqfcmAKe+mJkR+m5bPrWDeabc0BZZ2Krae/a2D -mb6rsGtweL+6G6P7LmwoPDpJ+8AJ3Se1NNjMvENpIFUzIbXHxh8w8uCFBB1HQB24 -sf8rmthKN98SUBZZ5PdlqU+YZOtYgayXLXrvl8W1eqqtUIv9Yz2pMftTTSH/7c9i -Vz4peVA6BWLrVK1REmVIn7ht1nR1DdS3fkpckHkuTiPg1sSScAxoQaetEITk5iTs -Id24NtSRkCGbC+6J0ZzvwzJK44hMO98djjBUVO92YGjatITsJ5UMhAEK8xR1i+US -4jioz689AgMBAAECggEAGhfp0wlIssI0tIA+f4IE/xzq4hY8Xv+2Hzb0S4NMtHha -0krRwlPJAOuOhDCGaHIBKuG/o9K7vI2bTn2oLfPv742Pft8lpn8BbZWr/U86Z9V3 -lkBaHIGrgxg1pbUu3gXHpq6vUyEFqeTDUB4PtE3+9jHGx1WbVHznmFepXQ6OHiOZ -rH+U5iGdbNQI3AeSM/fUYnmtC0v38/AkamWlbwrG34xbWzQnz5/w2Eiq96wNSyTG -SKrAaUOsJI76A3k/gA9WhtDCWBQK1XhJAzdDowrIZ3PQIx54ad55V5ePJrQTYWCu -4JRdJ94G0BOQfbQQx0jDSIkiURdJzDPyMcUO1V3BQQKBgQDQwlfbqqPXE86DqpZm -d6D88CAPj+2mtBYTrTh6FcOC6IQvE2TjrrKz9TngJ2UJYhR8jx5WsXsmo0ruYbVq -DIG4LHoPSRXddXN4fMpxy1FrPq5IwPtKTqnW37k4UmmSgTKWgzHW3Wc2X32+32L9 -5V2YernUrRGR69HnoQvqQWXBdQKBgQDKEXxXJgHOZ55MAqrMMBy5iYJqulHVlPR8 -pNaLIJTZJpokzp/W9c49ul9NPYmeNIUsm8shZs0o5gIcB1A/TqeqqjWVgiml3mAD -U48Zk9X7sf6333oVDVm4ZStPBJUkR8EAWF56N6bcaSrHKCZ+zbg2QnLUP6Xww+Yi -md3KUsb1qQKBgHPyfTnUnQtoRNt8c+yVpSTXefcqyaQ9gcWMAEJOtDiRTFmZO//5 -l+e73FlTiBqeDyLfmsor6WqcZ5HfUxODvsi8a07yGOLXyTqylP5/HsmiFsrx5KBw -8IQX3pgZrelhOOfAFn5wmlLo1r6c9C5wpnt6LpyhQ5D4ma09FZEWoZ3BAoGAd9/d -stmiUq+X8iHW72FPeSZBj01PRPSkAdnMSScgBp7m7RUDMAQMwQPyi6EJJiikJK2b -2QnihfPFppkUGypvP0jQlwxr5rHApdiJWTQhyrpykORryVdtNX4XLj5at/Y1Yh4K -llizjah6L0H7bFhggxfyhUXpDKc6vKYpNGDdFVkCgYBm9KtwrPwoPfKPpwI6RWH/ -DzhCHzEUo7sE+lXOF0inu5tBX0jxW7DJSpmyjSM/rk2vV2CslFgga5htbcUDKCDh -jWv0XEJuH+a5egyaP3usGJh8aihIHyS6EGGDde96m6SWPyiENtY0rLp6UPSFUrL0 -VrCG2ocTfR7tEvF1pZhxxQ== ------END PRIVATE KEY----- diff --git a/conf/ssl.nodeid b/conf/ssl.nodeid deleted file mode 100644 index c950964..0000000 --- a/conf/ssl.nodeid +++ /dev/null @@ -1 +0,0 @@ -a4c79ba05dd43103184a5276b1b7c92ad21e4467f5de0f390de3c4a94ee46a7dc98029efa626447e9b96cfad60de69b7340596762ab69efdad8399beabb06b7078bfba1ba3fb2e6c283c3a49fbc009dd27b534d8ccbc436920553321b5c7c61f30f2e085041d47401db8b1ff2b9ad84a37df12501659e4f765a94f9864eb5881ac972d7aef97c5b57aaaad508bfd633da931fb534d21ffedcf62573e2979503a0562eb54ad511265489fb86dd674750dd4b77e4a5c90792e4e23e0d6c492700c6841a7ad1084e4e624ec21ddb836d49190219b0bee89d19cefc3324ae3884c3bdf1d8e305454ef766068dab484ec27950c84010af314758be512e238a8cfaf3d diff --git a/configs/config.yaml b/configs/config.yaml deleted file mode 100644 index b73a3cc..0000000 --- a/configs/config.yaml +++ /dev/null @@ -1,14 +0,0 @@ -Server: - RunMode: debug - # 由于是同一台机器,使用web服务器记得换端口,如果是不同机器可忽略 - HttpPort: 8080 - ReadTimeout: 60 - WriteTimeout: 60 - -Fisco: - # Fisco启动脚本目录设置 - FiscoStartPath: /home/ubuntu/fisco/sgx_nodes/127.0.0.1/node0/ - # 该Fisco节点的监听端口号 - FiscoPort: 20200 - # Fisco停止脚本目录设置 - FiscoStopPath: /home/ubuntu/fisco/sgx_nodes/127.0.0.1/node0/stop.sh diff --git a/docs/FISCO_BCOS_Logo.svg b/docs/FISCO_BCOS_Logo.svg new file mode 100644 index 0000000..7bb0bb4 --- /dev/null +++ b/docs/FISCO_BCOS_Logo.svg @@ -0,0 +1,15 @@ + + + + logo/横/原色 + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/docs/README_EN.md b/docs/README_EN.md new file mode 100644 index 0000000..823e915 --- /dev/null +++ b/docs/README_EN.md @@ -0,0 +1,57 @@ +[中文](../README.md) / English + +![](./FISCO_BCOS_Logo.svg) + +[![codecov](https://codecov.io/gh/FISCO-BCOS/FISCO-BCOS/branch/master/graph/badge.svg)](https://codecov.io/gh/FISCO-BCOS/FISCO-BCOS) +[![CodeFactor](https://www.codefactor.io/repository/github/fisco-bcos/FISCO-BCOS/badge)](https://www.codefactor.io/repository/github/fisco-bcos/FISCO-BCOS) +[![GitHub All Releases](https://img.shields.io/github/downloads/FISCO-BCOS/FISCO-BCOS/total.svg)](https://github.com/FISCO-BCOS/FISCO-BCOS) + +FISCO BCOS is a secure and robust enterprise-level open source financial consortium blockchain platform, which was jointly created by the FISCO open source working group and officially launched in December 2017. + +In a single-chain configuration, the performance can reach more than 20k TPS. FISCO BCOS provides rich features including group architecture, parallel computing, distributed storage, pluggable consensus mechanism, privacy protection algorithms, and OSCCA-approved cryptography modules. After a long period of practical testing in the production environment by industry partners, it has financial-grade high performance, high availability and high security. + +FISCO BCOS 3.0 is the latest major upgrade with the following new features: + +- **Microservice Architecture**: The modular design architecture of microservices supports independent and parallel expansion of computing, storage, and network. + +- **Deterministic multi-contract parallel algorithm**: The intelligent parallel scheduling engine can automate contract-level parallelism and greatly increase transaction throughput. + +- **Pipelined PBFT consensus mechanism**: A new upgrade and revision of PBFT to pipeline block packaging, verification, and consensus stages, which significantly improves system efficiency. + +- **WeBankBlockchain Liquid and WASM virtual machine**: Besides Solidity, it also supports WeBankBlockchain Liquid contract, which makes the contract more powerful. + +- **Blockchain File System**: Supports the "what you see is what you get" blockchain resource management method, which improve user experience for blockchain contract writers and data governance users. + +- **Scenario-optimized service models**: Supports different service models for service deployment, including Air (lightweight) version, Pro (professional) version and Max (massive cluster) version to meet the needs of diversified scenarios. + +## Documentation + +- **[FISCO BCOS 3.x Documentation(latest)](https://fisco-bcos-doc.readthedocs.io/zh_CN/latest/)** + +- **[FISCO BCOS 2.x Documentation(stable)](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/)** + +## Featured applications + +**FISCO BCOS** has been adopted in over hundreds of applications in areas like government affairs, finances, charity, health care, education, transport, copyright, product tracing, supply chain, recruitment, agriculture, social communication, and entertainment. + +- Finance: inter-institutional reconciliation, supply chain finance, tourism finance, etc. +- Judicial services: arbitration chain, digital IOUs, etc. +- Copyright: copyright registration and trading, etc. +- Social management: real-estate registration, etc. + +Featured use cases are provided [here](https://mp.weixin.qq.com/s/RJwRMChWt6mhJrysyBLAmA). + +## Contributing code + +- Your contributions are most welcome and appreciated. Please read the [contribution instructions](https://mp.weixin.qq.com/s/_w_auH8X4SQQWO3lhfNrbQ). +- If this project is useful to you, please star us on GitHub project page! + +## Join our community + +The FISCO BCOS community is one of the most active open-source blockchain communities in China. It provides long-term technical support for both institutional and individual developers and users of FISCO BCOS. Thousands of technical enthusiasts from numerous industry sectors have joined this community, studying and using FISCO BCOS platform. If you are also interested, you are most welcome to join us for more support and fun. + +![](https://raw.githubusercontent.com/FISCO-BCOS/LargeFiles/master/images/QR_image_en.png) + +## License + +All contributions are made under the Apache License 2.0, see [LICENSE](../LICENSE) for details. diff --git a/fisco-bcos-air/AirNodeInitializer.cpp b/fisco-bcos-air/AirNodeInitializer.cpp new file mode 100644 index 0000000..e3ddb46 --- /dev/null +++ b/fisco-bcos-air/AirNodeInitializer.cpp @@ -0,0 +1,132 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Initializer for all the modules + * @file LocalInitializer.cpp + * @author: yujiechen + * @date 2021-10-28 + */ +#include "AirNodeInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos::node; +using namespace bcos::initializer; +using namespace bcos::gateway; +using namespace bcos::rpc; +using namespace bcos::tool; + +void AirNodeInitializer::init(std::string const& _configFilePath, std::string const& _genesisFile) +{ + g_BCOSConfig.setCodec(std::make_shared()); + + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configFilePath, pt); + + m_logInitializer = std::make_shared(); + m_logInitializer->initLog(_configFilePath); + INITIALIZER_LOG(INFO) << LOG_DESC("initGlobalConfig"); + + // load nodeConfig + // Note: this NodeConfig is used to create Gateway which not init the nodeName + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(keyFactory); + nodeConfig->loadGenesisConfig(_genesisFile); + nodeConfig->loadConfig(_configFilePath); + + m_nodeInitializer = std::make_shared(); + m_nodeInitializer->initConfig(_configFilePath, _genesisFile, "", true); + + // create gateway + // DataEncryption will be inited in ProtocolInitializer when storage_security.enable = true, + // otherwise dataEncryption() will return nullptr + GatewayFactory gatewayFactory(nodeConfig->chainId(), "localRpc", + m_nodeInitializer->protocolInitializer()->dataEncryption()); + auto gateway = gatewayFactory.buildGateway(_configFilePath, true, nullptr, "localGateway"); + m_gateway = gateway; + + // create the node + m_nodeInitializer->init(bcos::protocol::NodeArchitectureType::AIR, _configFilePath, + _genesisFile, m_gateway, true, m_logInitializer->logPath()); + + auto pbftInitializer = m_nodeInitializer->pbftInitializer(); + auto groupInfo = m_nodeInitializer->pbftInitializer()->groupInfo(); + auto nodeService = + std::make_shared(m_nodeInitializer->ledger(), m_nodeInitializer->scheduler(), + m_nodeInitializer->txPoolInitializer()->txpool(), pbftInitializer->pbft(), + pbftInitializer->blockSync(), m_nodeInitializer->protocolInitializer()->blockFactory()); + + // create rpc + RpcFactory rpcFactory(nodeConfig->chainId(), m_gateway, keyFactory, + m_nodeInitializer->protocolInitializer()->dataEncryption()); + rpcFactory.setNodeConfig(nodeConfig); + m_rpc = rpcFactory.buildLocalRpc(groupInfo, nodeService); + auto topicManager = + std::dynamic_pointer_cast(gateway->amop()->topicManager()); + topicManager->setLocalClient(m_rpc); + m_nodeInitializer->initNotificationHandlers(m_rpc); + + // NOTE: this should be last called + m_nodeInitializer->initSysContract(); +} + +void AirNodeInitializer::start() +{ + if (m_nodeInitializer) + { + m_nodeInitializer->start(); + } + + if (m_gateway) + { + m_gateway->start(); + } + + if (m_rpc) + { + m_rpc->start(); + } +} + +void AirNodeInitializer::stop() +{ + try + { + if (m_rpc) + { + m_rpc->stop(); + } + if (m_gateway) + { + m_gateway->stop(); + } + if (m_nodeInitializer) + { + m_nodeInitializer->stop(); + } + } + catch (std::exception const& e) + { + std::cout << "stop bcos-node failed for " << boost::diagnostic_information(e); + exit(-1); + } +} \ No newline at end of file diff --git a/fisco-bcos-air/AirNodeInitializer.h b/fisco-bcos-air/AirNodeInitializer.h new file mode 100644 index 0000000..d20dfa0 --- /dev/null +++ b/fisco-bcos-air/AirNodeInitializer.h @@ -0,0 +1,57 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Initializer for all the modules + * @file LocalInitializer.h + * @author: yujiechen + * @date 2021-10-28 + */ + +#pragma once +#include "libinitializer/Initializer.h" +#include +#include +namespace bcos +{ +namespace node +{ +class AirNodeInitializer +{ +public: + AirNodeInitializer() = default; + virtual ~AirNodeInitializer() { stop(); } + + virtual void init(std::string const& _configFilePath, std::string const& _genesisFile); + virtual void start(); + virtual void stop(); + +protected: + virtual void initAirNode(std::string const& _configFilePath, std::string const& _genesisFile, + bcos::gateway::GatewayInterface::Ptr _gateway) + { + m_nodeInitializer = std::make_shared(); + m_nodeInitializer->initAirNode( + _configFilePath, _genesisFile, _gateway, m_logInitializer->logPath()); + } + +private: + BoostLogInitializer::Ptr m_logInitializer; + bcos::initializer::Initializer::Ptr m_nodeInitializer; + + bcos::gateway::GatewayInterface::Ptr m_gateway; + bcos::rpc::RPCInterface::Ptr m_rpc; +}; +} // namespace node +} // namespace bcos \ No newline at end of file diff --git a/fisco-bcos-air/CMakeLists.txt b/fisco-bcos-air/CMakeLists.txt new file mode 100644 index 0000000..c77adce --- /dev/null +++ b/fisco-bcos-air/CMakeLists.txt @@ -0,0 +1,5 @@ +aux_source_directory(. SRC_LIST) + +set(BINARY_NAME fisco-bcos) +add_executable(${BINARY_NAME} ${SRC_LIST}) +target_link_libraries(${BINARY_NAME} PUBLIC ${INIT_LIB} ${PBFT_INIT_LIB} ${TOOL_TARGET} ${COMMAND_HELPER_LIB} ${RPC_TARGET} ${GATEWAY_TARGET}) diff --git a/fisco-bcos-air/Common.h b/fisco-bcos-air/Common.h new file mode 100644 index 0000000..3be56db --- /dev/null +++ b/fisco-bcos-air/Common.h @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file Common.h + * @author: yujiechen + * @date 2021-06-11 + */ + +#pragma once +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace node +{ +class ExitHandler +{ +public: + void exit() { exitHandler(0); } + static void exitHandler(int signal) + { + std::cout << "[" << bcos::getCurrentDateTime() << "] " + << "exit because receive signal " << signal << std::endl; + ExitHandler::c_shouldExit.store(true); + } + bool shouldExit() const { return ExitHandler::c_shouldExit.load(); } + + static std::atomic_bool c_shouldExit; +}; +std::atomic_bool ExitHandler::c_shouldExit = {false}; + +void setDefaultOrCLocale() +{ +#if __unix__ + if (!std::setlocale(LC_ALL, "")) + { + setenv("LC_ALL", "C", 1); + } +#endif +} +} // namespace node +} // namespace bcos \ No newline at end of file diff --git a/fisco-bcos-air/main.cpp b/fisco-bcos-air/main.cpp new file mode 100644 index 0000000..768a993 --- /dev/null +++ b/fisco-bcos-air/main.cpp @@ -0,0 +1,86 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief main for the fisco-bcos + * @file main.cpp + * @author: yujiechen + * @date 2021-07-26 + * @brief main for the fisco-bcos + * @file main.cpp + * @author: ancelmo + * @date 2021-10-14 + */ +#include "AirNodeInitializer.h" +#include "Common.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcos::node; +using namespace bcos::initializer; +using namespace bcos::node; + +int main(int argc, const char* argv[]) +{ + /// set LC_ALL + setDefaultOrCLocale(); + std::set_terminate([]() { + std::cerr << "terminate handler called, print stacks" << std::endl; + void* trace_elems[20]; + int trace_elem_count(backtrace(trace_elems, 20)); + char** stack_syms(backtrace_symbols(trace_elems, trace_elem_count)); + for (int i = 0; i < trace_elem_count; ++i) + { + std::cout << stack_syms[i] << "\n"; + } + free(stack_syms); + std::cerr << "terminate handler called, print stack end" << std::endl; + abort(); + }); + // get datetime and output welcome info + ExitHandler exitHandler; + signal(SIGTERM, &ExitHandler::exitHandler); + signal(SIGABRT, &ExitHandler::exitHandler); + signal(SIGINT, &ExitHandler::exitHandler); + + // Note: the initializer must exist in the life time of the whole program + auto initializer = std::make_shared(); + try + { + auto param = bcos::initializer::initAirNodeCommandLine(argc, argv, false); + initializer->init(param.configFilePath, param.genesisFilePath); + bcos::initializer::showNodeVersionMetric(); + initializer->start(); + } + catch (std::exception const& e) + { + bcos::initializer::printVersion(); + std::cout << "[" << bcos::getCurrentDateTime() << "] "; + std::cout << "start fisco-bcos failed, error:" << boost::diagnostic_information(e) + << std::endl; + return -1; + } + bcos::initializer::printVersion(); + std::cout << "[" << bcos::getCurrentDateTime() << "] "; + std::cout << "The fisco-bcos is running..." << std::endl; + while (!exitHandler.shouldExit()) + { + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + } + initializer.reset(); + std::cout << "[" << bcos::getCurrentDateTime() << "] "; + std::cout << "fisco-bcos program exit normally." << std::endl; +} \ No newline at end of file diff --git a/fisco-bcos-demo/CMakeLists.txt b/fisco-bcos-demo/CMakeLists.txt new file mode 100644 index 0000000..09b8fc9 --- /dev/null +++ b/fisco-bcos-demo/CMakeLists.txt @@ -0,0 +1,14 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +find_package(tarscpp CONFIG REQUIRED) + +include_directories(${CMAKE_SOURCE_DIR}) +include_directories(${CMAKE_SOURCE_DIR}/bcos-framework) + +add_executable(echo_client_sample echo_client_sample.cpp) +target_link_libraries(echo_client_sample PUBLIC ${TOOL_TARGET} ${GATEWAY_TARGET} ${TARS_PROTOCOL_TARGET} ${CRYPTO_TARGET} ${UTILITIES_TARGET}) + + +add_executable(echo_server_sample echo_server_sample.cpp) +target_link_libraries(echo_server_sample PUBLIC ${TOOL_TARGET} ${GATEWAY_TARGET} ${TARS_PROTOCOL_TARGET} ${CRYPTO_TARGET} ${UTILITIES_TARGET}) \ No newline at end of file diff --git a/fisco-bcos-demo/distributed_ratelimiter_checker.cpp b/fisco-bcos-demo/distributed_ratelimiter_checker.cpp new file mode 100644 index 0000000..d3f5957 --- /dev/null +++ b/fisco-bcos-demo/distributed_ratelimiter_checker.cpp @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file distributed_ratlimiter_checker.cpp + * @author: octopuswang + * @date 2022-10-12 + */ +#include "bcos-utilities/BoostLog.h" +#include "bcos-utilities/Common.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::gateway::ratelimiter; + +void usage() +{ + std::cerr << "Usage: ./distributed-ratelimiter-checker {redis host} {redis port} {pool size} " + "{client count} {rate} " + "{limit token}" + "{interval}\n" + << std::endl; + std::cerr << "eg:" << std::endl; + std::cerr << "\t./distributed-ratelimiter-checker 127.0.0.1 6379 16 16 limittoken 1 2\n " + << std::endl; + exit(0); +} + +struct StatData +{ + std::atomic totalFailedC{0}; + std::atomic totalSucC{0}; + + std::atomic totalFailedData{0}; + std::atomic totalSucData{0}; + + std::atomic lastFailedC{0}; + std::atomic lastSucC{0}; + + std::atomic lastFailedData{0}; + std::atomic lastSucData{0}; + + void resetLast() + { + lastFailedC = 0; + lastSucC = 0; + lastFailedData = 0; + lastSucData = 0; + } + + void update(int64_t _data, bool _suc) + { + if (_suc) + { + totalSucC++; + lastSucC++; + totalSucData += _data; + lastSucData += _data; + } + else + { + totalFailedC++; + lastFailedC++; + totalFailedData += _data; + lastFailedData += _data; + } + } +}; + +// TODO: add latency check + +int main(int argc, char** argv) +{ + if (argc < 8) + { + usage(); + } + + std::string redisIP = argv[1]; + uint16_t redisPort = atoi(argv[2]); + int32_t redisPoolSize = std::stol(argv[3]); + uint32_t clientCount = std::stoul(argv[4]); + std::string limitToken = argv[5]; + uint32_t rate = std::stoul(argv[6]) * 1024 * 1024 * 8; + uint32_t rateInterval = std::stoul(argv[7]); + + std::cout << " [distributed-ratelimiter-checker] parameters:" << redisIP << std::endl; + std::cout << "\t### redisIP:" << redisIP << std::endl; + std::cout << "\t### redisPort:" << redisPort << std::endl; + std::cout << "\t### redisPoolSize:" << redisPoolSize << std::endl; + std::cout << "\t### clientCount:" << clientCount << std::endl; + std::cout << "\t### limitToken:" << limitToken << std::endl; + std::cout << "\t### rate:" << rate << std::endl; + std::cout << "\t### interval:" << rateInterval << std::endl; + + auto factory = std::make_shared("", ""); + + GatewayConfig::RedisConfig redisConfig; + redisConfig.host = redisIP; + redisConfig.port = redisPort; + redisConfig.connectionPoolSize = redisPoolSize; + redisConfig.timeout = 1000; + + // init all redis instance as client + std::vector threads(clientCount); + // + bool allThreadsInitSuc = false; + + // stat statistics + StatData stateData; + + // init random + srand(time(NULL)); + + for (uint32_t i = 0; i < clientCount; i++) + { + auto redis = factory->initRedis(redisConfig); + auto rateLimiter = + std::make_shared(redis, limitToken, rate, rateInterval); + threads.emplace_back([rateLimiter, rate, rateInterval, &allThreadsInitSuc, &stateData]() { + while (true) + { + if (!allThreadsInitSuc) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + + auto start = utcTimeUs(); + + // tryAcquire (0, 1/10 * rate)] once time + auto acquire = random() % (rate / 10); + acquire = (acquire > 0 ? acquire : 1); + + bool result = rateLimiter->tryAcquire(acquire); + + // auto end = utcTimeUs(); + // if (end - start >= 500) + // { + // std::cerr << " [distributed ratelimiter][timeout]" + // << LOG_KV("tid", std::this_thread::get_id()) + // << LOG_KV("acquire", acquire) << LOG_KV("result", result) + // << LOG_KV("elapsedUS", (end - start)) << std::endl; + // } + + // state suc + stateData.update(acquire, result); + + // sleep ms + auto sleepMS = random() % (2 * rateInterval * 10); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + }); + }; + + // stat thread + threads.emplace_back([&allThreadsInitSuc, rate, rateInterval, &stateData]() { + while (true) + { + if (!allThreadsInitSuc) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + + // reset last stat + stateData.resetLast(); + + std::this_thread::sleep_for(std::chrono::seconds(rateInterval)); + + // stat report + std::cerr << " [distributed ratelimiter][stat]" << LOG_DESC(" stat -> ") + << LOG_KV("interval", rateInterval) + << LOG_KV("totalSucC", stateData.totalSucC) + << LOG_KV("totalFailedC", stateData.totalFailedC) + << LOG_KV("totalSucData", stateData.totalSucData) + << LOG_KV("totalFailedData", stateData.totalFailedData) + << LOG_KV("lastSucC", stateData.lastSucC) + << LOG_KV("lastFailedC", stateData.lastFailedC) + << LOG_KV("lastSucData", stateData.lastSucData) + << LOG_KV("lastFailedData", stateData.lastFailedData) << LOG_KV("rate", rate) + << LOG_KV(" STATUS ", stateData.lastSucData <= (rate + int64_t(0.05 * rate)) ? + "OK" : + "OverFlow") + << std::endl; + } + }); + + // init completely + allThreadsInitSuc = true; + + // join all thread + std::for_each(threads.begin(), threads.end(), [](std::thread& _t) mutable { + if (_t.joinable()) + { + _t.join(); + } + }); + + return 0; +} \ No newline at end of file diff --git a/fisco-bcos-demo/echo_client_sample.cpp b/fisco-bcos-demo/echo_client_sample.cpp new file mode 100644 index 0000000..c95e167 --- /dev/null +++ b/fisco-bcos-demo/echo_client_sample.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file echo_client_sample.cpp + * @author: yujiechen + * @date 2022-06-10 + */ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::tool; + +void usage() +{ + std::cerr << "Usage: ./echo-client-sample qps(MBit/s) ${server_address} ${port} " + "payloadSize(KBytes, default is 1MBytes)\n" + << std::endl; + exit(0); +} + +void sendMessage(NodeIPEndpoint const& _endPoint, std::shared_ptr _msg, + std::shared_ptr _service, std::shared_ptr _rateLimiter) +{ + while (true) + { + _rateLimiter->acquire(1, true); + auto seq = _service->messageFactory()->newSeq(); + _msg->setSeq(seq); + auto startT = utcTime(); + auto msgSize = _msg->payload()->size(); + _service->asyncSendMessageByEndPoint(_endPoint, _msg, + [msgSize, startT](NetworkException _e, std::shared_ptr _session, + std::shared_ptr) { + if (_e.errorCode()) + { + BCOS_LOG(WARNING) << LOG_DESC("asyncSendMessage network error") + << LOG_KV("code", _e.errorCode()) << LOG_KV("msg", _e.what()); + return; + } + BCOS_LOG(INFO) << LOG_DESC("receiveResponse, timecost:") << (utcTime() - startT) + << LOG_KV("msgSize", msgSize); + }); + } +} + +int main(int argc, char** argv) +{ + if (argc <= 3) + { + usage(); + } + std::string hostIp = argv[1]; + uint16_t port = atoi(argv[2]); + NodeIPEndpoint serverEndPoint(hostIp, port); + uint64_t qps = (atol(argv[3])) * 1024 * 1024; + // default payLoadSize is 1MB + uint64_t payLoadSize = 1024 * 1024; + if (argc > 3) + { + payLoadSize = (atol(argv[4]) * 1024); + } + std::cout << "### payLoad:" << payLoadSize << std::endl; + std::cout << "### qps: " << qps << std::endl; + int64_t packetQPS = (qps) / (payLoadSize * 8); + std::cout << "### packetQPS: " << packetQPS << std::endl; + + g_BCOSConfig.setCodec(std::make_shared()); + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(); + std::string configFilePath = "config.ini"; + nodeConfig->loadConfig(configFilePath); + + auto logInitializer = std::make_shared(); + boost::property_tree::ptree pt; + boost::property_tree::read_ini(configFilePath, pt); + logInitializer->initLog(pt); + + GatewayFactory gatewayFactory(nodeConfig->chainId(), "localClient", nullptr); + auto gateway = gatewayFactory.buildGateway(configFilePath, true, nullptr, "localClient"); + auto service = std::dynamic_pointer_cast(gateway->p2pInterface()); + + gateway->start(); + // construct message + auto msg = std::dynamic_pointer_cast(service->messageFactory()->buildMessage()); + msg->setPacketType(999); + std::string randStr(payLoadSize, 'a'); + msg->setPayload(std::make_shared(randStr.begin(), randStr.end())); + auto rateLimiter = std::make_shared(packetQPS); + sendMessage(serverEndPoint, msg, service, rateLimiter); + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/fisco-bcos-demo/echo_server_sample.cpp b/fisco-bcos-demo/echo_server_sample.cpp new file mode 100644 index 0000000..b19dab5 --- /dev/null +++ b/fisco-bcos-demo/echo_server_sample.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file echo_server_sample.cpp + * @author: yujiechen + * @date 2022-06-10 + */ +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::gateway; +using namespace bcos::tool; + +void usage() +{ + std::cerr << "Usage: echo-server-sample \n" + << "Example:\n" + << "./echo-server-sample\n"; + std::exit(0); +} + +int main(int argc, char** argv) +{ + g_BCOSConfig.setCodec(std::make_shared()); + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(); + std::string configFilePath = "config.ini"; + nodeConfig->loadConfig(configFilePath); + + auto logInitializer = std::make_shared(); + boost::property_tree::ptree pt; + boost::property_tree::read_ini(configFilePath, pt); + logInitializer->initLog(pt); + + GatewayFactory gatewayFactory(nodeConfig->chainId(), "localClient", nullptr); + auto gateway = gatewayFactory.buildGateway(configFilePath, true, nullptr, "localClient"); + auto service = std::dynamic_pointer_cast(gateway->p2pInterface()); + + gateway->start(); + + + service->registerHandlerByMsgType( + 999, [](NetworkException _e, std::shared_ptr _session, P2PMessage::Ptr _msg) { + if (_e.errorCode()) + { + return; + } + auto startT = utcTime(); + _msg->setRespPacket(); + _session->session()->asyncSendMessage(_msg); + BCOS_LOG(INFO) << LOG_DESC("sendResponse") << LOG_KV("timeCost", (utcTime() - startT)) + << LOG_KV("msgSize", (_msg->payload()->size())); + }); + while (true) + { + // TEST_SERVER_LOG(INFO, MODULE_NAME) << LOG_BADGE(" [Main] ===>>>> "); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/CMakeLists.txt b/fisco-bcos-tars-service/CMakeLists.txt new file mode 100644 index 0000000..3769049 --- /dev/null +++ b/fisco-bcos-tars-service/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) + +list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +macro(compile_service SERVICE_SOURCE_PATH BINARY_NAME) + add_subdirectory(${SERVICE_SOURCE_PATH}) + + add_custom_command(OUTPUT ${BINARY_NAME}.tgz + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/fisco-bcos-tars-service/${SERVICE_SOURCE_PATH}/${BINARY_NAME} ${CMAKE_BINARY_DIR}/fisco-bcos-tars-service/${BINARY_NAME}/${BINARY_NAME} + COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/fisco-bcos-tars-service tar czfv ${BINARY_NAME}.tgz ${BINARY_NAME}/${BINARY_NAME} + COMMENT "Compressing ${BINARY_NAME}..." DEPENDS ${CMAKE_BINARY_DIR}/fisco-bcos-tars-service/${SERVICE_SOURCE_PATH}/${BINARY_NAME}) + + add_custom_target(${BINARY_NAME}-tar DEPENDS ${BINARY_NAME}.tgz ${BINARY_NAME}) + list(APPEND SERVICE_TAR_LIST ${BINARY_NAME}-tar) +endmacro() + +# RpcService +set(RPC_BINARY_NAME BcosRpcService) +compile_service("RpcService/main" ${RPC_BINARY_NAME}) + +# GatewayService +set(GATEWAY_BINARY_NAME BcosGatewayService) +compile_service("GatewayService/main" ${GATEWAY_BINARY_NAME}) + +# pro-NodeService +set(PRO_NODE_SERVICE_BINARY_NAME BcosNodeService) +compile_service("NodeService/pro" ${PRO_NODE_SERVICE_BINARY_NAME}) + +# max-NodeService +set(MAX_NODE_SERVICE_BINARY_NAME BcosMaxNodeService) +compile_service("NodeService/max" ${MAX_NODE_SERVICE_BINARY_NAME}) + +if(WITH_TIKV) + # ExecutorService + set(EXECUTOR_BINARY_NAME BcosExecutorService) + compile_service("ExecutorService/main" ${EXECUTOR_BINARY_NAME}) +endif() + +add_custom_target(tar DEPENDS ${SERVICE_TAR_LIST}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/Common/TarsUtils.h b/fisco-bcos-tars-service/Common/TarsUtils.h new file mode 100644 index 0000000..104a3cd --- /dev/null +++ b/fisco-bcos-tars-service/Common/TarsUtils.h @@ -0,0 +1,185 @@ +#pragma once +#include "bcos-tars-protocol/bcos-tars-protocol/impl/TarsServantProxyCallback.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RPCSERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[RPCSERVICE][INITIALIZER]" +#define GATEWAYSERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[GATEWAYSERVICE][INITIALIZER]" +#define TXPOOLSERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[TXPOOLSERVICE]" +#define PBFTSERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[PBFTSERVICE]" +#define FRONTSERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[FRONTSERVICE]" + +namespace bcostars +{ +inline tars::TC_Endpoint string2TarsEndPoint(const std::string& _strEndPoint) +{ + std::vector temp; + boost::split(temp, _strEndPoint, boost::is_any_of(":"), boost::token_compress_on); + + if (temp.size() != 2) + { + BOOST_THROW_EXCEPTION(bcos::InvalidParameter() << bcos::errinfo_comment( + "incorrect string endpoint, it should be in IP:Port format")); + } + + tars::TC_Endpoint ep(temp[0], boost::lexical_cast(temp[1]), 60000); + return ep; +} + +inline std::string getProxyDesc(std::string const& _servantName) +{ + std::string desc = + tars::ServerConfig::Application + "." + tars::ServerConfig::ServerName + "." + _servantName; + return desc; +} +inline std::string getLogPath() +{ + return tars::ServerConfig::LogPath + "/" + tars::ServerConfig::Application + "/" + + tars::ServerConfig::ServerName; +} + +inline std::string endPointToString( + std::string const& _serviceName, const std::string& _host, uint16_t _port) +{ + return _serviceName + "@tcp -h " + _host + " -p " + boost::lexical_cast(_port); +} + +inline std::string endPointToString( + std::string const& _serviceName, tars::TC_Endpoint const& _endPoint) +{ + return endPointToString(_serviceName, _endPoint.getHost(), _endPoint.getPort()); +} + +inline std::string endPointToString( + std::string const& _serviceName, const std::vector& _eps) +{ + if (_eps.empty()) + { + BOOST_THROW_EXCEPTION( + bcos::InvalidParameter() << bcos::errinfo_comment( + "vector should not be empty in endPointToString")); + } + + bool first = true; + std::string endPointStr = _serviceName; + for (const auto& _ep : _eps) + { + endPointStr += (first ? "@" : ":"); + endPointStr += + ("tcp -h " + _ep.getHost() + " -p " + boost::lexical_cast(_ep.getPort())); + + first = false; + } + return endPointStr; +} + +inline std::pair getEndPointDescByAdapter( + tars::Application* _application, std::string const& _servantName) +{ + auto adapters = _application->getEpollServer()->getBindAdapters(); + if (adapters.size() == 0) + { + return std::make_pair(false, ""); + } + auto prxDesc = getProxyDesc(_servantName); + auto adapterName = prxDesc + "Adapter"; + for (auto const& adapter : adapters) + { + if (adapter->getName() == adapterName) + { + return std::make_pair(true, endPointToString(prxDesc, adapter->getEndpoint())); + } + } + return std::make_pair(false, ""); +} + +template +S createServantProxy(tars::Communicator* communicator, std::string const& _serviceName, + TarsServantProxyOnConnectHandler _connectHandler = TarsServantProxyOnConnectHandler(), + TarsServantProxyOnCloseHandler _closeHandler = TarsServantProxyOnCloseHandler()) +{ + auto prx = communicator->stringToProxy(_serviceName); + + BCOS_LOG(INFO) << LOG_BADGE("createServantProxy") << LOG_DESC("create servant proxy") + << LOG_KV("serviceName", _serviceName) << LOG_KV("proxy address", prx.get()); + if (!prx->tars_get_push_callback()) + { + auto proxyCallback = std::make_unique( + _serviceName, tars::TC_AutoPtr::dynamicCast(prx)); + if (_connectHandler) + { + proxyCallback->setOnConnectHandler(_connectHandler); + } + + if (_closeHandler) + { + proxyCallback->setOnCloseHandler(_closeHandler); + } + + proxyCallback->start(); + prx->tars_set_push_callback(proxyCallback.release()); + } + + prx->tars_async_ping(); + prx->tars_reconnect(5); + + return prx; +} + +template +S createServantProxy(std::string const& _serviceName) +{ + return createServantProxy(tars::Application::getCommunicator().get(), _serviceName, + TarsServantProxyOnConnectHandler(), TarsServantProxyOnCloseHandler()); +} + +template +S createServantProxy(std::string const& _serviceName, const std::string& _host, uint16_t _port) +{ + auto endPointStr = endPointToString(_serviceName, _host, _port); + return createServantProxy(endPointStr); +} + +template +S createServantProxy(std::string const& _serviceName, const tars::TC_Endpoint& _ep) +{ + auto endPointStr = endPointToString(_serviceName, _ep); + return createServantProxy(endPointStr); +} + +template +S createServantProxy(std::string const& _serviceName, const std::vector& _eps) +{ + std::string endPointStr = endPointToString(_serviceName, _eps); + + return createServantProxy(endPointStr); +} + +template +S createServantProxy(bool _withEndPoints, std::string const& _serviceName, + const std::vector& _eps = std::vector{}) +{ + std::string serviceParams; + if (_withEndPoints) + { + serviceParams = endPointToString(_serviceName, _eps); + } + else + { + serviceParams = _serviceName; + } + + return createServantProxy(serviceParams); +} + +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.cpp b/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.cpp new file mode 100644 index 0000000..61e2a96 --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.cpp @@ -0,0 +1,259 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ExecutorServiceServer.h + * @author: yujiechen + * @date 2022-5-10 + */ +#include "ExecutorServiceServer.h" +#include +#include +#include +#include + +using namespace bcostars; + +bcostars::ExecutionMessage toTarsMessage(const bcos::protocol::ExecutionMessage::UniquePtr& message) +{ + if (message) + { + return ((bcostars::protocol::ExecutionMessageImpl::UniquePtr&)message)->inner(); + } + else + { + return bcostars::ExecutionMessage(); + } +} + +bcostars::Error ExecutorServiceServer::status( + bcostars::ExecutorStatus& _output, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_executor->status( + [_current](bcos::Error::Ptr _error, bcos::protocol::ExecutorStatus::UniquePtr _status) { + bcostars::ExecutorStatus status; + status.seq = _status->seq(); + async_response_status(_current, toTarsError(_error), std::move(status)); + }); + return bcostars::Error(); +} + + +bcostars::Error ExecutorServiceServer::nextBlockHeader(tars::Int64 schedulerTermId, + bcostars::BlockHeader const& _blockHeader, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto header = std::make_shared( + [m_header = _blockHeader]() mutable { return &m_header; }); + m_executor->nextBlockHeader(schedulerTermId, header, [_current](bcos::Error::UniquePtr _error) { + async_response_nextBlockHeader(_current, toTarsError(std::move(_error))); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::executeTransaction(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto executionMessageImpl = std::make_unique( + [m_message = _input]() mutable { return &m_message; }); + m_executor->executeTransaction( + std::move(executionMessageImpl), [_current](bcos::Error::UniquePtr _error, + bcos::protocol::ExecutionMessage::UniquePtr _output) { + async_response_executeTransaction( + _current, toTarsError(std::move(_error)), toTarsMessage(_output)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::call(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage& _output, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto msg = std::make_unique( + [m_message = _input]() mutable { return &m_message; }); + m_executor->call(std::move(msg), [_current](bcos::Error::UniquePtr _error, + bcos::protocol::ExecutionMessage::UniquePtr _output) { + async_response_call(_current, toTarsError(std::move(_error)), toTarsMessage(_output)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::executeTransactions(std::string const& _contractAddress, + std::vector const& _inputs, + std::vector&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto executionMessages = + std::make_shared>(); + for (auto const& input : _inputs) + { + auto msg = std::make_unique( + [m_message = input]() mutable { return &m_message; }); + executionMessages->emplace_back(std::move(msg)); + } + m_executor->executeTransactions(_contractAddress, *executionMessages, + [_current](bcos::Error::UniquePtr _error, + std::vector _outputs) { + std::vector tarsOutputs; + for (auto const& it : _outputs) + { + tarsOutputs.emplace_back(toTarsMessage(it)); + } + async_response_executeTransactions( + _current, toTarsError(std::move(_error)), std::move(tarsOutputs)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::dmcExecuteTransactions(std::string const& _contractAddress, + std::vector const& _inputs, + std::vector&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto executionMessages = + std::make_shared>(); + for (auto const& input : _inputs) + { + auto msg = std::make_unique( + [m_message = input]() mutable { return &m_message; }); + executionMessages->emplace_back(std::move(msg)); + } + m_executor->dmcExecuteTransactions(_contractAddress, *executionMessages, + [_current](bcos::Error::UniquePtr _error, + std::vector _outputs) { + std::vector tarsOutputs; + for (auto const& it : _outputs) + { + tarsOutputs.emplace_back(toTarsMessage(it)); + } + async_response_dmcExecuteTransactions( + _current, toTarsError(std::move(_error)), std::move(tarsOutputs)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::dagExecuteTransactions( + std::vector const& _inputs, + std::vector&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + std::vector executionMessages; + for (auto const& input : _inputs) + { + auto msg = std::make_unique( + [m_message = input]() mutable { return &m_message; }); + executionMessages.emplace_back(std::move(msg)); + } + m_executor->dagExecuteTransactions( + executionMessages, [_current](bcos::Error::UniquePtr _error, + std::vector _outputs) { + std::vector tarsOutputs; + for (auto const& it : _outputs) + { + tarsOutputs.emplace_back(toTarsMessage(it)); + } + async_response_dagExecuteTransactions( + _current, toTarsError(std::move(_error)), std::move(tarsOutputs)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::dmcCall(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage& _output, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto msg = std::make_unique( + [m_message = _input]() mutable { return &m_message; }); + m_executor->dmcCall(std::move(msg), [_current](bcos::Error::UniquePtr _error, + bcos::protocol::ExecutionMessage::UniquePtr _output) { + async_response_dmcCall(_current, toTarsError(std::move(_error)), toTarsMessage(_output)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::getHash( + tars::Int64 _blockNumber, std::vector&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_executor->getHash( + _blockNumber, [_current](bcos::Error::UniquePtr _error, bcos::crypto::HashType _hash) { + std::vector hashData(_hash.begin(), _hash.end()); + async_response_getHash(_current, toTarsError(std::move(_error)), std::move(hashData)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::prepare( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosTwoPCParams = toBcosTwoPCParams(_params); + m_executor->prepare(bcosTwoPCParams, [_current](bcos::Error::Ptr _error) { + async_response_prepare(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::commit( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosTwoPCParams = toBcosTwoPCParams(_params); + m_executor->commit(bcosTwoPCParams, [_current](bcos::Error::Ptr _error) { + async_response_commit(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::rollback( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosTwoPCParams = toBcosTwoPCParams(_params); + m_executor->rollback(bcosTwoPCParams, [_current](bcos::Error::Ptr _error) { + async_response_rollback(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error ExecutorServiceServer::getCode( + std::string const& _contractAddress, std::vector&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_executor->getCode( + _contractAddress, [_current](bcos::Error::Ptr _error, bcos::bytes _codeBytes) { + std::vector code(_codeBytes.begin(), _codeBytes.end()); + async_response_getCode(_current, toTarsError(_error), std::move(code)); + }); + return bcostars::Error(); +} +bcostars::Error ExecutorServiceServer::getABI( + std::string const& _contractAddress, std::string& _abi, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_executor->getABI(_contractAddress, [_current](bcos::Error::Ptr _error, std::string _abi) { + async_response_getABI(_current, toTarsError(_error), std::move(_abi)); + }); + return bcostars::Error(); +} +bcostars::Error ExecutorServiceServer::reset(tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_executor->reset([_current](bcos::Error::Ptr _error) { + async_response_reset(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} diff --git a/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.h b/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.h new file mode 100644 index 0000000..bc79fd7 --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/ExecutorServiceServer.h @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file ExecutorServiceServer.h + * @author: yujiechen + * @date 2022-5-10 + */ +#pragma once +#include +#include +#include +namespace bcostars +{ +struct ExecutorServiceParam +{ + bcos::executor::ParallelTransactionExecutorInterface::Ptr executor; + bcos::crypto::CryptoSuite::Ptr cryptoSuite; +}; +class ExecutorServiceServer : public ExecutorService +{ +public: + using Ptr = std::shared_ptr; + ExecutorServiceServer(ExecutorServiceParam const& _param) + : m_executor(_param.executor), m_cryptoSuite(_param.cryptoSuite) + {} + ~ExecutorServiceServer() override {} + + void initialize() override {} + void destroy() override {} + bcostars::Error status( + bcostars::ExecutorStatus& _output, tars::TarsCurrentPtr current) override; + bcostars::Error nextBlockHeader(tars::Int64 schedulerTermId, + bcostars::BlockHeader const& _blockHeader, tars::TarsCurrentPtr _current) override; + bcostars::Error executeTransaction(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage& _output, tars::TarsCurrentPtr _current) override; + bcostars::Error call(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage& _output, tars::TarsCurrentPtr _current) override; + bcostars::Error executeTransactions(std::string const& _contractAddress, + std::vector const& _inputs, + std::vector& _ouptputs, tars::TarsCurrentPtr _current) override; + bcostars::Error dmcExecuteTransactions(std::string const& _contractAddress, + std::vector const& _inputs, + std::vector& _ouptputs, tars::TarsCurrentPtr _current) override; + bcostars::Error dagExecuteTransactions(std::vector const& _inputs, + std::vector& _ouptputs, tars::TarsCurrentPtr _current) override; + bcostars::Error dmcCall(bcostars::ExecutionMessage const& _input, + bcostars::ExecutionMessage& _output, tars::TarsCurrentPtr _current) override; + + bcostars::Error getHash(tars::Int64 _blockNumber, std::vector& _hash, + tars::TarsCurrentPtr _current) override; + + bcostars::Error prepare( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) override; + bcostars::Error commit( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) override; + bcostars::Error rollback( + bcostars::TwoPCParams const& _params, tars::TarsCurrentPtr _current) override; + + bcostars::Error getCode(std::string const& _contractAddress, std::vector& _code, + tars::TarsCurrentPtr _current) override; + bcostars::Error getABI(std::string const& _contractAddress, std::string& _abi, + tars::TarsCurrentPtr _current) override; + bcostars::Error reset(tars::TarsCurrentPtr _current) override; + +private: + bcos::executor::ParallelTransactionExecutorInterface::Ptr m_executor; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/ExecutorService/main/CMakeLists.txt b/fisco-bcos-tars-service/ExecutorService/main/CMakeLists.txt new file mode 100644 index 0000000..58f27d4 --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/main/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +aux_source_directory(../ SRC_LIST) +add_executable(${EXECUTOR_BINARY_NAME} ${SRC_LIST} ${HEADERS}) + +target_link_libraries(${EXECUTOR_BINARY_NAME} PUBLIC ${PROTOCOL_INIT_LIB} ${COMMAND_HELPER_LIB} ${EXECUTOR_TARGET} ${LEDGER_TARGET} ${STORAGE_TARGET}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.cpp b/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.cpp new file mode 100644 index 0000000..295b2a5 --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.cpp @@ -0,0 +1,213 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the ExecutorService + * @file ExecutorServiceApp.cpp + * @author: yujiechen + * @date 2022-5-10 + */ +#include "ExecutorServiceApp.h" +#include "../../Common/TarsUtils.h" +#include "../ExecutorServiceServer.h" +#include "bcos-executor/src/executor/SwitchExecutorManager.h" +#include "libinitializer/CommandHelper.h" +#include "libinitializer/ExecutorInitializer.h" +#include "libinitializer/StorageInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcos::storage; +using namespace bcos::initializer; +using namespace bcos::protocol; + +void ExecutorServiceApp::initialize() +{ + try + { + // m_timer = std::make_shared(3000, "registerExecutor"); + createAndInitExecutor(); + // m_timer->registerTimeoutHandler(boost::bind(&ExecutorServiceApp::registerExecutor, + // this)); m_timer->start(); + } + catch (std::exception const& e) + { + std::cout << "init ExecutorService failed, error: " << boost::diagnostic_information(e) + << std::endl; + exit(-1); + } +} + +void ExecutorServiceApp::createAndInitExecutor() +{ + // fetch config + m_iniConfigPath = tars::ServerConfig::BasePath + "/config.ini"; + m_genesisConfigPath = tars::ServerConfig::BasePath + "/config.genesis"; + addConfig("config.ini"); + addConfig("config.genesis"); + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("createAndInitExecutor: fetch config success") + << LOG_KV("iniConfigPath", m_iniConfigPath) + << LOG_KV("genesisConfigPath", m_genesisConfigPath); + + m_nodeConfig = + std::make_shared(std::make_shared()); + + // init log + boost::property_tree::ptree pt; + boost::property_tree::read_ini(m_iniConfigPath, pt); + + // init service.without_tars_framework first for determine the log path + m_nodeConfig->loadWithoutTarsFrameworkConfig(pt); + + m_logInitializer = std::make_shared(); + if (!m_nodeConfig->withoutTarsFramework()) + { + m_logInitializer->setLogPath(getLogPath()); + } + m_logInitializer->initLog(m_iniConfigPath); + + boost::property_tree::ptree genesisPt; + boost::property_tree::read_ini(m_genesisConfigPath, genesisPt); + + // load protocolInitializer + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("loadNodeConfig"); + + m_nodeConfig->loadGenesisConfig(genesisPt); + m_nodeConfig->loadConfig(pt); + m_nodeConfig->loadNodeServiceConfig(m_nodeConfig->nodeName(), pt, true); + // init the protocol + m_protocolInitializer = std::make_shared(); + m_protocolInitializer->init(m_nodeConfig); + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("loadNodeConfig success"); + // for stat the nodeVersion + bcos::initializer::showNodeVersionMetric(); + + auto withoutTarsFramework = m_nodeConfig->withoutTarsFramework(); + + // create txpool client + auto txpoolServiceName = m_nodeConfig->txpoolServiceName(); + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("create TxPoolServiceClient") + << LOG_KV("txpoolServiceName", txpoolServiceName) + << LOG_KV("withoutTarsFramework", withoutTarsFramework); + + std::vector endPoints; + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::TXPOOL_NAME, endPoints); + + auto txpoolServicePrx = createServantProxy( + withoutTarsFramework, txpoolServiceName, endPoints); + + m_txpool = std::make_shared(txpoolServicePrx, + m_protocolInitializer->cryptoSuite(), m_protocolInitializer->blockFactory()); + + auto schedulerServiceName = m_nodeConfig->schedulerServiceName(); + + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::SCHEDULER_NAME, endPoints); + + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("create SchedulerServiceClient") + << LOG_KV("schedulerServiceName", schedulerServiceName); + + auto schedulerPrx = createServantProxy( + withoutTarsFramework, schedulerServiceName, endPoints); + + m_scheduler = std::make_shared( + schedulerPrx, m_protocolInitializer->cryptoSuite()); + + // create executor + auto storage = StorageInitializer::build(m_nodeConfig->pdAddrs(), getLogPath(), + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + + bcos::storage::CacheStorageFactory::Ptr cacheFactory = nullptr; + if (m_nodeConfig->enableLRUCacheStorage()) + { + cacheFactory = std::make_shared( + storage, m_nodeConfig->cacheSize()); + EXECUTOR_SERVICE_LOG(INFO) + << "createAndInitExecutor: enableLRUCacheStorage, size: " << m_nodeConfig->cacheSize(); + } + else + { + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("createAndInitExecutor: disableLRUCacheStorage"); + } + + auto executionMessageFactory = + std::make_shared(); + auto stateStorageFactory = std::make_shared(m_nodeConfig->keyPageSize()); + + auto blockFactory = m_protocolInitializer->blockFactory(); + auto ledger = std::make_shared(blockFactory, storage); + + auto executorFactory = std::make_shared(ledger, + m_txpool, cacheFactory, storage, executionMessageFactory, stateStorageFactory, + m_protocolInitializer->cryptoSuite()->hashImpl(), m_nodeConfig->isWasm(),m_nodeConfig->vmCacheSize(), + m_nodeConfig->isAuthCheck(), "executor"); + + m_executor = std::make_shared(executorFactory); + + std::weak_ptr executorWeakPtr = m_executor; + std::weak_ptr storageWeakPtr = + dynamic_pointer_cast(storage); + auto switchHandler = [executor = executorWeakPtr, storageWeakPtr]() { + if (executor.lock()) + { + executor.lock()->triggerSwitch(); + } + }; + dynamic_pointer_cast(storage)->setSwitchHandler(switchHandler); + + + ExecutorServiceParam param; + param.executor = m_executor; + param.cryptoSuite = m_protocolInitializer->cryptoSuite(); + addServantWithParams( + getProxyDesc(EXECUTOR_SERVANT_NAME), param); + auto ret = getEndPointDescByAdapter(this, EXECUTOR_SERVANT_NAME); + if (!ret.first) + { + throw std::runtime_error("load endpoint information failed"); + } + m_executorName = ret.second; + // registerExecutor(); + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("createAndInitExecutor success"); +} + +void ExecutorServiceApp::registerExecutor() +{ + if (m_registerExecutorSuccess) + { + m_timer->stop(); + return; + } + m_timer->restart(); + EXECUTOR_SERVICE_LOG(INFO) << LOG_DESC("registerExecutor") + << LOG_KV("executorName", m_executorName); + m_scheduler->registerExecutor(m_executorName, nullptr, [this](bcos::Error::Ptr&& _error) { + if (_error) + { + EXECUTOR_SERVICE_LOG(ERROR) + << LOG_DESC("registerExecutor error") << LOG_KV("name", m_executorName) + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + return; + } + m_registerExecutorSuccess = true; + EXECUTOR_SERVICE_LOG(INFO) + << LOG_DESC("registerExecutor success") << LOG_KV("name", m_executorName); + }); +} diff --git a/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.h b/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.h new file mode 100644 index 0000000..8c844ac --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/main/ExecutorServiceApp.h @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the ExecutorService + * @file ExecutorServiceApp.h + * @author: yujiechen + * @date 2022-5-10 + */ +#pragma once +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include + +#define EXECUTOR_SERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("ExecutorServiceApp") + +namespace bcostars +{ +class ExecutorServiceApp : public tars::Application +{ +public: + ExecutorServiceApp() = default; + ~ExecutorServiceApp() override {} + void initialize() override; + void destroyApp() override + { + // stop executor + if (m_executor) + { + m_executor->stop(); + } + } + +protected: + virtual void createAndInitExecutor(); + virtual void registerExecutor(); + +private: + std::string m_iniConfigPath; + std::string m_genesisConfigPath; + bcos::BoostLogInitializer::Ptr m_logInitializer; + + bcos::tool::NodeConfig::Ptr m_nodeConfig; + bcos::initializer::ProtocolInitializer::Ptr m_protocolInitializer; + + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::executor::SwitchExecutorManager::Ptr m_executor; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + std::string m_executorName; + std::shared_ptr m_timer; + bool m_registerExecutorSuccess = false; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/ExecutorService/main/main.cpp b/fisco-bcos-tars-service/ExecutorService/main/main.cpp new file mode 100644 index 0000000..7781a53 --- /dev/null +++ b/fisco-bcos-tars-service/ExecutorService/main/main.cpp @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief main for ExecutorService + * @file main.cpp + * @author: yujiechen + * @date 2022-05-10 + */ +#include "ExecutorServiceApp.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::initializer; +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + ExecutorServiceApp app; + printVersion(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The ExecutorService is running..." << std::endl; + app.main(argc, argv); + app.waitForShutdown(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The ExecutorService program exit normally." << std::endl; + return 0; + } + catch (std::exception& e) + { + std::cerr << "ExecutorService std::exception:" << e.what() << std::endl; + } + catch (...) + { + std::cerr << "ExecutorService unknown exception." << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/FrontService/FrontServiceServer.cpp b/fisco-bcos-tars-service/FrontService/FrontServiceServer.cpp new file mode 100644 index 0000000..0a62661 --- /dev/null +++ b/fisco-bcos-tars-service/FrontService/FrontServiceServer.cpp @@ -0,0 +1,150 @@ +#include "FrontServiceServer.h" +#include "../Common/TarsUtils.h" +#include + +using namespace bcostars; + +bcostars::Error FrontServiceServer::asyncGetGroupNodeInfo( + GroupNodeInfo&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + m_frontServiceInitializer->front()->asyncGetGroupNodeInfo( + [current](bcos::Error::Ptr _error, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + // Note: the nodeIDs maybe null if no connections + std::vector> tarsNodeIDs; + if (!_groupNodeInfo) + { + async_response_asyncGetGroupNodeInfo( + current, toTarsError(_error), bcostars::GroupNodeInfo()); + return; + } + auto groupInfoImpl = + std::dynamic_pointer_cast(_groupNodeInfo); + async_response_asyncGetGroupNodeInfo( + current, toTarsError(_error), groupInfoImpl->inner()); + }); + + return bcostars::Error(); +} + +void FrontServiceServer::asyncSendBroadcastMessage(tars::Int32 _nodeType, tars::Int32 moduleID, + const vector& data, tars::TarsCurrentPtr) +{ + m_frontServiceInitializer->front()->asyncSendBroadcastMessage( + _nodeType, moduleID, bcos::bytesConstRef((bcos::byte*)data.data(), data.size())); +} + +bcostars::Error FrontServiceServer::asyncSendMessageByNodeID(tars::Int32 moduleID, + const vector& nodeID, const vector& data, tars::UInt32 timeout, + tars::Bool requireRespCallback, vector& responseNodeID, + vector& responseData, std::string& seq, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto bcosNodeID = m_frontServiceInitializer->keyFactory()->createKey( + bcos::bytesConstRef((bcos::byte*)nodeID.data(), nodeID.size())); + if (requireRespCallback) + { + m_frontServiceInitializer->front()->asyncSendMessageByNodeID(moduleID, bcosNodeID, + bcos::bytesConstRef((bcos::byte*)data.data(), data.size()), timeout, + [current](bcos::Error::Ptr _error, bcos::crypto::NodeIDPtr _nodeID, + bcos::bytesConstRef _data, const std::string& _id, + bcos::front::ResponseFunc _respFunc) { + boost::ignore_unused(_respFunc); + auto encodedNodeID = *_nodeID->encode(); + async_response_asyncSendMessageByNodeID(current, toTarsError(_error), + std::vector(encodedNodeID.begin(), encodedNodeID.end()), + std::vector(_data.begin(), _data.end()), _id); + }); + } + else + { + m_frontServiceInitializer->front()->asyncSendMessageByNodeID(moduleID, bcosNodeID, + bcos::bytesConstRef((bcos::byte*)data.data(), data.size()), timeout, nullptr); + + // response directly + bcos::bytesConstRef respData; + async_response_asyncSendMessageByNodeID(current, toTarsError(nullptr), + std::vector(nodeID.begin(), nodeID.end()), + std::vector(respData.begin(), respData.end()), seq); + } + + return bcostars::Error(); +} + +void FrontServiceServer::asyncSendMessageByNodeIDs(tars::Int32 moduleID, + const vector>& nodeIDs, const vector& data, + tars::TarsCurrentPtr current) +{ + std::vector bcosNodeIDs; + bcosNodeIDs.reserve(nodeIDs.size()); + for (auto const& it : nodeIDs) + { + bcosNodeIDs.push_back(m_frontServiceInitializer->keyFactory()->createKey( + bcos::bytesConstRef((bcos::byte*)it.data(), it.size()))); + } + + m_frontServiceInitializer->front()->asyncSendMessageByNodeIDs( + moduleID, bcosNodeIDs, bcos::bytesConstRef((bcos::byte*)data.data(), data.size())); +} + +bcostars::Error FrontServiceServer::asyncSendResponse(const std::string& id, tars::Int32 moduleID, + const vector& nodeID, const vector& data, tars::TarsCurrentPtr current) +{ + FRONTSERVICE_LOG(TRACE) << LOG_DESC("asyncSendResponse server") << LOG_KV("id", id); + current->setResponse(false); + m_frontServiceInitializer->front()->asyncSendResponse(id, moduleID, + m_frontServiceInitializer->keyFactory()->createKey( + bcos::bytesConstRef((bcos::byte*)nodeID.data(), nodeID.size())), + bcos::bytesConstRef((bcos::byte*)data.data(), data.size()), + [current](bcos::Error::Ptr error) { + async_response_asyncSendResponse(current, toTarsError(error)); + }); + return bcostars::Error(); +} + +bcostars::Error FrontServiceServer::onReceiveBroadcastMessage(const std::string& groupID, + const vector& nodeID, const vector& data, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + m_frontServiceInitializer->front()->onReceiveBroadcastMessage(groupID, + m_frontServiceInitializer->keyFactory()->createKey( + bcos::bytesConstRef((bcos::byte*)nodeID.data(), nodeID.size())), + bcos::bytesConstRef((bcos::byte*)data.data(), data.size()), + [current](bcos::Error::Ptr error) { + async_response_onReceiveBroadcastMessage(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error FrontServiceServer::onReceiveMessage(const std::string& groupID, + const vector& nodeID, const vector& data, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + m_frontServiceInitializer->front()->onReceiveMessage(groupID, + m_frontServiceInitializer->keyFactory()->createKey( + bcos::bytesConstRef((bcos::byte*)nodeID.data(), nodeID.size())), + bcos::bytesConstRef((bcos::byte*)data.data(), data.size()), + [current](bcos::Error::Ptr error) { + async_response_onReceiveMessage(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error FrontServiceServer::onReceiveGroupNodeInfo(const std::string& groupID, + const bcostars::GroupNodeInfo& _groupNodeInfo, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto bcosGroupNodeInfo = std::make_shared( + [m_groupNodeInfo = _groupNodeInfo]() mutable { return &m_groupNodeInfo; }); + m_frontServiceInitializer->front()->onReceiveGroupNodeInfo( + groupID, bcosGroupNodeInfo, [current](bcos::Error::Ptr error) { + async_response_onReceiveGroupNodeInfo(current, toTarsError(error)); + }); + return bcostars::Error(); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/FrontService/FrontServiceServer.h b/fisco-bcos-tars-service/FrontService/FrontServiceServer.h new file mode 100644 index 0000000..1a3b93b --- /dev/null +++ b/fisco-bcos-tars-service/FrontService/FrontServiceServer.h @@ -0,0 +1,59 @@ +#pragma once + +#include "libinitializer/FrontServiceInitializer.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +namespace bcostars +{ +struct FrontServiceParam +{ + bcos::initializer::FrontServiceInitializer::Ptr frontServiceInitializer; +}; +class FrontServiceServer : public FrontService +{ +public: + FrontServiceServer(FrontServiceParam const& _param) + : m_frontServiceInitializer(_param.frontServiceInitializer) + {} + + ~FrontServiceServer() override {} + void initialize() override {} + void destroy() override {} + + bcostars::Error asyncGetGroupNodeInfo( + GroupNodeInfo& groupNodeInfo, tars::TarsCurrentPtr current) override; + + void asyncSendBroadcastMessage(tars::Int32 _nodeType, tars::Int32 moduleID, + const vector& data, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncSendMessageByNodeID(tars::Int32 moduleID, const vector& nodeID, + const vector& data, tars::UInt32 timeout, tars::Bool requireRespCallback, + vector& responseNodeID, vector& responseData, std::string& seq, + tars::TarsCurrentPtr current) override; + + void asyncSendMessageByNodeIDs(tars::Int32 moduleID, const vector>& nodeIDs, + const vector& data, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncSendResponse(const std::string& id, tars::Int32 moduleID, + const vector& nodeID, const vector& data, + tars::TarsCurrentPtr current) override; + bcostars::Error onReceiveBroadcastMessage(const std::string& groupID, + const vector& nodeID, const vector& data, + tars::TarsCurrentPtr current) override; + + bcostars::Error onReceiveMessage(const std::string& groupID, const vector& nodeID, + const vector& data, tars::TarsCurrentPtr current) override; + + bcostars::Error onReceiveGroupNodeInfo(const std::string& groupID, + const bcostars::GroupNodeInfo& groupNodeInfo, tars::TarsCurrentPtr current) override; + +private: + bcos::initializer::FrontServiceInitializer::Ptr m_frontServiceInitializer; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/GatewayService/GatewayInitializer.cpp b/fisco-bcos-tars-service/GatewayService/GatewayInitializer.cpp new file mode 100644 index 0000000..decc0f1 --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/GatewayInitializer.cpp @@ -0,0 +1,124 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the GatewayService + * @file GatewayInitializer.cpp + * @author: yujiechen + * @date 2021-10-15 + */ +#include "GatewayInitializer.h" +#include "../Common/TarsUtils.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include + +#ifdef WITH_TIKV +#include +#endif + +#include +#include +#include + +using namespace tars; +using namespace bcostars; + +void GatewayInitializer::init(std::string const& _configPath) +{ + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("initGlobalConfig"); + g_BCOSConfig.setCodec(std::make_shared()); + + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("initGateWayConfig") << LOG_KV("configPath", _configPath); + + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("load nodeConfig"); + auto nodeConfig = std::make_shared(); + nodeConfig->loadConfig(_configPath, false, true, false); + + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configPath, pt); + nodeConfig->loadServiceConfig(pt); + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("load nodeConfig success"); +#ifdef WITH_TIKV + if (nodeConfig->enableFailOver()) + { + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("enable failover"); + auto memberFactory = std::make_shared(); + auto leaderEntryPointFactory = + std::make_shared(memberFactory); + auto watchDir = "/" + nodeConfig->chainId() + bcos::election::CONSENSUS_LEADER_DIR; + m_leaderEntryPoint = leaderEntryPointFactory->createLeaderEntryPoint( + nodeConfig->failOverClusterUrl(), watchDir, "watchLeaderChange", nodeConfig->pdCaPath(), + nodeConfig->pdCertPath(), nodeConfig->pdKeyPath()); + } +#endif + + auto protocolInitializer = std::make_shared(); + protocolInitializer->init(nodeConfig); + + bcos::gateway::GatewayFactory factory( + nodeConfig->chainId(), nodeConfig->rpcServiceName(), protocolInitializer->dataEncryption()); + auto gatewayServiceName = bcostars::getProxyDesc(bcos::protocol::GATEWAY_SERVANT_NAME); + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("buildGateWay") + << LOG_KV("certPath", m_gatewayConfig->certPath()) + << LOG_KV("nodePath", m_gatewayConfig->nodePath()) + << LOG_KV("gatewayServiceName", gatewayServiceName); + auto gateway = + factory.buildGateway(m_gatewayConfig, false, m_leaderEntryPoint, gatewayServiceName); + + m_gateway = gateway; + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("buildGateway success"); +} + +void GatewayInitializer::start() +{ + if (m_running) + { + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("the gateway has already been started"); + return; + } + m_running = true; + if (m_leaderEntryPoint) + { + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("start leader-entry-point"); + m_leaderEntryPoint->start(); + } + // start the gateway + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("start the gateway"); + m_gateway->start(); + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("start the gateway success"); +} + +void GatewayInitializer::stop() +{ + if (!m_running) + { + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("The GatewayService has already been stopped"); + return; + } + m_running = false; + GATEWAYSERVICE_LOG(INFO) << LOG_DESC("Stop the GatewayService"); + if (m_leaderEntryPoint) + { + m_leaderEntryPoint->stop(); + } + if (m_gateway) + { + m_gateway->stop(); + } + TLOGINFO(LOG_DESC("[GATEWAYSERVICE] Stop the GatewayService success") << std::endl); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/GatewayService/GatewayInitializer.h b/fisco-bcos-tars-service/GatewayService/GatewayInitializer.h new file mode 100644 index 0000000..03101c0 --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/GatewayInitializer.h @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the GatewayService + * @file GatewayInitializer.h + * @author: yujiechen + * @date 2021-10-15 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +class GatewayInitializer +{ +public: + using Ptr = std::shared_ptr; + GatewayInitializer( + std::string const& _configPath, bcos::gateway::GatewayConfig::Ptr _gatewayConfig) + : m_gatewayConfig(_gatewayConfig), + m_keyFactory(std::make_shared()), + m_groupInfoFactory(std::make_shared()), + m_chainNodeInfoFactory(std::make_shared()) + { + init(_configPath); + } + + virtual ~GatewayInitializer() { stop(); } + + + virtual void start(); + virtual void stop(); + + bcos::gateway::GatewayInterface::Ptr gateway() { return m_gateway; } + bcos::group::ChainNodeInfoFactory::Ptr chainNodeInfoFactory() { return m_chainNodeInfoFactory; } + bcos::group::GroupInfoFactory::Ptr groupInfoFactory() { return m_groupInfoFactory; } + + bcos::crypto::KeyFactory::Ptr keyFactory() { return m_keyFactory; } + +protected: + virtual void init(std::string const& _configPath); + +private: + bcos::gateway::GatewayConfig::Ptr m_gatewayConfig; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + bcos::group::GroupInfoFactory::Ptr m_groupInfoFactory; + bcos::group::ChainNodeInfoFactory::Ptr m_chainNodeInfoFactory; + bcos::gateway::GatewayInterface::Ptr m_gateway; + std::atomic_bool m_running = {false}; + + bcos::election::LeaderEntryPointInterface::Ptr m_leaderEntryPoint; +}; +} // namespace bcostars diff --git a/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.cpp b/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.cpp new file mode 100644 index 0000000..986e50c --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.cpp @@ -0,0 +1,65 @@ +#include "GatewayServiceServer.h" +#include +using namespace bcostars; +bcostars::Error GatewayServiceServer::asyncNotifyGroupInfo( + const bcostars::GroupInfo& groupInfo, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto bcosGroupInfo = toBcosGroupInfo(m_gatewayInitializer->chainNodeInfoFactory(), + m_gatewayInitializer->groupInfoFactory(), groupInfo); + m_gatewayInitializer->gateway()->asyncNotifyGroupInfo( + bcosGroupInfo, [current](bcos::Error::Ptr&& _error) { + async_response_asyncNotifyGroupInfo(current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error GatewayServiceServer::asyncSendMessageByTopic(const std::string& _topic, + const vector& _data, tars::Int32& _type, vector&, + tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_gatewayInitializer->gateway()->asyncSendMessageByTopic(_topic, + bcos::bytesConstRef((const bcos::byte*)_data.data(), _data.size()), + [current](bcos::Error::Ptr&& _error, int16_t _type, bcos::bytesPointer _responseData) { + vector response; + if (_responseData) + { + response.assign(_responseData->begin(), _responseData->end()); + } + async_response_asyncSendMessageByTopic(current, toTarsError(_error), _type, response); + }); + return bcostars::Error(); +} + +bcostars::Error GatewayServiceServer::asyncSubscribeTopic( + const std::string& _clientID, const std::string& _topicInfo, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_gatewayInitializer->gateway()->asyncSubscribeTopic( + _clientID, _topicInfo, [current](bcos::Error::Ptr&& _error) { + async_response_asyncSubscribeTopic(current, toTarsError(_error)); + }); + return bcostars::Error(); +} +bcostars::Error GatewayServiceServer::asyncSendBroadcastMessageByTopic( + const std::string& _topic, const vector& _data, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_gatewayInitializer->gateway()->asyncSendBroadcastMessageByTopic( + _topic, bcos::bytesConstRef((const bcos::byte*)_data.data(), _data.size())); + async_response_asyncSendBroadcastMessageByTopic( + current, toTarsError(nullptr)); + return bcostars::Error(); +} + +bcostars::Error GatewayServiceServer::asyncRemoveTopic(const std::string& _clientID, + const vector& _topicList, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_gatewayInitializer->gateway()->asyncRemoveTopic( + _clientID, _topicList, [current](bcos::Error::Ptr&& _error) { + async_response_asyncRemoveTopic(current, toTarsError(_error)); + }); + return bcostars::Error(); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.h b/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.h new file mode 100644 index 0000000..9586c2a --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/GatewayServiceServer.h @@ -0,0 +1,150 @@ +#pragma once + +#include "../Common/TarsUtils.h" +#include "GatewayInitializer.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::group; + +namespace bcostars +{ +struct GatewayServiceParam +{ + GatewayInitializer::Ptr gatewayInitializer; +}; +class GatewayServiceServer : public bcostars::GatewayService +{ +public: + GatewayServiceServer(GatewayServiceParam const& _param) + : m_gatewayInitializer(_param.gatewayInitializer) + {} + void initialize() override {} + void destroy() override {} + + bcostars::Error asyncSendBroadcastMessage(tars::Int32 _type, const std::string& groupID, + tars::Int32 moduleID, const vector& srcNodeID, + const vector& payload, tars::TarsCurrentPtr current) override + { + current->setResponse(false); + auto bcosNodeID = m_gatewayInitializer->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)srcNodeID.data(), srcNodeID.size())); + m_gatewayInitializer->gateway()->asyncSendBroadcastMessage(_type, groupID, moduleID, + bcosNodeID, bcos::bytesConstRef((const bcos::byte*)payload.data(), payload.size())); + + async_response_asyncSendBroadcastMessage(current, toTarsError(nullptr)); + return bcostars::Error(); + } + + bcostars::Error asyncGetPeers(bcostars::GatewayInfo&, std::vector&, + tars::TarsCurrentPtr current) override + { + GATEWAYSERVICE_LOG(DEBUG) << LOG_DESC("asyncGetPeers: request"); + current->setResponse(false); + m_gatewayInitializer->gateway()->asyncGetPeers( + [current](const bcos::Error::Ptr _error, bcos::gateway::GatewayInfo::Ptr _localP2pInfo, + bcos::gateway::GatewayInfosPtr _peers) { + auto localtarsP2pInfo = toTarsGatewayInfo(_localP2pInfo); + std::vector peersInfo; + if (_peers) + { + for (auto const& peer : *_peers) + { + peersInfo.emplace_back(toTarsGatewayInfo(peer)); + } + } + async_response_asyncGetPeers( + current, toTarsError(_error), localtarsP2pInfo, peersInfo); + }); + return bcostars::Error(); + } + + bcostars::Error asyncSendMessageByNodeID(const std::string& groupID, tars::Int32 moduleID, + const vector& srcNodeID, const vector& dstNodeID, + const vector& payload, tars::TarsCurrentPtr current) override + { + current->setResponse(false); + auto keyFactory = m_gatewayInitializer->keyFactory(); + auto bcosSrcNodeID = keyFactory->createKey( + bcos::bytesConstRef((const bcos::byte*)srcNodeID.data(), srcNodeID.size())); + auto bcosDstNodeID = keyFactory->createKey( + bcos::bytesConstRef((const bcos::byte*)dstNodeID.data(), dstNodeID.size())); + + m_gatewayInitializer->gateway()->asyncSendMessageByNodeID(groupID, moduleID, bcosSrcNodeID, + bcosDstNodeID, bcos::bytesConstRef((const bcos::byte*)payload.data(), payload.size()), + [current](bcos::Error::Ptr error) { + async_response_asyncSendMessageByNodeID(current, toTarsError(error)); + }); + return bcostars::Error(); + } + + bcostars::Error asyncSendMessageByNodeIDs(const std::string& groupID, tars::Int32 moduleID, + const vector& srcNodeID, const vector>& dstNodeID, + const vector& payload, tars::TarsCurrentPtr current) override + { + current->setResponse(false); + auto keyFactory = m_gatewayInitializer->keyFactory(); + auto bcosSrcNodeID = keyFactory->createKey( + bcos::bytesConstRef((const bcos::byte*)srcNodeID.data(), srcNodeID.size())); + std::vector nodeIDs; + nodeIDs.reserve(dstNodeID.size()); + for (auto const& it : dstNodeID) + { + nodeIDs.push_back(keyFactory->createKey( + bcos::bytesConstRef((const bcos::byte*)it.data(), it.size()))); + } + + m_gatewayInitializer->gateway()->asyncSendMessageByNodeIDs(groupID, moduleID, bcosSrcNodeID, + nodeIDs, bcos::bytesConstRef((const bcos::byte*)payload.data(), payload.size())); + + async_response_asyncSendMessageByNodeIDs(current, toTarsError(nullptr)); + return bcostars::Error(); + } + + bcostars::Error asyncGetGroupNodeInfo( + const std::string& groupID, GroupNodeInfo&, tars::TarsCurrentPtr current) override + { + current->setResponse(false); + + m_gatewayInitializer->gateway()->asyncGetGroupNodeInfo( + groupID, [current](bcos::Error::Ptr _error, + bcos::gateway::GroupNodeInfo::Ptr _bcosGroupNodeInfo) { + // Note: the nodeIDs maybe null if no connections + if (!_bcosGroupNodeInfo || _bcosGroupNodeInfo->nodeIDList().empty()) + { + async_response_asyncGetGroupNodeInfo( + current, toTarsError(_error), bcostars::GroupNodeInfo()); + return; + } + auto groupInfoImpl = + std::dynamic_pointer_cast( + _bcosGroupNodeInfo); + async_response_asyncGetGroupNodeInfo( + current, toTarsError(_error), groupInfoImpl->inner()); + }); + + return bcostars::Error(); + } + bcostars::Error asyncNotifyGroupInfo( + const bcostars::GroupInfo& groupInfo, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncSendMessageByTopic(const std::string& _topic, + const vector& _data, tars::Int32& _type, vector& _responseData, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncSubscribeTopic(const std::string& _clientID, const std::string& _topicInfo, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncSendBroadcastMessageByTopic(const std::string& _topic, + const vector& _data, tars::TarsCurrentPtr current) override; + bcostars::Error asyncRemoveTopic(const std::string& _clientID, + const vector& _topicList, tars::TarsCurrentPtr current) override; + +private: + GatewayInitializer::Ptr m_gatewayInitializer; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/GatewayService/main/Application.cpp b/fisco-bcos-tars-service/GatewayService/main/Application.cpp new file mode 100644 index 0000000..a05d86a --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/main/Application.cpp @@ -0,0 +1,125 @@ +#include "../../Common/TarsUtils.h" +#include "../GatewayInitializer.h" +#include "../GatewayServiceServer.h" +#include "bcos-tool/NodeConfig.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; + +class GatewayServiceApp : public tars::Application +{ +public: + GatewayServiceApp() {} + ~GatewayServiceApp() override{}; + + void destroyApp() override + { + if (m_gatewayInitializer) + { + m_gatewayInitializer->stop(); + } + } + void initialize() override + { + // Note: since tars Application catch the exception and output the error message with + // e.what() which unable to explicitly display specific error messages, we actively catch + // and output exception information here + try + { + m_iniConfigPath = tars::ServerConfig::BasePath + "/config.ini"; + addConfig("config.ini"); + initService(m_iniConfigPath); + GatewayServiceParam param; + param.gatewayInitializer = m_gatewayInitializer; + addServantWithParams( + getProxyDesc(bcos::protocol::GATEWAY_SERVANT_NAME), param); + } + catch (std::exception const& e) + { + std::cout << "init GatewayService failed, error: " << boost::diagnostic_information(e) + << std::endl; + exit(-1); + } + } + +protected: + virtual void initService(std::string const& _configPath) + { + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configPath, pt); + + tool::NodeConfig nodeConfig; + + nodeConfig.loadWithoutTarsFrameworkConfig(pt); + + // init the log + m_logInitializer = std::make_shared(); + if (!nodeConfig.withoutTarsFramework()) + { + m_logInitializer->setLogPath(getLogPath()); + } + + m_logInitializer->initLog(_configPath); + + // init gateway config + auto gatewayConfig = std::make_shared(); + gatewayConfig->initP2PConfig(pt, true); + gatewayConfig->initRateLimitConfig(pt); + gatewayConfig->setCertPath(tars::ServerConfig::BasePath); + gatewayConfig->setNodePath(tars::ServerConfig::BasePath); + if (gatewayConfig->smSSL()) + { + addConfig("sm_ca.crt"); + addConfig("sm_ssl.crt"); + addConfig("sm_enssl.crt"); + addConfig("sm_ssl.key"); + addConfig("sm_enssl.key"); + gatewayConfig->initSMCertConfig(pt); + } + else + { + addConfig("ca.crt"); + addConfig("ssl.key"); + addConfig("ssl.crt"); + gatewayConfig->initCertConfig(pt); + } + + // nodes.json + addConfig("nodes.json"); + gatewayConfig->loadP2pConnectedNodes(); + // init rpc + m_gatewayInitializer = std::make_shared(_configPath, gatewayConfig); + bcos::initializer::showNodeVersionMetric(); + m_gatewayInitializer->start(); + } + +private: + std::string m_iniConfigPath; + bcos::BoostLogInitializer::Ptr m_logInitializer; + GatewayInitializer::Ptr m_gatewayInitializer; +}; + +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + GatewayServiceApp app; + app.main(argc, argv); + app.waitForShutdown(); + + return 0; + } + catch (std::exception& e) + { + cerr << "GatewayService std::exception:" << e.what() << std::endl; + } + catch (...) + { + cerr << "GatewayService unknown exception." << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/GatewayService/main/CMakeLists.txt b/fisco-bcos-tars-service/GatewayService/main/CMakeLists.txt new file mode 100644 index 0000000..d559cd6 --- /dev/null +++ b/fisco-bcos-tars-service/GatewayService/main/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.14) + +project(bcostars-Gateway) + +include_directories(${CMAKE_SOURCE_DIR}) + +find_package(Boost REQUIRED program_options) + +file(GLOB SRC_LIST "*.cpp") + +aux_source_directory(../ SRC_LIST) +add_executable(${GATEWAY_BINARY_NAME} ${SRC_LIST}) + +if(WITH_TIKV) + target_link_libraries(${GATEWAY_BINARY_NAME} ${COMMAND_HELPER_LIB} ${PROTOCOL_INIT_LIB} ${TOOL_TARGET} ${GATEWAY_TARGET} ${LEADER_ELECTION_TARGET}) +else() + target_link_libraries(${GATEWAY_BINARY_NAME} bcos-crypto ${COMMAND_HELPER_LIB} ${PROTOCOL_INIT_LIB} ${TOOL_TARGET} ${GATEWAY_TARGET}) +endif() diff --git a/fisco-bcos-tars-service/LedgerService/CMakeLists.txt b/fisco-bcos-tars-service/LedgerService/CMakeLists.txt new file mode 100644 index 0000000..641da9e --- /dev/null +++ b/fisco-bcos-tars-service/LedgerService/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.14) + +project(bcostars-ledger) +file(GLOB SRC_LIST "*.cpp") + +add_library(${LEDGER_SERVICE_LIB} ${SRC_LIST}) +target_link_libraries(${LEDGER_SERVICE_LIB} ${TARS_PROTOCOL_TARGET}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.cpp b/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.cpp new file mode 100644 index 0000000..9ce83a2 --- /dev/null +++ b/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.cpp @@ -0,0 +1,224 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for Ledger + * @file LedgerServiceServer.cpp + * @author: yujiechen + * @date 2021-10-18 + */ + +#include "LedgerServiceServer.h" +#include +#include +#include +#include +#include + +using namespace bcostars; + +bcostars::Error LedgerServiceServer::asyncGetBatchTxsByHashList( + const vector>& _txsHashList, tars::Bool _withProof, + vector&, map>&, + tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto hashList = std::make_shared(); + for (auto const& hash : _txsHashList) + { + if (hash.size() < bcos::crypto::HashType::SIZE) + { + continue; + } + hashList->emplace_back(bcos::crypto::HashType( + reinterpret_cast(hash.data()), bcos::crypto::HashType::SIZE)); + } + m_ledger->asyncGetBatchTxsByHashList(hashList, _withProof, + [current](bcos::Error::Ptr _error, bcos::protocol::TransactionsPtr _txsList, + std::shared_ptr> _proofList) { + // to tars transaction + std::vector tarsTxs; + if (_txsList) + { + for (auto const& tx : *_txsList) + { + tarsTxs.emplace_back( + std::dynamic_pointer_cast(tx) + ->inner()); + } + } + // to tars proof + std::map> tarsMerkleProofs; + if (_proofList) + { + for (auto const& it : *_proofList) + { + std::vector tarsMerkleItem; + auto const& proofs = it.second; + for (auto const& proof : *proofs) + { + tarsMerkleItem.emplace_back(proof.hex()); + } + tarsMerkleProofs[it.first] = tarsMerkleItem; + } + } + async_response_asyncGetBatchTxsByHashList( + current, toTarsError(_error), tarsTxs, tarsMerkleProofs); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetBlockDataByNumber(tars::Int64 _blockNumber, + tars::Int64 _blockFlag, bcostars::Block&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetBlockDataByNumber(_blockNumber, _blockFlag, + [current](bcos::Error::Ptr _error, bcos::protocol::Block::Ptr _block) { + bcostars::Block tarsBlock; + if (_block) + { + tarsBlock = + std::dynamic_pointer_cast(_block)->inner(); + } + async_response_asyncGetBlockDataByNumber(current, toTarsError(_error), tarsBlock); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetBlockHashByNumber( + tars::Int64 _blockNumber, vector&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetBlockHashByNumber( + _blockNumber, [current](bcos::Error::Ptr _error, bcos::crypto::HashType const& _blockHash) { + if (_error) + { + async_response_asyncGetBlockHashByNumber( + current, toTarsError(_error), vector()); + return; + } + vector blockHash(_blockHash.begin(), _blockHash.end()); + async_response_asyncGetBlockHashByNumber(current, toTarsError(_error), blockHash); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetBlockNumber(tars::Int64&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetBlockNumber( + [current](bcos::Error::Ptr _error, bcos::protocol::BlockNumber _blockNumber) { + async_response_asyncGetBlockNumber(current, toTarsError(_error), _blockNumber); + }); + return bcostars::Error(); +} +bcostars::Error LedgerServiceServer::asyncGetBlockNumberByHash( + const vector& _blockHash, tars::Int64&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + bcos::crypto::HashType blockHash; + if (_blockHash.size() >= bcos::crypto::HashType::SIZE) + { + blockHash = bcos::crypto::HashType( + reinterpret_cast(_blockHash.data()), bcos::crypto::HashType::SIZE); + } + // _blockHash + m_ledger->asyncGetBlockNumberByHash( + blockHash, [current](bcos::Error::Ptr _error, bcos::protocol::BlockNumber _blockNumber) { + async_response_asyncGetBlockNumberByHash(current, toTarsError(_error), _blockNumber); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetNodeListByType( + const std::string& _type, vector&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetNodeListByType( + _type, [current](bcos::Error::Ptr _error, bcos::consensus::ConsensusNodeListPtr _nodeList) { + if (_nodeList) + { + async_response_asyncGetNodeListByType( + current, toTarsError(_error), toTarsConsensusNodeList(*_nodeList)); + return; + } + async_response_asyncGetNodeListByType( + current, toTarsError(_error), std::vector()); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetSystemConfigByKey( + const std::string& _key, std::string&, tars::Int64&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetSystemConfigByKey(_key, [current](bcos::Error::Ptr _error, std::string _value, + bcos::protocol::BlockNumber _blockNumber) { + async_response_asyncGetSystemConfigByKey( + current, toTarsError(_error), _value, _blockNumber); + }); + return bcostars::Error(); +} +bcostars::Error LedgerServiceServer::asyncGetTotalTransactionCount( + tars::Int64&, tars::Int64&, tars::Int64&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_ledger->asyncGetTotalTransactionCount( + [current](bcos::Error::Ptr _error, int64_t _totalTxCount, int64_t _failedTxCount, + bcos::protocol::BlockNumber _latestBlockNumber) { + async_response_asyncGetTotalTransactionCount( + current, toTarsError(_error), _totalTxCount, _failedTxCount, _latestBlockNumber); + }); + return bcostars::Error(); +} + +bcostars::Error LedgerServiceServer::asyncGetTransactionReceiptByHash( + const vector& _txHash, tars::Bool _withProof, bcostars::TransactionReceipt&, + vector&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + bcos::crypto::HashType txHash; + if (_txHash.size() >= bcos::crypto::HashType::SIZE) + { + txHash = bcos::crypto::HashType( + reinterpret_cast(_txHash.data()), bcos::crypto::HashType::SIZE); + } + + m_ledger->asyncGetTransactionReceiptByHash(txHash, _withProof, + [current](bcos::Error::Ptr _error, bcos::protocol::TransactionReceipt::ConstPtr _receipt, + bcos::ledger::MerkleProofPtr _merkleProofList) { + // get tars receipt + bcostars::TransactionReceipt tarsReceipt; + if (_receipt) + { + auto mutableReceipt = + std::const_pointer_cast(_receipt); + tarsReceipt = std::dynamic_pointer_cast( + mutableReceipt) + ->inner(); + } + // get tars merkle + vector tarsMerkleItemList; + if (_merkleProofList) + { + for (auto const& merkle : *_merkleProofList) + { + tarsMerkleItemList.emplace_back(merkle.hex()); + } + } + async_response_asyncGetTransactionReceiptByHash( + current, toTarsError(_error), tarsReceipt, tarsMerkleItemList); + }); + return bcostars::Error(); +} diff --git a/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.h b/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.h new file mode 100644 index 0000000..3e80ee1 --- /dev/null +++ b/fisco-bcos-tars-service/LedgerService/LedgerServiceServer.h @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for Ledger + * @file LedgerServiceServer.h + * @author: yujiechen + * @date 2021-10-18 + */ +#pragma once +#include +#include + +namespace bcostars +{ +struct LedgerServiceParam +{ + bcos::ledger::LedgerInterface::Ptr ledger; +}; +class LedgerServiceServer : public LedgerService +{ +public: + LedgerServiceServer(LedgerServiceParam const& _param) : m_ledger(_param.ledger) {} + ~LedgerServiceServer() override {} + + void initialize() override {} + void destroy() override {} + + bcostars::Error asyncGetBatchTxsByHashList(const vector >& _txsHashList, + tars::Bool _withProof, vector& _transactions, + map >& _merkleProofList, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetBlockDataByNumber(tars::Int64 _blockNumber, tars::Int64 _blockFlag, + bcostars::Block& _block, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetBlockHashByNumber(tars::Int64 _blockNumber, + vector& _blockHash, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetBlockNumber( + tars::Int64& _blockNumber, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetBlockNumberByHash(const vector& _blockHash, + tars::Int64& _blockNumber, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetNodeListByType(const std::string& _type, + vector& _nodeList, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetSystemConfigByKey(const std::string& _key, std::string& _value, + tars::Int64& _blockNumber, tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetTotalTransactionCount(tars::Int64& _totalTxCount, + tars::Int64& _failedTxCount, tars::Int64& _latestBlockNumber, + tars::TarsCurrentPtr current) override; + + bcostars::Error asyncGetTransactionReceiptByHash(const vector& _txHash, + tars::Bool _withProof, bcostars::TransactionReceipt& _receipt, vector& _proof, + tars::TarsCurrentPtr current) override; + +private: + bcos::ledger::LedgerInterface::Ptr m_ledger; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/NodeServiceApp.cpp b/fisco-bcos-tars-service/NodeService/NodeServiceApp.cpp new file mode 100644 index 0000000..5f31421 --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/NodeServiceApp.cpp @@ -0,0 +1,194 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the NodeService + * @file NodeServiceApp.cpp + * @author: yujiechen + * @date 2021-10-18 + */ +#include "NodeServiceApp.h" +#include "../Common/TarsUtils.h" +#include "../FrontService/FrontServiceServer.h" +#include "../LedgerService/LedgerServiceServer.h" +#include "../PBFTService/PBFTServiceServer.h" +#include "../SchedulerService/SchedulerServiceServer.h" +#include "../TxPoolService/TxPoolServiceServer.h" +#include "bcos-framework/protocol/ServiceDesc.h" +#include "bcos-tool/NodeConfig.h" +#include "libinitializer/Initializer.h" +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::initializer; +using namespace bcos::protocol; + +void NodeServiceApp::destroyApp() +{ + if (m_nodeInitializer) + { + // stop the nodeService + m_nodeInitializer->stop(); + } +} + +void NodeServiceApp::initialize() +{ + // Note: since tars Application catch the exception and output the error message with + // e.what() which unable to explicitly display specific error messages, we actively catch + // and output exception information here + try + { + BCOS_LOG(INFO) << LOG_DESC("initGlobalConfig"); + g_BCOSConfig.setCodec(std::make_shared()); + + initConfig(); + initLog(); + initNodeService(); + initTarsNodeService(); + initServiceInfo(this); + m_nodeInitializer->start(); + } + catch (std::exception const& e) + { + std::cout << "init NodeService failed, error: " << boost::diagnostic_information(e) + << std::endl; + exit(-1); + } +} + +void NodeServiceApp::initLog() +{ + boost::property_tree::ptree pt; + boost::property_tree::read_ini(m_iniConfigPath, pt); + + tool::NodeConfig nodeConfig; + nodeConfig.loadWithoutTarsFrameworkConfig(pt); + + m_logInitializer = std::make_shared(); + if (!nodeConfig.withoutTarsFramework()) + { + m_logInitializer->setLogPath(getLogPath()); + } + + m_logInitializer->initLog(m_iniConfigPath); +} + +void NodeServiceApp::initNodeService() +{ + m_nodeInitializer = std::make_shared(); + m_nodeInitializer->initMicroServiceNode( + m_nodeArchType, m_iniConfigPath, m_genesisConfigPath, m_privateKeyPath, getLogPath()); + auto rpcServiceName = m_nodeInitializer->nodeConfig()->rpcServiceName(); + + auto withoutTarsFramework = m_nodeInitializer->nodeConfig()->withoutTarsFramework(); + + std::vector endPoints; + m_nodeInitializer->nodeConfig()->getTarsClientProxyEndpoints( + bcos::protocol::RPC_NAME, endPoints); + + auto rpcServicePrx = bcostars::createServantProxy( + withoutTarsFramework, rpcServiceName, endPoints); + + auto rpc = std::make_shared(rpcServicePrx, rpcServiceName); + m_nodeInitializer->initNotificationHandlers(rpc); + + // NOTE: this should be last called + m_nodeInitializer->initSysContract(); +} + +void NodeServiceApp::initTarsNodeService() +{ + // init the txpool servant + TxPoolServiceParam txpoolParam; + txpoolParam.txPoolInitializer = m_nodeInitializer->txPoolInitializer(); + addServantWithParams( + getProxyDesc(TXPOOL_SERVANT_NAME), txpoolParam); + + // init the pbft servant + PBFTServiceParam pbftParam; + pbftParam.pbftInitializer = m_nodeInitializer->pbftInitializer(); + addServantWithParams( + getProxyDesc(CONSENSUS_SERVANT_NAME), pbftParam); + + // init the ledger + LedgerServiceParam ledgerParam; + ledgerParam.ledger = m_nodeInitializer->ledger(); + addServantWithParams( + getProxyDesc(LEDGER_SERVANT_NAME), ledgerParam); + + // init the scheduler + SchedulerServiceParam schedulerParam; + schedulerParam.scheduler = m_nodeInitializer->scheduler(); + schedulerParam.cryptoSuite = m_nodeInitializer->protocolInitializer()->cryptoSuite(); + addServantWithParams( + getProxyDesc(SCHEDULER_SERVANT_NAME), schedulerParam); + + // init the frontService, for the gateway to access the frontService + FrontServiceParam frontServiceParam; + frontServiceParam.frontServiceInitializer = m_nodeInitializer->frontService(); + addServantWithParams( + getProxyDesc(FRONT_SERVANT_NAME), frontServiceParam); +} + +void NodeServiceApp::initServiceInfo(Application* _application) +{ + auto nodeInfo = m_nodeInitializer->pbftInitializer()->nodeInfo(); + // Note: must call this after addServantWithParams of NodeServiceApp + auto schedulerDesc = getEndPointDescByAdapter(_application, SCHEDULER_SERVANT_NAME); + if (!schedulerDesc.first) + { + throw std::runtime_error("init NodeService failed for get scheduler-desc failed"); + } + nodeInfo->appendServiceInfo(SCHEDULER, schedulerDesc.second); + + auto ledgerDesc = getEndPointDescByAdapter(_application, LEDGER_SERVANT_NAME); + if (!ledgerDesc.first) + { + throw std::runtime_error("init NodeService failed for get ledger-desc failed"); + } + nodeInfo->appendServiceInfo(LEDGER, ledgerDesc.second); + + auto frontServiceDesc = getEndPointDescByAdapter(_application, FRONT_SERVANT_NAME); + if (!frontServiceDesc.first) + { + throw std::runtime_error("init NodeService failed for get front-service-desc failed"); + } + nodeInfo->appendServiceInfo(FRONT, frontServiceDesc.second); + + auto txpoolServiceDesc = getEndPointDescByAdapter(_application, TXPOOL_SERVANT_NAME); + if (!txpoolServiceDesc.first) + { + throw std::runtime_error("init NodeService failed for get txpool-service-desc failed"); + } + nodeInfo->appendServiceInfo(TXPOOL, txpoolServiceDesc.second); + + auto consensusServiceDesc = getEndPointDescByAdapter(_application, CONSENSUS_SERVANT_NAME); + if (!consensusServiceDesc.first) + { + throw std::runtime_error("init NodeService failed for get consensus-service-desc failed"); + } + nodeInfo->appendServiceInfo(CONSENSUS, consensusServiceDesc.second); + // sync the latest groupInfo to rpc/gateway + m_nodeInitializer->pbftInitializer()->onGroupInfoChanged(); + BCOS_LOG(INFO) << LOG_DESC("initServiceInfo") << LOG_KV("schedulerDesc", schedulerDesc.second) + << LOG_KV("ledgerDesc", ledgerDesc.second) + << LOG_KV("frontServiceDesc", frontServiceDesc.second) + << LOG_KV("txpoolServiceDesc", txpoolServiceDesc.second) + << LOG_KV("consensusServiceDesc", consensusServiceDesc.second); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/NodeServiceApp.h b/fisco-bcos-tars-service/NodeService/NodeServiceApp.h new file mode 100644 index 0000000..b72622a --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/NodeServiceApp.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the NodeService + * @file NodeServiceApp.h + * @author: yujiechen + * @date 2021-10-18 + */ +#pragma once +#include "bcos-tars-protocol/tars/RpcService.h" +#include +#include +#include +#include + +namespace bcos::initializer +{ +class Initializer; +} +namespace bcostars +{ +class NodeServiceApp : public tars::Application +{ +public: + NodeServiceApp() {} + ~NodeServiceApp() override {} + + void initialize() override; + void destroyApp() override; + + void setNodeArchType(bcos::protocol::NodeArchitectureType _type) { m_nodeArchType = _type; } + +protected: + virtual void initConfig() + { + m_iniConfigPath = tars::ServerConfig::BasePath + "/config.ini"; + m_genesisConfigPath = tars::ServerConfig::BasePath + "/config.genesis"; + m_privateKeyPath = tars::ServerConfig::BasePath + "/node.pem"; + addConfig("node.pem"); + addConfig("config.genesis"); + addConfig("config.ini"); + } + virtual void initLog(); + virtual void initNodeService(); + virtual void initTarsNodeService(); + void initServiceInfo(Application* _application); + +private: + bcos::BoostLogInitializer::Ptr m_logInitializer; + std::string m_iniConfigPath; + std::string m_genesisConfigPath; + std::string m_privateKeyPath; + std::shared_ptr m_nodeInitializer; + bcos::protocol::NodeArchitectureType m_nodeArchType; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/max/CMakeLists.txt b/fisco-bcos-tars-service/NodeService/max/CMakeLists.txt new file mode 100644 index 0000000..ba2546f --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/max/CMakeLists.txt @@ -0,0 +1,16 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +find_package(Boost REQUIRED program_options) + +aux_source_directory(. SRC_LIST) +aux_source_directory(../ SRC_LIST) +aux_source_directory(../../FrontService SRC_LIST) +aux_source_directory(../../LedgerService SRC_LIST) +aux_source_directory(../../SchedulerService SRC_LIST) +aux_source_directory(../../TxPoolService SRC_LIST) +aux_source_directory(../../PBFTService SRC_LIST) + +add_executable(${MAX_NODE_SERVICE_BINARY_NAME} ${SRC_LIST} ${HEADERS}) + +target_link_libraries(${MAX_NODE_SERVICE_BINARY_NAME} PUBLIC ${INIT_LIB} ${PBFT_INIT_LIB} ${TARS_PROTOCOL_TARGET} ${COMMAND_HELPER_LIB}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/max/main.cpp b/fisco-bcos-tars-service/NodeService/max/main.cpp new file mode 100644 index 0000000..0fed15a --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/max/main.cpp @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief main for the BCOSMaxNodeService + * @file main.cpp + * @author: yujiechen + * @date 2022-05-11 + */ +#include "../NodeServiceApp.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::initializer; +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + NodeServiceApp app; + app.setNodeArchType(bcos::protocol::NodeArchitectureType::MAX); + printVersion(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The fisco-bcos is running..." << std::endl; + app.main(argc, argv); + app.waitForShutdown(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "fisco-bcos program exit normally." << std::endl; + return 0; + } + catch (std::exception& e) + { + cerr << "NodeService std::exception:" << e.what() << std::endl; + } + catch (...) + { + cerr << "NodeService unknown exception." << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/pro/CMakeLists.txt b/fisco-bcos-tars-service/NodeService/pro/CMakeLists.txt new file mode 100644 index 0000000..04d92f7 --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/pro/CMakeLists.txt @@ -0,0 +1,16 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +find_package(Boost REQUIRED program_options) + +aux_source_directory(. SRC_LIST) +aux_source_directory(../ SRC_LIST) +aux_source_directory(../../FrontService SRC_LIST) +aux_source_directory(../../LedgerService SRC_LIST) +aux_source_directory(../../SchedulerService SRC_LIST) +aux_source_directory(../../TxPoolService SRC_LIST) +aux_source_directory(../../PBFTService SRC_LIST) + +add_executable(${PRO_NODE_SERVICE_BINARY_NAME} ${SRC_LIST} ${HEADERS}) + +target_link_libraries(${PRO_NODE_SERVICE_BINARY_NAME} PUBLIC ${INIT_LIB} ${PBFT_INIT_LIB} ${TARS_PROTOCOL_TARGET} ${COMMAND_HELPER_LIB}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/NodeService/pro/main.cpp b/fisco-bcos-tars-service/NodeService/pro/main.cpp new file mode 100644 index 0000000..6d3ecb8 --- /dev/null +++ b/fisco-bcos-tars-service/NodeService/pro/main.cpp @@ -0,0 +1,59 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief main for the fisco-bcos + * @file main.cpp + * @author: yujiechen + * @date 2021-07-26 + * @brief main for the fisco-bcos + * @file main.cpp + * @author: ancelmo + * @date 2021-10-14 + */ +#include "../NodeServiceApp.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::initializer; +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + NodeServiceApp app; + app.setNodeArchType(bcos::protocol::NodeArchitectureType::PRO); + printVersion(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The fisco-bcos is running..." << std::endl; + app.main(argc, argv); + app.waitForShutdown(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "fisco-bcos program exit normally." << std::endl; + return 0; + } + catch (std::exception& e) + { + cerr << "NodeService std::exception:" << e.what() << std::endl; + } + catch (...) + { + cerr << "NodeService unknown exception." << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/PBFTService/PBFTServiceClient.h b/fisco-bcos-tars-service/PBFTService/PBFTServiceClient.h new file mode 100644 index 0000000..67ede22 --- /dev/null +++ b/fisco-bcos-tars-service/PBFTService/PBFTServiceClient.h @@ -0,0 +1,198 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief client for the PBFTService + * @file PBFTServiceClient.h + * @author: yujiechen + * @date 2021-06-29 + */ + +#pragma once + +#include "bcos-framework/sealer/SealerInterface.h" +#include +#include +#include +#include + +namespace bcostars +{ +class PBFTServiceCommonCallback : public bcostars::PBFTServicePrxCallback +{ +public: + PBFTServiceCommonCallback(std::function _callback) + : PBFTServicePrxCallback(), m_callback(_callback) + {} + ~PBFTServiceCommonCallback() override {} + + void callback_asyncNoteUnSealedTxsSize(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNoteUnSealedTxsSize_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyConsensusMessage(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyConsensusMessage_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncNotifyNewBlock(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyNewBlock_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncSubmitProposal(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + void callback_asyncSubmitProposal_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyBlockSyncMessage(const bcostars::Error& ret) override + { + m_callback(toBcosError(ret)); + } + + void callback_asyncNotifyBlockSyncMessage_exception(tars::Int32 ret) override + { + m_callback(toBcosError(ret)); + } + +private: + std::function m_callback; +}; + +class PBFTServiceClient : virtual public bcos::consensus::ConsensusInterface, + virtual public bcos::sealer::SealerInterface +{ +public: + using Ptr = std::shared_ptr; + PBFTServiceClient(bcostars::PBFTServicePrx _proxy) : m_proxy(_proxy) {} + ~PBFTServiceClient() override {} + + void start() override {} + void stop() override {} + // called by frontService to dispatch message + void asyncNotifyConsensusMessage(bcos::Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) override; + void asyncGetPBFTView( + std::function _onGetView) override; + + // the txpool notify the unsealed txsSize to the sealer module + void asyncNoteUnSealedTxsSize( + size_t _unsealedTxsSize, std::function _onRecvResponse) override; + + // the sealer submit proposal to the consensus module + // Note: if the sealer module integrates with the PBFT module, no need to implement this + // interface + void asyncSubmitProposal(bool _containSysTxs, bcos::bytesConstRef _proposalData, + bcos::protocol::BlockNumber _proposalIndex, bcos::crypto::HashType const& _proposalHash, + std::function _onProposalSubmitted) override; + + // the sync module calls this interface to check block + // Note: if the sync module integrates with the PBFT module, no need to implement this interface + void asyncCheckBlock(bcos::protocol::Block::Ptr _block, + std::function _onVerifyFinish) override; + + // the sync module calls this interface to notify new block + // Note: if the sync module integrates with the PBFT module, no need to implement this interface + void asyncNotifyNewBlock(bcos::ledger::LedgerConfig::Ptr _ledgerConfig, + std::function _onRecv) override; + + // for the sync module to notify the syncing number + // Note: since the sync module is integrated with the PBFT module, no need to implement the + // client interface + void notifyHighestSyncingNumber(bcos::protocol::BlockNumber _number) override + { + throw std::runtime_error("notifyHighestSyncingNumber: unimplemented interface!"); + } + void asyncNotifySealProposal( + size_t, size_t, size_t, std::function) override + { + throw std::runtime_error("asyncNotifySealProposal: unimplemented interface!"); + } + // for the consensus module to notify the latest blockNumber to the sealer module + // Note: since the sealer module is integrated with the PBFT module, no need to implement the + // client interface + void asyncNoteLatestBlockNumber(int64_t) override + { + throw std::runtime_error("asyncNoteLatestBlockNumber: unimplemented interface!"); + } + + // the consensus module notify the sealer to reset sealing when viewchange + void asyncResetSealing(std::function _onRecvResponse) override + { + throw std::runtime_error("asyncResetSealing: unimplemented interface!"); + } + +private: + bcostars::PBFTServicePrx m_proxy; +}; + +class BlockSyncServiceClient : virtual public bcos::sync::BlockSyncInterface +{ +public: + using Ptr = std::shared_ptr; + BlockSyncServiceClient(bcostars::PBFTServicePrx _proxy) : m_proxy(_proxy) {} + ~BlockSyncServiceClient() override {} + + // called by the consensus module when commit a new block + void asyncNotifyNewBlock( + bcos::ledger::LedgerConfig::Ptr, std::function) override + {} + + // called by the consensus module to notify the consensusing block number + void asyncNotifyCommittedIndex( + bcos::protocol::BlockNumber, std::function) override + {} + + // called by the RPC to get the sync status + void asyncGetSyncInfo( + std::function _onGetSyncInfo) override; + + // called by the frontService to dispatch message + void asyncNotifyBlockSyncMessage(bcos::Error::Ptr _error, std::string const& _uuid, + bcos::crypto::NodeIDPtr _nodeID, bcos::bytesConstRef _data, + std::function _onRecv) override + { + auto nodeIDData = _nodeID->data(); + m_proxy->async_asyncNotifyBlockSyncMessage(new PBFTServiceCommonCallback(_onRecv), _uuid, + std::vector(nodeIDData.begin(), nodeIDData.end()), + std::vector(_data.begin(), _data.end())); + } + + void notifyConnectedNodes(bcos::crypto::NodeIDSet const& _connectedNodes, + std::function _onRecvResponse); + +protected: + void start() override {} + void stop() override {} + +private: + bcostars::PBFTServicePrx m_proxy; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.cpp b/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.cpp new file mode 100644 index 0000000..30dc46d --- /dev/null +++ b/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.cpp @@ -0,0 +1,146 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for the PBFTService + * @file PBFTServiceServer.h + * @author: yujiechen + * @date 2021-06-29 + */ + +#include "PBFTServiceServer.h" +#include "../Common/TarsUtils.h" + +using namespace bcostars; +using namespace bcos::consensus; +using namespace bcos::initializer; + +Error PBFTServiceServer::asyncCheckBlock( + const Block& _block, tars::Bool&, tars::TarsCurrentPtr _current) +{ + auto blockFactory = m_pbftInitializer->blockFactory(); + _current->setResponse(false); + auto block = std::make_shared(); + block->setInner(std::move(*const_cast(&_block))); + m_pbftInitializer->pbft()->asyncCheckBlock( + block, [_current](bcos::Error::Ptr _error, bool _verifyResult) { + async_response_asyncCheckBlock(_current, toTarsError(_error), _verifyResult); + }); + return bcostars::Error(); +} + +Error PBFTServiceServer::asyncGetPBFTView(tars::Int64& _view, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_pbftInitializer->pbft()->asyncGetPBFTView( + [_current](bcos::Error::Ptr _error, bcos::consensus::ViewType _view) { + async_response_asyncGetPBFTView(_current, toTarsError(_error), _view); + }); + return bcostars::Error(); +} + + +Error PBFTServiceServer::asyncNoteUnSealedTxsSize( + tars::Int64 _unsealedTxsSize, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_pbftInitializer->sealer()->asyncNoteUnSealedTxsSize( + _unsealedTxsSize, [_current](bcos::Error::Ptr _error) { + async_response_asyncNoteUnSealedTxsSize(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +Error PBFTServiceServer::asyncNotifyConsensusMessage(std::string const& _uuid, + const vector& _nodeId, const vector& _data, + tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto nodeId = m_pbftInitializer->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)_nodeId.data(), _nodeId.size())); + m_pbftInitializer->pbft()->asyncNotifyConsensusMessage(nullptr, _uuid, nodeId, + bcos::bytesConstRef((const bcos::byte*)_data.data(), _data.size()), + [_current](bcos::Error::Ptr _error) { + async_response_asyncNotifyConsensusMessage(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error PBFTServiceServer::asyncNotifyBlockSyncMessage(std::string const& _uuid, + const vector& _nodeId, const vector& _data, + tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto nodeId = m_pbftInitializer->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)_nodeId.data(), _nodeId.size())); + m_pbftInitializer->blockSync()->asyncNotifyBlockSyncMessage(nullptr, _uuid, nodeId, + bcos::bytesConstRef((const bcos::byte*)_data.data(), _data.size()), + [_current](bcos::Error::Ptr _error) { + async_response_asyncNotifyBlockSyncMessage(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + + +Error PBFTServiceServer::asyncNotifyNewBlock( + const LedgerConfig& _ledgerConfig, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto ledgerConfig = toLedgerConfig(_ledgerConfig, m_pbftInitializer->keyFactory()); + m_pbftInitializer->pbft()->asyncNotifyNewBlock( + ledgerConfig, [_current](bcos::Error::Ptr _error) { + async_response_asyncNotifyNewBlock(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +Error PBFTServiceServer::asyncSubmitProposal(bool _containSysTxs, + const vector& _proposalData, tars::Int64 _proposalIndex, + const vector& _proposalHash, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto proposalHash = bcos::crypto::HashType(); + if (_proposalHash.size() >= bcos::crypto::HashType::SIZE) + { + proposalHash = bcos::crypto::HashType( + (const bcos::byte*)_proposalHash.data(), bcos::crypto::HashType::SIZE); + } + m_pbftInitializer->pbft()->asyncSubmitProposal(_containSysTxs, + bcos::bytesConstRef((const bcos::byte*)_proposalData.data(), _proposalData.size()), + _proposalIndex, proposalHash, [_current](bcos::Error::Ptr _error) { + async_response_asyncSubmitProposal(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error PBFTServiceServer::asyncGetSyncInfo(std::string&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_pbftInitializer->blockSync()->asyncGetSyncInfo( + [_current](bcos::Error::Ptr _error, std::string const& _syncInfo) { + async_response_asyncGetSyncInfo(_current, toTarsError(_error), _syncInfo); + }); + return bcostars::Error(); +} + +bcostars::Error PBFTServiceServer::asyncGetConsensusStatus( + std::string&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_pbftInitializer->pbft()->asyncGetConsensusStatus( + [_current](bcos::Error::Ptr _error, std::string _consensusStatus) { + async_response_asyncGetConsensusStatus(_current, toTarsError(_error), _consensusStatus); + }); + return bcostars::Error(); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.h b/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.h new file mode 100644 index 0000000..1ccfb8a --- /dev/null +++ b/fisco-bcos-tars-service/PBFTService/PBFTServiceServer.h @@ -0,0 +1,108 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for the PBFTService + * @file PBFTServiceServers.h + * @author: yujiechen + * @date 2021-06-29 + */ + +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "libinitializer/PBFTInitializer.h" +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +struct PBFTServiceParam +{ + bcos::initializer::PBFTInitializer::Ptr pbftInitializer; +}; +class PBFTServiceServer : public bcostars::PBFTService +{ +public: + using Ptr = std::shared_ptr; + PBFTServiceServer(PBFTServiceParam const& _param) : m_pbftInitializer(_param.pbftInitializer) {} + ~PBFTServiceServer() override {} + + void initialize() override {} + void destroy() override {} + + // for the sync module to check block + // Node: since the sync module is integrated with the PBFT, this interfaces is useless now + bcostars::Error asyncCheckBlock( + const bcostars::Block& _block, tars::Bool&, tars::TarsCurrentPtr _current) override; + + // for the rpc module to get the pbft view + bcostars::Error asyncGetPBFTView(tars::Int64& _view, tars::TarsCurrentPtr _current) override; + bcostars::Error asyncGetSyncInfo( + std::string& _syncInfo, tars::TarsCurrentPtr _current) override; + + // Note: since the sealer is integrated with the PBFT, this interfaces is useless now + bcostars::Error asyncNoteUnSealedTxsSize( + tars::Int64 _unsealedTxsSize, tars::TarsCurrentPtr _current) override; + + bcostars::Error asyncNotifyConsensusMessage(std::string const& _uuid, + const vector& _nodeId, const vector& _data, + tars::TarsCurrentPtr _current) override; + + bcostars::Error asyncNotifyBlockSyncMessage(std::string const& _uuid, + const vector& _nodeId, const vector& _data, + tars::TarsCurrentPtr _current) override; + + // Note: since the blockSync module is integrated with the PBFT, this interfaces is useless now + bcostars::Error asyncNotifyNewBlock( + const bcostars::LedgerConfig& _ledgerConfig, tars::TarsCurrentPtr _current) override; + + // Note: since the sealer module is integrated with the PBFT, the interface is useless now + bcostars::Error asyncSubmitProposal(bool _containSysTxs, + const vector& _proposalData, tars::Int64 _proposalIndex, + const vector& _proposalHash, tars::TarsCurrentPtr _current) override; + + bcostars::Error asyncNotifyConnectedNodes( + const vector>& connectedNodes, tars::TarsCurrentPtr current) override + { + current->setResponse(false); + + bcos::crypto::NodeIDSet bcosNodeIDSet; + for (auto const& it : connectedNodes) + { + bcosNodeIDSet.insert(m_pbftInitializer->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)it.data(), it.size()))); + } + m_pbftInitializer->blockSync()->notifyConnectedNodes( + bcosNodeIDSet, [current](bcos::Error::Ptr error) { + async_response_asyncNotifyConnectedNodes(current, bcostars::toTarsError(error)); + }); + m_pbftInitializer->pbft()->notifyConnectedNodes( + bcosNodeIDSet, [](bcos::Error::Ptr error) {}); + return bcostars::Error(); + } + + bcostars::Error asyncGetConsensusStatus( + std::string& _consensusStatus, tars::TarsCurrentPtr current) override; + +private: + bcos::initializer::PBFTInitializer::Ptr m_pbftInitializer; +}; + +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/RpcService/RpcInitializer.cpp b/fisco-bcos-tars-service/RpcService/RpcInitializer.cpp new file mode 100644 index 0000000..9a82484 --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/RpcInitializer.cpp @@ -0,0 +1,164 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the RpcService + * @file RpcInitializer.cpp + * @author: yujiechen + * @date 2021-10-15 + */ +#include "RpcInitializer.h" +#include "../Common/TarsUtils.h" +#include "bcos-framework/protocol/ServiceDesc.h" +#include "bcos-utilities/BoostLog.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#ifdef WITH_TIKV +#include +#endif +#include +#include +#include + +using namespace bcos::group; +using namespace bcostars; + +void RpcInitializer::init(std::string const& _configDir) +{ + // init node config + RPCSERVICE_LOG(INFO) << LOG_DESC("init node config") << LOG_KV("configDir", _configDir); + + if (!m_nodeConfig->rpcSmSsl()) + { + m_nodeConfig->setCaCert(_configDir + "/" + "ca.crt"); + m_nodeConfig->setNodeCert(_configDir + "/" + "ssl.crt"); + m_nodeConfig->setNodeKey(_configDir + "/" + "ssl.key"); + } + else + { + m_nodeConfig->setSmCaCert(_configDir + "/" + "sm_ca.crt"); + m_nodeConfig->setSmNodeCert(_configDir + "/" + "sm_ssl.crt"); + m_nodeConfig->setSmNodeKey(_configDir + "/" + "sm_ssl.key"); + m_nodeConfig->setEnSmNodeCert(_configDir + "/" + "sm_enssl.crt"); + m_nodeConfig->setEnSmNodeKey(_configDir + "/" + "sm_enssl.key"); + } +#ifdef WITH_TIKV + if (m_nodeConfig->enableFailOver()) + { + RPCSERVICE_LOG(INFO) << LOG_DESC("enable failover"); + auto memberFactory = std::make_shared(); + auto leaderEntryPointFactory = + std::make_shared(memberFactory); + auto watchDir = "/" + m_nodeConfig->chainId() + bcos::election::CONSENSUS_LEADER_DIR; + m_leaderEntryPoint = leaderEntryPointFactory->createLeaderEntryPoint( + m_nodeConfig->failOverClusterUrl(), watchDir, "watchLeaderChange", + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + } +#endif + // init rpc config + RPCSERVICE_LOG(INFO) << LOG_DESC("init rpc factory"); + auto factory = initRpcFactory(m_nodeConfig); + + auto rpcServiceName = bcostars::getProxyDesc(bcos::protocol::RPC_SERVANT_NAME); + RPCSERVICE_LOG(INFO) << LOG_DESC("init rpc factory success") + << LOG_KV("rpcServiceName", rpcServiceName); + auto rpc = + factory->buildRpc(m_nodeConfig->gatewayServiceName(), rpcServiceName, m_leaderEntryPoint); + m_rpc = rpc; +} + +void RpcInitializer::setClientID(std::string const& _clientID) +{ + m_rpc->setClientID(_clientID); +} + +bcos::rpc::RPCInterface::Ptr RpcInitializer::rpc() +{ + return m_rpc; +} + +bcos::rpc::RpcFactory::Ptr RpcInitializer::initRpcFactory(bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + // init the protocol + auto protocolInitializer = std::make_shared(); + protocolInitializer->init(_nodeConfig); + m_keyFactory = protocolInitializer->keyFactory(); + + auto withoutTarsFramework = m_nodeConfig->withoutTarsFramework(); + auto gatewayServiceName = _nodeConfig->gatewayServiceName(); + + std::vector endPoints; + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::GATEWAY_NAME, endPoints); + + // get the gateway client + auto gatewayPrx = bcostars::createServantProxy( + withoutTarsFramework, gatewayServiceName, endPoints); + + auto gateway = std::make_shared( + gatewayPrx, gatewayServiceName, protocolInitializer->keyFactory()); + + auto factory = std::make_shared(_nodeConfig->chainId(), gateway, + protocolInitializer->keyFactory(), protocolInitializer->dataEncryption()); + factory->setNodeConfig(_nodeConfig); + RPCSERVICE_LOG(INFO) << LOG_DESC("create rpc factory success") + << LOG_KV("withoutTarsFramework", withoutTarsFramework) + << LOG_KV("gatewayServiceName", gatewayServiceName); + return factory; +} + +void RpcInitializer::start() +{ + if (m_running) + { + RPCSERVICE_LOG(INFO) << LOG_DESC("The RpcService has already been started"); + return; + } + m_running = true; + +#ifdef WITH_TIKV + if (m_leaderEntryPoint) + { + RPCSERVICE_LOG(INFO) << LOG_DESC("start leader-entry-point"); + m_leaderEntryPoint->start(); + } +#endif + RPCSERVICE_LOG(INFO) << LOG_DESC("start rpc"); + m_rpc->start(); + RPCSERVICE_LOG(INFO) << LOG_DESC("start rpc success"); +} + +void RpcInitializer::stop() +{ + if (!m_running) + { + RPCSERVICE_LOG(INFO) << LOG_DESC("The RpcService has already stopped!"); + return; + } + m_running = false; + RPCSERVICE_LOG(INFO) << LOG_DESC("Stop the RpcService"); + +#ifdef WITH_TIKV + if (m_leaderEntryPoint) + { + m_leaderEntryPoint->stop(); + } +#endif + + if (m_rpc) + { + m_rpc->stop(); + } + RPCSERVICE_LOG(INFO) << LOG_DESC("Stop the RpcService success"); +} diff --git a/fisco-bcos-tars-service/RpcService/RpcInitializer.h b/fisco-bcos-tars-service/RpcService/RpcInitializer.h new file mode 100644 index 0000000..a9aae42 --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/RpcInitializer.h @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the RpcService + * @file RpcInitializer.h + * @author: yujiechen + * @date 2021-10-15 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::rpc +{ +class RpcFactory; +class Rpc; +} // namespace bcos::rpc +namespace bcostars +{ +class RpcInitializer +{ +public: + using Ptr = std::shared_ptr; + RpcInitializer(std::string const& _configDir, bcos::tool::NodeConfig::Ptr _nodeConfig) + : m_nodeConfig(_nodeConfig), + m_groupInfoFactory(std::make_shared()), + m_chainNodeInfoFactory(std::make_shared()) + { + init(_configDir); + } + virtual ~RpcInitializer() { stop(); } + + + virtual void start(); + virtual void stop(); + + void setClientID(std::string const& _clientID); + bcos::rpc::RPCInterface::Ptr rpc(); + bcos::crypto::KeyFactory::Ptr keyFactory() { return m_keyFactory; } + bcos::group::GroupInfoFactory::Ptr groupInfoFactory() { return m_groupInfoFactory; } + bcos::group::ChainNodeInfoFactory::Ptr chainNodeInfoFactory() { return m_chainNodeInfoFactory; } + +protected: + virtual void init(std::string const& _configPath); + std::shared_ptr initRpcFactory(bcos::tool::NodeConfig::Ptr _nodeConfig); + +private: + std::shared_ptr m_rpc; + bcos::tool::NodeConfig::Ptr m_nodeConfig; + bcos::crypto::KeyFactory::Ptr m_keyFactory; + bcos::group::GroupInfoFactory::Ptr m_groupInfoFactory; + bcos::group::ChainNodeInfoFactory::Ptr m_chainNodeInfoFactory; + std::atomic_bool m_running = {false}; + bcos::election::LeaderEntryPointInterface::Ptr m_leaderEntryPoint; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/RpcService/RpcServiceServer.cpp b/fisco-bcos-tars-service/RpcService/RpcServiceServer.cpp new file mode 100644 index 0000000..6e34d36 --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/RpcServiceServer.cpp @@ -0,0 +1,67 @@ +#include "RpcServiceServer.h" +#include "../Common/TarsUtils.h" +#include +#include +#include +#include +#include + +using namespace bcostars; +bcostars::Error RpcServiceServer::asyncNotifyBlockNumber(const std::string& _groupID, + const std::string& _nodeName, tars::Int64 blockNumber, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + m_rpcInitializer->rpc()->asyncNotifyBlockNumber( + _groupID, _nodeName, blockNumber, [current, blockNumber](bcos::Error::Ptr _error) { + RPCSERVICE_LOG(DEBUG) << LOG_BADGE("asyncNotifyBlockNumber") + << LOG_KV("blockNumber", blockNumber) + << LOG_KV("code", _error ? _error->errorCode() : 0) + << LOG_KV("msg", _error ? _error->errorMessage() : ""); + async_response_asyncNotifyBlockNumber(current, toTarsError(_error)); + }); + + return bcostars::Error(); +} + +bcostars::Error RpcServiceServer::asyncNotifyGroupInfo( + const bcostars::GroupInfo& groupInfo, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto bcosGroupInfo = toBcosGroupInfo( + m_rpcInitializer->chainNodeInfoFactory(), m_rpcInitializer->groupInfoFactory(), groupInfo); + m_rpcInitializer->rpc()->asyncNotifyGroupInfo( + bcosGroupInfo, [current](bcos::Error::Ptr&& _error) { + async_response_asyncNotifyGroupInfo(current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error RpcServiceServer::asyncNotifyAMOPMessage(tars::Int32 _type, + const std::string& _topic, const vector& _requestData, vector&, + tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_rpcInitializer->rpc()->asyncNotifyAMOPMessage(_type, _topic, + bcos::bytesConstRef((const bcos::byte*)_requestData.data(), _requestData.size()), + [current](bcos::Error::Ptr&& _error, bcos::bytesPointer _responseData) { + vector response; + if (_responseData) + { + response.assign(_responseData->begin(), _responseData->end()); + } + async_response_asyncNotifyAMOPMessage(current, toTarsError(_error), response); + }); + return bcostars::Error(); +} + +bcostars::Error RpcServiceServer::asyncNotifySubscribeTopic( + std::string&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_rpcInitializer->rpc()->asyncNotifySubscribeTopic( + [current](bcos::Error::Ptr&& _error, std::string _topicInfo) { + async_response_asyncNotifySubscribeTopic(current, toTarsError(_error), _topicInfo); + }); + return bcostars::Error(); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/RpcService/RpcServiceServer.h b/fisco-bcos-tars-service/RpcService/RpcServiceServer.h new file mode 100644 index 0000000..2dd6024 --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/RpcServiceServer.h @@ -0,0 +1,37 @@ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "RpcInitializer.h" +#include +namespace bcostars +{ +struct RpcServiceParam +{ + RpcInitializer::Ptr rpcInitializer; +}; +class RpcServiceServer : public bcostars::RpcService +{ +public: + RpcServiceServer(RpcServiceParam const& _param) : m_rpcInitializer(_param.rpcInitializer) {} + virtual ~RpcServiceServer() {} + + void initialize() override {} + void destroy() override {} + + bcostars::Error asyncNotifyBlockNumber(const std::string& _groupID, + const std::string& _nodeName, tars::Int64 blockNumber, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncNotifyGroupInfo( + const bcostars::GroupInfo& groupInfo, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncNotifyAMOPMessage(tars::Int32 _type, const std::string& _topic, + const vector& _requestData, vector& _responseData, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncNotifySubscribeTopic( + std::string& _topicInfo, tars::TarsCurrentPtr current) override; + +private: + RpcInitializer::Ptr m_rpcInitializer; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/RpcService/main/Application.cpp b/fisco-bcos-tars-service/RpcService/main/Application.cpp new file mode 100644 index 0000000..17f2b85 --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/main/Application.cpp @@ -0,0 +1,127 @@ +#include "../../Common/TarsUtils.h" +#include "../RpcInitializer.h" +#include "../RpcServiceServer.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; +class RpcServiceApp : public tars::Application +{ +public: + RpcServiceApp() {} + + ~RpcServiceApp() override {} + + void initialize() override + { + // Note: since tars Application catch the exception and output the error message with + // e.what() which unable to explicitly display specific error messages, we actively catch + // and output exception information here + try + { + auto configDir = tars::ServerConfig::BasePath; + m_iniConfigPath = configDir + "/config.ini"; + addConfig("config.ini"); + + BCOS_LOG(INFO) << LOG_BADGE("[Rpc][Application]") << LOG_DESC("add config.ini") + << LOG_KV("configDir", configDir); + + initService(configDir); + RpcServiceParam param; + param.rpcInitializer = m_rpcInitializer; + addServantWithParams( + getProxyDesc(bcos::protocol::RPC_SERVANT_NAME), param); + // init rpc + auto ret = getEndPointDescByAdapter(this, bcos::protocol::RPC_SERVANT_NAME); + if (!ret.first) + { + throw std::runtime_error("load endpoint information failed"); + } + std::string clientID = ret.second; + BCOS_LOG(INFO) << LOG_DESC("begin init rpc") << LOG_KV("rpcID", ret.second); + param.rpcInitializer->setClientID(ret.second); + m_rpcInitializer->start(); + } + catch (std::exception const& e) + { + std::cout << "init RpcService failed, error: " << boost::diagnostic_information(e) + << std::endl; + exit(-1); + } + } + + void destroyApp() override + { + if (m_rpcInitializer) + { + m_rpcInitializer->stop(); + } + } + +protected: + virtual void initService(std::string const& _configDir) + { + // !!! Notice: + auto nodeConfig = std::make_shared( + std::make_shared()); + nodeConfig->loadConfig(m_iniConfigPath, false, true, false); + if (nodeConfig->rpcSmSsl()) + { + addConfig("sm_ca.crt"); + addConfig("sm_ssl.crt"); + addConfig("sm_enssl.crt"); + addConfig("sm_ssl.key"); + addConfig("sm_enssl.key"); + } + else + { + addConfig("ca.crt"); + addConfig("ssl.key"); + addConfig("ssl.crt"); + } + + // init the log + boost::property_tree::ptree pt; + boost::property_tree::read_ini(m_iniConfigPath, pt); + // init service.without_tars_framework first for determine the log path + nodeConfig->loadWithoutTarsFrameworkConfig(pt); + + m_logInitializer = std::make_shared(); + if (!nodeConfig->withoutTarsFramework()) + { + m_logInitializer->setLogPath(getLogPath()); + } + + m_logInitializer->initLog(m_iniConfigPath); + nodeConfig->loadServiceConfig(pt); + // for stat the nodeVersion + bcos::initializer::showNodeVersionMetric(); + + m_rpcInitializer = std::make_shared(_configDir, nodeConfig); + } + +private: + std::string m_iniConfigPath; + bcos::BoostLogInitializer::Ptr m_logInitializer; + RpcInitializer::Ptr m_rpcInitializer; +}; + +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + RpcServiceApp app; + app.main(argc, argv); + app.waitForShutdown(); + + return 0; + } + catch (std::exception& e) + { + cerr << "RpcService std::exception:" << e.what() << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/RpcService/main/CMakeLists.txt b/fisco-bcos-tars-service/RpcService/main/CMakeLists.txt new file mode 100644 index 0000000..b81b6cb --- /dev/null +++ b/fisco-bcos-tars-service/RpcService/main/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.14) + +project(bcostars-rpc) +file(GLOB SRC_LIST "*.cpp") + +find_package(Boost REQUIRED program_options) + +aux_source_directory(../ SRC_LIST) +add_executable(${RPC_BINARY_NAME} ${SRC_LIST}) +if(WITH_TIKV) + target_link_libraries(${RPC_BINARY_NAME} ${PROTOCOL_INIT_LIB} ${RPC_TARGET} ${TOOL_TARGET} ${PROTOCOL_INIT_LIB} ${COMMAND_HELPER_LIB} ${LEADER_ELECTION_TARGET}) +else() + target_link_libraries(${RPC_BINARY_NAME} ${PROTOCOL_INIT_LIB} ${RPC_TARGET} ${TOOL_TARGET} ${PROTOCOL_INIT_LIB} ${COMMAND_HELPER_LIB}) +endif() \ No newline at end of file diff --git a/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.cpp b/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.cpp new file mode 100644 index 0000000..2163d00 --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.cpp @@ -0,0 +1,130 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for Scheduler + * @file SchedulerServiceServer.cpp + * @author: yujiechen + * @date 2021-10-18 + */ +#include "SchedulerServiceServer.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include + +using namespace tars; +using namespace bcostars; + +bcostars::Error SchedulerServiceServer::call( + const bcostars::Transaction& _tx, bcostars::TransactionReceipt&, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto bcosTransaction = std::make_shared( + [m_tx = _tx]() mutable { return &m_tx; }); + m_scheduler->call(bcosTransaction, + [current](bcos::Error::Ptr&& _error, bcos::protocol::TransactionReceipt::Ptr&& _receipt) { + bcostars::TransactionReceipt tarsReceipt; + if (_receipt) + { + tarsReceipt = + std::dynamic_pointer_cast(_receipt) + ->inner(); + } + async_response_call(current, toTarsError(_error), tarsReceipt); + }); + return bcostars::Error(); +} + +bcostars::Error SchedulerServiceServer::getCode( + const std::string& contract, vector& code, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_scheduler->getCode(contract, [current](bcos::Error::Ptr error, bcos::bytes code) { + vector outCode(code.begin(), code.end()); + + async_response_getCode(current, toTarsError(error), outCode); + }); + + return bcostars::Error(); +} + +bcostars::Error SchedulerServiceServer::getABI( + const std::string& contract, std::string& abi, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + m_scheduler->getABI(contract, [current](bcos::Error::Ptr error, std::string abi) { + async_response_getABI(current, toTarsError(error), abi); + }); + + return bcostars::Error(); +} + +bcostars::Error SchedulerServiceServer::executeBlock(bcostars::Block const& _block, + tars::Bool _verify, bcostars::BlockHeader&, tars::Bool&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosBlock = std::make_shared(_block); + m_scheduler->executeBlock(bcosBlock, _verify, + [_current]( + bcos::Error::Ptr&& _error, bcos::protocol::BlockHeader::Ptr&& _header, bool _sysBlock) { + auto headerImpl = + std::dynamic_pointer_cast(_header); + async_response_executeBlock( + _current, toTarsError(_error), headerImpl->inner(), _sysBlock); + }); + return bcostars::Error(); +} + + +bcostars::Error SchedulerServiceServer::commitBlock( + bcostars::BlockHeader const& _header, bcostars::LedgerConfig&, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosHeader = std::make_shared( + [m_header = _header]() mutable { return &m_header; }); + m_scheduler->commitBlock(bcosHeader, + [_current](bcos::Error::Ptr&& _error, bcos::ledger::LedgerConfig::Ptr&& _bcosLedgerConfig) { + async_response_commitBlock( + _current, toTarsError(_error), toTarsLedgerConfig(_bcosLedgerConfig)); + }); + return bcostars::Error(); +} + +bcostars::Error SchedulerServiceServer::registerExecutor( + std::string const& _name, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + + auto executorServicePrx = bcostars::createServantProxy(_name); + + auto executor = std::make_shared(executorServicePrx); + m_scheduler->registerExecutor(_name, executor, [_current](bcos::Error::Ptr&& _error) { + async_response_registerExecutor(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} + +bcostars::Error SchedulerServiceServer::preExecuteBlock( + const bcostars::Block& _block, tars::Bool _verify, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + auto bcosBlock = std::make_shared(_block); + m_scheduler->preExecuteBlock(bcosBlock, _verify, [_current](bcos::Error::Ptr&& _error) { + async_response_preExecuteBlock(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} diff --git a/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.h b/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.h new file mode 100644 index 0000000..e46b29c --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/SchedulerServiceServer.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief server for Scheduler + * @file SchedulerServiceServer.h + * @author: yujiechen + * @date 2021-10-18 + */ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include +#include +#include +#include +namespace bcostars +{ +struct SchedulerServiceParam +{ + bcos::scheduler::SchedulerInterface::Ptr scheduler; + bcos::crypto::CryptoSuite::Ptr cryptoSuite; + bcos::protocol::BlockFactory::Ptr blockFactory; +}; +class SchedulerServiceServer : public SchedulerService +{ +public: + SchedulerServiceServer(SchedulerServiceParam const& _param) + : m_scheduler(_param.scheduler), + m_cryptoSuite(_param.cryptoSuite), + m_blockFactory(_param.blockFactory) + {} + ~SchedulerServiceServer() override {} + + void initialize() override {} + void destroy() override {} + + bcostars::Error call(const bcostars::Transaction& _tx, bcostars::TransactionReceipt& _receipt, + tars::TarsCurrentPtr current) override; + + bcostars::Error getCode(const std::string& contract, vector& code, + tars::TarsCurrentPtr current) override; + + bcostars::Error getABI( + const std::string& contract, std::string& code, tars::TarsCurrentPtr current) override; + + bcostars::Error executeBlock(bcostars::Block const& _block, tars::Bool _verify, + bcostars::BlockHeader& _executedHeader, tars::Bool& _sysBlock, + tars::TarsCurrentPtr _current) override; + bcostars::Error commitBlock(bcostars::BlockHeader const& _header, + bcostars::LedgerConfig& _config, tars::TarsCurrentPtr _current) override; + + bcostars::Error registerExecutor( + std::string const& _name, tars::TarsCurrentPtr _current) override; + + bcostars::Error preExecuteBlock( + const bcostars::Block& _block, tars::Bool _verify, tars::TarsCurrentPtr current) override; + +private: + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::protocol::BlockFactory::Ptr m_blockFactory; +}; +} // namespace bcostars diff --git a/fisco-bcos-tars-service/SchedulerService/main/CMakeLists.txt b/fisco-bcos-tars-service/SchedulerService/main/CMakeLists.txt new file mode 100644 index 0000000..c74acd9 --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/main/CMakeLists.txt @@ -0,0 +1,9 @@ +file(GLOB SRC_LIST "*.cpp") +file(GLOB HEADERS "*.h") + +set(BINARY_NAME BcosSchedulerService) + +aux_source_directory(../ SRC_LIST) +add_executable(${BINARY_NAME} ${SRC_LIST} ${HEADERS}) + +target_link_libraries(${BINARY_NAME} PUBLIC ${PROTOCOL_INIT_LIB} ${COMMAND_HELPER_LIB} ${SCHEDULER_TARGET} ${LEDGER_TARGET} ${STORAGE_TARGET}) \ No newline at end of file diff --git a/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.cpp b/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.cpp new file mode 100644 index 0000000..2d37304 --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.cpp @@ -0,0 +1,180 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the SchedulerService + * @file SchedulerServiceApp.cpp + * @author: yujiechen + * @date 2022-5-10 + */ +#include "SchedulerServiceApp.h" +#include "Common/TarsUtils.h" +#include "SchedulerService/SchedulerServiceServer.h" +#include "bcos-utilities/BoostLog.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include "generated/bcos-tars-protocol/tars/TxPoolService.h" +#include "libinitializer/CommandHelper.h" +#include "libinitializer/SchedulerInitializer.h" +#include "libinitializer/StorageInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcostars; +using namespace bcos::initializer; +using namespace bcos::ledger; +using namespace bcos::protocol; + +void SchedulerServiceApp::initialize() +{ + try + { + createAndInitSchedulerService(); + } + catch (std::exception const& e) + { + std::cout << "init SchedulerService failed, error: " << boost::diagnostic_information(e) + << std::endl; + exit(-1); + } +} + +void SchedulerServiceApp::createAndInitSchedulerService() +{ + fetchConfig(); + initConfig(); + + // for stat the nodeVersion + bcos::initializer::showNodeVersionMetric(); + + auto rpcServiceName = m_nodeConfig->rpcServiceName(); + auto withoutTarsFramework = m_nodeConfig->withoutTarsFramework(); + + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("create RpcServiceClient") + << LOG_KV("rpcServiceName", rpcServiceName) + << LOG_KV("withoutTarsFramework", withoutTarsFramework); + + std::vector endPoints; + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::RPC_NAME, endPoints); + + auto rpcServicePrx = bcostars::createServantProxy( + withoutTarsFramework, rpcServiceName, endPoints); + + m_rpc = std::make_shared(rpcServicePrx, rpcServiceName); + + auto txpoolServiceName = m_nodeConfig->txpoolServiceName(); + + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("create TxPoolServiceClient") + << LOG_KV("txpoolServiceName", txpoolServiceName); + + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::TXPOOL_NAME, endPoints); + auto txpoolServicePrx = bcostars::createServantProxy( + withoutTarsFramework, txpoolServiceName, endPoints); + + m_txpool = std::make_shared(txpoolServicePrx, + m_protocolInitializer->cryptoSuite(), m_protocolInitializer->blockFactory()); + + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("createScheduler"); + createScheduler(); + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("createScheduler success"); + + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("addServant for scheduler"); + + SchedulerServiceParam param; + param.scheduler = m_scheduler; + param.cryptoSuite = m_protocolInitializer->cryptoSuite(); + param.blockFactory = m_protocolInitializer->blockFactory(); + addServantWithParams( + getProxyDesc(SCHEDULER_SERVANT_NAME), param); + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("addServant for scheduler success"); +} +void SchedulerServiceApp::fetchConfig() +{ + m_iniConfigPath = ServerConfig::BasePath + "/config.ini"; + m_genesisConfigPath = ServerConfig::BasePath + "/config.genesis"; + addConfig("config.ini"); + addConfig("config.genesis"); + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("fetchConfig success") + << LOG_KV("iniConfigPath", m_iniConfigPath) + << LOG_KV("genesisConfigPath", m_genesisConfigPath); +} + +void SchedulerServiceApp::initConfig() +{ + boost::property_tree::ptree pt; + boost::property_tree::read_ini(m_iniConfigPath, pt); + + boost::property_tree::ptree genesisPt; + boost::property_tree::read_ini(m_genesisConfigPath, pt); + // init service.without_tars_framework first for determine the log path + m_nodeConfig->loadWithoutTarsFrameworkConfig(pt); + + m_logInitializer = std::make_shared(); + if (!m_nodeConfig->withoutTarsFramework()) + { + m_logInitializer->setLogPath(getLogPath()); + } + m_logInitializer->initLog(m_iniConfigPath); + + m_nodeConfig = + std::make_shared(std::make_shared()); + m_nodeConfig->loadGenesisConfig(genesisPt); + m_nodeConfig->loadConfig(pt); + m_nodeConfig->loadServiceConfig(pt); + m_nodeConfig->loadNodeServiceConfig(m_nodeConfig->nodeName(), pt, true); + // init the protocol + m_protocolInitializer = std::make_shared(); + m_protocolInitializer->init(m_nodeConfig); + SCHEDULER_SERVICE_LOG(INFO) << LOG_DESC("initConfig success"); +} + +void SchedulerServiceApp::createScheduler() +{ + auto blockFactory = m_protocolInitializer->blockFactory(); + auto ledger = std::make_shared(blockFactory, + StorageInitializer::build(m_nodeConfig->pdAddrs(), getLogPath(), m_nodeConfig->pdCaPath(), + m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath())); + auto executionMessageFactory = + std::make_shared(); + auto executorManager = std::make_shared( + m_nodeConfig->executorServiceName()); + + m_scheduler = SchedulerInitializer::build(executorManager, ledger, + StorageInitializer::build(m_nodeConfig->pdAddrs(), getLogPath(), m_nodeConfig->pdCaPath(), + m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()), + executionMessageFactory, blockFactory, m_protocolInitializer->txResultFactory(), + m_protocolInitializer->cryptoSuite()->hashImpl(), m_nodeConfig->isAuthCheck(), + m_nodeConfig->isWasm()); + auto scheduler = std::dynamic_pointer_cast(m_scheduler); + // handler for notify block number + scheduler->registerBlockNumberReceiver([this](bcos::protocol::BlockNumber number) { + BCOS_LOG(DEBUG) << "Notify blocknumber: " << number; + // Note: the interface will notify blockNumber to all rpc nodes in pro/max mode + m_rpc->asyncNotifyBlockNumber( + m_nodeConfig->groupId(), m_nodeConfig->nodeName(), number, [](bcos::Error::Ptr) {}); + }); + // handler for notify transactions + scheduler->registerTransactionNotifier([this](bcos::protocol::BlockNumber _blockNumber, + bcos::protocol::TransactionSubmitResultsPtr _result, + std::function _callback) { + // only response to the requester + m_txpool->asyncNotifyBlockResult(_blockNumber, _result, _callback); + }); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.h b/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.h new file mode 100644 index 0000000..0899b3a --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/main/SchedulerServiceApp.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Application for the SchedulerService + * @file SchedulerServiceApp.h + * @author: yujiechen + * @date 2022-5-10 + */ +#pragma once + +#include "bcos-framework/rpc/RPCInterface.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include + +#define SCHEDULER_SERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_DESC("SchedulerServiceApp") + +namespace bcostars +{ +class SchedulerServiceApp : public tars::Application +{ +public: + SchedulerServiceApp() = default; + ~SchedulerServiceApp() override {} + void initialize() override; + void destroyApp() override + { + if (m_scheduler) + { + m_scheduler->stop(); + } + } + +protected: + virtual void createAndInitSchedulerService(); + virtual void createScheduler(); + virtual void fetchConfig(); + virtual void initConfig(); + +private: + std::string m_iniConfigPath; + std::string m_genesisConfigPath; + bcos::BoostLogInitializer::Ptr m_logInitializer; + bcos::tool::NodeConfig::Ptr m_nodeConfig; + bcos::initializer::ProtocolInitializer::Ptr m_protocolInitializer; + + bcos::rpc::RPCInterface::Ptr m_rpc; + bcos::txpool::TxPoolInterface::Ptr m_txpool; + + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-bcos-tars-service/SchedulerService/main/main.cpp b/fisco-bcos-tars-service/SchedulerService/main/main.cpp new file mode 100644 index 0000000..5e6d6e6 --- /dev/null +++ b/fisco-bcos-tars-service/SchedulerService/main/main.cpp @@ -0,0 +1,54 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief main for SchedulerService + * @file main.cpp + * @author: yujiechen + * @date 2022-05-10 + */ +#include "SchedulerServiceApp.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include + +using namespace bcostars; +using namespace bcos; +using namespace bcos::initializer; +int main(int argc, char* argv[]) +{ + try + { + bcos::initializer::initCommandLine(argc, argv); + SchedulerServiceApp app; + printVersion(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The SchedulerService is running..." << std::endl; + app.main(argc, argv); + app.waitForShutdown(); + std::cout << "[" << getCurrentDateTime() << "] "; + std::cout << "The SchedulerService program exit normally." << std::endl; + return 0; + } + catch (std::exception& e) + { + cerr << "SchedulerService std::exception:" << e.what() << std::endl; + } + catch (...) + { + cerr << "unknown exception." << std::endl; + } + return -1; +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.cpp b/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.cpp new file mode 100644 index 0000000..34f31e5 --- /dev/null +++ b/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.cpp @@ -0,0 +1,288 @@ +#include "TxPoolServiceServer.h" +#include "../Common/TarsUtils.h" +#include +using namespace bcostars; + +bcostars::Error TxPoolServiceServer::submit(const bcostars::Transaction& tx, + bcostars::TransactionSubmitResult& result, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto transaction = std::make_shared( + [m_transaction = std::move(const_cast(tx))]() mutable { + return &m_transaction; + }); + bcos::task::wait([](std::shared_ptr txpool, + protocol::TransactionImpl::Ptr transaction, + tars::TarsCurrentPtr current) -> bcos::task::Task { + try + { + auto submitResult = co_await txpool->submitTransaction(std::move(transaction)); + async_response_submit(current, {}, + std::dynamic_pointer_cast( + submitResult) + ->inner()); + } + catch (bcos::Error& e) + { + async_response_submit(current, toTarsError(e), {}); + } + }(m_txpoolInitializer->txpool(), std::move(transaction), current)); + + return {}; +} + +bcostars::Error TxPoolServiceServer::broadcastPushTransaction( + const bcostars::Transaction& tx, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto transaction = std::make_shared( + [m_transaction = std::move(const_cast(tx))]() mutable { + return &m_transaction; + }); + bcos::task::wait([](std::shared_ptr txpool, + protocol::TransactionImpl::Ptr transaction, + tars::TarsCurrentPtr current) -> bcos::task::Task { + try + { + co_await txpool->broadcastPushTransaction(*transaction); + async_response_broadcastPushTransaction(current, {}); + } + catch (bcos::Error& e) + { + async_response_broadcastPushTransaction(current, toTarsError(e)); + } + }(m_txpoolInitializer->txpool(), std::move(transaction), current)); + + return {}; +} + +bcostars::Error TxPoolServiceServer::asyncFillBlock(const vector>& txHashs, + vector& filled, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto hashList = std::make_shared>(); + for (auto const& hashData : txHashs) + { + hashList->push_back(bcos::crypto::HashType( + reinterpret_cast(hashData.data()), hashData.size())); + } + + m_txpoolInitializer->txpool()->asyncFillBlock( + hashList, [current](bcos::Error::Ptr error, bcos::protocol::TransactionsPtr txs) { + std::vector txList; + if (error) + { + async_response_asyncFillBlock(current, toTarsError(error), txList); + TXPOOLSERVICE_LOG(WARNING) + << LOG_DESC("asyncFillBlock failed") << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + return; + } + for (auto tx : *txs) + { + txList.push_back( + std::dynamic_pointer_cast(tx)->inner()); + } + + async_response_asyncFillBlock(current, toTarsError(error), txList); + }); + + return bcostars::Error(); +} + + +bcostars::Error TxPoolServiceServer::asyncMarkTxs(const vector>& txHashs, + tars::Bool sealedFlag, tars::Int64 _batchId, const vector& _batchHash, + tars::TarsCurrentPtr current) +{ + current->setResponse(false); + auto hashList = std::make_shared>(); + for (auto hashData : txHashs) + { + hashList->push_back(bcos::crypto::HashType( + reinterpret_cast(hashData.data()), hashData.size())); + } + auto batchHash = bcos::crypto::HashType( + reinterpret_cast(_batchHash.data()), _batchHash.size()); + m_txpoolInitializer->txpool()->asyncMarkTxs( + hashList, sealedFlag, _batchId, batchHash, [current](bcos::Error::Ptr error) { + async_response_asyncMarkTxs(current, toTarsError(error)); + }); + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncNotifyBlockResult(tars::Int64 blockNumber, + const vector& result, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto bcosResultList = std::make_shared(); + for (auto tarsResult : result) + { + auto bcosResult = std::make_shared( + m_txpoolInitializer->cryptoSuite(), + [inner = std::move(const_cast( + tarsResult))]() mutable { return &inner; }); + bcosResultList->push_back(bcosResult); + } + + m_txpoolInitializer->txpool()->asyncNotifyBlockResult( + blockNumber, bcosResultList, [current](bcos::Error::Ptr error) { + async_response_asyncNotifyBlockResult(current, toTarsError(error)); + }); + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncNotifyTxsSyncMessage(const bcostars::Error& error, + const std::string& id, const vector& nodeID, const vector& data, + tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto bcosNodeID = m_txpoolInitializer->cryptoSuite()->keyFactory()->createKey( + bcos::bytes(nodeID.begin(), nodeID.end())); + + m_txpoolInitializer->txpool()->asyncNotifyTxsSyncMessage(toBcosError(error), id, bcosNodeID, + bcos::bytesConstRef(reinterpret_cast(data.data()), data.size()), + [current](bcos::Error::Ptr error) { + async_response_asyncNotifyTxsSyncMessage(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncSealTxs(tars::Int64 txsLimit, + const vector>& avoidTxs, bcostars::Block& txsList, + bcostars::Block& sysTxsList, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + auto bcosAvoidTxs = std::make_shared(); + for (auto tx : avoidTxs) + { + bcosAvoidTxs->insert(bcos::crypto::HashType(bcos::bytes(tx.begin(), tx.end()))); + } + + m_txpoolInitializer->txpool()->asyncSealTxs(txsLimit, bcosAvoidTxs, + [current](bcos::Error::Ptr error, bcos::protocol::Block::Ptr _txsList, + bcos::protocol::Block::Ptr _sysTxsList) { + if (error) + { + TXPOOLSERVICE_LOG(WARNING) + << LOG_DESC("asyncSealTxs failed") << LOG_KV("code", error->errorCode()) + << LOG_KV("msg", error->errorMessage()); + async_response_asyncSealTxs( + current, toTarsError(error), bcostars::Block(), bcostars::Block()); + return; + } + async_response_asyncSealTxs(current, toTarsError(error), + std::dynamic_pointer_cast(_txsList)->inner(), + std::dynamic_pointer_cast(_sysTxsList)->inner()); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncVerifyBlock(const vector& generatedNodeID, + const vector& block, tars::Bool& result, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + bcos::crypto::PublicPtr pk = m_txpoolInitializer->cryptoSuite()->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)generatedNodeID.data(), generatedNodeID.size())); + m_txpoolInitializer->txpool()->asyncVerifyBlock(pk, + bcos::bytesConstRef((const bcos::byte*)block.data(), block.size()), + [current](bcos::Error::Ptr error, bool result) { + async_response_asyncVerifyBlock(current, toTarsError(error), result); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::notifyConnectedNodes( + const vector>& connectedNodes, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + bcos::crypto::NodeIDSet bcosNodeIDSet; + for (auto const& it : connectedNodes) + { + bcosNodeIDSet.insert(m_txpoolInitializer->cryptoSuite()->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)it.data(), it.size()))); + } + + m_txpoolInitializer->txpool()->notifyConnectedNodes( + bcosNodeIDSet, [current](bcos::Error::Ptr error) { + async_response_notifyConnectedNodes(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::notifyConsensusNodeList( + const vector& consensusNodeList, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + bcos::consensus::ConsensusNodeList bcosNodeList; + for (auto const& it : consensusNodeList) + { + auto node = std::make_shared( + m_txpoolInitializer->cryptoSuite()->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)it.nodeID.data(), it.nodeID.size())), + it.weight); + bcosNodeList.emplace_back(node); + } + + m_txpoolInitializer->txpool()->notifyConsensusNodeList( + bcosNodeList, [current](bcos::Error::Ptr error) { + async_response_notifyConsensusNodeList(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::notifyObserverNodeList( + const vector& observerNodeList, tars::TarsCurrentPtr current) +{ + current->setResponse(false); + + bcos::consensus::ConsensusNodeList bcosObserverNodeList; + for (auto const& it : observerNodeList) + { + auto node = std::make_shared( + m_txpoolInitializer->cryptoSuite()->keyFactory()->createKey( + bcos::bytesConstRef((const bcos::byte*)it.nodeID.data(), it.nodeID.size())), + it.weight); + bcosObserverNodeList.emplace_back(node); + } + + m_txpoolInitializer->txpool()->notifyObserverNodeList( + bcosObserverNodeList, [current](bcos::Error::Ptr error) { + async_response_notifyObserverNodeList(current, toTarsError(error)); + }); + + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncGetPendingTransactionSize( + tars::Int64& _pendingTxsSize, tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_txpoolInitializer->txpool()->asyncGetPendingTransactionSize( + [_current](bcos::Error::Ptr _error, uint64_t _txsSize) { + async_response_asyncGetPendingTransactionSize(_current, toTarsError(_error), _txsSize); + }); + return bcostars::Error(); +} + +bcostars::Error TxPoolServiceServer::asyncResetTxPool(tars::TarsCurrentPtr _current) +{ + _current->setResponse(false); + m_txpoolInitializer->txpool()->asyncResetTxPool([_current](bcos::Error::Ptr _error) { + async_response_asyncResetTxPool(_current, toTarsError(_error)); + }); + return bcostars::Error(); +} \ No newline at end of file diff --git a/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.h b/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.h new file mode 100644 index 0000000..643cc14 --- /dev/null +++ b/fisco-bcos-tars-service/TxPoolService/TxPoolServiceServer.h @@ -0,0 +1,80 @@ +#pragma once +#pragma GCC diagnostic ignored "-Wunused-variable" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +#include "libinitializer/ProtocolInitializer.h" +#include "libinitializer/TxPoolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcostars +{ +struct TxPoolServiceParam +{ + bcos::initializer::TxPoolInitializer::Ptr txPoolInitializer; +}; +class TxPoolServiceServer : public bcostars::TxPoolService +{ +public: + using Ptr = std::shared_ptr; + TxPoolServiceServer(TxPoolServiceParam const& _param) + : m_txpoolInitializer(_param.txPoolInitializer) + {} + ~TxPoolServiceServer() override {} + + void initialize() override {} + void destroy() override {} + + bcostars::Error submit(const bcostars::Transaction& tx, + bcostars::TransactionSubmitResult& result, tars::TarsCurrentPtr current) override; + + bcostars::Error broadcastPushTransaction( + const bcostars::Transaction& tx, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncFillBlock(const vector>& txHashs, + vector& filled, tars::TarsCurrentPtr current) override; + + bcostars::Error asyncMarkTxs(const vector>& txHashs, tars::Bool sealedFlag, + tars::Int64 _batchId, const vector& _batchHash, + tars::TarsCurrentPtr current) override; + + bcostars::Error asyncNotifyBlockResult(tars::Int64 blockNumber, + const vector& result, + tars::TarsCurrentPtr current) override; + + bcostars::Error asyncNotifyTxsSyncMessage(const bcostars::Error& error, const std::string& id, + const vector& nodeID, const vector& data, + tars::TarsCurrentPtr current) override; + + bcostars::Error asyncSealTxs(tars::Int64 txsLimit, const vector>& avoidTxs, + bcostars::Block& txsList, bcostars::Block& sysTxsList, + tars::TarsCurrentPtr current) override; + + bcostars::Error asyncVerifyBlock(const vector& generatedNodeID, + const vector& block, tars::Bool& result, tars::TarsCurrentPtr current) override; + + bcostars::Error notifyConnectedNodes( + const vector>& connectedNodes, tars::TarsCurrentPtr current) override; + + bcostars::Error notifyConsensusNodeList( + const vector& consensusNodeList, + tars::TarsCurrentPtr current) override; + + bcostars::Error notifyObserverNodeList(const vector& observerNodeList, + tars::TarsCurrentPtr current) override; + bcostars::Error asyncGetPendingTransactionSize( + tars::Int64& _pendingTxsSize, tars::TarsCurrentPtr _current) override; + bcostars::Error asyncResetTxPool(tars::TarsCurrentPtr _current) override; + +private: + bcos::initializer::TxPoolInitializer::Ptr m_txpoolInitializer; +}; +} // namespace bcostars \ No newline at end of file diff --git a/fisco-sgx-go b/fisco-sgx-go deleted file mode 100755 index 30c711b375c53604247d67ab4436e0959ed9d345..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11787140 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

>E?+0_%k->Uwc=wZ$3PFx2@@fbWdFUwtZ13 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

    CdK#_uMr3t0AlA%1t;Hkqt46LuKC`{0kk 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

    c%T^XIXQ}g5 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μ{5z!7^GVNz~w#_cVYIQ6ZTQG{r6Awx?U?2`wzBGNdE2N+_eGw?*_ou_Fn_ng$YF|8YUD3Kip_-&nZB`G} zH=$+}f>O6f z)o$6R%Iv&C*Z--OffwPPCMPD{#zh-vUW)7F(k}|Yo;!s{EG2-P;>C!A`Ld~W++BJAT~+kSz5sBV1*`r$A7qkl&~H0=bb zYAr*D67-Bc98;=B>j%x>&pU)Vf5A^Ub?UQU<@Px^%_Q7%ZmKNj)NrGDM=Yax{a2zi zJQpFqgX)t$s@A?ywMO>IS((_i9byt==%HA|2pQGp^X(!O%IetrTC6Y$WnZ6GzuedY z+*jYezUm80f5g@=Q)=k&|# zePipFf>KMr^arYEtzR46caDAL+8Q(k~T_!}>2uzZ9!_?~JN9QkKQmFW+wd1^Oi``3&^SQ2o)r zqhFTwgh=f{Wg6jsIT4H{QtSC&w0;><$9S&fq4){!mH()IneLbzkD^-(k~x3{WtW>pMYja{?R`bn!gk(REN|<^>q4Wj+#Ft!>koy zbr0{OU8vd_PW$(npThh*`S`f1v9`1}pAt%K!B04)B1eKP;jQJnpOi74tn6Q-@&N8b z^OqT%LQYkHr$qs-?^IuFL+AWY%}vg`xz(gp{2&w4l$6Da8rXNhMpr;=)fBi9{|0yy< z^AD%Or7#MY$R3ETAKqQ}3-m(@I2lbjy?_1!{n5XpA8tE8rbyiJbu5wCkbdZOQhMqF z{Dk+^e^fsV-Vv=ImYMKigz1M~%_H=~sWX{>OymHG z%0D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

    Xv6-UASsdEW#Ota@z-=aoxDCvd0V%jC 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

    {^+P`sGF+y#$%SzqGvXS02GeO5+kZndt##O_$) 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

    2w72pD8z!q=x!+ape=7F|E1yxbM)g%o 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%0Ac~nB8Wd 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Ν*00C3&+L?y*bW*7T2+{HD^g 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%0DgBQFANBX}Lo9!a?r3z3;y;x1$NgVJ_0K+? ztCRJ6<)i-gF=2n$Q0+4#`_iJ6{+~jV_eU(@*&jmu4&;VvpZOzq z@#nJv^-BlIKh>U`vZr{ zzj!442S@z2qFxM@-?GnI{`@+?Kfm_u&mruDtE#KJ{nH_ zbM=v{Z&CcpnKM}kVN6p403;>df)q}FYs`E>CuO8+H_un*?1jPkSG z{FL0^rMI{JY^kcl{-B}SXWQ7~3^hG|VgH!&k++jH>{$G&3n17Lv``kF?_xOCsL5iO!`6u#m9~`Ir8>cQj zqWH~&*a!E?amv4%5}TFc7Yw7*7x%$&%Kz|-0p$LmpLO!*qu!yW@8uP($orRpQu*u} zm?~5bv3!nQ-e^5#pJ(^^mv30^gqnYg=iE_);;*?)^Rb`Rsr}~_t3&Qja|rrZ(f_f3 zSQ#JM{q+Y$D^#TP&ws;Tf8@JDmRE9$KPK#lHxbW5=8$VsliNd zoyYq+l$&<{wUpvthW&wM{Z*(3f?Wi;DBqubErH_Km;49qA8PqO>Z7^sDgN{<{^hfW zA7c4`{=3W36u+=%|1^;f$PcxAco>%FJ&OPJX*zw)v7tSmy0@%KPl~_d3C$0=ektFM z+@I+yseOg^3AKL7RP%ZdO8>f2`yBaLk2&?va%l_5_DPc<>5KJ%Q~tTjdHML9fcuNh zS7`g=KIBgMWuC@Vruc_~q;IJ8<9o|jk?oV{VEH%1`m5WeS-(*Fzp{w7kD`Tk|8ly= z+ENt%PLTQ~)c)0vBi-clm$#(nBj}&F&#}|=U4CR?IHmt`seb_ZW+gos+B%QrGRo6y z-(EuTi$VQ`_ZP@V8SEm+MOpoh{s+ZxUcx_paUN2r_2b!d>#I=w9ku-VILd<J%=#2R zQOds_eu(W8w|etB#h)sbKgh>+u2cIA7`l5K#s5iq{(^jzPWk8lNf}G=UxE4y^OuJk zV)_nV-H_ZLe8X|!|1#fmoghB|^DW9{FXcNz>7N`#e>cuoamfF*YOU8O{yyMi`%{aC z=gT4X|1W#H9httzz&^-V4c*c>)c(U?em^mR(m&e)fBWP33bm}bj&(8OAKD$|mWos7 zQ~b}Q{x{=lszt-+Bm~+zg=mI>QDUbgM58MXzkn9 z(|eNrlW)oPDLCHx{h{iAb#kY6lzl#t%1^AYQWB^%~ngY(nuPdI|rR^~c}gl>hIP%Pxu^cE>+|A=hXC6ZSX+GkOV^?fM* zWodkfXMA0V`L|W6wqH{G`SSfyLs7nks{iL_&lIEh&n@%MUrP0i*=J&6m!TAYuT;Jn zeV|`5#P-|9b2>Rbp}W+7>ju7>B{cupcS$AhFQ!BOLjT0^jiHVY$ul&PynkeS_E`QX z{woUdjek?E^TGaMxr4IDwvlA|R+7p$&jz+@LrmWd%XX6O zw^OqJ06$d!|FGGbI7lLW+|1<<-hsi$kG)55#ww5 zGb=i*JDE}bto5sgQv7@$g(+sq%!<36C=YUI!XkF|hp#CpJA74q8uK5|{Cx%I*EALB z>8d2!3+5gnF<*+S1^!1a%Jn(Sk0^fIR|H?Hrwa(I&m1a0`S_%}6n{`*!FRV3dTaYK zrvKyAUwQw3fPLNozN@j&U(X=F=apt{D1N5{!Yu9%VE+vAUz<3VkADu(f8Hg*SK5L8 zu>NzX_V3xX@p+10eyOm((LwN)w2ayRfB!r2A;s@+fc_IiyFtq!zt)4zYbbsq*dNEW zn;GPn+4K7s6yF8@Z@ez-qQL$;q1yk%#PFsRKT`_$e>ZVIt!0p(dDN#JDgHF@f9+L~ zzGepbO^?In~MtdItGFy*GIi#c#Pl*kA7^@|T%G{_&De`S`j3`fq%mKU7_+PZ*2X5;(rPCiwYZU=&*lQsQjEKrre|W zSib4gAbpQ!EdOqZoOhh!-$DOuFZ@%>Ab;=Qsr>#iAbn4Rf10ldzL`OOrhm`Zq4?iH z`%Ui-`RmV&+2`d|E6!51AiwGNGoDcV0;!^WaP1U&n-2Lsp;>@p@YfqY z2xs%(@jb3@vwMR$;~p&T+cj9f*Umpp0Idf3V#QKVef8I1eVZ_tpRPl@!OS2(a?v+~ zD1H*Ie+c!W@|UypmGv*SaULI^=CKdz|37S>L%E=3kl(iFdH(z^fIs#xk-pk3p|_qv z{@t3pn^XMWu)cw3-c$zp6W>`y>i-MmFY~F;UxWQSLiL}htT}oAMu2@14dGz8?!2Bs zey1Fd`TUUpekUA80r$VSKAWBX^5;qSzR5}DuL7FT-_zd!`;W-+#kaiwb$E&L*|{cv zzT?qfEi~Ku#(U_WV^gj7`blU0uUX&r{(G?Ql3)JC@?j&^Un9l+wds&A|Gu2{!ZK6# zxdY{oep0uT(O~}(Ilfm@@yacoxcu&pf)xKTme1pLD~1XCkJ#}w=&-8+@>(P7`GUv( z2J{cC#rFRV(S9&t{}Ee0=&ylXS}=;wPxSDy|KTX|$BXpUV146I`OS}QC)?*o(Eg`& zOA|AL{1vOt_NMf|g8Kh0_{uqF{t4e!P#&Bx>{VYr`u`qCU!$+^Pu(G3Rs6$8onPF- z*MGya=>Iz0znEZu(;;6&5Xd=K&aCp)ANhTt{K0i4blCqi)bwq1{WyPq>d_zl=il7I zf%QzfrHKan*VysJx8b1{i<$jF!==7_w12xIqW;2pQ`#kG>8n}Vu(eY_-k9BOp)Vix z@3C3%)mggrO+ADB(If9Xrud_wec}ebnL&Qtfi-ed{2Ygc{@VLOf8}zG6SieG>3;D|-Ujr`6PsWYq^G5>wb0?G! zMmy2|)M0&fJO4y3Tt>N9GJ2UWAM;m(-@!gbb?d9wSK9dLH?LNCHV6f zPx_+%XMpdD7JSnoUjw_NxIcQ$5MMr~?-eNjU0;HIt~;~8ieQjW_2I*)@;@JxZ*It6 zx7^ z_Ad#16Zo1#z6KzaGY71^>YKh;{+Gq|>&}CJI^-)N+bH+oI@_biSo=@GTSbHNtt#AK zE6arcm=5`}edgtyc$%_L6zFeOf&K^BA3^pH)C;AGFF>x!F}phDpLx5BAByu)aDN9o zzWjMg;S(z;|LF|%qtOA%XNUUhpf}2KPZlNkrZ1Kcb$${08#%!~a33t|2RM&FE|$+p zSF`Z(GamoM@_7vO-x_(L{&L8dufOQ&w561N;xK*R5&mg9JD9 z3;VbR3BK~Lv;2$8OrVN=#r$>lL~cI6(!)=K z{51>mm$n@8mqWg6|3=TB8%No{&~%}Q(FOeTu0#8P{#Z_29ec;^tG`lM*ry@pubkrf zk?D{x>whBc-TajPU65Z2JR0^-l;eZDcm(@=;Twf;7qM*T+sALm7w4*42_K%Pw5?$>{d{4u!xC$6^v z>jT@_M+Yv-3s=h~``RDNw*ukdpQXh&aa^DsUjzTF2eSXR2Y&7UBanY*!u_f468#U# z184rPf&M7F?%2Y|&wKJOmOnF22?bn>h5p*ZjPdUd-A?w;H-+cp>Jq`%Gsxc;zrP5j z|FclPxYh{1nL+-&)9v~CjRE#~fcer;@DnPC46^0)OXz~>JJ z=wJPjNMCIm*gu2(yroY1-5;U4^kC`(XJq3hGC*jL=_!e)LfJjVm4X8=r&xf?$8O zEbtXkPulTS#Xo%Y_}nt8{rL>o-+fi^HHUop`pcT!zE9PUx8eDMyR6{r8RWPAvRHA7 z-xAv=+U}1>z|mvqOpB@JJpI| zI^<)!2itG;>$LQ{|HAg$Q|O=3e-!?&g*)>f)Ej<=^3My!{GK17f0l>((FOB0O^19P zz$iyX{o%Ji8rHw{fRFQ1luXX_H-WzaWTj(c`1%8$^0Ozj56eOS0M1L%9P-irD081H z73RxNgXcT-fN#!%`=bbF`Xl!`=>NSDQPY=S584mqq5Y}sh4h8}-R%5R2QJFauGxO= zPZgez=ukcwz&9Q8Rp6s&F`;WIs{CmK^`pC&u#1+>nSD@iynoD9?5SV-2k##j3=taO z_+EStX=fkQ8)d5@!}?O?&v|e#y{gd2bf~|EV30>{h0pL!U(8=GLHX~3aq}AN&t<2- zT)w?nU}PVveES^jgM8Tk+K#VE`t$uGsPz5++&_Y{&;RHC5mfqSbpHrVvd`~(-+hJB ze+WE3!g1{yJjb@PKk`u?s4%{pFCXidSZqH?`*+*%W&fGmD&{ZBe?EowvvNnbez6Ao zgNMowOTAc&;%~tIXW;7@Myzf({)jl{|fA%XvZ%M*TU~5_V{5gH9r65iZDf8;+?PzQO47)f6!lHDr8+V$Atf;-DN2n|E2qRKSBr^D92}d}b!1#hY`6AZ zYu1WVV@D-+h)zynCu3uhVpG)KeR!OD>R6>M391%7GG%zmu*80~>Z+9or=%oSiy5Af z5T$z0*HhV?FT1=yw?DvJ^@5B0`d{LG@Wh0c0gZY-BVG91P zU-Kx6S}l`em~6|A$)0UH5a*e{h$qILYV{4p|G8M0qBH)EAbj()5{kO81Y$fA(*;kg zQQsR*@#9Og{XHr~C>Mk9U71xy4ObE4kuv}G%1U!6{>$yz{`M6kl(0B|`*bP~_PJL^ zF-w*5aPdVrz5sb`=-K{kE?9PXf7&{qDT=F7aK6U)x@ynQcPh&~ieI)bOW(@D`R==A z6s<%cU$)QdZ$*!y?6Z3t%O6!Dlvi2z6XidyJ0%t4L`lgSf&N+ba{P9R|8!26;v)EH zf7eaMK5Wn5vC&x0_*rECum2&_zj}mHlRbx{^f&Uejg~S=n=P?lBipBL1EmqAf7KV6 z{x3u*Sy(%dUCEQbE>u*Mrx4t^^9QvLUT6B9A$wT)T?@a6nIpbm5!4$tsHuPlR!~PiRmhs6XCE;r*az+#LRJ zkjO=Ox&Fb;l>RwkeQV^qr1^hN`RDsh=Hs&h?Eh7yzkP5YCgU}6AL7*hFU)iIq4>XN z5q1xQ2Ri0s-Le4A7jw#A6t^~s;xC5v`#t<88ROUQ_+%=@FP2x>N9LQiM8nmo{*R~S zUqSJk!ur$UR_j8y?1S@EF&|hbeg2`}psd(@=pBk*8~hXb>Jjk!wG%9wQ~lqb zFya`+kCym)6mUc2w`#GzJH=m>U)Ue@S9VRd^v3&H700dk*oMDEyP(`y{^|1+|Fdx6 zpW;6o&-H`gt1+S<9P_h;58(guXgD9A8<4+F$oy|J#&7WD^fnZKF06ls_HjppeLy-b z9|~kO$5H%MP=2C)%*Dcg+!e%iT#2c&X{`5Xca(3xU+f!-|DB{i&ci{!M=4(fxhUhx zU;LNiN8aYO7T=vmNY_^)U9p^VYM=g#r_ZMN*>n2)Cyu|?VV;1~{B>Z+Wiox6ofdkd z{qgx5>g|+YuiM{zeqn%rPJrhpSia#rY6bQga?00Bj%iKtuiY2=%Y59w$SHs8>Q_%v z{9fm2zMK#2{AbtFiz6uhub%Z&MLMH>&@Y|p|LM7ve0)Km{h@wG|3p4YOlLd&TQ9ms zuFu!^h_FvEzWJJ{Z|wL5|CsbLrGIx=Uq|MneXyLi`e#n< zb3R)cvVB-j%D-rLeV1;j>@EB?HfBr>%k&DvKJ{892m`w3ILi+^mgX@NQ z)+x*EEPb=}KUIO^4?5wWzud4tiQPUWST3XdU}7&mKQbVFU-7ITCa#0y$g!Pk6cOoQ zXP+i_7jL2X4R`wczsz^)pG%)Md7t7ZN&cz7FYJx?F;3HW!SSKZDSmIy`ud{$QGXQe za$MgO{mITg`$lXf%l~(?ikb!e2iM)g^%tG;ADmjopI-%}Z-3AF>q37V$A;tOoZ2T# z!E3u1Fku8${<2WsN&f%0lzWMLDDgMBTG#~xP^LwNO z#(afxm9n`u#h-hH=DXiWwTMpj&wX&+B8q?YRl!I9L48p=^`C#oULx;L-}S5yC;Z1X zROlUQ`{bMJ+p|&n?}Ym=^dICKFrLb(edh0KaEjuem-)kl{-N@he_CoT#V?mf*ah{+ zdJF3@$NE?OmTW&fk@6Sb4|&qpVgJbhE#IG%{&AlD_ri4UkjTg9(D>eRR-b?9_b4kg ze6B6U9|ZL~+6T*fTtCmLe|{9ZyBEbTCD)Izj*_;Ebttmn)c$F2wwy`vcY4+@6zPom zhid<9lk<}0Ptm_c{*~=xw@)qF9cB2F`Kgrt=b-&5^YtO)L$Z%jX~7AKU+o`Se_UVO zY5Jb&x$6arANG{yhg$zudilGp6#uAne~RgAEEM;tPW|Vnde^E^{JGxttYay{oTWb-of@sMZHl@oRjkq#eX8* zf1&;;o%(-^CJXuant=9O)3vmHJbZ`c|AuvizNPrhq5KT652UkG`xO1_D!Kp0WoW-) z{|V}i(rNxW(ES$a|1I;0aycl!pELhl`|(vie>A}UIi_T`{1VGgqdNFyi0!uvcQfCj z_`iDAHx<9b9VO~5qgrVG|J%H^lH-5xr)ETq5r&?*1rU$f29M$KhZuo zjszvPvpfX@yuf^ga@^=r^|w$?r|6=YuudFum(VD4!kTPanO{ z-|_h-J|jd9O7Uy)ouah8-ST0cu&`_!%DiWt#OM1hbFt^Y^&^xGtes2oUA?O+uDVsd zAb5r8iXXgvz2_}Tf7f4ZjyU5Vdr0f=u3c48w^c!mN6P$j2eV|O_@z38DO!U-{-AuU zZCE^$=NYO83@>E9ac_S;iht}!mcEQX^c1asF#F>;3A~Q`nM=Pj|0$eSR@fh(&lcOm z?B6g#>7DG)$MF@~u^NgpjU7^u`M3K;KBD;7#}xl>a=JnT@Y$6ru2SJAL`+pGralMW0(=qAN;-bf#CTb}mmuM2;^d|12|#>EAd) zNe*V8yitm|uYp7p&(eKQPJF9LETzBkDQmM4eEwJ!)0RtL7Jn_g7^t{hQ{krt@Gs4cu#?J=osBsG3x9OElZg7fh=cuC@wZ2#9jYO|f$KeKHASK0U( zwP}R%XAb}Jq1OxP=P&d#^nWdF>Qc%-f3L&Rm+`l=btruO$BvI&lvy54xki=G*AKI2 zz5~4Fb5k~sg9j|1v7I8$djHGmn=kc+kt}^P$>rynDNO$s5lY7}+W(DlH57AHVE#qD z@rs4JwXH~%Kh-~B|76D0rxgF$smwoH2G>6rU$#%qZ!b=v{9j?^ztSo~ zDQJyv@s>a6|4#Yqrq0|?@w41we)#{uFW=$(F^Ye(EGyssANYUV|D!v_FU0g$TmN_a zygGQ>_Y}V(&gZ2W&d2c z@xVmNKl8Er(IEJt*6-h(2s0@D6u$m_*FgO-eYI^&|L+6!_jB)LZyDcA zhi~q#sJNdmA7CHMSLjD|p1m@Ss(%l${v~&}K>gAF`eBx~8w2&1`HPy?Y)kRm^83f` z!TH(|W*-OqyI*NLD1Lj^zvN1XuN-Ci6ZV(&|Fi0%brgRwYyX?+@XbR^{|$lmLAztZ z{O@er=c)X){dLy9>Jexk^dIFa)89e*h869fO6fn3jgQrOM<}(V`WMqzD_mAl*&zqn zK5xFYFr4B~XZMfFYY|F)Hm=^cd_%q-UQluWR6xdi?nBT{Z^qn+rTArrvGh%cuVgBy z7&`*_$i)l0W*s?6+5dEQ=Kp;nly;K-9{c~5Q&COP$AT;_W&V;9$A4w~fbxId5A2ys z-{5@hSWdkMO>oxNVzwl3m3;C$>Q$NPO);~Dk#rWDbd;WX( z)jbry{xH@)Ooxv)@>7<*LA&7j0j-}Y!|b0+wtr+j*8Y!)Q24wR{+rRR%QAcIPqlw! z{?%C}*HZjKWtjcfW&Y3nm+zIy%J>2EJ1R52HURYxY@fS7U~QirXa%p7^)GXE`z%WT zPK<9>`tSM|HgEI(r2zX+<^1RWJO8;(D{oMIqYvX(37zk?lz7#>M8w$~VPQpPO8pzz znSc6*G??erV!(t@>n8DC+1_kDZ*N99X@PVv`IVddwL2xT&JL*M!Z%O9utcjIe= z(kTA^E$pWc4V{nq9PLzc@zyY^{A|#k)n5c3>qqxr*%V_sQoP9^pP8F)P7GqR+b44QJm>u}qp0$;8mk|THd&N#wosIB`Bse8FMj>2FQ-2} zt#%D{;K+oSiq^kMYHU){@T5vU)6{C$6raOKY>t{8@CCJU?5Nn7YR!fX@a5D}V+Kbj zG_1;I(yXOP3Aw^hsb{8u;hLNqEn*TtisXJ!{V#)fBh1M4~Xr@KkJtg#Z(_1 zAFFylOy;13nAm>S2mLs)Gp%DvbjnDkC^x<^{h;AV!$+pXCB$~MK8jL3Ct4&W!S}cq zFk}~DNI#pm92po{^)|JWpEJil+Y7?l#6kQ_HWq1)(0_I2S} zN>@@%&$P%Fgu4w$NFF9qyc&<~>yfoo=|iUID?(8=BQrK>V028Z`sUaw>cIHn(J6Im zSF!wp%YYN;5JEEj@dW7V&Gw#GnEz2G?tQW&J2C%s$|oXQc+q4;Y@3ch(l@E<1mm%~ST(d|Ig z8)g18P2Z;Ya|VL_PtyFVTz}#@7jjV!|Dfe~iodXw;A^_z=a-(d%x6^xuVeMzMHGHu zKrYIN?6)dY{8hkLQq$*~dy6Riz<^wo)$i+BDgIXAyKMMM_UG6l)$D+PT$G&_FE~f> zwV_~t7{}juqQC!aVgUUP^PfA+f7pQmxhM%|p*U_dU) z&S53WQ+z)EnFlxIuk_|YyE3cRclkf$qI}rl{z8iX1m?dh%_doK#XM;5eNfR{iegR< zd=86TltcS2-9z#D{AwPwhobyRZ=SWm=0amYF3J(dT4$m7x%&#f`RdzNRGHtjA8Y>{ zjquz{2jh?Ga_UQp&*yLRVA$x-=W+7`1L}=(%lbVzDSnwZh5mXE=9nzV`eQrLeZLHA zhX?2Heea|9DL$VcZiPqb+n>)9=LZJV8|8^EwIeD1C-nv27$fR0S%1u5=Fn0KKQJH{ z<#*cT4=H{Wd%n(t)>GIg*gSOQR!PM=-~z}+`DeD8Wc_>RH^DdcR4ZmMzUyvDg&!D@ zi}KRK?B7!Qk7VN;crYtWuw*d4_HRjr9~h8}vflR_7Eyd_em;xjg7gi>=kxUWfdRQF z6aVf*mOp%cJ`ZLPKHkUidHU8|eYgN}QU1N@*=3ae`;Q5}mYTl(O=f$3U_dU)rTIpT zqxhpX2)?y|0gD{WJ|?q0KQJH{<(=?2viz(C<+C+X90`U}ekvtDt99~h8}vTc!J4Jm#Ey4-Cjfd1mGR zKBD-$*9iL?`$hT&E%4W#r;=lPUgyZ^1qXg?+?2 z65f71OkaI$K7}6`kc)EF-o^DOzFAW6)#<{2g7Mu+`4xU(KrYHPHS#r}__t;O|E4IP zgYnHb^C|qmfLxT{r&d`^@t<7|{6EsSkLzkag&!D@i}LBF{p%=xD%jt&v5(2v{J?-* zl*?9i+fVT`v-LrE(E9n>-|IiV>xA$!A{hVeiAz49_#5K{-&Il6FX^pAk{;jXzH^7- z^Yu-5&>??il)tj$(jFB5{cGYEyZ!7F=>O{4{0cuXpxsfnJ^9xHihqfZuVO)W{WtqJ zzxFa&em(-e8vWn+|86dQoznmKB+!2-oxbH>V)q6mGAXVm`K=?EeHKUEYDw{%K>C{h zQU4DM4Bk%hZ?*>i?El~FV^rNs_CL&ODfq^rRO_eDSLyoE#r8nw2L|*Tln0u2=|JiK z`70uZIYICTUiPowAB8*XALyT4w+_Wmh35y_#Q(-G7xB+!ieC@z@6^MB|K>D*{rAjt zrvHWI{aaD|AB%@s1~STv`Ztl;gI@vr*RlPt{`QQ*4-9B`ly%p~knLMj6)}t>LVrF! z+m}BniQSvsu)jZjH^-bpl>TA0LH`-Lbs?F5Evqy8tobnRRf<18i{P6xefi$<|9XTo z{;$~zwx#&i_;RK>&I5Nk&K&KIvO_IB55-@}o*(dF&KLQ&$2oudWBbHi_IZUL7?6uH zk8*e*#ZLpi-bb__E;t+~k6e^zM#lG|_Ak?uHoHdY=3a#2?7^XLC4J|7>? zgA4fSjg#kNbr8bUF?nxhPL>e&!X5|MCfXH9L_~xH% z95OpFAQ$Dw<)$eVpU+R=K?nN>cDgN2-MFf3>u)mn6;7#8&*8ahJ>-5^U)w|toPVw);{jWJC)w+;8590M7o$-G$ zj>l2_hwyyC{kceAS^rTlv$CTeYrk!%ZyjKsfcwYVv*wcZ*OL~){$?_5pN-G5y!|xX zW20dF>~z9oDx3@2|%U zU1?DKw%GoeBlx?m_Jh}da@KLCzq`!6w<$iK-@=0d`lmO~MPqYaFkrqy`CxJy*+0hT zw^*ULZV8zmY#c0dQSL6=>`zL6KEH(r+&@m{qy70j7k*$sF3MRAW@n-JrF%pA_7(NJ z%%5L|U)#R@HulijN)+FkKf{#5{pn;r>W^haF#Z23@VE%YpNaQ(u)mwk$NJZdWb>HV zfdTD;a`MtQ4p96Q?4LQGYDE=%uYdmfwKM;0G&ol_iqGf&@PPZrIh_ZDdZWxzVikG+ z&gcK|pqJ1s>2w|ta#3b_{s;2@W$|RecSHWoD1YmBxdvlP>x9T<>{a^o{Er%?PVz&C>Ek9?Kch94M^i}L=HG_rn4f&MGQMt^tdDhfX^ zAQ$E1f-@>m`u}}P#858_`^fXWFn#rYH57heKrYJ6#SW6~XFh+72d$)TNtuu351&WI z4-CjfS-oh(DU|+v{umF24d1SOyEFTx0TiFlAG3n0TOyeLcKoQ;=k8McGdBg^$RzsD z<#}Xie>;BFvwM0|d~1FhyMzn$m-%RaJAP!NLSraCpP$Bq`5*a1X2*t8d_F&o2ep)L z$&BjXcga6LP<%c=jR*Zd@(=yCpeDuV^V4{6|4074uf~((EBO309<AGpeX`(azFQQ(EG!>@`}fKG1olV)eUnS;N3wrdE};DD zSRS(dW6gi#k;>@&f4cMF_*^&)$VEA0#p?T%{u`kFHCBoGOP*(k`By!hMd1eq zT8H(m!17IryY(E!-(3RoZ(^zyQ|1q1`OEk!lcHZ|^Z3|-A)9oa`z1S);+-2o+=Ze-Lz8&bF-%TuZkFtLP+Ghr>Kl-Qgv?8l$ z*a1P-|D{vWhbjJ09Df4ka}JHCZ=n8KSS5uY7-aq*XY}VOKA*qMgI-qWA|U^w|MPj= z{JRbfyo%Uaq`JoZnKWxq4W?ZeD&hY_!^dCNtn;#ft{SSVe zyo=Jm42*BlV?_OuL-WsHPW!Jeoqf9n#pm)?7)4+DSix_pKOI; zzW(p6UoijbtbFDN2AN;H)Eb@Q??L^ce$1iy+Xwx}{DbMw4h%AXXV|MNC_bOxZiVu? zC4%w!Ja=oZyZE*u^M~xLPqzOL3>JL#cB&8Go4=g)zqKeg<7Gpxh(n5=%`2L_pc_q|$;DE`DxMGS4Wum1${wQyGcvjc<7U-xtWHz|J0 zI7nY}ycIQv=5K$jzs!X6h z|EN_L?eiR(zy6;5^@!y!c3_bCdp7?-KEI2F@gZ6QZJ#%1Gh$eTqTgrb4?8f({QNr} zknP(yuzt5mUpGrzeqfOK*?uVZ4`rXvq5d-N`T9>_`J)YBGMz;S?v-#&dxV8%ak@?s@SF^DG0d`=J`H{;fOrrF+*6(1Ew2HbF zHNAB__*xzqWPaP&!{qo4zJ3P}h7F&u<6#|e0hzyO{I}mw`u_{}zuGjBe|akNE9M2x zYx!B-Oi#>n=Jb-=d++7E*tn#U;p)uSSYnkdp&@V)s9 z{a>x}jKU8LvVHz3bc=j`#Md{mLM7c2>8*33u(eJw$oz91`~OVo&(}BM0r%qz#^>vt z@B@R)ANNaz3lu-<2E@>W{bl~|BiOYaJpZlR?UgSm{&nnM`ue}||Loc}6UATAR@h(v zNu;l=Kh`fwF=iWnK#=XzH)r$TDE_~YzV2&3c4e|3ki z{$Bnlc1w+YOI!xiKUe9n&nW$0fbvb7De|wdkC*>*TW9H;ZRSh0C_Y~whX)h<-%$O_ z2j6va($l{|u@^2;{JC2!yyE&r*hgL`2h&$$Yvk|)gPgw0@~kAE5AyYQcu*_rmX!I} z{^aZM@B@R)k8jbRY+qUH@32U^4WF;W!w(EHzsL0{9&h>iGEhS*w-dR(K{w#LMhO2De6RoG{e=;qL*WMoIekY?di)9HpShv@apf2OBkPa$Q8F<$ zKOo5bu6@t`O7Tl!`3C#prm{zXzV>;+Vf*bwSh3+0-+fFdq@Nb{8E)C%YoDLXG5@b? z|9p1r8>7klmt${;^i@`h^c8$>`kv{`>aT0;`NGhw))CA;4OTxO%ja9bH^1U7Lq!S3 zcQZaeFv#{d-s*9JvQOoeLVshCNZ(+5Gd`=r4-7K@^C_k0Qv4XWKQarY&sT?KRrrBH z=I?#(7I}X<6#U;f>zlrT_Scy1{J#x_U zPd!K3hp(T-gH}zqq|EnSM~kneg+bPTVy=E<|3K3zB8GZg_>auT@>yeSeqfOKb;l*; zr}XFRbMat+{!Z8FlKG8GeM8(@A{@Wj5e7<=>>(AfU%US*S>-Ht&`26G0f2hq(wNw*)Z~4I6|LV91#kHiIbp+EtG1G4!Qu+_T z@tH}&KEe0~ z4jw-+px!8Nx5zn|;w#WUqZFTHMU~gV8xkx0Q$Jo-;RlAo@B;atojGc<^#Kdv=eYj| zU!TfdHbOD_z9l|7z}r9G_KENMRN7td`U%KESt!%q;*1}O?{R;Z_rGB4*HjEw%shf` zUKod8vEdT&|i0`KXOq%nZKYG#pml&nT)TW5PZ`iUxnX?qO94gGi9GPth`h!1-H*T zt7-e!KrqNQX%E6J{U!U4V0;(B$B}x$_^l=W&{uLE0f%T*7}aK3~s;2iZRhi_@O_)XCAUKBw|8U%y4K%JT1A z!A)=d7Gp#Spa!-N=l3YLg4%!UjmU6_BRn4W>%{(6+`kGXUI5D-luy3hRi5JS%#_KB z60X2?U|)LNKR(z#r^rS5Zuak76n{-F!9~8jZ@m0InEv;#ymXx64^f2vnUpY{$JJrq zVBFUw*glM?H_AoJtCIWUetcczpD?%%+5`6o)uyLfD$D!aAs6L01%G;#(!cT(!N>9p z`9Y<1wLt$FS!PiIir+6x*q_-)#039GKKhMOS_iTas5i>&zi%5t@jv-NaAiK)N0xXI z+ao;)Q+u6VDz1HCre+Q(m%*S+f%KzZ0Hj3h(lKkIe@Aaa* zz~5u1f2YpNw^RJTviYa4y#KnVo$_@^)08>NwXyrr_8eV+FG@Gpx0=@Eav>^Jz{j-Sar?lX!X`HZK0)48IU zkK}U5j(@A&wz3p|7VJ-t%H0gS&w|8WgVwNylZ#B{df?@Y^EjN*5J`U}fvtRGRz^<*&nxa*$y zh2q!p?4KR3^SH>x{j;6gr|S5N^(lU@#RrNpgSm{IGv2+8=o+o$9}~ zTBWX({tY8M`g8Mm?Xz^U^&b7nPXF;U_mTStFWBktpR(UL^`Gm7$H!3mms{(MkJqt& z6#Iwy3T3XM?K@EXO<6qUgB2C^cMTQ!z$1Hz_rdssx`yqf_-_^#d~E+9AEndwPh{f< ziz$BNzk}EZ$_G6R%AulApTQ46yP(Ya+2a3E{L}e8`uo`j^$)g>GjdTbi+sBe#jlq= zeZCPk-ny=xf0}tNMNs@6PlMQ}q40kazROBD$q#M%Ndr zu|B0V>u_&^kDNN)TUzZMgAG?U#s#rJd_vdi|HXw68_&e^#sKq!uST`i&P-^ zus<%A6UdkClY98FUX*?K`bY+|kMe;?M`0iD{hZVFk?wXV+MLq=zQOF%!fT)3Z;A9) zK~XG6W&P1FQ63sLdj-WG%*IE#)8TvChc@|Z&b9^FDE`)4?Ebf9I{J^FX#Enb2hjeg zH_Bn7`){H6k9RZu86VSEwvP(!Hznr;L|YQMC^wAVypQ5fc$3+`RdD@H7`J2RpPzi# zs5QlpXXA5>HeNnoKZ*y{`p?>PzlnYuWws7ygh0Jf{xWg&Hj4k!I)<_n!!=_y4CxrrXRu0sWKlZ2XncJ9z)( zG4L#zFP9I^*M69p@dNr-`T7rTw!bX)uV!@phYz;2ElQ>D{i`euW4-B%`^&2E)6p+c zqD3%WQT}|XL@tWIlZ}scWq_~X4Fg`VM%!g<|Ha6>(0_~ltMQ+(XH&z%6&3Cybm(7I zM6xQ+#0h|Ge|(Sf$ekvaSp8UFFzj!H`*(Kx2SA|5>bbi03eTc^kDXPQiMAyF0&-Dy zR#!fv_#2>oXhC_rdAjuyxhPF`R{J10|Ln>Le*Y4n|IhtvklKyEy_?K&^&;O~$w7)6-dy@V&=IfS<_^VKUS)TEW1=nBc7B!UO-;wm6 znGTn^!KH0*0`eiBPqFngf7~cOAz@K3X3%llu=OQ|cBXG-n zrBk~6N}F?kLGhzL7JT)L&>#8621$P#{_(oydsF;7R|Q}1Cfc*ecWn%jf3bB2Je7+ptk*ir*d57x|w4s?DMCvzyO+P4R0U1pV6!9`;+QKS=z-dD$!#Z$Q6C*);80 z{`?}q|GOan6~V)L&@J=xrlo8DIRnP?{+|H;SCGDXcfrT~3XGjh(Q_{m@&ZEUJ#T+CmpDfo$49x5|EZ9@Jr?k`l=&E`w;Ep2EM0!vq|4Nza5-F@elp#&)05&>!*}wJ7@bvsA;>waE z6o14J!PigfmVMBFT-yZS4fYAkJ3n3fZ{4*!AH|;neD`?4_mn@|fe-0hEbLyo{I#`@ zKB4$?(ErDa^mSDd^?)1rX`p{Zw#0P#`LqA|C&ho}XJH=``HjWzFn$vHJLONl z?L@hw{V4dZp9SBOe{JfQQgbd=rucOq3O?S4V*XNhOMIL1`JHAFA5whtCh*$}{grk? ze>d{W@|Hhqw=?^&q0pXyOGkCxA;`0s)LxG(EgT-4v#BlP$9zfJl+ZGG+r#lH^q zy8`QHBH#6k;5#jUl+86qQvB3=!alfurg1*i`W@NUYtZR_)A0tiZf5c(_s-1u1rxf1>%SV!#z#TB&C~t?zQ_KBucymzmTSwm z6o1JzcHiv7$M%D9K4(I(#0sh&7@!dXrPx*61;@hOJ{>;r86u&vQ|C?U> zV?T;p=G*wE-g)kIivI=FznHFSKaqcpqoL`)bxEhm6u&#u-^KJtzr_6O`cv>d?H`-_ zmrqu|K=yCk+|0^OA3o+^^_axB>3@ivevm(Z4@lp^OnB#--(qEE+0Oov+KCTk4XRirH$(pe|{QZpDOJB%kbf2 z{#8#%e4F-X-rdv5^5xvE%9yqGp(dMD`o#7Ka2LK$L?Fj{kwWf@KvAo13q)%?G0>~qny#cb8d>C zf3!az^OsxZhs{s-{^;=32?-ScS+>81!R&+jd*o?Jf7U)pPydHcPY9d zJm+zT$k%)A{hi_${zLH1GP-pg%wNV?p}(hmw#mN>*F4*i;%`|l_-a{yzUy3Q{1ZPM zI7soUfc@Q9{rT#7!S}S^Y}ya5U-Bsw|84Lex1_%t_@4Hy&HYiswCoQk{^o+>{z5A! z^mnZh(zqb>_wa4*A1l7KvpL281jaWa-+*<_To*&*uNXQf55+%({hy#e`j2`^;@j9~ z&5tJ8KhqA&H?$A*U%7$rxql3+m~Q)XdcvIsl>T=?e?!vWxGePd@bjjBf7-D7wzd?% zKIAVP$EaaH-xb04OjGXHPkKk7fB@ef_CT!Z4j349!{>TU)7pTJMV z{%xE7vDh>39HaPOoC#BSK)&(1;2T$k{!aPLHmp`D{_{|OAs_26*ENZ6Q-8&jIZO6G ze2L``jOWGvN%gwKx2eBQeY}B>-wUW;%5C+x5BB4_Wq!o!bnD;N;n&Vk{AQU%`GfXR zX9@o?Zbk=pRPDz6b38Z)o}_&gfZ_(!Uw_KaO)l`?zikei}R< zDV#0+=Yy@M?Wsue!9S6Y?JM<;#8=YNEuZJjnE4#VkAn7(IZN;`|GI&%WB*=Q;dI+q z-}h=VmEs$Jiu`5l9k1|!`Wtt}^-L_^So<)&=URBlMSD3!Np#Qv+XrH_8fqfi4 zKZ@NuQKR_LSU&U?e661FAN9WAJMBMQ{ckJs{1$U z(Lv~MJP1wyH?*eY_<;hjJ{Y!3lnF3S;bCa};RUw8NZCJGvJZ|!Q6GiIf0Vt|c#7Yh z-5>FQ`n$V{=TzaRTy_J0x@zs zCZ)e@AAOqOt4~AYA76c?3&rmSL(e@C*vo+kLNFo|C{{pTZ>(k_zi&;3}wf&Th_!B@jW;}>W(vkhgROfY^F?XTSu ze0PZa&mZhrMe%#G{#)PtrQHMjX9`XKGi&mmqxcWj`SZ=EVE>5F_)+mqTT%SVQu*c? z|C2d1{-G-guTcEneEvS~zk>9|{#$p5{D-c>Z&Ca=vW2nrJG^|X-;FGi{;YkT-t)VK zw=$9TPh|SLeEInNC9A}@d47HV_`x_ze={tTpa1BYbnCsEEi``Kdbi2(MQvC3`;Qyi z=k5^sdy5@yMCqR!=0jlms_-1%$R3*hTL(m+rua9Ye*^j2T+z;Q<&gL`&mUu6-t-&A zul=3BebnrNujUMmKOw0G*+27^)V^}NQbl@)$j?;v@M=o`k0ib;TJVirq3K^IM~irh zKTN8>Twj9ypON@B{{NxclN^7t3-5oSd@!qsdRNUY@xzUD^Y86Hmd>K|A1L|1(n-wc zaLascW_Wt#L-CQr$ol06ss7cL3;P&(B>mNy={_G%`})ZOO8;$ee}VpQbP?@zS6+#4 zQ@-^%xRM;-byV^nHK%AFs*w`kM*n8V`i-LWzbo@giSo@Y^KJBh=|;(4DgGh${KfDo zpYi_G$S3J<E_?0`q5!U+#Gk-+(&)kLkQx%?@8kUzu++{;l?e0tG1k zEV%zg{jq*DN=f?LjPI(ne+K#dWfHspQgt?d3G9#ekFL^!?|J@ZGybP~tG~(T7aueK zaryA^{!uL>@omOetSo-(UCKTmGW`u-K92v9`8Ln*ro6t5>|Z+1$G7elKwXQ zfA)2oPwD>|OJ6nBYky2%S2>AqGyW%EyJc4>ehb$Aary8)?Vs`z-)8(k>&E-DQv6fA zeDmRZ%Fz({6$%X^$8X$be76rD{nV%+>2G8Iod=4M_owT*{l|OlZ$Lh9Rh0NP{`u)= z4F*v5Spw}JIAQSF#oDm zLgPn%cAXrbu$q@|K77o-ZkZpE{`{S!m&)jr{%^DX0mFxn`PZl_>2EWBW6R-6r2p?> z{_pnTWBzqj3yr@!b7AuS`Z&*D6TSAw{Hs=%_%`X==gdj6eY=g@--nO+z%BD_{IkpE z=cZHkzX$Dq9CwT9Yt#_>d+JA<@_A}>wpfaP4W6$dAEm3N#J4Hmekfay&wmfN|GH?3 z_K9*wXRRP_J6C-{@ICFfyy=ghncHa+d4H63tKhpNzB@$zAH55IOzGc#o#2}i->4Ou z{yhrDJf!${V1A_w##MX#zqa6e%4eJWwLZ%Yvi`#PFRqK?zSQIYFADw?d_FGCf5EYo zIR10X@eVnu^*8wb;97g{`WtMhyW+dPF|I$4d#G4W!2ZenS|`5QPVxEvw(ibeeh$rl z{|MYak?(D*cd3Z@0Ga#3+ChvTus%t_NvwRB5qy0Temx%K^#|CG^b6UZ8T=VvU*)>A zzDlEZto&Ta`hTEa*Pwn>AvWLdga?_Ab{C&2O6#f%Q~3HGt8u(Rwb|B3g>N$Zd>XjE z2TKMk1mny4yU%WXov+Uz>tCMjzo69!T%Q5s^Zi12ko6a5z5k0oe76Z@|9-8RebxuJ zKVR>g2bqudL78vQus)1m3$KXlKjdZWdm9_P>$mXry?Icr|B9mT5cvS_JCvT42aZgL zsaQEBKDk=6;Ryrd231kTo7kk3xPfso(J8TTCMG^EHX)^5?C2JwVg^Si42tcL%)UG_ zE+M66ol0uO-hKGXdR5feq@>|Vm6YC#ks7a_8&exzLM`3>#Ndt)UkH(S~VTQYrR0gU-N37m=rx|Sah|H z!(T}l8aq06K>N6q*re$A$pJ*taOtW>!8FnJJY&VZ~W~s*u(5 zbu$PbZYKlsF-Dx%{kuXGf9*(C{*;TruPG|56W}=kFCHe*(iW;UH?yI5REu(0cR0Zov zoxRsDs$MX>YPYuZ^OXKw-wadCTVDHUZap9_Kf$lh172Ue^Zs8`aA^gK-=Ht!|Lf%& z8RU;}^-81o`V_{$x7 z%f%G71)Jio#P(rh?@jhz*1uBcG0m9%S!Df})nxpK!TIjSjCb41H?`u5&feqi#OsVX zKT%`lL*Xiax9^Sj;Kn@ukHzfL|+p4%()o#&a^ z+1Y7J@&6qjzvy?gFn;vnkJ7QAW5f&n_)ou_sk{C@NYAgad!!0E3qpv;?v^>$R%Kk| zBsHIAWr_O^#y60!(5LP{@Q<$i+?Pr9C&iCoere%loCY`O7o`8FcFps3={G*0a?z8| zTv;Lz57KYk8J}+SPat0C3x3P{Ru}&c@=uiF5A%;bSo$Z(LA=m|7QMpHA4zEc)G(<2 z@9o8(xm~)Yt@2LvDYdV~eOI~fL~fiH=QkYe+t}v_o&T$F|7{=7|ISwyeiEm_h5v*4 zx0jwSr1U3TAFrqS)9#xp-ruO!>3^+{|9w@i5HI`!{nb(b@cmJOf4V5o$L5iZlYYQ+ z3(zjaF*M?Z9?3t|5G zch*ORy74~j_MEqeI>4v`W&W7`J@mH-HUw*J(HOgc3G+AD79G3oH?mz2U zUHpSb2I5!G>BV{{_zOBL{?+>$zO9S@`at|xCjpIkp~K>TCbuQ`za^Ys-wc=OM-7VW z6a0>2*n@nA-=Qz~Y_qofXT|ofmUSrNg}>2XjN`EM-~ZZq^>pdKN|hg+zlb04Mz+ZM z-h7D~NE8siuSMp*Kl;WYo2maHYh9py`{pWoHdktf`26vdxb`id7U=U~jrJDagI}PV zjET0>UB6!GP5rCx{=>5V#Qwu=-BbyI`of&2(yzvc5ij(+*Eiw)X%q7I$_*4h?LUm` zdoX_N`(%~K_~AcXXP_@@^W*)x>sL1#pN-P~!{_}V?-a3*kxG6{o%gA<5Ag;4-)7sF z+jRbqQv1ZIpCO8h*#C*`+i3N^LcGyOIj_)eWue!wS!izrLzaOJ(Kjhp^?T4|x)ck1SCviHs zPcZxh{q6K$c2W6H*x%J$jS?WE8?NF95&Gm|Db&tR6T|W-Ju`#e7h?Rl$ZNXvxBY~^ zUx-*JFGAA)M8o*}jWdo8A`5Tdql>?U#;0sw{DxY`9Q=KG@wfYU$Zxv%zo7YJ#yz;Y zP=8oR{MoAA2!99p=e=>f_WrJ4b2`6zXU4vcb=a{t)C=x6=79KvIdI|dR@HRn|M>2d zZ%1W_EK`4fXFlInI9ppKl>hirLC@X2eQ7JY|EeCm|2lgq#orY1d+7^4w|Le}%KLv) zW9Jv_0OyZ>!+xUrA>sb3COv=L$<7c%s2|mTejO%%*qglbHQLgvPoqwj>ns1iKW6On&spbD!>~*l8IGFyly$uHH(tpkQR6n%I5d3?8`eXeYw`L0SY9UtM zAMc+SSiQL9zJ()o>EB7?kI}om^cz20!JoRv!Sn~eG=JP()phajnM&u^DldL3$@qi* zne)Zu#XA37LH++`hcf(gTc$9sN%W7bEj%kGemU<1N`FHC(u`gde@Ddcl~1QbeEt0D zM6dktH6R%O5$l&eq>Fzor@s^8PrSa^w@~`0r;A~?#q+$B%U92S-e?M)UkUw(<`49{ zwVwaQ0W0`Z_qdx?cK!Lnsqa6p%iq#>sodpw^;@Kp@n5>HM@?P)TTQxu_od$niGRVU zveW-GDk+?L zuYY*uwejcc7r(|IdnuBsxIO#5F1q&HC)EG%Q2hK{XMg-B42*9N!arf{!`VxI8Lx}~ zCyL)Z?thQ}p*z}Iy7({3p!8QF{$TrI*2C{sr}jfe@cv~lJ>S9Ul_8ou5#N5s^~>r? z&lNtHEsmv2uD|_^@(KO<(rZho{!h5SXj+Y~Uo`%R`wNUewngFjZl3!J_hZJEMe>tz z-oTV^R4g`H*rlh@esXbfK@R`xT9jLOX>K8n80PuL3A-F;c;6UYIBt6G*)*n>duHw> zGjfZHY2@l6En-@3-lXEmJbc#I$Ss;OJJ%bl%%z`>nZ66pjxYIUGcZosu`McuIbrc5IO#6Fi94SKSOApY7Ml;8DUU z1w-@mr_LxiGq-5QG_uiiX?KGLXs6^&^1s(Zy%$Q!pEhCOI2tsZX7uaC6#l+D$jjq} z@`KoDt$R3_hL`&qMKdlMSUgiR)|#ueW#+`ZiPG=w$LCMT9iMYj9&7TuI(FY3oOf#8 z#Qcsl0xCyeM~|B}BbSDbXVN$)-WxTmAeW3mxrKh|rZ1Z4o{xRy5wfN+r^^e#UDVIY z@8CLf^gr?S(%RSJk5SBn8eHg-`^GfX@gG)vk@w&72llC6PsiV@_|AXKPrdl1>va61 zRsW5Z|KHl*zg5kxI{w(jGUv>R^W7KwCdaq)SJI3czVETq3|BU7psy`U6C&M^B7dIn zANdYlz2x4VI)2{I@~6&hSx^4v^1XIw0bR$UzJ7>vEjiAH>sSIAaS)bV-zo&)9uB=D8}JdV$Tc9c7g zPsd>aeuqBo!iU%E_!EXI`>*i(->ZKM`cT>ylmADzbfx`dI$lcU@!XcKB+GAd%gA&c ze>1gz-B9c=e~El?KG{kFex$IaU#C)ywFLH;HIKQfH$CkYGSLVsSR%F8-_p{?w{vh4hi z&LKVt_+lQhSwaH1(48(>aHEcYz2ZCNgNzSV^6CkYGSLZ5ZZK<)LH z=l5`ks(DXg<{p4%M=YOLWT@OgY z0=Up=KOdT_&% zM>>=LNx}lS(4%j@`+FUq=ZA5?ytAI$?m0|NZweg6L++56<&jLLZ~8$$Dq85QeWk9)eG}|L)w-*remn zr}?iOBEw5u9pv-zg<7@uA{Bw+zu=y_v~*{|bwPFMafhaaV~#sa=IkjfuPSO6Eg--eP^ zI{pB~kDOVy{niP@BLUx_ykH3n;6jhLi+AbxJU^F%@rC8;u=3CIbXmaXdAjagUH4as z|GI=-d&*5tC!fBV;_f(3koUbBP+aG@{mzAj(KA3@`TZWt`vA6>qS?|+(2 z^RgiuP0b= z{jnO<6D(l?c0&)n=;0C_f5{k`|IWqI|2&V@KaPXzpRvE5V2SZdiBA$1z=dwLW6a+= z{yx?IjXW&*JkQq8Ka?4N{rN04{y15FN$Uxwj(_`EG6p+SwtpsmA3u)eG>_-;yb1sH zFj@ZO4}O@U<9B{v#$YUy`~r&KZ$JDW=~`2;#QaaMEt0SRze7Lz$v|!U=U!F*oO1X! zu~?YT&v|y}HA`3k7y88K`fAJnHpMr#%KWeBJiny*uReK_&i`+&k}*WSv)mW|75~8O zgV*c$U&>}b?N3tT@|Ry9U;c(u`SZ`ysciZCbmjI1I{x-G%Kj|r|7~x_^UrA|g!y2a z5KmJ_AjyYyXuR<_>JOyXEMWop4qf_J+Cw`281#Q!DDCI@k-GAab8g|-%AJ3Ae0qYm z|LqRd{*T@w&%Yo)=7VC$AK4pemL?+qws+;;8u9ZUlC}TL-y62m*}qV=zr}cIe;D5(K1*f!k90cg zVIBWBnjgWzF2{axu)ScZEPwpvrwrBcN2&Io7%Q*;VfLHPsE}u)6;g zC&>0s7~lB2ymrj{So2o~5$<=)(Tm`_D7)k@@c&BkezVPkjA@ z``zfT?FCC7HF@mz-n>cq>%{-4_n>QEJ^u}z{oqGll=**oU>@`-1LNx(q{o@sL9m1c zaG_V+)vm3Mzme8gaj-v<^)Js8*VVsbP6O)iX&~-;L0`M?qqU^n!~U*uh^><$8Y|)jKNm>Cf`(xOP_cD!}dr1pz-cc$bJ$| zkMVEC&%cFtyxC93-#JzCjV$T^->Zc1jgG=3sVsj^X1lj^{1fDIKw&HX=~;Td*xpgF zRF;2!VWYEj{O=bl`>RX)FAw2IdgstQ`q$ruL4%{9n;9{@DGI<{!#E^pvxjeWJ7fgtd}y z|Hu5)fA70l$FDL;@oUKZm-c(--wv8_Xx~rm{aMuBC+U6)wg1*t{QUd!pK5EeJ zTi`;s9v!kYN2&njUZOLmBbM$=bi) z9;+Sy;q`qSux_xdb$-0oFSyQ6{yOnL{0`k_$3H!F_VfBb4(1P*t1Ge&kkQnm+9C-H;6ndA=AuF!zo*K7`!>ss z>Z?HiC-*;CwpaeS|G}XC7n}o0^E=kn_WvEWWem=Z^8O>pKbDp<_}85s^=#$JpY#00 zPj&V`LhCa*Sn2ZqD{oZ%_4n4l;(0fd%V9ffnfk>4@H=#ezn49);}`6gzqNmm`ESvo zKmTL>{cEZThh)w&`a(*&aPFaFlCS_Sw5a?3D?0w#Cu9uK8uQ&37XA10G5%mYP))Er zP7(6>gV;c9mXH80^nl$TX~%z7sP<jAzZ|e6q?!Szu>I#;y050?k*`?a? zuO%PK7|cwW|3Q9QVEoznJU%_i@)ykhWc`z6#+N^o|Hzg$f(7N@*wjX_gaz0Q zy|Bli**ZS2@8y7X!;$xuRa$3EGKu=1 zcsvs4WU}^8SeAc|j{nZX(thJeS^gy7%l~6LrMTB08zgedK{BsVr7A!db>_1uymaqUW^wVdgf2QL<@u%cF<=Aii)|U1i^X!k(YnHG8 zF7&ZGyH3;b55WGX$}a!WoHl|b=6`x^l7t0tp%>mi_68k4vQXL|saOvh&|2U$emfg3De7%HMAT^0f1RpL|;7|F*L8 zKk_@(w@^qM6sz;5UV-dv!a|90#YmH)5kufIoKOZ`7I-_ZV->?fHthK?UhBWyb* z`V@c*Z5O|)U4QWVd6I8cFT4H`*V4I0g8CS!IceFo@t6K>c+z&*qY9(000=Uo*uen(}{&?||G6w5z>3{z3Z-1lxhwDA&f8aP- ze#d?7Qg!w(SMv|-XJz>xaIBthMLP=?@a;XF1xr|f-OxQ=9-!@iKfRmGf1|IoKaB5m z=ptCaw>owaEMWm$=pWb3(DHeI6b`n!{#Rt56wZTW`Rng|Q9J)JZ>r=wb!7RMe6Rlf z|GNJzF8r#xF8`Z8D*5Jp(*I%mtXPyhmh$#lfj{7P=sm_!U3C1&$MP5EC9)t&zGwe; zL*nl@T3>WJp9H$7y^XqtbxQsCW5gfS$am<|&)E8v z&VF0vztvlx|2>Dt^SYft{a>9ce*d$f+l$xf_{(NX|J#3;xF!Vc54L{}WyGf^Xg7{w zH}p@VJ2uwwN7DW`93tmmL&qQ9Qt>-l zTK@Wgy_L0p*Sc+`I{x3&Wa5otz5PYU$@@Ly=yY25kS=&UgzdMQq|^GhbdBZmE!YiR z)VZE^{@ov{{*AokKmWb@XN4O76Ma$z%MO|bQJMSCJMQ`5MV+#hTHA>W}VPnmSS&VF0f zzeXp^jU~wc|0@3vE$^>gf5rP>aWH?eTrK&D{ZG6P7E5{iV7ZadKiG}qi=TPxAlaW# z{~u9Z@$Z)RA3^)?oavQ!b3&@fe#twIj;C`XB!CaS=hx-$>-^tnm5jjnx5RzH`*8W& zzx62s|MfnD`@gzYy#6qa#( zz{mYgv}TrI!T5)$oh4ieNdUOexlh+>qqCo%|H8ri*m8A{{|(PS*hKTqn`F7d{K)L| z*fr4ok>($`&AzSCCn?J89S zOIU#2(EBr6r|9hG{r5OvUq8wB`oB^C*rinelc4@_=rv1N02lgT%57_OeAIu~myh@1 z^XEVK#sk#;AOYW`*DPTHT}p#CXqpFQ4dFD!ryy{EskTE}0O zt?Hj|Wc~;Fr&0uw_TKd-pQ>Dcc}$i+`^$^9^RMnv*Wc)W%-@pv%3_`U&o7o17<;At zSGnciD}TKI65A_IAV-iiA^Z7y?DVVZO0xD(=zNN{|C9G8FO%V{^RBKCv2ZYr%Nlr65J=zO}yqG{0?2T{=CsT|MUKg9E^jOtHb!b zPa{hLe`474+~m{SPRX4%E#G}^Tf!5+{Eu*Rp8%(S-kW;5+eGcYee|R-xiRA8+;OyB zU(U#BQ~3E}@!KjE&nht5tNr<=(GHC{h4c=6i=GM>*jAA??$dL4f55JB8w3u@{hu}n ztmAsyyU$L&Ye`Sq-!fr;^~>q}uv?~z#wTCy{=!kui%@5+fNo6v1RSV|?gosTtHT5p z_Z*@ZZt0vCFTArasg45Vus)stZ%$p87!_bqgMLGu&sR;l9E zmz4b>{8t~1=g0QR3rRqbf81C5o9Ot5x}*rBwZ}Jy>g^BmSN=}+FHPS5abF)*PsguG z{*U<8P<^VWOR= zMLJ96e+ZxVt>J+3hx<19ZsPwSe|6DC&*=E?x1#cYY^pf-X2~~)>FqyP-9CW-Qf;bJ zY2U)I5ad@CFE!Wko!cq@yQGRA&QSJ;@PFtpN#L(~mi)gsdH&qPTaVZAkKaP}`}pP= zdi#TXaft3|Z%Uq@R`r@8I{y3fDF1zYCrSRG8!Kl2r_OI{bo{z^(D~oh^S?PfIr|5_ zP`3TZCtRPWY|7e5{Dvqmczzu3Pvaa)7udfzxIYD#Gk<#=^}f3|&FZFzEaI9fyTr{qxA{6Yn5?Li^(kY9B_rr;5ka^Wn^q`tpzG z_Q9_!&ndh72l<&}2XOgM;75pW`}j_h{I$fdNd4F2>GL}4_$B+v{$8mf^X1E3SDK^r z_T%|`u>ZIU)<4(m%GI_%-f2eluaEB}$?s84{S)+m*JrPpKV4<34ykpm~w7+-lO*4wdD7OQIORhD&YTaB^?&&`0vvG zkP#o>JUco2r|~`+6=?tT_%}^^{%tqNkHklCLiqR`!Ty4=YJf_!jcH~dji|G#?w-|y@A4~~#r_#e-wO;#uC|9ZX89HrxLNss5l&hm6c?XN3- z(>~vFeDnD7hvz}!IgOF+^2Qh1nYhR`xuX0RkN@~_o&Bd*iMQWwVafPg%kmz%Kx(81 zx}y9SjvSh$<6ksN@>8h>;DG0mf`jAW^GWfXQujxif4ENI{A>SEl~1YuOSu2w{jton z3=z3m)-(TK`(p*KKh5qPuuNC~K64zkKL(|WZBZI{q+njCum5@9EDo^C8Au1|(r4}m zfq(cO?0@LnP7`$Y^Zr<7dWOLBL4*5K;X03d;L7fgb@q>ABE+ZBb{TO0z4~)%f1k!9 zg0lX{b3{9zZ22>e@s!l|1obM z$i;DxUvI(Omv#I$M^pQc_!%{>bbo4&)AM=X77obQmz&ddoAxaU3qk&jyBdKe4Ovl#!<4~`!M@D_XlS=TS=&_pU!?axubbxp|4*m;FL$0!0$IKR zE_BHYuivcW&!+t`BBMRNIX*f5^J^*pE71SnXZtJK_V-&)Q2zV)PLliwuAqJ!o~INN zU^nz*CzbBk+5a;2e@A_Mb3$_V-`28X_TSX+-gP?uH?%(9INS5TlO(^Q{SR%%_v@zP ze@Xq15g*^oP0s#`_CI7d`0IHc|NB{VA2}vfd{Rf&KTZfA&o4&#pZ6U18-<_$$am;V zjy$oJj(^t!RQ@hX70(@`>c5G4`=6tIn>c`f(|Rg5t-|^E9_pWiotyFaL&Eic&oZ+A zPMZ5PQnquL!+%J3SpP4shats3Ha`;l69+waG4T`Xzqwx%pXNE*b>_KIMJ7r6?YHN< z$Fcga>f3_rzwc^GKOlX{@>A?*ZqxDi()HJ%d6&j9mK&8_U2>yuN&U9!uSu`7$!(!k zmjCJThc4CeAEW$_5Fhr(uJ1bo_N)3oSw8#&-M{`o?tf3{|H-2MM>{uF4ER&_KRA>1 zF7&{dXGkr+V!_*x6ZmHac6@ z3%DP{I6-;$AMiW$-d(Fs)7dXRr2L-eB9?N9shXZ+djUNBp>rO6Ts>XaG{@?I;%*> zH^~1{AK#pooc)F5{|L9mR3`=3*}{LS>)pCrGcpER)O~ayT9CUm#+McUPJNt_)e1i z@4HuwU%ca@4m$p;nbiIve%5eV|C$AQ`?E~f{FwcdC|?}fCn+qz@6d;L-CwHXpZ)~- z|5}glB+HMjQ`e^eXhTcyh*v=ICGgP$30qGBGJKZQ#h^>!r z&{hbRkN~@(7q960gwFn5$5KA}?Y|^B|3@FHSpJ{4UF^{DC)4>K_3_QZfcA^yWh() zx&HO$ZTk1;usZqnN1?qrY&s4Lup9c13z}}#*;Gx`eJkzw z>)RhtKKl6PjO6%F9!c%CgURRrf!c5G)Y)HaG4XFo6${Y*4dKh)IPdyX(fa?~Nq>&k z@mJFNw8%ZFVpM-s|6i)NpVtj?K)J$oSiYP1ANdZQyW(3O|7#qafAIa?DRDpE6v98N zkxZYnP^K^LN16kadwld%%Bcskh#y=ZznRvj8tc9JKbUCXnk08W2(qU{WnK%Kd&3(fco#N5p@0CA720C{D*$1`#x^}CiFk9wq+A=g=QD-F1}C{@vY)|7facp04_TFW1}O{8yPzu%EAg z#+B6mo2*~AGIdIUF@0RYn4;psDS4C5CpBYyu`%b0zQ&ZIQMrZFjf?X0r}Z`RXA~P# z@^j8Eq-86GeT|9vh116s(@SI0l)Rjw`I836-nc^KX-SjEJZ@_4z~Y(4`24)$ z+?mBW1Eub3j5pksH*}mwWcskMa7ID#nYl&Ac>1B?uD$7NOvum6m2bq-Nh@W_4Dc)T z1n2O0oqtC+CI9-?x7b%m|Ek+bx2?q>tZy+CmG?z7nxu)n)WmW$q);EN#GXNL5(-rgY)$xZd zCVqQweTiY|?Z^5O@DEb~HEG0wmgWnwxqSP7Uw7yw9sjp!bbaaQ@$Dq}1+)(|&u@-B zk2v7};Gt1-(4N|w>&x$N(fv&aulyP%(*EG@d3_7t_rsreL~~39X-BXLB2zL``bi5(h1#q)p+gtmimv;`QI&798~MejCuO}=XD1h4EI0X z|Fxj|8(Q~}Ls`$~VKCsj2EDvyv&NMF3H>XjJioLD&n`-Fqrg1+UMfO+rA!azm!N%( z@rAH?MxIAyMD2D@H)^M+XRHgfFG{J~#=bs7Fqf@>zjjdq{QZho(cqrJ#-gCFQpJnk$OetENN+zs7mkDB{uctz1;q2%)Y~zIau5B$eKUIzKjHlU>SMZo zo|Z}_UwRtz%W(e3<`uTH+_=&Hg+@IP1FIL{LVx@3MxNi4z|W-mH&O;a+DP{6LW2t( z#)sdbC$w##U0=NXB(i@5^>3;9P4-oK|6_iWq3o-fPuJi3(?slfGyw;I3*G7Sbyalv z|LjD%{`&aF;^g=xt*JavyK_e$`hADQ`X5~Ay6u1It>gd7*Pk%YsM_Ub>b2ZP^--Ozh)nAuim|3j-ZfrsQl6VqLD|+ z`#a+rX+OBoBe749;?HbJd>Y@{o=y2c=?DgyTJPQbe=g`o{!iN;xc;6>{d=~ZA$VSo z|N4jZ8@R@t*H!XxjO!ncJ(7GC=6dqvK!5{`c|iB>AvEY@8o< zL-$|shW7q<mT@u!)cHbvuNQ@pbSIQ+>eganu80d|dy#{QAIh@_$16`@&^({?jIp9KXN*!Tp`s zRaY2Ubp^)rEjqU87~?Ar9b0r94B+DZo=*>7QoCx^)ZqBSNnHQjAI`U)CjNxlF@BVe zBXkVD=@6fe%L|S~-oXd#6 zf!0@avfP+al9}h9XTs+j&!@)qro88nfD8TOOUqJpe186k*|dCqWuJqh+$HYlf8++ln8Ii1{h>ChWoZvYATzFpg{+{CdK1BV+BOI{xe@s9c}x@r|3y z%Kt=ul=$MTL_X39-RY>E+V$n@d48jBeA`xh_#JwIvdB;x`vR6%|AQ}{Ty~bO{xRwP zJG#Of-!_)(^B?2e;G_IwKX#R@m;x6%dZ_V_I{sfYzHYBe6%*C?k{!b5eMvbO?tdY$ zz6tw*s<&ebTPD zf4fhi^KY70{%pk$M#JMvDfA}n!T3^S4LyhBPO5(jlHP}{cv?|TQEuU-xrJqH⪙5 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�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 z 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

    kvg5ON0ddt&$DNxl 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:wXPI?nrXbIVN`nPsswlG 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%0Atg|gt|W|qEy&zh|YzX31d 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�g1OFbIeZx`dlft+ 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

    ?zc^D!kAP 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 z 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 z%0A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 z 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

    `rc|E1c4N3hqOAT{z{3F8DZQ{mD#Q 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Ⓢ<+N}N_ba0sQAAI(M;`3n|`Uf7{uh4O-V6kv!_D;g8v7gMNJbe>9? z>E&w?>N2u9gj$S92xcjsl@S$cQ_}f4l2V?B;tT)6UX$?rKJ!qhnZl`Yos}%ddSxFA z@ZKWJrw~8#c0+(A83b4oRiPGv56c0n)}eUt2(4bvL%15$v&hQwMg$`8`@{ z88aRio$<3!M8>x|W|a6O%(wNvs0#lYnQvyie1_Q=*NA(PJtw$Na78;5k$ASsTfw_f zYqly6B@aa1O^V`Ah}wo5wuPeO0{JLvj{K*O->cd~XDTQrW~EPqx$!nTO|N zLK26M&r=19a#{zfP&w70sNg#!k(OF{qq+b2-l+CD6pU!sFF)5D}%`Eeb zqL#?GhGR_03ae16^xu=__K$`GaPxjP8JuY+gt}w=H=gYS?qd1uKl1>e-Yu&9RF)5} zT!v5l6RxbqO*kKMC0Wi)I3oEu1f zW4WKm&a4KC6m%}!6toi&uG5T9g~hD9of>}hzP-Q+jM@nhq-ubWCZMRr%6juZs2YqS z{M!Zpi1?F*Cm8t=O{eN&xI3Kw9ZqeDs?n9*PE^T1Az&%% z5A)gr`KSnZ@g5RT==V$-3!0}EK%p&}iGoljz=s6^PW{o7D+&wtl0PU29=ZkY@o;VJ zn>`7;v4#qGOTB0k7NIYD33$_I)L$wJ3qmcRq~V0PD!q?Z9m_(z;-3J&2se?yFT}F~ zzS|Fx^7V-LV%7RQQ-g?M8) z5$cWtPPACxZjzU;H%q1hl?k4R7G|PnkvICWAc1%rbb4&j5Y4Ebe}YR3ZX$8vM}^DV zSSUv>zDFFr^OVyFt-u^?g;wS?WzK&OhU=pdckGRy%~o(qD_|?cUi} z2o|BA`=Zebzp_WgTcL>d=rXplYK2F7s#egEo__-QZrnsd&W{4Q@UMPgmjZv1lxm!d z0`QrQ;I}cm1wIzEjxMSw{OKnX{5%04lNx*V$vpr*n3XkzRec|${EygIfvQ;mmwy6V zHeok&KtJ%KqUtyQwe-VS>El@;gHo z=|cXIq?#PlQFh0fNhsp4z(QtgNm|rZ!#r#ka#N)UcbIM2R!SxSh}=lCMWDWj5I($9 zHAZhK+Gt`Nr$>U>Drpi+-d27lB66MC96^MU?9L?gFm_(ZXXthUW+|X2jy36og^5BZ z>`as^dRbiA>a~1^bx=mqW7fqZS2#Oy<=o(8X%a9us?f7uixSa=02Ajw?E!~yeL19+ z0?qNq>%5Uc>0bR0X@COKN&nu_0^oXQ#qz~SkZgPSR%%Z}?X8%_5w{ooKq>n>0W-hM z=9h8Cm#YN@gW?r$v!t#QYvAZ+Szx?r_|89}pbrliNX!hE#eoD2OplXuXNl(Gv{9u<;3OzIYf(o zs^}g(^*c`GzGRe`tzdb0sac{sQHha}&0|WO&l0aPN<2rE_`-RnHL-tfV(hMC&J&HC z#tAU@7MZZr9ww(9ImJHQ%GGnAjgfm;IQQ&Cxz#qi7#u#i8jw6CVV3jmZ_!w4SDq&jGSsET!vR|`hb0%c9@*EGw10>&VH)SHy=0a z{Af)Anm}&PWzO&as3_1|<(xm#%sKBcIoqy6&NqylMntN#ac0hOhspUabKV=B^P{n5 z&g{eFtVB*Velcd^MbN(P47-WX?5QE(bp8qo_1%x>@I+ z4wG}kmB^_@=Nui*IXGcXxJlR>K)HX)ZU{X^4Il9*+I)VbN=7HakIF=GY&ZIcKQJFU zO@5-$Az5GuEX1?^G|e`s_EPEN7TC+=ig7uvMb#_qljM1ceKM}>S*OW$uHDD?uzOWL ztZ%_H!%Z{4jZuD$XXfW~p7G55d@kaZ^VitR_KE-o+Y9f+Dv~R#B3$+TgH$x&8eq(| z_&&MvbS5zEGs6%K5?Hgl(`()_4!7&W^0ZW6#77!FQUXjxmY`Q4e*0=nXM-*@Uz`D1 zmf{Rlw@Kx)I)yU~2x|f-a4UZQ8fIcs`%S}9EzQoS5t`wy2YX-L(Xa@hO5{xXR_!NT<2PP_B zHu{zC2bulK^YsbjC%@LsBW^dx>HGeBIe7fV3J<)%g2)*7<&gZ|4`G(o&mSrA{4iJIj)*De`A)K(_c27;NwqlIUEtj7OH zH7*r}wK^LR1JBXZLf9U4?KGq5PCRHdU7NWDFs3JJy9`*r!6kCg2?o|Z!dQ=6m4J>3 z`;O>cd-`9t8ooMbz}%b{ym_aw0!z+!pMltd*|eau=qZ5b2;uxV(UQmh5h*b^E-&HQ zl00WYX_^;Ims$*%MSmW+Nx==z9<8R=&oNu;`MNONEVH5^8%s&dJNBXGy?7K^T_#s- zW$8hjXyy#Sw-^EM)i78iyo%PXitpFL$}4taka;_H#RG>T*P2GWgT}etJ`{#922$8k zpUqb_fgyK(dwo*XFF4RqOT7uV=n~(l7=-w74E_FIn3%#_|W~AVKo>LP7A~+hWhK@)*Z7Je`<5RYR z1*Aj>IiA7}JhMrPB8f|q1(L+hhGgEp$=%4@r6)_Cv$)^NNF}Ohal3_k}+975fsPzcYGH0m%4As1aVsw z?#7M2bswdt-@MuhNc4L%QN~<6b7Wpvfg644ek6jw1ouf^JLdl-U50Z_>LQfEKWu8# z3ZKOTw)j<}NCmSj4^!=6220dmS3`d%-$Z}6 zc9VUfa-MhLm~__8R$xQtx$wNEt~L4+nz86!Yw=Zo*?3sSq}Va|ogMc74NOpMpH@+L z!Z#!}Jg905E2jr>D~YjiHFTQnLsH-1-zNPvXEr+@bk|I!-@MPK+-#lZR&ACgJ`#JSCf7ci5o0tB>DLI6TJ zR?bh^I+O6Vd$HXWo0GY{TUIWyfY8I-@jQv;$-q94@x=y)_3!;9FYJbY#8Lr$^NruL z^Eg%&fF6W-gO@{N@eS6MsCAmbLcU=a&LgM@F(M4Z|Az^8(DJ9J6)lyG(ffOOooRbikxdePA-9NuTur{)SNaoKLY#3roD&s6y3=tX^prhDhQzyXZL`v^O=aJ z&!Mt1>>1T>K)Yi9M!Odz=s?=pVX6v=0~rYgps#S&wz z2KGib#c`4t^ky(lL{giUiI`z*^qJiNA5NDw`{fp*Fsq>z7sTTe*7|`~O5}S|eIe6T z)C$!+2Gxf0kj^>Anq$+~3&CPgcpgfP4TB_d8Pw3^k-16I%^=_swnwoqgi(z$^|LF# zZP#5hgd@wJh-MZ&zY<3y`1Exfp^v_m!*!vDs2_~;WB&kpbMribgMRSw3jH8gh@5a1 z>|d$q=8@m4`C(82N7R!)U|LEvsq>AkghX8O8VAC18~-$yVC}_HU`&3}7X4BNXmhbmU7IFN3eBgcYh zsUIFXFR9($0#Qt9Kae{VWOfjV&4ErII4%ztj1G{9M*g!w*7OZ+- z{AYAXfg#1XxC1_pMBRbv-MAp&To0%L?6%Y zarL$auLQqJdw%|(fl13{)gn4erK`Nq8d~ajZ1#36KOOby_ddWDj_oB3M}0u{6*vQG z*Fivb9iR(XdJ(z+V8Qvn@7hCs(dYy30ZWY%1Y*j<=qpd4xe>g$e1s&4fJQHy(Gh^< zr!bkUX9Kj4{v{XCVggSHPdvDbV6qhYB)oh26Y+2W`JL1!Sa*vdJKd;y#@^k)Ro=t& zVr*QLGfn?&Iw3G7G1xTna5aE5**9z<8H=vX_$Qoqt}J5qz>{QacVG^gJUj&m`@~lDHx?9l zQalnB@6jQVlF?|g@Hc13LJ;c4@AUb0F zZXhS1PAqE1rZdzWN(VFus^j)EHrq~B_W>8v}>!iYr6xUe3B zbG!zhNc^$Xe^o#bs6Cw;?4@uF+bN%X-@g1T0mWcFtzU5l!ZMEqM4_I>2Ex>QykdVa z4gHNztyZ$yS9M+0>pC;13;ZDw3PdkYvB(GIJ4Ms zuU{^midL9B++f(Sg{SrV`69qtBGh9U6%9pPBljiVhPxu;ZI~x%|889y32cz7{UTY= zV&MA7*Wr7`pLVbTYV^h7PYlhl{?gQzCevwfY23+(2=)bhh9WDa;C@8i@8R(6n@~Q$jrcVkQ&${FwpFbH zXsEvj(vQ@xXmXKg{1$pIlxZ#`lOa&b-Ni;6wFlxSCgF*myQZgJJ^ z2ODooF4630=eGW~$~%#U*2ZMWH{MLJRgwQ(75kEHm8av|2*hDH*0=vC@0k;8eEWNP z?Y{lVw%PQ-frsxt-nak%Bko<`qb#of|11!Qn7Bcq1_TWnYf!X_pe9vnqKWS6u12MZ zN-JJVt+pv97!@?Iplp}b)JwJ1eno3r>({olwFqKs0?19P0j%7tf>wRv+KSo=f|B3+ zbLM$+BUtg4OKPCvIuoNnfO^EDalzfFQo`(LC1iM#S? z0sqUzqms7HvTE9CTy3;aB7J&$n=sVZ-x$_LA*T8%vGf@sdD7dj7E50OCchfpu_cOEo%qO2(NIgQeC_pT$_ZeFNzHPG*J#70 zW9x&CT}H>SpB^iTO*z@^E0Zr1;vyb5W%McyR>Sq6QlDWgU zu72ZNZ-WWV8dGgN+1mCj7$J^T$P-dI=rP??%EL86xIum9^7%9baD8WC<|fpaJW99V z2`I5NADk5ZpthJn*G@wQ9T=h{#(!UYI7iD3G9a9ZfL9A1O^&%AG!ML-;Bjz%a2g zvGjGPpQ}vl`o^^T_SrM7&Ft;x{R)&nBfKyde#7e0);3=6bbrnv$q|jMjjl0 zysw#X__<`QQ%}r$3E*`C!RfKsUmwDi0Q?`-U8n_x^QrZyIGQsjt04rn>1r25K=(%L z-aqd$6IiZo=z~MNW9F z(dZ;Btr?6wSE8;Wy!w8aao~3Ek5Rvvkgb&`sJm+yx~syxN5xD!Gg5nwFf(7{Le`v) z;s>k-dJ@^6;zUYyA>0Qid?wIp8&)htDrp-J(e#`<#ohebBb|x&7{#^B5%b4H$#+=_ zg;c6mqJDVxELegT+hR2gR83-6CL6h&X|8AXhJV*rLwkK%-?jHanr8^yUv_(j^i(>k zNlEwn8rzFkzBeXoG4*D7(2?j#zm}_t4OM{7yt{sq|GJ9R!3CQRCP6t+Jjxmj3XsI;^2c`9iwC-(b+Dexw z#F`;U={bqntLt;UKKp&(`d>FeKTPy~c=5m8$yS+nTcOSVtqa}k+m4`u*>5|V*+0>r z{W8Z0nf?3j>puGtFssIn006K0>!_ctlJ|rPGw&`7$inqR^(;v7_V4J0qmSK(Sy%q` z#~xj2jnEa-pMi*-UCHgeE8X$SyZTRiAynJCUKxSIpTmW%z3(rAlL79o&z@!|QdycEmCeGfPW-CfpBcHWps6y;j z$0xzA(s;rYVFe_@O6yHK)F$D3Pxjc#Zr+I^Z?rnWB=|~d@Zt7*yW@k~s|L0Dd$5$- zlX=5j-3Rro`0s;+4~! zXli;6cVSjTMDX96SHH{oO#SbA!l<_vyJMN#jPHJWFI01z@kb2bV%#5^D9Ob90~g5F zb>@4;hDT30>*uupMX^##dJMd3v@eUlec{;3&*B= z^2mRak{I{#3dtXXl&2HyqIX;^F6m8Td!f`x$uq5bLZ}F>=PjD>k1qFEV!7nNi zWIm0__lyKU^+IuaQTJtJ-fIr7PQG86co zhY;&fjb?KAV-aoFC)2WYN>ljCH?f8&9jt~d-P1&ibBJnR2NJEj4fcBgsw<_aVqd4* z^=0woXO)R}=n0#kXrle#`T=n;JSTIN$(wJ=yT)%;IcFYkoq<*U9hEU7>W^Unn&YlH)2ynIzS-Kqg< zo1kfnC0BZ5muK2-J@Vdtj&{2+-$sFv+DlX z_x1qpS!A}9d@D8EzdYxR&bBiVAm#oJ0xi0=RfbQ3IF1&IM{r8 z2nRc5nK)QPyr_(E#gf@$NJ)$vyVU1kv+a&7=|_;BIZ7|GrpFyjSQJ`85pNjwEnrBT zcUxgwE`P9d5;Ha7T-Ya=z_t#9ZJh<%dI8GK`Gz4ZJM`7w8NyLII7M>>pP9UGK0}4t zCE;McCxKim{$d_H9Dg|?mOLU>zHRzJYI8B8@%^gYtAR1lt_abSpZxo=E|`!rIGCnA zKkIFpVn}c8E#h+U(a#RH?%62BYHB5yG}yQTR@uGdFe;ytwG2mm;9N3yQqfmB0dyqf zEU7VK^@bPf$Gz(P!k{VN7EaqGaZ@aCw5mDi(;RS&MJ;OVi*ShgB2M9E@6ranM{hbu zmAT^omR4$i*<}(E2L_XH<0E@d0*(#`+ore&vo{vCfC;xiv(5ZY358E;PSbh6e%x^= zWf4wj71DGx+JyNWYOc#W)6eT_@ok#Y+5OkRfr?cQ4y1ZIPB0cM`L8+9j9+vaa?_w- z$hSSb_mFMVR02Fj zNvIN9&LEQ_XU3gf9raa>#K@Y8Rcdi~HS8|JldL|WcGEc#62 zt-srlM=i0?8=3z65W}$|=XXb;0j-?*Ci3s8)tmw!;{D@y9@=IO>re^ddeIFrgXF}6 zZT^WfbIg>-B)cz=N|Mw2WoA;|zwwag-nX9ffc=cGK>OM?(irE~7ISw? zB_e63L!E9H=KcMDyx@NGoR0+}@dqn$K3W8EY`VW+gfoT7P5A3jpq6Zw&!!=o1K3zgm#NBh-tEQC>fD69 zQTOf*ew7Ytt~A~+o#lK=V-Tixk86shhJ2-7#ttJ&?DMF>BMt+R@k1Q6+0GXiHixn} z@Ojfl+Y>OXu7_X({b!kRn|;P5hkGV&IgSDcQI7$ZfDM#a+2;qXR@n~>=Ik(z^J{Pi z@7}?F9gnFj6w}DpkaS}Z@CXPUtQAR8#KWfF-6FK)edV8vvEAcL*+A>9egUhJ0*%DI z-@3ey`FX8U@@`k&boOsfgR!|QEAy;_E4M^wL5B4&5dto0yUU;kzB5zmW=K^?v1F$F|lCpc$lx_%0`v6|(*J053F92MD z{`>%gZ{4F`0KVtCyb(Wd5BR=%Ht-#8uf#XacA5GWtGU10a z&hFWuy3xtl)7eLKZScg721obOU?50zvrjzat@gyYQx{6;$1ud#F(mVOpDf?3xm}9)o9DIa-{Y2C z8Wr!g+G44^^J_K3LoUz<2F{)W_YgMEKhr$NQ~zuHkJGDYVmV{y4al8W^SgNIW0jG*ERQqB`)7=!gVU!s^WFQ=hYWLO3;C1}R)An=ygIYdJrvy!%*Uw< zveCw!dav^}Z<≪9E_M%~uCzju(Ew>?5bGm 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�m-s{GJ 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

w1qyX387wd~!iGmspkfpwyu3+^pi`7U_=nVBq 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%0D~ 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
initGovernors({authAdmin}); + std::vector weights({bcos::codec::toString32(h256(1))}); + INITIALIZER_LOG(INFO) << LOG_BADGE("AuthInitializer") + << LOG_KV("authAdminAddress", _nodeConfig->authAdminAddress()); + + // bytes code + abi encode constructor params + codec::abi::ContractABICodec abi(_protocol->cryptoSuite()->hashImpl()); + bytes input = code + abi.abiIn("", initGovernors, weights, codec::toString32(h256(0)), + codec::toString32(h256(0))); + + auto tx = _protocol->blockFactory()->transactionFactory()->createTransaction(3, + precompiled::AUTH_COMMITTEE_ADDRESS, input, u256(_number), 500, _nodeConfig->chainId(), + _nodeConfig->groupId(), utcTime()); + tx->forceSender(authAdmin.asBytes()); + block->appendTransaction(tx); + } +}; +} // namespace bcos::initializer \ No newline at end of file diff --git a/libinitializer/BfsInitializer.h b/libinitializer/BfsInitializer.h new file mode 100644 index 0000000..79cab89 --- /dev/null +++ b/libinitializer/BfsInitializer.h @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2022 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file BfsInitializer.h + * @author: kyonGuo + * @date 2022/10/20 + */ + +#pragma once +#include "Common.h" +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::initializer; +namespace bcos::initializer +{ +class BfsInitializer +{ +public: + BfsInitializer() = delete; + static void init(protocol::BlockNumber _number, + const std::shared_ptr& _protocol, + const std::shared_ptr& _nodeConfig, const protocol::Block::Ptr& _block) + { + bcos::CodecWrapper codecWrapper( + _protocol->cryptoSuite()->hashImpl(), _nodeConfig->isWasm()); + bytes input = codecWrapper.encodeWithSig("initBfs()"); + + auto transaction = _protocol->blockFactory()->transactionFactory()->createTransaction(3, + _nodeConfig->isWasm() ? precompiled::BFS_NAME : precompiled::BFS_ADDRESS, input, + u256(_number), 500, _nodeConfig->chainId(), _nodeConfig->groupId(), utcTime()); + _block->appendTransaction(std::move(transaction)); + } +}; +} // namespace bcos::initializer diff --git a/libinitializer/CMakeLists.txt b/libinitializer/CMakeLists.txt new file mode 100644 index 0000000..d3ad8be --- /dev/null +++ b/libinitializer/CMakeLists.txt @@ -0,0 +1,36 @@ +file(GLOB SRC_LIST "*.cpp") + +find_package(Boost REQUIRED program_options) +find_package(jsoncpp CONFIG REQUIRED) + +add_library(${COMMAND_HELPER_LIB} CommandHelper.cpp) +target_link_libraries(${COMMAND_HELPER_LIB} PUBLIC bcos-framework Boost::program_options) + +add_library(${PROTOCOL_INIT_LIB} ProtocolInitializer.cpp) +target_link_libraries(${PROTOCOL_INIT_LIB} PUBLIC + ${CRYPTO_TARGET} ${TOOL_TARGET} ${TARS_PROTOCOL_TARGET} ${SECURITY_TARGET}) + +add_library(${FRONTSERVICE_INIT_LIB} FrontServiceInitializer.cpp) +target_link_libraries(${FRONTSERVICE_INIT_LIB} PUBLIC ${PROTOCOL_INIT_LIB} ${TOOL_TARGET} ${FRONT_TARGET}) + +add_library(${PBFT_INIT_LIB} PBFTInitializer.cpp ProPBFTInitializer.cpp) +target_link_libraries(${PBFT_INIT_LIB} PUBLIC ${PROTOCOL_INIT_LIB} ${LEDGER_TARGET} ${TOOL_TARGET} ${SEALER_TARGET} ${PBFT_TARGET} ${SYNC_TARGET} ${STORAGE_TARGET}) +if(WITH_TIKV) + target_link_libraries(${PBFT_INIT_LIB} PUBLIC ${LEADER_ELECTION_TARGET}) +endif() + +add_library(${TXPOOL_INIT_LIB} TxPoolInitializer.cpp) +target_link_libraries(${TXPOOL_INIT_LIB} PUBLIC ${PROTOCOL_INIT_LIB} ${TOOL_TARGET} ${TXPOOL_TARGET}) + +add_library(${INIT_LIB} Initializer.cpp LightNodeInitializer.h) +list(APPEND INIT_LIB_DEPENDS ${PROTOCOL_INIT_LIB} ${FRONTSERVICE_INIT_LIB} ${TXPOOL_INIT_LIB} ${SCHEDULER_TARGET} ${STORAGE_TARGET} ${EXECUTOR_TARGET} ${RPC_TARGET} bcos-boostssl) +if(WITH_TIKV) + list(APPEND INIT_LIB_DEPENDS ${LEADER_ELECTION_TARGET}) +endif() +if(WITH_LIGHTNODE) + add_library(lightnodeinit LightNodeInitializer.cpp LightNodeInitializer.h) + target_link_libraries(lightnodeinit PUBLIC bcos-lightnode bcos-concepts ${TARS_PROTOCOL_TARGET}) + list(APPEND INIT_LIB_DEPENDS lightnodeinit bcos-concepts) +endif() +target_link_libraries(${INIT_LIB} PUBLIC ${INIT_LIB_DEPENDS}) +add_dependencies(${INIT_LIB} BuildInfo.h) diff --git a/libinitializer/CommandHelper.cpp b/libinitializer/CommandHelper.cpp new file mode 100644 index 0000000..cdddad6 --- /dev/null +++ b/libinitializer/CommandHelper.cpp @@ -0,0 +1,152 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CommandHelper.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "CommandHelper.h" +#include "Common.h" +#include +#include +#include + +void bcos::initializer::printVersion() +{ + std::cout << "FISCO BCOS Version : " << FISCO_BCOS_PROJECT_VERSION << std::endl; + std::cout << "Build Time : " << FISCO_BCOS_BUILD_TIME << std::endl; + std::cout << "Build Type : " << FISCO_BCOS_BUILD_PLATFORM << "/" + << FISCO_BCOS_BUILD_TYPE << std::endl; + std::cout << "Git Branch : " << FISCO_BCOS_BUILD_BRANCH << std::endl; + std::cout << "Git Commit : " << FISCO_BCOS_COMMIT_HASH << std::endl; +} + +void bcos::initializer::showNodeVersionMetric() +{ + INITIALIZER_LOG(INFO) << METRIC << LOG_KV("binaryVersion", FISCO_BCOS_PROJECT_VERSION) + << LOG_KV("buildTime", FISCO_BCOS_BUILD_TIME) + << LOG_KV("buildType", FISCO_BCOS_BUILD_TYPE) + << LOG_KV("platform", FISCO_BCOS_BUILD_PLATFORM) + << LOG_KV("gitBranch", FISCO_BCOS_BUILD_BRANCH) + << LOG_KV("commitHash", FISCO_BCOS_COMMIT_HASH); +} + +void bcos::initializer::initCommandLine(int argc, char* argv[]) +{ + boost::program_options::options_description main_options("Usage of FISCO BCOS"); + main_options.add_options()("help,h", "print help information")( + "version,v", "version of FISCO BCOS"); + boost::program_options::variables_map vm; + try + { + boost::program_options::store( + boost::program_options::parse_command_line(argc, argv, main_options), vm); + } + catch (...) + { + printVersion(); + } + /// help information + if (vm.count("help") || vm.count("h")) + { + std::cout << main_options << std::endl; + exit(0); + } + /// version information + if (vm.count("version") || vm.count("v")) + { + printVersion(); + exit(0); + } +} + +bcos::initializer::Params bcos::initializer::initAirNodeCommandLine( + int argc, const char* argv[], bool _autoSendTx) +{ + boost::program_options::options_description main_options("Usage of FISCO-BCOS"); + main_options.add_options()("help,h", "print help information")( + "version,v", "version of FISCO-BCOS")("config,c", + boost::program_options::value()->default_value("./config.ini"), + "config file path, eg. config.ini")("genesis,g", + boost::program_options::value()->default_value("./config.genesis"), + "genesis config file path, eg. genesis.ini"); + + if (_autoSendTx) + { + main_options.add_options()( + "txSpeed,t", boost::program_options::value(), "transaction generate speed"); + } + boost::program_options::variables_map vm; + try + { + boost::program_options::store( + boost::program_options::parse_command_line(argc, argv, main_options), vm); + } + catch (...) + { + std::cout << "invalid parameters" << std::endl; + std::cout << main_options << std::endl; + exit(0); + } + /// help information + if (vm.count("help") || vm.count("h")) + { + std::cout << main_options << std::endl; + exit(0); + } + /// version information + if (vm.count("version") || vm.count("v")) + { + bcos::initializer::printVersion(); + exit(0); + } + std::string configPath("./config.ini"); + if (vm.count("config")) + { + configPath = vm["config"].as(); + } + if (vm.count("c")) + { + configPath = vm["c"].as(); + } + std::string genesisFilePath("./config.genesis"); + if (vm.count("genesis")) + { + genesisFilePath = vm["genesis"].as(); + } + if (vm.count("g")) + { + genesisFilePath = vm["g"].as(); + } + if (!boost::filesystem::exists(configPath)) + { + std::cout << "config \'" << configPath << "\' not found!"; + exit(0); + } + if (!boost::filesystem::exists(genesisFilePath)) + { + std::cout << "genesis config \'" << genesisFilePath << "\' not found!"; + exit(0); + } + float txSpeed = 10; + if (_autoSendTx) + { + if (vm.count("txSpeed") || vm.count("t")) + { + txSpeed = vm["txSpeed"].as(); + } + } + return bcos::initializer::Params{configPath, genesisFilePath, txSpeed}; +} \ No newline at end of file diff --git a/libinitializer/CommandHelper.h b/libinitializer/CommandHelper.h new file mode 100644 index 0000000..68690e9 --- /dev/null +++ b/libinitializer/CommandHelper.h @@ -0,0 +1,39 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file CommandHelper.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include +#include +namespace bcos +{ +namespace initializer +{ +void printVersion(); +void showNodeVersionMetric(); +void initCommandLine(int argc, char* argv[]); + +struct Params +{ + std::string configFilePath; + std::string genesisFilePath; + float txSpeed; +}; +Params initAirNodeCommandLine(int argc, const char* argv[], bool _autoSendTx); +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/Common.h b/libinitializer/Common.h new file mode 100644 index 0000000..dbd3f60 --- /dev/null +++ b/libinitializer/Common.h @@ -0,0 +1,91 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Common for libinitializer + * @file Common.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define INITIALIZER_LOG(LEVEL) BCOS_LOG(LEVEL) << "[INITIALIZER]" +namespace bcos +{ +namespace initializer +{ +inline std::shared_ptr loadPrivateKey(std::string const& _keyPath, + unsigned _hexedPrivateKeySize, bcos::security::DataEncryptInterface::Ptr _certEncryptionHandler) +{ + auto content = readContents(boost::filesystem::path(_keyPath)); + auto keyContent = content; + if (_certEncryptionHandler) + { + keyContent = _certEncryptionHandler->decryptContents(content); + } + if (keyContent->empty()) + { + return nullptr; + } + std::shared_ptr ecKey; + try + { + INITIALIZER_LOG(INFO) << LOG_BADGE("SecureInitializer") << LOG_DESC("loading privateKey"); + std::shared_ptr bioMem(BIO_new(BIO_s_mem()), [&](BIO* p) { BIO_free(p); }); + BIO_write(bioMem.get(), keyContent->data(), keyContent->size()); + + std::shared_ptr evpPKey(PEM_read_bio_PrivateKey(bioMem.get(), NULL, NULL, NULL), + [](EVP_PKEY* p) { EVP_PKEY_free(p); }); + if (!evpPKey) + { + return nullptr; + } + ecKey.reset(EVP_PKEY_get1_EC_KEY(evpPKey.get()), [](EC_KEY* p) { EC_KEY_free(p); }); + } + catch (bcos::Exception& e) + { + INITIALIZER_LOG(ERROR) << LOG_BADGE("SecureInitializer") + << LOG_DESC("parse privateKey failed") + << LOG_KV("EINFO", boost::diagnostic_information(e)); + BOOST_THROW_EXCEPTION(bcos::tool::InvalidConfig() + << errinfo_comment("SecureInitializer: parse privateKey failed")); + } + std::shared_ptr ecPrivateKey( + EC_KEY_get0_private_key(ecKey.get()), [](const BIGNUM*) {}); + + std::shared_ptr privateKeyData( + BN_bn2hex(ecPrivateKey.get()), [](char* p) { OPENSSL_free(p); }); + std::string keyHex(privateKeyData.get()); + if (keyHex.size() >= _hexedPrivateKeySize) + { + return fromHexString(keyHex); + } + for (size_t i = keyHex.size(); i < _hexedPrivateKeySize; i++) + { + keyHex = '0' + keyHex; + } + return fromHexString(keyHex); +} +} // namespace initializer +} // namespace bcos diff --git a/libinitializer/ExecutorInitializer.h b/libinitializer/ExecutorInitializer.h new file mode 100644 index 0000000..68e50b9 --- /dev/null +++ b/libinitializer/ExecutorInitializer.h @@ -0,0 +1,24 @@ +#pragma once + +#include "bcos-framework/storage/StorageInterface.h" +#include + +namespace bcos::initializer +{ +class ExecutorInitializer +{ +public: + // static bcos::executor::TransactionExecutorFactory::Ptr buildFactory( + // bcos::ledger::LedgerInterface::Ptr ledger, txpool::TxPoolInterface::Ptr txpool, + // storage::MergeableStorageInterface::Ptr cache, + // storage::TransactionalStorageInterface::Ptr storage, + // protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + // bcos::crypto::Hash::Ptr hashImpl, bool isWasm, bool isAuthCheck, size_t keyPageSize = 0, + // std::string name = "executor") + // { + // return std::make_shared(ledger, txpool, + // cache, + // storage, executionMessageFactory, hashImpl, isWasm, isAuthCheck, keyPageSize, name); + // } +}; +} // namespace bcos::initializer \ No newline at end of file diff --git a/libinitializer/FrontServiceInitializer.cpp b/libinitializer/FrontServiceInitializer.cpp new file mode 100644 index 0000000..0e0093f --- /dev/null +++ b/libinitializer/FrontServiceInitializer.cpp @@ -0,0 +1,198 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the the front module + * @file FrontServiceInitializer.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "FrontServiceInitializer.h" +#include "bcos-framework/protocol/Protocol.h" +#include "bcos-task/Wait.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::initializer; +using namespace bcos::front; + +FrontServiceInitializer::FrontServiceInitializer(bcos::tool::NodeConfig::Ptr _nodeConfig, + bcos::initializer::ProtocolInitializer::Ptr _protocolInitializer, + bcos::gateway::GatewayInterface::Ptr _gateWay) + : m_nodeConfig(_nodeConfig), m_protocolInitializer(_protocolInitializer), m_gateWay(_gateWay) +{ + auto frontServiceFactory = std::make_shared(); + frontServiceFactory->setGatewayInterface(m_gateWay); + + // make the threadpool configurable + auto threadPool = + std::make_shared("frontService", std::thread::hardware_concurrency()); + frontServiceFactory->setThreadPool(threadPool); + m_front = frontServiceFactory->buildFrontService( + m_nodeConfig->groupId(), m_protocolInitializer->keyPair()->publicKey()); +} + +void FrontServiceInitializer::start() +{ + if (m_running) + { + FRONTSERVICE_LOG(INFO) << LOG_DESC("The front service has already been started"); + return; + } + FRONTSERVICE_LOG(INFO) << LOG_DESC("Start the front service"); + m_running = true; + m_front->start(); +} +void FrontServiceInitializer::stop() +{ + if (!m_running) + { + FRONTSERVICE_LOG(INFO) << LOG_DESC("The front service has already been stopped"); + return; + } + FRONTSERVICE_LOG(INFO) << LOG_DESC("Stop the front service"); + m_running = false; + m_front->stop(); +} + +void FrontServiceInitializer::init(bcos::consensus::ConsensusInterface::Ptr _pbft, + bcos::sync::BlockSyncInterface::Ptr _blockSync, bcos::txpool::TxPoolInterface::Ptr _txpool) +{ + initMsgHandlers(_pbft, _blockSync, _txpool); +} + + +void FrontServiceInitializer::initMsgHandlers(bcos::consensus::ConsensusInterface::Ptr _pbft, + bcos::sync::BlockSyncInterface::Ptr _blockSync, bcos::txpool::TxPoolInterface::Ptr _txpool) +{ + // register the message dispatcher handler to the frontService + // register the message dispatcher for PBFT module + m_front->registerModuleMessageDispatcher( + bcos::protocol::ModuleID::PBFT, [_pbft](bcos::crypto::NodeIDPtr _nodeID, + const std::string& _id, bcos::bytesConstRef _data) { + _pbft->asyncNotifyConsensusMessage( + nullptr, _id, _nodeID, _data, [](bcos::Error::Ptr _error) { + if (_error) + { + FRONTSERVICE_LOG(WARNING) + << LOG_DESC("registerModuleMessageDispatcher failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + }); + FRONTSERVICE_LOG(INFO) << LOG_DESC( + "registerModuleMessageDispatcher for the consensus module success"); + + // register the message dispatcher for the txsSync module + m_front->registerModuleMessageDispatcher( + bcos::protocol::ModuleID::TxsSync, [_txpool](bcos::crypto::NodeIDPtr _nodeID, + std::string const& _id, bcos::bytesConstRef _data) { + _txpool->asyncNotifyTxsSyncMessage( + nullptr, _id, _nodeID, _data, [_id](bcos::Error::Ptr _error) { + if (_error) + { + FRONTSERVICE_LOG(WARNING) << LOG_DESC("asyncNotifyTxsSyncMessage failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + }); + + // register the message dispatcher for the consensus txs sync module + m_front->registerModuleMessageDispatcher(bcos::protocol::ModuleID::ConsTxsSync, + [_txpool]( + bcos::crypto::NodeIDPtr _nodeID, std::string const& _id, bcos::bytesConstRef _data) { + _txpool->asyncNotifyTxsSyncMessage( + nullptr, _id, _nodeID, _data, [_id](bcos::Error::Ptr _error) { + if (_error) + { + FRONTSERVICE_LOG(WARNING) << LOG_DESC("asyncNotifyTxsSyncMessage failed") + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + }); + FRONTSERVICE_LOG(INFO) << LOG_DESC( + "registerModuleMessageDispatcher for the txsSync module success"); + + // register the message dispatcher for the block sync module + m_front->registerModuleMessageDispatcher(bcos::protocol::ModuleID::BlockSync, + [_blockSync]( + bcos::crypto::NodeIDPtr _nodeID, std::string const& _id, bcos::bytesConstRef _data) { + _blockSync->asyncNotifyBlockSyncMessage( + nullptr, _id, _nodeID, _data, [_id, _nodeID](bcos::Error::Ptr _error) { + if (_error) + { + FRONTSERVICE_LOG(WARNING) + << LOG_DESC("asyncNotifyBlockSyncMessage failed") + << LOG_KV("peer", _nodeID->shortHex()) << LOG_KV("id", _id) + << LOG_KV("code", _error->errorCode()) + << LOG_KV("msg", _error->errorMessage()); + } + }); + }); + FRONTSERVICE_LOG(INFO) << LOG_DESC( + "registerModuleMessageDispatcher for the BlockSync module success"); + + // register the groupNodeInfo notification to the frontService + // Note: since txpool/blocksync/pbft are in the same module, they can share the same + // GroupNodeInfoNotification + m_front->registerGroupNodeInfoNotification(bcos::protocol::ModuleID::TxsSync, + [this, _txpool, _blockSync, _pbft](bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo, + bcos::front::ReceiveMsgFunc _receiveMsgCallback) { + auto const& nodeIDList = _groupNodeInfo->nodeIDList(); + bcos::crypto::NodeIDSet nodeIdSet; + for (auto const& nodeID : nodeIDList) + { + auto nodeIDPtr = keyFactory()->createKey(fromHex(nodeID)); + if (!nodeIDPtr) + { + continue; + } + nodeIdSet.insert(nodeIDPtr); + } + _txpool->notifyConnectedNodes(nodeIdSet, _receiveMsgCallback); + _blockSync->notifyConnectedNodes(nodeIdSet, _receiveMsgCallback); + _pbft->notifyConnectedNodes(nodeIdSet, _receiveMsgCallback); + FRONTSERVICE_LOG(INFO) + << LOG_DESC("notifyGroupNodeInfo") << LOG_KV("connectedNodeSize", nodeIdSet.size()); + }); + FRONTSERVICE_LOG(INFO) << LOG_DESC("registerGroupNodeInfoNotification success"); + + // TXPOOL onPushTransaction + m_front->registerModuleMessageDispatcher( + protocol::SYNC_PUSH_TRANSACTION, [txpool = _txpool](bcos::crypto::NodeIDPtr nodeID, + const std::string& messageID, bytesConstRef data) { + task::wait(txpool->onReceivePushTransaction(std::move(nodeID), messageID, data)); + }); +} + + +bcos::crypto::KeyFactory::Ptr FrontServiceInitializer::keyFactory() +{ + return m_protocolInitializer->keyFactory(); +} +bcos::front::FrontServiceInterface::Ptr FrontServiceInitializer::front() +{ + return m_front; +} \ No newline at end of file diff --git a/libinitializer/FrontServiceInitializer.h b/libinitializer/FrontServiceInitializer.h new file mode 100644 index 0000000..d863cce --- /dev/null +++ b/libinitializer/FrontServiceInitializer.h @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the the front module + * @file FrontServiceInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include +#include +#include + +namespace bcos +{ +namespace consensus +{ +class ConsensusInterface; +} +namespace sync +{ +class BlockSyncInterface; +} +namespace txpool +{ +class TxPoolInterface; +} +namespace gateway +{ +class GatewayInterface; +} +namespace front +{ +class FrontService; +} + +namespace initializer +{ +class ProtocolInitializer; + +class FrontServiceInitializer +{ +public: + using Ptr = std::shared_ptr; + FrontServiceInitializer(bcos::tool::NodeConfig::Ptr _nodeConfig, + std::shared_ptr _protocolInitializer, + std::shared_ptr _gateWay); + virtual ~FrontServiceInitializer() { stop(); } + + virtual void init(std::shared_ptr _pbft, + std::shared_ptr _blockSync, + std::shared_ptr _txpool); + virtual void start(); + virtual void stop(); + + bcos::front::FrontServiceInterface::Ptr front(); + bcos::crypto::KeyFactory::Ptr keyFactory(); + +protected: + virtual void initMsgHandlers(std::shared_ptr _pbft, + std::shared_ptr _blockSync, + std::shared_ptr _txpool); + +private: + bcos::tool::NodeConfig::Ptr m_nodeConfig; + std::shared_ptr m_protocolInitializer; + std::shared_ptr m_gateWay; + + std::shared_ptr m_front; + std::atomic_bool m_running = {false}; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/Initializer.cpp b/libinitializer/Initializer.cpp new file mode 100644 index 0000000..a8dce4a --- /dev/null +++ b/libinitializer/Initializer.cpp @@ -0,0 +1,544 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Initializer for all the modules + * @file Initializer.cpp + * @author: yujiechen + * @date 2021-06-11 + + * @brief Initializer for all the modules + * @file Initializer.cpp + * @author: ancelmo + * @date 2021-10-23 + */ + +#include "Initializer.h" +#include "AuthInitializer.h" +#include "BfsInitializer.h" +#include "ExecutorInitializer.h" +#include "LedgerInitializer.h" +#include "SchedulerInitializer.h" +#include "StorageInitializer.h" +#include "bcos-crypto/hasher/OpenSSLHasher.h" +#include "bcos-executor/src/executor/SwitchExecutorManager.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-scheduler/src/TarsExecutorManager.h" +#include "bcos-tool/BfsFileFactory.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::protocol; +using namespace bcos::initializer; + +void Initializer::initAirNode(std::string const& _configFilePath, std::string const& _genesisFile, + bcos::gateway::GatewayInterface::Ptr _gateway, const std::string& _logPath) +{ + initConfig(_configFilePath, _genesisFile, "", true); + init(bcos::protocol::NodeArchitectureType::AIR, _configFilePath, _genesisFile, _gateway, true, + _logPath); +} +void Initializer::initMicroServiceNode(bcos::protocol::NodeArchitectureType _nodeArchType, + std::string const& _configFilePath, std::string const& _genesisFile, + std::string const& _privateKeyPath, const std::string& _logPath) +{ + initConfig(_configFilePath, _genesisFile, _privateKeyPath, false); + // get gateway client + auto keyFactory = std::make_shared(); + + auto gatewayServiceName = m_nodeConfig->gatewayServiceName(); + auto withoutTarsFramework = m_nodeConfig->withoutTarsFramework(); + + std::vector endPoints; + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::GATEWAY_NAME, endPoints); + + auto gatewayPrx = bcostars::createServantProxy( + withoutTarsFramework, gatewayServiceName, endPoints); + + auto gateWay = std::make_shared( + gatewayPrx, m_nodeConfig->gatewayServiceName(), keyFactory); + init(_nodeArchType, _configFilePath, _genesisFile, gateWay, false, _logPath); +} + +void Initializer::initConfig(std::string const& _configFilePath, std::string const& _genesisFile, + std::string const& _privateKeyPath, bool _airVersion) +{ + m_nodeConfig = std::make_shared(std::make_shared()); + m_nodeConfig->loadGenesisConfig(_genesisFile); + m_nodeConfig->loadConfig(_configFilePath); + + // init the protocol + m_protocolInitializer = std::make_shared(); + m_protocolInitializer->init(m_nodeConfig); + auto privateKeyPath = m_nodeConfig->privateKeyPath(); + if (!_airVersion) + { + privateKeyPath = _privateKeyPath; + } + m_protocolInitializer->loadKeyPair(privateKeyPath); + boost::property_tree::ptree pt; + boost::property_tree::read_ini(_configFilePath, pt); + m_nodeConfig->loadNodeServiceConfig( + m_protocolInitializer->keyPair()->publicKey()->hex(), pt, false); + if (!_airVersion) + { + // load the service config + m_nodeConfig->loadServiceConfig(pt); + } +} + +void Initializer::init(bcos::protocol::NodeArchitectureType _nodeArchType, + std::string const& _configFilePath, std::string const& _genesisFile, + bcos::gateway::GatewayInterface::Ptr _gateway, bool _airVersion, const std::string& _logPath) +{ + // build the front service + m_frontServiceInitializer = + std::make_shared(m_nodeConfig, m_protocolInitializer, _gateway); + + // build the storage + auto storagePath = m_nodeConfig->storagePath(); + // build and init the pbft related modules + auto consensusStoragePath = + m_nodeConfig->storagePath() + c_fileSeparator + c_consensusStorageDBName; + if (!_airVersion) + { + storagePath = tars::ServerConfig::BasePath + ".." + c_fileSeparator + + m_nodeConfig->groupId() + c_fileSeparator + m_nodeConfig->storagePath(); + consensusStoragePath = tars::ServerConfig::BasePath + ".." + c_fileSeparator + + m_nodeConfig->groupId() + c_fileSeparator + c_consensusStorageDBName; + } + INITIALIZER_LOG(INFO) << LOG_DESC("initNode") << LOG_KV("storagePath", storagePath) + << LOG_KV("storageType", m_nodeConfig->storageType()) + << LOG_KV("consensusStoragePath", consensusStoragePath); + bcos::storage::TransactionalStorageInterface::Ptr storage = nullptr; + bcos::storage::TransactionalStorageInterface::Ptr schedulerStorage = nullptr; + bcos::storage::TransactionalStorageInterface::Ptr consensusStorage = nullptr; + bcos::storage::TransactionalStorageInterface::Ptr airExecutorStorage = nullptr; + + if (boost::iequals(m_nodeConfig->storageType(), "RocksDB")) + { + // m_protocolInitializer->dataEncryption() will return nullptr when storage_security = false + storage = StorageInitializer::build( + storagePath, m_protocolInitializer->dataEncryption(), m_nodeConfig->keyPageSize()); + schedulerStorage = storage; + consensusStorage = StorageInitializer::build( + consensusStoragePath, m_protocolInitializer->dataEncryption()); + airExecutorStorage = storage; + } + else if (boost::iequals(m_nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + storage = StorageInitializer::build(m_nodeConfig->pdAddrs(), _logPath, + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + if (_nodeArchType == bcos::protocol::NodeArchitectureType::MAX) + { // TODO: in max node, scheduler will use storage to commit but the ledger only use + // storage to read, the storage which ledger use should not trigger the switch when the + // scheduler is committing block + schedulerStorage = StorageInitializer::build(m_nodeConfig->pdAddrs(), _logPath, + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + consensusStorage = storage; + airExecutorStorage = storage; + } + else + { // in AIR/PRO node, scheduler and executor in one process so need different storage + schedulerStorage = StorageInitializer::build(m_nodeConfig->pdAddrs(), _logPath, + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + consensusStorage = StorageInitializer::build(m_nodeConfig->pdAddrs(), _logPath, + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + airExecutorStorage = StorageInitializer::build(m_nodeConfig->pdAddrs(), _logPath, + m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), m_nodeConfig->pdKeyPath()); + } +#endif + } + else + { + throw std::runtime_error("storage type not support"); + } + + // build ledger + auto ledger = + LedgerInitializer::build(m_protocolInitializer->blockFactory(), storage, m_nodeConfig); + m_ledger = ledger; + + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory = nullptr; + // Note: since tikv-storage store txs with transaction, batch writing is more efficient than + // writing one by one + if (_nodeArchType == bcos::protocol::NodeArchitectureType::MAX) + { + executionMessageFactory = + std::make_shared(); + } + else + { + executionMessageFactory = std::make_shared(); + } + auto executorManager = std::make_shared( + m_nodeConfig->executorServiceName(), m_nodeConfig); + + auto transactionSubmitResultFactory = + std::make_shared(); + + // init the txpool + m_txpoolInitializer = std::make_shared( + m_nodeConfig, m_protocolInitializer, m_frontServiceInitializer->front(), ledger); + + auto factory = SchedulerInitializer::buildFactory(executorManager, ledger, schedulerStorage, + executionMessageFactory, m_protocolInitializer->blockFactory(), + m_txpoolInitializer->txpool(), m_protocolInitializer->txResultFactory(), + m_protocolInitializer->cryptoSuite()->hashImpl(), m_nodeConfig->isAuthCheck(), + m_nodeConfig->isWasm(), m_nodeConfig->isSerialExecute()); + + int64_t schedulerSeq = 0; // In Max node, this seq will be update after consensus module switch + // to a leader during startup + m_scheduler = + std::make_shared(schedulerSeq, factory, executorManager); + + if (boost::iequals(m_nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + std::weak_ptr schedulerWeakPtr = m_scheduler; + auto switchHandler = [scheduler = schedulerWeakPtr]() { + if (scheduler.lock()) + { + scheduler.lock()->triggerSwitch(); + } + }; + if (_nodeArchType != bcos::protocol::NodeArchitectureType::MAX) + { + dynamic_pointer_cast(airExecutorStorage) + ->setSwitchHandler(switchHandler); + } + dynamic_pointer_cast(schedulerStorage) + ->setSwitchHandler(switchHandler); +#endif + } + + bcos::storage::CacheStorageFactory::Ptr cacheFactory = nullptr; + if (m_nodeConfig->enableLRUCacheStorage()) + { + cacheFactory = std::make_shared( + storage, m_nodeConfig->cacheSize()); + INITIALIZER_LOG(INFO) << "initNode: enableLRUCacheStorage, size: " + << m_nodeConfig->cacheSize(); + } + else + { + INITIALIZER_LOG(INFO) << LOG_DESC("initNode: disableLRUCacheStorage"); + } + + if (_nodeArchType == bcos::protocol::NodeArchitectureType::MAX) + { + INITIALIZER_LOG(INFO) << LOG_DESC("waiting for connect executor") + << LOG_KV("nodeArchType", _nodeArchType); + executorManager->start(); // will waiting for connecting some executors + + // init scheduler + dynamic_pointer_cast(m_scheduler)->initSchedulerIfNotExist(); + } + else + { + INITIALIZER_LOG(INFO) << LOG_DESC("create Executor") + << LOG_KV("nodeArchType", _nodeArchType); + + // Note: ensure that there has at least one executor before pbft/sync execute block + + auto storageFactory = + std::make_shared(m_nodeConfig->keyPageSize()); + std::string executorName = "executor-local"; + auto executorFactory = std::make_shared( + m_ledger, m_txpoolInitializer->txpool(), cacheFactory, airExecutorStorage, + executionMessageFactory, storageFactory, + m_protocolInitializer->cryptoSuite()->hashImpl(), m_nodeConfig->isWasm(), + m_nodeConfig->vmCacheSize(), m_nodeConfig->isAuthCheck(), executorName); + auto switchExecutorManager = + std::make_shared(executorFactory); + executorManager->addExecutor(executorName, switchExecutorManager); + m_switchExecutorManager = switchExecutorManager; + } + + // build node time synchronization tool + auto nodeTimeMaintenance = std::make_shared(); + + // build and init the pbft related modules + if (_nodeArchType == protocol::NodeArchitectureType::AIR) + { + m_pbftInitializer = std::make_shared(_nodeArchType, m_nodeConfig, + m_protocolInitializer, m_txpoolInitializer->txpool(), ledger, m_scheduler, + consensusStorage, m_frontServiceInitializer->front(), nodeTimeMaintenance); + auto nodeID = m_protocolInitializer->keyPair()->publicKey(); + auto frontService = m_frontServiceInitializer->front(); + auto groupID = m_nodeConfig->groupId(); + auto blockSync = + std::dynamic_pointer_cast(m_pbftInitializer->blockSync()); + + auto nodeProtocolInfo = g_BCOSConfig.protocolInfo(protocol::ProtocolModuleID::NodeService); + // registerNode when air node first start-up + _gateway->registerNode( + groupID, nodeID, blockSync->config()->nodeType(), frontService, nodeProtocolInfo); + INITIALIZER_LOG(INFO) << LOG_DESC("registerNode") << LOG_KV("group", groupID) + << LOG_KV("node", nodeID->hex()) + << LOG_KV("type", blockSync->config()->nodeType()); + // update the frontServiceInfo when nodeType changed + blockSync->config()->registerOnNodeTypeChanged( + [_gateway, groupID, nodeID, frontService, nodeProtocolInfo](protocol::NodeType _type) { + _gateway->registerNode(groupID, nodeID, _type, frontService, nodeProtocolInfo); + INITIALIZER_LOG(INFO) << LOG_DESC("registerNode") << LOG_KV("group", groupID) + << LOG_KV("node", nodeID->hex()) << LOG_KV("type", _type); + }); + } + else + { + m_pbftInitializer = std::make_shared(_nodeArchType, m_nodeConfig, + m_protocolInitializer, m_txpoolInitializer->txpool(), ledger, m_scheduler, + consensusStorage, m_frontServiceInitializer->front(), nodeTimeMaintenance); + } + if (_nodeArchType == bcos::protocol::NodeArchitectureType::MAX) + { + INITIALIZER_LOG(INFO) << LOG_DESC("Register switch handler in scheduler manager"); + // PBFT and scheduler are in the same process here, we just cast m_scheduler to + // SchedulerService + auto schedulerServer = + std::dynamic_pointer_cast(m_scheduler); + auto consensus = m_pbftInitializer->pbft(); + schedulerServer->registerOnSwitchTermHandler([consensus]( + bcos::protocol::BlockNumber blockNumber) { + INITIALIZER_LOG(DEBUG) + << LOG_BADGE("Switch") + << "Receive scheduler switch term notify of number " + std::to_string(blockNumber); + consensus->clearExceptionProposalState(blockNumber); + }); + } + // init the txpool + m_txpoolInitializer->init(m_pbftInitializer->sealer()); + + // Note: must init PBFT after txpool, in case of pbft calls txpool to verifyBlock before + // txpool init finished + m_pbftInitializer->init(); + + // init the frontService + m_frontServiceInitializer->init( + m_pbftInitializer->pbft(), m_pbftInitializer->blockSync(), m_txpoolInitializer->txpool()); + + if (m_nodeConfig->enableArchive()) + { + INITIALIZER_LOG(INFO) << LOG_BADGE("create archive service"); + m_archiveService = std::make_shared( + storage, ledger, m_nodeConfig->archiveListenIP(), m_nodeConfig->archiveListenPort()); + } +#ifdef WITH_LIGHTNODE + bcos::storage::StorageImpl storageWrapper(storage); + + auto anyHasher = m_protocolInitializer->cryptoSuite()->hashImpl()->hasher(); + std::visit( + [&](auto& hasher) { + using Hasher = std::remove_cvref_t; + auto ledger = + std::make_shared>( + std::move(storageWrapper), m_protocolInitializer->blockFactory(), storage); + ledger->setKeyPageSize(m_nodeConfig->keyPageSize()); + + auto txpool = m_txpoolInitializer->txpool(); + auto transactionPool = + std::make_shared>( + m_protocolInitializer->cryptoSuite(), txpool); + auto scheduler = std::make_shared>>( + m_scheduler, m_protocolInitializer->cryptoSuite()); + + m_lightNodeInitializer = std::make_shared(); + m_lightNodeInitializer->initLedgerServer( + std::dynamic_pointer_cast( + m_frontServiceInitializer->front()), + ledger, transactionPool, scheduler); + }, + anyHasher); +#endif +} + +void Initializer::initNotificationHandlers(bcos::rpc::RPCInterface::Ptr _rpc) +{ + // init handlers + auto nodeName = m_nodeConfig->nodeName(); + auto groupID = m_nodeConfig->groupId(); + auto schedulerFactory = + dynamic_pointer_cast(m_scheduler)->getFactory(); + // notify blockNumber + schedulerFactory->setBlockNumberReceiver( + [_rpc, groupID, nodeName](bcos::protocol::BlockNumber number) { + INITIALIZER_LOG(DEBUG) << "Notify blocknumber: " << number; + // Note: the interface will notify blockNumber to all rpc nodes in pro/max mode + _rpc->asyncNotifyBlockNumber(groupID, nodeName, number, [](bcos::Error::Ptr) {}); + }); + // notify transactions + auto txpool = m_txpoolInitializer->txpool(); + schedulerFactory->setTransactionNotifier( + [txpool](bcos::protocol::BlockNumber _blockNumber, + bcos::protocol::TransactionSubmitResultsPtr _result, + std::function _callback) { + // only response to the requester + txpool->asyncNotifyBlockResult(_blockNumber, _result, _callback); + }); + m_pbftInitializer->initNotificationHandlers(_rpc); +} + +void Initializer::initSysContract() +{ + // check is it deploy first time + std::promise> getNumberPromise; + m_ledger->asyncGetBlockNumber([&](Error::Ptr _error, protocol::BlockNumber _number) { + getNumberPromise.set_value(std::make_tuple(std::move(_error), _number)); + }); + auto getNumberTuple = getNumberPromise.get_future().get(); + if (std::get<0>(getNumberTuple) != nullptr || + std::get<1>(getNumberTuple) > SYS_CONTRACT_DEPLOY_NUMBER) + { + return; + } + auto block = m_protocolInitializer->blockFactory()->createBlock(); + block->blockHeader()->setNumber(SYS_CONTRACT_DEPLOY_NUMBER); + block->blockHeader()->setVersion(m_nodeConfig->compatibilityVersion()); + block->blockHeader()->calculateHash( + *m_protocolInitializer->blockFactory()->cryptoSuite()->hashImpl()); + + if (m_nodeConfig->compatibilityVersion() >= static_cast(BlockVersion::V3_1_VERSION)) + { + BfsInitializer::init( + SYS_CONTRACT_DEPLOY_NUMBER, m_protocolInitializer, m_nodeConfig, block); + } + + if (!m_nodeConfig->isWasm() && m_nodeConfig->isAuthCheck()) + { + // add auth deploy func here + AuthInitializer::init( + SYS_CONTRACT_DEPLOY_NUMBER, m_protocolInitializer, m_nodeConfig, block); + } + + + if (block->transactionsSize() > 0) + { + std::promise executedHeader; + m_scheduler->executeBlock(block, false, + [&](bcos::Error::Ptr&& _error, bcos::protocol::BlockHeader::Ptr&& _header, bool) { + if (_error) + { + BOOST_THROW_EXCEPTION( + BCOS_ERROR(-1, "SysInitializer: scheduler executeBlock error")); + } + INITIALIZER_LOG(INFO) + << LOG_BADGE("SysInitializer") << LOG_DESC("scheduler execute block success!") + << LOG_KV("blockHash", block->blockHeader()->hash().hex()); + executedHeader.set_value(std::move(_header)); + }); + auto header = executedHeader.get_future().get(); + + std::promise> committedConfig; + m_scheduler->commitBlock( + header, [&](Error::Ptr&& _error, bcos::ledger::LedgerConfig::Ptr&& _config) { + if (_error) + { + INITIALIZER_LOG(ERROR) << LOG_BADGE("SysInitializer") + << LOG_KV("errorMsg", _error->errorMessage()); + committedConfig.set_value(std::make_tuple(std::move(_error), nullptr)); + return; + } + committedConfig.set_value(std::make_tuple(nullptr, std::move(_config))); + }); + auto [error, newConfig] = committedConfig.get_future().get(); + if (error != nullptr && newConfig->blockNumber() != SYS_CONTRACT_DEPLOY_NUMBER) + { + INITIALIZER_LOG(ERROR) + << LOG_BADGE("SysInitializer") << LOG_DESC("Error in commitBlock") + << (error ? "errorMsg" + error->errorMessage() : "") + << LOG_KV("configNumber", newConfig->blockNumber()); + BOOST_THROW_EXCEPTION(BCOS_ERROR(-1, "SysInitializer commitBlock error")); + } + } +} + +void Initializer::start() +{ + if (m_txpoolInitializer) + { + m_txpoolInitializer->start(); + } + if (m_pbftInitializer) + { + m_pbftInitializer->start(); + } + + if (m_frontServiceInitializer) + { + m_frontServiceInitializer->start(); + } + if (m_archiveService) + { + m_archiveService->start(); + } +} + +void Initializer::stop() +{ + try + { + if (m_frontServiceInitializer) + { + m_frontServiceInitializer->stop(); + } + if (m_pbftInitializer) + { + m_pbftInitializer->stop(); + } + if (m_txpoolInitializer) + { + m_txpoolInitializer->stop(); + } + if (m_scheduler) + { + m_scheduler->stop(); + } + if (m_archiveService) + { + m_archiveService->stop(); + } + } + catch (std::exception const& e) + { + std::cout << "stop bcos-node failed for " << boost::diagnostic_information(e); + exit(-1); + } +} diff --git a/libinitializer/Initializer.h b/libinitializer/Initializer.h new file mode 100644 index 0000000..b8caef0 --- /dev/null +++ b/libinitializer/Initializer.h @@ -0,0 +1,107 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Initializer for all the modules + * @file Initializer.h + * @author: yujiechen + * @date 2021-06-11 + */ +#pragma once +#include "FrontServiceInitializer.h" +#include "PBFTInitializer.h" +#include "ProPBFTInitializer.h" +#include "ProtocolInitializer.h" +#include "TxPoolInitializer.h" +#include "tools/archive-tool/ArchiveService.h" +#include +#include +#include +#include +#ifdef WITH_LIGHTNODE +#include "LightNodeInitializer.h" +#endif + +namespace bcos +{ +namespace gateway +{ +class GatewayInterface; +} +namespace scheduler +{ +class SchedulerInterface; +} +namespace initializer +{ +class Initializer +{ +public: + using Ptr = std::shared_ptr; + Initializer() = default; + virtual ~Initializer() { stop(); } + + virtual void start(); + virtual void stop(); + + bcos::tool::NodeConfig::Ptr nodeConfig() { return m_nodeConfig; } + ProtocolInitializer::Ptr protocolInitializer() { return m_protocolInitializer; } + PBFTInitializer::Ptr pbftInitializer() { return m_pbftInitializer; } + TxPoolInitializer::Ptr txPoolInitializer() { return m_txpoolInitializer; } + + bcos::ledger::LedgerInterface::Ptr ledger() { return m_ledger; } + std::shared_ptr scheduler() { return m_scheduler; } + + FrontServiceInitializer::Ptr frontService() { return m_frontServiceInitializer; } + + void initAirNode(std::string const& _configFilePath, std::string const& _genesisFile, + std::shared_ptr _gateway, const std::string& _logPath); + void initMicroServiceNode(bcos::protocol::NodeArchitectureType _nodeArchType, + std::string const& _configFilePath, std::string const& _genesisFile, + std::string const& _privateKeyPath, const std::string& _logPath); + + virtual void initNotificationHandlers(bcos::rpc::RPCInterface::Ptr _rpc); + +public: + virtual void init(bcos::protocol::NodeArchitectureType _nodeArchType, + std::string const& _configFilePath, std::string const& _genesisFile, + std::shared_ptr _gateway, bool _airVersion, + const std::string& _logPath); + + virtual void initConfig(std::string const& _configFilePath, std::string const& _genesisFile, + std::string const& _privateKeyPath, bool _airVersion); + + /// NOTE: this should be last called + void initSysContract(); + +private: + bcos::tool::NodeConfig::Ptr m_nodeConfig; + ProtocolInitializer::Ptr m_protocolInitializer; + FrontServiceInitializer::Ptr m_frontServiceInitializer; + TxPoolInitializer::Ptr m_txpoolInitializer; + PBFTInitializer::Ptr m_pbftInitializer; +#ifdef WITH_LIGHTNODE + // Note: since LightNodeInitializer use weak_ptr of shared_from_this, this object must be exists + // for the whole life time + std::shared_ptr m_lightNodeInitializer; +#endif + bcos::ledger::LedgerInterface::Ptr m_ledger; + std::shared_ptr m_scheduler; + std::weak_ptr m_switchExecutorManager; + std::string const c_consensusStorageDBName = "consensus_log"; + std::string const c_fileSeparator = "/"; + std::shared_ptr m_archiveService = nullptr; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/LedgerInitializer.h b/libinitializer/LedgerInitializer.h new file mode 100644 index 0000000..68c914e --- /dev/null +++ b/libinitializer/LedgerInitializer.h @@ -0,0 +1,60 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief Initializer for the ledger + * @file LedgerInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos::initializer +{ +class LedgerInitializer +{ +public: + static std::shared_ptr build( + bcos::protocol::BlockFactory::Ptr blockFactory, + bcos::storage::StorageInterface::Ptr storage, bcos::tool::NodeConfig::Ptr nodeConfig) + { + bcos::storage::StorageImpl storageWrapper(storage); + + if (nodeConfig->smCryptoType()) + { + auto ledger = std::make_shared>( + std::move(storageWrapper), blockFactory, storage); + ledger->buildGenesisBlock(nodeConfig->ledgerConfig(), nodeConfig->txGasLimit(), + nodeConfig->genesisData(), nodeConfig->compatibilityVersionStr()); + + return ledger; + } + + auto ledger = std::make_shared>( + std::move(storageWrapper), blockFactory, storage); + ledger->buildGenesisBlock(nodeConfig->ledgerConfig(), nodeConfig->txGasLimit(), + nodeConfig->genesisData(), nodeConfig->compatibilityVersionStr()); + + return ledger; + } +}; +} // namespace bcos::initializer diff --git a/libinitializer/LightNodeInitializer.cpp b/libinitializer/LightNodeInitializer.cpp new file mode 100644 index 0000000..e659d9d --- /dev/null +++ b/libinitializer/LightNodeInitializer.cpp @@ -0,0 +1 @@ +#include "LightNodeInitializer.h" \ No newline at end of file diff --git a/libinitializer/LightNodeInitializer.h b/libinitializer/LightNodeInitializer.h new file mode 100644 index 0000000..9dee448 --- /dev/null +++ b/libinitializer/LightNodeInitializer.h @@ -0,0 +1,339 @@ +#pragma once + +#include + +#include "bcos-concepts/Exception.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::initializer +{ +class LightNodeInitializer : public std::enable_shared_from_this +{ +public: + // Note: FrontService is owned by Initializier for the entire lifetime + void initLedgerServer(std::shared_ptr front, + bcos::concepts::ledger::Ledger auto ledger, + std::shared_ptr>> + transactionPool, + std::shared_ptr>> + scheduler) + { + auto weakFront = std::weak_ptr(front); + auto self = std::weak_ptr(shared_from_this()); + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_GET_BLOCK, + [self, ledger, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& messageID, bytesConstRef data) { + auto init = self.lock(); + auto front = weakFront.lock(); + if (!front || !init) + { + return; + } + + bcostars::RequestBlock request; + init->decodeRequest( + request, front, protocol::LIGHTNODE_GET_BLOCK, nodeID, messageID, data); + bcos::task::wait(init->getBlock(std::move(front), ledger, std::move(nodeID), + std::string(messageID), std::move(request))); + }); + + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_GET_TRANSACTIONS, + [ledger, front]( + bcos::crypto::NodeIDPtr nodeID, const std::string& id, bytesConstRef data) { + task::wait([](auto ledger, auto front, auto nodeID, std::string id, + bytesConstRef data) -> task::Task { + bcostars::ResponseTransactions response; + + try + { + bcostars::RequestTransactions request; + bcos::concepts::serialize::decode(data, request); + + LIGHTNODE_LOG(INFO) << "Get transactions:" << request.hashes.size() << " | " + << request.withProof; + + co_await concepts::getRef(ledger).getTransactions( + request.hashes, response.transactions); + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(id, bcos::protocol::LIGHTNODE_GET_TRANSACTIONS, nodeID, + bcos::ref(responseBuffer), []([[maybe_unused]] Error::Ptr _error) {}); + }(ledger, front, std::move(nodeID), id, data)); + }); + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_GET_RECEIPTS, + [ledger, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& id, bytesConstRef data) { + task::wait([](auto ledger, auto weakFront, std::string id, auto nodeID, + bytesConstRef data) -> task::Task { + auto front = weakFront.lock(); + if (!front) + { + co_return; + } + + bcostars::ResponseReceipts response; + try + { + bcostars::RequestReceipts request; + bcos::concepts::serialize::decode(data, request); + + co_await concepts::getRef(ledger).getTransactions( + request.hashes, response.receipts); + } + catch (std::exception& e) + { + LIGHTNODE_LOG(ERROR) + << "Get receipt error!" << boost::diagnostic_information(e); + + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(id, bcos::protocol::LIGHTNODE_GET_RECEIPTS, nodeID, + bcos::ref(responseBuffer), {}); + }(ledger, weakFront, id, std::move(nodeID), data)); + }); + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_GET_STATUS, + [ledger, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& messageID, bytesConstRef data) { + auto front = weakFront.lock(); + if (!front) + { + return; + } + + task::wait([](decltype(ledger) ledger, std::shared_ptr front, + bcos::crypto::NodeIDPtr nodeID, std::string messageID, + bytesConstRef data) -> task::Task { + bcostars::ResponseGetStatus response; + + try + { + bcostars::RequestGetStatus request; + bcos::concepts::serialize::decode(data, request); + + auto status = co_await concepts::getRef(ledger).getStatus(); + response.total = status.total; + response.failed = status.failed; + response.blockNumber = status.blockNumber; + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(messageID, bcos::protocol::LIGHTNODE_GET_STATUS, + nodeID, bcos::ref(responseBuffer), + []([[maybe_unused]] const Error::Ptr& error) {}); + }(ledger, std::move(front), std::move(nodeID), std::string(messageID), data)); + }); + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_GET_ABI, + [ledger, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& id, bytesConstRef data) { + auto front = weakFront.lock(); + if (!front) + { + return; + } + task::wait([](decltype(ledger) ledger, std::shared_ptr front, + bcos::crypto::NodeIDPtr nodeID, std::string id, + bytesConstRef data) -> task::Task { + bcostars::ResponseGetABI response; + try + { + bcostars::RequestGetABI request; + bcos::concepts::serialize::decode(data, request); + auto abiStr = co_await concepts::getRef(ledger).getABI(request.contractAddress); + response.abiStr = abiStr; + LIGHTNODE_LOG(TRACE) << "client get ABI response is: " << response.abiStr; + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(id, bcos::protocol::LIGHTNODE_GET_ABI, + nodeID, bcos::ref(responseBuffer), + []([[maybe_unused]] const Error::Ptr& error) {}); + }(ledger, std::move(front), std::move(nodeID), std::string(id), data)); + }); + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_SEND_TRANSACTION, + [transactionPool, self, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& id, bytesConstRef data) { + auto front = weakFront.lock(); + auto init = self.lock(); + if (!front || !init) + { + return; + } + bcostars::RequestSendTransaction request; + init->decodeRequest( + request, front, protocol::LIGHTNODE_SEND_TRANSACTION, nodeID, id, data); + bcos::task::wait(init->submitTransaction( + front, transactionPool, nodeID, id, std::move(request))); + }); + + front->registerModuleMessageDispatcher(bcos::protocol::LIGHTNODE_CALL, + [self, scheduler, weakFront]( + bcos::crypto::NodeIDPtr nodeID, const std::string& id, bytesConstRef data) mutable { + auto front = weakFront.lock(); + auto init = self.lock(); + if (!front || !init) + { + return; + } + + bcostars::RequestSendTransaction request; + init->decodeRequest( + request, front, protocol::LIGHTNODE_CALL, nodeID, id, data); + bcos::task::wait(init->call(front, scheduler, nodeID, id, std::move(request))); + }); + } + +private: + template + bool decodeRequest(auto& request, std::shared_ptr front, + bcos::protocol::ModuleID moduleID, bcos::crypto::NodeIDPtr nodeID, const std::string& id, + bytesConstRef data) + { + bool success = true; + try + { + bcos::concepts::serialize::decode(data, request); + return success; + } + catch (std::exception const& e) + { + Response response; + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + success = false; + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse( + std::string(id), moduleID, nodeID, bcos::ref(responseBuffer), [](Error::Ptr) {}); + } + + return success; + } + + task::Task getBlock(std::shared_ptr front, + bcos::concepts::ledger::Ledger auto ledger, bcos::crypto::NodeIDPtr nodeID, + std::string messageID, bcostars::RequestBlock request) + { + bcostars::ResponseBlock response; + try + { + LIGHTNODE_LOG(INFO) << "Get block:" << request.blockNumber << " | " + << request.onlyHeader; + + if (request.onlyHeader) + { + co_await concepts::getRef(ledger).template getBlock( + request.blockNumber, response.block); + } + else + { + co_await concepts::getRef(ledger).template getBlock( + request.blockNumber, response.block); + } + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(messageID, bcos::protocol::LIGHTNODE_GET_BLOCK, nodeID, + bcos::ref(responseBuffer), [](Error::Ptr _error) { + if (_error) + {} + }); + } + + task::Task submitTransaction(std::shared_ptr front, + std::shared_ptr>> + transactionPool, + bcos::crypto::NodeIDPtr nodeID, std::string id, bcostars::RequestSendTransaction request) + { + bcostars::ResponseSendTransaction response; + try + { + LIGHTNODE_LOG(INFO) << "Request submit transaction: " << id; + co_await transactionPool->submitTransaction( + std::move(request.transaction), response.receipt); + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + LIGHTNODE_LOG(INFO) << "Response submit transaction: " << id << " | " + << responseBuffer.size(); + + front->asyncSendResponse(id, bcos::protocol::LIGHTNODE_SEND_TRANSACTION, nodeID, + bcos::ref(responseBuffer), [](Error::Ptr) {}); + } + + task::Task call(std::shared_ptr front, + std::shared_ptr>> + scheduler, + bcos::crypto::NodeIDPtr nodeID, std::string id, bcostars::RequestSendTransaction request) + { + bcostars::ResponseSendTransaction response; + try + { + co_await scheduler->call(request.transaction, response.receipt); + } + catch (std::exception& e) + { + response.error.errorCode = -1; + response.error.errorMessage = boost::diagnostic_information(e); + } + + bcos::bytes responseBuffer; + bcos::concepts::serialize::encode(response, responseBuffer); + front->asyncSendResponse(id, bcos::protocol::LIGHTNODE_CALL, nodeID, + bcos::ref(responseBuffer), [](Error::Ptr) {}); + } +}; +} // namespace bcos::initializer \ No newline at end of file diff --git a/libinitializer/PBFTInitializer.cpp b/libinitializer/PBFTInitializer.cpp new file mode 100644 index 0000000..db67edb --- /dev/null +++ b/libinitializer/PBFTInitializer.cpp @@ -0,0 +1,552 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the PBFT module + * @file PBFTInitializer.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "PBFTInitializer.h" +#include +#include +#include + +#ifdef WITH_TIKV +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::consensus; +using namespace bcos::sealer; +using namespace bcos::txpool; +using namespace bcos::sync; +using namespace bcos::ledger; +using namespace bcos::storage; +using namespace bcos::scheduler; +using namespace bcos::initializer; +using namespace bcos::group; +using namespace bcos::protocol; +using namespace bcos::election; + +PBFTInitializer::PBFTInitializer(bcos::protocol::NodeArchitectureType _nodeArchType, + bcos::tool::NodeConfig::Ptr _nodeConfig, ProtocolInitializer::Ptr _protocolInitializer, + bcos::txpool::TxPoolInterface::Ptr _txpool, std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::storage::StorageInterface::Ptr _storage, + std::shared_ptr _frontService, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : m_nodeArchType(_nodeArchType), + m_nodeConfig(std::move(_nodeConfig)), + m_protocolInitializer(std::move(_protocolInitializer)), + m_txpool(std::move(_txpool)), + m_ledger(std::move(_ledger)), + m_scheduler(std::move(_scheduler)), + m_storage(std::move(_storage)), + m_frontService(std::move(_frontService)), + m_nodeTimeMaintenance(std::move(_nodeTimeMaintenance)) +{ + m_groupInfoCodec = std::make_shared(); + createSealer(); + createPBFT(); + createSync(); + registerHandlers(); + initChainNodeInfo(m_nodeArchType, m_nodeConfig); +} + +std::string PBFTInitializer::generateGenesisConfig(bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + Json::Value genesisConfig; + genesisConfig["consensusType"] = _nodeConfig->consensusType(); + genesisConfig["blockTxCountLimit"] = _nodeConfig->ledgerConfig()->blockTxCountLimit(); + genesisConfig["txGasLimit"] = (int64_t)(_nodeConfig->txGasLimit()); + genesisConfig["consensusLeaderPeriod"] = _nodeConfig->ledgerConfig()->leaderSwitchPeriod(); + Json::Value sealerList(Json::arrayValue); + auto consensusNodeList = _nodeConfig->ledgerConfig()->consensusNodeList(); + for (auto const& node : consensusNodeList) + { + Json::Value sealer; + sealer["nodeID"] = node->nodeID()->hex(); + sealer["weight"] = node->weight(); + sealerList.append(sealer); + } + genesisConfig["sealerList"] = sealerList; + Json::FastWriter fastWriter; + std::string genesisConfigStr = fastWriter.write(genesisConfig); + return genesisConfigStr; +} +std::string PBFTInitializer::generateIniConfig(bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + Json::Value iniConfig; + Json::Value binaryInfo; + + // get the binaryInfo + binaryInfo["version"] = FISCO_BCOS_PROJECT_VERSION; + binaryInfo["gitCommitHash"] = FISCO_BCOS_COMMIT_HASH; + binaryInfo["platform"] = FISCO_BCOS_BUILD_PLATFORM; + binaryInfo["buildTime"] = FISCO_BCOS_BUILD_TIME; + iniConfig["binaryInfo"] = binaryInfo; + + iniConfig["chainID"] = _nodeConfig->chainId(); + iniConfig["groupID"] = _nodeConfig->groupId(); + iniConfig["smCryptoType"] = _nodeConfig->smCryptoType(); + iniConfig["isWasm"] = _nodeConfig->isWasm(); + iniConfig["isAuthCheck"] = _nodeConfig->isAuthCheck(); + iniConfig["isSerialExecute"] = _nodeConfig->isSerialExecute(); + iniConfig["nodeName"] = _nodeConfig->nodeName(); + iniConfig["nodeID"] = m_protocolInitializer->keyPair()->publicKey()->hex(); + iniConfig["rpcServiceName"] = _nodeConfig->rpcServiceName(); + iniConfig["gatewayServiceName"] = _nodeConfig->gatewayServiceName(); + Json::FastWriter fastWriter; + std::string iniConfigStr = fastWriter.write(iniConfig); + return iniConfigStr; +} + +void PBFTInitializer::initChainNodeInfo( + bcos::protocol::NodeArchitectureType _nodeArchType, bcos::tool::NodeConfig::Ptr _nodeConfig) +{ + m_groupInfo = std::make_shared(_nodeConfig->chainId(), _nodeConfig->groupId()); + m_groupInfo->setGenesisConfig(generateGenesisConfig(_nodeConfig)); + m_groupInfo->setWasm(_nodeConfig->isWasm()); + int32_t nodeType = bcos::group::NodeCryptoType::NON_SM_NODE; + if (_nodeConfig->smCryptoType()) + { + nodeType = bcos::group::NodeCryptoType::SM_NODE; + } + bool microServiceMode = true; + if (_nodeArchType == bcos::protocol::NodeArchitectureType::AIR) + { + microServiceMode = false; + } + + m_nodeInfo = std::make_shared(_nodeConfig->nodeName(), nodeType); + m_nodeInfo->setNodeID(m_protocolInitializer->keyPair()->publicKey()->hex()); + + m_nodeInfo->setIniConfig(generateIniConfig(_nodeConfig)); + m_nodeInfo->setMicroService(microServiceMode); + m_nodeInfo->setNodeType(m_blockSync->config()->nodeType()); + m_nodeInfo->setNodeCryptoType( + (_nodeConfig->smCryptoType() ? NodeCryptoType::SM_NODE : NON_SM_NODE)); + if (_nodeArchType == bcos::protocol::NodeArchitectureType::AIR) + { + m_nodeInfo->appendServiceInfo(SCHEDULER, SCHEDULER_SERVANT_NAME); + m_nodeInfo->appendServiceInfo(LEDGER, LEDGER_SERVANT_NAME); + m_nodeInfo->appendServiceInfo(FRONT, FRONT_SERVANT_NAME); + m_nodeInfo->appendServiceInfo(TXPOOL, TXPOOL_SERVANT_NAME); + } + // Note: must set the serviceInfo for rpc/gateway to pass the groupInfo check when sync latest + // groupInfo to rpc/gateway service + m_nodeInfo->appendServiceInfo(GATEWAY, m_nodeConfig->gatewayServiceName()); + m_nodeInfo->appendServiceInfo(RPC, m_nodeConfig->rpcServiceName()); + // set protocolInfo + auto nodeProtocolInfo = g_BCOSConfig.protocolInfo(ProtocolModuleID::NodeService); + m_nodeInfo->setNodeProtocol(*nodeProtocolInfo); + m_nodeInfo->setCompatibilityVersion(m_pbft->compatibilityVersion()); + m_groupInfo->appendNodeInfo(m_nodeInfo); + INITIALIZER_LOG(INFO) << LOG_DESC("PBFTInitializer::initChainNodeInfo") + << LOG_KV("nodeType", m_nodeInfo->nodeType()) + << LOG_KV("nodeCryptoType", m_nodeInfo->nodeCryptoType()) + << LOG_KV("nodeName", _nodeConfig->nodeName()) + << LOG_KV("compatibilityVersion", m_nodeInfo->compatibilityVersion()); +} + +void PBFTInitializer::start() +{ + if (!m_nodeConfig->enableFailOver()) + { + m_blockSync->enableAsMaster(true); + // Note: since enableAsMasterNode will recover pbftState and execute the recovered proposal, + // should call this after every module and handlers has been inited completed + m_pbft->enableAsMasterNode(true); + } + m_sealer->start(); + m_blockSync->start(); + m_pbft->start(); + if (m_leaderElection) + { + m_leaderElection->start(); + } +} + +void PBFTInitializer::stop() +{ + if (m_leaderElection) + { + m_leaderElection->stop(); + } + m_sealer->stop(); + m_blockSync->stop(); + m_pbft->stop(); +} + +void PBFTInitializer::init() +{ + m_sealer->init(m_pbft); + m_blockSync->init(); + m_pbft->init(); + if (m_nodeConfig->enableFailOver()) + { + initConsensusFailOver(m_protocolInitializer->keyPair()->publicKey()); + } + syncGroupNodeInfo(); +} + +void PBFTInitializer::registerHandlers() +{ + // handler to notify the sealer reset the sealing proposals + std::weak_ptr weakedSealer = m_sealer; + m_pbft->registerSealerResetNotifier([weakedSealer]( + std::function _onRecv) { + try + { + auto sealer = weakedSealer.lock(); + if (!sealer) + { + return; + } + sealer->asyncResetSealing(_onRecv); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) << LOG_DESC("call asyncResetSealing to the sealer exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + + // register handlers for the consensus to interact with the sealer + m_pbft->registerSealProposalNotifier( + [weakedSealer](size_t _proposalIndex, size_t _proposalEndIndex, size_t _maxTxsToSeal, + std::function _onRecvResponse) { + try + { + auto sealer = weakedSealer.lock(); + if (!sealer) + { + return; + } + sealer->asyncNotifySealProposal( + _proposalIndex, _proposalEndIndex, _maxTxsToSeal, _onRecvResponse); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) << LOG_DESC("call notify proposal sealing exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + + // the consensus module notify the latest blockNumber to the sealer + m_pbft->registerStateNotifier([weakedSealer](bcos::protocol::BlockNumber _blockNumber) { + try + { + auto sealer = weakedSealer.lock(); + if (!sealer) + { + return; + } + sealer->asyncNoteLatestBlockNumber(_blockNumber); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("call notify the latest block number to the sealer exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + + // the consensus moudle notify new block to the sync module + std::weak_ptr weakedSync = m_blockSync; + m_pbft->registerNewBlockNotifier([weakedSync](bcos::ledger::LedgerConfig::Ptr _ledgerConfig, + std::function _onRecv) { + try + { + auto sync = weakedSync.lock(); + if (!sync) + { + return; + } + sync->asyncNotifyNewBlock(_ledgerConfig, _onRecv); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("call notify the latest block to the sync module exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + + m_pbft->registerFaultyDiscriminator([weakedSync](bcos::crypto::NodeIDPtr _nodeID) -> bool { + try + { + auto sync = weakedSync.lock(); + if (!sync) + { + return false; + } + return sync->faultyNode(_nodeID); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("determine the node is faulty or not through the sync module exception") + << LOG_KV("node", _nodeID->shortHex()) + << LOG_KV("error", boost::diagnostic_information(e)); + } + return false; + }); + + m_pbft->registerCommittedProposalNotifier( + [weakedSync](bcos::protocol::BlockNumber _committedProposal, + std::function _onRecv) { + try + { + auto sync = weakedSync.lock(); + if (!sync) + { + return; + } + sync->asyncNotifyCommittedIndex(_committedProposal, _onRecv); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) << LOG_DESC( + "call notify the latest committed proposal index " + "to the sync module exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + m_txpool->registerTxsCleanUpSwitch([this]() -> bool { + auto config = m_pbft->pbftEngine()->pbftConfig(); + // should clean up expired txs periodically for non-consensus node + if (!config->isConsensusNode()) + { + return true; + } + // clean up the expired txs for the consensus-timeout node + return config->timeout(); + }); +} + +void PBFTInitializer::initNotificationHandlers(bcos::rpc::RPCInterface::Ptr _rpc) +{ + // version notification + m_pbft->registerVersionInfoNotification([_rpc, this](uint32_t _version) { + // Note: the nodeInfo and the groupInfo are mutable + auto nodeInfo = m_groupInfo->nodeInfo(m_nodeConfig->nodeName()); + // Note: notify groupInfo to all rpc nodes in pro/max mode + nodeInfo->setCompatibilityVersion(_version); + _rpc->asyncNotifyGroupInfo(m_groupInfo, [_version](bcos::Error::Ptr&& _error) { + if (!_error) + { + INITIALIZER_LOG(INFO) << LOG_DESC("Election versionInfoNotification success") + << LOG_KV("version", _version); + return; + } + INITIALIZER_LOG(WARNING) + << LOG_DESC("Election versionInfoNotification error") << LOG_KV("version", _version) + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + }); + onGroupInfoChanged(); + }); + + std::weak_ptr weakTxPool = m_txpool; + m_pbft->registerTxsStatusSyncHandler([weakTxPool]() { + auto txpool = weakTxPool.lock(); + if (!txpool) + { + return; + } + txpool->tryToSyncTxsFromPeers(); + }); +} + +void PBFTInitializer::createSealer() +{ + // create sealer + auto sealerFactory = std::make_shared(m_protocolInitializer->blockFactory(), + m_txpool, m_nodeConfig->minSealTime(), m_nodeTimeMaintenance); + m_sealer = sealerFactory->createSealer(); +} + +void PBFTInitializer::createPBFT() +{ + auto keyPair = m_protocolInitializer->keyPair(); + auto kvStorage = std::make_shared(m_storage); + // create pbft + auto pbftFactory = std::make_shared(m_protocolInitializer->cryptoSuite(), + m_protocolInitializer->keyPair(), m_frontService, kvStorage, m_ledger, m_scheduler, + m_txpool, m_protocolInitializer->blockFactory(), m_protocolInitializer->txResultFactory()); + + m_pbft = pbftFactory->createPBFT(); + auto pbftConfig = m_pbft->pbftEngine()->pbftConfig(); + pbftConfig->setCheckPointTimeoutInterval(m_nodeConfig->checkPointTimeoutInterval()); + pbftConfig->setMinSealTime(m_nodeConfig->minSealTime()); +} + +void PBFTInitializer::createSync() +{ + // create sync + auto keyPair = m_protocolInitializer->keyPair(); + auto blockSyncFactory = std::make_shared(keyPair->publicKey(), + m_protocolInitializer->blockFactory(), m_protocolInitializer->txResultFactory(), m_ledger, + m_txpool, m_frontService, m_scheduler, m_pbft, m_nodeTimeMaintenance); + m_blockSync = blockSyncFactory->createBlockSync(); +} + +std::shared_ptr PBFTInitializer::txpool() +{ + return m_txpool; +} +std::shared_ptr PBFTInitializer::blockSync() +{ + return m_blockSync; +} +std::shared_ptr PBFTInitializer::pbft() +{ + return m_pbft; +} +std::shared_ptr PBFTInitializer::sealer() +{ + return m_sealer; +} + +// sync groupNodeInfo from the gateway +void PBFTInitializer::syncGroupNodeInfo() +{ + // Note: In air mode, the groupNodeInfo must be successful + auto self = std::weak_ptr(shared_from_this()); + m_frontService->asyncGetGroupNodeInfo( + [self](Error::Ptr _error, bcos::gateway::GroupNodeInfo::Ptr _groupNodeInfo) { + auto pbftInit = self.lock(); + if (!pbftInit) + { + return; + } + if (_error != nullptr) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("asyncGetGroupNodeInfo failed") + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + return; + } + try + { + if (!_groupNodeInfo || _groupNodeInfo->nodeIDList().size() == 0) + { + return; + } + NodeIDSet nodeIdSet; + auto const& nodeIDList = _groupNodeInfo->nodeIDList(); + if (nodeIDList.size() == 0) + { + return; + } + for (auto const& nodeIDStr : nodeIDList) + { + auto nodeID = + pbftInit->m_protocolInitializer->cryptoSuite()->keyFactory()->createKey( + fromHex(nodeIDStr)); + nodeIdSet.insert(nodeID); + } + // the blockSync module set the connected node list + pbftInit->m_blockSync->config()->setConnectedNodeList(std::move(nodeIdSet)); + // the txpool module set the connected node list + auto txpool = std::dynamic_pointer_cast(pbftInit->m_txpool); + txpool->transactionSync()->config()->setConnectedNodeList(std::move(nodeIdSet)); + INITIALIZER_LOG(INFO) << LOG_DESC("syncGroupNodeInfo for block sync and txpool") + << LOG_KV("connectedSize", nodeIdSet.size()); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) << LOG_DESC("asyncGetGroupNodeInfo exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); +} + +void PBFTInitializer::onGroupInfoChanged() +{ + if (!m_leaderElection) + { + return; + } + // failover enabled, should sync the latest information to the etcd if the node is + // leader + INITIALIZER_LOG(INFO) << LOG_DESC("Election onGroupInfoChanged, update the memberConfig"); + std::string modifiedConfig; + m_groupInfoCodec->serialize(modifiedConfig, m_groupInfo); + auto memberInfo = m_memberFactory->createMember(); + memberInfo->setMemberID(m_nodeConfig->memberID()); + memberInfo->setMemberConfig(modifiedConfig); + m_leaderElection->updateSelfConfig(memberInfo); +} + +void PBFTInitializer::initConsensusFailOver(KeyInterface::Ptr _nodeID) +{ + m_memberFactory = std::make_shared(); + +#ifdef WITH_TIKV + auto leaderElectionFactory = std::make_shared(m_memberFactory); +#endif + // leader key: /${chainID}/consensus/${nodeID} + std::string leaderKey = + "/" + m_nodeConfig->chainId() + bcos::election::CONSENSUS_LEADER_DIR + _nodeID->hex(); + + std::string nodeConfig; + m_groupInfoCodec->serialize(nodeConfig, m_groupInfo); + +#ifdef WITH_TIKV + m_leaderElection = leaderElectionFactory->createLeaderElection(m_nodeConfig->memberID(), + nodeConfig, m_nodeConfig->failOverClusterUrl(), leaderKey, "consensus_fault_tolerance", + m_nodeConfig->leaseTTL(), m_nodeConfig->pdCaPath(), m_nodeConfig->pdCertPath(), + m_nodeConfig->pdKeyPath()); + + // register the handler + m_leaderElection->registerOnCampaignHandler( + [this](bool _success, bcos::protocol::MemberInterface::Ptr _leader) { + m_pbft->enableAsMasterNode(_success); + m_blockSync->enableAsMaster(_success); + INITIALIZER_LOG(INFO) << LOG_DESC("onCampaignHandler") << LOG_KV("success", _success) + << LOG_KV("leader", _leader ? _leader->memberID() : "None"); + if (!_success) + { + return; + } + auto schedulerManager = + std::dynamic_pointer_cast(m_scheduler); + schedulerManager->asyncSwitchTerm(_leader->seq(), [_leader](Error::Ptr&& error) { + INITIALIZER_LOG(INFO) + << "Notify scheduler switch " << (error ? "failed" : "success") << " with" + << LOG_KV("seq", _leader->seq()); + }); + }); + INITIALIZER_LOG(INFO) << LOG_DESC("initConsensusFailOver") << LOG_KV("leaderKey", leaderKey) + << LOG_KV("nodeConfig", nodeConfig); +#endif +} diff --git a/libinitializer/PBFTInitializer.h b/libinitializer/PBFTInitializer.h new file mode 100644 index 0000000..a0bd652 --- /dev/null +++ b/libinitializer/PBFTInitializer.h @@ -0,0 +1,130 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the PBFT module + * @file PBFTInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include "Common.h" +#include "bcos-framework/rpc/RPCInterface.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace sealer +{ +class Sealer; +} +namespace sync +{ +class BlockSync; +} +namespace consensus +{ +class PBFTImpl; +} + +namespace initializer +{ +class PBFTInitializer : public std::enable_shared_from_this +{ +public: + using Ptr = std::shared_ptr; + PBFTInitializer(bcos::protocol::NodeArchitectureType _nodeArchType, + bcos::tool::NodeConfig::Ptr _nodeConfig, ProtocolInitializer::Ptr _protocolInitializer, + bcos::txpool::TxPoolInterface::Ptr _txpool, std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::storage::StorageInterface::Ptr _storage, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance); + + virtual ~PBFTInitializer() { stop(); } + + virtual void init(); + + virtual void start(); + virtual void stop(); + + bcos::txpool::TxPoolInterface::Ptr txpool(); + bcos::sync::BlockSyncInterface::Ptr blockSync(); + bcos::consensus::ConsensusInterface::Ptr pbft(); + bcos::sealer::SealerInterface::Ptr sealer(); + + bcos::protocol::BlockFactory::Ptr blockFactory() + { + return m_protocolInitializer->blockFactory(); + } + bcos::crypto::KeyFactory::Ptr keyFactory() { return m_protocolInitializer->keyFactory(); } + + bcos::group::GroupInfo::Ptr groupInfo() { return m_groupInfo; } + bcos::group::ChainNodeInfo::Ptr nodeInfo() { return m_nodeInfo; } + virtual void onGroupInfoChanged(); + virtual void initNotificationHandlers(bcos::rpc::RPCInterface::Ptr _rpc); + +protected: + virtual void initChainNodeInfo(bcos::protocol::NodeArchitectureType _nodeArchType, + bcos::tool::NodeConfig::Ptr _nodeConfig); + virtual void createSealer(); + virtual void createPBFT(); + virtual void createSync(); + virtual void registerHandlers(); + std::string generateGenesisConfig(bcos::tool::NodeConfig::Ptr _nodeConfig); + std::string generateIniConfig(bcos::tool::NodeConfig::Ptr _nodeConfig); + + void syncGroupNodeInfo(); + virtual void initConsensusFailOver(bcos::crypto::KeyInterface::Ptr _nodeID); + +protected: + bcos::protocol::NodeArchitectureType m_nodeArchType; + bcos::tool::NodeConfig::Ptr m_nodeConfig; + ProtocolInitializer::Ptr m_protocolInitializer; + + bcos::txpool::TxPoolInterface::Ptr m_txpool; + // Note: PBFT and other modules (except rpc and gateway) access ledger with bcos-ledger SDK + std::shared_ptr m_ledger; + bcos::scheduler::SchedulerInterface::Ptr m_scheduler; + bcos::storage::StorageInterface::Ptr m_storage; + bcos::front::FrontServiceInterface::Ptr m_frontService; + + std::shared_ptr m_sealer; + std::shared_ptr m_blockSync; + std::shared_ptr m_pbft; + + bcos::group::GroupInfo::Ptr m_groupInfo; + bcos::group::ChainNodeInfo::Ptr m_nodeInfo; + + bcos::group::GroupInfoCodec::Ptr m_groupInfoCodec; + bcos::protocol::MemberFactoryInterface::Ptr m_memberFactory; + bcos::election::LeaderElectionInterface::Ptr m_leaderElection; + bcos::tool::NodeTimeMaintenance::Ptr m_nodeTimeMaintenance; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/ProPBFTInitializer.cpp b/libinitializer/ProPBFTInitializer.cpp new file mode 100644 index 0000000..de7a305 --- /dev/null +++ b/libinitializer/ProPBFTInitializer.cpp @@ -0,0 +1,167 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the PBFT module + * @file ProPBFTInitializer.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "ProPBFTInitializer.h" +#include "bcos-framework/protocol/ServiceDesc.h" +#include "bcos-utilities/Exceptions.h" +#include "fisco-bcos-tars-service/Common/TarsUtils.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::protocol; +using namespace bcos::crypto; +using namespace bcos::initializer; + +ProPBFTInitializer::ProPBFTInitializer(bcos::protocol::NodeArchitectureType _nodeArchType, + bcos::tool::NodeConfig::Ptr _nodeConfig, ProtocolInitializer::Ptr _protocolInitializer, + bcos::txpool::TxPoolInterface::Ptr _txpool, std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::storage::StorageInterface::Ptr _storage, + std::shared_ptr _frontService, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance) + : PBFTInitializer(_nodeArchType, _nodeConfig, _protocolInitializer, _txpool, _ledger, _scheduler, + _storage, _frontService, _nodeTimeMaintenance) +{ + m_timer = std::make_shared(m_timerSchedulerInterval, "node info report"); + + std::vector endPoints; + auto withoutTarsFramework = m_nodeConfig->withoutTarsFramework(); + + // init rpc client + auto rpcServiceName = m_nodeConfig->rpcServiceName(); + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::RPC_NAME, endPoints); + auto rpcServicePrx = bcostars::createServantProxy( + withoutTarsFramework, rpcServiceName, endPoints); + m_rpc = std::make_shared(rpcServicePrx, rpcServiceName); + + auto gatewayServiceName = m_nodeConfig->gatewayServiceName(); + m_nodeConfig->getTarsClientProxyEndpoints(bcos::protocol::GATEWAY_NAME, endPoints); + auto gatewayServicePrx = bcostars::createServantProxy( + withoutTarsFramework, gatewayServiceName, endPoints); + m_gateway = + std::make_shared(gatewayServicePrx, gatewayServiceName); +} + +void ProPBFTInitializer::scheduledTask() +{ + if (m_leaderElection && m_leaderElection->electionClusterOk()) + { + m_timer->stop(); + return; + } + // not enable failover, report nodeInfo to rpc/gw periodly + reportNodeInfo(); + m_timer->restart(); + return; +} + +void ProPBFTInitializer::reportNodeInfo() +{ + // notify groupInfo to rpc + m_rpc->asyncNotifyGroupInfo(m_groupInfo, [](bcos::Error::Ptr&& _error) { + if (_error) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("asyncNotifyGroupInfo to rpc error") + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + } + }); + + // notify groupInfo to gateway + m_gateway->asyncNotifyGroupInfo(m_groupInfo, [](bcos::Error::Ptr&& _error) { + if (_error) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("asyncNotifyGroupInfo to gateway error") + << LOG_KV("code", _error->errorCode()) << LOG_KV("msg", _error->errorMessage()); + } + }); +} + +void ProPBFTInitializer::start() +{ + PBFTInitializer::start(); + if (m_timer && !m_nodeConfig->enableFailOver()) + { + m_timer->start(); + } +} + +void ProPBFTInitializer::stop() +{ + if (m_timer) + { + m_timer->stop(); + } + PBFTInitializer::stop(); +} + +void ProPBFTInitializer::onGroupInfoChanged() +{ + if (!m_leaderElection || !m_leaderElection->electionClusterOk()) + { + reportNodeInfo(); + return; + } + PBFTInitializer::onGroupInfoChanged(); +} + + +void ProPBFTInitializer::init() +{ + m_timer->registerTimeoutHandler(boost::bind(&ProPBFTInitializer::scheduledTask, this)); + m_blockSync->config()->registerOnNodeTypeChanged([this](bcos::protocol::NodeType _type) { + INITIALIZER_LOG(INFO) << LOG_DESC("OnNodeTypeChange") << LOG_KV("type", _type) + << LOG_KV("nodeName", m_nodeConfig->nodeName()); + auto nodeInfo = m_groupInfo->nodeInfo(m_nodeConfig->nodeName()); + if (!nodeInfo) + { + INITIALIZER_LOG(WARNING) << LOG_DESC("failed to find the given node information") + << LOG_KV("node", m_nodeConfig->nodeName()); + return; + } + nodeInfo->setNodeType(_type); + onGroupInfoChanged(); + }); + PBFTInitializer::init(); + // Note: m_leaderElection is created after PBFTInitializer::init + if (m_leaderElection) + { + m_leaderElection->registerOnElectionClusterException([this]() { + INITIALIZER_LOG(INFO) << LOG_DESC("OnElectionClusterException") + << LOG_KV("nodeName", m_nodeConfig->nodeName()); + }); + m_leaderElection->registerOnElectionClusterRecover([]() { + INITIALIZER_LOG(INFO) << LOG_DESC( + "OnElectionClusterRecover: stop reportNodeInfo to rpc/gateway"); + }); + } + else + { + reportNodeInfo(); + } +} \ No newline at end of file diff --git a/libinitializer/ProPBFTInitializer.h b/libinitializer/ProPBFTInitializer.h new file mode 100644 index 0000000..00429da --- /dev/null +++ b/libinitializer/ProPBFTInitializer.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the PBFT module + * @file ProPBFTInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include "libinitializer/PBFTInitializer.h" +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace initializer +{ +class ProPBFTInitializer : public PBFTInitializer +{ +public: + using Ptr = std::shared_ptr; + ProPBFTInitializer(bcos::protocol::NodeArchitectureType _nodeArchType, + bcos::tool::NodeConfig::Ptr _nodeConfig, ProtocolInitializer::Ptr _protocolInitializer, + bcos::txpool::TxPoolInterface::Ptr _txpool, std::shared_ptr _ledger, + bcos::scheduler::SchedulerInterface::Ptr _scheduler, + bcos::storage::StorageInterface::Ptr _storage, + std::shared_ptr _frontService, + bcos::tool::NodeTimeMaintenance::Ptr _nodeTimeMaintenance); + + virtual ~ProPBFTInitializer() { stop(); } + + void init() override; + + void start() override; + void stop() override; + +protected: + // the task triggered by the timer periodically + virtual void scheduledTask(); + virtual void reportNodeInfo(); + + void onGroupInfoChanged() override; + +private: + std::shared_ptr m_timer; + uint64_t m_timerSchedulerInterval = 3000; + + bcos::gateway::GatewayInterface::Ptr m_gateway; + bcos::rpc::RPCInterface::Ptr m_rpc; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/ProtocolInitializer.cpp b/libinitializer/ProtocolInitializer.cpp new file mode 100644 index 0000000..42d5122 --- /dev/null +++ b/libinitializer/ProtocolInitializer.cpp @@ -0,0 +1,158 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the protocol module + * @file ProtocolInitializer.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include +#include + +#include "bcos-crypto/hasher/OpenSSLHasher.h" +#include "libinitializer/Common.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcostars::protocol; +using namespace bcos::initializer; +using namespace bcos::crypto; +using namespace bcos::tool; +using namespace bcos::security; + +ProtocolInitializer::ProtocolInitializer() + : m_keyFactory(std::make_shared()) +{} +void ProtocolInitializer::init(NodeConfig::Ptr _nodeConfig) +{ + m_hsmEnable = _nodeConfig->hsmEnable(); + // TODO: ed25519 + if (_nodeConfig->smCryptoType()) + { + if (m_hsmEnable) + { + m_hsmLibPath = _nodeConfig->hsmLibPath(); + m_keyIndex = _nodeConfig->keyIndex(); + m_password = _nodeConfig->password(); + createHsmSMCryptoSuite(); + INITIALIZER_LOG(INFO) << LOG_DESC("begin init hsm sm crypto suite"); + } + else + { + createSMCryptoSuite(); + INITIALIZER_LOG(INFO) << LOG_DESC("begin init sm crypto suite"); + } + } + else + { + createCryptoSuite(); + } + INITIALIZER_LOG(INFO) << LOG_DESC("init crypto suite success"); + + if (true == _nodeConfig->storageSecurityEnable()) + { + m_dataEncryption = std::make_shared(_nodeConfig); + m_dataEncryption->init(); + + INITIALIZER_LOG(INFO) << LOG_DESC( + "storage_security.enable = true, init data encryption success"); + } + + // create the block factory + // TODO: pb/tars option + auto blockHeaderFactory = std::make_shared(m_cryptoSuite); + auto transactionFactory = std::make_shared(m_cryptoSuite); + auto receiptFactory = std::make_shared(m_cryptoSuite); + m_blockFactory = std::make_shared( + m_cryptoSuite, blockHeaderFactory, transactionFactory, receiptFactory); + + m_cryptoSuite->setKeyFactory(m_keyFactory); + auto txResultFactory = std::make_shared(); + m_txResultFactory = txResultFactory; + txResultFactory->setCryptoSuite(m_cryptoSuite); + + INITIALIZER_LOG(INFO) << LOG_DESC("init blockFactory success"); +} + +void ProtocolInitializer::createCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto encryptImpl = std::make_shared(); + m_cryptoSuite = std::make_shared(hashImpl, signatureImpl, encryptImpl); +} + +void ProtocolInitializer::createSMCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(); + auto encryptImpl = std::make_shared(); + m_cryptoSuite = std::make_shared(hashImpl, signatureImpl, encryptImpl); +} + +void ProtocolInitializer::createHsmSMCryptoSuite() +{ + auto hashImpl = std::make_shared(); + auto signatureImpl = std::make_shared(m_hsmLibPath); + auto encryptImpl = std::make_shared(m_hsmLibPath); + m_cryptoSuite = std::make_shared(hashImpl, signatureImpl, encryptImpl); +} + +void ProtocolInitializer::loadKeyPair(std::string const& _privateKeyPath) +{ + if (m_hsmEnable) + { + // Create key pair according to the key index which inside HSM(Hardware Secure Machine) + m_keyPair = dynamic_pointer_cast(m_cryptoSuite->signatureImpl()) + ->createKeyPair(m_keyIndex, m_password); + INITIALIZER_LOG(INFO) << METRIC << LOG_DESC("loadKeyPair from HSM") + << LOG_KV("lib_path", m_hsmLibPath) << LOG_KV("keyIndex", m_keyIndex) + << LOG_KV("HSM password", m_password); + } + else + { + auto privateKeyData = + loadPrivateKey(_privateKeyPath, c_hexedPrivateKeySize, m_dataEncryption); + if (!privateKeyData) + { + INITIALIZER_LOG(INFO) << LOG_DESC("loadKeyPair failed") + << LOG_KV("privateKeyPath", _privateKeyPath); + throw std::runtime_error("loadKeyPair failed, keyPair path: " + _privateKeyPath); + } + INITIALIZER_LOG(INFO) << LOG_DESC("loadKeyPair from privateKey") + << LOG_KV("privateKeySize", privateKeyData->size()) + << LOG_KV("enableStorageSecurity", m_dataEncryption ? true : false); + auto privateKey = m_keyFactory->createKey(*privateKeyData); + m_keyPair = m_cryptoSuite->signatureImpl()->createKeyPair(privateKey); + INITIALIZER_LOG(INFO) << METRIC << LOG_DESC("loadKeyPair from privateKeyPath") + << LOG_KV("privateKeyPath", _privateKeyPath); + } + + INITIALIZER_LOG(INFO) << METRIC << LOG_DESC("loadKeyPair success") + << LOG_KV("publicKey", m_keyPair->publicKey()->hex()); +} \ No newline at end of file diff --git a/libinitializer/ProtocolInitializer.h b/libinitializer/ProtocolInitializer.h new file mode 100644 index 0000000..e99c6db --- /dev/null +++ b/libinitializer/ProtocolInitializer.h @@ -0,0 +1,77 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the protocol module + * @file ProtocolInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace initializer +{ +class ProtocolInitializer +{ +public: + using Ptr = std::shared_ptr; + ProtocolInitializer(); + virtual ~ProtocolInitializer() {} + + virtual void init(bcos::tool::NodeConfig::Ptr _nodeConfig); + void loadKeyPair(std::string const& _privateKeyPath); + + bcos::crypto::CryptoSuite::Ptr cryptoSuite() { return m_cryptoSuite; } + bcos::protocol::BlockFactory::Ptr blockFactory() { return m_blockFactory; } + bcos::protocol::TransactionSubmitResultFactory::Ptr txResultFactory() + { + return m_txResultFactory; + } + + bcos::crypto::KeyPairInterface::Ptr keyPair() const { return m_keyPair; } + bool hsmEnable() const { return m_hsmEnable; } + const std::string& hsmLibPath() const { return m_hsmLibPath; } + int keyIndex() const { return m_keyIndex; } + const std::string& password() const { return m_password; } + bcos::crypto::KeyFactory::Ptr keyFactory() const { return m_keyFactory; } + bcos::security::DataEncryptInterface::Ptr dataEncryption() const { return m_dataEncryption; } + +private: + void createCryptoSuite(); + void createSMCryptoSuite(); + void createHsmSMCryptoSuite(); + +private: + bcos::crypto::KeyFactory::Ptr m_keyFactory; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + bcos::protocol::BlockFactory::Ptr m_blockFactory; + bcos::protocol::TransactionSubmitResultFactory::Ptr m_txResultFactory; + bcos::crypto::KeyPairInterface::Ptr m_keyPair; + size_t c_hexedPrivateKeySize = 64; + bcos::security::DataEncryptInterface::Ptr m_dataEncryption{nullptr}; + bool m_hsmEnable; + std::string m_hsmLibPath; + int m_keyIndex; + std::string m_password; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libinitializer/SchedulerInitializer.h b/libinitializer/SchedulerInitializer.h new file mode 100644 index 0000000..b92a19e --- /dev/null +++ b/libinitializer/SchedulerInitializer.h @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the dispatcher and executor + * @file DispatcherInitializer.h + * @author: yujiechen + * @date 2021-06-21 + */ +#pragma once +#include "ProtocolInitializer.h" +#include "bcos-framework/protocol/BlockFactory.h" +#include "bcos-protocol/TransactionSubmitResultFactoryImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::initializer +{ +class SchedulerInitializer +{ +public: + static bcos::scheduler::SchedulerInterface::Ptr build( + bcos::scheduler::ExecutorManager::Ptr executorManager, + bcos::ledger::LedgerInterface::Ptr _ledger, + bcos::storage::TransactionalStorageInterface::Ptr storage, + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + bcos::protocol::BlockFactory::Ptr blockFactory, bcos::txpool::TxPoolInterface::Ptr txPool, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + crypto::Hash::Ptr hashImpl, bool isAuthCheck, bool isWasm, bool isSerialExecute, + int64_t schedulerSeq) + { + bcos::scheduler::SchedulerFactory factory(std::move(executorManager), std::move(_ledger), + std::move(storage), executionMessageFactory, std::move(blockFactory), std::move(txPool), + std::move(transactionSubmitResultFactory), std::move(hashImpl), isAuthCheck, isWasm, + isSerialExecute); + + return factory.build(schedulerSeq); + } + + static bcos::scheduler::SchedulerFactory::Ptr buildFactory( + bcos::scheduler::ExecutorManager::Ptr executorManager, + bcos::ledger::LedgerInterface::Ptr _ledger, + bcos::storage::TransactionalStorageInterface::Ptr storage, + bcos::protocol::ExecutionMessageFactory::Ptr executionMessageFactory, + bcos::protocol::BlockFactory::Ptr blockFactory, bcos::txpool::TxPoolInterface::Ptr txPool, + bcos::protocol::TransactionSubmitResultFactory::Ptr transactionSubmitResultFactory, + crypto::Hash::Ptr hashImpl, bool isAuthCheck, bool isWasm, bool isSerialExecute) + { + return std::make_shared(std::move(executorManager), + std::move(_ledger), std::move(storage), executionMessageFactory, + std::move(blockFactory), txPool, std::move(transactionSubmitResultFactory), + std::move(hashImpl), isAuthCheck, isWasm, isSerialExecute); + } +}; +} // namespace bcos::initializer \ No newline at end of file diff --git a/libinitializer/StorageInitializer.h b/libinitializer/StorageInitializer.h new file mode 100644 index 0000000..3e6844f --- /dev/null +++ b/libinitializer/StorageInitializer.h @@ -0,0 +1,98 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the storage + * @file StorageInitializer.h + * @author: yujiechen + * @date 2021-06-11 + * @brief initializer for the storage + * @file StorageInitializer.h + * @author: ancelmo + * @date 2021-10-14 + */ +#pragma once +#include "bcos-storage/bcos-storage/TiKVStorage.h" +#include "boost/filesystem.hpp" +#include "rocksdb/convenience.h" +#include "rocksdb/write_batch.h" +#include +#include +#include +#include + +namespace bcos::initializer +{ +class StorageInitializer +{ +public: + static auto createRocksDB(const std::string& _path) + { + boost::filesystem::create_directories(_path); + rocksdb::DB* db; + rocksdb::Options options; + // Note: This option will increase much memory + // options.IncreaseParallelism(); + // Note: This option will increase much memory + // options.OptimizeLevelStyleCompaction(); + // create the DB if it's not already present + options.create_if_missing = true; + // FIXME: enable blob support when space amplification is acceptable + // options.enable_blob_files = keyPageSize > 1 ? true : false; + options.compression = rocksdb::kZSTD; + options.max_open_files = 512; + // options.min_blob_size = 1024; + + if (boost::filesystem::space(_path).available < 1024 * 1024 * 100) + { + BCOS_LOG(INFO) << "available disk space is less than 100MB"; + throw std::runtime_error("available disk space is less than 100MB"); + } + + // open DB + rocksdb::Status status = rocksdb::DB::Open(options, _path, &db); + if (!status.ok()) + { + BCOS_LOG(INFO) << LOG_DESC("open rocksDB failed") << LOG_KV("error", status.ToString()); + throw std::runtime_error("open rocksDB failed, err:" + status.ToString()); + } + return std::unique_ptr>( + db, [](rocksdb::DB* db) { + CancelAllBackgroundWork(db, true); + db->Close(); + delete db; + }); + } + static bcos::storage::TransactionalStorageInterface::Ptr build(const std::string& _storagePath, + const bcos::security::DataEncryptInterface::Ptr _dataEncrypt, + [[maybe_unused]] size_t keyPageSize = 0) + { + auto unique_db = createRocksDB(_storagePath); + return std::make_shared(std::move(unique_db), _dataEncrypt); + } + +#ifdef WITH_TIKV + static bcos::storage::TransactionalStorageInterface::Ptr build( + const std::vector& _pdAddrs, const std::string& _logPath, + const std::string& caPath = std::string(""), const std::string& certPath = std::string(""), + const std::string& keyPath = std::string("")) + { + boost::filesystem::create_directories(_logPath); + std::shared_ptr cluster = + storage::newTiKVClient(_pdAddrs, _logPath, caPath, certPath, keyPath); + return std::make_shared(cluster); + } +#endif +}; +} // namespace bcos::initializer \ No newline at end of file diff --git a/libinitializer/TxPoolInitializer.cpp b/libinitializer/TxPoolInitializer.cpp new file mode 100644 index 0000000..8610937 --- /dev/null +++ b/libinitializer/TxPoolInitializer.cpp @@ -0,0 +1,99 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the TxPool module + * @file TxPoolInitializer.cpp + * @author: yujiechen + * @date 2021-06-10 + */ +#include "TxPoolInitializer.h" +#include "Common.h" +#include +#include + +#include + +using namespace bcos; +using namespace bcos::txpool; +using namespace bcos::initializer; + +TxPoolInitializer::TxPoolInitializer(bcos::tool::NodeConfig::Ptr _nodeConfig, + ProtocolInitializer::Ptr _protocolInitializer, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::ledger::LedgerInterface::Ptr _ledger) + : m_nodeConfig(std::move(_nodeConfig)), + m_protocolInitializer(std::move(_protocolInitializer)), + m_frontService(std::move(_frontService)), + m_ledger(std::move(_ledger)) +{ + auto keyPair = m_protocolInitializer->keyPair(); + auto cryptoSuite = m_protocolInitializer->cryptoSuite(); + auto txpoolFactory = std::make_shared(keyPair->publicKey(), cryptoSuite, + m_protocolInitializer->txResultFactory(), m_protocolInitializer->blockFactory(), + m_frontService, m_ledger, m_nodeConfig->groupId(), m_nodeConfig->chainId(), + m_nodeConfig->blockLimit()); + + m_txpool = txpoolFactory->createTxPool(m_nodeConfig->notifyWorkerNum(), + m_nodeConfig->verifierWorkerNum(), m_nodeConfig->txsExpirationTime()); + auto txpoolConfig = m_txpool->txpoolConfig(); + txpoolConfig->setPoolLimit(m_nodeConfig->txpoolLimit()); +} + +void TxPoolInitializer::init(bcos::sealer::SealerInterface::Ptr _sealer) +{ + m_txpool->registerUnsealedTxsNotifier( + [_sealer](size_t _unsealedTxsSize, std::function _onRecv) { + try + { + _sealer->asyncNoteUnSealedTxsSize(_unsealedTxsSize, _onRecv); + } + catch (std::exception const& e) + { + INITIALIZER_LOG(WARNING) + << LOG_DESC("call UnsealedTxsNotifier to the sealer exception") + << LOG_KV("error", boost::diagnostic_information(e)); + } + }); + m_txpool->init(); +} + +void TxPoolInitializer::start() +{ + if (m_running) + { + INITIALIZER_LOG(INFO) << LOG_DESC("The txpool has already been started"); + return; + } + INITIALIZER_LOG(INFO) << LOG_DESC("Start the txpool"); + m_running = true; + m_txpool->start(); +} + +void TxPoolInitializer::stop() +{ + if (!m_running) + { + INITIALIZER_LOG(INFO) << LOG_DESC("The txpool has already been stopped"); + return; + } + INITIALIZER_LOG(INFO) << LOG_DESC("Stop the txpool"); + m_running = false; + m_txpool->stop(); +} + +bcos::txpool::TxPoolInterface::Ptr TxPoolInitializer::txpool() +{ + return m_txpool; +} diff --git a/libinitializer/TxPoolInitializer.h b/libinitializer/TxPoolInitializer.h new file mode 100644 index 0000000..b5174b3 --- /dev/null +++ b/libinitializer/TxPoolInitializer.h @@ -0,0 +1,68 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief initializer for the TxPool module + * @file TxPoolInitializer.h + * @author: yujiechen + * @date 2021-06-10 + */ +#pragma once +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos +{ +namespace txpool +{ +class TxPool; +} + +namespace initializer +{ +class TxPoolInitializer +{ +public: + using Ptr = std::shared_ptr; + TxPoolInitializer(bcos::tool::NodeConfig::Ptr _nodeConfig, + ProtocolInitializer::Ptr _protocolInitializer, + bcos::front::FrontServiceInterface::Ptr _frontService, + bcos::ledger::LedgerInterface::Ptr _ledger); + virtual ~TxPoolInitializer() { stop(); } + + virtual void init(bcos::sealer::SealerInterface::Ptr _sealer); + virtual void start(); + virtual void stop(); + + std::shared_ptr txpool(); + bcos::crypto::CryptoSuite::Ptr cryptoSuite() { return m_protocolInitializer->cryptoSuite(); } + +private: + bcos::tool::NodeConfig::Ptr m_nodeConfig; + ProtocolInitializer::Ptr m_protocolInitializer; + bcos::front::FrontServiceInterface::Ptr m_frontService; + bcos::ledger::LedgerInterface::Ptr m_ledger; + + std::shared_ptr m_txpool; + std::atomic_bool m_running = {false}; +}; +} // namespace initializer +} // namespace bcos \ No newline at end of file diff --git a/libtask/CMakeLists.txt b/libtask/CMakeLists.txt new file mode 100644 index 0000000..b2a73ab --- /dev/null +++ b/libtask/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.17) + +add_library(bcos-task INTERFACE) +target_include_directories(bcos-task INTERFACE + $ + $) +target_link_libraries(bcos-task INTERFACE bcos-concepts) + +include(GNUInstallDirs) +install(TARGETS bcos-task EXPORT fiscobcosTargets ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") +install(DIRECTORY "bcos-task" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" FILES_MATCHING PATTERN "*.h") + +if(TESTS) + enable_testing() + add_subdirectory(tests) +endif() \ No newline at end of file diff --git a/libtask/bcos-task/Coroutine.h b/libtask/bcos-task/Coroutine.h new file mode 100644 index 0000000..1727b0f --- /dev/null +++ b/libtask/bcos-task/Coroutine.h @@ -0,0 +1,9 @@ +#pragma once + +#if __APPLE__ && __clang__ +#include +namespace CO_STD = std::experimental; +#else +#include +namespace CO_STD = std; +#endif \ No newline at end of file diff --git a/libtask/bcos-task/Task.h b/libtask/bcos-task/Task.h new file mode 100644 index 0000000..573fbf8 --- /dev/null +++ b/libtask/bcos-task/Task.h @@ -0,0 +1,162 @@ +#pragma once +#include "Coroutine.h" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::task +{ + +// clang-format off +struct NoReturnValue : public bcos::error::Exception {}; +// clang-format on + +template +class TaskBase +{ +public: + friend TaskImpl; + + using ReturnType = Value; + + struct PromiseVoid; + struct PromiseValue; + using promise_type = std::conditional_t, PromiseVoid, PromiseValue>; + + template + struct PromiseBase + { + constexpr CO_STD::suspend_always initial_suspend() const noexcept { return {}; } + constexpr auto final_suspend() const noexcept + { + struct FinalAwaitable + { + constexpr bool await_ready() const noexcept { return false; } + void await_suspend(CO_STD::coroutine_handle handle) noexcept + { + if (handle.promise().m_continuationHandle) + { + handle.promise().m_continuationHandle.resume(); + } + handle.destroy(); + } + constexpr void await_resume() noexcept {} + }; + return FinalAwaitable{}; + } + constexpr TaskImpl get_return_object() + { + auto handle = CO_STD::coroutine_handle::from_promise( + *static_cast(this)); + return TaskImpl(handle); + } + void unhandled_exception() + { + m_value.template emplace(std::current_exception()); + } + + CO_STD::coroutine_handle<> m_continuationHandle; + std::conditional_t, std::variant, + std::variant> + m_value; + }; + struct PromiseVoid : public PromiseBase + { + void return_void() {} + }; + struct PromiseValue : public PromiseBase + { + template + void return_value(ReturnValue&& value) + { + PromiseBase::m_value.template emplace( + std::forward(value)); + } + }; + + explicit TaskBase(CO_STD::coroutine_handle handle) : m_handle(handle) {} + TaskBase(const TaskBase&) = delete; + TaskBase(TaskBase&& task) noexcept : m_handle(task.m_handle) { task.m_handle = nullptr; } + TaskBase& operator=(const TaskBase&) = delete; + TaskBase& operator=(TaskBase&& task) noexcept + { + m_handle = task.m_handle; + task.m_handle = nullptr; + } + ~TaskBase() = default; + + constexpr void run() { m_handle.resume(); } + +private: + CO_STD::coroutine_handle m_handle; +}; + +enum class Type +{ + LAZY, + EAGER +}; + +template +class Task : public TaskBase, Value> +{ +public: + using TaskBase, Value>::TaskBase; + using typename TaskBase, Value>::ReturnType; + using typename TaskBase, Value>::promise_type; + + struct Awaitable + { + Awaitable(Task const& task) : m_handle(task.m_handle){}; + Awaitable(const Awaitable&) = delete; + Awaitable(Awaitable&&) noexcept = default; + Awaitable& operator=(const Awaitable&) = delete; + Awaitable& operator=(Awaitable&&) noexcept = default; + ~Awaitable() = default; + + constexpr bool await_ready() const noexcept + { + return type == Type::EAGER || !m_handle || m_handle.done(); + } + + template + auto await_suspend(CO_STD::coroutine_handle handle) + { + m_handle.promise().m_continuationHandle = handle; + return m_handle; + } + constexpr Value await_resume() + { + auto& value = m_handle.promise().m_value; + if (std::holds_alternative(value)) + { + std::rethrow_exception(std::get(value)); + } + + if constexpr (!std::is_void_v) + { + if (!std::holds_alternative(value)) + { + BOOST_THROW_EXCEPTION(NoReturnValue{}); + } + + auto result = std::move(std::get(value)); + return result; + } + } + + CO_STD::coroutine_handle m_handle; + }; + Awaitable operator co_await() { return Awaitable(*static_cast(this)); } + + constexpr bool lazy() const { return type == Type::LAZY; } + + friend Awaitable; +}; + +} // namespace bcos::task \ No newline at end of file diff --git a/libtask/bcos-task/Wait.h b/libtask/bcos-task/Wait.h new file mode 100644 index 0000000..d4908ce --- /dev/null +++ b/libtask/bcos-task/Wait.h @@ -0,0 +1,86 @@ +#pragma once +#include "Task.h" +#include +#include +#include + +namespace bcos::task +{ + +template +void wait(Task task, Callback callback) +{ + auto waitTask = [](Task task, Callback callback) -> task::Task { + using TaskType = std::remove_cvref_t; + try + { + if constexpr (std::is_void_v) + { + co_await task; + callback(); + } + else + { + callback(co_await task); + } + } + catch (...) + { + callback(std::current_exception()); + } + + co_return; + }; + waitTask(std::move(task), std::move(callback)).run(); +} + +template +void wait(Task task) +{ + task.run(); +} + +template +auto syncWait(Task task) +{ + std::promise promise; + auto future = promise.get_future(); + + if constexpr (std::is_void_v) + { + wait(std::move(task), [&promise](std::exception_ptr error = nullptr) { + if (error) + { + promise.set_exception(error); + } + else + { + promise.set_value(); + } + }); + future.get(); + } + else + { + wait(std::move(task), [&promise](auto&& value) mutable -> void { + using ValueType = std::remove_cvref_t; + if constexpr (std::is_same_v) + { + promise.set_exception(value); + } + else + { + promise.set_value(std::forward(value)); + } + }); + return future.get(); + } +} + +template +auto operator~(Task task) +{ + return syncWait(std::move(task)); +} + +} // namespace bcos::task \ No newline at end of file diff --git a/libtask/tests/CMakeLists.txt b/libtask/tests/CMakeLists.txt new file mode 100644 index 0000000..37826f0 --- /dev/null +++ b/libtask/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.17) + +find_package(Boost REQUIRED unit_test_framework) +find_package(TBB REQUIRED) + +add_executable(test-task TaskTest.cpp main.cpp) +target_link_libraries(test-task PUBLIC bcos-task Boost::unit_test_framework TBB::tbb) + +add_test(NAME test-task COMMAND test-task) \ No newline at end of file diff --git a/libtask/tests/TaskTest.cpp b/libtask/tests/TaskTest.cpp new file mode 100644 index 0000000..3b28bf1 --- /dev/null +++ b/libtask/tests/TaskTest.cpp @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include +#include + +using namespace bcos::task; + +struct TaskFixture +{ + tbb::task_group taskGroup; +}; + +BOOST_FIXTURE_TEST_SUITE(TaskTest, TaskFixture) + +Task nothingTask() +{ + BOOST_FAIL("No expect to run!"); + co_return; +} + +Task level3() +{ + std::cout << "Level3 execute finished" << std::endl; + co_return 100; +} + +Task level2() +{ + auto numResult = co_await level3(); + BOOST_CHECK_EQUAL(numResult, 100); + + constexpr static auto mut = 100L; + + std::cout << "Level2 execute finished" << std::endl; + co_return static_cast(numResult) * mut; +} + +Task level1() +{ + auto num1 = co_await level3(); + auto num2 = co_await level2(); + + BOOST_CHECK_EQUAL(num1, 100); + BOOST_CHECK_EQUAL(num2, 10000); + + std::cout << "Level1 execute finished" << std::endl; +} + +BOOST_AUTO_TEST_CASE(normalTask) +{ + // auto task = nothingTask(); + + bool finished = false; + + bcos::task::wait( + level1(), [&finished]([[maybe_unused]] std::exception_ptr exception = nullptr) { + std::cout << "Callback called!" << std::endl; + finished = true; + }); + BOOST_CHECK_EQUAL(finished, true); + + auto num = bcos::task::syncWait(level2()); + BOOST_CHECK_EQUAL(num, 10000); +} + +Task asyncLevel2(tbb::task_group& taskGroup) +{ + struct Awaitable + { + constexpr bool await_ready() const { return false; } + + void await_suspend(CO_STD::coroutine_handle<> handle) + { + std::cout << "Start run async thread: " << handle.address() << std::endl; + taskGroup.run([this, m_handle = std::move(handle)]() { + std::this_thread::sleep_for(std::chrono::seconds(2)); + num = 100; + + std::cout << "Call m_handle.resume(): " << m_handle.address() << std::endl; + auto handle = const_cast(m_handle); + handle.resume(); + }); + } + + int await_resume() const + { + std::cout << "Call await_resume()" << std::endl; + return num; + } + + tbb::task_group& taskGroup; + int num = 0; + }; + + std::cout << "co_await Awaitable started" << std::endl; + auto num = co_await Awaitable{taskGroup, 0}; + std::cout << "co_await Awaitable ended" << std::endl; + + BOOST_CHECK_EQUAL(num, 100); + + std::cout << "asyncLevel2 co_return" << std::endl; + co_return num; +} + +Task asyncLevel1(tbb::task_group& taskGroup) +{ + std::cout << "co_await asyncLevel2 started" << std::endl; + auto num1 = co_await asyncLevel2(taskGroup); + std::cout << "co_await asyncLevel2 ended" << std::endl; + + BOOST_CHECK_EQUAL(num1, 100); + + std::cout << "AsyncLevel1 execute finished" << std::endl; + co_return num1 * 2; +} + +BOOST_AUTO_TEST_CASE(asyncTask) +{ + auto num = bcos::task::syncWait(asyncLevel1(taskGroup)); + BOOST_CHECK_EQUAL(num, 200); + + bcos::task::wait(asyncLevel1(taskGroup), [](auto&& result) { + using ResultType = std::remove_cvref_t; + if constexpr (std::is_same_v) + { + // nothing to do + } + else + { + BOOST_CHECK_EQUAL(result, 200); + std::cout << "Got async result" << std::endl; + } + }); + std::cout << "Top task destroyed" << std::endl; + + taskGroup.wait(); + std::cout << "asyncTask test over" << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/libtask/tests/main.cpp b/libtask/tests/main.cpp new file mode 100644 index 0000000..0cdfc68 --- /dev/null +++ b/libtask/tests/main.cpp @@ -0,0 +1,4 @@ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/lightnode/CMakeLists.txt b/lightnode/CMakeLists.txt new file mode 100644 index 0000000..a4e105c --- /dev/null +++ b/lightnode/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.17) +project(lightnode VERSION ${VERSION}) + +add_library(bcos-lightnode INTERFACE) +target_include_directories(bcos-lightnode INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) +target_link_libraries(bcos-lightnode INTERFACE bcos-framework bcos-crypto bcos-task bcos-concepts) + +add_subdirectory(fisco-bcos-lightnode) + +if(TESTS) + enable_testing() + add_subdirectory(tests) +endif() \ No newline at end of file diff --git a/lightnode/bcos-lightnode/Log.h b/lightnode/bcos-lightnode/Log.h new file mode 100644 index 0000000..7ca0548 --- /dev/null +++ b/lightnode/bcos-lightnode/Log.h @@ -0,0 +1,5 @@ +#pragma once + +#define LIGHTNODE_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("LIGHTNODE") +#define TRANSACTIONPOOL_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("TRANSACTIONPOOL") +#define LEDGER_LOG(LEVEL) BCOS_LOG(LEVEL) << LOG_BADGE("LEDGER") \ No newline at end of file diff --git a/lightnode/bcos-lightnode/rpc/Converter.h b/lightnode/bcos-lightnode/rpc/Converter.h new file mode 100644 index 0000000..0d6ade9 --- /dev/null +++ b/lightnode/bcos-lightnode/rpc/Converter.h @@ -0,0 +1,161 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::rpc +{ + +void hex2Bin(bcos::concepts::bytebuffer::ByteBuffer auto const& hex, + bcos::concepts::bytebuffer::ByteBuffer auto& out) +{ + auto view = + RANGES::subrange(RANGES::begin(hex), RANGES::end(hex)); + + if (RANGES::size(view) >= 2 && (view[0] == '0' && view[1] == 'x')) + { + view = RANGES::subrange( + RANGES::begin(hex) + 2, RANGES::end(hex)); + } + + if ((RANGES::size(view) % 2 != 0)) [[unlikely]] + BOOST_THROW_EXCEPTION(std::invalid_argument{"Invalid input hex string!"}); + + bcos::concepts::resizeTo(out, RANGES::size(view) / 2); + boost::algorithm::unhex(RANGES::begin(view), RANGES::end(view), + (RANGES::range_value_t*)RANGES::data(out)); +} + +template +void toJsonResp(bcos::concepts::transaction::Transaction auto const& transaction, Json::Value& resp) +{ + resp["version"] = transaction.data.version; + std::string hash; + bcos::concepts::hash::calculate(transaction, hash); + resp["hash"] = toHexStringWithPrefix(hash); + resp["nonce"] = transaction.data.nonce; + resp["blockLimit"] = Json::Value((Json::Int64)transaction.data.blockLimit); + resp["to"] = transaction.data.to; + resp["from"] = toHexStringWithPrefix(transaction.sender); + resp["input"] = toHexStringWithPrefix(transaction.data.input); + resp["importTime"] = (Json::Int64)transaction.importTime; + resp["chainID"] = std::string(transaction.data.chainID); + resp["groupID"] = std::string(transaction.data.groupID); + resp["abi"] = std::string(transaction.data.abi); + resp["signature"] = toHexStringWithPrefix(transaction.signature); +} + +template +void toJsonResp(bcos::concepts::receipt::TransactionReceipt auto const& receipt, + std::string_view txHash, Json::Value& resp) +{ + resp["version"] = Json::Value((Json::Int64)receipt.data.version); + resp["contractAddress"] = receipt.data.contractAddress; + resp["gasUsed"] = receipt.data.gasUsed; + resp["status"] = Json::Value((Json::Int64)receipt.data.status); + resp["blockNumber"] = Json::Value((Json::Int64)receipt.data.blockNumber); + resp["output"] = toHexStringWithPrefix(receipt.data.output); + resp["message"] = receipt.message; + resp["transactionHash"] = "0x" + std::string(txHash); + + std::string hash; + bcos::concepts::hash::calculate(receipt, hash); + resp["hash"] = toHexStringWithPrefix(hash); + resp["logEntries"] = Json::Value(Json::arrayValue); + for (const auto& logEntry : receipt.data.logEntries) + { + Json::Value jLog; + jLog["address"] = logEntry.address; + + auto topisc = Json::Value(Json::arrayValue); + for (const auto& topic : logEntry.topic) + { + topisc.append(toHexStringWithPrefix(topic)); + } + jLog["topics"] = std::move(topisc); + jLog["data"] = toHexStringWithPrefix(logEntry.data); + resp["logEntries"].append(std::move(jLog)); + } +} + +template +void toJsonResp(bcos::concepts::receipt::TransactionReceipt auto const& receipt, + bcos::concepts::transaction::Transaction auto const& transaction, std::string_view txHash, + Json::Value& resp) +{ + toJsonResp(receipt, txHash, resp); + + resp["input"] = toHexStringWithPrefix(transaction.data.input); + resp["from"] = toHexStringWithPrefix(transaction.sender); + resp["to"] = transaction.data.to; +} + +template +void toJsonResp(bcos::concepts::block::Block auto const& block, Json::Value& jResp, bool onlyHeader) +{ + auto const& blockHeader = block.blockHeader; + std::string hash; + bcos::concepts::hash::calculate(block, hash); + jResp["hash"] = toHexStringWithPrefix(hash); + jResp["version"] = Json::Value((Json::Int64)block.version); + jResp["txsRoot"] = toHexStringWithPrefix(blockHeader.data.txsRoot); + jResp["receiptsRoot"] = toHexStringWithPrefix(blockHeader.data.receiptRoot); + jResp["stateRoot"] = toHexStringWithPrefix(blockHeader.data.stateRoot); + jResp["number"] = Json::Value((Json::Int64)blockHeader.data.blockNumber); + jResp["gasUsed"] = blockHeader.data.gasUsed; + jResp["timestamp"] = Json::Value((Json::Int64)blockHeader.data.timestamp); + jResp["sealer"] = Json::Value((Json::Int64)blockHeader.data.sealer); + jResp["extraData"] = toHexStringWithPrefix(blockHeader.data.extraData); + + jResp["consensusWeights"] = Json::Value(Json::arrayValue); + for (const auto& weight : blockHeader.data.consensusWeights) + { + jResp["consensusWeights"].append(Json::Value((Json::Int64)weight)); + } + + jResp["sealerList"] = Json::Value(Json::arrayValue); + for (const auto& sealer : blockHeader.data.sealerList) + { + jResp["sealerList"].append(toHexStringWithPrefix(sealer)); + } + + Json::Value jParentInfo(Json::arrayValue); + for (const auto& parent : blockHeader.data.parentInfo) + { + Json::Value jp; + jp["blockNumber"] = Json::Value((Json::Int64)parent.blockNumber); + jp["blockHash"] = toHexStringWithPrefix(parent.blockHash); + jParentInfo.append(std::move(jp)); + } + jResp["parentInfo"] = std::move(jParentInfo); + + Json::Value jSignList(Json::arrayValue); + for (const auto& sign : blockHeader.signatureList) + { + Json::Value jSign; + jSign["sealerIndex"] = Json::Value((Json::Int64)sign.sealerIndex); + jSign["signature"] = toHexStringWithPrefix(sign.signature); + jSignList.append(std::move(jSign)); + } + jResp["signatureList"] = std::move(jSignList); + + if (!onlyHeader) + { + Json::Value transactions(Json::arrayValue); + for (auto const& transaction : block.transactions) + { + Json::Value transactionObject; + toJsonResp(transaction, transactionObject); + + transactions.append(std::move(transactionObject)); + } + jResp["transactions"] = std::move(transactions); + } +} + +} // namespace bcos::rpc \ No newline at end of file diff --git a/lightnode/bcos-lightnode/rpc/LightNodeRPC.h b/lightnode/bcos-lightnode/rpc/LightNodeRPC.h new file mode 100644 index 0000000..69472cb --- /dev/null +++ b/lightnode/bcos-lightnode/rpc/LightNodeRPC.h @@ -0,0 +1,565 @@ +#pragma once + +#include + +#include "../Log.h" +#include "Converter.h" +#include "bcos-concepts/Basic.h" +#include "bcos-concepts/ByteBuffer.h" +#include "bcos-concepts/Exception.h" +#include "bcos-concepts/Hash.h" +#include "bcos-tars-protocol/tars/TransactionMetaData.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include "bcos-utilities/DataConvertUtility.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::rpc +{ +// clang-format off +struct NotFoundTransactionHash: public bcos::error::Exception {}; +// clang-format on + +template +class LightNodeRPC : public bcos::rpc::JsonRpcInterface +{ +public: + LightNodeRPC(LocalLedgerType localLedger, RemoteLedgerType remoteLedger, + TransactionPoolType remoteTransactionPool, SchedulerType scheduler, std::string chainID, + std::string groupID) + : m_localLedger(std::move(localLedger)), + m_remoteLedger(std::move(remoteLedger)), + m_remoteTransactionPool(std::move(remoteTransactionPool)), + m_scheduler(std::move(scheduler)), + m_chainID(std::move(chainID)), + m_groupID(std::move(groupID)) + {} + + void toErrorResp(std::exception_ptr error, RespFunc respFunc) + { + try + { + std::rethrow_exception(error); + } + catch (std::exception& e) + { + toErrorResp(e, std::move(respFunc)); + } + } + + void toErrorResp(std::exception& error, RespFunc respFunc) + { + try + { + auto& bcosError = dynamic_cast(error); + toErrorResp(std::make_shared(std::move(bcosError)), std::move(respFunc)); + } + catch ([[maybe_unused]] std::bad_cast&) + { + // no bcos error + auto bcosError = bcos::Error(-1, boost::diagnostic_information(error)); + toErrorResp(bcosError, std::move(respFunc)); + } + } + + void toErrorResp(bcos::Error::Ptr error, RespFunc respFunc) + { + Json::Value resp; + respFunc(std::move(error), resp); + } + + void call([[maybe_unused]] std::string_view groupID, [[maybe_unused]] std::string_view nodeName, + [[maybe_unused]] std::string_view to, [[maybe_unused]] std::string_view hexTransaction, + RespFunc respFunc) override + { + bcos::task::wait([](decltype(this) self, std::string_view hexTransaction, + std::string_view to, RespFunc respFunc) -> task::Task { + // call data is json + bcostars::Transaction transaction; + self->decodeData(hexTransaction, transaction.data.input); + transaction.data.to = to; + transaction.data.nonce = "0"; + transaction.data.blockLimit = 0; + transaction.data.chainID = ""; + transaction.data.groupID = ""; + transaction.importTime = 0; + + LIGHTNODE_LOG(INFO) << "RPC call request, to: " << to; + if (transaction.dataHash.empty()) + { + bcos::concepts::hash::calculate(transaction, transaction.dataHash); + } + + bcostars::TransactionReceipt receipt; + try + { + co_await self->scheduler().call(transaction, receipt); + } + catch (std::exception& e) + { + self->toErrorResp(e, respFunc); + co_return; + } + + Json::Value resp; + toJsonResp(receipt, {}, resp); + + LIGHTNODE_LOG(INFO) << "RPC call transaction finished"; + respFunc(nullptr, resp); + }(this, hexTransaction, to, std::move(respFunc))); + } + + void sendTransaction([[maybe_unused]] std::string_view _groupID, + [[maybe_unused]] std::string_view _nodeName, std::string_view hexTransaction, + [[maybe_unused]] bool requireProof, RespFunc respFunc) override + { + bcos::task::wait([this](std::string_view hexTransaction, + RespFunc respFunc) -> task::Task { + try + { + bcos::bytes binData; + decodeData(hexTransaction, binData); + bcostars::Transaction transaction; + bcos::concepts::serialize::decode(binData, transaction); + + if (transaction.dataHash.empty()) + { + bcos::concepts::hash::calculate(transaction, transaction.dataHash); + } + auto& txHash = transaction.dataHash; + std::string txHashStr; + txHashStr.reserve(txHash.size() * 2); + boost::algorithm::hex_lower( + txHash.begin(), txHash.end(), std::back_inserter(txHashStr)); + + LIGHTNODE_LOG(INFO) << "RPC send transaction request: " + << "0x" << txHashStr; + + bcostars::TransactionReceipt receipt; + co_await remoteTransactionPool().submitTransaction(std::move(transaction), receipt); + + Json::Value resp; + toJsonResp(receipt, transaction, txHashStr, resp); + + LIGHTNODE_LOG(INFO) << "RPC send transaction finished"; + respFunc(nullptr, resp); + } + catch (std::exception& error) + { + toErrorResp(error, std::move(respFunc)); + } + }(hexTransaction, std::move(respFunc))); + } + + void getTransaction([[maybe_unused]] std::string_view _groupID, + [[maybe_unused]] std::string_view _nodeName, [[maybe_unused]] std::string_view txHash, + [[maybe_unused]] bool _requireProof, RespFunc _respFunc) override + { + bcos::task::wait([this](std::string txHash, RespFunc respFunc) -> task::Task { + try + { + LIGHTNODE_LOG(INFO) << "RPC get transaction request: " << txHash; + + std::array hashes{bcos::h256{txHash, bcos::h256::FromHex}}; + std::vector transactions; + + co_await remoteLedger().getTransactions(hashes, transactions); + + Json::Value resp; + toJsonResp(transactions[0], resp); + + respFunc(nullptr, resp); + } + catch (std::exception& error) + { + toErrorResp(error, std::move(respFunc)); + } + }(std::string(txHash), std::move(_respFunc))); + } + + void getTransactionReceipt([[maybe_unused]] std::string_view groupID, + [[maybe_unused]] std::string_view nodeName, [[maybe_unused]] std::string_view txHash, + [[maybe_unused]] bool requireProof, RespFunc respFunc) override + { + bcos::task::wait( + [this](auto remoteLedger, std::string txHash, RespFunc respFunc) -> task::Task { + try + { + LIGHTNODE_LOG(INFO) << "RPC get receipt request: " << txHash; + + std::array hashes{bcos::h256{txHash, bcos::h256::FromHex}}; + std::vector receipts(1); + std::vector transactions(1); + + co_await remoteLedger.getTransactions(hashes, receipts); + co_await remoteLedger.getTransactions(hashes, transactions); + + + Json::Value resp; + toJsonResp(receipts[0], transactions[0], txHash, resp); + + respFunc(nullptr, resp); + } + catch (std::exception& error) + { + toErrorResp(error, std::move(respFunc)); + } + }(remoteLedger(), std::string(txHash), std::move(respFunc))); + } + + void getBlockByHash([[maybe_unused]] std::string_view _groupID, + [[maybe_unused]] std::string_view _nodeName, [[maybe_unused]] std::string_view blockHash, + bool _onlyHeader, bool _onlyTxHash, RespFunc _respFunc) override + { + auto blockNumber = std::make_unique(-1); + auto hash = std::make_unique>(); + hex2Bin(blockHash, *hash); + + auto& hashRef = *hash; + auto& blockNumberRef = *blockNumber; + bcos::task::wait(localLedger().getBlockNumberByHash(hashRef, blockNumberRef), + [this, m_hash = std::move(hash), m_blockNumber = std::move(blockNumber), + m_onlyHeader = _onlyHeader, m_respFunc = std::move(_respFunc), + m_groupID = std::string(_groupID), m_nodeName = std::string(_nodeName), + m_onlyTxHash = _onlyTxHash](std::exception_ptr error = {}) mutable { + if (error) + { + toErrorResp(error, m_respFunc); + return; + } + + LIGHTNODE_LOG(INFO) + << "RPC get block by hash request: 0x" << *m_blockNumber << " " << m_onlyHeader; + if (*m_blockNumber < 0) + { + BOOST_THROW_EXCEPTION(std::runtime_error{"Unable to find block hash!"}); + } + + getBlockByNumber(m_groupID, m_nodeName, *m_blockNumber, m_onlyHeader, m_onlyTxHash, + std::move(m_respFunc)); + }); + ; + } + + void getBlockByNumber([[maybe_unused]] std::string_view groupID, + [[maybe_unused]] std::string_view nodeName, int64_t blockNumber, bool onlyHeader, + bool onlyTxHash, RespFunc respFunc) override + { + LIGHTNODE_LOG(INFO) << "RPC get block by number request: " << blockNumber << " " + << onlyHeader; + + bcos::task::wait([](decltype(this) self, bool onlyHeader, int64_t blockNumber, + RespFunc respFunc) -> task::Task { + bcostars::Block block; + if (onlyHeader) + { + co_await self->localLedger().template getBlock( + blockNumber, block); + } + else + { + co_await self->remoteLedger().template getBlock( + blockNumber, block); + + if (!RANGES::empty(block.transactionsMetaData)) + { + // Check transaction merkle + crypto::merkle::Merkle merkle; + auto hashesRange = block.transactionsMetaData | RANGES::views::transform([ + ](const bcostars::TransactionMetaData& transactionMetaData) -> auto& { + return transactionMetaData.hash; + }); + std::vector> merkles; + merkle.generateMerkle(hashesRange, merkles); + + if (RANGES::empty(merkles)) + { + BOOST_THROW_EXCEPTION( + std::runtime_error{"Unable to generate transaction merkle root!"}); + } + + if (!bcos::concepts::bytebuffer::equalTo( + block.blockHeader.data.txsRoot, *RANGES::rbegin(merkles))) + { + BOOST_THROW_EXCEPTION(std::runtime_error{"No match transaction root!"}); + } + } + + // Check parentBlock + if (blockNumber > 0) + { + decltype(block) parentBlock; + co_await self->localLedger().template getBlock( + blockNumber - 1, parentBlock); + + std::array parentHash; + bcos::concepts::hash::calculate(parentBlock, parentHash); + + if (RANGES::empty(block.blockHeader.data.parentInfo) || + (block.blockHeader.data.parentInfo[0].blockNumber != + parentBlock.blockHeader.data.blockNumber) || + !bcos::concepts::bytebuffer::equalTo( + block.blockHeader.data.parentInfo[0].blockHash, parentHash)) + { + LIGHTNODE_LOG(ERROR) << "No match parentHash!"; + BOOST_THROW_EXCEPTION(std::runtime_error{"No match parentHash!"}); + } + } + } + + using ResultType = std::remove_cvref_t; + if constexpr (std::is_same_v) + { + self->toErrorResp(block, respFunc); + co_return; + } + else + { + Json::Value resp; + toJsonResp(block, resp, onlyHeader); + + respFunc(nullptr, resp); + } + }(this, onlyHeader, blockNumber, std::move(respFunc))); + } + + void getBlockHashByNumber([[maybe_unused]] std::string_view _groupID, + [[maybe_unused]] std::string_view _nodeName, int64_t blockNumber, + RespFunc respFunc) override + { + LIGHTNODE_LOG(INFO) << "RPC get block hash by number request: " << blockNumber; + + auto hash = std::make_unique(); + auto& hashRef = *hash; + bcos::task::wait(localLedger().getBlockHashByNumber(blockNumber, hashRef), + [this, m_hash = std::move(hash), m_respFunc = std::move(respFunc)]( + std::exception_ptr error = {}) mutable { + if (error) + { + this->toErrorResp(error, m_respFunc); + return; + } + Json::Value resp = bcos::toHexStringWithPrefix(*m_hash); + + m_respFunc(nullptr, resp); + }); + } + + void getBlockNumber( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + LIGHTNODE_LOG(INFO) << "RPC get block number request"; + + bcos::task::wait(localLedger().getStatus(), + [this, m_respFunc = std::move(_respFunc)](auto&& result) mutable { + using ResultType = std::remove_cvref_t; + if constexpr (std::is_same_v) + { + this->toErrorResp(result, m_respFunc); + return; + } + else + { + Json::Value resp = result.blockNumber; + + LIGHTNODE_LOG(INFO) << "RPC get block number finished: " << result.blockNumber; + m_respFunc(nullptr, resp); + } + }); + } + + void getCode(std::string_view _groupID, std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getABI([[maybe_unused]]std::string_view _groupID, [[maybe_unused]]std::string_view _nodeName, + std::string_view _contractAddress, RespFunc _respFunc) override + { + bcos::task::wait( + [this](auto remoteLedger, std::string _contractAddress, RespFunc _respFunc) -> task::Task{ + try + { + LIGHTNODE_LOG(TRACE) << "RPC get contract " <<_contractAddress << " ABI request"; + auto abiStr = co_await remoteLedger.getABI(_contractAddress); + LIGHTNODE_LOG(TRACE) << " lightNode RPC get ABI is: " << abiStr; + Json::Value resp = abiStr; + _respFunc(nullptr, resp); + } + catch (std::exception& error) + { + toErrorResp(error, std::move(_respFunc)); + } + }(remoteLedger(), std::string(_contractAddress), std::move(_respFunc))); + } + + void getSealerList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getObserverList( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getPbftView( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getPendingTxSize( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getSyncStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getConsensusStatus( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getSystemConfigByKey(std::string_view _groupID, std::string_view _nodeName, + std::string_view _keyValue, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getTotalTransactionCount( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getGroupPeers(std::string_view _groupID, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getPeers(RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getGroupList(RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getGroupInfo(std::string_view _groupID, RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getGroupInfoList(RespFunc _respFunc) override + { + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + void getGroupNodeInfo( + std::string_view _groupID, std::string_view _nodeName, RespFunc _respFunc) override + { + LIGHTNODE_LOG(INFO) << "RPC get group node info request"; + + Json::Value value; + _respFunc(BCOS_ERROR_PTR(-1, "Unspported method!"), value); + } + + void getGroupBlockNumber(RespFunc _respFunc) override + { + LIGHTNODE_LOG(INFO) << "RPC get group block number request"; + + bcos::task::wait(localLedger().getStatus(), + [this, m_respFunc = std::move(_respFunc)](auto&& result) mutable { + using ResultType = std::remove_cvref_t; + if constexpr (std::is_same_v) + { + this->toErrorResp(result, m_respFunc); + return; + } + else + { + Json::Value resp = result.blockNumber; + + LIGHTNODE_LOG(INFO) << "RPC get block number finished: " << result.blockNumber; + m_respFunc(nullptr, resp); + } + }); + } + +private: + auto& localLedger() { return bcos::concepts::getRef(m_localLedger); } + auto& remoteLedger() { return bcos::concepts::getRef(m_remoteLedger); } + auto& remoteTransactionPool() { return bcos::concepts::getRef(m_remoteTransactionPool); } + auto& scheduler() { return bcos::concepts::getRef(m_scheduler); } + + void decodeData(bcos::concepts::bytebuffer::ByteBuffer auto const& input, + bcos::concepts::bytebuffer::ByteBuffer auto& out) + { + auto begin = RANGES::begin(input); + auto end = RANGES::end(input); + auto length = RANGES::size(input); + + if ((length == 0) || (length % 2 != 0)) [[unlikely]] + { + BOOST_THROW_EXCEPTION(std::runtime_error{"Unexpect hex string"}); + } + + if (*begin == '0' && *(begin + 1) == 'x') + { + begin += 2; + length -= 2; + } + + bcos::concepts::resizeTo(out, length / 2); + boost::algorithm::unhex(begin, end, RANGES::begin(out)); + } + + LocalLedgerType m_localLedger; + RemoteLedgerType m_remoteLedger; + TransactionPoolType m_remoteTransactionPool; + SchedulerType m_scheduler; + + std::string m_chainID; + std::string m_groupID; +}; +} // namespace bcos::rpc \ No newline at end of file diff --git a/lightnode/bcos-lightnode/scheduler/SchedulerWrapperImpl.h b/lightnode/bcos-lightnode/scheduler/SchedulerWrapperImpl.h new file mode 100644 index 0000000..835eefa --- /dev/null +++ b/lightnode/bcos-lightnode/scheduler/SchedulerWrapperImpl.h @@ -0,0 +1,84 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace bcos::scheduler +{ +template +class SchedulerWrapperImpl + : public bcos::concepts::scheduler::SchedulerBase> +{ + friend bcos::concepts::scheduler::SchedulerBase>; + +public: + SchedulerWrapperImpl(SchedulerType scheduler, bcos::crypto::CryptoSuite::Ptr cryptoSuite) + : m_scheduler(std::move(scheduler)), m_cryptoSuite(std::move(cryptoSuite)) + {} + +private: + auto& scheduler() { return bcos::concepts::getRef(m_scheduler); } + + task::Task impl_call(bcos::concepts::transaction::Transaction auto const& transaction, + bcos::concepts::receipt::TransactionReceipt auto& receipt) + { + auto transactionImpl = std::make_shared( + [&transaction]() { return const_cast(&transaction); }); + + struct Awaitable : public CO_STD::suspend_always + { + Awaitable(decltype(transactionImpl)& transactionImpl, SchedulerType& scheduler, + std::remove_cvref_t& receipt) + : m_transactionImpl(transactionImpl), m_scheduler(scheduler), m_receipt(receipt) + {} + + void await_suspend(CO_STD::coroutine_handle::promise_type> handle) + { + bcos::concepts::getRef(m_scheduler) + .call(std::move(m_transactionImpl), + [this, m_handle = std::move(handle)](Error::Ptr&& error, + protocol::TransactionReceipt::Ptr&& transactionReceipt) mutable { + if (!error) + { + auto tarsImpl = std::dynamic_pointer_cast< + bcostars::protocol::TransactionReceiptImpl>(transactionReceipt); + + m_receipt = std::move( + const_cast(tarsImpl->inner())); + } + else + { + m_error = std::move(error); + } + + m_handle.resume(); + }); + } + + decltype(transactionImpl)& m_transactionImpl; + SchedulerType& m_scheduler; + std::remove_cvref_t& m_receipt; + Error::Ptr m_error; + }; + + Awaitable awaitable(transactionImpl, m_scheduler, receipt); + co_await awaitable; + + auto& error = awaitable.m_error; + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + co_return; + } + + + SchedulerType m_scheduler; + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; +}; +} // namespace bcos::scheduler \ No newline at end of file diff --git a/lightnode/bcos-lightnode/transaction-pool/TransactionPoolImpl.h b/lightnode/bcos-lightnode/transaction-pool/TransactionPoolImpl.h new file mode 100644 index 0000000..ce79982 --- /dev/null +++ b/lightnode/bcos-lightnode/transaction-pool/TransactionPoolImpl.h @@ -0,0 +1,61 @@ +#pragma once + +#include "../Log.h" +#include "bcos-crypto/interfaces/crypto/CryptoSuite.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include "bcos-tars-protocol/protocol/TransactionReceiptImpl.h" +#include "bcos-tars-protocol/tars/TransactionReceipt.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::transaction_pool +{ + +template +class TransactionPoolImpl : public bcos::concepts::transacton_pool::TransactionPoolBase< + TransactionPoolImpl> +{ + friend bcos::concepts::transacton_pool::TransactionPoolBase< + TransactionPoolImpl>; + +public: + TransactionPoolImpl( + bcos::crypto::CryptoSuite::Ptr cryptoSuite, TransactionPoolType transactionPool) + : m_cryptoSuite(std::move(cryptoSuite)), m_transactionPool(std::move(transactionPool)) + {} + +private: + task::Task impl_submitTransaction( + bcos::concepts::transaction::Transaction auto transaction, + bcos::concepts::receipt::TransactionReceipt auto& receipt) + { + TRANSACTIONPOOL_LOG(INFO) << "Submit transaction request"; + + auto transactionImpl = std::make_shared( + [m_transaction = std::move(transaction)]() mutable { return &m_transaction; }); + + auto submitResult = co_await concepts::getRef(m_transactionPool) + .submitTransaction(std::move(transactionImpl)); + + if (submitResult && submitResult->transactionReceipt()) + { + auto receiptImpl = + std::dynamic_pointer_cast( + submitResult->transactionReceipt()); + receipt = std::move(const_cast(receiptImpl->inner())); + } + + TRANSACTIONPOOL_LOG(INFO) << "Submit transaction successed"; + } + + bcos::crypto::CryptoSuite::Ptr m_cryptoSuite; + TransactionPoolType m_transactionPool; +}; +} // namespace bcos::transaction_pool \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/CMakeLists.txt b/lightnode/fisco-bcos-lightnode/CMakeLists.txt new file mode 100644 index 0000000..720e2d8 --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.17) + +file(GLOB_RECURSE SOURCES "bcos-lightnode/*.h") + +add_executable(fisco-bcos-lightnode ${SOURCES} main.cpp) +target_link_libraries(fisco-bcos-lightnode PUBLIC bcos-cpp-sdk ${PROTOCOL_INIT_LIB} ${GATEWAY_TARGET} + ${FRONT_TARGET} ${RPC_TARGET} ${STORAGE_TARGET} ${UTILITIES_TARGET} + ${COMMAND_HELPER_LIB} ${TOOL_TARGET} ${TARS_PROTOCOL_TARGET} ${CRYPTO_TARGET} ${LIGHTNODE_TARGET} ${LEDGER_TARGET}) \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/RPCInitializer.h b/lightnode/fisco-bcos-lightnode/RPCInitializer.h new file mode 100644 index 0000000..11f1d22 --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/RPCInitializer.h @@ -0,0 +1,178 @@ +#pragma once + +#include "client/LedgerClientImpl.h" +#include "client/P2PClientImpl.h" +#include "client/SchedulerClientImpl.h" +#include "client/TransactionPoolClientImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::lightnode +{ + +static auto initRPC(bcos::tool::NodeConfig::Ptr nodeConfig, std::string nodeID, + bcos::gateway::Gateway::Ptr gateway, bcos::crypto::KeyFactory::Ptr keyFactory, + bcos::concepts::ledger::Ledger auto localLedger, + bcos::concepts::ledger::Ledger auto remoteLedger, + bcos::concepts::transacton_pool::TransactionPool auto transactionPool, + bcos::concepts::scheduler::Scheduler auto scheduler) +{ + bcos::rpc::RpcFactory rpcFactory(nodeConfig->chainId(), gateway, keyFactory, nullptr); + auto wsConfig = rpcFactory.initConfig(nodeConfig); + auto wsService = rpcFactory.buildWsService(wsConfig); + auto jsonrpc = std::make_shared>(localLedger, remoteLedger, + transactionPool, scheduler, nodeConfig->chainId(), nodeConfig->groupId()); + + wsService->registerMsgHandler(bcos::protocol::MessageType::HANDESHAKE, + [nodeConfig, nodeID, localLedger](std::shared_ptr msg, + std::shared_ptr session) { + RPC_LOG(INFO) << "LightNode handshake request"; + + auto groupInfoCodec = std::make_shared(); + bcos::cppsdk::service::HandshakeResponse handshakeResponse(std::move(groupInfoCodec)); + + auto status = ~bcos::concepts::getRef(localLedger).getStatus(); + + handshakeResponse.mutableGroupBlockNumber().insert( + std::make_pair(nodeConfig->groupId(), status.blockNumber)); + + // Generate genesis info + Json::Value genesisConfig; + genesisConfig["consensusType"] = nodeConfig->consensusType(); + genesisConfig["blockTxCountLimit"] = nodeConfig->ledgerConfig()->blockTxCountLimit(); + genesisConfig["txGasLimit"] = (int64_t)(nodeConfig->txGasLimit()); + genesisConfig["consensusLeaderPeriod"] = + nodeConfig->ledgerConfig()->leaderSwitchPeriod(); + Json::Value sealerList(Json::arrayValue); + auto consensusNodeList = nodeConfig->ledgerConfig()->consensusNodeList(); + for (auto const& node : consensusNodeList) + { + Json::Value sealer; + sealer["nodeID"] = node->nodeID()->hex(); + sealer["weight"] = node->weight(); + sealerList.append(sealer); + } + genesisConfig["sealerList"] = sealerList; + Json::FastWriter fastWriter; + std::string genesisConfigStr = fastWriter.write(genesisConfig); + // Generate genesis info end + + auto groupInfo = std::make_shared(); + groupInfo->setChainID(nodeConfig->chainId()); + groupInfo->setGenesisConfig(genesisConfigStr); + groupInfo->setGroupID(nodeConfig->groupId()); + groupInfo->setWasm(nodeConfig->isWasm()); + groupInfo->setIniConfig(""); + + auto nodeInfo = std::make_shared(); + + Json::Value iniConfig; + iniConfig["isWasm"] = nodeConfig->isWasm(); + iniConfig["smCryptoType"] = nodeConfig->smCryptoType(); + iniConfig["chainID"] = nodeConfig->chainId(); + std::string iniStr = fastWriter.write(iniConfig); + + nodeInfo->setWasm(nodeConfig->isWasm()); + nodeInfo->setSmCryptoType(nodeConfig->smCryptoType()); + + nodeInfo->setIniConfig(iniStr); + nodeInfo->setMicroService(false); + nodeInfo->setNodeName(nodeConfig->nodeName()); + nodeInfo->setNodeID(nodeID); + nodeInfo->setNodeCryptoType( + (nodeConfig->smCryptoType() ? group::NodeCryptoType::SM_NODE : + group::NodeCryptoType::NON_SM_NODE)); + + + auto protocol = bcos::protocol::ProtocolInfo(); + protocol.setMinVersion(4); + protocol.setMaxVersion(1); + protocol.setVersion(nodeConfig->compatibilityVersion()); + nodeInfo->setNodeProtocol(std::move(protocol)); + nodeInfo->setNodeType(bcos::protocol::NodeType::None); + groupInfo->appendNodeInfo(std::move(nodeInfo)); + + std::vector groupInfoList{std::move(groupInfo)}; + handshakeResponse.setGroupInfoList(groupInfoList); + handshakeResponse.setProtocolVersion(1); + + std::string response; + handshakeResponse.encode(response); + + msg->setPayload(std::make_shared(response.begin(), response.end())); + session->asyncSendMessage(msg); + RPC_LOG(INFO) << LOG_DESC("LightNode handshake success") + << LOG_KV("version", session->version()) + << LOG_KV("endpoint", session ? session->endPoint() : "unknown") + << LOG_KV("handshakeResponse", response); + }); + wsService->registerMsgHandler(bcos::rpc::AMOPClientMessageType::AMOP_SUBTOPIC, + [](std::shared_ptr msg, + std::shared_ptr session) { + RPC_LOG(TRACE) << "LightNode amop topic request"; + }); + wsService->registerMsgHandler(bcos::protocol::MessageType::RPC_REQUEST, + [jsonrpc](std::shared_ptr msg, + std::shared_ptr session) mutable { + auto buffer = msg->payload(); + auto req = std::string_view((const char*)buffer->data(), buffer->size()); + + jsonrpc->onRPCRequest(req, [m_buffer = std::move(buffer), msg = std::move(msg), + session = std::move(session)](bcos::bytes resp) { + if (session && session->isConnected()) + { + auto buffer = std::make_shared(std::move(resp)); + msg->setPayload(buffer); + session->asyncSendMessage(msg); + } + else + { + // remove the callback + RPC_LOG(WARNING) + << LOG_DESC("Unable to send response for session has been inactive") + << LOG_KV("req", + std::string_view((const char*)m_buffer->data(), m_buffer->size())) + << LOG_KV("resp", std::string_view((const char*)resp.data(), resp.size())) + << LOG_KV("seq", msg->seq()) + << LOG_KV("endpoint", session ? session->endPoint() : std::string("")); + } + }); + }); + + auto httpServer = wsService->httpServer(); + if (httpServer) + { + httpServer->setHttpReqHandler( + [jsonrpc](const std::string_view req, std::function sender) { + jsonrpc->onRPCRequest(req, std::move(sender)); + }); + } + + return wsService; +} + +} // namespace bcos::lightnode \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/client/LedgerClientImpl.h b/lightnode/fisco-bcos-lightnode/client/LedgerClientImpl.h new file mode 100644 index 0000000..fc6fadc --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/client/LedgerClientImpl.h @@ -0,0 +1,155 @@ +#pragma once + +#include + +#include "P2PClientImpl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::ledger +{ + +class LedgerClientImpl : public bcos::concepts::ledger::LedgerBase +{ + friend bcos::concepts::ledger::LedgerBase; + +public: + LedgerClientImpl(std::shared_ptr p2p) : m_p2p(std::move(p2p)) {} + +private: + auto& p2p() { return bcos::concepts::getRef(m_p2p); } + + template + void processGetBlockFlags(bool& onlyHeaderFlag) + { + if constexpr (std::is_same_v) + { + onlyHeaderFlag = true; + } + } + + template + task::Task impl_getBlock(bcos::concepts::block::BlockNumber auto blockNumber, + bcos::concepts::block::Block auto& block) + { + bcostars::RequestBlock request; + request.blockNumber = blockNumber; + request.onlyHeader = false; + + (processGetBlockFlags(request.onlyHeader), ...); + + bcostars::ResponseBlock response; + auto nodeID = co_await p2p().randomSelectNode(); + co_await p2p().sendMessageByNodeID( + bcos::protocol::LIGHTNODE_GET_BLOCK, nodeID, request, response); + + if (response.error.errorCode) + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + + std::swap(response.block, block); + } + + task::Task impl_getTransactions(RANGES::range auto const& hashes, RANGES::range auto& out) + { + using DataType = RANGES::range_value_t>; + using RequestType = std::conditional_t, + bcostars::RequestTransactions, bcostars::RequestReceipts>; + using ResponseType = std::conditional_t, + bcostars::ResponseTransactions, bcostars::ResponseReceipts>; + auto moduleID = bcos::concepts::transaction::Transaction ? + protocol::LIGHTNODE_GET_TRANSACTIONS : + protocol::LIGHTNODE_GET_RECEIPTS; + + RequestType request; + request.hashes.reserve(RANGES::size(hashes)); + for (auto& hash : hashes) + { + request.hashes.emplace_back(std::vector(hash.begin(), hash.end())); + } + request.withProof = true; + + ResponseType response; + auto nodeID = co_await p2p().randomSelectNode(); + co_await p2p().sendMessageByNodeID(moduleID, std::move(nodeID), request, response); + + if (response.error.errorCode) + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + + if constexpr (bcos::concepts::transaction::Transaction) + { + bcos::concepts::resizeTo(out, response.transactions.size()); + std::move(RANGES::begin(response.transactions), RANGES::end(response.transactions), + RANGES::begin(out)); + } + else + { + bcos::concepts::resizeTo(out, response.receipts.size()); + std::move(RANGES::begin(response.receipts), RANGES::end(response.receipts), + RANGES::begin(out)); + } + } + + task::Task impl_getABI(std::string contractAddress) + { + bcostars::RequestGetABI request; + bcostars::ResponseGetABI response; + request.contractAddress = contractAddress; + auto nodeID = co_await p2p().randomSelectNode(); + + LIGHTNODE_LOG(TRACE) << LOG_KV("nodeID", nodeID) << LOG_KV("request.contractAddress", request.contractAddress); + co_await p2p().sendMessageByNodeID( + protocol::LIGHTNODE_GET_ABI, std::move(nodeID), request, response); + if (response.error.errorCode) + { + LIGHTNODE_LOG(WARNING) << "getABI failed, errorCode: " << response.error.errorCode + << " " << response.error.errorMessage; + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + } + LIGHTNODE_LOG(TRACE) << "get contractAddress " << request.contractAddress << "ABI from remote, the ABI is" + << response.abiStr; + auto abiStr = response.abiStr; + co_return abiStr; + } + + task::Task impl_getStatus() + { + bcostars::RequestGetStatus request; + bcostars::ResponseGetStatus response; + + auto nodeID = co_await p2p().randomSelectNode(); + + co_await p2p().sendMessageByNodeID( + protocol::LIGHTNODE_GET_STATUS, std::move(nodeID), request, response); + + if (response.error.errorCode) + { + LIGHTNODE_LOG(WARNING) << "Get status failed, errorCode: " << response.error.errorCode + << " " << response.error.errorMessage; + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + } + + bcos::concepts::ledger::Status status; + status.total = response.total; + status.failed = response.failed; + status.blockNumber = response.blockNumber; + + LIGHTNODE_LOG(DEBUG) << "Got status from remote: " << status.blockNumber << " " + << response.blockNumber; + + co_return status; + } + + std::shared_ptr m_p2p; +}; +} // namespace bcos::ledger \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/client/P2PClientImpl.h b/lightnode/fisco-bcos-lightnode/client/P2PClientImpl.h new file mode 100644 index 0000000..ef2b559 --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/client/P2PClientImpl.h @@ -0,0 +1,202 @@ +#pragma once + +#include "bcos-concepts/Exception.h" +#include "bcos-crypto/interfaces/crypto/KeyInterface.h" +#include "bcos-lightnode/Log.h" +#include "bcos-utilities/BoostLog.h" +#include +#include +#include +#include +#include +#include +#include + +namespace bcos::p2p +{ + +// clang-format off +struct NoNodeAvailable: public bcos::error::Exception {}; +// clang-format on + +class P2PClientImpl +{ +public: + P2PClientImpl(bcos::front::FrontServiceInterface::Ptr front, + bcos::gateway::GatewayInterface::Ptr gateway, bcos::crypto::KeyFactoryImpl::Ptr keyFactory, + std::string groupID) + : m_front(std::move(front)), + m_gateway(std::move(gateway)), + m_keyFactory(std::move(keyFactory)), + m_groupID(std::move(groupID)), + m_rng(std::random_device{}()) + {} + + task::Task sendMessageByNodeID(int moduleID, crypto::NodeIDPtr nodeID, + bcos::concepts::serialize::Serializable auto const& request, + bcos::concepts::serialize::Serializable auto& response) + { + bcos::bytes requestBuffer; + bcos::concepts::serialize::encode(request, requestBuffer); + + using ResponseType = std::remove_cvref_t; + struct Awaitable + { + Awaitable(bcos::front::FrontServiceInterface::Ptr& front, int moduleID, + crypto::NodeIDPtr nodeID, bcos::bytes buffer, ResponseType& response) + : m_front(front), + m_moduleID(moduleID), + m_nodeID(std::move(nodeID)), + m_requestBuffer(std::move(buffer)), + m_response(response) + {} + constexpr bool await_ready() const { return false; } + + void await_suspend(CO_STD::coroutine_handle::promise_type> handle) + { + LIGHTNODE_LOG(DEBUG) << "P2P client send message: " << m_moduleID << " | " + << m_nodeID->hex() << " | " << m_requestBuffer.size(); + bcos::concepts::getRef(m_front).asyncSendMessageByNodeID(m_moduleID, m_nodeID, + bcos::ref(m_requestBuffer), 30000, + [m_handle = std::move(handle), this](Error::Ptr error, bcos::crypto::NodeIDPtr, + bytesConstRef data, const std::string&, front::ResponseFunc) mutable { + LIGHTNODE_LOG(DEBUG) << "P2P client receive message: " << m_moduleID + << " | " << m_nodeID->hex() << " | " << data.size() + << " | " << (error ? error->errorCode() : 0) << " | " + << (error ? error->errorMessage() : ""); + if (!error) + { + bcos::concepts::serialize::decode(data, m_response); + } + else + { + m_error = std::move(error); + } + + m_handle.resume(); + }); + } + + constexpr void await_resume() const + { + if (m_error) + { + BOOST_THROW_EXCEPTION(*m_error); + } + } + + // Request params + bcos::front::FrontServiceInterface::Ptr& m_front; + int m_moduleID; + crypto::NodeIDPtr m_nodeID; + bcos::bytes m_requestBuffer; + + // Response params + Error::Ptr m_error; + ResponseType& m_response; + }; + + auto awaitable = Awaitable(m_front, moduleID, nodeID, std::move(requestBuffer), response); + co_await awaitable; + } + + task::Task randomSelectNode() + { + struct Awaitable + { + Awaitable(bcos::gateway::GatewayInterface::Ptr& gateway, std::string& groupID, + std::mt19937& rng) + : m_gateway(gateway), m_groupID(groupID), m_rng(rng) + {} + + constexpr bool await_ready() const noexcept { return false; } + void await_suspend(CO_STD::coroutine_handle<> handle) + { + bcos::concepts::getRef(m_gateway).asyncGetPeers( + [this, m_handle = handle](Error::Ptr error, const gateway::GatewayInfo::Ptr&, + const gateway::GatewayInfosPtr& peerGatewayInfos) mutable { + if (error) + { + m_error = std::move(error); + } + else + { + if (!peerGatewayInfos->empty()) + { + std::set nodeIDs; + for (const auto& peerGatewayInfo : *peerGatewayInfos) + { + auto nodeIDInfo = peerGatewayInfo->nodeIDInfo(); + auto nodeInfo = nodeIDInfo.find(m_groupID); + + if (nodeInfo != nodeIDInfo.end() && !nodeInfo->second.empty()) + { + for(auto& it : nodeInfo->second) + { + if(it.second == bcos::protocol::NodeType::CONSENSUS_NODE || it.second == bcos::protocol::NodeType::OBSERVER_NODE) + { + nodeIDs.insert(it.first); + LIGHTNODE_LOG(TRACE) << LOG_KV("NodeID:",it.first) << LOG_KV("nodeType:",it.second); + } + } + } + } + + if (!nodeIDs.empty()) + { + std::uniform_int_distribution distribution{ + 0U, nodeIDs.size() - 1}; + auto nodeIDIt = nodeIDs.begin(); + auto step = distribution(m_rng); + for (size_t i = 0; i < step; ++i) + { + ++nodeIDIt; + } + + m_nodeID = *nodeIDIt; + } + } + } + + m_handle.resume(); + }); + } + void await_resume() + { + if (m_error) + { + BOOST_THROW_EXCEPTION(*(m_error)); + } + } + + bcos::gateway::GatewayInterface::Ptr& m_gateway; + std::string& m_groupID; + std::mt19937& m_rng; + + Error::Ptr m_error; + std::string m_nodeID; + }; + + auto awaitable = Awaitable(m_gateway, m_groupID, m_rng); + co_await awaitable; + auto& nodeID = awaitable.m_nodeID; + + if (nodeID.empty()) + { + BOOST_THROW_EXCEPTION(NoNodeAvailable{}); + } + + bcos::bytes nodeIDBin; + boost::algorithm::unhex(nodeID.begin(), nodeID.end(), std::back_inserter(nodeIDBin)); + auto nodeIDPtr = m_keyFactory->createKey(nodeIDBin); + co_return nodeIDPtr; + } + +private: + bcos::front::FrontServiceInterface::Ptr m_front; + bcos::gateway::GatewayInterface::Ptr m_gateway; + bcos::crypto::KeyFactoryImpl::Ptr m_keyFactory; + std::string m_groupID; + std::mt19937 m_rng; +}; +} // namespace bcos::p2p \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/client/SchedulerClientImpl.h b/lightnode/fisco-bcos-lightnode/client/SchedulerClientImpl.h new file mode 100644 index 0000000..b0a2add --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/client/SchedulerClientImpl.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include "P2PClientImpl.h" +#include +#include +#include + +namespace bcos::scheduler +{ +class SchedulerClientImpl : public bcos::concepts::scheduler::SchedulerBase +{ + friend bcos::concepts::scheduler::SchedulerBase; + +public: + SchedulerClientImpl(std::shared_ptr p2p) : m_p2p(std::move(p2p)) {} + +private: + auto& p2p() { return bcos::concepts::getRef(m_p2p); } + + task::Task impl_call(bcos::concepts::transaction::Transaction auto const& transaction, + bcos::concepts::receipt::TransactionReceipt auto& receipt) + { + bcostars::RequestSendTransaction request; + request.transaction = std::move(transaction); + + bcostars::ResponseSendTransaction response; + auto nodeID = co_await p2p().randomSelectNode(); + co_await p2p().sendMessageByNodeID( + bcos::protocol::LIGHTNODE_CALL, nodeID, request, response); + + if (response.error.errorCode) + { + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + } + + std::swap(response.receipt, receipt); + } + + std::shared_ptr m_p2p; +}; +} // namespace bcos::scheduler \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/client/TransactionPoolClientImpl.h b/lightnode/fisco-bcos-lightnode/client/TransactionPoolClientImpl.h new file mode 100644 index 0000000..0629014 --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/client/TransactionPoolClientImpl.h @@ -0,0 +1,46 @@ +#pragma once + +#include + +#include "P2PClientImpl.h" +#include +#include +#include +#include +#include + +namespace bcos::transaction_pool +{ + +class TransactionPoolClientImpl + : public bcos::concepts::transacton_pool::TransactionPoolBase +{ + friend bcos::concepts::transacton_pool::TransactionPoolBase; + +public: + TransactionPoolClientImpl(std::shared_ptr p2p) : m_p2p(std::move(p2p)) {} + +private: + auto& p2p() { return bcos::concepts::getRef(m_p2p); } + + task::Task impl_submitTransaction( + bcos::concepts::transaction::Transaction auto transaction, + bcos::concepts::receipt::TransactionReceipt auto& receipt) + { + bcostars::RequestSendTransaction request; + request.transaction = std::move(transaction); + + bcostars::ResponseSendTransaction response; + auto nodeID = co_await p2p().randomSelectNode(); + co_await p2p().sendMessageByNodeID( + bcos::protocol::LIGHTNODE_SEND_TRANSACTION, nodeID, request, response); + + if (response.error.errorCode) + BOOST_THROW_EXCEPTION(std::runtime_error(response.error.errorMessage)); + + std::swap(response.receipt, receipt); + } + + std::shared_ptr m_p2p; +}; +} // namespace bcos::transaction_pool \ No newline at end of file diff --git a/lightnode/fisco-bcos-lightnode/main.cpp b/lightnode/fisco-bcos-lightnode/main.cpp new file mode 100644 index 0000000..5a5f9db --- /dev/null +++ b/lightnode/fisco-bcos-lightnode/main.cpp @@ -0,0 +1,241 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + + * @brief main for the fisco-bcos + * @file main.cpp + * @author: ancelmo + * @date 2022-07-04 + */ + +#include + +#include "RPCInitializer.h" +#include "bcos-crypto/interfaces/crypto/CryptoSuite.h" +#include "libinitializer/CommandHelper.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static auto newStorage(const std::string& path) +{ + boost::filesystem::create_directories(path); + rocksdb::Options options; + options.create_if_missing = true; + options.compression = rocksdb::kZSTD; + options.max_open_files = 512; + + // open DB + rocksdb::DB* rocksdb = nullptr; + rocksdb::Status status = rocksdb::DB::Open(options, path, &rocksdb); + if (!status.ok()) + { + BCOS_LOG(INFO) << LOG_DESC("open rocksDB failed") << LOG_KV("error", status.ToString()); + BOOST_THROW_EXCEPTION(std::runtime_error("open rocksDB failed, err:" + status.ToString())); + } + return std::make_shared( + std::unique_ptr(rocksdb), nullptr); +} + +static auto startSyncerThread(bcos::concepts::ledger::Ledger auto fromLedger, + bcos::concepts::ledger::Ledger auto toLedger, + std::shared_ptr wsService, std::string groupID, + std::string nodeName, std::shared_ptr stopToken) +{ + std::thread worker([fromLedger = std::move(fromLedger), toLedger = std::move(toLedger), + wsService = std::move(wsService), groupID = std::move(groupID), + nodeName = std::move(nodeName), + stopToken = std::move(stopToken)]() mutable { + bcos::pthread_setThreadName("Syncer"); + while (!(*stopToken)) + { + try + { + auto& ledger = bcos::concepts::getRef(toLedger); + + auto syncedBlock = + ~ledger + .template sync, bcostars::Block>( + fromLedger, true); + auto currentStatus = ~ledger.getStatus(); + + if (syncedBlock > 0) + { + // Notify the client if block number changed + auto sessions = wsService->sessions(); + + if (!sessions.empty()) + { + Json::Value response; + response["group"] = groupID; + response["nodeName"] = nodeName; + response["blockNumber"] = currentStatus.blockNumber; + auto resp = response.toStyledString(); + + auto message = wsService->messageFactory()->buildMessage(); + message->setPacketType(bcos::protocol::MessageType::BLOCK_NOTIFY); + message->setPayload( + std::make_shared(resp.begin(), resp.end())); + + for (auto& session : sessions) + { + if (session && session->isConnected()) + { + session->asyncSendMessage(message); + } + } + } + } + else + { + // No block update, wait for it + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + } + catch (std::exception& e) + { + LIGHTNODE_LOG(INFO) + << "Sync block fail, may be connecting" << boost::diagnostic_information(e); + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + } + }); + + + return worker; +} + + +void starLightnode(bcos::tool::NodeConfig::Ptr nodeConfig, auto ledger, auto front, auto gateway, + auto keyFactory, auto nodeID) +{ + LIGHTNODE_LOG(INFO) << "Init lightnode p2p client..."; + auto p2pClient = std::make_shared( + front, gateway, keyFactory, nodeConfig->groupId()); + auto remoteLedger = std::make_shared(p2pClient); + auto remoteTransactionPool = + std::make_shared(p2pClient); + auto transactionPool = + std::make_shared(p2pClient); + auto scheduler = std::make_shared(p2pClient); + + LIGHTNODE_LOG(INFO) << "Prepare genesis block..."; + bcostars::Block genesisBlock; + genesisBlock.blockHeader.data.blockNumber = 0; + if (nodeConfig->compatibilityVersion() >= + static_cast(bcos::protocol::BlockVersion::V3_1_VERSION)) + { + genesisBlock.blockHeader.data.version = + static_cast( + nodeConfig->compatibilityVersion()); + } + bcos::concepts::bytebuffer::assignTo( + nodeConfig->genesisData(), genesisBlock.blockHeader.data.extraData); + ~ledger->setupGenesisBlock(std::move(genesisBlock)); + + LIGHTNODE_LOG(INFO) << "Init lightnode rpc..."; + auto wsService = bcos::lightnode::initRPC( + nodeConfig, nodeID, gateway, keyFactory, ledger, remoteLedger, transactionPool, scheduler); + wsService->start(); + + LIGHTNODE_LOG(INFO) << "Init lightnode block syner..."; + auto stopToken = std::make_shared(false); + auto syncer = startSyncerThread( + remoteLedger, ledger, wsService, nodeConfig->groupId(), nodeConfig->nodeName(), stopToken); + syncer.join(); +} + +int main([[maybe_unused]] int argc, [[maybe_unused]] const char* argv[]) +{ + auto param = bcos::initializer::initAirNodeCommandLine(argc, argv, false); + bcos::initializer::showNodeVersionMetric(); + + std::string configFile = param.configFilePath; + std::string genesisFile = param.genesisFilePath; + + boost::property_tree::ptree configProperty; + boost::property_tree::read_ini(configFile, configProperty); + + auto logInitializer = std::make_shared(); + logInitializer->initLog(configFile); + + g_BCOSConfig.setCodec(std::make_shared()); + + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(keyFactory); + nodeConfig->loadGenesisConfig(genesisFile); + nodeConfig->loadConfig(configFile); + + auto protocolInitializer = bcos::initializer::ProtocolInitializer(); + protocolInitializer.init(nodeConfig); + protocolInitializer.loadKeyPair(nodeConfig->privateKeyPath()); + auto nodeID = protocolInitializer.keyPair()->publicKey()->hex(); + + auto front = std::make_shared(); + // gateway + bcos::gateway::GatewayFactory gatewayFactory(nodeConfig->chainId(), "local", nullptr); + auto gateway = gatewayFactory.buildGateway(configFile, true, nullptr, "localGateway"); + auto protocolInfo = g_BCOSConfig.protocolInfo(bcos::protocol::ProtocolModuleID::GatewayService); + gateway->gatewayNodeManager()->registerNode(nodeConfig->groupId(), + protocolInitializer.keyPair()->publicKey(), bcos::protocol::NodeType::LIGHT_NODE, front, + protocolInfo); + gateway->start(); + + // front + front->setMessageFactory(std::make_shared()); + front->setGroupID(nodeConfig->groupId()); + front->setNodeID(protocolInitializer.keyPair()->publicKey()); + front->setIoService(std::make_shared()); + front->setGatewayInterface(gateway); + front->setThreadPool(std::make_shared("p2p", 1)); + front->registerModuleMessageDispatcher(bcos::protocol::BlockSync, + [](const bcos::crypto::NodeIDPtr&, const std::string&, bcos::bytesConstRef) {}); + front->registerModuleMessageDispatcher(bcos::protocol::AMOP, + [](const bcos::crypto::NodeIDPtr&, const std::string&, bcos::bytesConstRef) {}); + front->start(); + + // local ledger + auto storage = newStorage(nodeConfig->storagePath()); + bcos::storage::StorageImpl storageWrapper(std::move(storage)); + + if (nodeConfig->smCryptoType()) + { + auto localLedger = std::make_shared>( + std::move(storageWrapper), protocolInitializer.blockFactory(), storage); + + LIGHTNODE_LOG(INFO) << "start sm light node..."; + starLightnode(nodeConfig, localLedger, front, gateway, keyFactory, nodeID); + } + else + { + auto localLedger = std::make_shared>( + std::move(storageWrapper), protocolInitializer.blockFactory(), storage); + + LIGHTNODE_LOG(INFO) << "start light node..."; + starLightnode(nodeConfig, localLedger, front, gateway, keyFactory, nodeID); + } + + return 0; +} diff --git a/lightnode/tests/CMakeLists.txt b/lightnode/tests/CMakeLists.txt new file mode 100644 index 0000000..d7e5d05 --- /dev/null +++ b/lightnode/tests/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.17) + +project(test-lightnode) + +find_package(Boost REQUIRED unit_test_framework) + +add_executable(test-lightnode TransactionPoolTest.cpp main.cpp) +target_link_libraries(test-lightnode PUBLIC bcos-lightnode ${TABLE_TARGET} ${TARS_PROTOCOL_TARGET} Boost::unit_test_framework) + +add_test(NAME test-lightnode COMMAND test-lightnode) \ No newline at end of file diff --git a/lightnode/tests/P2PClientTest.cpp b/lightnode/tests/P2PClientTest.cpp new file mode 100644 index 0000000..902368c --- /dev/null +++ b/lightnode/tests/P2PClientTest.cpp @@ -0,0 +1,15 @@ +#include +#include + +struct P2PClientFixture +{ +}; + +BOOST_FIXTURE_TEST_SUITE(P2PClientTest, P2PClientFixture) + +BOOST_AUTO_TEST_CASE(randomGetNodeID) { + +} + + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/lightnode/tests/RPCTest.cpp b/lightnode/tests/RPCTest.cpp new file mode 100644 index 0000000..e69de29 diff --git a/lightnode/tests/SchedulerTest.cpp b/lightnode/tests/SchedulerTest.cpp new file mode 100644 index 0000000..e69de29 diff --git a/lightnode/tests/TransactionPoolTest.cpp b/lightnode/tests/TransactionPoolTest.cpp new file mode 100644 index 0000000..9d313b1 --- /dev/null +++ b/lightnode/tests/TransactionPoolTest.cpp @@ -0,0 +1,118 @@ +#include "bcos-task/Wait.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +template +class MockTransactionPoolMT +{ +public: + bcos::task::Task submitTransaction( + bcos::protocol::Transaction::Ptr transaction) + { + if constexpr (withError) + { + auto error = std::make_shared(-1, "mock error!"); + BOOST_THROW_EXCEPTION(*error); + } + else + { + auto result = + std::make_shared(nullptr); + bcostars::TransactionReceipt receipt; + receipt.data.status = 100; + receipt.data.blockNumber = 10086; + auto receiptObj = std::make_shared( + [receipt = std::move(receipt)]() mutable { return &receipt; }); + result->setTransactionReceipt(receiptObj); + co_return result; + } + } +}; + +class MockTransactionPoolST +{ +public: + bcos::task::Task submitTransaction( + bcos::protocol::Transaction::Ptr transaction) + { + std::cout << "start resume at " << std::this_thread::get_id() << std::endl; + + auto result = std::make_shared(nullptr); + bcostars::TransactionReceipt receipt; + receipt.data.status = 79; + auto receiptObj = std::make_shared( + [receipt = std::move(receipt)]() mutable { return &receipt; }); + result->setTransactionReceipt(receiptObj); + std::cout << "resume ended " << std::this_thread::get_id() << std::endl; + + co_return result; + } +}; + +struct TransactionPoolFixture +{ +}; + +BOOST_FIXTURE_TEST_SUITE(TransactionPoolTest, TransactionPoolFixture) + +BOOST_AUTO_TEST_CASE(mtTxPool) +{ + MockTransactionPoolMT mock1; + bcos::transaction_pool::TransactionPoolImpl transactionPool(nullptr, mock1); + + bcostars::Transaction transaction; + bcostars::TransactionReceipt receipt; + + std::cout << "submitTransaction start at " << std::this_thread::get_id() << std::endl; + bcos::task::syncWait(transactionPool.submitTransaction(transaction, receipt)); + std::cout << "submitTransaction success at " << std::this_thread::get_id() << std::endl; + BOOST_CHECK_EQUAL(receipt.data.blockNumber, 10086); + BOOST_CHECK_EQUAL(receipt.data.status, 100); + + MockTransactionPoolMT mock2; + bcos::transaction_pool::TransactionPoolImpl transactionPool2(nullptr, mock2); + BOOST_CHECK_THROW( + bcos::task::syncWait(transactionPool2.submitTransaction(transaction, receipt)), + bcos::Error); +} + +BOOST_AUTO_TEST_CASE(stTxPool) +{ + bcostars::Transaction transaction; + bcostars::TransactionReceipt receipt; + + MockTransactionPoolST mock3; + bcos::transaction_pool::TransactionPoolImpl transactionPool3(nullptr, mock3); + bcos::task::syncWait(transactionPool3.submitTransaction(transaction, receipt)); + + BOOST_CHECK_EQUAL(receipt.data.status, 79); +} + +bcos::task::Task mainTask() +{ + bcostars::Transaction transaction; + bcostars::TransactionReceipt receipt; + + MockTransactionPoolMT mock2; + bcos::transaction_pool::TransactionPoolImpl transactionPool2(nullptr, mock2); + BOOST_CHECK_THROW(co_await transactionPool2.submitTransaction(transaction, receipt), + boost::wrapexcept); +} + +BOOST_AUTO_TEST_CASE(multiCoro) +{ + bcos::task::syncWait(mainTask()); +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/lightnode/tests/main.cpp b/lightnode/tests/main.cpp new file mode 100644 index 0000000..0cdfc68 --- /dev/null +++ b/lightnode/tests/main.cpp @@ -0,0 +1,4 @@ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/log/log_2023050219.13.log b/log/log_2023050219.13.log deleted file mode 100644 index 20cef55..0000000 --- a/log/log_2023050219.13.log +++ /dev/null @@ -1,82 +0,0 @@ -info|2023-05-02 19:13:56.691348|[INITIALIZER]initGlobalConfig -info|2023-05-02 19:13:56.691430|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:13:56.691468|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:13:56.691477|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:13:56.691483|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:13:56.691490|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:13:56.691492|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:13:56.691495|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:13:56.691503|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:13:56.691519|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:13:56.691596|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:13:56.691603|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:13:56.691614|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:13:56.691624|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:13:56.691629|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:13:56.691647|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:13:56.691653|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:13:56.691664|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:13:56.691669|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:13:56.691671|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:13:56.691716|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:13:56.691730|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:13:56.691737|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:13:56.691743|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:13:56.691750|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:13:56.691753|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:13:56.691756|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:13:56.691765|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:13:56.691777|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:13:56.691850|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:13:56.691859|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:13:56.691866|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:13:56.691877|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:13:56.691883|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:13:56.691899|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:13:56.691908|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:13:56.691918|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:13:56.691927|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:13:56.691931|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:13:56.691942|[INITIALIZER]init crypto suite success -info|2023-05-02 19:13:56.691947|[INITIALIZER]init blockFactory success -info|2023-05-02 19:13:56.691953|[INITIALIZER]loadKeyPair failed,privateKeyPath=conf/node.pem diff --git a/log/log_2023050219.17.log b/log/log_2023050219.17.log deleted file mode 100644 index 1ed87d3..0000000 --- a/log/log_2023050219.17.log +++ /dev/null @@ -1,82 +0,0 @@ -info|2023-05-02 19:17:11.657972|[INITIALIZER]initGlobalConfig -info|2023-05-02 19:17:11.658060|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:17:11.658083|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:17:11.658092|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:17:11.658099|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:17:11.658105|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:17:11.658107|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:17:11.658111|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:17:11.658122|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:17:11.658143|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:17:11.658279|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:17:11.658292|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:17:11.658306|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:17:11.658322|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:17:11.658333|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:17:11.658354|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:17:11.658368|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:17:11.658387|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:17:11.658398|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:17:11.658402|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:17:11.658472|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:17:11.658495|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:17:11.658506|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:17:11.658522|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:17:11.658537|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:17:11.658546|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:17:11.658550|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:17:11.658566|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:17:11.658585|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:17:11.658696|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:17:11.658707|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:17:11.658715|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:17:11.658724|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:17:11.658730|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:17:11.658750|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:17:11.658761|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:17:11.658776|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:17:11.658786|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:17:11.658789|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:17:11.658804|[INITIALIZER]init crypto suite success -info|2023-05-02 19:17:11.658812|[INITIALIZER]init blockFactory success -info|2023-05-02 19:17:11.658820|[INITIALIZER]loadKeyPair failed,privateKeyPath=conf/node.pem diff --git a/log/log_2023050219.21.log b/log/log_2023050219.21.log deleted file mode 100644 index c505728..0000000 --- a/log/log_2023050219.21.log +++ /dev/null @@ -1,82 +0,0 @@ -info|2023-05-02 19:21:55.248442|[INITIALIZER]initGlobalConfig -info|2023-05-02 19:21:55.248532|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:21:55.248556|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:21:55.248565|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:21:55.248572|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:21:55.248579|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:21:55.248581|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:21:55.248584|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:21:55.248592|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:21:55.248610|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:21:55.248681|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:21:55.248686|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:21:55.248694|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:21:55.248701|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:21:55.248704|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:21:55.248721|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:21:55.248726|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:21:55.248740|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:21:55.248747|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:21:55.248751|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:21:55.248826|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:21:55.248845|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:21:55.248857|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:21:55.248869|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:21:55.248883|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:21:55.248886|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:21:55.248889|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:21:55.248898|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:21:55.248912|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:21:55.248985|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:21:55.248993|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:21:55.249000|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:21:55.249006|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:21:55.249013|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:21:55.249026|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:21:55.249034|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:21:55.249045|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:21:55.249052|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:21:55.249054|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:21:55.249067|[INITIALIZER]init crypto suite success -info|2023-05-02 19:21:55.249069|[INITIALIZER]init blockFactory success -info|2023-05-02 19:21:55.249075|[INITIALIZER]loadKeyPair failed,privateKeyPath=conf/node.pem diff --git a/log/log_2023050219.22.log b/log/log_2023050219.22.log deleted file mode 100644 index 4ba1b45..0000000 --- a/log/log_2023050219.22.log +++ /dev/null @@ -1,95 +0,0 @@ -info|2023-05-02 19:22:38.347159|[INITIALIZER]initGlobalConfig -info|2023-05-02 19:22:38.347244|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:22:38.347268|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:22:38.347277|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:22:38.347284|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:22:38.347290|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:22:38.347293|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:22:38.347296|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:22:38.347304|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:22:38.347325|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:22:38.347435|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:22:38.347448|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:22:38.347478|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:22:38.347493|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:22:38.347502|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:22:38.347526|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:22:38.347539|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:22:38.347554|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:22:38.347565|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:22:38.347569|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:22:38.347644|[NodeConfig][METRIC]loadChainConfig,smCrypto=false,chainId=chain0,groupId=group0,blockLimit=1000 -info|2023-05-02 19:22:38.347666|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,weight=1 -info|2023-05-02 19:22:38.347681|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,weight=1 -info|2023-05-02 19:22:38.347693|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,weight=1 -info|2023-05-02 19:22:38.347706|[NodeConfig][parseConsensusNodeList],sectionName=consensus,nodeId=ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,weight=1 -info|2023-05-02 19:22:38.347714|[NodeConfig][parseConsensusNodeList],totalNodesSize=4 -info|2023-05-02 19:22:38.347719|[NodeConfig]loadLedgerConfig,consensus_type=pbft,block_tx_count_limit=1000,gas_limit=3000000000,leader_period=1,minSealTime=0,compatibilityVersion=3.2.0 -info|2023-05-02 19:22:38.347730|[NodeConfig][METRIC]loadExecutorConfig,isWasm=false,isAuthCheck=false,authAdminAccount=,ismSerialExecute=true -info|2023-05-02 19:22:38.347750|[NodeConfig][generateGenesisData],genesisData=[chain] -sm_crypto:0 -chainID: chain0 -grouID: group0 -[consensys] -consensus_type: pbft -block_tx_count_limit:1000 -leader_period:1 -[version] -compatibility_version:3.2.0 -[tx] -gaslimit:3000000000 -[executor] -iswasm: 0 -isAuthCheck:0 -authAdminAccount: -isSerialExecute:1 -node.0:17d8a8405377274d8587a36c37caf1d888d7dcf158be686045f313b0f2bd8699d4c967b3d40421e9810a1bf45632dbb03f34bce5ab8b7783150c1643aaf4dea2,1 -node.1:7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,1 -node.2:9da6cb423d7826b96dde51e588a44f153ed2ff4aa75cacba6a6f267bea3851853f666808aaa3491c7b2822d9ea9d7c0777c95ca5038dbe85520b6d55af53d200,1 -node.3:ca26ab8a96cbf894099d3abf23d9d5e7e156b881433b8600fb693187e9250f77ac482f5117f9af98396e1d9f7af1e9ea2b1b01d7a54b6da05e6dfda5a936763d,1 -info|2023-05-02 19:22:38.347860|[NodeConfig]loadCertConfig,ca_path=./conf,sm_ca_cert=./conf/sm_ca.crt,sm_node_cert=./conf/sm_ssl.crt,sm_node_key=./conf/sm_ssl.key,sm_ennode_cert=./conf/sm_enssl.crt,sm_ennode_key=./conf/sm_enssl.key -info|2023-05-02 19:22:38.347871|[NodeConfig]loadCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:22:38.347882|[NodeConfig]loadRpcConfig,listenIP=0.0.0.0,listenPort=20200,listenPort=20200,smSsl=false,disableSsl=false -info|2023-05-02 19:22:38.347892|[NodeConfig]loadGatewayConfig,listenIP=0.0.0.0,listenPort=30300,listenPort=30300,smSsl=false,nodesFile=nodes.json -info|2023-05-02 19:22:38.347901|[NodeConfig]loadSealerConfig,minSealTime=500 -info|2023-05-02 19:22:38.347916|[NodeConfig]loadTxPoolConfig,txpoolLimit=15000,notifierWorkers=2,verifierWorkers=8,txsExpirationTime(ms)=600000 -info|2023-05-02 19:22:38.347927|[NodeConfig]loadSecurityConfig,enable_hsm=false,privateKeyPath=conf/node.pem -info|2023-05-02 19:22:38.347945|[NodeConfig]loadStorageConfig,storagePath=data,KeyPage=10240,storageType=RocksDB,pdAddrs=127.0.0.1:2379,pdCaPath=,enableArchive=false,archiveListenIP=,archiveListenPort=0,enableLRUCacheStorage=true -info|2023-05-02 19:22:38.347955|[NodeConfig]loadConsensusConfig,checkPointTimeoutInterval=3000 -info|2023-05-02 19:22:38.347959|[NodeConfig]loadOthersConfig,sendTxTimeout=-1,vmCacheSize=1024 -info|2023-05-02 19:22:38.347975|[INITIALIZER]init crypto suite success -info|2023-05-02 19:22:38.347979|[INITIALIZER]init blockFactory success -info|2023-05-02 19:22:38.348008|[INITIALIZER][SecureInitializer]loading privateKey -info|2023-05-02 19:22:38.348144|[INITIALIZER]loadKeyPair from privateKey,privateKeySize=32,enableStorageSecurity=false -info|2023-05-02 19:22:38.352235|[INITIALIZER][METRIC]loadKeyPair from privateKeyPath,privateKeyPath=conf/node.pem -info|2023-05-02 19:22:38.352244|[INITIALIZER][METRIC]loadKeyPair success,publicKey=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587 -info|2023-05-02 19:22:38.352365|[NodeConfig]loadNodeServiceConfig,withoutTarsFramework=false -info|2023-05-02 19:22:38.352376|[NodeConfig]load node service,nodeName=7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587,withoutTarsFramework=false,schedulerServiceName=chain0.7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587SchedulerService,executorServiceName=chain0.7e8db99643e78251c8fe6bc9d21e64f461d50aa5371f4413427d55a8b90fb629dae02ba9f2da9d4a618d925cc3da3268983962960d0fe0c898e33e944ace2587ExecutorService -info|2023-05-02 19:22:38.352492|[Gateway][Config]initP2PConfig ok!,listenIP=0.0.0.0,listenPort=30300,smSSL=false,nodePath=./,nodeFileName=nodes.json -info|2023-05-02 19:22:38.352510|[Gateway][Config]the total_outgoing_bw_limit is not initialized -info|2023-05-02 19:22:38.352513|[Gateway][Config]the conn_outgoing_bw_limit is not initialized -info|2023-05-02 19:22:38.352516|[Gateway][Config]the group_outgoing_bw_limit is not initialized -info|2023-05-02 19:22:38.352520|[Gateway][Config][initRateLimiterConfig],enableRateLimit=false,statInterval=60000,enableDistributedRatelimit=false,enableDistributedRateLimitCache=true,distributedRateLimitCachePercent=20,enableGroupRateLimit=false,enableConRateLimit=false,totalOutgoingBwLimit=-1,connOutgoingBwLimit=-1,groupOutgoingBwLimit=-1,moduleIDs=raft,pbft,cons_txs_sync,ips size=0,groups size=0 -info|2023-05-02 19:22:38.352534|[Gateway][Config]initCertConfig,ca_path=./conf,ca_cert=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:22:38.352568|[Gateway][Config]initCertConfig,ca=./conf/ca.crt,node_cert=./conf/ssl.crt,node_key=./conf/ssl.key -info|2023-05-02 19:22:38.352582|[Gateway][Config]initConfig ok!,configPath=/home/ubuntu/fisco/sgx_nodes/127.0.0.1/node0/config.ini,listenIP=0.0.0.0,listenPort=30300,smSSL=false,peers=0 diff --git a/main.go b/main.go deleted file mode 100644 index 6cee83f..0000000 --- a/main.go +++ /dev/null @@ -1,50 +0,0 @@ -package main - -import ( - "fisco-sgx-go/global" - "fisco-sgx-go/internal/routers" - "fisco-sgx-go/pkg/setting" - "log" - "net/http" - "time" - - "github.com/gin-gonic/gin" -) - -func init() { - err := setupSetting() - if err != nil { - log.Fatalf("init.setupSetting err: %v", err) - } -} -func setupSetting() error { - setting, err := setting.NewSetting() - if err != nil { - return err - } - err = setting.ReadSection("Server", &global.ServerSetting) - if err != nil { - return err - } - err = setting.ReadSection("Fisco", &global.FiscoSetting) - if err != nil { - return err - } - - global.ServerSetting.ReadTimeout *= time.Second - global.ServerSetting.WriteTimeout *= time.Second - return nil -} -func main() { - //开始gin服务器搭建 - gin.SetMode(global.ServerSetting.RunMode) - router := routers.NewRouter() - s := &http.Server{ - Addr: ":" + global.ServerSetting.HttpPort, - Handler: router, - ReadTimeout: global.ServerSetting.ReadTimeout, - WriteTimeout: global.ServerSetting.WriteTimeout, - MaxHeaderBytes: 1 << 20, - } - s.ListenAndServe() -} diff --git a/pkg/setting/section.go b/pkg/setting/section.go deleted file mode 100644 index 91f9f8e..0000000 --- a/pkg/setting/section.go +++ /dev/null @@ -1,27 +0,0 @@ -package setting - -import "time" - -// 服务器配置 -type ServerSettingS struct { - RunMode string - HttpPort string - ReadTimeout time.Duration - WriteTimeout time.Duration -} - -// Fisco目录配置 -type FiscoSettingS struct { - FiscoStartPath string - FiscoPort string - FiscoStopPath string -} - -func (s *Setting) ReadSection(k string, v interface{}) error { - err := s.vp.UnmarshalKey(k, v) - if err != nil { - return err - } - - return nil -} diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go deleted file mode 100644 index 121be8c..0000000 --- a/pkg/setting/setting.go +++ /dev/null @@ -1,22 +0,0 @@ -package setting - -import ( - "github.com/spf13/viper" -) - -type Setting struct { - vp *viper.Viper -} - -func NewSetting() (*Setting, error) { - vp := viper.New() - vp.SetConfigName("config") - vp.AddConfigPath("configs/") - vp.SetConfigType("yaml") - err := vp.ReadInConfig() - if err != nil { - return nil, err - } - - return &Setting{vp}, nil -} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..928666b --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.14) + +project(FISCO-BCOS-Test) + +file(GLOB_RECURSE SOURCES "unittest/*.cpp") + +find_package(TBB CONFIG REQUIRED) + +add_executable(fisco-bcos-test ${SOURCES}) +find_package(Boost REQUIRED unit_test_framework program_options) +target_link_libraries(fisco-bcos-test PUBLIC ${TOOL_TARGET} ${CRYPTO_TARGET} ${TARS_PROTOCOL_TARGET} Boost::program_options Boost::unit_test_framework TBB::tbb) + +# add_test(NAME fisco-bcos-test WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} COMMAND fisco-bcos-test) + +add_subdirectory(perf) \ No newline at end of file diff --git a/tests/perf/CMakeLists.txt b/tests/perf/CMakeLists.txt new file mode 100644 index 0000000..fb4ca0e --- /dev/null +++ b/tests/perf/CMakeLists.txt @@ -0,0 +1,3 @@ +add_executable(storage-bench benchmark.cpp) +find_package(Boost REQUIRED program_options) +target_link_libraries(storage-bench ${CRYPTO_TARGET} ${TABLE_TARGET} ${STORAGE_TARGET} Boost::program_options) \ No newline at end of file diff --git a/tests/perf/benchmark.cpp b/tests/perf/benchmark.cpp new file mode 100644 index 0000000..aeac3ef --- /dev/null +++ b/tests/perf/benchmark.cpp @@ -0,0 +1,344 @@ +#include "bcos-crypto/hash/Keccak256.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-storage/RocksDBStorage.h" +#include "bcos-table/src/KeyPageStorage.h" +#include "bcos-table/src/StateStorage.h" +#include "bcos-table/src/StateStorageInterface.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace bcos; +using namespace bcos::crypto; +using namespace bcos::storage; + +int main(int argc, const char* argv[]) +{ + boost::program_options::options_description main_options("Usage of Table benchmark"); + main_options.add_options()("help,h", "print help information")("pageSize,p", + boost::program_options::value()->default_value(0), + "sizeof page(if >0 use KeyPageStorage, else use stateStorage)")("chainLength,c", + boost::program_options::value()->default_value(1), "storage queue length")("total,t", + boost::program_options::value()->default_value(100000), + "data set size")("onlyWrite,o", boost::program_options::value()->default_value(false), + "only test write performance")("sorted,s", + boost::program_options::value()->default_value(false), "use sorted data set")( + "db,d", boost::program_options::value()->default_value(0), "init db keys count"); + boost::program_options::variables_map vm; + try + { + boost::program_options::store( + boost::program_options::parse_command_line(argc, argv, main_options), vm); + } + catch (...) + { + std::cout << "invalid parameters" << std::endl; + std::cout << main_options << std::endl; + exit(0); + } + if (vm.count("help")) + { + std::cout << main_options << std::endl; + exit(0); + } + int keyPageSize = vm["pageSize"].as(); + int total = vm["total"].as(); + int storageChainLength = vm["chainLength"].as(); + bool onlyWrite = vm["onlyWrite"].as(); + bool sorted = vm["sorted"].as(); + int dbKeys = vm["db"].as(); + + storageChainLength = storageChainLength > 0 ? storageChainLength : 1; + // set log level + boost::log::core::get()->set_filter( + boost::log::trivial::severity >= boost::log::trivial::error); + + + // prepare data set + int max = std::max(total, dbKeys); + std::vector keySet(max, ""); + std::vector valueSet(max, ""); + + for (int i = 0; i < max; ++i) + { + keySet[i] = boost::uuids::to_string(boost::uuids::random_generator()()); + boost::erase_all(keySet[i], "-"); + valueSet[i] = boost::uuids::to_string(boost::uuids::random_generator()()); + boost::erase_all(valueSet[i], "-"); + } + if (sorted) + { + std::sort(keySet.begin(), keySet.end()); + std::sort(valueSet.begin(), valueSet.end()); + } + + std::cout << "pageSize=" << keyPageSize << "|Total=" << total << "|kv size=" << keySet[0].size() + << "|chain storage len=" << storageChainLength << std::endl + << "use keypage=" << (keyPageSize > 0 ? "true" : "false") << std::endl; + // create storage + StateStorageInterface::Ptr storage = nullptr; + auto dbPath = "./testdata/testdb"; + boost::filesystem::remove_all(dbPath); + boost::filesystem::create_directories(dbPath); + rocksdb::DB* db; + rocksdb::Options options; + options.create_if_missing = true; + options.enable_blob_files = keyPageSize > 1 ? true : false; + rocksdb::Status s = rocksdb::DB::Open(options, dbPath, &db); + if (!s.ok()) + { + std::cout << "open db failed, " << (int)s.code() << s.getState() << std::endl; + return -1; + } + // insert init keys to rocksDB + if (dbKeys > 0) + { + rocksdb::WriteBatch b; + + for (int i = 0; i < dbKeys; ++i) + { + b.Put(keySet[i], valueSet[i]); + } + db->Write(rocksdb::WriteOptions(), &b); + } + + auto rocksDBStorage = + std::make_shared(std::unique_ptr(db), nullptr); + + if (keyPageSize > 0) + { + storage = std::make_shared(rocksDBStorage, keyPageSize); + } + else + { + storage = std::make_shared(rocksDBStorage); + } + std::vector storages; + // create Table + auto testTableName = "testTable"; + auto table = storage->createTable(testTableName, "value"); + if (!table) + { + std::cout << "create table failed" << std::endl; + return -1; + } + // only write, hash, commit + auto start = std::chrono::system_clock::now(); + auto perStorageKeys = total / storageChainLength; + for (int i = 0; i < storageChainLength; ++i) + { + for (int j = 0; j < perStorageKeys; ++j) + { + auto key = keySet[j + perStorageKeys * i]; + auto entry = table->newEntry(); + entry.set(valueSet[j + perStorageKeys * i]); + table->setRow(key, entry); + } + storage->setReadOnly(true); + storages.push_back(storage); + if (keyPageSize > 0) + { + storage = std::make_shared(storage, keyPageSize); + } + else + { + storage = std::make_shared(storage); + } + table = storage->openTable(testTableName).value(); + } + auto OnlyWriteEnd = std::chrono::system_clock::now(); + std::cout << "sequential write: " + << std::chrono::duration_cast(OnlyWriteEnd - start).count() + << "ms" << std::endl; + // only read after write + for (int i = 0; i < total && !onlyWrite; ++i) + { + auto key = keySet[i]; + auto entry = table->getRow(key); + if (entry->get() != valueSet[i]) + { + std::cout << i << " get row failed at sequential read, value wrong:" << entry->get() + << "!=" << valueSet[i] << std::endl; + return -1; + } + } + auto onlyWriteReadEnd = std::chrono::system_clock::now(); + // commit and read + auto hashImpl = std::make_shared(); + for (int i = 0; i < storageChainLength && !onlyWrite; ++i) + { + auto s = storages[i]; + s->hash(hashImpl); + TraverseStorageInterface::Ptr t = + std::dynamic_pointer_cast(s); + bcos::protocol::TwoPCParams p; + rocksDBStorage->asyncPrepare(p, *t, [](bcos::Error::Ptr, uint64_t, const std::string&) { + // std::cout << "asyncPrepare finished" << std::endl; + }); + rocksDBStorage->asyncCommit(p, [](bcos::Error::Ptr, uint64_t) { + // std::cout << "asyncCommit finished" << std::endl; + }); + s.reset(); + } + auto hashAndCommitEnd = std::chrono::system_clock::now(); + storages.clear(); + storage.reset(); + table = Table(nullptr, nullptr); + rocksDBStorage.reset(); + db = nullptr; + s = rocksdb::DB::Open(options, dbPath, &db); + if (!s.ok()) + { + std::cout << "open db failed, " << (int)s.code() << s.getState() << std::endl; + return -1; + } + rocksDBStorage = + std::make_shared(std::unique_ptr(db), nullptr); + if (keyPageSize > 0) + { + storage = std::make_shared(rocksDBStorage, keyPageSize); + } + else + { + storage = std::make_shared(rocksDBStorage); + } + auto prepareCleanStorageEnd = std::chrono::system_clock::now(); + + std::cout << "sequential read : " + << std::chrono::duration_cast( + onlyWriteReadEnd - OnlyWriteEnd) + .count() + << "ms" << std::endl + << "hash and commit : " + << std::chrono::duration_cast( + hashAndCommitEnd - onlyWriteReadEnd) + .count() + << "ms" << std::endl; + if (!onlyWrite) + { // load table meta data + table = storage->openTable(testTableName).value(); + auto entry = table->getRow(keySet[0]); + } + auto loadTableMetaEnd = std::chrono::system_clock::now(); + for (int i = 0; i < total && !onlyWrite; ++i) + { // read + auto entry = table->getRow(keySet[i]); + if (entry->get() != valueSet[i]) + { + std::cout << i << " get row failed at clean read, value wrong:" << entry->get() + << "!=" << valueSet[i] << std::endl; + return -1; + } + } + auto cleanReadEnd = std::chrono::system_clock::now(); + std::cout << "clean read : " + << std::chrono::duration_cast( + cleanReadEnd - prepareCleanStorageEnd) + .count() + << "ms/" + << std::chrono::duration_cast( + loadTableMetaEnd - prepareCleanStorageEnd) + .count() + << std::endl; + // read and write, hash, commit + storage.reset(); + table = Table(nullptr, nullptr); + rocksDBStorage.reset(); + boost::filesystem::remove_all(dbPath); + boost::filesystem::create_directories(dbPath); + s = rocksdb::DB::Open(options, dbPath, &db); + if (!s.ok()) + { + std::cout << "open db failed, " << (int)s.code() << s.getState() << std::endl; + return -1; + } + // insert init keys to rocksDB + if (dbKeys > 0) + { + rocksdb::WriteBatch b; + + for (int i = 0; i < dbKeys; ++i) + { + b.Put(keySet[i], valueSet[i]); + } + db->Write(rocksdb::WriteOptions(), &b); + } + rocksDBStorage = + std::make_shared(std::unique_ptr(db), nullptr); + if (keyPageSize > 0) + { + storage = std::make_shared(rocksDBStorage, keyPageSize); + } + else + { + storage = std::make_shared(rocksDBStorage); + } + table = storage->createTable(testTableName, "value"); + if (!table) + { + std::cout << "create table failed" << std::endl; + return -1; + } + auto prepareCleanDBEnd = std::chrono::system_clock::now(); + std::cout << "prepareCleanDB : " + << std::chrono::duration_cast( + prepareCleanDBEnd - cleanReadEnd) + .count() + << "ms" << std::endl; + for (int i = 0; i < storageChainLength && !onlyWrite; ++i) + { + for (int j = 0; j < perStorageKeys; ++j) + { + auto key = keySet[j + perStorageKeys * i]; + auto entryO = table->getRow(key); + if (entryO) + { + std::cout << "get duplicated key" << std::endl; + return -1; + } + auto entry = table->newEntry(); + entry.set(valueSet[j + perStorageKeys * i]); + table->setRow(key, entry); + } + storage->setReadOnly(true); + storages.push_back(storage); + if (keyPageSize > 0) + { + storage = std::make_shared(storage, keyPageSize); + } + else + { + storage = std::make_shared(storage); + } + table = storage->openTable(testTableName).value(); + } + auto readWriteEnd = std::chrono::system_clock::now(); + for (int i = 0; i < total && !onlyWrite; ++i) + { + auto key = keySet[i]; + auto entry = table->getRow(key); + if (entry->get() != valueSet[i]) + { + std::cout << "get row failed after write" << std::endl; + return -1; + } + } + auto readWriteReadEnd = std::chrono::system_clock::now(); + std::cout << "read write : " + << std::chrono::duration_cast( + readWriteEnd - prepareCleanDBEnd) + .count() + << "ms" << std::endl + << "sequential read : " + << std::chrono::duration_cast( + readWriteReadEnd - readWriteEnd) + .count() + << "ms" << std::endl; +} \ No newline at end of file diff --git a/tests/unittest/main.cpp b/tests/unittest/main.cpp new file mode 100644 index 0000000..0cdfc68 --- /dev/null +++ b/tests/unittest/main.cpp @@ -0,0 +1,4 @@ +#define BOOST_TEST_MODULE FISCO_BCOS_Tests +#define BOOST_TEST_MAIN + +#include \ No newline at end of file diff --git a/tools/.ci/Dockerfile b/tools/.ci/Dockerfile new file mode 100644 index 0000000..b02fe17 --- /dev/null +++ b/tools/.ci/Dockerfile @@ -0,0 +1,45 @@ +FROM ubuntu:22.04 as builder +LABEL maintainer service@fisco.com.cn + +WORKDIR / + +ARG SOURCE_BRANCH +ENV DEBIAN_FRONTEND=noninteractive \ + SOURCE=${SOURCE_BRANCH:-master} +RUN apt-get -q update && apt-get install -qy --no-install-recommends \ + curl git clang make build-essential cmake libssl-dev zlib1g-dev ca-certificates \ + libgmp-dev flex bison patch libzstd-dev unzip ninja-build pkg-config curl zip tar \ + && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && apt-get install -qy --no-install-recommends tzdata \ + && dpkg-reconfigure --frontend noninteractive tzdata \ + && rm -rf /var/lib/apt/lists/* + +RUN curl https://sh.rustup.rs -sSf | bash -s -- -y + +ENV PATH="/root/.cargo/bin:${PATH}" + +# Check cargo is visible +RUN cargo --help + +ENV VCPKG_FORCE_SYSTEM_BINARIES=1 + +RUN git clone https://github.com/FISCO-BCOS/FISCO-BCOS.git --recursive --depth=1 -b ${SOURCE} \ + && mkdir -p FISCO-BCOS/build && cd FISCO-BCOS/build \ + && cmake .. -DBUILD_STATIC=ON && make -j2 && strip fisco-bcos-air/fisco-bcos || cat /FISCO-BCOS/build/*.log + + +FROM ubuntu:20.04 +LABEL maintainer service@fisco.com.cn + +RUN apt-get -q update && apt-get install -qy --no-install-recommends libssl-dev zlib1g-dev libzstd-dev\ + && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && apt-get install -qy --no-install-recommends tzdata \ + && dpkg-reconfigure --frontend noninteractive tzdata \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=builder /FISCO-BCOS/build/fisco-bcos-air/fisco-bcos /usr/local/bin/ + +EXPOSE 30300 20200 + +ENTRYPOINT ["/usr/local/bin/fisco-bcos"] +CMD ["--version"] \ No newline at end of file diff --git a/tools/.ci/Dockerfile_env b/tools/.ci/Dockerfile_env new file mode 100644 index 0000000..350b4de --- /dev/null +++ b/tools/.ci/Dockerfile_env @@ -0,0 +1,13 @@ +FROM ubuntu:20.04 + +LABEL maintainer service@fisco.com.cn + +RUN apt-get -q update && apt-get install -qy --no-install-recommends libzstd-dev\ + git clang build-essential cmake libssl-dev zlib1g-dev ca-certificates \ + && export DEBIAN_FRONTEND=noninteractive \ + && ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && apt-get install -qy --no-install-recommends tzdata \ + && apt-get autoremove -y \ + && apt-get clean \ + && rm -rf /tmp/* \ + && rm -rf /var/lib/apt/lists/* diff --git a/tools/.ci/check-commit.sh b/tools/.ci/check-commit.sh new file mode 100644 index 0000000..920fb65 --- /dev/null +++ b/tools/.ci/check-commit.sh @@ -0,0 +1,123 @@ +#!/bin/bash +# "Copyright [2018] " +# @ function: check code format of {.h, .hpp and .cpp} files +# @ require : Make sure your machine is linux (centos/ubuntu), yum or apt is ready +# @ author : wheatli +# @ file : check-commit.sh +# @ date : 2018 + +SHELL_FOLDER=$( + cd $(dirname $0) + pwd +) + +check_script="clang-format" +commit_limit=1000 +file_limit=35 +insert_limit=300 +license_line=20 + +skip_check_words="sync code|release" + +LOG_ERROR() { + content=${1} + echo -e "\033[31m"${content}"\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m"${content}"\033[0m" +} + +execute_cmd() { + command="${1}" + eval ${command} + ret=$? + if [ $ret -ne 0 ]; then + LOG_ERROR "FAILED of command: ${command}" + exit 1 + else + LOG_INFO "SUCCESS of command: ${command}" + fi +} + +function check_codeFormat() { + # Redirect output to stderr. + exec 1>&2 + sum=0 + for file in $(git diff-index --name-status HEAD^ -- | grep -v D | grep -E '\.[ch](pp)?$' | awk '{print $2}'); do + execute_cmd "$check_script -style=file -i $file" + sum=$(expr ${sum} + $?) + done + + if [ ${sum} -ne 0 ]; then + echo "######### ERROR: Format check failed, please adjust them before commit" + exit 1 + fi +} + +function check_PR_limit() { + if [ "${PR_TITLE}" != "" ]; then + local skip=$(echo ${PR_TITLE} | grep -iaE "${skip_check_words}") + if [ ! -z "${skip}" ]; then + LOG_INFO "sync code PR, skip PR limit check!" + exit 0 + else + LOG_INFO "PR: \"${PR_TITLE}\", checking limit..." + fi + else + LOG_INFO "Could not get PR title" + exit 1 + fi + local files=$(git diff --shortstat HEAD^ | awk -F ' ' '{print $1}') + # if [ ${file_limit} -lt ${files} ]; then + # LOG_ERROR "modify ${files} files, limit is ${file_limit}" + # exit 1 + # fi + local need_check_files=$(git diff --numstat HEAD^ |sed "s/{.*> //g" |sed "s/}//g" |awk '{print $3}' |grep -vE 'test|tools\/|fisco-bcos\/|.github\/') + echo "need check files:" + echo "${need_check_files}" + + if [ ! "${need_check_files}" ]; then + LOG_INFO "No file changed. Ok!" + exit 0 + fi + + local new_files=$(git diff HEAD^ $(echo "${need_check_files}") | grep "new file" | wc -l | xargs ) + local empty_lines=$(git diff HEAD^ $(echo "${need_check_files}") | grep -e '^+\s*$' | wc -l | xargs) + local block_lines=$(git diff HEAD^ $(echo "${need_check_files}") | grep -e '^+\s*[\{\}]\s*$' | wc -l | xargs) + local include_lines=$(git diff HEAD^ $(echo "${need_check_files}") | grep -e '^+\#include' | wc -l | xargs) + local comment_lines=$(git diff HEAD^ $(echo "${need_check_files}") | grep -e "^+\s*\/\/" | wc -l | xargs) + local insertions=$(git diff --shortstat HEAD^ $(echo "${need_check_files}")| awk -F ' ' '{print $4}') + local valid_insertions=$((insertions - new_files * license_line - comment_lines - empty_lines - block_lines - include_lines)) + echo "valid_insertions: ${valid_insertions}, insertions(${insertions}) - new_files(${new_files}) * license_line(${license_line}) - comment_lines(${comment_lines}) - empty_lines(${empty_lines}) - block_lines(${block_lines}) - include_lines(${include_lines})" + if [ ${insert_limit} -lt ${valid_insertions} ]; then + LOG_ERROR "insert ${insertions} lines, valid is ${valid_insertions}, limit is ${insert_limit}" + exit 1 + fi + local deletions=$(git diff --shortstat HEAD^ | awk -F ' ' '{print $6}') + #if [ ${delete_limit} -lt ${deletions} ];then + # LOG_ERROR "delete ${deletions} lines, limit is ${delete_limit}" + # exit 1 + #fi + local commits=$(git rev-list --count HEAD^..HEAD) + if [ ${commit_limit} -lt ${commits} ]; then + LOG_ERROR "${commits} commits, limit is ${commit_limit}" + exit 1 + fi + local unique_commit=$(git log --format="%an %s" HEAD^..HEAD | sort -u | wc -l) + if [ ${unique_commit} -ne ${commits} ]; then + LOG_ERROR "${commits} != ${unique_commit}, please make commit message unique!" + # exit 1 + fi + local merges=$(git log --format=%s HEAD^..HEAD | grep -i merge | wc -l) + if [ ${merges} -gt 10 ]; then + LOG_ERROR "PR contain merge : ${merges}, Please rebase!" + exit 1 + fi + LOG_INFO "modify ${files} files, insert ${insertions} lines, valid insertion ${valid_insertions}, delete ${deletions} lines. Total ${commits} commits." + LOG_INFO "Ok!" +} + +check_codeFormat +check_PR_limit diff --git a/tools/.ci/ci_check_air.sh b/tools/.ci/ci_check_air.sh new file mode 100644 index 0000000..38769eb --- /dev/null +++ b/tools/.ci/ci_check_air.sh @@ -0,0 +1,197 @@ +#!/bin/bash +console_branch="3.0.0" +fisco_bcos_path="../build/fisco-bcos-air/fisco-bcos" +build_chain_path="BcosAirBuilder/build_chain.sh" +current_path=`pwd` +node_list="node0 node1 node2 node3" +LOG_ERROR() { + local content=${1} + echo -e "\033[31m ${content}\033[0m" +} + +LOG_INFO() { + local content=${1} + echo -e "\033[32m ${content}\033[0m" +} + +LOG_WARN() { + local content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +stop_node() +{ + cd ${current_path} + LOG_INFO "exit_node >>>>>>> stop all nodes <<<<<<<<<<<" + if [ -z "$(bash nodes/127.0.0.1/stop_all.sh |grep 'Exceed waiting time')" ];then + LOG_INFO "Stop success" + else + LOG_ERROR "Could not stop the node" + exit 1 + fi +} + +exit_node() +{ + cd ${current_path} + for node in ${node_list} + do + LOG_ERROR "exit_node ============= print error|warn info for ${node} =============" + cat nodes/127.0.0.1/${node}/log/* |grep -iE 'error|warn|cons|connectedSize|heart' + LOG_ERROR "exit_node ============= print error|warn info for ${node} finish =============" + LOG_ERROR "exit_node ########### print nohup info for ${node} ###########" + cat nodes/127.0.0.1/${node}/nohup.out + LOG_ERROR "exit_node ########### print nohup info for ${node} finish ###########" + done + stop_node + LOG_ERROR "exit_node ######### exit for ${1}" + exit 1 +} + +wait_and_start() +{ + LOG_INFO "Try to start all" + if [ -z "$(bash start_all.sh | grep 'Exceed waiting time')" ]; then + LOG_INFO "Start all success" + else + bash stop_all.sh + LOG_WARN "Another testing is running. Waiting 20s and re-try to start all." + sleep 20 + wait_and_start + fi +} + +init() +{ + sm_option="${1}" + cd ${current_path} + echo " ==> fisco-bcos version: " + ${fisco_bcos_path} -v + rm -rf nodes + bash ${build_chain_path} -l "127.0.0.1:4" -e ${fisco_bcos_path} "${sm_option}" + cd nodes/127.0.0.1 && wait_and_start +} + +check_consensus() +{ + cd ${current_path}/nodes/127.0.0.1 + LOG_INFO "=== wait for the node to init, waitTime: 20s =====" + sleep 20 + LOG_INFO "=== wait for the node to init finish =====" + for node in ${node_list} + do + LOG_INFO "check_consensus for ${node}" + result=$(cat ${node}/log/* |grep -i reachN) + if [[ -z "${result}" ]]; + then + LOG_ERROR "checkView failed ******* cons info for ${node} *******" + cat ${node}/log/* |grep -i cons + LOG_ERROR "checkView failed ******* print log info for ${node} finish *******" + exit_node "check_consensus for ${node} failed for not reachNewView" + else + LOG_INFO "check_consensus for ${node} success" + fi + done +} + +download_console() +{ + cd ${current_path} + + LOG_INFO "Download console ..." + tar_file=console-${console_branch}.tar.gz + if [ -f "${tar_file}" ]; then + LOG_INFO "Use download cache" + else + curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v${console_branch}/console.tar.gz + LOG_INFO "Download console success, branch: ${console_branch}" + mv console.tar.gz ${tar_file} + fi + LOG_INFO "Build and Config console ..." + rm -rf console + tar -zxvf ${tar_file} + cd console +} + +config_console() +{ + cd ${current_path}/console/ + use_sm="${1}" + cp -r ${current_path}/nodes/127.0.0.1/sdk/* conf/ + cp conf/config-example.toml conf/config.toml + local sed_cmd="sed -i" + if [ "$(uname)" == "Darwin" ];then + sed_cmd="sed -i .bkp" + fi + use_sm_str="useSMCrypto = \"${use_sm}\"" + ${sed_cmd} "s/useSMCrypto = \"false\"/${use_sm_str}/g" conf/config.toml + LOG_INFO "Build and Config console success ..." +} + +send_transactions() +{ + txs_num="${1}" + cd ${current_path}/console/ + LOG_INFO "Deploy HelloWorld..." + for((i=1;i<=${txs_num};i++)); + do + bash console.sh deploy HelloWorld + sleep 1 + done + blockNumber=`bash console.sh getBlockNumber` + if [ "${blockNumber}" == "${txs_num}" ]; then + LOG_INFO "send transaction success, current blockNumber: ${blockNumber}" + else + exit_node "send transaction failed, current blockNumber: ${blockNumber}" + fi +} + +check_sync() +{ + LOG_INFO "check sync..." + expected_block_number="${1}" + cd ${current_path}/nodes/127.0.0.1 + bash node0/stop.sh && rm -rf node0/log && rm -rf node0/data + bash node0/start.sh + # wait for sync + sleep 10 + block_number=$(cat node0/log/* |grep Report | tail -n 1| awk -F',' '{print $4}' | awk -F'=' '{print $2}') + if [ "${block_number}" == "${expected_block_number}" ]; then + LOG_INFO "check_sync success, current blockNumber: ${block_number}" + else + exit_node "check_sync error, current blockNumber: ${block_number}, expected_block_number: ${expected_block_number}" + fi + LOG_INFO "check sync success..." +} + +clear_node() +{ + cd ${current_path} + bash nodes/127.0.0.1/stop_all.sh + rm -rf nodes +} + +txs_num=10 +# non-sm test +LOG_INFO "======== check non-sm case ========" +init "" +check_consensus +download_console +config_console "false" +send_transactions ${txs_num} +check_sync ${txs_num} +LOG_INFO "======== check non-sm success ========" + +LOG_INFO "======== clear node after non-sm test ========" +clear_node +LOG_INFO "======== clear node after non-sm test success ========" + +# sm test +LOG_INFO "======== check sm case ========" +init "-s" +check_consensus +config_console "true" +send_transactions ${txs_num} +check_sync ${txs_num} +stop_node +LOG_INFO "======== check sm case success ========" \ No newline at end of file diff --git a/tools/.ci/ci_check_pro.sh b/tools/.ci/ci_check_pro.sh new file mode 100644 index 0000000..9c120cd --- /dev/null +++ b/tools/.ci/ci_check_pro.sh @@ -0,0 +1,222 @@ +#!/bin/bash +console_branch="3.0.0" +fisco_bcos_service_path="../build/fisco-bcos-tars-service/" +build_chain_path="BcosBuilder/pro/build_chain.py" +current_path=`pwd` # tools +node_list="group0_node_40402 group0_node_40412" +output_dir="pro_nodes" +LOG_ERROR() { + local content=${1} + echo -e "\033[31m ${content}\033[0m" +} + +LOG_INFO() { + local content=${1} + echo -e "\033[32m ${content}\033[0m" +} + +LOG_WARN() { + local content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +stop_node() +{ + cd ${current_path} + + LOG_INFO "exit_node >>>>>>> stop all pro nodes <<<<<<<<<<<" + if [ -z "$(bash ${output_dir}/127.0.0.1/stop_all.sh |grep 'Exceed waiting time')" ];then + LOG_INFO "Stop success" + else + LOG_ERROR "Could not stop the node" + exit 1 + fi +} + +exit_node() +{ + cd ${current_path} + local all_service="rpc_20200 rpc_20201 gateway_30300 gateway_30301 ${node_list}" + + for node in ${all_service} + do + LOG_ERROR "exit_node ============= print error|warn info for ${node} =============" + cat ${output_dir}/127.0.0.1/${node}/log/* |grep -iE 'error|warn|cons|connectedSize|heart' + LOG_ERROR "exit_node ============= print error|warn info for ${node} finish =============" + LOG_ERROR "exit_node ########### print nohup info for ${node} ###########" + cat ${output_dir}/127.0.0.1/${node}/nohup.out + LOG_ERROR "exit_node ########### print nohup info for ${node} finish ###########" + done + stop_node + LOG_ERROR "exit_node ######### exit for ${1}" + exit 1 +} + +wait_and_start() +{ + LOG_INFO "Try to start all" + if [ -z "$(bash start_all.sh | grep 'Exceed waiting time')" ]; then + LOG_INFO "Start all success" + else + bash stop_all.sh + LOG_WARN "Another testing is running. Waiting 20s and re-try to start all." + sleep 20 + wait_and_start + fi +} + +init() +{ + sm_option="${1}" + cd ${current_path} + + echo "===>> ${current_path}" + + rm -rf BcosBuilder/pro/binary/ + + mkdir -p BcosBuilder/pro/binary/ + # copy service binary + mkdir -p BcosBuilder/pro/binary/BcosNodeService + mkdir -p BcosBuilder/pro/binary/BcosGatewayService + mkdir -p BcosBuilder/pro/binary/BcosRpcService + + cp -f ${fisco_bcos_service_path}/NodeService/pro/BcosNodeService BcosBuilder/pro/binary/BcosNodeService + cp -f ${fisco_bcos_service_path}/GatewayService/main/BcosGatewayService BcosBuilder/pro/binary/BcosGatewayService + cp -f ${fisco_bcos_service_path}/RpcService/main/BcosRpcService BcosBuilder/pro/binary/BcosRpcService + rm -rf ${output_dir} + + python3 --version + pip3 --version + pip3 install -r BcosBuilder/requirements.txt + + cd BcosBuilder/pro/ + python3 build_chain.py build -c conf/config-build-example.toml -O ${current_path}/${output_dir} + cd ${current_path} + + cd ${output_dir}/127.0.0.1 && wait_and_start +} + +check_consensus() +{ + cd ${current_path}/${output_dir}/127.0.0.1 + LOG_INFO "=== wait for the node to init, waitTime: 20s =====" + sleep 20 + LOG_INFO "=== wait for the node to init finish =====" + for node in ${node_list} + do + LOG_INFO "check_consensus for ${node}" + result=$(cat ${node}/log/*log |grep -i reachN) + if [[ -z "${result}" ]]; + then + LOG_ERROR "checkView failed ******* cons info for ${node} *******" + cat ${node}/log/* |grep -i cons + LOG_ERROR "checkView failed ******* print log info for ${node} finish *******" + exit_node "check_consensus for ${node} failed for not reachNewView" + else + LOG_INFO "check_consensus for ${node} success" + fi + done +} + +download_console() +{ + cd ${current_path} + + LOG_INFO "Download console ..." + tar_file=console-${console_branch}.tar.gz + if [ -f "${tar_file}" ]; then + LOG_INFO "Use download cache" + else + curl -#LO https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS/console/releases/v${console_branch}/console.tar.gz + LOG_INFO "Download console success, branch: ${console_branch}" + mv console.tar.gz ${tar_file} + fi + LOG_INFO "Build and Config console ..." + rm -rf console + tar -zxvf ${tar_file} + cd console +} + +config_console() +{ + cd ${current_path}/console/ + use_sm="${1}" + cp -r ${current_path}/${output_dir}/127.0.0.1/rpc_20200/conf/sdk/* conf/ + cp conf/config-example.toml conf/config.toml + local sed_cmd="sed -i" + if [ "$(uname)" == "Darwin" ];then + sed_cmd="sed -i .bkp" + fi + use_sm_str="useSMCrypto = \"${use_sm}\"" + ${sed_cmd} "s/useSMCrypto = \"false\"/${use_sm_str}/g" conf/config.toml + LOG_INFO "Build and Config console success ..." +} + +send_transactions() +{ + txs_num="${1}" + cd ${current_path}/console/ + + bash console.sh getPeers + + LOG_INFO "Deploy HelloWorld..." + for((i=1;i<=${txs_num};i++)); + do + bash console.sh deploy HelloWorld + sleep 1 + done + blockNumber=`bash console.sh getBlockNumber` + if [ "${blockNumber}" == "${txs_num}" ]; then + LOG_INFO "send transaction success, current blockNumber: ${blockNumber}" + else + exit_node "send transaction failed, current blockNumber: ${blockNumber}" + fi +} + +check_sync() +{ + LOG_INFO "check sync..." + expected_block_number="${1}" + cd ${current_path}/${output_dir}/127.0.0.1 + bash group0_node_40402/stop.sh && rm -rf group0_node_40402/log && rm -rf group0_node_40402/group0 + bash group0_node_40402/start.sh + # wait for sync + sleep 10 + block_number=$(cat group0_node_40402/log/*log |grep Report | tail -n 1| awk -F',' '{print $4}' | awk -F'=' '{print $2}') + if [ "${block_number}" == "${expected_block_number}" ]; then + LOG_INFO "check_sync success, current blockNumber: ${block_number}" + else + exit_node "check_sync error, current blockNumber: ${block_number}, expected_block_number: ${expected_block_number}" + fi + LOG_INFO "check sync success..." +} + +clear_node() +{ + cd ${current_path} + bash ${output_dir}/127.0.0.1/stop_all.sh + rm -rf ${output_dir} +} + +txs_num=10 +# non-sm test +LOG_INFO "======== check non-sm case ========" +init "" +check_consensus +download_console +config_console "false" +send_transactions ${txs_num} +check_sync ${txs_num} +stop_node +clear_node +# LOG_INFO "======== check non-sm success ========" + +# TODO: support sm test +# LOG_INFO "======== check sm case ========" +# init "-s" +# check_consensus +# config_console "true" +# send_transactions ${txs_num} +# check_sync ${txs_num} +# stop_node +# LOG_INFO "======== check sm case success ========" \ No newline at end of file diff --git a/tools/.ci/clear_build_cache.sh b/tools/.ci/clear_build_cache.sh new file mode 100644 index 0000000..57f9d5e --- /dev/null +++ b/tools/.ci/clear_build_cache.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +BUILD_DIR=./build + +function has_dir_change() { + dir=${1} + checksum=${2} + + checksum_file=${BUILD_DIR}/${dir}.checksum + + echo "Verify ${dir} checksum. current:${checksum}" + + if [ ! -f "${checksum_file}" ]; then + echo "Verify false for checksum file not exists." + return 1 + fi + + origin_checksum=$(cat ${checksum_file}) + + if [ "${origin_checksum}" == "${checksum}" ]; then + echo "Verify ok! No need to clear cache for ${dir}" + return 0 + else + echo "Verify failed for checksum not the same. origin checksum:${origin_checksum}" + return 1 + fi +} + +function write_checksum_file() { + dir=${1} + checksum=${2} + checksum_file=${BUILD_DIR}/${dir}.checksum + checksum_file_dir=${checksum_file%/*} + echo "Generate checksum file dir:" ${checksum_file_dir} + mkdir -p ${checksum_file_dir} + echo -n ${checksum} > ${checksum_file} + echo "Generate checksum file:" ${checksum_file} +} + +function check_and_clear_cache() { + dir=${1} + cache_dir=${2} + checksum=$(git rev-parse HEAD:${dir}) + + has_dir_change ${dir} ${checksum} + + has_change=$? + if [ ${has_change} == 1 ]; then + echo "Dir ${dir} has changed. Clear build cache: \"${cache_dir}\". Current checksum: ${checksum}" + rm -rf ${cache_dir} + + write_checksum_file ${dir} ${checksum} + fi +} + +function check_file_and_clear_cache() { + file=${1} + cache_dir=${2} + checksum_file=${file}_check.md5sum + tmp_checksum_file=${file}_tmp.md5sum + + md5sum $(find . -type f |grep -ia ${file} |grep -vE 'build|vcpkg|deps|md5sum') > ${tmp_checksum_file} + if [ -f "${checksum_file}" ]; then + if diff ${checksum_file} ${tmp_checksum_file}; then + echo "Verify ok! No need to clear cache for ${file}" + return; + fi + fi + + # checksum not ok + + echo "File ${file} has changed. Clear build cache: \"${cache_dir}\" " + rm -rf ${cache_dir} + mv ${tmp_checksum_file} ${checksum_file} +} + +# First: check file change +check_file_and_clear_cache cmake ${BUILD_DIR} + +# Second: check dir change +check_and_clear_cache .github/workflows ${BUILD_DIR} +check_and_clear_cache bcos-tars-protocol/bcos-tars-protocol ${BUILD_DIR}/generated +check_and_clear_cache bcos-sync/bcos-sync/protocol/proto ${BUILD_DIR}/bcos-sync +check_and_clear_cache bcos-protocol/bcos-protocol ${BUILD_DIR}/bcos-protocol +check_and_clear_cache bcos-pbft/bcos-pbft/core/proto ${BUILD_DIR}/bcos-pbft/bcos-pbft/core +check_and_clear_cache bcos-pbft/bcos-pbft/pbft/protocol/proto ${BUILD_DIR}/bcos-pbft/bcos-pbft/pbft/protocol +check_and_clear_cache bcos-txpool/bcos-txpool/sync/protocol/proto ${BUILD_DIR}/bcos-txpool + diff --git a/tools/.ci/requirements.txt b/tools/.ci/requirements.txt new file mode 100644 index 0000000..cd6b55d --- /dev/null +++ b/tools/.ci/requirements.txt @@ -0,0 +1,2 @@ +requests +argparse \ No newline at end of file diff --git a/tools/BcosBuilder/docker/bridge/linux/framework/docker-compose.yml b/tools/BcosBuilder/docker/bridge/linux/framework/docker-compose.yml new file mode 100644 index 0000000..b8d5dab --- /dev/null +++ b/tools/BcosBuilder/docker/bridge/linux/framework/docker-compose.yml @@ -0,0 +1,45 @@ +version: "3" +networks: + tars_net: + external: + name: tars-network + +services: + tars-mysql: + image: mysql:5.6 + ports: + - "3310:3306" + networks: + tars_net: + ipv4_address: 172.25.0.2 + environment: + MYSQL_ROOT_PASSWORD: "" + restart: always + volumes: + - ~/app/tars/framework-mysql:/var/lib/mysql + - /etc/localtime:/etc/localtime + + tars-framework: + image: tarscloud/framework:v3.0.1 + networks: + tars_net: + ipv4_address: 172.25.0.3 + # 3000 is the tarsWeb port + ports: + - "3000:3000" + - "3001:3001" + - "20200-20205:20200-20205" + - "30300-30305:30300-30305" + environment: + MYSQL_HOST: "172.25.0.2" + MYSQL_ROOT_PASSWORD: "" + MYSQL_PORT: 3306 + REBUILD: "false" + INET: eth0 + SLAVE: "false" + restart: always + volumes: + - ~/app/tars/framework:/data/tars + - /etc/localtime:/etc/localtime + depends_on: + - tars-mysql diff --git a/tools/BcosBuilder/docker/bridge/linux/node/docker-compose.yml b/tools/BcosBuilder/docker/bridge/linux/node/docker-compose.yml new file mode 100644 index 0000000..c4b91c1 --- /dev/null +++ b/tools/BcosBuilder/docker/bridge/linux/node/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3" +networks: + tars_net: + external: + name: tars-network + +services: + tars-node: + image: tarscloud/tars-node:latest + networks: + tars_net: + ipv4_address: 172.25.0.5 + ports: + - "10200-10205:10200-10205" + - "40300-40305:40300-40305" + - "9000-9010:9000-9010" + environment: + INET: eth0 + WEB_HOST: "http://172.25.0.3:3000" + restart: always + volumes: + - ~/app/tars:/data/tars + - /etc/localtime:/etc/localtime \ No newline at end of file diff --git a/tools/BcosBuilder/docker/bridge/linux/node/gen_compose_files.sh b/tools/BcosBuilder/docker/bridge/linux/node/gen_compose_files.sh new file mode 100644 index 0000000..6da3092 --- /dev/null +++ b/tools/BcosBuilder/docker/bridge/linux/node/gen_compose_files.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +data_dir="~/app/tars/" + + +genOne() { + local id=${1} + cat <"docker-compose${id}.yml" + +version: "3" +networks: + tars_net: + external: + name: tars-network + +services: + tars-node${id}: + image: tarscloud/tars-node:latest + networks: + tars_net: + ipv4_address: 172.25.0.${id} + ports: + - "10200-10205:10200-10205" + - "40300-40305:40300-40305" + - "9000-9010:9000-9010" + environment: + INET: eth0 + WEB_HOST: "http://172.25.0.3:3000" + restart: always + volumes: + - ${data_dir}/node${id}:/data/tars + - /etc/localtime:/etc/localtime +EOF +} + +for id in {5..8} ; do + genOne ${id} +done diff --git a/tools/BcosBuilder/docker/bridge/mac/framework/docker-compose.yml b/tools/BcosBuilder/docker/bridge/mac/framework/docker-compose.yml new file mode 100644 index 0000000..9b73c3a --- /dev/null +++ b/tools/BcosBuilder/docker/bridge/mac/framework/docker-compose.yml @@ -0,0 +1,57 @@ +version: "3" +networks: + tars_net: + external: + name: tars-network + +services: + tars-mysql: + image: mysql:5.6 + platform: "linux/x86_64" + deploy: + resources: + limits: + cpus: '1' + memory: 5G + reservations: + cpus: '0.25' + memory: 512M + ports: + - "3310:3306" + networks: + tars_net: + ipv4_address: 172.25.0.2 + environment: + MYSQL_ROOT_PASSWORD: "" + restart: always + + tars-framework: + image: tarscloud/framework:v3.0.1 + platform: "linux/x86_64" + deploy: + resources: + limits: + cpus: '1' + memory: 5G + reservations: + cpus: '0.25' + memory: 512M + networks: + tars_net: + ipv4_address: 172.25.0.3 + # 3000 is the tarsWeb port + ports: + - "3000:3000" + - "3001:3001" + - "20200-20205:20200-20205" + - "30300-30305:30300-30305" + environment: + MYSQL_HOST: "172.25.0.2" + MYSQL_ROOT_PASSWORD: "" + MYSQL_PORT: 3306 + REBUILD: "false" + INET: eth0 + SLAVE: "false" + restart: always + depends_on: + - tars-mysql diff --git a/tools/BcosBuilder/docker/bridge/mac/node/docker-compose.yml b/tools/BcosBuilder/docker/bridge/mac/node/docker-compose.yml new file mode 100644 index 0000000..43f00d8 --- /dev/null +++ b/tools/BcosBuilder/docker/bridge/mac/node/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3" +networks: + tars_net: + external: + name: tars-network + +services: + tars-node: + image: tarscloud/tars-node:latest + platform: "linux/x86_64" + deploy: + resources: + limits: + cpus: '1' + memory: 5G + reservations: + cpus: '0.25' + memory: 512M + networks: + tars_net: + ipv4_address: 172.25.0.5 + ports: + - "10200-10205:10200-10205" + - "40300-40305:40300-40305" + - "9000-9010:9000-9010" + environment: + INET: eth0 + WEB_HOST: "http://172.25.0.3:3000" + restart: always diff --git a/tools/BcosBuilder/docker/host/linux/framework/docker-compose.yml b/tools/BcosBuilder/docker/host/linux/framework/docker-compose.yml new file mode 100644 index 0000000..e7b60c9 --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/framework/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3" +services: + tars-mysql: + image: mysql:5.6 + network_mode: "host" + environment: + MYSQL_ROOT_PASSWORD: "" + MYSQL_TCP_PORT: 3310 + restart: always + volumes: + - ~/app/tars/framework-mysql:/var/lib/mysql + - /etc/localtime:/etc/localtime + + tars-framework: + image: tarscloud/framework:v3.0.1 + network_mode: "host" + environment: + MYSQL_HOST: "172.17.0.1" + MYSQL_ROOT_PASSWORD: "" + MYSQL_PORT: 3310 + REBUILD: "false" + INET: eth0 + SLAVE: "false" + restart: always + volumes: + - ~/app/tars/framework:/data/tars + - /etc/localtime:/etc/localtime + depends_on: + - tars-mysql diff --git a/tools/BcosBuilder/docker/host/linux/monitor/compose.yaml b/tools/BcosBuilder/docker/host/linux/monitor/compose.yaml new file mode 100644 index 0000000..91a7039 --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/monitor/compose.yaml @@ -0,0 +1,32 @@ +version: '2' + +services: + + prometheus: + container_name: prometheus + image: prom/prometheus:latest + restart: unless-stopped + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + - /etc/localtime:/etc/localtime + network_mode: host + # ports: + # - ${PROMETHEUS_PORT}:9090 + + grafana: + container_name: grafana + image: grafana/grafana-oss:latest + restart: unless-stopped + user: '0' + network_mode: host + # ports: + # - ${GRAFANA_PORT}:3000 + volumes: + - ./grafana/grafana.ini:/etc/grafana/grafana.ini + - ./grafana/data:/var/lib/grafana + - ./grafana/logs:/var/log/grafana + - /etc/localtime:/etc/localtime + environment: + - GF_USERS_ALLOW_SIGN_UP=false + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer diff --git a/tools/BcosBuilder/docker/host/linux/monitor/grafana/grafana.ini b/tools/BcosBuilder/docker/host/linux/monitor/grafana/grafana.ini new file mode 100644 index 0000000..2923b30 --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/monitor/grafana/grafana.ini @@ -0,0 +1,13 @@ +[server] +# The http port to use +http_port = 3001 + +[security] +# disable creation of admin user on first start of grafana +;disable_initial_admin_creation = false +; +;# default admin user, created on startup +admin_user = admin +; +;# default admin password, can be changed before first start of grafana, or in profile settings +admin_password = admin \ No newline at end of file diff --git a/tools/BcosBuilder/docker/host/linux/monitor/prometheus/prometheus.yml b/tools/BcosBuilder/docker/host/linux/monitor/prometheus/prometheus.yml new file mode 100644 index 0000000..c1de5e4 --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/monitor/prometheus/prometheus.yml @@ -0,0 +1,19 @@ +global: + scrape_interval: 15s # By default, scrape targets every 15 seconds. + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: 'bcos' + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label job= to any timeseries scraped from this config. + - job_name: 'prometheus' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + + static_configs: + - targets: [] diff --git a/tools/BcosBuilder/docker/host/linux/monitor/start_monitor.sh b/tools/BcosBuilder/docker/host/linux/monitor/start_monitor.sh new file mode 100644 index 0000000..e260bd2 --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/monitor/start_monitor.sh @@ -0,0 +1,17 @@ +#!/bin/bash +SHELL_FOLDER=$(cd $(dirname $0);pwd) + +LOG_ERROR() { + content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m[INFO] ${content}\033[0m" +} + + +DOCKER_FILE=${SHELL_FOLDER}/compose.yaml +docker-compose -f ${DOCKER_FILE} up -d prometheus grafana 2>&1 + diff --git a/tools/BcosBuilder/docker/host/linux/monitor/stop_monitor.sh b/tools/BcosBuilder/docker/host/linux/monitor/stop_monitor.sh new file mode 100644 index 0000000..b3a27dc --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/monitor/stop_monitor.sh @@ -0,0 +1,17 @@ +#!/bin/bash +SHELL_FOLDER=$(cd $(dirname $0);pwd) + +LOG_ERROR() { + content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m[INFO] ${content}\033[0m" +} + + +DOCKER_FILE=${SHELL_FOLDER}/compose.yaml +docker-compose -f ${DOCKER_FILE} stop + diff --git a/tools/BcosBuilder/docker/host/linux/node/docker-compose.yml b/tools/BcosBuilder/docker/host/linux/node/docker-compose.yml new file mode 100644 index 0000000..e93dcdd --- /dev/null +++ b/tools/BcosBuilder/docker/host/linux/node/docker-compose.yml @@ -0,0 +1,12 @@ +version: "3" +services: + tars-node: + image: tarscloud/tars-node:latest + network_mode: "host" + environment: + INET: eth0 + WEB_HOST: "http://172.25.0.3:3000" + restart: always + volumes: + - ~/app/tars:/data/tars + - /etc/localtime:/etc/localtime \ No newline at end of file diff --git a/tools/BcosBuilder/max/conf/config-build-example.toml b/tools/BcosBuilder/max/conf/config-build-example.toml new file mode 100644 index 0000000..8c254cb --- /dev/null +++ b/tools/BcosBuilder/max/conf/config-build-example.toml @@ -0,0 +1,234 @@ +[tars] +tars_pkg_dir = "./binary/" +tars_token = "" +tars_url = "" + +[chain] +chain_id="chain0" +# the rpc-service enable sm-ssl or not, default disable sm-ssl +rpc_sm_ssl=false +# the gateway-service enable sm-ssl or not, default disable sm-ssm +gateway_sm_ssl=false +# the existed rpc service ca path, will generate new ca if not configured +#rpc_ca_cert_path="" +# the existed gateway service ca path, will generate new ca if not configured +#gateway_ca_cert_path="" + +[[group]] +group_id="group0" +# the genesis configuration path of the group, will generate new genesis configuration if not configured +# genesis_config_path = "" +# VM type, now only support evm/wasm +vm_type="evm" +# use sm-crypto or not +sm_crypto=false +# enable auth-check or not +auth_check=false +init_auth_address="" + +# the genesis config +# the number of blocks generated by each leader +leader_period = 1 +# the max number of transactions of a block +block_tx_count_limit = 1000 +# consensus algorithm now support PBFT(consensus_type=pbft) +consensus_type = "pbft" +# transaction gas limit +gas_limit = "3000000000" +# compatible version, can be dynamically upgraded through setSystemConfig +compatibility_version="3.2.0" + +[[agency]] +name = "agencyA" +failover_cluster_url = "127.0.0.1:2379" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=20200 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40400 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=30300 + # gateway tars server listen ip + tars_listen_ip="0.0.0.0" + # gateway tars server listen port + tars_listen_port=40401 + peers=["127.0.0.1:30300", "127.0.0.2:30301", "127.0.0.2:30302"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + # the tikv storage pd-addresses + pd_addrs="127.0.0.1:2379" + key_page_size=10240 + deploy_ip = ["127.0.0.1"] + executor_deploy_ip= ["127.0.0.1"] + monitor_listen_port = "3901" + # the tikv storage pd-addresses + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port + tars_listen_port=40402 + + + +[[agency]] +name = "agencyB" +failover_cluster_url = "127.0.0.1:2381" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=20220 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40420 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=30320 + # gateway tars server listen ip + tars_listen_ip="0.0.0.0" + # gateway tars server listen port + tars_listen_port=40421 + peers=["127.0.0.1:30300", "127.0.0.2:30320", "127.0.0.2:30340"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + # the tikv storage pd-addresses + pd_addrs="127.0.0.1:2381" + key_page_size=10240 + deploy_ip = ["127.0.0.1"] + executor_deploy_ip= ["127.0.0.1"] + monitor_listen_port = "3901" + # the tikv storage pd-addresses + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port + tars_listen_port=40422 + + +[[agency]] +name = "agencyC" +failover_cluster_url = "127.0.0.1:2383" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=20240 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40440 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=30340 + # gateway tars server listen ip + tars_listen_ip="0.0.0.0" + # gateway tars server listen port + tars_listen_port=40441 + peers=["127.0.0.1:30300", "127.0.0.2:30320", "127.0.0.2:30340"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + # the tikv storage pd-addresses + pd_addrs="127.0.0.1:2383" + key_page_size=10240 + deploy_ip = ["127.0.0.1"] + executor_deploy_ip= ["127.0.0.1"] + monitor_listen_port = "3901" + # the tikv storage pd-addresses + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port + tars_listen_port=40442 + +[[agency]] +name = "agencyD" +failover_cluster_url = "127.0.0.1:2385" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=20260 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40460 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + listen_ip="0.0.0.0" + listen_port=30360 + # gateway tars server listen ip + tars_listen_ip="0.0.0.0" + # gateway tars server listen port + tars_listen_port=40461 + peers=["127.0.0.1:30300", "127.0.0.2:30320", "127.0.0.2:30340", "127.0.0.2:30360"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + # the tikv storage pd-addresses + pd_addrs="127.0.0.1:2385" + key_page_size=10240 + deploy_ip = ["127.0.0.1"] + executor_deploy_ip= ["127.0.0.1"] + monitor_listen_port = "3901" + # the tikv storage pd-addresses + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port + tars_listen_port=40462 \ No newline at end of file diff --git a/tools/BcosBuilder/max/conf/config-deploy-example.toml b/tools/BcosBuilder/max/conf/config-deploy-example.toml new file mode 100644 index 0000000..4929df3 --- /dev/null +++ b/tools/BcosBuilder/max/conf/config-deploy-example.toml @@ -0,0 +1,75 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" +# the rpc-service enable sm-ssl or not, default disable sm-ssl +rpc_sm_ssl=false +# the gateway-service enable sm-ssl or not, default disable sm-ssm +gateway_sm_ssl=false +# the existed rpc service ca path, will generate new ca if not configured +#rpc_ca_cert_path="" +# the existed gateway service ca path, will generate new ca if not configured +#gateway_ca_cert_path="" + +[[group]] +group_id="group0" +# the genesis configuration path of the group, will generate new genesis configuration if not configured +# genesis_config_path = "" +# VM type, now only support evm/wasm +vm_type="evm" +# use sm-crypto or not +sm_crypto=false +# enable auth-check or not +auth_check=false +init_auth_address="" + +# the genesis config +# the number of blocks generated by each leader +leader_period = 1 +# the max number of transactions of a block +block_tx_count_limit = 1000 +# consensus algorithm now support PBFT(consensus_type=pbft) +consensus_type = "pbft" +# transaction gas limit +gas_limit = "3000000000" +# compatible version, can be dynamically upgraded through setSystemConfig +compatibility_version="3.2.0" + +[[agency]] +name = "agencyA" +failover_cluster_url = "172.25.0.3:2379" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=20200 + thread_count=4 + + [agency.gateway] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=30300 + peers=["172.25.0.3:30300"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + # the tikv storage pd-addresses + pd_addrs="172.25.0.3:2379" + key_page_size=10240 + deploy_ip = ["172.25.0.3"] + executor_deploy_ip=["172.25.0.3"] + monitor_listen_port = "3901" + # the tikv storage pd-addresses + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" diff --git a/tools/BcosBuilder/max/conf/config-node-expand-example.toml b/tools/BcosBuilder/max/conf/config-node-expand-example.toml new file mode 100644 index 0000000..504189f --- /dev/null +++ b/tools/BcosBuilder/max/conf/config-node-expand-example.toml @@ -0,0 +1,41 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" + +[[group]] +group_id="group0" +# the genesis configuration path of the expanded group +genesis_config_path = "generated/chain0/group0/config.genesis" +# use sm-crypto or not +sm_crypto=false + + +[[agency]] +name = "agencyA" +failover_cluster_url = "172.25.0.3:2379" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + # expand the existed-max-node + node_name = "node1" + # the tikv storage pd-addresses + pd_addrs="172.25.0.5:2379" + key_page_size=10240 + deploy_ip = ["172.25.0.5"] + executor_deploy_ip=["172.25.0.5"] + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = \ No newline at end of file diff --git a/tools/BcosBuilder/max/conf/config-service-expand-example.toml b/tools/BcosBuilder/max/conf/config-service-expand-example.toml new file mode 100644 index 0000000..c022e71 --- /dev/null +++ b/tools/BcosBuilder/max/conf/config-service-expand-example.toml @@ -0,0 +1,36 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" +rpc_sm_ssl=false +gateway_sm_ssl=false +# the ca path of the expanded rpc service +# must ensure that the path configuration is correct, otherwise the ssl verification will fail +rpc_ca_cert_path="generated/rpc/chain0/ca" +# the ca path of the expanded gateway service +# must ensure that the path configuration is correct, otherwise the ssl verification will fail +gateway_ca_cert_path="generated/gateway/chain0/ca" + +[[agency]] +name = "agencyA" +failover_cluster_url = "172.25.0.3:2379" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["172.25.0.5"] + listen_ip="0.0.0.0" + listen_port=10200 + thread_count=4 + + [agency.gateway] + deploy_ip=["172.25.0.5"] + listen_ip="0.0.0.0" + listen_port=40300 + peers=["172.25.0.3:30300", "172.25.0.3:30301", "172.25.0.5:40300"] \ No newline at end of file diff --git a/tools/BcosBuilder/pro/conf/config-build-example.toml b/tools/BcosBuilder/pro/conf/config-build-example.toml new file mode 100644 index 0000000..005d370 --- /dev/null +++ b/tools/BcosBuilder/pro/conf/config-build-example.toml @@ -0,0 +1,249 @@ +[tars] +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" +# the rpc-service enable sm-ssl or not, default disable sm-ssl +rpc_sm_ssl=false +# the gateway-service enable sm-ssl or not, default disable sm-ssm +gateway_sm_ssl=false +# the existed rpc service ca path, will generate new ca if not configured +#rpc_ca_cert_path="" +# the existed gateway service ca path, will generate new ca if not configured +#gateway_ca_cert_path=" + +[[group]] +group_id="group0" +# the genesis configuration path of the group, will generate new genesis configuration if not configured +# genesis_config_path = "" +# VM type, now only support evm/wasm +vm_type="evm" +# use sm-crypto or not +sm_crypto=false +# enable auth-check or not +auth_check=false +init_auth_address="" + +# the genesis config +# the number of blocks generated by each leader +leader_period = 1 +# the max number of transactions of a block +block_tx_count_limit = 1000 +# consensus algorithm now support PBFT(consensus_type=pbft) +consensus_type = "pbft" +# transaction gas limit +gas_limit = "3000000000" +# compatible version, can be dynamically upgraded through setSystemConfig +compatibility_version="3.2.0" + +[[agency]] +name = "agencyA" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + # rpc listen ip + listen_ip="0.0.0.0" + # rpc listen port + listen_port=20200 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40400 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + # gateway listen ip + listen_ip="0.0.0.0" + # gateway listen port + listen_port=30300 + # gateway connected peers, should be all of the gateway peers info + peers=["127.0.0.1:30300", "127.0.0.1:30301", "127.0.0.1:30302", "127.0.0.1:30303"] + # gateway tars server listen ip + tars_listen_ip="0.0.0.0" + # gateway tars server listen port + tars_listen_port=40401 + + [[agency.group]] + group_id = "group0" + [[agency.group.node]] + # node name, Notice: node_name in the same agency and group must be unique + node_name = "node0" + deploy_ip = "127.0.0.1" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port, Notice: the tars server of the node will cost five ports, then the port tars_listen_port ~ tars_listen_port + 4 should be in free + tars_listen_port=40402 + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3902" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + +[[agency]] +name = "agencyB" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + # rpc listen ip + listen_ip="0.0.0.0" + # rpc listen port + listen_port=20201 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40410 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + # gateway listen ip + listen_ip="0.0.0.0" + # gateway listen port + listen_port=30301 + # gateway connected peers, should be all of the gateway peers info + peers=["127.0.0.1:30300", "127.0.0.1:30301", "127.0.0.1:30302", "127.0.0.1:30303"] + # gateway rpc server listen ip + tars_listen_ip="0.0.0.0" + # gateway rpc server listen port + tars_listen_port=40411 + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + # node name, Notice: node_name in the same agency and group must be unique + node_name = "node0" + deploy_ip = "127.0.0.1" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port, Notice: the tars server of the node will cost five ports, then the port tars_listen_port ~ tars_listen_port + 4 should be in free + tars_listen_port=40412 + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + +[[agency]] +name = "agencyC" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + # rpc listen ip + listen_ip="0.0.0.0" + # rpc listen port + listen_port=20202 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40420 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + # gateway listen ip + listen_ip="0.0.0.0" + # gateway listen port + listen_port=30302 + # gateway connected peers, should be all of the gateway peers info + peers=["127.0.0.1:30300", "127.0.0.1:30301", "127.0.0.1:30302", "127.0.0.1:30303"] + # gateway rpc server listen ip + tars_listen_ip="0.0.0.0" + # gateway rpc server listen port + tars_listen_port=40421 + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + # node name, Notice: node_name in the same agency and group must be unique + node_name = "node0" + deploy_ip = "127.0.0.1" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port, Notice: the tars server of the node will cost five ports, then the port tars_listen_port ~ tars_listen_port + 4 should be in free + tars_listen_port=40422 + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + +[[agency]] +name = "agencyD" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["127.0.0.1"] + # rpc listen ip + listen_ip="0.0.0.0" + # rpc listen port + listen_port=20203 + thread_count=4 + # rpc tars server listen ip + tars_listen_ip="0.0.0.0" + # rpc tars server listen port + tars_listen_port=40430 + + [agency.gateway] + deploy_ip=["127.0.0.1"] + # gateway listen ip + listen_ip="0.0.0.0" + # gateway listen port + listen_port=30303 + # gateway connected peers, should be all of the gateway peers info + peers=["127.0.0.1:30300", "127.0.0.1:30301", "127.0.0.1:30302", "127.0.0.1:30303"] + # gateway rpc server listen ip + tars_listen_ip="0.0.0.0" + # gateway rpc server listen port + tars_listen_port=40431 + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + # node name, Notice: node_name in the same agency and group must be unique + node_name = "node0" + deploy_ip = "127.0.0.1" + # node tars server listen ip + tars_listen_ip="0.0.0.0" + # node tars server listen port, Notice: the tars server of the node will cost five ports, then the port tars_listen_port ~ tars_listen_port + 4 should be in free + tars_listen_port=40432 + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + diff --git a/tools/BcosBuilder/pro/conf/config-deploy-example.toml b/tools/BcosBuilder/pro/conf/config-deploy-example.toml new file mode 100644 index 0000000..7c6a974 --- /dev/null +++ b/tools/BcosBuilder/pro/conf/config-deploy-example.toml @@ -0,0 +1,108 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" +# the rpc-service enable sm-ssl or not, default disable sm-ssl +rpc_sm_ssl=false +# the gateway-service enable sm-ssl or not, default disable sm-ssm +gateway_sm_ssl=false +# the existed rpc service ca path, will generate new ca if not configured +#rpc_ca_cert_path="" +# the existed gateway service ca path, will generate new ca if not configured +#gateway_ca_cert_path=" + +[[group]] +group_id="group0" +# the genesis configuration path of the group, will generate new genesis configuration if not configured +# genesis_config_path = "" +# VM type, now only support evm/wasm +vm_type="evm" +# use sm-crypto or not +sm_crypto=false +# enable auth-check or not +auth_check=false +init_auth_address="" + +# the genesis config +# the number of blocks generated by each leader +leader_period = 1 +# the max number of transactions of a block +block_tx_count_limit = 1000 +# consensus algorithm now support PBFT(consensus_type=pbft) +consensus_type = "pbft" +# transaction gas limit +gas_limit = "3000000000" +# compatible version, can be dynamically upgraded through setSystemConfig +compatibility_version="3.2.0" + +[[agency]] +name = "agencyA" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=20200 + thread_count=4 + + [agency.gateway] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=30300 + peers=["172.25.0.3:30300", "172.25.0.3:30301"] + + [[agency.group]] + group_id = "group0" + [[agency.group.node]] + node_name = "node0" + deploy_ip = "172.25.0.3" + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3902" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + +[[agency]] +name = "agencyB" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=20201 + thread_count=4 + + [agency.gateway] + deploy_ip=["172.25.0.3"] + listen_ip="0.0.0.0" + listen_port=30301 + peers=["172.25.0.3:30300", "172.25.0.3:30301"] + + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node0" + deploy_ip = "172.25.0.3" + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" diff --git a/tools/BcosBuilder/pro/conf/config-node-expand-example.toml b/tools/BcosBuilder/pro/conf/config-node-expand-example.toml new file mode 100644 index 0000000..862ea31 --- /dev/null +++ b/tools/BcosBuilder/pro/conf/config-node-expand-example.toml @@ -0,0 +1,43 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" + +[[group]] +group_id="group0" +# the genesis configuration path of the expanded group +genesis_config_path = "generated/chain0/group0/config.genesis" +# use sm-crypto or not +sm_crypto=false + +[[agency]] +name = "agencyA" + [[agency.group]] + group_id = "group0" + + [[agency.group.node]] + node_name = "node1" + deploy_ip = "172.25.0.5" + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" + + [[agency.group.node]] + node_name = "node2" + deploy_ip = "172.25.0.5" + # enable data disk encryption for bcos node or not, default is false + enable_storage_security = false + # url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details + # key_center_url = + # cipher_data_key = + monitor_listen_port = "3901" + # monitor log path example:"/home/fisco/tars/framework/app_log/" + monitor_log_path = "" diff --git a/tools/BcosBuilder/pro/conf/config-service-expand-example.toml b/tools/BcosBuilder/pro/conf/config-service-expand-example.toml new file mode 100644 index 0000000..a1ebda9 --- /dev/null +++ b/tools/BcosBuilder/pro/conf/config-service-expand-example.toml @@ -0,0 +1,35 @@ +[tars] +tars_url = "http://127.0.0.1:3000" +tars_token = "" +tars_pkg_dir = "binary/" + +[chain] +chain_id="chain0" +rpc_sm_ssl=false +gateway_sm_ssl=false +# the ca path of the expanded rpc service +# must ensure that the path configuration is correct, otherwise the ssl verification will fail +rpc_ca_cert_path="generated/rpc/chain0/ca" +# the ca path of the expanded gateway service +# must ensure that the path configuration is correct, otherwise the ssl verification will fail +gateway_ca_cert_path="generated/gateway/chain0/ca" + +[[agency]] +name = "agencyA" +# enable data disk encryption for rpc/gateway or not, default is false +enable_storage_security = false +# url of the key center, in format of ip:port, please refer to https://github.com/FISCO-BCOS/key-manager for details +# key_center_url = +# cipher_data_key = + + [agency.rpc] + deploy_ip=["172.25.0.5"] + listen_ip="0.0.0.0" + listen_port=10200 + thread_count=4 + + [agency.gateway] + deploy_ip=["172.25.0.5"] + listen_ip="0.0.0.0" + listen_port=40300 + peers=["172.25.0.3:30300", "172.25.0.3:30301", "172.25.0.5:40300"] \ No newline at end of file diff --git a/tools/BcosBuilder/requirements.txt b/tools/BcosBuilder/requirements.txt new file mode 100644 index 0000000..d2dda48 --- /dev/null +++ b/tools/BcosBuilder/requirements.txt @@ -0,0 +1,5 @@ +configparser +requests +toml +uuid +requests-toolbelt diff --git a/tools/BcosBuilder/src/command/monitor_command_impl.py b/tools/BcosBuilder/src/command/monitor_command_impl.py new file mode 100644 index 0000000..b0fecff --- /dev/null +++ b/tools/BcosBuilder/src/command/monitor_command_impl.py @@ -0,0 +1,35 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from controller.monitor_controller import MonitorController +from common import utilities + + +class MonitorCommandImpl: + def __init__(self, config, node_type, output_dir): + self.Monitor_controller = MonitorController(config, node_type, output_dir) + + def deploy_monitor(self): + function = "generate_and_deploy_monitor_services" + notice_info = "deploy all nodes monitor" + return self.execute_command(function, notice_info) + + def start_monitor(self): + function = "start_monitor_services" + notice_info = "start all nodes monitor" + return self.execute_command(function, notice_info) + + def stop_monitor(self): + function = "stop_monitor_services" + notice_info = "stop all nodes monitor" + return self.execute_command(function, notice_info) + + def execute_command(self, function, notice_info): + utilities.print_split_info() + utilities.print_badge(notice_info) + ret = getattr(self.Monitor_controller, function)() + if ret is True: + utilities.print_badge("%s success" % notice_info) + else: + utilities.log_error("%s failed" % notice_info) + utilities.print_split_info() + return ret diff --git a/tools/BcosBuilder/src/command/node_command_impl.py b/tools/BcosBuilder/src/command/node_command_impl.py new file mode 100644 index 0000000..2b9ec14 --- /dev/null +++ b/tools/BcosBuilder/src/command/node_command_impl.py @@ -0,0 +1,75 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from controller.node_controller import NodeController +from common import utilities + + +class NodeCommandImpl: + def __init__(self, config, node_type, output_dir): + self.node_controller = NodeController(config, node_type, output_dir) + + def gen_node_config(self): + function = "generate_all_config" + notice_info = "generate config for all nodes" + return self.execute_command(function, notice_info) + + def gen_executor_config(self): + function = "generate_all_executor_config" + notice_info = "generate config for all executor" + return self.execute_command(function, notice_info) + + def start_all(self): + function = "start_group" + notice_info = "start all nodes of the given group" + return self.execute_command(function, notice_info) + + def stop_all(self): + function = "stop_group" + notice_info = "stop all nodes of the given group" + return self.execute_command(function, notice_info) + + def upgrade_nodes(self): + function = "upgrade_group" + notice_info = "upgrade all nodes of the given group" + return self.execute_command(function, notice_info) + + def deploy_nodes(self): + function = "generate_and_deploy_group_services" + notice_info = "deploy all nodes of the given group" + return self.execute_command(function, notice_info) + + def upload_nodes(self): + function = "deploy_group_services" + notice_info = "upload all nodes config of the given group" + return self.execute_command(function, notice_info) + + def undeploy_nodes(self): + function = "undeploy_group" + notice_info = "undeploy all nodes of the given group" + return self.execute_command(function, notice_info) + + def generate_expand_config(self): + function = "generate_all_expand_config" + notice_info = "generate expand config for the given group" + return self.execute_command(function, notice_info) + + def expand_nodes(self): + function = "expand_and_deploy_all_nodes" + notice_info = "expand nodes for the given group" + return self.execute_command(function, notice_info) + + def expand_executors(self): + function = "expand_and_deploy_all_executors" + notice_info = "expand executors for the given group" + return self.execute_command(function, notice_info) + + def execute_command(self, function, notice_info): + utilities.print_split_info() + utilities.print_badge(notice_info) + ret = getattr(self.node_controller, function)() + if ret is True: + utilities.print_badge("%s success" % notice_info) + else: + utilities.log_error("%s failed" % notice_info) + utilities.print_split_info() + return ret diff --git a/tools/BcosBuilder/src/command/service_command_impl.py b/tools/BcosBuilder/src/command/service_command_impl.py new file mode 100644 index 0000000..872b36d --- /dev/null +++ b/tools/BcosBuilder/src/command/service_command_impl.py @@ -0,0 +1,129 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from controller.service_controller import ServiceController +from common import utilities + + +class ServiceCommandImpl: + def __init__(self, config, service_type, node_type, output_dir): + self.config = config + self.service_type = service_type + self.service_controller = ServiceController( + config, service_type, node_type, output_dir) + + def gen_service_config(self): + utilities.print_split_info() + utilities.print_badge("generate service config") + ret = self.service_controller.gen_all_service_config() + if ret is True: + utilities.print_badge("generate service config success") + else: + utilities.log_error("generate service config failed") + utilities.print_split_info() + return ret + + def upload_service(self): + # upload the generated_config + utilities.print_split_info() + utilities.print_badge("upload service, type: %s" % self.service_type) + ret = self.service_controller.deploy_all() + if ret is True: + utilities.print_badge( + "upload service success, type: %s" % self.service_type) + else: + utilities.log_error( + "upload service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def deploy_service(self): + # generate_config + utilities.print_split_info() + utilities.print_badge("deploy service, type: %s" % self.service_type) + ret = self.gen_service_config() + if ret is False: + utilities.log_error( + "deploy service failed for generate config failed, type: %s" % self.service_type) + return False + ret = self.service_controller.deploy_all() + if ret is True: + utilities.print_badge( + "deploy service success, type: %s" % self.service_type) + else: + utilities.log_error( + "deploy service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def delete_service(self): + utilities.print_split_info() + utilities.print_badge("delete service, type: %s" % self.service_type) + ret = self.service_controller.undeploy_all() + if ret is True: + utilities.print_badge( + "delete service success, type: %s" % self.service_type) + else: + utilities.log_error( + "delete service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def upgrade_service(self): + utilities.print_split_info() + utilities.print_badge("upgrade service, type: %s" % self.service_type) + ret = self.service_controller.upgrade_all() + if ret is True: + utilities.print_badge( + "upgrade service success, type: %s" % self.service_type) + else: + utilities.log_error( + "upgrade service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def start_service(self): + utilities.print_split_info() + utilities.print_badge("start service, type: %s" % self.service_type) + ret = self.service_controller.start_all() + if ret is True: + utilities.print_badge( + "start service success, type: %s" % self.service_type) + else: + utilities.log_error( + "start service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def stop_service(self): + utilities.print_split_info() + utilities.print_badge("stop service, type: %s" % self.service_type) + ret = self.service_controller.stop_all() + if ret is True: + utilities.print_badge( + "stop service success, type: %s" % self.service_type) + else: + utilities.log_error( + "stop service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret + + def expand_service(self): + utilities.print_split_info() + utilities.print_badge("expand service, type: %s" % self.service_type) + # generate config + ret = self.gen_service_config() + if ret is False: + utilities.log_error( + "expand service failed for generate config failed, type: %s" % self.service_type) + return False + # expand service + utilities.print_badge("begin expand service") + ret = self.service_controller.expand_all() + if ret is True: + utilities.print_badge( + "expand service success, type: %s" % self.service_type) + else: + utilities.log_error( + "expand service failed, type: %s" % self.service_type) + utilities.print_split_info() + return ret diff --git a/tools/BcosBuilder/src/common/parser_handler.py b/tools/BcosBuilder/src/common/parser_handler.py new file mode 100644 index 0000000..e58e73d --- /dev/null +++ b/tools/BcosBuilder/src/common/parser_handler.py @@ -0,0 +1,477 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from common import utilities +from common.utilities import CommandInfo +from argparse import RawTextHelpFormatter +import argparse +import sys +from common.utilities import ServiceInfo +import toml +import os +import uuid +from config.chain_config import ChainConfig +from controller.binary_controller import BinaryController +from command.service_command_impl import ServiceCommandImpl +from command.node_command_impl import NodeCommandImpl +from command.monitor_command_impl import MonitorCommandImpl +from networkmgr.network_manager import NetworkManager +from controller.node_controller import NodeController +from config.service_config_generator import ServiceConfigGenerator +from config.node_config_generator import NodeConfigGenerator +from config.tars_config_generator import TarsConfigGenerator +from config.max_node_config_generator import MaxNodeConfigGenerator + + +class _HelpAction(argparse._HelpAction): + def __call__(self, parser, namespace, values, option_string=None): + # retrieve subparsers from parser + subparsers_actions = [ + action for action in parser._actions + if isinstance(action, argparse._SubParsersAction)] + # there will probably only be one subparser_action, + # but better save than sorry + for subparsers_action in subparsers_actions: + # get all subparsers and print help + for choice, subparser in subparsers_action.choices.items(): + help_info = "help for subcommand '{}'".format(choice) + print("----------- %s -----------" % help_info) + print(subparser.format_help()) + parser.exit() + + +def get_description_prefix(subparser_name, command, service_type): + return "* %s %s: python3 %s %s -o deploy -t %s" % (command, service_type, sys.argv[0], subparser_name, service_type) + + +def parse_command(): + parser = argparse.ArgumentParser( + prog=sys.argv[0], description="", formatter_class=RawTextHelpFormatter, add_help=False) + parser.add_argument("-h", '--help', action=_HelpAction) + + sub_parsers = parser.add_subparsers(dest="command") + subparser_name = CommandInfo.download_binary + help_info = "Download binary, eg: python3 build_chain.py download_binary -t cdn" + binary_parser = sub_parsers.add_parser(description=utilities.format_info(help_info), + name=subparser_name, help="download binary", + formatter_class=RawTextHelpFormatter) + help_info = "[Optional] Specify the source of the download, support %s now, default type is cdn" % ( + ','.join(CommandInfo.download_type)) + binary_parser.add_argument( + "-t", '--type', help=help_info, default="cdn", required=False) + help_info = "[Optional] Specify the version of the binary, default is %s" % CommandInfo.default_binary_version + binary_parser.add_argument( + "-v", "--version", default=CommandInfo.default_binary_version, help=help_info, required=False) + help_info = "[Optional] Specify the path of the binary, default is binary" + binary_parser.add_argument( + "-p", "--path", default="binary", help=help_info, required=False) + + subparser_name = CommandInfo.chain_sub_parser_name + deploy_nodes_command = get_description_prefix( + subparser_name, "deploy", ServiceInfo.node_service_type) + deploy_rpc_service_command = get_description_prefix(subparser_name, + "deploy", ServiceInfo.rpc_service_type) + deploy_gateway_service_command = get_description_prefix(subparser_name, + "deploy", ServiceInfo.gateway_service_type) + description = "e.g:\n%s\n%s\n%s" % ( + deploy_nodes_command, deploy_rpc_service_command, deploy_gateway_service_command) + chain_parser = sub_parsers.add_parser(description=utilities.format_info(description), + name=subparser_name, help="chain operation", + formatter_class=RawTextHelpFormatter) + # command option + help_info = "[Required] specify the command: \n* command list: %s\n" % ( + CommandInfo.service_command_list_str) + chain_parser.add_argument( + "-o", '--op', help=help_info, required=True) + # config option + help_info = "[Optional] the config file, default is config.toml:\n * config to deploy chain example: conf/config-deploy-example.toml\n * config to expand node example: conf/config-node-expand-example.toml\n * config to expand rpc/gateway example: conf/config-service-expand-example.toml" + chain_parser.add_argument( + "-c", "--config", help=help_info, default="config.toml") + # service type option + supported_service_type_str = ', '.join(ServiceInfo.supported_service_type) + help_info = "[Required] the service type:\n* now support: %s \n" % ( + supported_service_type_str) + chain_parser.add_argument("-t", "--type", help=help_info, default="") + help_info = "[Optional] specify the output dir, default is ./generated" + chain_parser.add_argument( + "-O", "--output", default="./generated", help=help_info, required=False) + + # --------------------------------------------------------------------------------------------------- + subparser_name = CommandInfo.build_package_parser_name + build_nodes_command = "python3 build_chain.py build -c conf/config-build-example.toml -O output_dir" + build_expand_rpc_command = "python3 build_chain.py build -c conf/config-build-example.toml -t rpc -O output_dir" + build_expand_gateway_command = "python3 build_chain.py build -c conf/config-build-example.toml -t gateway -O output_dir" + build_expand_node_command = "python3 build_chain.py build -c conf/config-build-example.toml -t node -O output_dir" + + description = "e.g:\n%s\n%s\n%s\n%s" % ( + build_nodes_command, build_expand_node_command, build_expand_rpc_command, build_expand_gateway_command) + build_parser = sub_parsers.add_parser(description=utilities.format_info(description), + name=subparser_name, help="build operation", + formatter_class=RawTextHelpFormatter) + # command option + help_info = "[Optional] specify the type: \n* type list: %s\n" % ( + CommandInfo.build_command_type_list_str) + + build_parser.add_argument( + "-t", '--type', help=help_info, required=False, default="all") + + # config option + help_info = "[Required] the config file, default is config.toml:\n * config to build chain example: conf/config-build-example.toml" + build_parser.add_argument( + "-c", "--config", help=help_info, required=True) + + help_info = "[Optional] specify the output dir, default is ./generated" + build_parser.add_argument( + "-O", "--output", default="./generated", help=help_info, required=False) + # --------------------------------------------------------------------------------------------------- + + # --------------------------------------------------------------------------------------------------- + subparser_name = CommandInfo.merge_config_parser_name + merge_config_tars_command = "python3 build_chain.py merge-config -t tars -c tars0.conf tars1.conf -O output_dir" + merge_config_p2p_command = "python3 build_chain.py merge-config -t p2p -c nodes0.json nodes1.json -O output_dir" + + description = "e.g:\n%s" % (merge_config_tars_command) + merge_config_parser = sub_parsers.add_parser(description=utilities.format_info(description), + name=subparser_name, help="merge config operation", + formatter_class=RawTextHelpFormatter) + # command option + help_info = "[Required] specify the type: \n* type list: %s\n" % ( + CommandInfo.merge_config_type_str) + + merge_config_parser.add_argument( + "-t", '--type', help=help_info, required=True) + + # config option + help_info = "[Required] the config files to be\n" + merge_config_parser.add_argument( + "-c", "--config", nargs='+', help=help_info, required=True) + + help_info = "[Required] specify the output dir" + merge_config_parser.add_argument( + "-O", "--output", help=help_info, required=True) + # --------------------------------------------------------------------------------------------------- + + # create_subnet_parser parser + description = "e.g: python3 %s create-subnet -n tars-network -s 172.25.0.0/16" % ( + sys.argv[0]) + create_subnet_parser = sub_parsers.add_parser(description=utilities.format_info(description), + name=CommandInfo.network_create_subnet, help="create docker subnet", + formatter_class=RawTextHelpFormatter) + help_info = "[Optional] specified the network name, default is tars-network\n" + create_subnet_parser.add_argument( + "-n", "--name", help=help_info, default="tars-network") + + help_info = "[Required] specified the subnet, e.g. 172.25.0.0/16\n" + create_subnet_parser.add_argument( + "-s", "--subnet", help=help_info, default=None, required=True) + + # network_add_vxlan + # description = ( + # "Note: only support linux now\ne.g: python3 %s add-vxlan -n tars-network -d ${remote_ip} -v docker_vxlan") % (sys.argv[0]) + # add_vxlan_parser = sub_parsers.add_parser(description=utilities.format_info(description), + # name=CommandInfo.network_add_vxlan, help="add vxlan for docker subnet", formatter_class=RawTextHelpFormatter) + # subnet option + # help_info = "[Optional] specified the subnet, default is tars-network\n" + # add_vxlan_parser.add_argument( + # "-n", "--network", help=help_info, default="tars-network") + # remote ip + # help_info = "[Required] specified the dstip to create vxlan network" + # add_vxlan_parser.add_argument( + # "-d", "--dstip", help=help_info, default=None, required=True) + + # vxlan network name + # help_info = "[Required] specified the vxlan name to create vxlan network, e.g.: vxlan_docker" + # add_vxlan_parser.add_argument( + # "-v", "--vxlan", help=help_info, default=None, required=True) + + args = parser.parse_args() + return args + + +def is_chain_command(args): + return (args.command == CommandInfo.chain_sub_parser_name) + + +def is_build_package_command(args): + return (args.command == CommandInfo.build_package_parser_name) + + +def is_create_subnet_command(args): + return (args.command == CommandInfo.network_create_subnet) + + +def is_add_vxlan_command(args): + return (args.command == CommandInfo.network_add_vxlan) + + +def is_download_binary_command(args): + return (args.command == CommandInfo.download_binary) + + +def is_merge_config_command(args): + return (args.command == CommandInfo.merge_config_parser_name) + + +def chain_operations(args, node_type): + if is_chain_command(args) is False: + return + if os.path.exists(args.config) is False: + utilities.log_error("The config file '%s' not found!" % args.config) + sys.exit(-1) + toml_config = toml.load(args.config) + op_type = args.type + if op_type not in ServiceInfo.supported_service_type: + utilities.log_error("the service type must be " + + ', '.join(ServiceInfo.supported_service_type)) + return + + output_dir = args.output + # if os.path.exists(output_dir): + # utilities.log_info( output_dir + " is already exists, please switch directory or remove it after confirm the directory is no longer in use") + # sys.exit(-1) + + utilities.log_info("generator output dir is %s" % output_dir) + + command = args.op + if op_type == ServiceInfo.rpc_service_type or op_type == ServiceInfo.gateway_service_type: + if command in CommandInfo.service_command_impl.keys(): + chain_config = ChainConfig(toml_config, node_type, output_dir, False, True) + command_impl = ServiceCommandImpl( + chain_config, args.type, node_type, output_dir) + impl_str = CommandInfo.service_command_impl[command] + cmd_func_attr = getattr(command_impl, impl_str) + cmd_func_attr() + return + if op_type == ServiceInfo.monitor_service_type: + if command in CommandInfo.node_command_to_impl.keys(): + chain_config = ChainConfig(toml_config, node_type, output_dir, True, True) + command_impl = MonitorCommandImpl(chain_config, node_type, output_dir) + impl_str = CommandInfo.monitor_command_to_impl[command] + cmd_func_attr = getattr(command_impl, impl_str) + cmd_func_attr() + return + if op_type == ServiceInfo.node_service_type: + if command in CommandInfo.node_command_to_impl.keys(): + chain_config = ChainConfig(toml_config, node_type, output_dir, True, True) + command_impl = NodeCommandImpl(chain_config, node_type, output_dir) + impl_str = CommandInfo.node_command_to_impl[command] + cmd_func_attr = getattr(command_impl, impl_str) + cmd_func_attr() + return + if op_type == ServiceInfo.executor_service_type: + if command in CommandInfo.executor_command_to_impl.keys(): + chain_config = ChainConfig(toml_config, node_type, output_dir, True, True) + command_impl = NodeCommandImpl(chain_config, node_type, output_dir) + impl_str = CommandInfo.executor_command_to_impl[command] + cmd_func_attr = getattr(command_impl, impl_str) + cmd_func_attr() + return + utilities.log_info("unimplemented command, op_type: " + str(op_type)) + + +def create_subnet_operation(args): + if is_create_subnet_command(args) is False: + return + docker_network_name = args.name + if docker_network_name is None or len(docker_network_name) == 0: + utilities.log_error( + "Must set the docker network name! e.g. tars-network") + sys.exit(-1) + subnet_ip_segment = args.subnet + if subnet_ip_segment is None or len(subnet_ip_segment) == 0: + utilities.log_error("Must set the subnet! e.g. 172.25.0.0.1") + sys.exist(-1) + NetworkManager.create_sub_net(subnet_ip_segment, docker_network_name) + utilities.print_split_info() + + +def add_vxlan_operation(args): + if is_add_vxlan_command(args) is False: + return + utilities.print_split_info() + network = args.network + if network is None or len(network) == 0: + utilities.log_error( + "Must set a valid non-empty network name, e.g. tars-network") + return + dstip = args.dstip + if dstip is None or len(dstip) == 0: + utilities.log_error("Must set a valid non-empty dst ip") + return + vxlan_name = args.vxlan + if vxlan_name is None or len(vxlan_name) == 0: + utilities.log_error("Must set a valid non-empty vxlan name") + return + NetworkManager.create_bridge(network, vxlan_name, dstip) + utilities.print_split_info() + + +def download_binary_operation(args, node_type): + if is_download_binary_command(args) is False: + return + utilities.print_split_info() + binary_path = args.path + version = args.version + if version.startswith("v") is False: + version = "v" + version + if args.type not in CommandInfo.download_type: + utilities.log_error("Unsupported download type %s, only support %s now" % ( + args.type, ', '.join(CommandInfo.download_type))) + return + use_cdn = True + if args.type == "git": + use_cdn = False + binary_controller = BinaryController( + version, binary_path, use_cdn, node_type) + binary_controller.download_all_binary() + utilities.print_split_info() + + +def merge_config_operation(args): + if is_merge_config_command(args) is False: + return + + utilities.print_split_info() + + utilities.log_info("* merge-config operation ") + + output_dir = args.output + utilities.log_info("* output dir: " + output_dir) + + type = args.type + utilities.log_info("* type: " + type) + + if (type in ["tars"]) is False: + utilities.log_error("Unsupported types, only 'tars' type is supported") + sys.exit(-1) + + if len(args.config) <= 1: + utilities.log_error("Merge operation is supported for more than two config files") + sys.exit(-1) + + tars_proxy_conf_path = os.path.join(output_dir, "tars_proxy.ini") + p2p_conf_path = os.path.join(output_dir, "nodes.json") + if os.path.exists(tars_proxy_conf_path): + utilities.log_error(tars_proxy_conf_path + " is already exist, please change the output dir") + sys.exit(-1) + + config = args.config + for c in config: + if os.path.exists(c) is False: + utilities.log_error("The config file '%s' not found!" % c) + sys.exit(-1) + utilities.mkdir(output_dir) + if type == "tars": + merge_tars_config(config, tars_proxy_conf_path) + else: + merge_p2p_config(config, p2p_conf_path) + + utilities.print_split_info() + utilities.log_info("* merge config output dir is %s" % output_dir) + + +def merge_tars_config(config, store_tars_conf_path): + merged_tars_conf_gen = TarsConfigGenerator(store_tars_conf_path) + for c in config: + utilities.log_info("* tars config: " + str(c)) + tars_conf = TarsConfigGenerator(c) + tars_service_names = ["gateway", "rpc", "txpool", "scheduler", "pbft", "ledger", "front"] + for service_name in tars_service_names: + conf_items = tars_conf.get_config_items(service_name) + if conf_items is None: + continue + + for k in conf_items: + utilities.log_info(" service name: %s ,endpoint: %s" % (service_name, conf_items[k])) + merged_tars_conf_gen.append_config_item(service_name, conf_items[k]) + + merged_tars_conf_gen.restore_init_config(os.path.join(store_tars_conf_path)) + + +def merge_p2p_config(config, store_tars_conf_path): + # TODO: impl p2p config merge + return + + +def build_package_operation(args, node_type): + if is_build_package_command(args) is False: + return + + utilities.print_split_info() + + args = parse_command() + if os.path.exists(args.config) is False: + utilities.log_error("the config file '%s' not found!" % args.config) + sys.exit(-1) + + output_dir = args.output + utilities.log_info("* output dir: " + output_dir) + + # if os.path.exists(output_dir): utilities.log_info( output_dir + " already exists, please switch directory or + # remove it after confirm the directory is no longer in use") sys.exit(-1) + + toml_config = toml.load(args.config) + chain_config = ChainConfig(toml_config, node_type, output_dir, True, False) + + utilities.file_must_exist(chain_config.tars_config.tars_pkg_dir) + utilities.file_must_exist(os.path.join(chain_config.tars_config.tars_pkg_dir, ServiceInfo.rpc_service)) + utilities.file_must_exist(os.path.join(chain_config.tars_config.tars_pkg_dir, ServiceInfo.gateway_service)) + + if node_type == "max": + utilities.file_must_exist(os.path.join(chain_config.tars_config.tars_pkg_dir, ServiceInfo.executor_service)) + utilities.file_must_exist(os.path.join(chain_config.tars_config.tars_pkg_dir, ServiceInfo.max_node_service)) + else: + utilities.file_must_exist(os.path.join(chain_config.tars_config.tars_pkg_dir, ServiceInfo.single_node_service)) + + # TODO: port conflict check + + args_type = args.type + utilities.log_info("* args type: " + args_type) + + enable_build_rpc_tars_pkg = False + if args_type in ["all", "rpc"]: + # gen rpc config + rpc_config_gen = ServiceConfigGenerator(chain_config, "rpc", node_type, output_dir) + rpc_config_gen.generate_all_tars_install_package() + enable_build_rpc_tars_pkg = True + + enable_build_gateway_tars_pkg = False + if args_type in ["all", "gateway"]: + # gen gateway config + gateway_config_gen = ServiceConfigGenerator(chain_config, "gateway", node_type, output_dir) + gateway_config_gen.generate_all_tars_install_package() + enable_build_gateway_tars_pkg = True + + enable_build_node_tars_pkg = False + if args_type in ["all", "node"]: + enable_build_node_tars_pkg = True + if node_type == "max": + node_config_gen = MaxNodeConfigGenerator(chain_config, node_type, output_dir, True) + # gen max node config + node_config_gen.generate_all_max_node_tars_install_package() + else: + node_config_gen = NodeConfigGenerator(chain_config, node_type, output_dir, True) + # gen node config + node_config_gen.generate_all_tars_install_package() + + enable_build_executor_tars_pkg = False + if args_type in ["all", "executor"]: + if node_type == "max": + executor_config_gen = MaxNodeConfigGenerator(chain_config, node_type, output_dir, True) + executor_config_gen.generate_all_executor_tars_install_package() + enable_build_executor_tars_pkg = True + + # copy tars proxy json file + if enable_build_rpc_tars_pkg: + rpc_config_gen.copy_tars_proxy_conf() + if enable_build_gateway_tars_pkg: + gateway_config_gen.copy_tars_proxy_conf() + if enable_build_node_tars_pkg: + if node_type != "max": + node_config_gen.copy_tars_proxy_conf() + else: + node_config_gen.copy_max_node_tars_proxy_conf() + if enable_build_executor_tars_pkg: + executor_config_gen.copy_executor_tars_proxy_conf() + + utilities.print_split_info() + utilities.log_info("* build tars install package output dir : %s" % output_dir) diff --git a/tools/BcosBuilder/src/common/utilities.py b/tools/BcosBuilder/src/common/utilities.py new file mode 100644 index 0000000..57d1f10 --- /dev/null +++ b/tools/BcosBuilder/src/common/utilities.py @@ -0,0 +1,360 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import sys +import re +import os +import subprocess +import logging + +logging.basicConfig(format='%(message)s', + level=logging.INFO) + + +class ServiceInfo: + node_service_type = "node" + executor_service_type = "executor" + rpc_service_type = "rpc" + gateway_service_type = "gateway" + monitor_service_type = "monitor" + + ssl_file_list = ["ca.crt", "ssl.key", "ssl.crt"] + sm_ssl_file_list = ["sm_ca.crt", "sm_ssl.key", + "sm_ssl.crt", "sm_enssl.key", "sm_enssl.crt"] + + rpc_service = "BcosRpcService" + rpc_service_obj = ["RpcServiceObj"] + gateway_service = "BcosGatewayService" + gateway_service_obj = ["GatewayServiceObj"] + + single_node_service = "BcosNodeService" + single_node_obj_name_list = [ + "LedgerServiceObj", "SchedulerServiceObj", "TxPoolServiceObj", "PBFTServiceObj", "FrontServiceObj"] + + rpc_name = "rpc" + gateway_name = "gateway" + ledger_name = "ledger" + front_name = "front" + executor_name = "executor" + scheduler_name = "scheduler" + txpool_name = "txpool" + + max_node_service = "BcosMaxNodeService" + max_node_service_obj = single_node_obj_name_list + executor_service = "BcosExecutorService" + executor_service_obj = ["ExecutorServiceObj"] + + supported_vm_types = ["evm", "wasm"] + supported_consensus_list = ["pbft"] + tars_pkg_postfix = ".tgz" + default_listen_ip = "0.0.0.0" + cert_generationscript_path = "../src/scripts/generate_cert.sh" + supported_service_type = [node_service_type, monitor_service_type, executor_service_type, + rpc_service_type, gateway_service_type] + + +class ConfigInfo: + tpl_abs_path = "../src/tpl/" + tpl_src_mtail_path = "../src/scripts/" + tpl_binary_path = "./binary/" + tpl_monitor_path = "../docker/host/linux/monitor/" + pwd_path = os.getcwd() + rpc_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "config.ini.rpc") + gateway_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "config.ini.gateway") + genesis_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "config.genesis") + node_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "config.ini.node") + mtail_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "node.mtail") + monitor_config_tpl_path = os.path.join( + pwd_path, tpl_monitor_path, "") + prometheus_config_tpl_path = os.path.join( + pwd_path, tpl_monitor_path, "prometheus/prometheus.yml") + executor_config_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "config.ini.executor") + tars_start_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "tars_start.sh") + tars_stop_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "tars_stop.sh") + tars_rpc_conf_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "tars_rpc.conf") + tars_gateway_conf_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "tars_gateway.conf") + tars_node_conf_tpl_path = os.path.join( + pwd_path, tpl_abs_path, "tars_node.conf") + + +class CommandInfo: + gen_config = "gen-config" + upload = "upload" + deploy = "deploy" + upgrade = "upgrade" + undeploy = "undeploy" + start = "start" + stop = "stop" + expand = "expand" + network_create_subnet = "create-subnet" + network_add_vxlan = "add-vxlan" + download_binary = "download_binary" + download_type = ["cdn", "git"] + default_binary_version = "v3.2.0" + command_list = [gen_config, upload, deploy, + upgrade, undeploy, expand, start, stop] + service_command_list_str = ', '.join(command_list) + chain_sub_parser_name = "chain" + node_command_to_impl = {gen_config: "gen_node_config", upload: "upload_nodes", deploy: "deploy_nodes", + upgrade: "upgrade_nodes", undeploy: "undeploy_nodes", start: "start_all", stop: "stop_all", expand: "expand_nodes"} + monitor_command_to_impl = {deploy: "deploy_monitor", + start: "start_monitor", stop: "stop_monitor"} + executor_command_to_impl = { + gen_config: "gen_executor_config", expand: "expand_executors"} + service_command_impl = {gen_config: "gen_service_config", upload: "upload_service", deploy: "deploy_service", + upgrade: "upgrade_service", undeploy: "delete_service", start: "start_service", stop: "stop_service", expand: "expand_service"} + + build_package_parser_name = "build" + build_command_type_list = ["rpc", "gateway", "node", "all"] + build_command_type_list_str = ', '.join(build_command_type_list) + + merge_config_parser_name = "merge-config" + # merge_config_type_list = ["p2p", "tars"] + merge_config_type_list = ["tars"] + merge_config_type_str = ', '.join(merge_config_type_list) + +def log_error(error_msg): + logging.error("\033[31m%s \033[0m" % error_msg) + + +def log_info(error_msg): + logging.info("\033[32m%s \033[0m" % error_msg) + + +def format_info(info): + return ("\033[32m%s \033[0m" % info) + + +def log_debug(error_msg): + logging.debug("%s" % error_msg) + + +def get_item_value(config, key, default_value, must_exist, desc): + if key in config: + return config[key] + if must_exist: + raise Exception("the value for %s.%s must be set" % (desc, key)) + return default_value + + +def get_value(config, section, key, default_value, must_exist): + if section in config and key in config[section]: + return config[section][key] + if must_exist: + raise Exception("the value for %s must be set" % key) + return default_value + + +def execute_command_and_getoutput(command): + status, output = subprocess.getstatusoutput(command) + if status != 0: + log_error( + "execute command %s failed, error message: %s" % (command, output)) + return (False, output) + return (True, output) + + +def execute_command(command): + (ret, result) = execute_command_and_getoutput(command) + return ret + + +def mkdir(path): + if not os.path.exists(path): + os.makedirs(path) + +def removeDir(path): + if os.path.exists(path): + os.removedirs(path) + +def mkfiledir(filepath): + parent_dir = os.path.abspath(os.path.join(filepath, "..")) + mkdir(parent_dir) + + +def generate_service_name(prefix, service_name): + return prefix + service_name + + +def convert_bool_to_str(value): + if value is True: + return "true" + return "false" + + +def generate_cert_with_command(sm_type, command, outputdir, ca_cert_info): + """ + generate cert for the network + """ + sm_mode = "" + if sm_type is True: + sm_mode = " -s" + generate_cert_cmd = "bash %s -o %s -c %s %s %s" % ( + ServiceInfo.cert_generationscript_path, outputdir, command, sm_mode, ca_cert_info) + if execute_command(generate_cert_cmd) is False: + log_error("%s failed" % command) + sys.exit(-1) + return True + + +def execute_monitor_with_command(monitor_execute__scripts_path): + """ + execute common for the monitor + """ + execute_monitor_cmd = "bash %s" % ( + monitor_execute__scripts_path) + if execute_command(execute_monitor_cmd) is False: + log_error("%s failed exec " % monitor_execute__scripts_path) + sys.exit(-1) + return True + + +def execute_mtail_with_command(mtail_execute_scripts_path, mtail_listen_port): + """ + execute mtail for the monitor + """ + execute_mtail_cmd = "bash %s %s " % ( + mtail_execute_scripts_path, mtail_listen_port) + if execute_command(execute_mtail_cmd) is False: + log_error("%s failed start" % mtail_execute_scripts_path) + sys.exit(-1) + return True + + +def execute_ansible_copy_with_command(deploy_ip, srcDir, destDir): + """ + execute ansible for the monitor + + """ + execute_copy_matil_cmd = 'ansible %s -m copy -a "src=%s dest=%s/ mode=0755"' % ( + deploy_ip, srcDir, destDir) + if execute_command(execute_copy_matil_cmd) is False: + log_error("%s failed copy mtail config for ansible" % srcDir) + sys.exit(-1) + return True + + +def execute_ansible_with_command(start_scripts_path, deploy_ip, mtail_listen_port): + """ + execute ansible for the monitor + + """ + execute_matil_cmd = 'ansible %s -m shell -a "bash %s %s "' % ( + deploy_ip, start_scripts_path, mtail_listen_port) + if execute_command(execute_matil_cmd) is False: + log_error("%s failed start mtail config by ansible" % + start_scripts_path) + sys.exit(-1) + return True + + +def execute_ansible_with_monitor_command(start_scripts_path, deploy_ip): + """ + execute ansible for the monitor + + """ + execute_matil_cmd = 'ansible %s -m shell -a "%s"' % ( + deploy_ip, start_scripts_path) + if execute_command(execute_matil_cmd) is False: + log_error("%s failed start mtail config by ansible" % + start_scripts_path) + sys.exit(-1) + return True + + +def generate_private_key(sm_type, outputdir): + return generate_cert_with_command(sm_type, "generate_private_key", outputdir, "") + + +def generate_cert(sm_type, outputdir): + return generate_cert_with_command(sm_type, "generate_all_cert", outputdir, "") + + +def generate_ca_cert(sm_type, cacert_dir): + command = "generate_ca_cert" + ca_cert_info = "-d %s" % cacert_dir + return generate_cert_with_command(sm_type, command, cacert_dir, ca_cert_info) + + +def generate_node_cert(sm_type, ca_cert_path, outputdir): + command = "generate_node_cert" + ca_cert_info = "-d %s" % ca_cert_path + return generate_cert_with_command(sm_type, command, outputdir, ca_cert_info) + + +def generate_sdk_cert(sm_type, ca_cert_path, outputdir): + command = "generate_sdk_cert" + ca_cert_info = "-d %s" % ca_cert_path + return generate_cert_with_command(sm_type, command, outputdir, ca_cert_info) + + +def print_split_info(): + log_info("=========================================================") + + +def print_badge(badge): + log_info("----------- %s -----------" % badge) + +def file_must_exist(file_path): + if not os.path.exists(file_path): + log_error("%s does not exist, please check" % file_path) + sys.exit(-1) + +def try_to_rename_tgz_package(root_path, tars_pkg_path, service_name, org_service_name): + renamed_package_path = "" + if os.path.exists(tars_pkg_path) is False: + log_error("rename pkg: the tars pkg path %s doesn't exist, service: %s" % ( + tars_pkg_path, service_name)) + return (False, renamed_package_path) + + org_package_name = org_service_name + ServiceInfo.tars_pkg_postfix + org_package_path = os.path.join(tars_pkg_path, org_package_name) + if os.path.exists(org_package_path) is False: + log_error("rename pkg: the tars pkg path %s doesn't exist, service: %s" % ( + tars_pkg_path, service_name)) + return (False, renamed_package_path) + + unzip_binary_path = os.path.join("./", org_service_name, org_service_name) + if service_name == org_service_name: + return (True, org_package_path) + renamed_package_name = service_name + ServiceInfo.tars_pkg_postfix + renamed_package_path = os.path.join("./", renamed_package_name) + renamed_binary_path = os.path.join("./", service_name, service_name) + + mkdir_command = "mkdir -p %s" % os.path.join("./", service_name) + unzip_command = "tar -xvf %s" % org_package_path + mv_command = "mv %s %s && rm -rf %s" % ( + unzip_binary_path, renamed_binary_path, os.path.join("./", org_service_name)) + zip_command = "tar -cvzf %s %s" % (renamed_package_path, + renamed_binary_path) + rm_command = "rm -rf %s" % os.path.join("./", service_name) + generated_package_path = os.path.join(root_path, renamed_package_path) + mv_pkg_command = "mkdir -p %s && mv %s %s" % ( + root_path, renamed_package_path, root_path) + command = "%s && %s && %s && %s && %s && %s" % ( + mkdir_command, unzip_command, mv_command, zip_command, rm_command, mv_pkg_command) + ret = execute_command(command) + if ret is False: + log_error("try_to_rename_tgz_package failed, service: %s" % + service_name) + return (ret, generated_package_path) + + +def check_service_name(tag, service_name): + """ + Note: tars service name can only contain letters and numbers + """ + service_name_len = len(service_name) + ret = re.search(r'^[A-Za-z0-9]+', service_name).span() + if ret is None or (ret[0] != 0 or ret[1] != service_name_len): + raise Exception( + "the %s must be letters|numbers, invalid value: %s" % (tag, service_name)) diff --git a/tools/BcosBuilder/src/config/chain_config.py b/tools/BcosBuilder/src/config/chain_config.py new file mode 100644 index 0000000..98d0b0e --- /dev/null +++ b/tools/BcosBuilder/src/config/chain_config.py @@ -0,0 +1,398 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import json +import sys +import os + +from common import utilities +from common.utilities import ServiceInfo + + +class TarsConfig: + def __init__(self, config, requireUrl): + self.config = config + section = "tars" + self.tars_pkg_dir = utilities.get_value( + self.config, section, "tars_pkg_dir", "binary", False) + self.tars_pkg_dir = self.tars_pkg_dir.strip() + + if not requireUrl: + utilities.log_info("* Don't load tars token and url") + return + + self.tars_url = utilities.get_value( + self.config, section, "tars_url", None, True) + self.tars_url = self.tars_url.strip() + self.tars_token = utilities.get_value( + self.config, section, "tars_token", None, True) + self.tars_token = self.tars_token.strip() + + if len(self.tars_token) == 0: + utilities.log_error("Must config 'tars.tars_token'") + sys.exit(-1) + + +class GenesisConfig: + def __init__(self, config, sm_type, chain_id, group_id): + self.config = config + self.desc = "[[group]]" + self.sm_crypto = sm_type + self.group_id = group_id + self.chain_id = chain_id + self.leader_period = utilities.get_item_value( + self.config, "leader_period", 1, False, self.desc) + self.block_tx_count_limit = utilities.get_item_value( + self.config, "block_tx_count_limit", 1000, False, self.desc) + self.consensus_type = utilities.get_item_value( + self.config, "consensus_type", "pbft", False, self.desc) + self.gas_limit = utilities.get_item_value( + self.config, "gas_limit", "3000000000", False, self.desc) + self.compatibility_version = utilities.get_item_value( + self.config, "compatibility_version", "3.1.0", False, self.desc) + self.vm_type = utilities.get_item_value( + self.config, "vm_type", "evm", False, self.desc) + self.auth_check = utilities.get_item_value( + self.config, "auth_check", False, False, self.desc) + self.init_auth_address = utilities.get_item_value( + self.config, "init_auth_address", "", self.auth_check, self.desc) + + +class AgencyConfig: + def __init__(self, config, chain_id, default_url, enforce_failover): + """ + init the agencyConfig + """ + self.config = config + self.chain_id = chain_id + # the agencyName + self.desc = "[[agency]]." + self.name = utilities.get_item_value( + self.config, "name", None, True, self.desc) + utilities.check_service_name("agency.name", self.name) + # the rpc service_name + self.rpc_service_name = self.name + utilities.ServiceInfo.rpc_service + # the gateway service_name + self.gateway_service_name = self.name + utilities.ServiceInfo.gateway_service + # the failover cluster url + self.failover_cluster_url = utilities.get_item_value( + self.config, "failover_cluster_url", default_url, enforce_failover, self.desc) + # load storage_security config + self.enable_storage_security = utilities.get_item_value( + self.config, "enable_storage_security", False, False, self.desc) + self.key_center_url = utilities.get_item_value( + self.config, "key_center_url", "", False, self.desc) + self.cipher_data_key = utilities.get_item_value( + self.config, "cipher_data_key", "", False, self.desc) + + +class ServiceInfoConfig: + def __init__(self, config, agency_config, service_obj_list, name, service_type, tpl_config_file, ca_cert_path, sm_ssl, binary_name): + self.config = config + self.name = name + self.ca_cert_path = ca_cert_path + self.service_type = service_type + self.tpl_config_file = tpl_config_file + self.agency_config = agency_config + self.service_obj_list = service_obj_list + self.sm_ssl = sm_ssl + self.binary_name = binary_name + # the service deploy ip + self.desc = "[agency." + service_type + "]." + self.deploy_ip_list = utilities.get_item_value( + self.config, "deploy_ip", None, True, self.desc) + self.listen_ip = utilities.get_item_value( + self.config, "listen_ip", ServiceInfo.default_listen_ip, False, self.desc) + self.listen_port = utilities.get_item_value( + self.config, "listen_port", 20200, False, self.desc) + self.thread_count = utilities.get_item_value( + self.config, "thread_count", 4, False, self.desc) + # peers info + self.peers = utilities.get_item_value( + self.config, "peers", [], False, self.desc) + # tars listen ip + self.tars_listen_ip = utilities.get_item_value( + self.config, "tars_listen_ip", ServiceInfo.default_listen_ip, False, self.desc) + # tars listen port + self.tars_listen_port = utilities.get_item_value( + self.config, "tars_listen_port", 40400, False, self.desc) + + +class NodeServiceConfig: + def __init__(self, app_name, base_service_name, service_name, service_obj_list, deploy_ip_list, config_file_list, need_add_ini_config): + self.app_name = app_name + self.service_name = service_name + self.service_obj_list = service_obj_list + self.deploy_ip_list = deploy_ip_list + self.base_service_name = base_service_name + # Note: in max-node mode, only contains [config.genesis, node.pem] + # in pro-node mode, contains [config.ini, config.genesis, node.pem] + self.config_file_list = config_file_list + # Note: in max-node mode, the ini config files prefixed with deploy ip + self.ini_config_file = "config.ini" + self.need_add_ini_config = need_add_ini_config + + +class NodeConfig: + def __init__(self, config, chain_id, group_id, agency_config, node_service_base_name, node_service_obj_list, sm_crypto, node_type): + self.chain_id = chain_id + self.group_id = group_id + self.agency_config = agency_config + self.config = config + # the node name + self.desc = "[[agency.group.node]]." + self.node_name = utilities.get_item_value( + self.config, "node_name", None, True, self.desc) + self.node_name = self.node_name.strip() + + # parse key_page_size + self.key_page_size = utilities.get_item_value( + self.config, "key_page_size", 10240, False, self.desc) + # load storage_security + self.enable_storage_security = utilities.get_item_value( + self.config, "enable_storage_security", False, False, self.desc) + self.key_center_url = utilities.get_item_value( + self.config, "key_center_url", "", False, self.desc) + self.cipher_data_key = utilities.get_item_value( + self.config, "cipher_data_key", "", False, self.desc) + self.deploy_ip = utilities.get_item_value( + self.config, "deploy_ip", None, True, self.desc) + self.tars_listen_ip = utilities.get_item_value( + self.config, "tars_listen_ip", "0.0.0.0", False, self.desc) + self.tars_listen_port = utilities.get_item_value( + self.config, "tars_listen_port", 40400, False, self.desc) + self.monitor_listen_port = utilities.get_item_value( + self.config, "monitor_listen_port", None, False, self.desc) + self.monitor_log_path = utilities.get_item_value( + self.config, "monitor_log_path", None, False, self.desc) + # parse node_service_config + self.node_service_base_name = node_service_base_name + self.node_service_obj_list = node_service_obj_list + self.sm_crypto = sm_crypto + self.service_list = [] + self.__parse_node_service_config(node_type) + + def __parse_node_service_config(self, node_type): + """ + parse and load the node_service config + """ + # the max_node service config + self.node_service_name = self.get_service_name( + self.node_service_base_name) + + node_deploy_ip = utilities.get_item_value( + self.config, "deploy_ip", None, True, self.desc) + deploy_ip_list = [] + self.node_config_file_list = None + if node_type != "max": + self.node_config_file_list = [ + "config.ini", "config.genesis", "node.pem"] + deploy_ip_list.append(node_deploy_ip) + else: + self.node_config_file_list = ["config.genesis", "node.pem"] + deploy_ip_list = node_deploy_ip + + self.node_service = NodeServiceConfig(self.agency_config.chain_id, self.node_service_base_name, self.node_service_name, + self.node_service_obj_list, deploy_ip_list, self.node_config_file_list, True) + self.service_list.append(self.node_service) + + def get_service_name(self, service_base_name): + return (self.agency_config.name + self.group_id + self.node_name + service_base_name) + + +class ProNodeConfig(NodeConfig): + """ + the pro-node config + """ + + def __init__(self, config, chain_id, group_id, agency_config, sm_crypto): + NodeConfig.__init__(self, config, chain_id, group_id, agency_config, + utilities.ServiceInfo.single_node_service, utilities.ServiceInfo.single_node_obj_name_list, sm_crypto, "pro") + + +class MaxNodeConfig(NodeConfig): + def __init__(self, config, chain_id, group_id, agency_config, sm_crypto): + """ + the max-node config + """ + NodeConfig.__init__(self, config, chain_id, group_id, agency_config, + utilities.ServiceInfo.max_node_service, utilities.ServiceInfo.single_node_obj_name_list, sm_crypto, "max") + # load the pd_addrs + self.pd_addrs = utilities.get_item_value( + self.config, "pd_addrs", None, True, self.desc) + # the executor service config + self.__parse_executor_service_config() + # load service name(for executor) + self.__load_service_name() + # enforce turnoff the storage_security + self.enable_storage_security = False + + def __parse_executor_service_config(self): + """ + parse and load the executor service_config + """ + executor_service_name = self.get_service_name( + utilities.ServiceInfo.executor_service) + executor_service_deploy_ip = utilities.get_item_value( + self.config, "executor_deploy_ip", None, True, self.desc) + self.executor_config_file_list = ["config.ini", "config.genesis"] + self.executor_service = NodeServiceConfig(self.chain_id, utilities.ServiceInfo.executor_service, executor_service_name, + utilities.ServiceInfo.executor_service_obj, executor_service_deploy_ip, self.executor_config_file_list, False) + self.service_list.append(self.executor_service) + + def __load_service_name(self): + self.scheduler_service_name = self.node_service_name + self.txpool_service_name = self.node_service_name + + +class GroupConfig: + def __init__(self, config, chain_id, output_dir): + self.config = config + self.chain_id = chain_id + self.desc = "[[group]]." + self.group_id = utilities.get_item_value( + self.config, "group_id", "group", False, self.desc) + # check the groupID + utilities.check_service_name("group_id", self.group_id) + default_genesis_config_path = os.path.join( + output_dir + "/", self.chain_id, self.group_id, "config.genesis") + self.genesis_config_path = utilities.get_item_value( + self.config, "genesis_config_path", default_genesis_config_path, False, self.desc) + # self.vm_type = utilities.get_item_value( + # self.config, "vm_type", "evm", False, self.desc) + self.sm_crypto = utilities.get_item_value( + self.config, "sm_crypto", False, False, self.desc) + # self.auth_check = utilities.get_item_value( + # self.config, "auth_check", False, False, self.desc) + # self.init_auth_address = utilities.get_item_value( + # self.config, "init_auth_address", "", self.auth_check, self.desc) + self.genesis_config = GenesisConfig( + self.config, self.sm_crypto, self.chain_id, self.group_id) + self.node_list = [] + + def append_node_list(self, node_list): + self.node_list = self.node_list + node_list + + +class ChainConfig: + def __init__(self, config, node_type, output_dir, should_load_node_config, require_tars_url): + self.config = config + self.output_dir = output_dir + self.node_type = node_type + self.enforce_failover = False + if self.node_type == "max": + self.enforce_failover = True + self.default_failover_url = "127.0.0.1:2379" + self.tars_config = TarsConfig(config, require_tars_url) + self.desc = "[chain]." + self.__load_chain_config() + # load the group list + self.group_list = {} + self.__load_group_list() + # agency_name to agency_config + self.agency_list = {} + # rpc_service_name to rpc_service + self.rpc_service_list = {} + # gateway_service_name to gateway_service + self.gateway_service_list = {} + # the node list + self.node_list = {} + self.__load_agency_config(should_load_node_config) + + def __load_group_list(self): + """ + load the group list + """ + group_list_config = utilities.get_item_value( + self.config, "group", [], False, self.desc) + for group in group_list_config: + group_config = GroupConfig(group, self.chain_id, self.output_dir) + self.group_list[group_config.group_id] = group_config + + def __load_chain_config(self): + """ + load the chain_config + """ + self.chain_id = utilities.get_value( + self.config, "chain", "chain_id", "chain", False) + # check the chain_id + utilities.check_service_name("chain_id", self.chain_id) + default_rpc_ca_cert = os.path.join( + self.output_dir, "rpc", self.chain_id, "ca") + + self.rpc_ca_cert_path = utilities.get_value( + self.config, "chain", "rpc_ca_cert_path", default_rpc_ca_cert, False) + + default_gateway_ca_cert = os.path.join( + self.output_dir, "gateway", self.chain_id, "ca") + + self.gateway_ca_cert_path = utilities.get_value( + self.config, "chain", "gateway_ca_cert_path", default_gateway_ca_cert, False) + self.rpc_sm_ssl = utilities.get_value( + self.config, "chain", "rpc_sm_ssl", False, False) + self.gateway_sm_ssl = utilities.get_value( + self.config, "chain", "gateway_sm_ssl", False, False) + + def __load_agency_config(self, should_load_node_config): + """ + load the agency config + """ + agency_list = utilities.get_item_value( + self.config, "agency", [], False, "") + for agency in agency_list: + # parse the agency config + agency_config = AgencyConfig( + agency, self.chain_id, self.default_failover_url, self.enforce_failover) + self.agency_list[agency_config.name] = agency_config + # parse the rpc service config + rpc_config_section = utilities.get_item_value( + agency, "rpc", None, False, "[agency.rpc]") + if rpc_config_section is not None: + rpc_config = ServiceInfoConfig(rpc_config_section, agency_config, utilities.ServiceInfo.rpc_service_obj, agency_config.rpc_service_name, + utilities.ServiceInfo.rpc_service_type, utilities.ConfigInfo.rpc_config_tpl_path, self.rpc_ca_cert_path, self.rpc_sm_ssl, utilities.ServiceInfo.rpc_service) + self.rpc_service_list[rpc_config.name] = rpc_config + # parse the gateway service config + gateway_config_section = utilities.get_item_value( + agency, "gateway", None, False, "[agency.gateway]") + if gateway_config_section is not None: + gateway_config = ServiceInfoConfig(gateway_config_section, agency_config, utilities.ServiceInfo.gateway_service_obj, agency_config.gateway_service_name, + utilities.ServiceInfo.gateway_service_type, utilities.ConfigInfo.gateway_config_tpl_path, self.gateway_ca_cert_path, self.gateway_sm_ssl, utilities.ServiceInfo.gateway_service) + self.gateway_service_list[gateway_config.name] = gateway_config + # parse the node config + if should_load_node_config is True: + self.__load_node_config(agency, agency_config) + + def __check_duplicate_node_name(self, service_name): + for key, _ in self.node_list.items(): + if service_name == key: + return True + return False + + def __load_node_config(self, agency_config_section, agency_config): + agency_group_list = utilities.get_item_value( + agency_config_section, "group", [], False, "[[agency.group]]") + for group_config in agency_group_list: + group_id = utilities.get_item_value( + group_config, "group_id", None, True, "[[agency.group]]") + if group_id not in self.group_list.keys(): + utilities.log_error( + "Load node config failed for the group %s configuration has not been setted." % group_id) + sys.exit(-1) + group_config_obj = self.group_list.get(group_id) + node_config = utilities.get_item_value( + group_config, "node", None, False, "[[agency.group.node]]") + group_node_list = [] + for node in node_config: + node_service = None + if self.node_type == "max": + node_service = MaxNodeConfig( + node, self.chain_id, group_id, agency_config, group_config_obj.sm_crypto) + else: + node_service = ProNodeConfig( + node, self.chain_id, group_id, agency_config, group_config_obj.sm_crypto) + if self.__check_duplicate_node_name(node_service.node_service_name): + utilities.log_error("The duplicate node name: " + node_service.node_name + + " appears in group: " + group_id + " of the agency: " + agency_config.name) + sys.exit(-1) + self.node_list[node_service.node_service_name] = node_service + group_node_list.append(node_service) + self.group_list[group_id].append_node_list(group_node_list) diff --git a/tools/BcosBuilder/src/config/max_node_config_generator.py b/tools/BcosBuilder/src/config/max_node_config_generator.py new file mode 100644 index 0000000..13cd2ea --- /dev/null +++ b/tools/BcosBuilder/src/config/max_node_config_generator.py @@ -0,0 +1,221 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import os +import shutil + +from common import utilities + +from config.node_config_generator import NodeConfigGenerator +from config.tars_install_package_generator import generate_tars_package +from config.tars_install_package_generator import generate_tars_proxy_config +from config.tars_install_package_generator import initialize_tars_config_env_variables + +class MaxNodeConfigGenerator(NodeConfigGenerator): + def __init__(self, chain_config, node_type, output_dir, is_build_opr = False): + NodeConfigGenerator.__init__(self, chain_config, node_type, output_dir, is_build_opr) + self.chain_config = chain_config + self.root_dir = output_dir + self.ini_tmp_config_file = "config.ini" + self.genesis_tmp_config_file = 'config.genesis' + + def generate_all_config(self, enforce_genesis_exists): + """ + generate all config for max-node + """ + for group_config in self.chain_config.group_list.values(): + utilities.print_badge( + "generate genesis config for group %s" % group_config.group_id) + if self.generate_all_genesis_config(group_config, enforce_genesis_exists) is False: + return False + utilities.print_badge( + "generate genesis config for %s success" % group_config.group_id) + utilities.print_badge( + "generate ini config for BcosMaxNodeService of group %s" % group_config.group_id) + if self.__generate_max_node_ini_config(group_config) is False: + return False + utilities.print_badge( + "generate ini config for BcosMaxNodeService of group %s success" % group_config.group_id) + utilities.print_badge( + "generate ini config for BcosExecutorService of group %s" % group_config.group_id) + if self.__generate_all_executor_config(group_config) is False: + return False + utilities.print_badge( + "generate ini config for BcosExecutorService of group %s success" % group_config.group_id) + return True + + def __generate_max_node_ini_config(self, group_config): + """ + generate all ini config file + """ + for node_config in group_config.node_list: + if self.__generate_and_store_max_node_ini_config(node_config, group_config) is False: + return False + return True + + def __generate_and_store_max_node_ini_config(self, node_config, group_config): + """ + generate and store ini config for given node + """ + for ip in node_config.node_service.deploy_ip_list: + ini_config_content = self.generate_node_config( + group_config, node_config, node_config.node_service.service_name, self.node_type) + node_path = self.get_and_generate_ini_config_base_path(node_config, ip) + + if os.path.exists(node_path) is False: + utilities.mkdir(node_path) + + ini_config_path = os.path.join(node_path, self.ini_tmp_config_file) + utilities.print_badge("generate ini config for ip %s ,path: %s" % (ip, ini_config_path)) + ret = self.store_config(ini_config_content, "ini", ini_config_path, node_config.node_service.service_name, + False) + if ret is False: + utilities.log_error("generate ini config for ip %s failed", ip) + return False + utilities.print_badge("generate ini config for ip %s success" % ip) + return True + + def generate_all_executor_config(self): + """ + generate all config for max-node + """ + for group_config in self.chain_config.group_list.values(): + if self.__generate_all_executor_config(group_config) is False: + return False + utilities.print_badge( + "generate ini config for BcosExecutorService of group %s success" % group_config.group_id) + return True + + def __generate_all_executor_config(self, group_config): + """ + generate the config for all executor service + """ + for max_node_config in group_config.node_list: + if self.__generate_executor_config(max_node_config, group_config) is False: + return False + return True + + def __generate_executor_config(self, max_node_config, group_config): + (ret, executor_genesis_content) = self.generate_genesis_config( + group_config, True) + if ret is False: + return False + executor_config_content = self.generate_executor_config( + group_config, max_node_config, max_node_config.executor_service.service_name) + executor_dir = self.__get_and_generate_executor_base_path( + max_node_config) + executor_config_path = os.path.join( + executor_dir, self.ini_tmp_config_file) + executor_genesis_path = os.path.join( + executor_dir, self.genesis_tmp_config_file) + + ini_store = self.store_config(executor_config_content, "executor ini", + executor_config_path, max_node_config.executor_service.service_name, True) + genesis_store = self.store_config(executor_genesis_content, "executor genesis", + executor_genesis_path, max_node_config.executor_service.service_name, True) + return ini_store and genesis_store + + def __get_and_generate_executor_base_path(self, node_config): + path = os.path.join(self.root_dir, node_config.agency_config.chain_id, + node_config.group_id, node_config.executor_service.service_name) + if os.path.exists(path) is False: + utilities.mkdir(path) + return path + + def generate_all_max_node_tars_install_package(self): + """ + generate all install package for max node + """ + if self.generate_all_config(False) is False: + return False + utilities.print_badge("generate max node install package begin") + for group_config in self.chain_config.group_list.values(): + for node_config in group_config.node_list: + for deploy_ip in node_config.node_service.deploy_ip_list: + node_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, 'max_node') + utilities.log_info("* generate max node install package for deploy_ip: %s, dir: %s" % ( + deploy_ip, node_dir)) + self.generate_node_tars_install_package(group_config, node_config, deploy_ip, 'max_node') + base_dir = self.get_and_generate_ini_config_base_path(node_config, deploy_ip) + config_path = os.path.join(base_dir, self.ini_tmp_config_file) + genesis_config_path = os.path.join(base_dir, '../', self.genesis_tmp_config_file) + nodeid_path = os.path.join(base_dir, '../', 'node.nodeid') + node_pem_path = os.path.join(base_dir, '../', 'node.pem') + utilities.mkdir(os.path.join(node_dir, 'conf')) + + shutil.copy(config_path, os.path.join(node_dir, 'conf')) + shutil.copy(genesis_config_path, os.path.join(node_dir, 'conf')) + shutil.copy(nodeid_path, os.path.join(node_dir, 'conf')) + shutil.copy(node_pem_path, os.path.join(node_dir, 'conf')) + utilities.print_badge("generate max node install package success") + + def generate_all_executor_tars_install_package(self): + """ + generate all install package for executor + """ + if self.generate_all_executor_config() is False: + return False + + utilities.print_badge("generate executor install package begin") + for group_config in self.chain_config.group_list.values(): + for node_config in group_config.node_list: + for deploy_ip in node_config.executor_service.deploy_ip_list: + executor_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, 'executor') + utilities.log_info(" * generate executor install package for deploy_ip: %s, dir: %s" % ( + deploy_ip, executor_dir)) + self.__generate_executor_tars_install_package(group_config, node_config, deploy_ip) + base_dir = self.__get_and_generate_executor_base_path(node_config) + config_path = os.path.join(base_dir, self.ini_tmp_config_file) + genesis_config_path = os.path.join(base_dir, self.genesis_tmp_config_file) + + shutil.copy(config_path, os.path.join(executor_dir, 'conf')) + shutil.copy(genesis_config_path, os.path.join(executor_dir, 'conf')) + utilities.print_badge("generate executor install package success") + + def __generate_executor_tars_install_package(self, group_config, node_config, deploy_ip): + + pkg_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, 'executor') + # install package + generate_tars_package(pkg_dir, node_config.executor_service.base_service_name, node_config.executor_service.service_name, node_config.agency_config.name, self.config.chain_id, "executor", + self.config.tars_config.tars_pkg_dir) + + # executor tars listen port + config_items = { + "@TARS_LISTEN_IP@": deploy_ip, + "@EXECUTOR_LISTEN_PORT@": str(node_config.tars_listen_port + 5) + } + # init config env variables + initialize_tars_config_env_variables(config_items, os.path.join(pkg_dir, 'conf', 'tars.conf')) + + # executor tars listen port + service_ports_items = { + "executor": deploy_ip + ":" + str(node_config.tars_listen_port + 5) + } + # generate tars proxy config + generate_tars_proxy_config(self.output_dir, node_config.agency_config.name, node_config.agency_config.chain_id, + service_ports_items) + + def copy_executor_tars_proxy_conf(self): + self.__copy_executor_tars_proxy_conf() + + def __copy_executor_tars_proxy_conf(self): + for group_config in self.chain_config.group_list.values(): + for node_config in group_config.node_list: + for deploy_ip in node_config.executor_service.deploy_ip_list: + executor_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, 'executor') + tars_proxy_conf = os.path.join(self.output_dir, node_config.agency_config.chain_id, + node_config.agency_config.name + "_tars_proxy.ini") + shutil.copy(tars_proxy_conf, os.path.join(executor_dir, 'conf', 'tars_proxy.ini')) + utilities.log_info("* copy executor tars_proxy.ini: " + tars_proxy_conf + " ,dir: " + executor_dir) + + def copy_max_node_tars_proxy_conf(self): + self.__copy_max_node_tars_proxy_conf() + + def __copy_max_node_tars_proxy_conf(self): + for group_config in self.chain_config.group_list.values(): + for node_config in group_config.node_list: + for deploy_ip in node_config.node_service.deploy_ip_list: + node_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, "max_node") + tars_proxy_conf = os.path.join(self.output_dir, node_config.agency_config.chain_id, + node_config.agency_config.name + "_tars_proxy.ini") + shutil.copy(tars_proxy_conf, os.path.join(node_dir, 'conf', 'tars_proxy.ini')) + utilities.log_info("* copy max node tars_proxy.ini: " + tars_proxy_conf + " ,dir: " + node_dir) diff --git a/tools/BcosBuilder/src/config/monitor_config_generator.py b/tools/BcosBuilder/src/config/monitor_config_generator.py new file mode 100644 index 0000000..ca0244a --- /dev/null +++ b/tools/BcosBuilder/src/config/monitor_config_generator.py @@ -0,0 +1,230 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from common import utilities +from common.utilities import ConfigInfo +import os +import shutil + + +class MonitorConfigGenerator: + """ + the common Monitor config generator + """ + + def __init__(self, config, node_type, output_dir): + self.config = config + self.node_type = node_type + self.root_dir = output_dir + self.monitor_start_scirpts_file = "start_monitor.sh" + self.monitor_stop_scirpts_file = "stop_monitor.sh" + self.monitor_tpl_config = ConfigInfo.monitor_config_tpl_path + self.prometheus_tpl_config = ConfigInfo.prometheus_config_tpl_path + self.mtail_tmp_config_file = "node.mtail" + self.mtail_tmp_path = "mtail/" + self.mtail_start_scirpts_file = "start_mtail_monitor.sh" + self.mtail_stop_scirpts_file = "stop_mtail_monitor.sh" + self.mtail_binary_file = os.path.join( + ConfigInfo.tpl_binary_path, "mtail") + self.mtail_src_tpl_config = os.path.join( + ConfigInfo.tpl_src_mtail_path, self.mtail_tmp_path) + + def generate_all_mtail_config(self, group_config): + """ + generate all mtail config file + """ + for node_config in group_config.node_list: + if self.__generate_and_store_mtail_config(node_config, group_config) is False: + return False + + return True + + def generate_mtail_config(self): + """ + generate mtail config for all-node + """ + for group_config in self.config.group_list.values(): + utilities.print_badge( + "generate mtail config for group %s" % group_config.group_id) + if self.generate_all_mtail_config(group_config) is False: + return False + utilities.print_badge( + "generate mtail config for group %s success" % group_config.group_id) + return True + + def __check_monitor_config(self, node_config): + if node_config.monitor_listen_port is None: + raise Exception( + "the monitor_listen_port for node %s must be set" % node_config.node_service_name) + if node_config.monitor_log_path is None: + raise Exception( + "the monitor_log_path for node %s must be set" % node_config.node_service_name) + + def start_monitor_config(self): + for group_config in self.config.group_list.values(): + for node_config in group_config.node_list: + self.__check_monitor_config(node_config) + node_path = self.__get_and_generate_node_log_base_path( + node_config) + mtail_start_scripts_path = os.path.join( + node_path, self.mtail_tmp_path, self.mtail_start_scirpts_file) + if self.node_type == "pro": + if utilities.execute_ansible_with_command(mtail_start_scripts_path, node_config.deploy_ip, node_config.monitor_listen_port) is False: + return False + else: + for ip in node_config.deploy_ip: + if utilities.execute_ansible_with_command(mtail_start_scripts_path, ip, node_config.monitor_listen_port) is False: + return False + monitor_start_scripts_path = os.path.join( + self.monitor_tpl_config, self.monitor_start_scirpts_file) + return utilities.execute_monitor_with_command(monitor_start_scripts_path) + + def stop_monitor_config(self): + for group_config in self.config.group_list.values(): + for node_config in group_config.node_list: + node_path = self.__get_and_generate_node_log_base_path( + node_config) + mtail_start_scripts_path = os.path.join( + node_path, self.mtail_tmp_path, self.mtail_stop_scirpts_file) + if self.node_type == "pro": + if utilities.execute_ansible_with_command(mtail_start_scripts_path, node_config.deploy_ip, node_config.monitor_listen_port) is False: + return False + else: + for ip in node_config.deploy_ip: + if utilities.execute_ansible_with_command(mtail_start_scripts_path, ip, node_config.monitor_listen_port) is False: + return False + monitor_stop_scripts_path = os.path.join( + self.monitor_tpl_config, self.monitor_stop_scirpts_file) + return utilities.execute_monitor_with_command(monitor_stop_scripts_path) + + def generate_monitor_config(self): + """ + generate graphna&prometheus config for all-node + """ + utilities.print_badge(" generate graphna&prometheus config ") + targets = "" + for group_config in self.config.group_list.values(): + for node_config in group_config.node_list: + self.__check_monitor_config(node_config) + if self.node_type == "pro": + if targets == "": + targets = '"' + node_config.deploy_ip + ':' + \ + node_config.monitor_listen_port + '"' + else: + targets += ',"' + node_config.deploy_ip + \ + ':' + node_config.monitor_listen_port + '"' + else: + for ip in node_config.deploy_ip: + if targets == "": + targets = '"' + ip + ':' + node_config.monitor_listen_port + '"' + else: + targets += ',"' + ip + ':' + node_config.monitor_listen_port + '"' + if self.__generate_and_store_monitor_config(targets) is False: + return False + utilities.print_badge( + "generate graphna&prometheus config success") + return True + + def __generate_mtail_config(self, mtail_config_path, node_config): + """ + generate node config: config.ini.tmp + """ + mtail_config = "" + with open(mtail_config_path, 'r', encoding='utf-8') as f: + # mtail_config = f.read() + for line in f.readlines(): + if(line.find('group') == 0): + line = 'group="%s' % (node_config.group_id,) + '"\n' + if(line.find('node') == 0): + line = 'node="%s' % (node_config.node_name,) + '"\n' + if(line.find('chain') == 0): + line = 'chain="%s' % (node_config.chain_id,) + '"\n' + if(line.find('host') == 0): + line = 'host="%s' % (node_config.deploy_ip,) + '"\n' + mtail_config += line + return mtail_config + + def store_mtail_config(self, config_content, config_type, config_path, desc): + """ + store the generated genesis config content for given node + """ + utilities.log_info("* store %s config for %s\n\t path: %s" % + (config_type, desc, config_path)) + with open(config_path, 'w') as configFile: + configFile.write(config_content) + utilities.log_info("* store %s config for %s success" % + (config_type, desc)) + return True + + def __get_and_generate_node_log_base_path(self, node_config): + path = os.path.join(node_config.monitor_log_path, node_config.agency_config.chain_id, + node_config.node_service.service_name) + return path + + def __generate_and_store_mtail_config(self, node_config, group_config): + """ + generate and store mtatil config for given node + """ + node_log_path = self.__get_and_generate_node_log_base_path(node_config) + mtail_target_tpl_config = os.path.join( + node_log_path, self.mtail_tmp_path) + shutil.copytree(self.mtail_src_tpl_config, mtail_target_tpl_config) + shutil.copy(self.mtail_binary_file, mtail_target_tpl_config) + mtail_config_path = os.path.join( + node_log_path, self.mtail_tmp_path, self.mtail_tmp_config_file) + config_content = self.__generate_mtail_config( + mtail_config_path, node_config) + if self.store_mtail_config(config_content, "mtail", mtail_config_path, node_config.node_service.service_name) is False: + return False + + mtail_start_scripts_path = os.path.join( + node_log_path, self.mtail_tmp_path, self.mtail_start_scirpts_file) + mtail_ansible_src_tpl_config = os.path.join(node_log_path, "mtail") + mtail_ansible_dest_tpl_config = os.path.join(node_log_path) + if self.node_type == "pro": + if utilities.execute_ansible_copy_with_command(node_config.deploy_ip, mtail_ansible_src_tpl_config, mtail_ansible_dest_tpl_config) is False: + return False + return utilities.execute_ansible_with_command(mtail_start_scripts_path, node_config.deploy_ip, node_config.monitor_listen_port) + else: + for ip in node_config.deploy_ip: + if utilities.execute_ansible_copy_with_command(ip, mtail_ansible_src_tpl_config, mtail_ansible_dest_tpl_config) is False: + return False + if utilities.execute_ansible_with_command(mtail_start_scripts_path, ip, node_config.monitor_listen_port) is False: + return False + return True + + def __generate_monitor_config(self, targets): + """ + generate node config: config.ini.tmp + """ + monitor_config = "" + with open(self.prometheus_tpl_config, 'r', encoding='utf-8') as f: + for line in f.readlines(): + if(line.find(' - targets: [') == 0): + line = line.replace( + ' - targets: [', ' - targets: [' + targets) + monitor_config += line + return monitor_config + + def store_monitor_config(self, config_content, config_type, config_path): + """ + store the generated genesis config content for given node + """ + utilities.log_info("* store %s config \n\t path: %s" % + (config_type, config_path)) + with open(config_path, "w", encoding="utf-8") as f2: + f2.write(config_content) + utilities.log_info("* store %s config success" % + (config_type)) + return True + + def __generate_and_store_monitor_config(self, targets): + """ + generate and store graphna&prometheus config for monitor + """ + monitor_config_content = self.__generate_monitor_config(targets) + if self.store_monitor_config(monitor_config_content, "monitor", self.prometheus_tpl_config) is False: + return False + + monitor_start_scripts_path = os.path.join( + self.monitor_tpl_config, self.monitor_start_scirpts_file) + return utilities.execute_monitor_with_command(monitor_start_scripts_path) diff --git a/tools/BcosBuilder/src/config/node_config_generator.py b/tools/BcosBuilder/src/config/node_config_generator.py new file mode 100644 index 0000000..aaa1ca5 --- /dev/null +++ b/tools/BcosBuilder/src/config/node_config_generator.py @@ -0,0 +1,467 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import configparser +import platform +import shutil +from common import utilities +from common.utilities import ConfigInfo +from service.key_center_service import KeyCenterService +import uuid +import os +import sys + +from common.utilities import execute_command_and_getoutput +from common.utilities import mkdir +from config.tars_install_package_generator import get_tars_proxy_config_section_index +from config.tars_install_package_generator import generate_tars_package +from config.tars_install_package_generator import generate_tars_proxy_config +from config.tars_install_package_generator import initialize_tars_config_env_variables + + + +class NodeConfigGenerator: + """ + the common node config generator + """ + + def __init__(self, config, node_type, output_dir, is_build_opr=False): + self.config = config + self.genesis_tpl_config = ConfigInfo.genesis_config_tpl_path + self.node_tpl_config = ConfigInfo.node_config_tpl_path + self.executor_tpl_config = ConfigInfo.executor_config_tpl_path + self.node_pem_file = "node.pem" + self.node_id_file = "node.nodeid" + self.output_dir = output_dir + self.root_dir = output_dir + self.genesis_tmp_config_file = 'config.genesis' + self.ini_tmp_config_file = "config.ini" + self.node_type = node_type + self.is_build_opr = is_build_opr + + def generate_genesis_config_nodeid(self, nodeid_list, group_config): + """ + generate the genesis config + """ + utilities.log_info("* generate genesis config nodeid") + config_content = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + config_content.read(self.genesis_tpl_config) + chain_section = "chain" + config_content[chain_section]["sm_crypto"] = utilities.convert_bool_to_str( + group_config.genesis_config.sm_crypto) + config_content[chain_section]["group_id"] = str( + group_config.genesis_config.group_id) + config_content[chain_section]["chain_id"] = str( + group_config.genesis_config.chain_id) + consensus_section = "consensus" + config_content[consensus_section]["consensus_type"] = group_config.genesis_config.consensus_type + config_content[consensus_section]["block_tx_count_limit"] = str( + group_config.genesis_config.block_tx_count_limit) + config_content[consensus_section]["leader_period"] = str( + group_config.genesis_config.leader_period) + i = 0 + for nodeid in nodeid_list: + key = "node." + str(i) + value = nodeid.strip() + ":1" + config_content[consensus_section][key] = value + i = i + 1 + tx_section = "tx" + config_content[tx_section]["gas_limit"] = str( + group_config.genesis_config.gas_limit) + version_section = "version" + config_content[version_section]["compatibility_version"] = str( + group_config.genesis_config.compatibility_version) + + executor_section = "executor" + config_content[executor_section]["is_wasm"] = utilities.convert_bool_to_str( + group_config.genesis_config.vm_type != "evm") + config_content[executor_section]["is_auth_check"] = utilities.convert_bool_to_str( + group_config.genesis_config.auth_check) + config_content[executor_section]["auth_admin_account"] = group_config.genesis_config.init_auth_address + + utilities.log_info("* chain_id: %s" % + config_content[chain_section]["group_id"]) + utilities.log_info("* group_id: %s" % + config_content[chain_section]["chain_id"]) + utilities.log_info("* consensus_type: %s" % + config_content[consensus_section]["consensus_type"]) + utilities.log_info("* block_tx_count_limit: %s" % + config_content[consensus_section]["block_tx_count_limit"]) + utilities.log_info("* leader_period: %s" % + config_content[consensus_section]["leader_period"]) + utilities.log_info("* gas_limit: %s" % + config_content[tx_section]["gas_limit"]) + utilities.log_info("* compatibility_version: %s" % + config_content[version_section]["compatibility_version"]) + utilities.log_info("* generate_genesis_config_nodeid success") + return config_content + + def generate_executor_config(self, group_config, node_config, node_name): + """ + generate the config.ini for executorService + """ + executor_ini_config = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + executor_ini_config.read(self.executor_tpl_config) + # chain config + self.__update_chain_info(executor_ini_config, node_config) + # service config + service_section = "service" + executor_ini_config[service_section]['without_tars_framework'] = "true" if self.is_build_opr else "false" + executor_ini_config[service_section]['tars_proxy_conf'] = 'conf/tars_proxy.ini' + executor_ini_config[service_section]["node_name"] = node_name + executor_ini_config[service_section]["scheduler"] = self.config.chain_id + \ + "." + node_config.scheduler_service_name + executor_ini_config[service_section]["txpool"] = self.config.chain_id + \ + "." + node_config.txpool_service_name + # executor config + self.__update_storage_info( + executor_ini_config, node_config, self.node_type) + return executor_ini_config + + def generate_node_config(self, group_config, node_config, node_name, node_type): + """ + generate node config: config.ini.tmp + """ + ini_config = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + ini_config.read(self.node_tpl_config) + # self.__update_chain_info(ini_config, node_config) + self.__update_service_info(ini_config, node_config, node_name) + self.__update_failover_info(ini_config, node_config, node_type) + # set storage config + self.__update_storage_info(ini_config, node_config, node_type) + # set storage_security config + # access key_center to encrypt the certificates and the private keys + self.__update_storage_security_info(ini_config, node_config, node_type) + return ini_config + + def __update_chain_info(self, ini_config, node_config): + """ + update chain info + """ + chain_section = "chain" + ini_config[chain_section]["sm_crypto"] = utilities.convert_bool_to_str( + node_config.sm_crypto) + ini_config[chain_section]["group_id"] = node_config.group_id + ini_config[chain_section]["chain_id"] = node_config.chain_id + + def __update_service_info(self, ini_config, node_config, node_name): + """ + update service info + """ + service_section = "service" + ini_config[service_section]["node_name"] = node_name + ini_config["service"]['without_tars_framework'] = "true" if self.is_build_opr else "false" + ini_config["service"]['tars_proxy_conf'] = 'conf/tars_proxy.ini' + ini_config[service_section]["rpc"] = self.config.chain_id + \ + "." + node_config.agency_config.rpc_service_name + ini_config[service_section]["gateway"] = self.config.chain_id + \ + "." + node_config.agency_config.gateway_service_name + if hasattr(node_config, 'executor_service'): + ini_config[service_section]["executor"] = self.config.chain_id + \ + "." + node_config.executor_service.service_name + + def __update_failover_info(self, ini_config, node_config, node_type): + # generate the member_id for failover + failover_section = "failover" + ini_config[failover_section]["member_id"] = str(uuid.uuid1()) + if node_type == "max": + ini_config[failover_section]["enable"] = utilities.convert_bool_to_str( + True) + ini_config[failover_section]["cluster_url"] = node_config.agency_config.failover_cluster_url + else: + ini_config[failover_section]["enable"] = utilities.convert_bool_to_str( + False) + + def __update_storage_info(self, ini_config, node_config, node_type): + if node_type != "max": + return + storage_section = "storage" + if ini_config.has_option(storage_section, "data_path"): + ini_config.remove_option(storage_section, "data_path") + ini_config[storage_section]["type"] = "tikv" + ini_config[storage_section]["pd_addrs"] = node_config.pd_addrs + ini_config[storage_section]["key_page_size"] = str( + node_config.key_page_size) + + def __update_storage_security_info(self, ini_config, node_config, node_type): + """ + update the storage_security for config.ini + """ + section = "storage_security" + # not support storage_security for max-node + if node_type == "max": + if ini_config.has_section(section): + ini_config.remove_section(section) + return + ini_config[section]["enable"] = utilities.convert_bool_to_str( + node_config.enable_storage_security) + ini_config[section]["key_center_url"] = node_config.key_center_url + ini_config[section]["cipher_data_key"] = node_config.cipher_data_key + + def __generate_pem_file(self, outputdir, node_config): + """ + generate private key to the given path + """ + pem_path = os.path.join(outputdir, self.node_pem_file) + node_id_path = os.path.join(outputdir, self.node_id_file) + + # if the file is not exist, generate it + if os.path.exists(pem_path) is False or os.path.exists(node_id_path) is False: + utilities.generate_private_key( + node_config.sm_crypto, outputdir) + # encrypt the node.pem with key_center + if node_config.enable_storage_security is True: + key_center = KeyCenterService( + node_config.key_center_url, node_config.cipher_data_key) + ret = key_center.encrypt_file(pem_path) + if ret is False: + return (False, "", pem_path, node_id_path) + node_id = "" + with open(node_id_path, 'r', encoding='utf-8') as f: + node_id = f.read() + return (True, node_id, pem_path, node_id_path) + + def get_config_file_path_list(self, node_service_config, node_config): + """ + get config file path for given config files + """ + path = os.path.join(self.root_dir, node_config.agency_config.chain_id, + node_config.group_id, node_service_config.service_name) + config_file_path_list = [] + for config in node_service_config.config_file_list: + config_file_path_list.append(os.path.join(path, config)) + return config_file_path_list + + def get_ini_config_file_path(self, node_service_config, node_config, deploy_ip): + """ + get config file path for given config files + """ + return os.path.join(self.root_dir, node_config.agency_config.chain_id, + node_config.group_id, node_service_config.service_name, deploy_ip, + node_service_config.ini_config_file) + + def __get_and_generate_node_base_path(self, node_config): + path = os.path.join(self.root_dir, node_config.agency_config.chain_id, + node_config.group_id, node_config.node_service.service_name) + if os.path.exists(path) is False: + utilities.mkdir(path) + return path + + def generate_node_pem(self, node_config): + """ + generate private key for the node + """ + path = self.__get_and_generate_node_base_path(node_config) + return self.__generate_pem_file(path, node_config) + + def generate_all_ini_config(self, group_config): + """ + generate all ini config file + """ + for node_config in group_config.node_list: + if self.__generate_and_store_ini_config(node_config, group_config) is False: + return False + return True + + def _generate_all_node_pem(self, group_config): + """ + generate all node.pem and return the nodeID + """ + nodeid_list = [] + for node_config in group_config.node_list: + (ret, node_id, node_pem_path, node_id_path) = self.generate_node_pem( + node_config) + if ret is False: + return (False, nodeid_list) + utilities.log_info( + "* generate pem file for %s\n\t- pem_path: %s\n\t- node_id_path: %s\n\t- node_id: %s\n\t- sm_crypto: %d" % ( + node_config.node_service.service_name, node_pem_path, node_id_path, node_id, + group_config.sm_crypto)) + nodeid_list.append(node_id) + return (True, nodeid_list) + + def __genesis_config_generated(self, group_config): + if os.path.exists(group_config.genesis_config_path): + utilities.log_info( + "* the genesis config file has been set, path: %s" % group_config.genesis_config_path) + return True + return False + + def generate_genesis_config(self, group_config, must_genesis_exists): + if self.__genesis_config_generated(group_config): + config_content = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + config_content.read(group_config.genesis_config_path) + # (ret, nodeid_list) = self._generate_all_node_pem(group_config, is_build_opr) + return (True, config_content) + if must_genesis_exists is True: + utilities.log_error("Please set the genesis config path firstly!") + sys.exit(-1) + (ret, nodeid_list) = self._generate_all_node_pem(group_config) + if ret is False: + return (False, None) + config_content = self.generate_genesis_config_nodeid( + nodeid_list, group_config) + return (True, config_content) + + def generate_all_config(self, enforce_genesis_exists): + """ + generate all config for max-node + """ + for group_config in self.config.group_list.values(): + utilities.print_badge( + "generate genesis config for group %s" % group_config.group_id) + if self.generate_all_genesis_config(group_config, enforce_genesis_exists) is False: + return False + utilities.print_badge( + "generate genesis config for %s success" % group_config.group_id) + utilities.print_badge( + "generate ini config for group %s" % group_config.group_id) + if self.generate_all_ini_config(group_config) is False: + return False + utilities.print_badge( + "generate ini config for group %s success" % group_config.group_id) + return True + + def generate_all_genesis_config(self, group_config, enforce_genesis_exists): + """ + generate the genesis config for all max_nodes + """ + (ret, genesis_config_content) = self.generate_genesis_config( + group_config, enforce_genesis_exists) + if ret is False: + return False + if os.path.exists(group_config.genesis_config_path) is False: + desc = group_config.chain_id + "." + group_config.group_id + self.store_config(genesis_config_content, "genesis", + group_config.genesis_config_path, desc, False) + for node_config in group_config.node_list: + node_path = self.__get_and_generate_node_base_path(node_config) + genesis_config_path = os.path.join( + node_path, self.genesis_tmp_config_file) + if self.store_config(genesis_config_content, "genesis", genesis_config_path, + node_config.node_service.service_name, False) is False: + return False + return True + + def store_config(self, config_content, config_type, config_path, desc, ignore_if_exists): + """ + store the generated genesis config content for given node + """ + if os.path.exists(config_path) and ignore_if_exists is False: + utilities.log_error("* store %s config for %s failed for the config %s already exists." % + (config_type, desc, config_path)) + return False + utilities.log_info("* store %s config for %s\n\t path: %s" % + (config_type, desc, config_path)) + + if os.path.exists(os.path.dirname(config_path)) is False: + utilities.mkdir(os.path.dirname(config_path)) + + with open(config_path, 'w') as configFile: + config_content.write(configFile) + utilities.log_info("* store %s config for %s success" % + (config_type, desc)) + return True + + def get_and_generate_ini_config_base_path(self, node_config, deploy_ip): + path = os.path.join(self.root_dir, node_config.agency_config.chain_id, + node_config.group_id, node_config.node_service.service_name, deploy_ip) + if os.path.exists(path) is False: + utilities.mkdir(path) + return path + + def get_and_generate_install_package_path(self, group_config, node_config, deploy_ip, name): + path = os.path.join(self.root_dir, deploy_ip, + group_config.group_id + "_" + name + "_" + str(node_config.tars_listen_port)) + if os.path.exists(path) is False: + utilities.mkdir(path) + return path + + def generate_all_tars_install_package(self): + """ + generate all install package for node + """ + if not self.generate_all_config(False): + return False + for group_config in self.config.group_list.values(): + for node_config in group_config.node_list: + deploy_ip = node_config.deploy_ip + node_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, 'node') + utilities.log_info(" * generate node install package for deploy_ip: %s:%s:%s" % ( + deploy_ip, node_dir, node_config.node_service_name)) + self.generate_node_tars_install_package(group_config, node_config, deploy_ip, 'node') + base_dir = self.get_and_generate_ini_config_base_path(node_config, '') + config_path = os.path.join(base_dir, self.ini_tmp_config_file) + genesis_config_path = os.path.join(base_dir, self.genesis_tmp_config_file) + nodeid_path = os.path.join(base_dir, 'node.nodeid') + node_pem_path = os.path.join(base_dir, 'node.pem') + utilities.mkdir(os.path.join(node_dir, 'conf')) + + shutil.copy(config_path, os.path.join(node_dir, 'conf')) + shutil.copy(genesis_config_path, os.path.join(node_dir, 'conf')) + shutil.copy(nodeid_path, os.path.join(node_dir, 'conf')) + shutil.copy(node_pem_path, os.path.join(node_dir, 'conf')) + + def copy_tars_proxy_conf(self): + self.__copy_service_tars_proxy_conf() + + def __copy_service_tars_proxy_conf(self): + for group_config in self.config.group_list.values(): + for node_config in group_config.node_list: + agency_name = node_config.agency_config.name + tars_proxy_conf = os.path.join(self.output_dir, node_config.agency_config.chain_id, + agency_name + "_tars_proxy.ini") + executor_dir = self.get_and_generate_install_package_path(group_config, node_config, node_config.deploy_ip, + 'node') + shutil.copy(tars_proxy_conf, os.path.join(executor_dir, 'conf', 'tars_proxy.ini')) + utilities.log_info("* copy node tars_proxy.ini: " + tars_proxy_conf + " ,dir: " + executor_dir) + + def __generate_and_store_ini_config(self, node_config, group_config): + """ + generate and store ini config for given node + """ + ini_config_content = self.generate_node_config( + group_config, node_config, node_config.node_service.service_name, self.node_type) + node_path = self.__get_and_generate_node_base_path(node_config) + + if os.path.exists(node_path) is False: + utilities.mkdir(node_path) + + ini_config_path = os.path.join(node_path, self.ini_tmp_config_file) + return self.store_config(ini_config_content, "ini", ini_config_path, node_config.node_service.service_name, + False) + + def generate_node_tars_install_package(self, group_config, node_config, deploy_ip, name): + + base_dir = self.get_and_generate_install_package_path(group_config, node_config, deploy_ip, name) + utilities.log_info("=> base_dir: %s" % base_dir) + + utilities.log_info("* generate tars node install package service: %s, chain id: %s, tars pkg dir: %s" % ( + node_config.node_service.service_name, self.config.chain_id, self.config.tars_config.tars_pkg_dir)) + + # install package + generate_tars_package(base_dir, node_config.node_service_base_name, node_config.node_service_name, node_config.agency_config.name, self.config.chain_id, "node", + self.config.tars_config.tars_pkg_dir) + + config_items = {"@TARS_LISTEN_IP@": deploy_ip, + "@TXPOOL_LISTEN_PORT@": str(node_config.tars_listen_port + 0), + "@SCHEDULER_LISTEN_PORT@": str(node_config.tars_listen_port + 1), + "@PBFT_LISTEN_PORT@": str(node_config.tars_listen_port + 2), + "@LEDGER_LISTEN_PORT@": str(node_config.tars_listen_port + 3), + "@FRONT_LISTEN_PORT@": str(node_config.tars_listen_port + 4), + } + # init config env variables + initialize_tars_config_env_variables(config_items, os.path.join(base_dir, 'conf', 'tars.conf')) + + service_ports_items = {"txpool": deploy_ip + ":" + str(node_config.tars_listen_port), + "scheduler": deploy_ip + ":" + str(node_config.tars_listen_port + 1), + "pbft": deploy_ip + ":" + str(node_config.tars_listen_port + 2), + "ledger": deploy_ip + ":" + str(node_config.tars_listen_port + 3), + "front": deploy_ip + ":" + str(node_config.tars_listen_port + 4), + } + # generate tars proxy config + generate_tars_proxy_config(self.output_dir, node_config.agency_config.name, node_config.agency_config.chain_id, + service_ports_items) diff --git a/tools/BcosBuilder/src/config/service_config_generator.py b/tools/BcosBuilder/src/config/service_config_generator.py new file mode 100644 index 0000000..a048ed1 --- /dev/null +++ b/tools/BcosBuilder/src/config/service_config_generator.py @@ -0,0 +1,318 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import configparser +import platform +import shutil + +from common import utilities +from common.utilities import ServiceInfo +from common.utilities import ConfigInfo +from service.key_center_service import KeyCenterService +import json +import os +import uuid + +from config.tars_install_package_generator import generate_tars_package +from config.tars_install_package_generator import generate_tars_proxy_config +from config.tars_install_package_generator import initialize_tars_config_env_variables + +class ServiceConfigGenerator: + def __init__(self, config, service_type, node_type, output_dir): + self.config = config + self.ini_file = "config.ini" + self.network_file = "nodes.json" + self.service_type = service_type + self.output_dir = output_dir + self.root_dir = output_dir + "/" + self.service_type + self.node_type = node_type + + def generate_all_tars_install_package(self): + if self.service_type == ServiceInfo.gateway_service_type: + return self.generate_gateway_config_files(True) + else: + return self.generate_rpc_config_files(True) + + def generate_all_config(self): + if self.service_type == ServiceInfo.gateway_service_type: + return self.generate_gateway_config_files(False) + else: + return self.generate_rpc_config_files(False) + + def generate_rpc_config_files(self, is_build_opr): + utilities.log_info("* generate config for the rpc service, build opr: %s" % str(is_build_opr)) + section = "rpc" + for rpc_service in self.config.rpc_service_list.keys(): + rpc_service_config = self.config.rpc_service_list[rpc_service] + if self.__generate_config_files(section, rpc_service_config, is_build_opr) is False: + return False + if is_build_opr: + self.__copy_tars_conf_file(rpc_service_config, "rpc") + utilities.log_info("* generate config for the rpc service success") + return True + + def generate_gateway_config_files(self, is_build_opr): + utilities.log_info("* generate config for the gateway service, build opr: %s" % str(is_build_opr)) + section = "p2p" + for gateway_service in self.config.gateway_service_list.keys(): + gateway_service_config = self.config.gateway_service_list[gateway_service] + if self.__generate_config_files(section, gateway_service_config, is_build_opr) is False: + return False + if self.__generate_gateway_connection_info_for_all_deploy_ip(gateway_service_config, is_build_opr) is False: + return False + if is_build_opr: + self.__copy_tars_conf_file(gateway_service_config, "gateway") + + utilities.log_info("* generate config for the gateway service success") + return True + + def copy_tars_proxy_conf(self): + if self.service_type == ServiceInfo.gateway_service_type: + return self.__copy_service_tars_proxy_conf(self.config.gateway_service_list) + else: + return self.__copy_service_tars_proxy_conf(self.config.rpc_service_list) + + def __copy_service_tars_proxy_conf(self, service_list): + for service_name in service_list.keys(): + service_config = service_list[service_name] + for deploy_ip in service_config.deploy_ip_list: + conf_dir = self.__get_service_config_base_path(service_config, deploy_ip, True) + agency_name = service_config.agency_config.name + tars_proxy_conf = os.path.join(self.output_dir, service_config.agency_config.chain_id, agency_name + "_tars_proxy.ini") + copy_cmd = "cp " + tars_proxy_conf + " " + conf_dir + "/tars_proxy.ini" + utilities.execute_command(copy_cmd) + utilities.log_info("* copy tars_proxy.ini: " + tars_proxy_conf + " ,dir: " + conf_dir) + + def __copy_tars_conf_file(self, service_config, service_type): + for deploy_ip in service_config.deploy_ip_list: + conf_dir = self.__get_service_config_base_path(service_config, deploy_ip, True) + base_dir = os.path.dirname(conf_dir) + # utilities.log_info("* ==> generate tars install package deploy ip: %s, service type: %s, chain id: %s, tars pkg dir: %s" % (deploy_ip, service_type, self.config.chain_id, self.config.tars_config.tars_pkg_dir)) + + # # copy ssl/ca.crt ssl/ssl.crt ssl/ssl.key + cert_dir = os.path.join(conf_dir, "ssl", "*") + cp_command = "cp " + cert_dir + " " + conf_dir + os.system(cp_command) + # remove ssl/ + shutil.rmtree(os.path.join(conf_dir, "ssl")) + + # install package + generate_tars_package(base_dir, service_config.binary_name, service_config.name, service_config.agency_config.name, self.config.chain_id, service_type, self.config.tars_config.tars_pkg_dir) + + config_items = {"@TARS_LISTEN_IP@": deploy_ip, + "@TARS_LISTEN_PORT@": str(service_config.tars_listen_port) + } + # init config env variables + initialize_tars_config_env_variables(config_items, conf_dir + '/tars.conf') + + service_ports_items = {service_type: deploy_ip + ":" + str(service_config.tars_listen_port)} + # generate tars proxy config + generate_tars_proxy_config(self.output_dir, service_config.agency_config.name, service_config.agency_config.chain_id, service_ports_items) + + def __get_cert_config_file_list(self, service_config, ip): + cert_config_file_list = [] + if service_config.sm_ssl is False: + cert_config_file_list = ["ca.crt", "ssl.crt", "ssl.key"] + else: + cert_config_file_list = [ + "sm_ca.crt", "sm_ssl.crt", "sm_ssl.key", "sm_enssl.crt", "sm_enssl.key"] + cert_config_path_list = [] + path = self.__get_service_config_base_path(service_config, ip) + for cert in cert_config_file_list: + cert_config_path_list.append(os.path.join(path, "ssl", cert)) + return (cert_config_file_list, cert_config_path_list) + + def __get_config_file_info(self, config_file_list, service_config, ip): + path = self.__get_service_config_base_path(service_config, ip) + (cert_file_list, cert_file_path_list) = self.__get_cert_config_file_list( + service_config, ip) + config_path_list = [] + for config_file in config_file_list: + config_path_list.append(os.path.join(path, config_file)) + return (config_file_list + cert_file_list, config_path_list + cert_file_path_list) + + def get_config_file_list(self, service_config, ip): + if service_config.service_type == utilities.ServiceInfo.rpc_service_type: + return self.__get_config_file_info(["config.ini"], service_config, ip) + else: + return self.__get_config_file_info(["config.ini", "nodes.json"], service_config, ip) + + def __generate_config_files(self, section, service_config, is_build_opr): + utilities.print_badge( + "* generate config for the %s service %s" % (section, service_config.name)) + utilities.log_info("* generate %s for the %s service %s" % + (self.ini_file, section, service_config.name)) + if self.__generate_and_store_ini_config(service_config, section, is_build_opr) is False: + return False + + utilities.log_info("* generate %s for the %s service %s success" % + (self.ini_file, section, service_config.name)) + utilities.log_info("* generate cert for the %s service %s" % + (section, service_config.name)) + if self.__generate_cert_for_all_deploy_ip(service_config, is_build_opr) is False: + return False + utilities.log_info( + "* generate cert for the %s service %s success" % (section, service_config.name)) + utilities.print_badge( + "* generate config for the %s service success%s" % (section, service_config.name)) + return True + + def __generate_and_store_ini_config(self, service_config, section, is_build_opr): + """ + generate and store ini config + """ + ini_config_content = self.__generate_ini_config( + service_config, section, is_build_opr) + if self.__store_all_config_file(service_config, ini_config_content, is_build_opr) is False: + return False + return True + + def __generate_ini_config(self, service_config, section, is_build_opr): + """ + generate config.ini.tmp + """ + ini_config = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + ini_config.read(service_config.tpl_config_file) + + ini_config[section]['listen_ip'] = service_config.listen_ip + ini_config[section]['listen_port'] = str(service_config.listen_port) + ini_config[section]['sm_ssl'] = utilities.convert_bool_to_str( + service_config.sm_ssl) + ini_config[section]['thread_count'] = str( + service_config.thread_count) + ini_config["service"]['gateway'] = service_config.agency_config.chain_id + \ + "." + service_config.agency_config.gateway_service_name + ini_config["service"]['rpc'] = service_config.agency_config.chain_id + \ + "." + service_config.agency_config.rpc_service_name + + ini_config["service"]['without_tars_framework'] = "true" if is_build_opr else "false" + ini_config["service"]['tars_proxy_conf'] = 'conf/tars_proxy.ini' + + ini_config["chain"]['chain_id'] = service_config.agency_config.chain_id + # generate failover config + failover_section = "failover" + if self.node_type == "max": + ini_config[failover_section]["enable"] = utilities.convert_bool_to_str( + True) + else: + ini_config[failover_section]["enable"] = utilities.convert_bool_to_str( + False) + ini_config[failover_section]["cluster_url"] = service_config.agency_config.failover_cluster_url + + # generate uuid according to chain_id and gateway_service_name + uuid_name = ini_config["service"]['gateway'] + ini_config[section]['uuid'] = str( + uuid.uuid3(uuid.NAMESPACE_URL, uuid_name)) + + self.__update_storage_security_info(ini_config, service_config) + + return ini_config + + def __update_storage_security_info(self, ini_config, service_config): + """ + update the storage_security for config.ini + """ + # TODO: access key_center to encrypt the certificates and the private keys + section = "storage_security" + ini_config[section]["enable"] = utilities.convert_bool_to_str( + service_config.agency_config.enable_storage_security) + ini_config["chain"]["sm_crypto"] = utilities.convert_bool_to_str( + service_config.sm_ssl) + ini_config[section]["key_center_url"] = service_config.agency_config.key_center_url + ini_config[section]["cipher_data_key"] = service_config.agency_config.cipher_data_key + + def __store_config_file(self, path, ini_config_content): + ini_path = os.path.join(path, self.ini_file) + if os.path.exists(ini_path) is True: + utilities.log_error( + "config file %s already exists, please delete after confirming carefully" % ini_path) + return False + utilities.mkfiledir(ini_path) + with open(ini_path, 'w') as configfile: + ini_config_content.write(configfile) + utilities.log_info("* store %s" % ini_path) + return True + + def __store_all_config_file(self, service_config, ini_config_content, is_build_opr): + for ip in service_config.deploy_ip_list: + path = self.__get_service_config_base_path(service_config, ip, is_build_opr) + if self.__store_config_file(path, ini_config_content) is False: + return False + return True + + def __get_service_config_base_path(self, service_config, deploy_ip, is_build_opr = False): + if not is_build_opr: + config_path = os.path.join(self.root_dir, service_config.agency_config.chain_id, service_config.name, deploy_ip) + else: + config_path = os.path.join(self.output_dir, deploy_ip, service_config.service_type + '_' + str(service_config.listen_port), "conf") + return config_path + + def __generate_cert_for_all_deploy_ip(self, service_config, is_build_opr): + for ip in service_config.deploy_ip_list: + self.__generate_cert(service_config, ip, is_build_opr) + + def __generate_cert(self, service_config, deploy_ip, is_build_opr): + output_dir = self.__get_service_config_base_path( + service_config, deploy_ip, is_build_opr) + if self.__ca_generated(service_config) is False: + # generate the ca cert + utilities.generate_ca_cert( + service_config.sm_ssl, service_config.ca_cert_path) + utilities.log_info( + "* generate cert, ip: %s, output path: %s" % (deploy_ip, output_dir)) + utilities.generate_node_cert( + service_config.sm_ssl, service_config.ca_cert_path, output_dir) + if service_config.agency_config.enable_storage_security is True: + key_center = KeyCenterService( + service_config.agency_config.key_center_url, service_config.agency_config.cipher_data_key) + if service_config.sm_ssl is True: + ret = key_center.encrypt_file( + os.path.join(output_dir, "ssl", "sm_ssl.key")) + if ret is False: + return False + ret = key_center.encrypt_file( + os.path.join(output_dir, "ssl", "sm_enssl.key")) + if ret is False: + return False + else: + ret = key_center.encrypt_file( + os.path.join(output_dir, "ssl", "ssl.key")) + if ret is False: + return False + if service_config.service_type == ServiceInfo.rpc_service_type: + utilities.log_info( + "* generate sdk cert, output path: %s" % (output_dir)) + utilities.generate_sdk_cert( + service_config.sm_ssl, service_config.ca_cert_path, output_dir) + return True + + def __generate_gateway_connection_info_for_all_deploy_ip(self, service_config, is_build_opr): + for ip in service_config.deploy_ip_list: + if self.__generate_gateway_connection_info(service_config, ip, is_build_opr) is False: + return False + return True + + def __generate_gateway_connection_info(self, service_config, ip, is_build_opr): + path = self.__get_service_config_base_path(service_config, ip, is_build_opr) + network_file_path = os.path.join(path, self.network_file) + if os.path.exists(network_file_path): + utilities.log_error( + "config file %s already exists, please delete after confirming carefully" % network_file_path) + return False + peers = {} + peers["nodes"] = service_config.peers + utilities.mkfiledir(network_file_path) + with open(network_file_path, 'w') as configfile: + json.dump(peers, configfile) + utilities.log_info( + "* generate gateway connection file: %s" % network_file_path) + return True + + def __ca_generated(self, service_config): + if service_config.sm_ssl is False: + if os.path.exists(os.path.join(service_config.ca_cert_path, "ca.crt")) and os.path.exists(os.path.join(service_config.ca_cert_path, "ca.key")): + return True + else: + if os.path.exists(os.path.join(service_config.ca_cert_path, "sm_ca.crt")) and os.path.exists(os.path.join(service_config.ca_cert_path, "sm_ca.key")): + return True + return False diff --git a/tools/BcosBuilder/src/config/tars_config_generator.py b/tools/BcosBuilder/src/config/tars_config_generator.py new file mode 100644 index 0000000..604ec8d --- /dev/null +++ b/tools/BcosBuilder/src/config/tars_config_generator.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +import configparser +import os +import shutil + +from config.tars_install_package_generator import get_tars_proxy_config_section_index + + +class TarsConfigGenerator: + + def __init__(self, tars_conf): + self.tars_conf = tars_conf + self.tars_proxy_ini = configparser.ConfigParser( + comment_prefixes='/', allow_no_value=True) + if os.path.exists(tars_conf): + self.tars_proxy_ini.read(tars_conf) + + def append_config_item(self, service_name, endpoint): + index = get_tars_proxy_config_section_index(self.tars_proxy_ini, service_name) + self.tars_proxy_ini[service_name]["proxy." + str(index)] = endpoint + + def get_config_items(self, service_name): + if service_name in self.tars_proxy_ini: + return self.tars_proxy_ini[service_name] + return None + + def restore_init_config(self, tars_conf_path): + with open(tars_conf_path, 'w') as f: + self.tars_proxy_ini.write(f) diff --git a/tools/BcosBuilder/src/config/tars_install_package_generator.py b/tools/BcosBuilder/src/config/tars_install_package_generator.py new file mode 100644 index 0000000..0d82414 --- /dev/null +++ b/tools/BcosBuilder/src/config/tars_install_package_generator.py @@ -0,0 +1,138 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +import configparser +import os +import platform +import shutil + +from common import utilities +from common.utilities import ConfigInfo +from common.utilities import execute_command_and_getoutput + + +def get_tars_proxy_config_section_index(ini_config, section): + if not ini_config.has_section(section): + ini_config.add_section(section) + return 0 + + index = 0 + while True: + proxy_index_str = "proxy." + str(index) + if proxy_index_str in ini_config[section]: + index += 1 + continue + return index + + +def generate_tars_proxy_config(output_dir, agency_name, chain_id, + tars_service_port): + chain_tars_proxy_conf_dir = os.path.join(output_dir, chain_id) + + if os.path.exists(chain_tars_proxy_conf_dir) is False: + utilities.mkdir(chain_tars_proxy_conf_dir) + + agency_tars_conf_path = os.path.join(chain_tars_proxy_conf_dir, + agency_name + "_tars_proxy.ini") + + tars_proxy_config = configparser.ConfigParser(comment_prefixes='/', + allow_no_value=True) + + if os.path.exists(agency_tars_conf_path): + tars_proxy_config.read(agency_tars_conf_path) + + for key, value in tars_service_port.items(): + index = get_tars_proxy_config_section_index(tars_proxy_config, key) + # utilities.log_info("* generate tars proxy config, key: %s, index: %s" % (key, str(index))) + tars_proxy_config[key]["proxy." + str(index)] = value + + with open(agency_tars_conf_path, 'w') as f: + tars_proxy_config.write(f) + + return + + +def initialize_tars_config_env_variables(config_items, tars_conf_file): + sys_name = platform.system() + if sys_name.lower() == "darwin": + sed = "sed -i .bak " + else: + sed = "sed -i " + + for key, value in config_items.items(): + sed_command = sed + "s/" + key + "/" + value + "/g " + tars_conf_file + execute_command_and_getoutput(sed_command) + + # remove .bak files if exist + if os.path.exists(tars_conf_file + ".bak"): + os.remove(tars_conf_file + ".bak") + + +def generate_tars_package(pkg_dir, exec_name, service_name, agency_name, chain_id, + service_type, tars_pkg_dir): + conf_dir = os.path.join(pkg_dir, 'conf') + + utilities.log_info("* generate tars install package for %s:%s:%s:%s:%s:%s" % ( + exec_name, service_name, agency_name, chain_id, service_type, tars_pkg_dir)) + + if not os.path.exists(conf_dir): + utilities.mkdir(conf_dir) + + # copy start.sh stop.sh tars.conf + tars_start_file = os.path.join(ConfigInfo.tpl_abs_path, "tars_start.sh") + tars_stop_file = os.path.join(ConfigInfo.tpl_abs_path, "tars_stop.sh") + tars_conf_file = os.path.join(ConfigInfo.tpl_abs_path, + "tars_" + service_type + ".conf") + + tars_start_all_file = os.path.join(ConfigInfo.tpl_abs_path, + "tars_start_all.sh") + tars_stop__all_file = os.path.join(ConfigInfo.tpl_abs_path, + "tars_stop_all.sh") + + start_all_file = os.path.join(pkg_dir, "../", "start_all.sh") + stop_all_file = os.path.join(pkg_dir, "../", "stop_all.sh") + + start_file = os.path.join(pkg_dir, "start.sh") + stop_file = os.path.join(pkg_dir, "stop.sh") + conf_file = os.path.join(conf_dir, "tars.conf") + + shutil.copy(tars_start_file, start_file) + shutil.copy(tars_stop_file, stop_file) + shutil.copy(tars_conf_file, conf_file) + + if not os.path.exists(start_all_file): + shutil.copy(tars_start_all_file, start_all_file) + + if not os.path.exists(stop_all_file): + shutil.copy(tars_stop__all_file, stop_all_file) + + # copy service binary exec + shutil.copy(os.path.join(tars_pkg_dir, exec_name, exec_name), + pkg_dir) + + sys_name = platform.system() + if sys_name.lower() == "darwin": + sed = "sed -i .bak " + else: + sed = "sed -i " + + sed_cmd = sed + "s/@SERVICE_NAME@/" + exec_name + "/g " + start_file + execute_command_and_getoutput(sed_cmd) + + sed_cmd = sed + "s/@SERVICE_NAME@/" + exec_name + "/g " + stop_file + execute_command_and_getoutput(sed_cmd) + + sed_cmd = sed + "s/@TARS_APP@/" + chain_id + "/g " + conf_file + execute_command_and_getoutput(sed_cmd) + sed_cmd = sed + "s/@TARS_SERVER@/" + service_name + "/g " + conf_file + execute_command_and_getoutput(sed_cmd) + + # remove .bak files if exist + if os.path.exists(start_file + ".bak"): + os.remove(start_file + ".bak") + + if os.path.exists(stop_file + ".bak"): + os.remove(stop_file + ".bak") + + if os.path.exists(conf_file + ".bak"): + os.remove(conf_file + ".bak") diff --git a/tools/BcosBuilder/src/controller/binary_controller.py b/tools/BcosBuilder/src/controller/binary_controller.py new file mode 100644 index 0000000..bf19a37 --- /dev/null +++ b/tools/BcosBuilder/src/controller/binary_controller.py @@ -0,0 +1,95 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +from common import utilities +import requests +import sys +import os +import tarfile + + +class BinaryController: + def __init__(self, version, binary_path, use_cdn, node_type): + self.version = version + self.mtail_version = "3.0.0-rc49" + self.binary_path = binary_path + self.binary_postfix = "-linux-x86_64.tgz" + self.mtail_binary_name = "mtail_3.0.0-rc49_Linux_x86_64.tar.gz" + self.cdn_link_header = "https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/FISCO-BCOS" + if node_type == "pro": + self.binary_list = ["BcosRpcService", + "BcosGatewayService", "BcosNodeService"] + elif node_type == "max": + self.binary_list = ["BcosRpcService", "BcosGatewayService", + "BcosMaxNodeService", "BcosExecutorService"] + else: + utilities.log_error("Unsupported node_type %s" % node_type) + sys.exit(-1) + self.use_cdn = use_cdn + self.last_percent = 0 + self.download_prefix = "https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/" + self.mtail_download_url = "https://github.com/google/mtail/releases/download/v3.0.0-rc49/%s" % self.mtail_binary_name + if self.use_cdn is True: + self.download_prefix = "%s/FISCO-BCOS/releases/" % ( + self.cdn_link_header) + self.mtail_download_url = "%s/FISCO-BCOS/tools/mtail/%s" % ( + self.cdn_link_header, self.mtail_binary_name) + + def download_all_binary(self): + utilities.print_badge( + "Download binary, use_cdn: %s, version: %s" % (self.use_cdn, self.version)) + for binary in self.binary_list: + download_url = self.get_binary_download_url(binary) + if self.download_binary(binary + ".tgz", download_url) is False: + return False + self.un_tar_gz(self.get_required_binary_path(binary + ".tgz")) + if self.download_binary(self.mtail_binary_name, self.mtail_download_url) is False: + return False + binary_file_path = os.path.join( + self.binary_path, self.mtail_binary_name) + self.un_tar_gz(binary_file_path) + return True + + def get_binary_download_url(self, binary_name): + return ("%s%s/%s%s") % (self.download_prefix, self.version, binary_name, self.binary_postfix) + + def get_required_binary_path(self, binary_name): + return os.path.join(self.binary_path, binary_name) + + def get_downloaded_binary_path(self, binary_name): + return binary_name + self.binary_postfix + + def download_binary(self, binary_name, download_url): + if os.path.exists(self.binary_path) is False: + utilities.mkdir(self.binary_path) + binary_file_path = self.get_required_binary_path(binary_name) + utilities.log_info("Download url: %s" % download_url) + with open(binary_file_path, 'wb') as file: + response = requests.get(download_url, stream=True) + total = response.headers.get('content-length') + if total is None or int(total) < 100000: + utilities.log_error("Download binary %s failed, Please check the existence of the binary version %s" % ( + binary_name, self.version)) + return False + utilities.log_info("* Download %s from %s\n* size: %fMB, dst_path: %s" % ( + binary_name, download_url, float(total)/float(1000000), binary_file_path)) + downloaded = 0 + total = int(total) + for data in response.iter_content(chunk_size=max(int(total/1000), 1024*1024)): + downloaded += len(data) + file.write(data) + done = int(50*downloaded/total) + utilities.log_info("Download percent: %d%%" % + (downloaded/total * 100)) + sys.stdout.write('\r[{}{}]'.format( + '█' * done, '.' * (50-done))) + sys.stdout.flush() + sys.stdout.write('\n') + utilities.log_info("* Download %s from %s success" % + (binary_name, download_url)) + return True + + def un_tar_gz(self, file_name): + tar = tarfile.open(file_name) + tar.extractall(self.binary_path) + tar.close() diff --git a/tools/BcosBuilder/src/controller/monitor_controller.py b/tools/BcosBuilder/src/controller/monitor_controller.py new file mode 100644 index 0000000..2af2034 --- /dev/null +++ b/tools/BcosBuilder/src/controller/monitor_controller.py @@ -0,0 +1,37 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from config.monitor_config_generator import MonitorConfigGenerator + + +class MonitorController: + """ + the monitor controller + """ + + def __init__(self, config, node_type, output_dir): + self.config = config + self.binary_name = "" + self.download_url = "" + self.node_type = node_type + self.monitor_generator = MonitorConfigGenerator( + self.config, node_type, output_dir) + + def generate_monitor_config(self): + if self.monitor_generator.generate_monitor_config() is False: + return False + return self.monitor_generator.generate_mtail_config() + + def generate_and_deploy_monitor_services(self): + if self.generate_monitor_config() is False: + return False + return True + + def start_monitor_services(self): + if self.monitor_generator.start_monitor_config() is False: + return False + return True + + def stop_monitor_services(self): + if self.monitor_generator.stop_monitor_config() is False: + return False + return True diff --git a/tools/BcosBuilder/src/controller/node_controller.py b/tools/BcosBuilder/src/controller/node_controller.py new file mode 100644 index 0000000..37344fe --- /dev/null +++ b/tools/BcosBuilder/src/controller/node_controller.py @@ -0,0 +1,222 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from config.max_node_config_generator import MaxNodeConfigGenerator +from config.node_config_generator import NodeConfigGenerator +from common import utilities +from service.tars_service import TarsService + + +class NodeController: + """ + the max node controller + """ + + def __init__(self, config, node_type, output_dir): + self.config = config + if node_type == "max": + self.node_generator = MaxNodeConfigGenerator( + self.config, node_type, output_dir) + else: + self.node_generator = NodeConfigGenerator( + self.config, node_type, output_dir) + + def generate_all_config(self): + return self.node_generator.generate_all_config(False) + + def generate_all_executor_config(self): + return self.node_generator.generate_all_executor_config() + + def deploy_group_services(self): + """ + deploy max node for all group + """ + for node in self.config.node_list.values(): + if self.__deploy_all_service(node) is False: + return False + return True + + def upgrade_group(self): + utilities.log_info("upgrade services for all the group nodes") + for node in self.config.node_list.values(): + utilities.log_info("upgrade service for node %s" % + node.node_name) + if self.__upgrade_all_service(node) is False: + return False + return True + + def stop_group(self): + for node in self.config.node_list.values(): + if self.__stop_all(node) is False: + return False + return True + + def start_group(self): + for node in self.config.node_list.values(): + if self.__start_all(node) is False: + return False + return True + + def generate_and_deploy_group_services(self): + if self.generate_all_config() is False: + return False + if self.deploy_group_services() is False: + return False + return True + + def undeploy_group(self): + utilities.log_info("undeploy services for all the group nodes") + for node_config in self.config.node_list.values(): + for service in node_config.service_list: + if self.__undeploy_service(service) is False: + return False + return True + + def generate_all_expand_config(self): + """ + generate expand config + """ + if self.node_generator.generate_all_config(True) is False: + return False + return True + + def generate_all_executor_expand_config(self): + """ + generate expand config + """ + if self.node_generator.generate_all_executor_config() is False: + return False + return True + + def expand_and_deploy_all_nodes(self): + """ + expand and deploy all nodes + """ + if self.generate_all_expand_config() is False: + return False + if self.deploy_group_services() is False: + return False + return True + + def expand_and_deploy_all_executors(self): + """ + expand and deploy all executor + """ + if self.generate_all_executor_expand_config() is False: + return False + if self.deploy_group_services() is False: + return False + return True + + def __start_all(self, node): + tars_service_obj = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, "") + for service in node.service_list: + if tars_service_obj.restart_server(service.service_name) is False: + utilities.log_error("start node %s failed" % + service.service_name) + return False + else: + utilities.log_info("start node %s success" % + service.service_name) + return True + + def __stop_all(self, node): + ret = True + tars_service_obj = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, "") + for service in node.service_list: + if tars_service_obj.stop_server(service.service_name) is False: + utilities.log_error("stop node %s failed" % + service.service_name) + ret = False + else: + utilities.log_info("stop node %s success" % + service.service_name) + return ret + + def __undeploy_service(self, node_service_config): + for ip in node_service_config.deploy_ip_list: + utilities.log_info("undeploy service %s from %s" % + (node_service_config.service_name, ip)) + tars_service_obj = TarsService( + self.config.tars_config.tars_url, self.config.tars_config.tars_token, self.config.chain_id, ip) + ret = tars_service_obj.undeploy_tars( + node_service_config.service_name) + if ret is False: + utilities.log_error("undeploy service %s from %s failed" % ( + node_service_config.service_name, ip)) + else: + utilities.log_info("undeploy service %s from %s success" % ( + node_service_config.service_name, ip)) + return True + + def __upgrade_all_service(self, node_config): + for service in node_config.service_list: + for ip in service.deploy_ip_list: + tars_service_obj = TarsService( + self.config.tars_config.tars_url, self.config.tars_config.tars_token, self.config.chain_id, ip) + if self.__upgrade_service(ip, tars_service_obj, node_config, service) is False: + return False + return True + + def __deploy_all_service(self, node_config): + for service in node_config.service_list: + for ip in service.deploy_ip_list: + if self.__deploy_service(ip, node_config, service) is False: + return False + return True + + def __deploy_service(self, deploy_ip, node_config, node_service_config): + tars_service_obj = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, deploy_ip) + # create application + tars_service_obj.create_application() + # create service + if tars_service_obj.deploy_single_service(node_service_config.service_name, node_service_config.service_obj_list, True) is False: + return False + return self.__upgrade_service(deploy_ip, tars_service_obj, node_config, node_service_config) + + def __upgrade_service(self, deploy_ip, tars_service_obj, node_config, node_service_config): + # upload package + (ret, patch_id) = self.__upload_package( + tars_service_obj, node_service_config) + if ret is False: + return False + # add configuration + config_path_list = self.node_generator.get_config_file_path_list( + node_service_config, node_config) + # Note: config.genesis, node.pem is the service-dimension configuration + ret = tars_service_obj.add_node_config_list( + deploy_ip, node_service_config.config_file_list, node_service_config.service_name, config_path_list) + if ret is False: + return False + # add ini configuration + if self.node_generator.node_type == "max" and node_service_config.need_add_ini_config is True: + ini_config_path = self.node_generator.get_ini_config_file_path( + node_service_config, node_config, deploy_ip) + ini_config_file_list = [] + ini_config_file_list.append(node_service_config.ini_config_file) + ini_config_path_list = [] + ini_config_path_list.append(ini_config_path) + ret = tars_service_obj.add_config_list( + ini_config_file_list, node_service_config.service_name, deploy_ip, ini_config_path_list, True) + if ret is False: + return False + # patch tars + (ret, server_id) = tars_service_obj.get_server_id( + node_service_config.service_name, deploy_ip) + if ret is False: + return False + return tars_service_obj.patch_tars(server_id, patch_id) + + def __upload_package(self, tars_service, node_service_config): + """ + upload package + """ + (ret, package_path) = utilities.try_to_rename_tgz_package("generated", + self.config.tars_config.tars_pkg_dir, node_service_config.service_name, node_service_config.base_service_name) + if ret is False: + utilities.log_error( + "upload package for service %s failed" % node_service_config.service_name) + return (False, -1) + return tars_service.upload_tars_package(node_service_config.service_name, package_path) diff --git a/tools/BcosBuilder/src/controller/service_controller.py b/tools/BcosBuilder/src/controller/service_controller.py new file mode 100644 index 0000000..05a9e46 --- /dev/null +++ b/tools/BcosBuilder/src/controller/service_controller.py @@ -0,0 +1,215 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +from config.service_config_generator import ServiceConfigGenerator +from service.tars_service import TarsService +from common.utilities import ServiceInfo +from common import utilities + + +class ServiceController: + """ + common controller for rpc/gateway + """ + + def __init__(self, config, service_type, node_type, output_dir): + self.config = config + self.service_type = service_type + self.service_list = self.config.rpc_service_list + self.node_type = node_type + self.output_dir = output_dir + self.config_generator = ServiceConfigGenerator( + self.config, self.service_type, self.node_type, self.output_dir) + if self.service_type == ServiceInfo.gateway_service_type: + self.service_list = self.config.gateway_service_list + + def deploy_all(self): + for service in self.service_list.values(): + if self.__deploy_service(service) is False: + utilities.log_error("deploy service %s failed" % service.name) + return False + return True + + def stop_all(self): + ret = True + for service in self.service_list.values(): + if self.__stop_service(service) is False: + ret = False + utilities.log_error("stop service %s failed" % service.name) + else: + utilities.log_info("stop service %s success" % service.name) + return ret + + def start_all(self): + for service in self.service_list.values(): + if self.__start_service(service) is False: + utilities.log_error("start service %s failed" % service.name) + return False + else: + utilities.log_info("start service %s success" % service.name) + return True + + def undeploy_all(self): + ret = True + for service in self.service_list.values(): + if self.__undeploy_service(service) is False: + ret = False + utilities.log_error( + "undeploy service %s failed" % service.name) + else: + utilities.log_info( + "undeploy service %s success" % service.name) + return ret + + def upgrade_all(self): + for service in self.service_list.values(): + if self.__upgrade_service(service) is False: + utilities.log_error("upgrade service %s failed" % service.name) + return False + else: + utilities.log_info("upgrade service %s success" % service.name) + return True + + def gen_all_service_config(self): + if self.config_generator.generate_all_config() is False: + utilities.log_error( + "gen configuration for %s service failed" % self.service_type) + return False + return True + + def expand_all(self): + for service in self.service_list.values(): + if self.__expand_service_list(service) is False: + utilities.log_error("expand service %s to %s failed, type: %s!" % ( + service.name, service.deploy_ip_list, self.service_type)) + return False + return True + + def __deploy_service(self, service_config): + if len(service_config.deploy_ip_list) == 0: + utilities.log_info("No service to deploy") + for deploy_ip in service_config.deploy_ip_list: + utilities.log_info("deploy_service to %s, app: %s, name: %s" % ( + deploy_ip, self.config.chain_id, service_config.name)) + if self.__deploy_service_to_given_ip(service_config, deploy_ip) is False: + return False + return True + + def __expand_service_list(self, service_config): + for ip in service_config.deploy_ip_list: + utilities.log_info("expand to %s, app: %s, name: %s" % ( + ip, self.config.chain_id, service_config.name)) + if self.__deploy_service_to_given_ip(service_config, ip) is False: + return False + return True + + def __upgrade_service(self, service_config): + for ip in service_config.deploy_ip_list: + utilities.log_info("upgrade_service %s to %s" % + (service_config.name, ip)) + ret = self.__upgrade_service_to_given_ip(service_config, ip) + if ret is False: + return False + return True + + def __deploy_service_to_given_ip(self, service_config, deploy_ip): + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, deploy_ip) + # create application + tars_service.create_application() + # create the service + obj_list = service_config.service_obj_list + # deploy service + ret = tars_service.deploy_single_service( + service_config.name, obj_list, True) + if ret is False: + return False + # add configuration files + (config_file_list, config_path_list) = self.config_generator.get_config_file_list( + service_config, deploy_ip) + ret = tars_service.add_config_list( + config_file_list, service_config.name, deploy_ip, config_path_list, True) + if ret is False: + return False + return self.__upgrade_service_by_config_info(tars_service, service_config) + + def __expand_service_to_given_ip(self, service_config, node_name, expand_node_ip): + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, expand_node_ip) + # expand the service + obj_list = service_config.service_obj_list + expand_node_list = [expand_node_ip] + ret = tars_service.expand_server_with_preview( + service_config.name, node_name, expand_node_list, obj_list) + if ret is False: + utilities.log_error("expand service failed, app: %s, service: %s, node: %s" % ( + self.config.chain_id, service_config.name, expand_node_ip)) + return False + # add configuration files + (config_file_list, config_path_list) = self.config_generator.get_config_file_list( + service_config, expand_node_ip) + ret = tars_service.add_config_list( + config_file_list, service_config.name, expand_node_ip, config_path_list, True) + if ret is False: + return False + # patch the service + return self.__upgrade_service_by_config_info(tars_service, service_config) + + def __upgrade_service_to_given_ip(self, service_config, deploy_ip): + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, deploy_ip) + return self.__upgrade_service_by_config_info(tars_service, service_config) + + def __upgrade_service_by_config_info(self, tars_service, service_config): + # upload package + (ret, patch_id) = self.__upload_package( + tars_service, service_config.name, service_config.binary_name) + if ret is False: + return False + # patch tars + # get the service info + (ret, server_id) = tars_service.get_server_id( + service_config.name, tars_service.deploy_ip) + if ret is False: + return False + return tars_service.patch_tars(server_id, patch_id) + + def __undeploy_service(self, service_config): + for ip in service_config.deploy_ip_list: + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, ip) + utilities.log_info( + "undeploy service for node %s, service: %s" % (ip, service_config.name)) + if tars_service.undeploy_tars(service_config.name) is False: + utilities.log_error( + "undeploy service %s for node %s failed" % (ip, service_config.name)) + return True + + def __start_service(self, service_config): + for ip in service_config.deploy_ip_list: + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, ip) + if tars_service.restart_server(service_config.name) is False: + utilities.log_error("start service for node %s failed" % ip) + return False + return True + + def __stop_service(self, service_config): + for ip in service_config.deploy_ip_list: + tars_service = TarsService(self.config.tars_config.tars_url, + self.config.tars_config.tars_token, self.config.chain_id, ip) + utilities.log_info("stop service %s, node: %s" % + (service_config.name, ip)) + if tars_service.stop_server(service_config.name) is False: + utilities.log_error("stop service for node %s failed" % ip) + return False + return True + + def __upload_package(self, tars_service, service_name, org_service_name): + (ret, package_path) = utilities.try_to_rename_tgz_package("generated", + self.config.tars_config.tars_pkg_dir, service_name, org_service_name) + if ret is False: + utilities.log_error( + "upload package for service %s failed for rename package name failed" % service_name) + return (False, -1) + return tars_service.upload_tars_package(service_name, package_path) diff --git a/tools/BcosBuilder/src/networkmgr/network_manager.py b/tools/BcosBuilder/src/networkmgr/network_manager.py new file mode 100644 index 0000000..e3c9879 --- /dev/null +++ b/tools/BcosBuilder/src/networkmgr/network_manager.py @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from common import utilities + + +class NetworkManager: + def create_sub_net(subnet, docker_network_name): + """ + create the subnet + """ + utilities.log_info("* create docker subnet %s, name: %s" % + (subnet, docker_network_name)) + command = "docker network create -d bridge --subnet=%s %s --opt com.docker.network.driver.mtu=1400" % ( + subnet, docker_network_name) + if utilities.execute_command(command) is False: + utilities.log_error("create the docker subnet failed") + return False + return True + + def get_docker_network_id(docker_network_name): + """ + get the docker network id + """ + command = "docker network ls | grep -i \"%s\" | awk -F\' \' \'{print $1}\'" % docker_network_name + (ret, result) = utilities.execute_command_and_getoutput(command) + if ret is False: + utilities.log_error( + "* get docker network id for %s failed" % docker_network_name) + utilities.log_info( + "* get docker network id for %s success, id: %s" % (docker_network_name, result)) + return (ret, result) + + def create_bridge(docker_network_name, docker_vxlan_name, remote_ip): + """ + add the bridge + """ + dstport = 4789 + dev_name = "eth0" + utilities.log_info("* set the bridge interconnection network, docker_network: %s, docker_vxlan_name: %s, remote_ip: %s, dstport: %s" % + (docker_network_name, docker_vxlan_name, remote_ip, dstport)) + (ret, network_id) = NetworkManager.get_docker_network_id(docker_network_name) + basic_error_info = "Failed to set the bridge interconnection network" + if ret is False: + utilities.log_error("%s, please check the network name! remote ip: %s, network name: %s" % ( + basic_error_info, remote_ip, docker_network_name)) + return False + # add ip link + ip_link_command = "ip link add %s type vxlan id 200 remote %s dstport %d dev %s" % ( + docker_vxlan_name, remote_ip, dstport, dev_name) + if utilities.execute_command(ip_link_command) is False: + utilities.log_error("%s" % basic_error_info) + return False + # setup the network + ip_set_up_command = "ip link set %s up" % docker_vxlan_name + if utilities.execute_command(ip_set_up_command) is False: + utilities.log_error("%s" % basic_error_info) + return False + # add bridge + bridge_add_command = "brctl addif br-%s %s" % ( + network_id, docker_vxlan_name) + if utilities.execute_command(bridge_add_command) is False: + utilities.log_error("%s" % basic_error_info) + return False + return True diff --git a/tools/BcosBuilder/src/scripts/generate_cert.sh b/tools/BcosBuilder/src/scripts/generate_cert.sh new file mode 100644 index 0000000..7bb1b37 --- /dev/null +++ b/tools/BcosBuilder/src/scripts/generate_cert.sh @@ -0,0 +1,1038 @@ +#!/bin/bash +set -e + +dirpath="$(cd "$(dirname "$0")" && pwd)" +# cd "${dirpath}" + +# for cert generation +sm_cert_conf='sm_cert.cnf' +# the validity period of the certificate +days=36500 +# rsa key length +rsa_key_length=2048 + +sm_mode='false' +sm2_params="sm_sm2.param" + +fisco_path="${HOME}/.fisco" +tassl_path="${fisco_path}/tassl-1.1.1b" +calculate_address="${fisco_path}/calculate_address" +keccak_256_bin="${fisco_path}/keccak-256sum" +keccak_256_tar="${fisco_path}/keccak-256sum.tgz" +sm3_bin="${fisco_path}/sm3" +sm3_tar="${fisco_path}/sm3.tgz" +OPENSSL_CMD="${fisco_path}/tassl-1.1.1b" + +# params for command +ca_cert_path="" +output_dir="cert" +account_output_dir="accounts" +sub_command="" +sub_cmd_param='' +ip_params="" +force_aarch64="" +account_address="" + +LOG_WARN() { + local content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +LOG_INFO() { + local content=${1} + echo -e "\033[32m[INFO] ${content}\033[0m" +} + +LOG_FALT() { + local content=${1} + echo -e "\033[31m[FALT] ${content}\033[0m" + exit 1 +} + +dir_must_exists() { + if [[ ! -d "$1" ]]; then + LOG_FALT "$1 DIR does not exist, please check!" + fi +} + +file_must_not_exists() { + if [[ -f "$1" ]]; then + LOG_FALT "$1 file already exist, please check!" + fi +} + +file_must_exists() { + if [[ ! -f "$1" ]]; then + LOG_FALT "$1 file does not exist, please check!" + fi +} + +check_name() { + local name="$1" + local value="$2" + [[ "$value" =~ ^[a-zA-Z0-9._-]+$ ]] || { + LOG_FALT "$name name [$value] invalid, it should match regex: ^[a-zA-Z0-9._-]+\$" + } +} + +generate_sm_sm2_param() { + local output=$1 + cat <"${output}" +-----BEGIN EC PARAMETERS----- +BggqgRzPVQGCLQ== +-----END EC PARAMETERS----- + +EOF +} + +generate_sm_cert_conf() { + local output=$1 + cat <"${output}" +oid_section = new_oids + +[ new_oids ] +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem # The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extensions to add to the cert + +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +default_days = 36500 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +policy = policy_match + +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_md = sm3 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +x509_extensions = v3_ca # The extensions to add to the self signed cert + +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = CN +countryName_default = CN +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default =GuangDong +localityName = Locality Name (eg, city) +localityName_default = ShenZhen +organizationalUnitName = Organizational Unit Name (eg, section) +organizationalUnitName_default = fisco +commonName = Organizational commonName (eg, fisco) +commonName_default = fisco +commonName_max = 64 + +[ usr_cert ] +basicConstraints=CA:FALSE +nsComment = "OpenSSL Generated Certificate" + +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature + +[ v3enc_req ] + +# Extensions to add to a certificate request +basicConstraints = CA:FALSE +keyUsage = keyAgreement, keyEncipherment, dataEncipherment + +[ v3_agency_root ] +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer +basicConstraints = CA:true +keyUsage = cRLSign, keyCertSign + +[ v3_ca ] +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer +basicConstraints = CA:true +keyUsage = cRLSign, keyCertSign + +EOF +} + +generate_cert_conf() { + local output=$1 + cat <"${output}" +[ca] +default_ca=default_ca +[default_ca] +default_days = 36500 +default_md = sha256 + +[req] +distinguished_name = req_distinguished_name +req_extensions = v3_req +[req_distinguished_name] +countryName = CN +countryName_default = CN +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default =GuangDong +localityName = Locality Name (eg, city) +localityName_default = ShenZhen +organizationalUnitName = Organizational Unit Name (eg, section) +organizationalUnitName_default = FISCO-BCOS +commonName = Organizational commonName (eg, FISCO-BCOS) +commonName_default = FISCO-BCOS +commonName_max = 64 + +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v4_req ] +basicConstraints = CA:FALSE + +EOF +} + +gen_chain_cert() { + + if [[ ! -f "${cert_conf}" ]]; then + generate_cert_conf "${cert_conf}" + fi + + local chaindir="${1}" + + file_must_not_exists "${chaindir}"/ca.key + file_must_not_exists "${chaindir}"/ca.crt + file_must_exists "${cert_conf}" + + mkdir -p "$chaindir" + dir_must_exists "$chaindir" + + ${OPENSSL_CMD} genrsa -out "${chaindir}"/ca.key "${rsa_key_length}" + ${OPENSSL_CMD} req -new -x509 -days "${days}" -subj "/CN=FISCO-BCOS/O=FISCO-BCOS/OU=chain" -key "${chaindir}"/ca.key -config "${cert_conf}" -out "${chaindir}"/ca.crt + if [[ ! -f "${chaindir}/cert.cnf" ]];then + mv "${cert_conf}" "${chaindir}" + fi + LOG_INFO "Build ca cert successfully!" +} + +gen_rsa_node_private_and_csr() { + local ndpath="${1}" + local type="${2}" + + if [[ ! -f "${cert_conf}" ]]; then + generate_cert_conf "${cert_conf}" + fi + + # check_name node "$node" + file_must_not_exists "$ndpath"/"${type}".key + + mkdir -p "${ndpath}" + dir_must_exists "${ndpath}" + + ${OPENSSL_CMD} genrsa -out "${ndpath}"/"${type}".key "${rsa_key_length}" 2> /dev/null + ${OPENSSL_CMD} req -new -sha256 -subj "/CN=FISCO-BCOS/O=fisco-bcos/OU=agency" -key "$ndpath"/"${type}".key -config ${cert_conf} -out "$ndpath"/"${type}".csr + + ${OPENSSL_CMD} pkcs8 -topk8 -in "$ndpath"/"$type".key -out "$ndpath"/pkcs8_node.key -nocrypt + + rm -f "$ndpath"/"${type}".key + mv "$ndpath"/pkcs8_node.key "$ndpath"/"${type}".key + cp "${cert_conf}" "$ndpath" + + # extract p2p id + ${OPENSSL_CMD} rsa -in "$ndpath"/"$type".key -pubout -out public.pem + ${OPENSSL_CMD} rsa -pubin -in public.pem -text -noout 2> /dev/null | sed -n '3,20p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "${ndpath}/${type}.nodeid" + rm -f public.pem + + LOG_INFO "Build rsa node cert private with csr successful!" +} + +sign_rsa_node_cert_private_csr() { + local capath="${1}" + local csrpath="${2}" + local type="${3}" + + # check_name node "$node" + file_must_exists "${csrpath}" + + file_must_exists "$capath/ca.key" + file_must_exists "$capath/ca.crt" + file_must_exists "$capath/cert.cnf" + + local output=$(dirname ${csrpath}) + + mkdir -p "${output}" + dir_must_exists "${output}" + + ${OPENSSL_CMD} x509 -req -days "${days}" -sha256 -CA "${capath}"/ca.crt -CAkey "$capath"/ca.key -CAcreateserial \ + -in "${csrpath}" -out "$output"/"${type}".crt -extensions v4_req -extfile "$capath"/cert.cnf 2>/dev/null + + cp "$capath"/ca.crt "$capath"/cert.cnf "$output" + + LOG_INFO "Sign rsa node cert private with csr successful!" +} + +gen_rsa_node_cert() { + local capath="${1}" + local ndpath="${2}" + local type="${3}" + + file_must_exists "$capath/ca.key" + file_must_exists "$capath/ca.crt" + # check_name node "$node" + + file_must_not_exists "$ndpath"/"${type}".key + file_must_not_exists "$ndpath"/"${type}".crt + + mkdir -p "${ndpath}" + dir_must_exists "${ndpath}" + + ${OPENSSL_CMD} genrsa -out "${ndpath}"/"${type}".key "${rsa_key_length}" 2> /dev/null + ${OPENSSL_CMD} req -new -sha256 -subj "/CN=FISCO-BCOS/O=fisco-bcos/OU=agency" -key "$ndpath"/"${type}".key -config "$capath"/cert.cnf -out "$ndpath"/"${type}".csr + ${OPENSSL_CMD} x509 -req -days "${days}" -sha256 -CA "${capath}"/ca.crt -CAkey "$capath"/ca.key -CAcreateserial \ + -in "$ndpath"/"${type}".csr -out "$ndpath"/"${type}".crt -extensions v4_req -extfile "$capath"/cert.cnf 2>/dev/null + + ${OPENSSL_CMD} pkcs8 -topk8 -in "$ndpath"/"$type".key -out "$ndpath"/pkcs8_node.key -nocrypt + cp "$capath"/ca.crt "$capath"/cert.cnf "$ndpath"/ + + rm -f "$ndpath"/"${type}".csr + rm -f "$ndpath"/"${type}".key + + mv "$ndpath"/pkcs8_node.key "$ndpath"/"${type}".key + + # extract p2p id + ${OPENSSL_CMD} rsa -in "$ndpath"/"$type".key -pubout -out public.pem + ${OPENSSL_CMD} rsa -pubin -in public.pem -text -noout 2> /dev/null | sed -n '3,20p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "${ndpath}/${type}.nodeid" + rm -f public.pem + + LOG_INFO "Build node cert successful!" +} + +gen_sm_chain_cert() { + local chaindir="${1}" + name=$(basename "$chaindir") + check_name chain "$name" + + mkdir -p "$chaindir" + dir_must_exists "$chaindir" + + "$OPENSSL_CMD" genpkey -paramfile "${sm2_params}" -out "$chaindir/sm_ca.key" + "$OPENSSL_CMD" req -config sm_cert.cnf -x509 -days "${days}" -subj "/CN=FISCO-BCOS/O=FISCO-BCOS/OU=chain" -key "$chaindir/sm_ca.key" -extensions v3_ca -out "$chaindir/sm_ca.crt" + if [[ ! -f "${chaindir}/${sm_cert_conf}" ]];then + cp "${sm_cert_conf}" "${chaindir}" + fi + if [[ ! -f "${chaindir}/${sm2_params}" ]];then + cp "${sm2_params}" "${chaindir}" + fi +} + +gen_sm_node_private_and_csr() { + local ndpath="${1}" + local type="${2}" + + file_must_not_exists "$ndpath/sm_${type}.csr" + file_must_not_exists "$ndpath/sm_${type}.key" + + mkdir -p "$ndpath" + + "$OPENSSL_CMD" genpkey -paramfile "${sm2_params}" -out "$ndpath/sm_${type}.key" + "$OPENSSL_CMD" req -new -subj "/CN=FISCO-BCOS/O=fisco-bcos/OU=${type}" -key "$ndpath/sm_${type}.key" -config "${sm_cert_conf}" -out "$ndpath/sm_${type}.csr" + + # nodeid is pubkey + "$OPENSSL_CMD" ec -in "$ndpath/sm_${type}.key" -text -noout 2> /dev/null | sed -n '7,11p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "$ndpath/sm_${type}.nodeid" +} + +sign_sm_node_private_and_csr() { + local capath="$1" + local ndpath="$2" + local type="$3" + local extensions="$4" + + file_must_exists "$capath/sm_ca.key" + file_must_exists "$capath/sm_ca.crt" + file_must_exists "$ndpath/sm_${type}.key" + file_must_exists "$ndpath/sm_${type}.csr" + + file_must_not_exists "$ndpath/sm_${type}.crt" + + echo "use $(basename "$capath") to sign $(basename $ndpath) ${type}" + "$OPENSSL_CMD" x509 -sm3 -req -CA "$capath/sm_ca.crt" -CAkey "$capath/sm_ca.key" -days "${days}" -CAcreateserial -in "$ndpath/sm_${type}.csr" -out "$ndpath/sm_${type}.crt" -extfile "$capath/sm_cert.cnf" -extensions "$extensions" + cp "$capath/sm_ca.crt" "$ndpath" +} + +gen_sm_node_cert_with_ext() { + local capath="$1" + local certpath="$2" + local type="$3" + local extensions="$4" + + file_must_exists "$capath/sm_ca.key" + file_must_exists "$capath/sm_ca.crt" + + file_must_not_exists "$ndpath/sm_${type}.crt" + file_must_not_exists "$ndpath/sm_${type}.key" + + "$OPENSSL_CMD" genpkey -paramfile "$capath/${sm2_params}" -out "$certpath/sm_${type}.key" + "$OPENSSL_CMD" req -new -subj "/CN=FISCO-BCOS/O=fisco-bcos/OU=${type}" -key "$certpath/sm_${type}.key" -config "$capath/sm_cert.cnf" -out "$certpath/sm_${type}.csr" + + echo "use $(basename "$capath") to sign $(basename $certpath) ${type}" + "$OPENSSL_CMD" x509 -sm3 -req -CA "$capath/sm_ca.crt" -CAkey "$capath/sm_ca.key" -days "${days}" -CAcreateserial -in "$certpath/sm_${type}.csr" -out "$certpath/sm_${type}.crt" -extfile "$capath/sm_cert.cnf" -extensions "$extensions" + + #nodeid is pubkey + "$OPENSSL_CMD" ec -in "$ndpath/sm_${type}.key" -text -noout 2> /dev/null | sed -n '7,11p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "$ndpath/sm_${type}.nodeid" + + rm -f "$certpath/sm_${type}.csr" +} + +generate_multi_nodes_cert_impl() +{ + local capath="${1}" + local type="${2}" + local output="${3}" + + if [[ -z ${ip_params} ]];then + LOG_FALT "ip param is empty, please use \'-l\' command to set ip param." + fi + + local ip_array=(${ip_params//,/ }) + # check params + for line in ${ip_array[*]}; do + ip=${line%:*} + num=${line#*:} + + # check ip format + if [[ -z $(echo ${ip} | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$") ]]; then + LOG_FALT "Invalid ip address, please check the IP address: ${ip}" + fi + done + + # generate rsa node cert for every server + for line in ${ip_array[*]}; do + ip=${line%:*} + num=${line#*:} + + for ((i = 0; i < num; ++i)); do + if [[ "${sm_mode}" == "false" ]]; then + gen_rsa_node_cert "${capath}" "${output}/${ip}_${i}/" "${type}" + else + gen_sm_node_cert "${capath}" "${output}/${ip}_${i}/" "${type}" + fi + done + done + +} + +generate_multi_nodes_private_key_impl() +{ + local output="${1}" + local nodeids_dir="${output}/nodeids" + + if [[ -z ${ip_params} ]];then + LOG_FALT "ip param is empty, please use \'-l\' command to set ip param." + fi + + local ip_array=(${ip_params//,/ }) + # check params + for line in ${ip_array[*]}; do + ip=${line%:*} + num=${line#*:} + + # check ip format + if [[ -z $(echo ${ip} | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$") ]]; then + LOG_FALT "Invalid ip address, please check the IP address: ${ip}" + fi + done + + mkdir -p "${nodeids_dir}" + + # generate rsa node cert for every server + for line in ${ip_array[*]}; do + ip=${line%:*} + num=${line#*:} + + for ((i = 0; i < num; ++i)); do + if [[ "${sm_mode}" == "false" ]]; then + generate_private_key "${output}/${ip}_${i}/" + else + generate_sm_private_key "${output}/${ip}_${i}/" + fi + + file_must_exists "${output}/${ip}_${i}/node.nodeid" + cp "${output}/${ip}_${i}/node.nodeid" "${nodeids_dir}/${ip}_${i}.nodeid" + done + done + +} + +gen_sm_node_cert() { + local capath="${1}" + local ndpath="${2}" + local type="${3}" + + file_must_exists "$capath/sm_ca.key" + file_must_exists "$capath/sm_ca.crt" + + mkdir -p "$ndpath" + dir_must_exists "$ndpath" + local node=$(basename "$ndpath") + check_name node "$node" + + gen_sm_node_cert_with_ext "$capath" "$ndpath" ${type} v3_req + gen_sm_node_cert_with_ext "$capath" "$ndpath" "en${type}" v3enc_req + # nodeid is pubkey + # $OPENSSL_CMD ec -in "$ndpath/sm_${type}.key" -text -noout 2> /dev/null | sed -n '7,11p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "$ndpath/sm_${type}.nodeid" + + cp "$capath/sm_ca.crt" "$ndpath" +} + +generate_single_node_cert() { + local sm_mode="${1}" + local ca_path="${2}" + local node_cert_path="${3}" + local type="${4}" + + mkdir -p ${node_cert_path} + if [[ "${sm_mode}" == "false" ]]; then + gen_rsa_node_cert "${ca_path}" "${node_cert_path}" "${type}" 2>&1 + else + gen_sm_node_cert "${ca_path}" "${node_cert_path}" "${type}" 2>&1 + fi +} + +generate_single_node_csr() { + local sm_mode="${1}" + local node_path="${2}" + local type="${3}" + + mkdir -p ${node_path} + if [[ "${sm_mode}" == "false" ]]; then + gen_rsa_node_private_and_csr "${node_path}" "${type}" 2>&1 + else + gen_sm_node_private_and_csr "${node_path}" "${type}" 2>&1 + gen_sm_node_private_and_csr "${node_path}" "en${type}" 2>&1 + fi +} + +sign_single_node_csr() { + local sm_mode="${1}" + local ca_path="${2}" + local csr_path="${3}" + local type="${4}" + + if [[ "${sm_mode}" == "false" ]]; then + sign_rsa_node_cert_private_csr "${ca_path}" "${csr_path}" "${type}" 2>&1 + else + sign_sm_node_private_and_csr "${ca_path}" "${csr_path}" "${type}" v3_req + sign_sm_node_private_and_csr "${ca_path}" "${csr_path}" "en${type}" v3enc_req + fi +} + +generate_chain_cert(){ + local sm_mode="${1}" + local chain_cert_path="${2}" + mkdir -p "${chain_cert_path}" + if [[ "${sm_mode}" == "false" ]]; then + gen_chain_cert "${chain_cert_path}" 2>&1 + else + gen_sm_chain_cert "${chain_cert_path}" 2>&1 + fi +} + +generate_private_key() +{ + local output_path="${1}" + if [[ ! -d "${output_path}" ]];then + mkdir -p ${output_path} + fi + if [[ ! -f /tmp/secp256k1.param ]];then + ${OPENSSL_CMD} ecparam -out /tmp/secp256k1.param -name secp256k1 + fi + ${OPENSSL_CMD} genpkey -paramfile /tmp/secp256k1.param -out ${output_path}/node.pem + # generate nodeid + ${OPENSSL_CMD} ec -text -noout -in "${output_path}/node.pem" 2> /dev/null | sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}' | cat >"$output_path"/node.nodeid +} + +generate_sm_private_key() +{ + local output_path="${1}" + if [[ ! -d "${output_path}" ]];then + mkdir -p ${output_path} + fi + + ${OPENSSL_CMD} genpkey -paramfile ${sm2_params} -out ${output_path}/node.pem 2>/dev/null + ${OPENSSL_CMD} ec -in "$output_path/node.pem" -text -noout 2> /dev/null | sed -n '7,11p' | sed 's/://g' | tr "\n" " " | sed 's/ //g' | awk '{print substr($0,3);}' | cat > "$output_path/node.nodeid" +} + +generate_account() +{ + local output_path="${1}" + generate_private_key "${output_path}" + + rm "${output_path}"/node.nodeid + # calculate address + calc_account_address "${output_path}/node.pem" + mv ${output_path}/node.pem ${output_path}/0x${account_address}.pem + + LOG_INFO "Private Key (pem) : ${output_path}/0x${account_address}.pem" + # echo "0x${privKey}" > ${output_path}/${account_address}.private.hex + "${OPENSSL_CMD}" ec -in ${output_path}/0x${account_address}.pem -pubout -out ${output_path}/0x${account_address}.pem.pub 2>/dev/null + LOG_INFO "Public Key (pem) : ${output_path}/0x${account_address}.pem.pub" +} + +generate_sm_account() +{ + local output_path="${1}" + generate_sm_private_key "${output_path}" + + rm "${output_path}"/node.nodeid + # calculate address + calc_sm_account_address "${output_path}/node.pem" + mv ${output_path}/node.pem ${output_path}/0x${account_address}_sm.pem + + LOG_INFO "Private Key (pem) : ${output_path}/0x${account_address}_sm.pem" + # echo "0x${privKey}" > ${output_path}/${account_address}.private.hex + "${OPENSSL_CMD}" ec -in ${output_path}/0x${account_address}_sm.pem -pubout -out ${output_path}/0x${account_address}_sm.pem.pub 2>/dev/null + LOG_INFO "Public Key (pem) : ${output_path}/0x${account_address}_sm.pem.pub" +} + +calc_account_address() +{ + local pem_file=$1 + local ret_address=$2 + local suffix=${pem_file##*.} + if [[ "${suffix}" != "pem" ]];then + echo "The suffix of ${pem_file} is not pem. Please check it." + exit 1 + fi + + local privKey=$(${OPENSSL_CMD} ec -in ${pem_file} -text -noout 2>/dev/null| sed -n '3,5p' | tr -d ": \n" | awk '{print $0}') + local pubKey=$(${OPENSSL_CMD} ec -in ${pem_file} -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}') + if [[ "$(uname -p)" == "aarch64" || ! -z "${force_aarch64}" ]];then + account_address=$("${calculate_address}" ${pubKey} | tail -c 41) + else + account_address=$(echo ${pubKey}| ${keccak_256_bin} -x -l | tr -d ' -' | tail -c 41) + fi + LOG_INFO "Account Address : 0x${account_address}" +} + +calc_sm_account_address() +{ + local pem_file="${1}" + local suffix=${pem_file##*.} + if [[ "${suffix}" != "pem" ]];then + echo "The suffix of ${pem_file} is not pem. Please check it." + exit 1 + fi + privKey=$(${OPENSSL_CMD} ec -in ${pem_file} -text -noout 2>/dev/null| sed -n '3,5p' | tr -d ": \n" | awk '{print $0}') + pubKey=$(${OPENSSL_CMD} ec -in ${pem_file} -text -noout 2>/dev/null| sed -n '7,11p' | tr -d ": \n" | awk '{print substr($0,3);}') + # echo "public key = ${pubKey}" + account_address=$(${sm3_bin} ${pubKey}) + LOG_INFO "Account Address : 0x${account_address}" +} + +exit_with_clean() +{ + local content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" + if [[ -d "${output_dir}" ]];then + rm -rf ${output_dir} + fi + exit 1 +} + +check_openssl() +{ + # Notice: The OpenSSL path is specified, OpenSSL 1.1.x is required + local openssl_cmd="${1}" + [ ! -z "$(${openssl_cmd} version | grep 1.1)" ] || { + LOG_FALT "Openssl 1.1.x is required, you should install openssl first Or use \"openssl version\" command to check whether the openssl version is suitable." + #echo "download openssl from https://www.openssl.org." + exit 1 + } +} + +prepare_sm3() +{ + mkdir -p "${fisco_path}" + if [[ ! -f ${sm3_bin} ]];then + if [[ "$(uname)" == "Darwin" ]];then + sm3_base64="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" + echo ${sm3_base64} | base64 -d > ${sm3_tar} + else + if [[ "$(uname -p)" == "aarch64" || ! -z "${force_aarch64}" ]];then + sm3_base64="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" + else + sm3_base64="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" + fi + echo ${sm3_base64} | base64 -d > ${sm3_tar} + fi + tar -zxf ${sm3_tar} -C "${fisco_path}" && rm ${sm3_tar} + if [[ -f ${sm3_bin} ]];then + chmod a+rx ${sm3_bin} + fi + if [[ "$(uname -p)" == "aarch64" || ! -z "${force_aarch64}" ]];then + sm3_bin="${fisco_path}/calculate_address -g" + chmod a+rx "${fisco_path}/calculate_address" + fi + fi +} + +prepare_keccak256() +{ + mkdir -p "${fisco_path}" + if [[ ! -f "${keccak_256_bin}" || ! -f "${calculate_address}" ]];then + if [[ "$(uname)" == "Darwin" ]];then + keccak256sum="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" + echo ${keccak256sum} | base64 -d > ${keccak_256_tar} + else + if [[ "$(uname -p)" == "aarch64" || ! -z "${force_aarch64}" ]];then + keccak256sum="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" + else + keccak256sum="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" + fi + echo ${keccak256sum} | base64 -d > ${keccak_256_tar} + fi + tar -zxf ${keccak_256_tar} -C "${fisco_path}" && rm ${keccak_256_tar} + if [[ -f ${keccak_256_bin} ]];then + chmod a+rx ${keccak_256_bin} + fi + fi +} + +prepare_tassl() +{ + if [[ -f "${OPENSSL_CMD}" ]];then + # LOG_INFO "TASSL has has been installed" + return + fi + + # https://en.wikipedia.org/wiki/Uname#Examples + local x86_64_name="x86_64" + local arm_name="aarch64" + local os_name="linux" + if [[ "$(uname)" == "Darwin" ]];then + x86_64_name="x86_64" + arm_name="arm64" + os_name="macOS" + fi + + local tassl_arch_name="x86_64" + local platform="$(uname -m)" + if [[ "${platform}" == "${arm_name}" ]];then + tassl_arch_name="aarch64" + elif [[ "${platform}" == "${x86_64_name}" ]];then + tassl_arch_name="x86_64" + else + LOG_FATAL "Unsupported platform ${platform} for ${os_name}" + exit 1 + fi + + local tassl_tgz_name="tassl-1.1.0.tar.gz" + mkdir -p "${fisco_path}" + + local tassl_tgz_base64="" + if [[ "$(uname)" == "Darwin" ]];then + # mac + tassl_tgz_base64="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" + echo ${tassl_tgz_base64} | base64 -d > ${tassl_tgz_name} + tar zxvf ${tassl_tgz_name} && rm ${tassl_tgz_name} + local mac_tassl_bin_name="tassl-1.1.1b-macOS-x86_64" + mv "${mac_tassl_bin_name}" "${tassl_path}" + chmod a+x "${tassl_path}" + else + # linux x64 & arm + if [[ "$(uname -p)" == "aarch64" || ! -z "${force_aarch64}" ]];then + tassl_tgz_base64="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DvZ2fa639+CT5rJvv/mDFc67n+796z/tW3H4L/d2fOayfSu23Djec/aKU7uM6Mu9Lxw53bnvuqDni9bB0vAtTu8dj5ZL37n7yZ6Xrj2l892vf6Lrrtvi7sfO+L/S0G96jZvuPL7v0eOO7Nr4+i9WHPXKn/TdP/mrFb033ViqXHxe73eTl1c88erzPftPvbnbW/jmiit3Pdz31vyxxiu39Q688w8HlldGv9b5jXs3Dj749kOl719ysPOy9Vcv/9HbH+h+qOvoPn/XgZWPPfBal/vAmmU/fPrPut53zIGVQ/dd1fnERSs73tm0d3Dzd2/vujV6oee58mvG+g91Dh560l09/sL+viO+t7I0uv+VgYvu+E3p8sW/MEor7f4f3ru+e/me/cZT117Uf+6/HNO1+fWOga/vua7n/k8MdT8VGV2fuuqW7hM+tqz/2l9Olozf3tPx08FTBza/9HTpx3seMZ566bTBf33mrY4bbpjtO7Q0WfrwyUcs3107quvAr98c+PxPr1/R//DkwOVf21va57/dvfbxv+89tPPLy489f13H0G0/700eN3vv/m195THPPti3yr6n62/vnVr+qj9qfOqe45Y9kf5l6Xx2XenGi2/oOPfOK1Z86gcfM87+Qti56pqvLmveur60ce8Tvb947DXj+7v3LN9//XPGr3YOdh1X/8rg3qc/aDw39cLK8I2Xem558TNdO5//52WnbL23VLo6HfjPj17fdfKr5WWXXHzLymPXP7LshUNu7r7hGxM9a8+5ZvBg/2sdq4Ln+54J0oGzjvAHbz/1i8bWiTtWfPIJe/CQObf08FcON16fuODWL+1bOPG8PT/6QrzP/+A16x6/bfLfp/a/eOJDl7+79Ods+e+Hzni1sjs6ukHSwBt8r//e+R38P/TfQ929d++y878089zP/ub2+7ac9vplFx7935898Znqyg1PHrw4fuSo2yYu33/zlvv+7phvRT8+eNc90+aqu0783zP/qXP09+3v95XXiRejNDydOfBnxAqd9MNOGzxpRD5n6LgVNVha5zhz3Lo161athmso2gmrtpOGsdUIXWYY23d//MzRIZZrP6h5AcMvy10MoKk5y6kzZ9aoeIFrcS6Vn1gM7IbnmBwy/dB2vaBmJs0oCuMU1j9ijlf1WGKmdWZGdlo305B+B2zeLE9tnpwqm0ndjplr+l4ltuNF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" + echo ${tassl_tgz_base64} | base64 -d > ${tassl_tgz_name} + tar zxvf ${tassl_tgz_name} 2> /dev/null && rm ${tassl_tgz_name} + local mac_tassl_bin_name="tassl-1.1.1b-linux-aarch64" + mv "${mac_tassl_bin_name}" "${tassl_path}" + chmod a+x "${tassl_path}" + else + tassl_tgz_base64="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sgv962+6etUzjz2w+b03Xtn9y49fH2wda/krsU/3TjnpZw51n3924fyLgt5br1uz7MmH7t309msvbj/y3ecftog8cbx/z67tssaOSHaeU5x76Wxf1Y1XrVz06P13rXv95V3bfvjqkwMx5j+PJZzRMc6eNmTQeVMKsucGZrrOPfftK9LTr9p/113f5f3559+RQ4bs+2vp0s/cx46Neenjjx+dOXVqh/z333+kprCwXWazZjteXreu37KffjrecevWQbe0axfResuWgUtvvbXizwsuuOHoe+9deP/mzQMW/PHHtvFxUDpbtdq+7557Nptbt84qyc1tW3rDDX2eTUjIru7SZdFtnTpFnlFRcfPfgcBth2JiMiba7ZPj3nzzt97jx1/99nPPHSouK7vp+LffXnzV3r1DTkye7LAOGtSsb4sW6QWPP/7jtLPO2vvzQw/d32358vLvrr7669rXXnvwcr+/m/fOO+9t0bfvyz/YYDRt3Ph99pQp1+8wmxfMu/zyDzcWFV23+/vvf2/z9tu168eOXf3wX3+dteummzaNjY8ff263blFdb7vtjjN//vlE8337Dp/16quB56ZP7zjpu++eKGrZcv4at3vqmMOHR+91uTpfevPNX17WocPSK8eMyQ9u2HBP9Pr1nj333XfBi5GRCxe//PLWi55/3v/olVe6j82c+d5DSUnL7/r88z87PfDANxNGj241JDFxYuWOHbO2Tpt2dsvZs2//9q23hn06Z84ZFWvX9n5k5MiWw+fOLe2zenXZT07ntJETJrxx7YoV6wZcc03Cg8uW9bznyJFLVx06dOa7Vsz5RYt63PHpp3NvOOOMxTcXF7/LJYFE584Tzj/vvCnNLrvs1s8LCvbffsstfZ/OySnukpKSd8mBA8N/jMZ8uf32Ly5esGCDrW3bF9/q1euVby666Jav7r332/R//nkmY8CAZRsmTXr9JpPJPq57990fHDw48sA77zzuvOKK9YM/+eTYwFdeOZJ25pmv/vr113/EL14848uSkvb2JUs2Jixc+PmMp57a0qGubnr/q666c2hNzY2/7d8/9Iuqqi4Bh6PE9NhjD3TOz7/ykz17Uv/YDsH+7ru/9khNvWLbCy88XLdmzUFfbW2854MPfklaufLTC554Ium62Nh5K268sfKfgQNf+mz+fOdBi2XX9k2b+q9etarXA/fff3fU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" + + echo ${tassl_tgz_base64} | base64 -d > ${tassl_tgz_name} + tar zxvf ${tassl_tgz_name} 2> /dev/null && rm ${tassl_tgz_name} + local mac_tassl_bin_name="tassl-1.1.1b-linux-x86_64" + mv "${mac_tassl_bin_name}" "${tassl_path}" + chmod a+x "${tassl_path}" + fi + fi +} + +help() { + echo $1 + cat < [Required] the operation sub command support list: + - generate_all_cert + - generate_ca_cert + - generate_node_cert + - generate_node_csr + - sign_node_csr + - generate_sdk_cert + - generate_sdk_csr + - sign_sdk_csr + - generate_private_key + - generate_account + - calc_account_address + -o [Optional] output directory default ./cert + -s [Optional] SM switch, default no + -i [Optional] optional input params + -d [Optional] ca certificate path, specify ca certificate path to generate node/sdk certificate + -l [Optional] list of ip for generate certificate or private key, working with generate_node_cert/generate_private_key + -p [Optional] additional arguments for some command + -h Help +EOF + exit 0 +} + +parse_params() { + while getopts "ap:o:d:c:sl:h" option; do + case $option in + a) force_aarch64="true" ;; + c) sub_command="$OPTARG";; + d) + ca_cert_path="$OPTARG" + dir_must_exists "${ca_cert_path}" + ;; + o) + output_dir="$OPTARG" + mkdir -p "$output_dir" + dir_must_exists "${output_dir}" + + account_output_dir="$OPTARG" + ;; + s) + sm_mode="true" + if [[ ! -f "${sm2_params}" ]];then + generate_sm_sm2_param ${sm2_params} + fi + + if [[ ! -f "${sm_cert_conf}" ]];then + generate_sm_cert_conf "${sm_cert_conf}" + fi + ;; + p) sub_cmd_param="$OPTARG" ;; + l) ip_params="$OPTARG" ;; + h) help ;; + *) help ;; + esac + done +} + +generate_all_cert(){ + LOG_INFO "generate all cert" + cert_dir="${output_dir}/ssl" + sdk_dir="${output_dir}/sdk" + mkdir -p "$ca_cert_path" + mkdir -p "$cert_dir" + mkdir -p "$sdk_dir" + generate_chain_cert "${sm_mode}" "${ca_cert_path}" + generate_single_node_cert "${sm_mode}" "${ca_cert_path}" "${cert_dir}" "ssl" + generate_single_node_cert "${sm_mode}" "${ca_cert_path}" "${sdk_dir}" "sdk" + LOG_INFO "generate all cert success" +} + +generate_ca_cert() +{ + LOG_INFO "generate ca cert" + mkdir -p "$ca_cert_path" + generate_chain_cert "${sm_mode}" "${ca_cert_path}" + LOG_INFO "generate ca cert success" +} + +generate_node_csr() +{ + LOG_INFO "generate node csr" + cert_dir="${output_dir}/ssl" + mkdir -p "$cert_dir" + generate_single_node_csr "${sm_mode}" "${cert_dir}" "ssl" + LOG_INFO "generate node csr success" +} + +sign_node_csr() +{ + LOG_INFO "sign node csr" + local csr_path="${sub_cmd_param}" + sign_single_node_csr "${sm_mode}" "${ca_cert_path}" "${csr_path}" "ssl" + LOG_INFO "sign node csr success" +} + +generate_node_cert() +{ + LOG_INFO "generate node cert" + cert_dir="${output_dir}/ssl" + mkdir -p "$cert_dir" + generate_single_node_cert "${sm_mode}" "${ca_cert_path}" "${cert_dir}" "ssl" + LOG_INFO "generate node cert success" +} + +generate_multi_nodes_cert() +{ + LOG_INFO "generate multi nodes cert, ip param: ${ip_params}" + generate_multi_nodes_cert_impl "${ca_cert_path}" "ssl" "${output_dir}" + LOG_INFO "generate multi nodes cert success" +} + +generate_sdk_cert() +{ + LOG_INFO "generate sdk cert" + sdk_dir="${output_dir}/sdk" + mkdir -p "$sdk_dir" + generate_single_node_cert "${sm_mode}" "${ca_cert_path}" "${sdk_dir}" "sdk" + LOG_INFO "generate node cert success" +} + +generate_sdk_csr() +{ + LOG_INFO "generate sdk csr" + cert_dir="${output_dir}/sdk" + mkdir -p "$cert_dir" + generate_single_node_csr "${sm_mode}" "${cert_dir}" "sdk" + LOG_INFO "generate sdk csr success" +} + +sign_sdk_csr() +{ + LOG_INFO "sign sdk csr" + local csr_path="${sub_cmd_param}" + sign_single_node_csr "${sm_mode}" "${ca_cert_path}" "${csr_path}" "sdk" + LOG_INFO "sign sdk csr success" +} + +generate_node_private_key() +{ + LOG_INFO "Generate node private key" + if [[ "${sm_mode}" == "false" ]]; then + generate_private_key "${output_dir}" + else + generate_sm_private_key "${output_dir}" + fi + LOG_INFO "Generate node private key success" +} + +generate_sdk_account() +{ + LOG_INFO "Generate account" + if [[ "${sm_mode}" == "false" ]]; then + generate_account "${account_output_dir}" + else + generate_sm_account "${account_output_dir}" + fi + LOG_INFO "Generate account success" +} + +calculate_acccount_address() +{ + # LOG_INFO "Calculate account" + local pem_file="${sub_cmd_param}" + if [[ "${sm_mode}" == "false" ]]; then + calc_account_address "${pem_file}" + else + calc_sm_account_address "${pem_file}" + fi + # LOG_INFO "Calculate account success" +} + +generate_multi_nodes_private_key() +{ + LOG_INFO "generate multi nodes private key, sm_mode: ${sm_mode}, ip param: ${ip_params}" + generate_multi_nodes_private_key_impl "${output_dir}" + LOG_INFO "generate multi nodes private key success" +} + +main() { + parse_params "$@" + prepare_tassl + prepare_keccak256 + prepare_sm3 + cert_conf="${output_dir}/cert.cnf" + if [[ -z "${ca_cert_path}" ]];then + ca_cert_path="${output_dir}/ca" + fi + if [[ "${sub_command}" == "generate_all_cert" ]]; then + generate_all_cert + elif [[ "${sub_command}" == "generate_ca_cert" ]]; then + generate_ca_cert + elif [[ "${sub_command}" == "generate_node_cert" ]]; then + if [[ -z ${ip_params} ]];then + generate_node_cert + else + generate_multi_nodes_cert + fi + elif [[ "${sub_command}" == "generate_node_csr" ]]; then + generate_node_csr + elif [[ "${sub_command}" == "sign_node_csr" ]]; then + sign_node_csr + elif [[ "${sub_command}" == "generate_sdk_cert" ]]; then + generate_sdk_cert + elif [[ "${sub_command}" == "generate_sdk_csr" ]]; then + generate_sdk_csr + elif [[ "${sub_command}" == "sign_sdk_csr" ]]; then + sign_sdk_csr + elif [[ "${sub_command}" == "generate_private_key" ]]; then + if [[ -z ${ip_params} ]];then + generate_node_private_key + else + generate_multi_nodes_private_key + fi + elif [[ "${sub_command}" == "generate_account" ]]; then + generate_sdk_account + elif [[ "${sub_command}" == "calc_account_address" ]]; then + calculate_acccount_address + else + LOG_FALT "Unsupported command" + fi +} + +main "$@" diff --git a/tools/BcosBuilder/src/scripts/mtail/node.mtail b/tools/BcosBuilder/src/scripts/mtail/node.mtail new file mode 100644 index 0000000..1f22299 --- /dev/null +++ b/tools/BcosBuilder/src/scripts/mtail/node.mtail @@ -0,0 +1,51 @@ +hidden text host +host = "${ip}" + +#node +hidden text node +node = "${node}" + +#chain id +hidden text chain +chain = "chain0" + +#group id +hidden text group +group = "group0" + + +gauge p2p_session_actived by host , node +/\[P2PService\]\[Service\]\[METRIC\]heartBeat,connected count=(?P\d+)/ { + p2p_session_actived[host][node] = \$count +} + +gauge block_exec_duration_milliseconds_gauge by chain , group , host , node +/\[CONSENSUS\]\[Core\]\[METRIC\]asyncExecuteBlock success.*?timeCost=(?P\d+)/ { + block_exec_duration_milliseconds_gauge[chain][group][host][node] = \$timeCost +} + +histogram block_exec_duration_milliseconds buckets 0, 50, 100, 150 by chain , group , host , node +/\[CONSENSUS\]\[Core\]\[METRIC\]asyncExecuteBlock success.*?timeCost=(?P\d+)/ { + block_exec_duration_milliseconds[chain][group][host][node] = \$timeCost +} + +gauge block_commit_duration_milliseconds_gauge by chain , group , host , node +/\[CONSENSUS\]\[PBFT\]\[STORAGE\]\[METRIC\]commitStableCheckPoint success.*?timeCost=(?P\d+)/ { + block_commit_duration_milliseconds_gauge[chain][group][host][node] = \$timeCost +} + + +histogram block_commit_duration_milliseconds buckets 0, 50, 100, 150 by chain , group , host , node +/\[CONSENSUS\]\[PBFT\]\[STORAGE\]\[METRIC\]commitStableCheckPoint success.*?timeCost=(?P\d+)/ { + block_commit_duration_milliseconds[chain][group][host][node] = \$timeCost +} + +gauge ledger_block_height by chain , group , host , node +/\[LEDGER\]\[METRIC\]asyncPrewriteBlock,number=(?P\d+)/ { + ledger_block_height[chain][group][host][node] = \$number +} + +gauge txpool_pending_tx_size by chain , group , host , node +/\[TXPOOL\]\[METRIC\]batchFetchTxs success,.*?pendingTxs=(?P\d+)/ { + txpool_pending_tx_size[chain][group][host][node] = \$pendingTxs +} diff --git a/tools/BcosBuilder/src/scripts/mtail/start_mtail_monitor.sh b/tools/BcosBuilder/src/scripts/mtail/start_mtail_monitor.sh new file mode 100644 index 0000000..c6fb0a9 --- /dev/null +++ b/tools/BcosBuilder/src/scripts/mtail/start_mtail_monitor.sh @@ -0,0 +1,44 @@ +#!/bin/bash +SHELL_FOLDER=$(cd $(dirname $0);pwd) + +LOG_ERROR() { + content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m[INFO] ${content}\033[0m" +} + +mtail=${SHELL_FOLDER}/mtail +mtailScript=${SHELL_FOLDER}/node.mtail +port=$1 +#logDir=$2 +export RUST_LOG=bcos_wasm=error +cd ${SHELL_FOLDER} +node=$(basename ${SHELL_FOLDER}) +node_pid=$(ps aux|grep ${mtail}|grep -v grep|awk '{print $2}') +if [ ! -z ${node_pid} ];then + echo " ${node} is Listening, pid is $node_pid." + exit 0 +else + nohup ${mtail} -logtostderr -progs ${mtailScript} -logs '../*.log' -port ${port} >>nohup.out 2>&1 & + sleep 1.5 +fi + +try_times=4 +i=0 +while [ $i -lt ${try_times} ] +do + node_pid=$(ps aux|grep ${mtail}|grep -v grep|awk '{print $2}') + success_flag=$(tail -n20 nohup.out | grep Listening) + if [[ ! -z ${node_pid} && ! -z "${success_flag}" ]];then + echo -e "\033[32m ${node} start successfully\033[0m" + exit 0 + fi + sleep 0.5 + ((i=i+1)) +done +echo -e "\033[31m Exceed waiting time. Please try again to start ${node} \033[0m" +tail -n20 nohup.out diff --git a/tools/BcosBuilder/src/scripts/mtail/stop_mtail_monitor.sh b/tools/BcosBuilder/src/scripts/mtail/stop_mtail_monitor.sh new file mode 100644 index 0000000..6661a10 --- /dev/null +++ b/tools/BcosBuilder/src/scripts/mtail/stop_mtail_monitor.sh @@ -0,0 +1,36 @@ +#!/bin/bash +SHELL_FOLDER=$(cd $(dirname $0);pwd) + +LOG_ERROR() { + content=${1} + echo -e "\033[31m[ERROR] ${content}\033[0m" +} + +LOG_INFO() { + content=${1} + echo -e "\033[32m[INFO] ${content}\033[0m" +} + +mtail=${SHELL_FOLDER}/mtail +node=$(basename ${SHELL_FOLDER}) +node_pid=$(ps aux|grep ${mtail}|grep -v grep|awk '{print $2}') +try_times=10 +i=0 +if [ -z ${node_pid} ];then + echo " ${node} isn't running." + exit 0 +fi +[ ! -z ${node_pid} ] && kill ${node_pid} > /dev/null + +while [ $i -lt ${try_times} ] +do + sleep 1 + node_pid=$(ps aux|grep ${mtail}|grep -v grep|awk '{print $2}') + if [ -z ${node_pid} ];then + echo -e "\033[32m stop ${node} success.\033[0m" + exit 0 + fi + ((i=i+1)) +done +echo " Exceed maximum number of retries. Please try again to stop ${node}" +exit 1 diff --git a/tools/BcosBuilder/src/service/key_center_service.py b/tools/BcosBuilder/src/service/key_center_service.py new file mode 100644 index 0000000..032c62a --- /dev/null +++ b/tools/BcosBuilder/src/service/key_center_service.py @@ -0,0 +1,69 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from common import utilities +import requests +import base64 +import json +import time +import os + + +class KeyCenterService: + """ + the key center service + """ + + def __init__(self, url, cipher_data_key): + if url.startswith("http://"): + self.url = url + else: + self.url = "http://%s" % url + self.cipher_data_key = cipher_data_key + + def encrypt_file(self, file_path): + utilities.log_info("encrypt %s with key center %s" % + (file_path, self.url)) + if os.path.exists(file_path) is False: + utilities.log_error("The file %s not exists!" % (file_path)) + return False + method = "encWithCipherKey" + params = [] + # read the file + with open(file_path) as cert_obj: + cert_data = str(base64.b64encode( + cert_obj.read().encode("utf-8")), "utf-8") + params.append(cert_data) + params.append(self.cipher_data_key) + payload = json.dumps({"jsonrpc": "2.0", "method": method, + "params": params, "id": 83}) + headers = {'content-type': "application/json"} + try: + response = requests.request( + "POST", self.url, data=payload, headers=headers) + response_data = response.json() + if "result" not in response_data or "dataKey" not in response_data["result"]: + utilities.log_error("encrypt %s with key center %s failed for error response: %s" % ( + file_path, self.url, response_data)) + return False + # backup the file_path + backup_file_path = "%s_%d.backup" % (file_path, time.time()) + utilities.log_info("backup the original file %s to %s" % + (file_path, backup_file_path)) + (ret, message) = utilities.execute_command_and_getoutput( + "cp %s %s" % (file_path, backup_file_path)) + if ret is False: + utilities.log_error("encrypt %s with key center %s failed for backup file failed, error: %s" % ( + file_path, self.url, message)) + return False + # write the encrypted content into file_path + cipher_file_data = response_data["result"]["dataKey"] + with open(file_path, "w") as f: + f.write(cipher_file_data) + utilities.log_info( + "encrypt %s with key center %s success" % (file_path, self.url)) + return True + + except Exception as e: + utilities.log_error("encrypt %s with key center %s failed, error info %s" % ( + file_path, self.url, e)) + return False diff --git a/tools/BcosBuilder/src/service/tars_service.py b/tools/BcosBuilder/src/service/tars_service.py new file mode 100644 index 0000000..a4728d5 --- /dev/null +++ b/tools/BcosBuilder/src/service/tars_service.py @@ -0,0 +1,551 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +from common import utilities +from common.utilities import ServiceInfo +from requests_toolbelt import MultipartEncoder +import requests +import uuid +import time +import os + + +class TarsService: + 'basic class to access the tars' + + def __init__(self, tars_url, tars_token, app_name, deploy_ip): + self.tars_url = tars_url + self.tars_token = tars_token + self.deploy_ip = deploy_ip + if self.tars_url.endswith('/') is False: + self.tars_url = self.tars_url + '/' + self.add_application_url = self.tars_url + 'api/add_application' + self.deploy_service_url = self.tars_url + 'api/deploy_server' + self.get_port_url = self.tars_url + 'api/auto_port' + self.add_config_url = self.tars_url + 'api/add_config_file' + self.update_config_url = self.tars_url + 'api/update_config_file' + # upload and publish the package + self.upload_package_url = self.tars_url + 'api/upload_patch_package' + self.add_task_url = self.tars_url + 'api/add_task' + self.get_server_list_url = self.tars_url + 'api/server_list' + self.config_file_list_url = self.tars_url + 'api/config_file_list' + self.node_config_file_list_url = self.tars_url + 'api/node_config_file_list' + self.get_server_patch_url = self.tars_url + "api/get_server_patch" + self.expand_server_preview_url = self.tars_url + "api/expand_server_preview" + self.expand_server_url = self.tars_url + "api/expand_server" + self.fetch_config_url = self.tars_url + "api/config_file" + self.app_name = app_name + self.token_param = {'ticket': self.tars_token} + + def create_application(self): + "create application" + if self.app_exists() is True: + # utilities.log_error( + # "application %s already exists" % self.app_name) + return False + utilities.log_debug("create application: %s" % self.app_name) + request_data = {'f_name': self.app_name} + response = requests.post( + self.add_application_url, params=self.token_param, data=request_data) + return TarsService.parse_response("create application " + self.app_name, response) + + def parse_response(operation, response): + if response.status_code != 200: + utilities.log_error("%s failed, error message: %s, error code: %d" % + (operation, response.content, response.status_code)) + return False + result = response.json() + error_msg = result['err_msg'] + if len(error_msg) > 0: + utilities.log_error("%s failed, error message: %s" % + (operation, error_msg)) + return False + return True + + def get_auto_port(self): + return self.get_node_auto_port(self.deploy_ip) + + def get_node_auto_port(self, node_name): + # get the auto_port + utilities.log_debug("get the un-occupied port") + params = {"node_name": node_name, "ticket": self.tars_token} + response = requests.get(self.get_port_url, params=params) + if TarsService.parse_response("get the un-occupied port", response) is False: + return (False, 0) + result = response.json() + if 'data' not in result: + utilities.log_error("get empty un-occupied port") + return (False, 0) + node_info = result['data'] + if len(node_info) <= 0: + utilities.log_error("get empty un-occupied port") + return (False, 0) + if 'port' not in node_info[0]: + utilities.log_error("get empty un-occupied port") + return (False, 0) + port = node_info[0]['port'] + utilities.log_debug( + "get the un-occupied port success, port: %s" % (port)) + return (True, int(port)) + + def deploy_single_service(self, service_name, obj_name_list, allow_duplicated): + "deploy single service" + if self.server_exists(service_name) is True and allow_duplicated is False: + utilities.log_error("service %s already exists." % service_name) + return False + utilities.log_info("deploy service %s" % service_name) + adapters = [] + for obj_name in obj_name_list: + # get the un-occupied port + (ret, port) = self.get_auto_port() + if ret is False: + utilities.log_error( + "deploy service %s failed for get un-occupied port failed" % service_name) + return False + adapters.append({"obj_name": obj_name, "port": port, "bind_ip": self.deploy_ip, "port_type": "tcp", + "thread_num": 8, "max_connections": 100000, "queuecap": 50000, "queuetimeout": 20000}) + request_data = {"application": self.app_name, "server_name": service_name, "node_name": self.deploy_ip, + "server_type": "tars_cpp", "template_name": "tars.cpp.default", 'adapters': adapters} + response = requests.post( + self.deploy_service_url, params=self.token_param, json=request_data) + if TarsService.parse_response("deploy service " + service_name, response) is False: + return False + return True + + def fetch_server_config_file(self, config_file_name, server_name): + (ret, config_id) = self.get_server_config_file_id( + config_file_name, server_name) + if ret is False: + utilities.log_error("fetch server config file failed, please check the existence of specified service, service: %s, config: %s" % + (server_name, config_file_name)) + return (False, "") + param = {"ticket": self.tars_token, "id": config_id} + response = requests.get(self.fetch_config_url, params=param) + if TarsService.parse_response("fetch service config " + server_name, response) is False: + return (False, "") + utilities.log_debug( + "fetch service config file success, response: %s" % response.content) + result = response.json() + if "data" not in result or "config" not in result["data"]: + utilities.log_error( + "fetch service config file failed, response %s" % response.content) + return (False, "") + return (True, result["data"]["config"]) + + def deploy_service_list(self, service_list, obj_list, allow_duplicated): + "deploy service list" + i = 0 + for service in service_list: + if self.deploy_single_service(service, obj_list[i], allow_duplicated) is False: + utilities.log_error("deploy service list failed, service list: %s" % + service_list) + return False + i = i + 1 + return True + + def get_level(server_name): + # service level + level = 5 + # app level + if len(server_name) == 0: + level = 1 + return level + + def add_server_config_file(self, deploy_ip, config_file_name, server_name, config_file_path, empty_server_config): + content = "\n" + if os.path.exists(config_file_path) is False: + utilities.log_error("add service config error:\n the config file %s doesn't exist, service: %s" % ( + config_file_path, server_name)) + return False + if empty_server_config is False: + try: + fp = open(config_file_path) + content = fp.read() + except OSError as reason: + utilities.log_error( + "load the configuration failed, error: %s" % str(reason)) + return False + request_data = {"level": TarsService.get_level(server_name), "application": self.app_name, "node_name": deploy_ip, + "server_name": server_name, "filename": config_file_name, "config": content} + response = requests.post( + self.add_config_url, params=self.token_param, json=request_data) + if TarsService.parse_response("add application config file", response) is False: + return False + if response.status_code != 200: + return False + return True + + def add_non_empty_server_config_file(self, deploy_ip, config_file_name, server_name, config_file_path): + "add server the config file" + utilities.log_debug("add config file for application %s, config file path: %s, service_name: %s" % ( + self.app_name, config_file_path, server_name)) + ret = self.add_server_config_file( + deploy_ip, config_file_name, server_name, config_file_path, False) + if ret is False: + ret = self.update_service_config( + config_file_name, server_name, "", config_file_path) + return ret + + def add_node_config_list(self, deploy_ip, config_list, service_name, config_file_list): + i = 0 + for config_file_path in config_file_list: + config = config_list[i] + if self.add_non_empty_server_config_file(deploy_ip, config, service_name, config_file_path) is False: + utilities.log_error("add_node_config_list failed, config files info: %s" % + config_list) + return False + i = i+1 + return True + + def add_config_file(self, config_file_name, server_name, node_name, config_file_path, empty_server_config): + "add the config file" + (ret, id) = self.get_server_config_file_id( + config_file_name, server_name) + if ret is False: + utilities.log_debug("add config file for application %s, config file path: %s, service_name: %s" % + (self.app_name, config_file_path, server_name)) + self.add_server_config_file( + "", config_file_name, server_name, config_file_path, empty_server_config) + (ret, id) = self.get_config_file_id( + config_file_name, server_name, node_name) + if ret is False: + utilities.log_debug("add config file for node: %s, app: %s, config: %s, service: %s" % + (node_name, self.app_name, config_file_path, server_name)) + self.add_server_config_file( + node_name, config_file_name, server_name, config_file_path, empty_server_config) + return self.update_service_config(config_file_name, server_name, node_name, config_file_path) + + def update_service_config(self, config_file_name, server_name, node_name, config_file_path): + utilities.log_debug("update config file for application %s, config file path: %s, node: %s" % + (self.app_name, config_file_path, node_name)) + if os.path.exists(config_file_path) is False: + utilities.log_error("update service config error:\n the config file %s doesn't exist, service: %s" % ( + config_file_path, server_name)) + return False + ret = True + config_id = 0 + if len(node_name) == 0: + (ret, config_id) = self.get_server_config_file_id( + config_file_name, server_name) + else: + ret, config_id = self.get_config_file_id( + config_file_name, server_name, node_name) + if ret is False: + return False + try: + fp = open(config_file_path) + content = fp.read() + except OSError as reason: + utilities.log_error( + "load the configuration failed, error: %s" % str(reason)) + request_data = {"id": config_id, "config": content, + "reason": "update config file"} + response = requests.post( + self.update_config_url, params=self.token_param, json=request_data) + if TarsService.parse_response("update config file for application " + self.app_name + ", config file:" + config_file_name, response) is False: + return False + return True + + def get_config_file_id(self, config_file_name, server_name, node_name): + (ret, server_config_id) = self.get_server_config_file_id( + config_file_name, server_name) + if ret is False: + return (False, 0) + params = {"ticket": self.tars_token, "config_id": server_config_id, "level": TarsService.get_level(server_name), "application": self.app_name, + "server_name": server_name, "set_name": "", "set_area": "", "set_group": ""} + response = requests.get(self.node_config_file_list_url, params=params) + if TarsService.parse_response("query the node config file id for " + config_file_name, response) is False: + return (False, 0) + result = response.json() + if "data" not in result or len(result["data"]) == 0: + utilities.log_debug("the config %s doesn't exist" % + (config_file_name)) + return (False, 0) + # try to find the config file info + for item in result["data"]: + if "filename" in item and item["filename"] == config_file_name and item["node_name"] == node_name: + return (True, item["id"]) + utilities.log_info("the node config file %s not found, node: %s, :%s:" % ( + config_file_name, node_name, str(result["data"]))) + return (False, 0) + + def get_server_config_file_id(self, config_file_name, server_name): + utilities.log_debug("query the config file id for %s" % + config_file_name) + params = {"ticket": self.tars_token, "level": TarsService.get_level(server_name), "application": self.app_name, + "server_name": server_name, "set_name": "", "set_area": "", "set_group": ""} + response = requests.get( + self.config_file_list_url, params=params) + if TarsService.parse_response("query the config file id for " + config_file_name, response) is False: + return (False, 0) + result = response.json() + if "data" not in result or len(result["data"]) == 0: + utilities.log_debug( + "the config file id not found for %s because of empty return data, response: %s" % (config_file_name, response.content)) + return (False, 0) + # try to find the config file info + for item in result["data"]: + if "filename" in item and item["filename"] == config_file_name: + utilities.log_debug("get_server_config_file_id, server: %s, config_id: %s" % ( + server_name, item["id"])) + return (True, item["id"]) + utilities.log_debug("the config file %s not found" % config_file_name) + return (False, 0) + + def add_config_list(self, config_list, service_name, node_name, config_file_list, empty_server_config): + i = 0 + for config_file_path in config_file_list: + config = config_list[i] + utilities.log_info( + "* add config for service %s, node: %s, config: %s" % (service_name, node_name, config)) + utilities.log_debug("add config for service %s, node: %s, config: %s, path: %s" % ( + service_name, node_name, config, config_file_path)) + if self.add_config_file(config, service_name, node_name, config_file_path, empty_server_config) is False: + utilities.log_error("add_config_list failed, config files info: %s" % + config_list) + return False + i = i+1 + return True + + def get_server_patch(self, task_id): + utilities.log_debug("get server patch, task_id: %s" % task_id) + params = {"task_id": task_id, "ticket": self.tars_token} + response = requests.get(self.get_server_patch_url, params=params) + if TarsService.parse_response("get server patch", response) is False: + return (False, "") + if response.status_code != 200: + return (False, "") + # get the id + result = response.json() + result_data = result['data'] + if 'id' not in result_data: + utilities.log_error( + "get_server_patch failed for empty return message") + return (False, "") + id = result_data['id'] + return (True, id) + + def upload_tars_package(self, service_name, package_path): + """ + upload the tars package + """ + package_name = service_name + ServiceInfo.tars_pkg_postfix + utilities.log_debug("upload tars package for service %s, package_path: %s, package_name: %s" % + (service_name, package_path, package_name)) + if os.path.exists(package_path) is False: + utilities.log_error("upload tars package for service %s failed for the path %s not exists" % ( + service_name, package_path)) + return (False, 0) + task_id = str(uuid.uuid4()) + form_data = MultipartEncoder(fields={"application": self.app_name, "task_id": task_id, "module_name": service_name, "comment": "upload package", "suse": ( + package_name, open(package_path, 'rb'), 'text/plain/binary')}) + + response = requests.post(self.upload_package_url, data=form_data, params=self.token_param, headers={ + 'Content-Type': form_data.content_type}) + if TarsService.parse_response("upload tars package " + package_path, response) is False: + return (False, 0) + # get the id + (ret, id) = self.get_server_patch(task_id) + if ret is True: + utilities.log_info( + "upload tar package %s success, config id: %s" % (package_path, id)) + return (ret, id) + + def get_server_info(self, tree_node_id): + params = {'tree_node_id': tree_node_id, "ticket": self.tars_token} + response = requests.get(self.get_server_list_url, params=params) + if TarsService.parse_response("get server info by tree node id: " + tree_node_id, response) is False: + utilities.log_error("get server info by tree node id for error response, tree_node_id: %s, msg: %s" % ( + tree_node_id, response.content)) + return (False, response) + return (True, response) + + def app_exists(self): + (ret, response) = self.get_server_info("1" + self.app_name) + if ret is False: + return False + result = response.json() + if 'data' in result and len(result["data"]) > 0: + return True + return False + + def server_exists(self, service_name): + (ret, server_id) = self.get_server_id(service_name, self.deploy_ip) + return ret + + def get_server_id(self, service_name, node_name): + # tree_node_id + tree_node_id = "1" + self.app_name + ".5" + service_name + (ret, response) = self.get_server_info(tree_node_id) + if ret is False: + return (False, 0) + if TarsService.parse_response("get server list ", response) is False: + utilities.log_error("get server info failed for error response, server name: %s, msg: %s" % ( + service_name, response.content)) + return (False, 0) + result = response.json() + if 'data' not in result: + return (False, 0) + server_infos = result['data'] + for item in server_infos: + if "node_name" in item and len(node_name) > 0 and item["node_name"] == node_name: + return (True, item["id"]) + if "id" in item and len(node_name) == 0: + return (True, item["id"]) + return (False, 0) + + def upload_and_publish_package(self, service_name, package_path): + """ + upload and publish the tars package + """ + # get the service info + (ret, server_id) = self.get_server_id(service_name, self.deploy_ip) + if ret is False: + utilities.log_error( + "upload and publish package failed for get the server info failed, server: %s" % service_name) + return False + # upload the tars package + (ret, patch_id) = self.upload_tars_package(service_name, package_path) + if ret is False: + return False + # patch tars + self.patch_tars(server_id, patch_id) + return True + + def expand_server_preview(self, server_name, node_name, expanded_node_list): + """ + expand the server preview + """ + utilities.log_info("expand_server_preview, app: %s, server_name: %s, expanded_node_list: %s" % ( + self.app_name, server_name, '.'.join(expanded_node_list))) + request_data = {"application": self.app_name, "server_name": server_name, "node_name": node_name, "set": "", "expand_nodes": expanded_node_list, + "enable_set": "false", "set_name": "", "set_area": "", "set_group": "", "copy_node_config": "false", "nodeName": []} + response = requests.post( + self.expand_server_preview_url, params=self.token_param, json=request_data) + if TarsService.parse_response("expand server preview", response) is False: + utilities.log_error("expand server preview for error response, server name: %s, msg: %s" % ( + server_name, response.content)) + return False + utilities.log_info("expand server preview response %s" % + response.content) + return True + + def expand_server(self, server_name, node_name, expanded_node_list, obj_list): + """ + expand the server + """ + utilities.log_info("expand_server, app: %s, server_name: %s" % ( + self.app_name, server_name)) + expand_servers_info = [] + for node in expanded_node_list: + for obj in obj_list: + (ret, port) = self.get_node_auto_port(node) + if ret is False: + utilities.log_error( + "expand server failed for get node auto port failed, server: %s, node: %s" % (server_name, node)) + return False + node_info = {"bind_ip": node, "node_name": node, + "obj_name": obj, "port": port, "set": ""} + expand_servers_info.append(node_info) + request_data = {"application": self.app_name, "server_name": server_name, "set": "", "node_name": node_name, + "copy_node_config": "false", "expand_preview_servers": expand_servers_info} + response = requests.post( + self.expand_server_url, params=self.token_param, json=request_data) + if TarsService.parse_response("expand server", response) is False: + utilities.log_error("expand server for error response, server name: %s, msg: %s" % ( + server_name, response.content)) + return False + utilities.log_info("expand server response %s" % response.content) + return True + + def expand_server_with_preview(self, server_name, node_name, expanded_node_list, obj_list): + ret = self.expand_server_preview( + server_name, node_name, expanded_node_list) + if ret is False: + utilities.log_error("expand server failed for expand preview failed, app: %s, server: %s, expanded_node_list: %s" % ( + self.app_name, server_name, '.'.join(expanded_node_list))) + return False + return self.expand_server(server_name, node_name, expanded_node_list, obj_list) + + def patch_tars(self, server_id, patch_id): + utilities.log_debug("patch tars for application %s, server_id: %s, patch_id: %s" % ( + self.app_name, server_id, patch_id)) + items = [{"server_id": server_id, "command": "patch_tars", "parameters": { + "patch_id": patch_id, "bak_flag": 'false', "update_text": "", "group_name": ""}}] + request_data = {"serial": 'true', "items": items} + response = requests.post( + self.add_task_url, params=self.token_param, json=request_data) + if TarsService.parse_response("patch tars ", response) is False: + utilities.log_error("patch tars failed for error response, server id: %s, msg: %s" % ( + server_id, response.content)) + return False + utilities.log_debug("patch tars response %s" % response.content) + return True + + def add_task(self, service_name, command): + """ + current supported commands are: stop, restart, undeploy_tars, patch_tars + """ + utilities.log_debug("add_task for service %s, command is %s" % + (service_name, command)) + (ret, server_id) = self.get_server_id(service_name, self.deploy_ip) + if ret is False: + utilities.log_error("%s failed for get server id failed, please check the existence of %s" % ( + command, service_name)) + return False + items = [{"server_id": server_id, "command": command, "parameters": {}}] + request_data = {"serial": 'true', "items": items} + response = requests.post( + self.add_task_url, params=self.token_param, json=request_data) + if TarsService.parse_response("execute command " + command, response) is False: + utilities.log_error("add_task failed for error response, server name: %s, msg: %s" % ( + service_name, response.content)) + return False + return True + + def stop_server(self, service_name): + """ + stop the givn service + """ + return self.add_task(service_name, "stop") + + def stop_server_list(self, server_list): + for server in server_list: + if self.stop_server(server) is False: + return False + return True + + def restart_server(self, service_name): + """ + restart the given service + """ + return self.add_task(service_name, "restart") + + def undeploy_tars(self, service_name): + """ + undeploy the tars service + """ + return self.add_task(service_name, "undeploy_tars") + + def undeploy_server_list(self, server_list): + for server in server_list: + if self.undeploy_tars(server) is False: + return False + return True + + def restart_server_list(self, server_list): + for server in server_list: + if self.restart_server(server) is False: + return False + time.sleep(5) + return True + + def get_service_list(self): + return self.get_server_info("1" + self.app_name) + + def upload_and_publish_package_list(self, service_list, service_path_list): + i = 0 + for service in service_list: + service_path = service_path_list[i] + self.upload_and_publish_package(service, service_path) + i = i+1 + time.sleep(10) diff --git a/tools/BcosBuilder/src/tpl/config.genesis b/tools/BcosBuilder/src/tpl/config.genesis new file mode 100644 index 0000000..6d2a187 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/config.genesis @@ -0,0 +1,33 @@ +[chain] + ; use SM crypto or not, should never be changed + sm_crypto=false + ; the group id, should never be changed + group_id=group0 + ; the chain id, should never be changed + chain_id=chain0 +[consensus] + ; consensus algorithm now support PBFT(consensus_type=pbft) + consensus_type=pbft + ; the max number of transactions of a block + block_tx_count_limit=1000 + ; the number of blocks generated by each leader + leader_period=100 + ; the node id of consensusers + node.0= + +[version] + ; compatible version, can be dynamically upgraded through setSystemConfig + compatibility_version=3.2.0 + +[tx] + ; transaction gas limit + gas_limit=3000000000 + +[executor] + ; use the wasm virtual machine or not, default use evm + is_wasm = false + ; enable auth_check or not, default disable + is_auth_check=false + auth_admin_account= + ; enable serial execute or not, default use parallel + is_serial_execute=true diff --git a/tools/BcosBuilder/src/tpl/config.ini.executor b/tools/BcosBuilder/src/tpl/config.ini.executor new file mode 100644 index 0000000..48330ad --- /dev/null +++ b/tools/BcosBuilder/src/tpl/config.ini.executor @@ -0,0 +1,27 @@ +[chain] + ; use SM crypto or not, should never be changed + sm_crypto=false + ; the group id, should never be changed + group_id=group0 + ; the chain id, should never be changed + chain_id=chain0 +[service] + scheduler=chain0 + + ; run without tars framework + ; without_tars_framework = true + ; tars_proxy_conf = conf/tars_proxy.ini + +[storage] + enable_cache=true + pd_addrs= + key_page_size=10240 + +[log] + enable=true + log_path=./log + ; info debug trace + level=info + ; MB + max_log_file_size=200 + diff --git a/tools/BcosBuilder/src/tpl/config.ini.gateway b/tools/BcosBuilder/src/tpl/config.ini.gateway new file mode 100644 index 0000000..bcfda14 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/config.ini.gateway @@ -0,0 +1,85 @@ +[p2p] + listen_ip=0.0.0.0 + listen_port=30300 + ; ssl or sm ssl + sm_ssl=false + nodes_path=./ + nodes_file=nodes.json + +[certificate_blacklist] + ; crl.0 should be nodeid, nodeid's length is 512 + ;crl.0= + +[certificate_whitelist] + ; cal.0 should be nodeid, nodeid's length is 512 + ;cal.0= + +[service] + ;rpc=chain0 + + ; run without tars framework + ; without_tars_framework = true + ; tars_proxy_conf = conf/tars_proxy.ini + +[cert] + ; directory the certificates located in + ca_path=./conf + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + node_key=ssl.key + ; the node certificate file + node_cert=ssl.crt + +[chain] + ; use SM crypto or not, should never be changed + sm_crypto=false + chain_id=chain0 + +[storage_security] + ; enable data disk encryption or not, default is false + enable=false + ; url of the key center, in format of ip:port + ;key_center_url= + ;cipher_data_key= + +[failover] + ; enable failover or not, default disable + enable = false + ; the address of etcd, can configure multiple comma-separated + cluster_url= "127.0.0.1:2379" + +[flow_control] + ; the module that does not limit bandwidth + ; list of all modules: raft,pbft,amop,block_sync,txs_sync,light_node,cons_txs_sync + + ; modules_without_bw_limit=raft,pbft,cons_txs_sync + + ; restrict the outgoing bandwidth of the node + ; both integer and decimal is supported for the node, unit: Mb + ; total_outgoing_bw_limit=10 + + ; restrict the outgoing bandwidth of the the connection + ; both integer and decimal is supported for the connection, unit: Mb + ; conn_outgoing_bw_limit=2 + + ; specify IP to limit bandwidth, format: conn_outgoing_bw_limit_x.x.x.x=n + ; conn_outgoing_bw_limit_192.108.0.1=3 + ; conn_outgoing_bw_limit_192.108.0.2=3 + ; conn_outgoing_bw_limit_192.108.0.3=3 + + ; default bandwidth limit for the group + ; group_outgoing_bw_limit=2 + + ; specify group to limit bandwidth, group_outgoing_bw_limit_groupName=n + ; group_outgoing_bw_limit_group0=2 + ; group_outgoing_bw_limit_group1=2 + ; group_outgoing_bw_limit_group2=2 + +[log] + enable=true + log_path=./log + ; info debug trace + level=info + ; MB + max_log_file_size=200 diff --git a/tools/BcosBuilder/src/tpl/config.ini.node b/tools/BcosBuilder/src/tpl/config.ini.node new file mode 100644 index 0000000..e89bd02 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/config.ini.node @@ -0,0 +1,57 @@ +[service] + rpc=chain0 + gateway=chain0 + + ; run without tars framework + ; without_tars_framework = true + ; tars_proxy_conf = conf/tars_proxy.ini + +[security] + private_key_path=conf/node.pem + +[storage_security] + ; enable data disk encryption or not, default is false + enable=false + ; url of the key center, in format of ip:port + ;key_center_url= + ;cipher_data_key= + +[consensus] + ; min block generation time(ms) + min_seal_time=500 + +[storage] + data_path=data + enable_cache=true + type=RocksDB + pd_addrs= + key_page_size=10240 + +[txpool] + ; size of the txpool, default is 15000 + limit=15000 + ; txs notification threads num, default is 2 + notify_worker_num=2 + ; txs verification threads num, default is the number of CPU cores + ;verify_worker_num=2 + ; txs expiration time, in seconds, default is 10 minutes + txs_expiration_time = 600 + +[failover] + ; enable failover or not, default disable + enable = false + ; the uuid that uniquely identifies the node + member_id= + ; failover time, in seconds, default is 3s + lease_ttl=3 + ; the address of etcd, can configure multiple comma-separated + cluster_url=127.0.0.1:2379 + +[log] + enable=true + log_path=./log + ; info debug trace + level=info + ; MB + max_log_file_size=200 + diff --git a/tools/BcosBuilder/src/tpl/config.ini.rpc b/tools/BcosBuilder/src/tpl/config.ini.rpc new file mode 100644 index 0000000..2af78bf --- /dev/null +++ b/tools/BcosBuilder/src/tpl/config.ini.rpc @@ -0,0 +1,46 @@ +[rpc] + listen_ip=0.0.0.0 + listen_port=20200 + thread_count=4 + sm_ssl=false + ; ssl connection switch, if disable the ssl connection, default: false + ;disable_ssl=true + +[service] + ;gateway=chain0 + +[chain] + ; use SM crypto or not, should never be changed + sm_crypto=false + chain_id=chain0 + +[cert] + ; directory the certificates located in + ca_path=./conf + ; the ca certificate file + ca_cert=ca.crt + ; the node private key file + node_key=ssl.key + ; the node certificate file + node_cert=ssl.crt + +[storage_security] + ; enable data disk encryption or not, default is false + enable=false + ; url of the key center, in format of ip:port + ;key_center_url= + ;cipher_data_key= + +[failover] + ; enable failover or not, default disable + enable = false + ; the address of etcd, can configure multiple comma-separated + cluster_url= "127.0.0.1:2379" + +[log] + enable=true + log_path=./log + ; info debug trace + level=info + ; MB + max_log_file_size=200 \ No newline at end of file diff --git a/tools/BcosBuilder/src/tpl/tars_executor.conf b/tools/BcosBuilder/src/tpl/tars_executor.conf new file mode 100644 index 0000000..1c483a0 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_executor.conf @@ -0,0 +1,40 @@ + + + enableset=n + setdivision=NULL + + app=@TARS_APP@ + server=@TARS_SERVER@ + localip=127.0.0.1 + basepath=./conf/ + datapath=./.data/ + logpath=./log + logsize=100M + lognum=10 + logLevel=INFO + deactivating-timeout=3000 + activating-timeout=10000 + opencoroutine=0 + coroutinememsize=1G + coroutinestack=128K + closecout=0 + netthread=4 + <@TARS_APP@.@TARS_SERVER@.ExecutorServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @EXECUTOR_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.ExecutorServiceObj + threads=8 + + + + sync-invoke-timeout=3000 + async-invoke-timeout=5000 + asyncthread=8 + modulename=@TARS_APP@.@TARS_SERVER@ + + + diff --git a/tools/BcosBuilder/src/tpl/tars_gateway.conf b/tools/BcosBuilder/src/tpl/tars_gateway.conf new file mode 100644 index 0000000..78b9033 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_gateway.conf @@ -0,0 +1,40 @@ + + + enableset=n + setdivision=NULL + + app=@TARS_APP@ + server=@TARS_SERVER@ + localip=127.0.0.1 + basepath=./conf/ + datapath=./.data/ + logpath=./log/ + logsize=100M + lognum=10 + logLevel=INFO + deactivating-timeout=3000 + activating-timeout=10000 + opencoroutine=0 + coroutinememsize=1G + coroutinestack=128K + closecout=0 + netthread=4 + <@TARS_APP@.@TARS_SERVER@.GatewayServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @TARS_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.GatewayServiceObj + threads=8 + + + + sync-invoke-timeout=3000 + async-invoke-timeout=5000 + asyncthread=8 + modulename=@TARS_APP@.@TARS_SERVER@ + + + diff --git a/tools/BcosBuilder/src/tpl/tars_node.conf b/tools/BcosBuilder/src/tpl/tars_node.conf new file mode 100644 index 0000000..477ab1d --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_node.conf @@ -0,0 +1,80 @@ + + + enableset=n + setdivision=NULL + + app=@TARS_APP@ + server=@TARS_SERVER@ + localip=127.0.0.1 + basepath=./conf/ + datapath=./.data/ + logpath=./log + logsize=100M + lognum=10 + logLevel=INFO + deactivating-timeout=3000 + activating-timeout=10000 + opencoroutine=0 + coroutinememsize=1G + coroutinestack=128K + closecout=0 + netthread=4 + <@TARS_APP@.@TARS_SERVER@.TxPoolServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @TXPOOL_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.TxPoolServiceObj + threads=8 + + <@TARS_APP@.@TARS_SERVER@.SchedulerServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @SCHEDULER_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.SchedulerServiceObj + threads=8 + + <@TARS_APP@.@TARS_SERVER@.PBFTServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @PBFT_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.PBFTServiceObj + threads=8 + + <@TARS_APP@.@TARS_SERVER@.LedgerServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @LEDGER_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.LedgerServiceObj + threads=8 + + <@TARS_APP@.@TARS_SERVER@.FrontServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @FRONT_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.FrontServiceObj + threads=8 + + + + sync-invoke-timeout=3000 + async-invoke-timeout=5000 + asyncthread=8 + modulename=@TARS_APP@.@TARS_SERVER@ + + + diff --git a/tools/BcosBuilder/src/tpl/tars_rpc.conf b/tools/BcosBuilder/src/tpl/tars_rpc.conf new file mode 100644 index 0000000..264b42a --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_rpc.conf @@ -0,0 +1,40 @@ + + + enableset=n + setdivision=NULL + + app=@TARS_APP@ + server=@TARS_SERVER@ + localip=127.0.0.1 + basepath=./conf/ + datapath=./.data/ + logpath=./log/ + logsize=100M + lognum=5 + logLevel=INFO + deactivating-timeout=3000 + activating-timeout=10000 + opencoroutine=0 + coroutinememsize=1G + coroutinestack=128K + closecout=0 + netthread=4 + <@TARS_APP@.@TARS_SERVER@.RpcServiceObjAdapter> + allow + endpoint=tcp -h @TARS_LISTEN_IP@ -p @TARS_LISTEN_PORT@ -t 60000 + maxconns=100000 + protocol=tars + queuecap=50000 + queuetimeout=20000 + servant=@TARS_APP@.@TARS_SERVER@.RpcServiceObj + threads=8 + + + + sync-invoke-timeout=3000 + async-invoke-timeout=5000 + asyncthread=8 + modulename=@TARS_APP@.@TARS_SERVER@ + + + diff --git a/tools/BcosBuilder/src/tpl/tars_start.sh b/tools/BcosBuilder/src/tpl/tars_start.sh new file mode 100644 index 0000000..b46f96f --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_start.sh @@ -0,0 +1,33 @@ +#!/bin/bash +dirpath="$(cd "$(dirname "$0")" && pwd)" +cd ${dirpath} + +service_name='@SERVICE_NAME@' +service=${dirpath}/${service_name} + +pid=$(ps aux|grep ${service}|grep -v grep|awk '{print $2}') +name=$(basename ${dirpath}) + +if [ ! -z ${pid} ];then + echo " ${name} is running, pid is ${pid}." + exit 0 +else + nohup ${service} --config=conf/tars.conf >>nohup.out 2>&1 & + sleep 1.5 +fi + +try_times=4 +i=0 +while [ $i -lt ${try_times} ] +do + pid=$(ps aux|grep ${service}|grep -v grep|awk '{print $2}') + if [[ ! -z ${pid} ]];then + echo -e "\033[32m ${name} start successfully pid=${pid}\033[0m" + exit 0 + fi + sleep 0.5 + ((i=i+1)) +done +echo -e "\033[31m Exceed waiting time. Please try again to start ${name} \033[0m" +tail -n20 nohup.out + diff --git a/tools/BcosBuilder/src/tpl/tars_start_all.sh b/tools/BcosBuilder/src/tpl/tars_start_all.sh new file mode 100644 index 0000000..530631f --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_start_all.sh @@ -0,0 +1,14 @@ +#!/bin/bash +dirpath="$(cd "$(dirname "$0")" && pwd)" +cd "${dirpath}" + +dirs=($(ls -l ${dirpath} | awk '/^d/ {print $NF}')) +for dir in ${dirs[*]} +do + if [[ -f "${dirpath}/${dir}/conf/config.ini" && -f "${dirpath}/${dir}/start.sh" ]];then + echo "try to start ${dir}" + bash ${dirpath}/${dir}/start.sh & + fi +done +wait + diff --git a/tools/BcosBuilder/src/tpl/tars_stop.sh b/tools/BcosBuilder/src/tpl/tars_stop.sh new file mode 100644 index 0000000..ab667e0 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_stop.sh @@ -0,0 +1,30 @@ +#!/bin/bash +dirpath="$(cd "$(dirname "$0")" && pwd)" +cd ${dirpath} + +service_name='@SERVICE_NAME@' +service=${dirpath}/${service_name} + +pid=$(ps aux|grep ${service}|grep -v grep|awk '{print $2}') + +if [ -z ${pid} ];then + echo " ${service_name} isn't running." + exit 0 +fi + +kill ${pid} > /dev/null + +i=0 +try_times=10 +while [ $i -lt ${try_times} ] +do + sleep 1 + pid=$(ps aux|grep ${service}|grep -v grep|awk '{print $2}') + if [ -z ${pid} ];then + echo -e "\033[32m stop ${service_name} success.\033[0m" + exit 0 + fi + ((i=i+1)) +done +echo " Exceed maximum number of retries. Please try again to stop ${service_name}" +exit 1 diff --git a/tools/BcosBuilder/src/tpl/tars_stop_all.sh b/tools/BcosBuilder/src/tpl/tars_stop_all.sh new file mode 100644 index 0000000..10f2978 --- /dev/null +++ b/tools/BcosBuilder/src/tpl/tars_stop_all.sh @@ -0,0 +1,14 @@ +#!/bin/bash +dirpath="$(cd "$(dirname "$0")" && pwd)" +cd "${dirpath}" + +dirs=($(ls -l ${dirpath} | awk '/^d/ {print $NF}')) +for dir in ${dirs[*]} +do + if [[ -f "${dirpath}/${dir}/conf/config.ini" && -f "${dirpath}/${dir}/stop.sh" ]];then + echo "try to stop ${dir}" + bash ${dirpath}/${dir}/stop.sh + fi +done +wait + diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 0000000..dcdc774 --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,5 @@ + +if(TOOLS) + add_subdirectory(archive-tool) + add_subdirectory(storage-tool) +endif() diff --git a/tools/archive-tool/ArchiveService.h b/tools/archive-tool/ArchiveService.h new file mode 100644 index 0000000..c871a52 --- /dev/null +++ b/tools/archive-tool/ArchiveService.h @@ -0,0 +1,315 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief service for archive + * @file ArchiveService.h + * @author: xingqiangbai + * @date 2022-11-09 + */ +#pragma once +#include "bcos-boostssl/bcos-boostssl/httpserver/HttpServer.h" +#include "bcos-boostssl/bcos-boostssl/httpserver/HttpStream.h" +#include "bcos-framework/bcos-framework/protocol/Transaction.h" +#include "bcos-framework/bcos-framework/protocol/TransactionReceipt.h" +#include "bcos-framework/protocol/Transaction.h" +#include "bcos-ledger/src/libledger/Ledger.h" +#include "bcos-rpc/bcos-rpc/jsonrpc/Common.h" +#include "bcos-rpc/bcos-rpc/jsonrpc/JsonRpcInterface.h" +#include +#include +#include +#include +#include +#include + +#define ARCHIVE_SERVICE_LOG(LEVEL) BCOS_LOG(LEVEL) << "[ARCHIVE]" + +namespace bcos::archive +{ +const std::string ARCHIVE_MODULE_NAME = "ArchiveService"; +class ArchiveService : public std::enable_shared_from_this +{ +public: + virtual ~ArchiveService() = default; + ArchiveService(bcos::storage::StorageInterface::Ptr _storage, + std::shared_ptr _ledger, std::string _listenIP, uint16_t _listenPort) + : m_storage(std::move(_storage)), + m_ledger(std::move(_ledger)), + m_listenIP(std::move(_listenIP)), + m_listenPort(_listenPort) + { + m_ioServicePool = std::make_shared(); + m_httpServer = std::make_shared( + m_listenIP, m_listenPort, ARCHIVE_MODULE_NAME); + auto acceptor = + std::make_shared((*m_ioServicePool->getIOService())); + auto httpStreamFactory = std::make_shared(); + m_httpServer->setDisableSsl(true); + m_httpServer->setAcceptor(acceptor); + m_httpServer->setHttpStreamFactory(httpStreamFactory); + m_httpServer->setIOServicePool(m_ioServicePool); + // m_httpServer->setThreadPool(std::make_shared("archiveThread", 1)); + m_methodToFunc["deleteArchivedData"] = [this](const Json::Value& request, + const std::function& callback) { + auto startBlock = request[0].asInt64(); + auto endBlock = request[1].asInt64(); + std::promise> promise; + m_ledger->asyncGetBlockNumber( + [&promise](const Error::Ptr& err, bcos::protocol::BlockNumber number) { + promise.set_value(std::make_pair(err, number)); + }); + auto ret = promise.get_future().get(); + Json::Value result; + if (ret.first) + { + result["status"] = "error, get block number failed, " + ret.first->errorMessage(); + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData GetBlockNumber failed") + << LOG_KV("message", ret.first->errorMessage()); + callback(nullptr, result); + return; + } + auto currentBlock = ret.second; + if (startBlock > currentBlock || endBlock > currentBlock || startBlock > endBlock || + startBlock <= 0) + { + result["status"] = "error, invalid block range"; + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData invalid range") << LOG_KV("start", startBlock) + << LOG_KV("end", endBlock) << LOG_KV("current", currentBlock); + callback(nullptr, result); + return; + } + // read archived block number to check the request range + std::promise>> statePromise; + m_ledger->asyncGetCurrentStateByKey(ledger::SYS_KEY_ARCHIVED_NUMBER, + [&statePromise](Error::Ptr&& err, std::optional&& entry) { + statePromise.set_value(std::make_pair(err, entry)); + }); + auto archiveRet = statePromise.get_future().get(); + if (archiveRet.first) + { + result["status"] = + "error, get current state failed, " + archiveRet.first->errorMessage(); + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData get current state failed") + << LOG_KV("message", archiveRet.first->errorMessage()); + callback(nullptr, result); + return; + } + protocol::BlockNumber archivedBlockNumber = 0; + if (archiveRet.second) + { + try + { + archivedBlockNumber = boost::lexical_cast(archiveRet.second->get()); + } + catch (boost::bad_lexical_cast& e) + { + ARCHIVE_SERVICE_LOG(DEBUG) + << "Lexical cast transaction count failed, entry value: " + << archiveRet.second->get(); + } + } + if (archivedBlockNumber > 0 && startBlock != archivedBlockNumber) + { + result["status"] = "error, start block is not equal to archived block, " + + std::to_string(startBlock) + + " != " + std::to_string(archivedBlockNumber); + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData start block is not equal to archived block") + << LOG_KV("startBlock", startBlock) + << LOG_KV("archivedNumber", archivedBlockNumber); + callback(nullptr, result); + return; + } + auto err = deleteArchivedData(startBlock, endBlock); + if (err) + { + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData failed") << LOG_KV("start", startBlock) + << LOG_KV("end", endBlock) << LOG_KV("message", err->errorMessage()); + result["status"] = "deleteArchivedData failed, " + err->errorMessage(); + callback(nullptr, result); + } + else + { + ARCHIVE_SERVICE_LOG(INFO) << LOG_BADGE("deleteArchivedData success") + << LOG_KV("start", startBlock) << LOG_KV("end", endBlock); + result["status"] = "success"; + // update SYS_CURRENT_STATE SYS_KEY_ARCHIVED_NUMBER + storage::Entry archivedNumber; + archivedNumber.importFields({std::to_string(endBlock)}); + m_storage->asyncSetRow(ledger::SYS_CURRENT_STATE, ledger::SYS_KEY_ARCHIVED_NUMBER, + archivedNumber, [](Error::UniquePtr err) { + if (err) + { + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData set archived number failed") + << LOG_KV("message", err->errorMessage()); + } + }); + callback(nullptr, result); + } + }; + // TODO: should call compaction + m_httpServer->setHttpReqHandler([this](auto&& PH1, auto&& PH2) { + handleHttpRequest(std::forward(PH1), std::forward(PH2)); + }); + } + + // virtual ~ArchiveService() = default; + virtual void start() + { + m_ioServicePool->start(); + m_httpServer->start(); + ARCHIVE_SERVICE_LOG(INFO) << LOG_BADGE("start") << LOG_KV("listenIP", m_listenIP) + << LOG_KV("listenPort", m_listenPort); + } + + virtual void stop() + { + ARCHIVE_SERVICE_LOG(INFO) << LOG_BADGE("stop"); + m_ioServicePool->stop(); + m_httpServer->stop(); + } + + Error::Ptr deleteArchivedData(int64_t startBlock, int64_t endBlock) + { + auto blockFlag = bcos::ledger::HEADER; + for (int64_t blockNumber = startBlock; blockNumber < endBlock; blockNumber++) + { + std::promise promise; + m_ledger->asyncGetBlockTransactionHashes( + blockNumber, [&](Error::Ptr&& error, std::vector&& txHashes) { + if (error) + { + std::cerr << "get block failed: " << error->errorMessage(); + promise.set_value(error); + return; + } + ARCHIVE_SERVICE_LOG(INFO) + << LOG_BADGE("deleteArchivedData") << LOG_KV("number", blockNumber) + << LOG_KV("size", txHashes.size()); + // delete block data: txs, receipts + auto err = m_storage->deleteRows(ledger::SYS_HASH_2_TX, txHashes); + if (err) + { + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("delete transactions") << LOG_KV("number", blockNumber) + << LOG_KV("message", err->errorMessage()); + promise.set_value(error); + return; + } + err = m_storage->deleteRows(ledger::SYS_HASH_2_RECEIPT, txHashes); + if (err) + { + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("delete receipts") << LOG_KV("number", blockNumber) + << LOG_KV("message", err->errorMessage()); + promise.set_value(error); + return; + } + promise.set_value(nullptr); + }); + auto error = promise.get_future().get(); + if (error) + { + ARCHIVE_SERVICE_LOG(WARNING) + << LOG_BADGE("deleteArchivedData failed") << LOG_KV("number", blockNumber) + << LOG_KV("message", error->errorMessage()); + return error; + } + } + return nullptr; + } + + void handleHttpRequest(std::string_view _requestBody, std::function _sender) + { + bcos::rpc::JsonRequest request; + bcos::rpc::JsonResponse response; + try + { + bcos::rpc::parseRpcRequestJson(_requestBody, request); + + response.jsonrpc = request.jsonrpc; + response.id = request.id; + + const auto& method = request.method; + auto it = m_methodToFunc.find(method); + if (it == m_methodToFunc.end()) + { + ARCHIVE_SERVICE_LOG(DEBUG) << LOG_BADGE("handleHttpRequest method not found") + << LOG_KV("request", _requestBody); + BOOST_THROW_EXCEPTION( + bcos::rpc::JsonRpcException(bcos::rpc::JsonRpcError::MethodNotFound, + "The method does not exist/is not available.")); + } + it->second(request.params, [_requestBody, response, _sender]( + const Error::Ptr& _error, Json::Value& _result) mutable { + if (_error && (_error->errorCode() != bcos::protocol::CommonError::SUCCESS)) + { + // error + response.error.code = _error->errorCode(); + response.error.message = _error->errorMessage(); + } + else + { + response.result.swap(_result); + } + auto strResp = bcos::rpc::toStringResponse(std::move(response)); + ARCHIVE_SERVICE_LOG(TRACE) + << LOG_BADGE("onRPCRequest") << LOG_KV("request", _requestBody) + << LOG_KV("response", + std::string_view((const char*)strResp.data(), strResp.size())); + _sender(std::move(strResp)); + }); + + // success response + return; + } + catch (const bcos::rpc::JsonRpcException& e) + { + response.error.code = e.code(); + response.error.message = std::string(e.what()); + } + catch (const std::exception& e) + { + // server internal error or unexpected error + response.error.code = bcos::rpc::JsonRpcError::InvalidRequest; + response.error.message = std::string(e.what()); + } + + auto strResp = bcos::rpc::toStringResponse(response); + + ARCHIVE_SERVICE_LOG(DEBUG) + << LOG_BADGE("handleHttpRequest") << LOG_KV("request", _requestBody) + << LOG_KV("response", std::string_view((const char*)strResp.data(), strResp.size())); + _sender(strResp); + } + +private: + bcos::storage::StorageInterface::Ptr m_storage; + std::shared_ptr m_ledger; + std::string m_listenIP; + uint16_t m_listenPort; + IOServicePool::Ptr m_ioServicePool; + bcos::boostssl::http::HttpServer::Ptr m_httpServer; + std::unordered_map)>> + m_methodToFunc; +}; +} // namespace bcos::archive diff --git a/tools/archive-tool/CMakeLists.txt b/tools/archive-tool/CMakeLists.txt new file mode 100644 index 0000000..0177f4e --- /dev/null +++ b/tools/archive-tool/CMakeLists.txt @@ -0,0 +1,12 @@ +file(GLOB SRC_LIST "*.cpp") + +find_package(Boost REQUIRED program_options) + +foreach(source ${SRC_LIST}) + get_filename_component(filename ${source} NAME) + string(REPLACE ".cpp" "" target_name ${filename}) + add_executable(${target_name} ${source}) + target_link_libraries(${target_name} ${STORAGE_TARGET} ${SECURITY_TARGET} ${RPC_TARGET} Boost::program_options ${INIT_LIB} ${LEDGER_TARGET} ${PBFT_INIT_LIB}) + target_include_directories(${target_name} PUBLIC ${CMAKE_SOURCE_DIR} ../bcos-storage ../../libinitializer) + target_compile_options(${target_name} PRIVATE -Wno-unused-variable) +endforeach() diff --git a/tools/archive-tool/archive-reader/.gitignore b/tools/archive-tool/archive-reader/.gitignore new file mode 100644 index 0000000..f2e972d --- /dev/null +++ b/tools/archive-tool/archive-reader/.gitignore @@ -0,0 +1,6 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# These are backup files generated by rustfmt +**/*.rs.bk diff --git a/tools/archive-tool/archive-reader/Cargo.lock b/tools/archive-tool/archive-reader/Cargo.lock new file mode 100644 index 0000000..f7626e9 --- /dev/null +++ b/tools/archive-tool/archive-reader/Cargo.lock @@ -0,0 +1,3451 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array", +] + +[[package]] +name = "aes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" +dependencies = [ + "aes-soft", + "aesni", + "cipher", +] + +[[package]] +name = "aes-gcm" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aes-soft" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" +dependencies = [ + "cipher", + "opaque-debug", +] + +[[package]] +name = "aesni" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" +dependencies = [ + "cipher", + "opaque-debug", +] + +[[package]] +name = "aho-corasick" +version = "0.7.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +dependencies = [ + "memchr", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "async-channel" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +dependencies = [ + "concurrent-queue 1.2.4", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-dup" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7427a12b8dc09291528cfb1da2447059adb4a257388c2acd6497a79d55cf6f7c" +dependencies = [ + "futures-io", + "simple-mutex", +] + +[[package]] +name = "async-executor" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue 2.0.0", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +dependencies = [ + "async-channel", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", + "tokio", +] + +[[package]] +name = "async-h1" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8101020758a4fc3a7c326cb42aa99e9fa77cbfb76987c128ad956406fe1f70a7" +dependencies = [ + "async-channel", + "async-dup", + "async-std", + "futures-core", + "http-types", + "httparse", + "log", + "pin-project", +] + +[[package]] +name = "async-io" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8121296a9f05be7f34aa4196b1747243b3b62e048bb7906f644f3fbfc490cf7" +dependencies = [ + "async-lock", + "autocfg", + "concurrent-queue 1.2.4", + "futures-lite", + "libc", + "log", + "parking", + "polling", + "slab", + "socket2", + "waker-fn", + "winapi", +] + +[[package]] +name = "async-lock" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +dependencies = [ + "event-listener", + "futures-lite", +] + +[[package]] +name = "async-process" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02111fd8655a613c25069ea89fc8d9bb89331fa77486eb3bc059ee757cfa481c" +dependencies = [ + "async-io", + "autocfg", + "blocking", + "cfg-if 1.0.0", + "event-listener", + "futures-lite", + "libc", + "once_cell", + "signal-hook", + "winapi", +] + +[[package]] +name = "async-recursion" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-session" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345022a2eed092cd105cc1b26fd61c341e100bd5fcbbd792df4baf31c2cc631f" +dependencies = [ + "anyhow", + "async-std", + "async-trait", + "base64 0.12.3", + "bincode", + "blake3", + "chrono", + "hmac 0.8.1", + "kv-log-macro", + "rand 0.7.3", + "serde", + "serde_json", + "sha2", +] + +[[package]] +name = "async-sse" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10" +dependencies = [ + "async-channel", + "async-std", + "http-types", + "log", + "memchr", + "pin-project-lite 0.1.12", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-attributes", + "async-channel", + "async-global-executor", + "async-io", + "async-lock", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite 0.2.9", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-task" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" + +[[package]] +name = "async-trait" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "clap", + "env_logger 0.9.3", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] + +[[package]] +name = "bindgen" +version = "0.60.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake3" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 0.1.10", + "constant_time_eq", + "crypto-mac 0.8.0", + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" +dependencies = [ + "async-channel", + "async-task", + "atomic-waker", + "fastrand", + "futures-lite", + "once_cell", +] + +[[package]] +name = "bumpalo" +version = "3.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "cc" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "serde", + "time 0.1.44", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array", +] + +[[package]] +name = "clang-sys" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cmake" +version = "0.1.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c" +dependencies = [ + "cc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" +dependencies = [ + "cache-padded", +] + +[[package]] +name = "concurrent-queue" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "const_fn" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cookie" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +dependencies = [ + "aes-gcm", + "base64 0.13.1", + "hkdf", + "hmac 0.10.1", + "percent-encoding", + "rand 0.8.5", + "sha2", + "time 0.2.27", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "cpuid-bool" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "crypto-mac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctor" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ctr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" +dependencies = [ + "cipher", +] + +[[package]] +name = "cxx" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cc32cc5fea1d894b77d269ddb9f192110069a8a9c1f1d441195fba90553dea3" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca220e4794c934dc6b1207c3b42856ad4c302f2df1712e9f8d2eec5afaacf1f" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b846f081361125bfc8dc9d3940c84e1fd83ba54bbca7b17cd29483c828be0704" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "derive-new" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if 1.0.0", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "encoding_rs" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_logger" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "erased-serde" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54558e0ba96fbe24280072642eceb9d7d442e32c7ec0ea9e7ecd7b4ea2cf4e11" +dependencies = [ + "serde", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fail" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be3c61c59fdc91f5dbc3ea31ee8623122ce80057058be560654c5d410d181a6" +dependencies = [ + "lazy_static", + "log", + "rand 0.7.3", +] + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "femme" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc04871e5ae3aa2952d552dae6b291b3099723bf779a8054281c1366a54613ef" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "fisco-bcos-archive-reader" +version = "0.1.0" +dependencies = [ + "async-std", + "env_logger 0.8.4", + "log", + "prefix-hex", + "rocksdb", + "serde", + "serde_json", + "structopt", + "tide", + "tikv-client", + "tokio", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite 0.2.9", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures 0.1.31", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite 0.2.9", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "ghash" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "gloo-timers" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "grpcio" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bcdd3694fa08158334501af37bdf5b4f00b1865b602d917e3cd74ecf80cd0a" +dependencies = [ + "bytes", + "futures-executor", + "futures-util", + "grpcio-sys", + "libc", + "log", + "parking_lot", + "prost 0.9.0", +] + +[[package]] +name = "grpcio-compiler" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad402dbef95d726c4170fc69209c4d669a199c6462c63c69d67fa1d8f44511f4" +dependencies = [ + "derive-new", + "prost 0.11.2", + "prost-build 0.11.2", + "prost-types 0.11.2", + "tempfile", +] + +[[package]] +name = "grpcio-sys" +version = "0.10.3+1.44.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f23adc509a3c4dea990e0ab8d2add4a65389ee69c288b7851d75dd1df7a6d6c6" +dependencies = [ + "bindgen 0.59.2", + "cc", + "cmake", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "walkdir", +] + +[[package]] +name = "h2" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest", + "hmac 0.10.1", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac 0.8.0", + "digest", +] + +[[package]] +name = "hmac" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" +dependencies = [ + "crypto-mac 0.10.1", + "digest", +] + +[[package]] +name = "http" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite 0.2.9", +] + +[[package]] +name = "http-client" +version = "6.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" +dependencies = [ + "async-trait", + "cfg-if 1.0.0", + "http-types", + "log", +] + +[[package]] +name = "http-types" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" +dependencies = [ + "anyhow", + "async-channel", + "async-std", + "base64 0.13.1", + "cookie", + "futures-lite", + "infer", + "pin-project-lite 0.2.9", + "rand 0.7.3", + "serde", + "serde_json", + "serde_qs", + "serde_urlencoded", + "url", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite 0.2.9", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "ipnet" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" + +[[package]] +name = "jobserver" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.137" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + +[[package]] +name = "librocksdb-sys" +version = "0.8.0+7.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611804e4666a25136fcc5f8cf425ab4d26c7f74ea245ffe92ea23b85b6420b5d" +dependencies = [ + "bindgen 0.60.1", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "zstd-sys", +] + +[[package]] +name = "libz-sys" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "link-cplusplus" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +dependencies = [ + "cc", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", + "serde", + "value-bag", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.42.0", +] + +[[package]] +name = "multimap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-src" +version = "111.24.0+1.1.1s" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03b84c3b2d099b81f0953422b4d4ad58761589d0229b5506356afca05a3670a" +dependencies = [ + "autocfg", + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "petgraph" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "polling" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "libc", + "log", + "wepoll-ffi", + "winapi", +] + +[[package]] +name = "polyval" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" +dependencies = [ + "cpuid-bool", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prefix-hex" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75e3396888185b76a6e4c8fc883b3f039e56d3c0bca279744d2df70b3662e784" +dependencies = [ + "hex", +] + +[[package]] +name = "prettyplease" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c142c0e46b57171fe0c528bee8c5b7569e80f0c17e377cd0e30ea57dbc11bb51" +dependencies = [ + "proc-macro2", + "syn", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro2" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procfs" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8809e0c18450a2db0f236d2a44ec0b4c1412d0eb936233579f0990faa5d5cd" +dependencies = [ + "bitflags", + "byteorder", + "flate2", + "hex", + "lazy_static", + "libc", +] + +[[package]] +name = "prometheus" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5986aa8d62380092d2f50f8b1cdba9cb9b6731ffd4b25b51fd126b6c3e05b99c" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "libc", + "memchr", + "parking_lot", + "procfs", + "protobuf", + "reqwest", + "thiserror", +] + +[[package]] +name = "prost" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +dependencies = [ + "bytes", + "prost-derive 0.9.0", +] + +[[package]] +name = "prost" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0841812012b2d4a6145fae9a6af1534873c32aa67fff26bd09f8fa42c83f95a" +dependencies = [ + "bytes", + "prost-derive 0.11.2", +] + +[[package]] +name = "prost-build" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +dependencies = [ + "bytes", + "heck 0.3.3", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost 0.9.0", + "prost-types 0.9.0", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-build" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8b442418ea0822409d9e7d047cbf1e7e9e1760b172bf9982cf29d517c93511" +dependencies = [ + "bytes", + "heck 0.4.0", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease", + "prost 0.11.2", + "prost-types 0.11.2", + "regex", + "syn", + "tempfile", + "which", +] + +[[package]] +name = "prost-derive" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164ae68b6587001ca506d3bf7f1000bfa248d0e1217b618108fba4ec1d0cc306" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +dependencies = [ + "bytes", + "prost 0.9.0", +] + +[[package]] +name = "prost-types" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747761bc3dc48f9a34553bf65605cf6cb6288ba219f3450b4275dbd81539551a" +dependencies = [ + "bytes", + "prost 0.11.2", +] + +[[package]] +name = "protobuf" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" + +[[package]] +name = "protobuf-build" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2be70fa994657539e3c872cc54363c9bf28b0d7a7f774df70e9fd760df3bc4" +dependencies = [ + "bitflags", + "grpcio-compiler", + "proc-macro2", + "prost-build 0.9.0", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.8", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom 0.2.8", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "reqwest" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc" +dependencies = [ + "base64 0.13.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.9", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "rocksdb" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9562ea1d70c0cc63a34a22d977753b50cca91cc6b6527750463bd5dd8697bc" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "route-recognizer" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +dependencies = [ + "lazy_static", + "windows-sys 0.36.1", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" + +[[package]] +name = "security-framework" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_fmt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2963a69a2b3918c1dc75a45a18bd3fcd1120e31d3f59deb1b2f9b5d5ffb8baa4" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer", + "cfg-if 1.0.0", + "cpufeatures", + "digest", + "opaque-debug", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "signal-hook" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +dependencies = [ + "libc", +] + +[[package]] +name = "simple-mutex" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38aabbeafa6f6dead8cebf246fe9fae1f9215c8d29b3a69f93bd62a9e4a3dcd6" +dependencies = [ + "event-listener", +] + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slog" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" + +[[package]] +name = "slog-async" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "766c59b252e62a34651412870ff55d8c4e6d04df19b43eecb2703e417b097ffe" +dependencies = [ + "crossbeam-channel", + "slog", + "take_mut", + "thread_local", +] + +[[package]] +name = "slog-term" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d29185c55b7b258b4f120eab00f48557d4d9bc814f41713f449d35b0f8977c" +dependencies = [ + "atty", + "slog", + "term", + "thread_local", + "time 0.3.17", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "socket2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "sval" +version = "1.0.0-alpha.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" +dependencies = [ + "serde", +] + +[[package]] +name = "syn" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" + +[[package]] +name = "tempfile" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +dependencies = [ + "cfg-if 1.0.0", + "fastrand", + "libc", + "redox_syscall", + "remove_dir_all", + "winapi", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tide" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" +dependencies = [ + "async-h1", + "async-session", + "async-sse", + "async-std", + "async-trait", + "femme", + "futures-util", + "http-client", + "http-types", + "kv-log-macro", + "log", + "pin-project-lite 0.2.9", + "route-recognizer", + "serde", + "serde_json", +] + +[[package]] +name = "tikv-client" +version = "0.1.0" +source = "git+https://github.com/FISCO-BCOS/tikv-client-rust.git?rev=79686f6c9133bcb8bbe44bc5928531af97aa99d6#79686f6c9133bcb8bbe44bc5928531af97aa99d6" +dependencies = [ + "async-recursion", + "async-trait", + "derive-new", + "either", + "fail", + "futures 0.3.25", + "futures-timer", + "grpcio", + "lazy_static", + "log", + "prometheus", + "rand 0.8.5", + "regex", + "semver 1.0.14", + "serde", + "serde_derive", + "slog", + "slog-async", + "slog-term", + "thiserror", + "tikv-client-common", + "tikv-client-pd", + "tikv-client-proto", + "tikv-client-store", + "tokio", +] + +[[package]] +name = "tikv-client-common" +version = "0.1.0" +source = "git+https://github.com/FISCO-BCOS/tikv-client-rust.git?rev=79686f6c9133bcb8bbe44bc5928531af97aa99d6#79686f6c9133bcb8bbe44bc5928531af97aa99d6" +dependencies = [ + "futures 0.3.25", + "grpcio", + "lazy_static", + "log", + "regex", + "semver 1.0.14", + "thiserror", + "tikv-client-proto", + "tokio", +] + +[[package]] +name = "tikv-client-pd" +version = "0.1.0" +source = "git+https://github.com/FISCO-BCOS/tikv-client-rust.git?rev=79686f6c9133bcb8bbe44bc5928531af97aa99d6#79686f6c9133bcb8bbe44bc5928531af97aa99d6" +dependencies = [ + "async-trait", + "futures 0.3.25", + "grpcio", + "log", + "tikv-client-common", + "tikv-client-proto", +] + +[[package]] +name = "tikv-client-proto" +version = "0.1.0" +source = "git+https://github.com/FISCO-BCOS/tikv-client-rust.git?rev=79686f6c9133bcb8bbe44bc5928531af97aa99d6#79686f6c9133bcb8bbe44bc5928531af97aa99d6" +dependencies = [ + "futures 0.3.25", + "grpcio", + "lazy_static", + "prost 0.9.0", + "prost-derive 0.9.0", + "protobuf", + "protobuf-build", +] + +[[package]] +name = "tikv-client-store" +version = "0.1.0" +source = "git+https://github.com/FISCO-BCOS/tikv-client-rust.git?rev=79686f6c9133bcb8bbe44bc5928531af97aa99d6#79686f6c9133bcb8bbe44bc5928531af97aa99d6" +dependencies = [ + "async-trait", + "derive-new", + "futures 0.3.25", + "grpcio", + "log", + "tikv-client-common", + "tikv-client-proto", +] + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "time" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros 0.1.1", + "version_check", + "winapi", +] + +[[package]] +name = "time" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +dependencies = [ + "itoa", + "libc", + "num_threads", + "serde", + "time-core", + "time-macros 0.2.6", +] + +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + +[[package]] +name = "time-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + +[[package]] +name = "time-macros" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] + +[[package]] +name = "time-macros-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "tokio" +version = "1.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite 0.2.9", + "socket2", + "tokio-macros", + "winapi", +] + +[[package]] +name = "tokio-macros" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite 0.2.9", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite 0.2.9", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "universal-hash" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "value-bag" +version = "1.0.0-alpha.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" +dependencies = [ + "ctor", + "erased-serde", + "serde", + "serde_fmt", + "sval", + "version_check", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +dependencies = [ + "cfg-if 1.0.0", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" + +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + +[[package]] +name = "which" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +dependencies = [ + "either", + "libc", + "once_cell", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", +] + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" + +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + +[[package]] +name = "zstd-sys" +version = "2.0.1+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b" +dependencies = [ + "cc", + "libc", +] diff --git a/tools/archive-tool/archive-reader/Cargo.toml b/tools/archive-tool/archive-reader/Cargo.toml new file mode 100644 index 0000000..605a18c --- /dev/null +++ b/tools/archive-tool/archive-reader/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "fisco-bcos-archive-reader" +version = "0.1.0" +edition = "2021" + +[dependencies] +structopt = "0.3.16" +log = { version ="0.4.0", features = ["max_level_debug", "release_max_level_info"] } +serde_json = "1" +env_logger = "0.8.4" +prefix-hex = "0.5.0" +async-std = { version = "1", features = ["attributes", "tokio1"] } +tokio = { version = "1", features = [ "sync", "rt-multi-thread", "macros" ] } +tide = "0.16.0" +serde = { version = "1.0", features = ["derive"] } +rocksdb = "0.19.0" +tikv-client = { git = "https://github.com/FISCO-BCOS/tikv-client-rust.git", rev = "79686f6c9133bcb8bbe44bc5928531af97aa99d6" } diff --git a/tools/archive-tool/archive-reader/rust-toolchain.toml b/tools/archive-tool/archive-reader/rust-toolchain.toml new file mode 100644 index 0000000..c64807d --- /dev/null +++ b/tools/archive-tool/archive-reader/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly-2022-11-13" diff --git a/tools/archive-tool/archive-reader/src/main.rs b/tools/archive-tool/archive-reader/src/main.rs new file mode 100644 index 0000000..9d88d3d --- /dev/null +++ b/tools/archive-tool/archive-reader/src/main.rs @@ -0,0 +1,250 @@ +use core::panic; +use std::collections::HashMap; +use std::iter::zip; +use std::sync::Arc; + +use env_logger::Env; +use log::info; +// use serde::Serialize; + +use log::trace; +use rocksdb::{DBCompressionType, Options, DB}; +use structopt::StructOpt; +use tide::log::debug; +use tide::prelude::*; +use tide::Body; +use tide::Request; +use tide::Response; +use tikv_client::TransactionOptions; +use tokio::sync::Mutex; + +#[derive(StructOpt)] +struct Cli { + /// The path of the abi json file + #[structopt(parse(from_os_str))] + #[structopt(short, long)] + rocksdb_path: Option, + /// pd address of TiKV cluster + #[structopt( + short, + long, + conflicts_with = "rocksdb-path", + required_unless = "rocksdb-path", + // default_value = "127.0.0.1:2379" + )] + pd_addrs: Option, + /// The IP and port to listen + #[structopt(short, long, default_value = "127.0.0.1:8080")] + ip_port: String, +} + +enum Storage { + RocksDB(rocksdb::DB), + TiKV(tikv_client::TransactionClient), +} + +#[derive(Debug, Deserialize, Serialize)] +struct JsonRequest { + jsonrpc: String, + method: String, + id: u64, + params: serde_json::Value, +} + +#[derive(Debug, Deserialize, Serialize)] +struct JsonError { + message: String, + code: i32, + data: String, +} + +#[derive(Debug, Deserialize, Serialize)] +struct JsonResponse { + jsonrpc: String, + id: u64, + result: serde_json::Value, + error: JsonError, +} +macro_rules! new_json_response { + ($id:expr, $error:expr, $result:expr) => { + JsonResponse { + jsonrpc: "2.0".to_string(), + id: $id, + result: $result, + error: $error, + } + }; +} + +#[tokio::main(flavor = "multi_thread", worker_threads = 4)] +async fn main() -> tide::Result<()> { + let args = Cli::from_args(); + let storage; + env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); + // TODO: if use tikv use env log of slog + if let Some(rocksdb_path) = args.rocksdb_path { + if rocksdb_path.exists() { + info!("rocksdb path: {:?}", rocksdb_path); + let mut db_opts = Options::default(); + db_opts.create_if_missing(true); + db_opts.set_compression_type(DBCompressionType::Zstd); + storage = Arc::new(Mutex::new(Storage::RocksDB( + DB::open(&db_opts, rocksdb_path).unwrap(), + ))); + } else { + panic!("rocksdb path not exists"); + } + } else if let Some(pd_addrs) = args.pd_addrs { + info!("pd_addrs: {:?}", pd_addrs); + let pd_endpoints = pd_addrs.split(",").map(|s| s.to_owned()).collect(); + let client = tikv_client::TransactionClient::new(pd_endpoints, None).await?; + storage = Arc::new(Mutex::new(Storage::TiKV(client))); + } else { + panic!("one of rocksdb path/pd_addrs must be set"); + } + info!("listen: {:?}", args.ip_port); + let mut app = tide::with_state(storage); + // let database = Arc::new(Mutex::new(storage)); + app.at("/") + .post(|mut req: Request>>| async move { + let request_json = req.body_json::().await?; + trace!("request_json.params: {:?}", request_json); + let method = request_json.method; + if request_json.params.is_null() { + let response = new_json_response!( + request_json.id, + JsonError { + message: "parameters is null".to_string(), + code: -1002, + data: "".to_string() + }, + "".to_string().into() + ); + return Ok(Response::builder(200) + .body(Body::from_json(&response)?) + .content_type("application/json") + .build()); + } + + let keys: Vec>; + let hex_keys: Vec; + let table; + + if method == "getTransactionByHash" || method == "getTransactions" { + table = "s_hash_2_tx:".as_bytes(); + } else if method == "getTransactionReceipt" || method == "getTransactionReceipts" { + table = "s_hash_2_receipt:".as_bytes(); + } else { + let response = new_json_response!( + request_json.id, + JsonError { + message: "method not found".to_string(), + code: -1001, + data: "".to_string() + }, + "".to_string().into() + ); + return Ok(Response::builder(200) + .body(Body::from_json(&response)?) + .content_type("application/json") + .build()); + }; + if method == "getTransactionByHash" || method == "getTransactionReceipt" { + let hash = request_json.params.as_array().unwrap()[0].as_str().unwrap(); + hex_keys = vec![hash.to_string()]; + keys = vec![table + .to_vec() + .into_iter() + .chain( + prefix_hex::decode::>(hash) + .unwrap() + .to_owned() + .into_iter(), + ) + .collect()]; + } else { + hex_keys = request_json.params.as_array().unwrap()[0] + .as_array() + .unwrap() + .into_iter() + .map(|s| s.as_str().unwrap().to_string()) + .collect(); + debug!("hex_keys: {:?}", hex_keys); + keys = hex_keys + .iter() + .map(|s| { + table + .to_vec() + .into_iter() + .chain( + prefix_hex::decode::>(s.as_str()) + .unwrap() + .to_owned() + .into_iter(), + ) + .collect() + }) + .collect(); + debug!("keys: {:?}", keys); + } + + // #[allow(unused_assignments)] + let result: HashMap; + let database = req.state().lock().await; + match &*database { + Storage::RocksDB(db) => { + let values: Vec = db + .multi_get(keys) + .into_iter() + .filter_map(|x| x.ok()) + .map(|x| match x { + Some(v) => unsafe { + std::str::from_utf8_unchecked(v.as_ref()).to_string() + }, + None => "".to_string(), + }) + .collect(); + // debug!("values: {:?}", values); + result = zip(hex_keys, values) + .map(|(k, v)| (k.to_string(), v)) + .collect(); + } + Storage::TiKV(_client) => { + let client = _client.clone(); + let timestamp = client.current_timestamp().await?; + let mut txn = client.snapshot(timestamp, TransactionOptions::new_optimistic()); + result = txn + .batch_get(keys) + .await? + .map(|x| unsafe { + let value = std::str::from_utf8_unchecked(x.value()).to_string(); + let key: Vec = x.key().clone().into(); + let key = prefix_hex::encode(key.strip_prefix(table).unwrap()); + (key, value) + }) + .collect(); + } + } + let response = JsonResponse { + jsonrpc: "2.0".to_string(), + id: request_json.id, + result: serde_json::to_value(result).unwrap(), + error: JsonError { + message: "".to_string(), + code: 0, + data: "".to_string(), + }, + }; + Ok(Response::builder(200) + .body(Body::from_json(&response)?) + .content_type("application/json") + .build()) + }); + app.listen(args.ip_port).await?; + Ok(()) +} + +// #[cfg(test)] +// mod tests { +// use super::*; +// } diff --git a/tools/archive-tool/archiveTool.cpp b/tools/archive-tool/archiveTool.cpp new file mode 100644 index 0000000..4407d8d --- /dev/null +++ b/tools/archive-tool/archiveTool.cpp @@ -0,0 +1,703 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the tool to read and modify data of storage + * @file archiveTool.cpp + * @author: xingqiangbai + * @date 2022-11-08 + */ + +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-ledger/src/libledger/Ledger.h" +#include "bcos-ledger/src/libledger/utilities/Common.h" +#include "bcos-rpc/jsonrpc/JsonRpcImpl_2_0.h" +#include "bcos-storage/bcos-storage/TiKVStorage.h" +#include "bcos-tars-protocol/bcos-tars-protocol/protocol/TransactionImpl.h" +#include "bcos-utilities/BoostLogInitializer.h" +#include "boost/filesystem.hpp" +#include "libinitializer/ProtocolInitializer.h" +#include "libinitializer/StorageInitializer.h" +#include "rocksdb/db.h" +#include "rocksdb/options.h" +#include "rocksdb/slice.h" +#include "tikv_client.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace rocksdb; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::initializer; +namespace beast = boost::beast; // from +namespace http = beast::http; // from +namespace net = boost::asio; // from +using tcp = net::ip::tcp; // from + + +namespace fs = boost::filesystem; +namespace po = boost::program_options; + +po::options_description main_options( + "archive tool used to archive/reimport the data of FISCO BCOS v3"); + +po::variables_map initCommandLine(int argc, const char* argv[]) +{ + main_options.add_options()("help,h", "help of storage tool")("archive,a", + po::value>()->multitoken(), + "[startBlock] [endBlock] the range is [start,end) which means the end is not archived")( + "reimport,r", po::value>()->multitoken(), + "[startBlock] [endBlock] the range is [start,end) which means the end is not reimported")( + "config,c", boost::program_options::value()->default_value("./config.ini"), + "config file path")("genesis,g", + boost::program_options::value()->default_value("./config.genesis"), + "genesis config file path")("path,p", boost::program_options::value(), + "the path to store the archived data or read archived data if reimport, if set path then " + "use rocksDB")("endpoint,e", boost::program_options::value(), + "the ip and port of node archive service in format of IP:Port, ipv6 is not supported")("pd", + boost::program_options::value(), + "pd address of TiKV, if set use TiKV to archive data of reimport from TiKV, multi address " + "is split by comma"); + po::variables_map varMap; + try + { + po::store(po::parse_command_line(argc, argv, main_options), varMap); + po::notify(varMap); + } + catch (...) + { + std::cout << "parse_command_line failed" << std::endl; + std::cout << main_options << std::endl; + exit(0); + } + if ((varMap.count("help") != 0U) || (varMap.count("h") != 0U)) + { + std::cout << main_options << std::endl; + exit(0); + } + return varMap; +} + +DB* createSecondaryRocksDB(const std::string& path, const std::string& secondaryPath) +{ + Options options; + options.create_if_missing = false; + options.max_open_files = -1; + DB* db_secondary = nullptr; + Status status = DB::OpenAsSecondary(options, path, secondaryPath, &db_secondary); + if (!status.ok()) + { + std::cout << "open rocksDB failed: " << status.ToString() << std::endl; + exit(1); + } + status = db_secondary->TryCatchUpWithPrimary(); + if (!status.ok()) + { + std::cout << "TryCatchUpWithPrimary failed: " << status.ToString() << std::endl; + exit(1); + } + return db_secondary; +} + +TransactionalStorageInterface::Ptr createBackendStorage( + std::shared_ptr nodeConfig, const std::string& logPath, bool write, + const std::string& secondaryPath) +{ + bcos::storage::TransactionalStorageInterface::Ptr storage = nullptr; + if (boost::iequals(nodeConfig->storageType(), "RocksDB")) + { + bcos::security::DataEncryption::Ptr dataEncryption = nullptr; + if (nodeConfig->storageSecurityEnable()) + { + dataEncryption = std::make_shared(nodeConfig); + dataEncryption->init(); + } + if (write) + { + storage = StorageInitializer::build( + nodeConfig->storagePath(), dataEncryption, nodeConfig->keyPageSize()); + } + else + { + auto* rocksdb = createSecondaryRocksDB(nodeConfig->storagePath(), secondaryPath); + storage = std::make_shared( + std::unique_ptr(rocksdb), dataEncryption); + } + } + else if (boost::iequals(nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + storage = StorageInitializer::build(nodeConfig->pdAddrs(), logPath, nodeConfig->pdCaPath(), + nodeConfig->pdCertPath(), nodeConfig->pdKeyPath()); +#endif + } + else + { + throw std::runtime_error("storage type not support"); + } + return storage; +} + +void deleteArchivedBlocksInNode(const std::string& endpoint, int64_t startBlock, int64_t endBlock) +{ + try + { + std::vector ipPort; + boost::split(ipPort, endpoint, boost::is_any_of(":")); + auto const host = ipPort[0]; + auto const port = ipPort[1]; + + // The io_context is required for all I/O + net::io_context ioc; + + // These objects perform our I/O + tcp::resolver resolver(ioc); + beast::tcp_stream stream(ioc); + + // Look up the domain name + auto const results = resolver.resolve(host, port); + + // Make the connection on the IP address we get from a lookup + stream.connect(results); + + Json::Value request; + request["id"] = 1; + request["jsonrpc"] = "2.0"; + request["method"] = "deleteArchivedData"; + Json::Value params(Json::arrayValue); + params.append(startBlock); + params.append(endBlock); + request["params"] = params; + + http::request req{http::verb::post, "/", 11}; + req.set(http::field::host, endpoint); + req.set(http::field::accept, "*/*"); + req.set(http::field::content_type, "application/json"); + req.set(http::field::accept_charset, "utf-8"); + + req.body() = request.toStyledString(); + req.prepare_payload(); + + // Send the HTTP request to the remote host + http::write(stream, req); + std::cout << "---------------request send:\n" << request.toStyledString() << std::endl; + // This buffer is used for reading and must be persisted + beast::flat_buffer buffer; + + // Declare a container to hold the response + http::response res; + + // Receive the HTTP response + http::read(stream, buffer, res); + + // Write the message to standard out + std::cout << "---------------response:\n" << res << std::endl; + + // Gracefully close the socket + beast::error_code ec; + stream.socket().shutdown(tcp::socket::shutdown_both, ec); + + // not_connected happens sometimes + // so don't bother reporting it. + // + if (ec && ec != beast::errc::not_connected) + { + throw beast::system_error{ec}; + } + } + catch (std::exception const& e) + { + std::cerr << "Error: " << e.what() << std::endl; + } +} + +void archiveBlocks(auto archiveStorage, auto ledger, + const std::shared_ptr& nodeConfig, int64_t startBlockNumber, + int64_t endBlockNumber) +{ + // auto receiptFlag = bcos::ledger::RECEIPTS; + bcos::crypto::Hash::Ptr hashImpl = nullptr; + if (nodeConfig->smCryptoType()) + { + hashImpl = std::make_shared(); + } + else + { + hashImpl = std::make_shared<::bcos::crypto::Keccak256>(); + } + auto blockFlag = bcos::ledger::FULL_BLOCK; + + for (int64_t i = startBlockNumber; i < endBlockNumber; ++i) + { + // getBlockByNumber + std::promise promise; + ledger->asyncGetBlockDataByNumber( + i, blockFlag, [&promise](const Error::Ptr& error, bcos::protocol::Block::Ptr block) { + if (error) + { + std::cerr << "get block failed: " << error->errorMessage() << endl; + exit(1); + } + promise.set_value(std::move(block)); + }); + auto block = promise.get_future().get(); + auto size = block->receiptsSize(); + std::vector keys(size, ""); + std::vector transactionValues(size, ""); + std::vector receiptValues(size, ""); + // read the transaction and store to archive database use json format + tbb::parallel_for( + tbb::blocked_range(0, size), [&](const tbb::blocked_range& range) { + for (size_t j = range.begin(); j < range.end(); ++j) + { + Json::Value value; + auto receipt = block->receipt(j); + auto transaction = block->transaction(j); + auto transactionHash = transaction->hash(); + keys[j] = std::string((char*)transactionHash.data(), transactionHash.size()); + // write transactions and receipts to archive database + Json::Value transactionJson; + bcos::rpc::toJsonResp(transactionJson, transaction); + transactionValues[j] = transactionJson.toStyledString(); + // read the receipt and store to archive database use json format + Json::Value receiptJson; + bcos::rpc::toJsonResp(receiptJson, toHex(keys[j], "0x"), protocol::TransactionStatus::None, + *receipt, nodeConfig->isWasm(), *hashImpl); + receiptValues[j] = receiptJson.toStyledString(); + } + }); + archiveStorage->setRows(ledger::SYS_HASH_2_TX, keys, std::move(transactionValues)); + archiveStorage->setRows( + ledger::SYS_HASH_2_RECEIPT, std::move(keys), std::move(receiptValues)); + std::cout << "\r" + << "write block " << i << " size: " << size << std::flush; + } + std::cout << std::endl + << "write to archive database, block range [" << startBlockNumber << "," + << endBlockNumber << ")" << std::endl; + // delete the archived data in node + std::cout << "delete archived data from " << startBlockNumber << " to " << endBlockNumber + << endl; +} + +void reimportBlocks(auto archiveStorage, TransactionalStorageInterface::Ptr localStorage, + const std::shared_ptr& nodeConfig, int64_t startBlockNumber, + int64_t endBlockNumber) +{ + // create factory + auto protocolInitializer = std::make_shared(); + protocolInitializer->init(nodeConfig); + auto ledger = + std::make_shared(protocolInitializer->blockFactory(), localStorage); + auto blockFactory = protocolInitializer->blockFactory(); + auto transactionFactory = blockFactory->transactionFactory(); + auto receiptFactory = blockFactory->receiptFactory(); + + // get transaction list of block + // tbb::parallel_for(tbb::blocked_range(startBlockNumber, endBlockNumber), + // [&](const tbb::blocked_range& range) { + // for (size_t blockNumber = range.begin(); blockNumber < range.end(); + // ++blockNumber) + for (int64_t blockNumber = startBlockNumber; blockNumber < endBlockNumber; ++blockNumber) + { + // getBlockByNumber + std::promise> promiseHashes; + ledger->asyncGetBlockTransactionHashes( + blockNumber, [&](Error::Ptr&& error, std::vector&& txHashes) { + if (error) + { + std::cerr << "get block transaction hash list failed: " + << error->errorMessage(); + exit(1); + } + promiseHashes.set_value(std::move(txHashes)); + }); + auto txHashes = promiseHashes.get_future().get(); + + // get transactions from archive database + std::promise>> promiseTxs; + archiveStorage->asyncGetRows(ledger::SYS_HASH_2_TX, txHashes, + [&](Error::UniquePtr err, std::vector> values) { + if (err) + { + std::cerr << "get transactions failed: " << err->errorMessage(); + exit(1); + } + promiseTxs.set_value(std::move(values)); + }); + auto values = promiseTxs.get_future().get(); + std::vector txs(txHashes.size(), bytes()); + std::vector txsView(txHashes.size(), std::string_view()); + + tbb::parallel_for(tbb::blocked_range(0, txHashes.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) + { + Json::Value jsonValue; + // if value option is none, the data is broken, fatal error + if (!values[i]) + { + std::cerr << "get transaction failed, blockNumber: " << blockNumber + << ", txHash: " << toHex(txHashes[i]) << std::endl; + exit(1); + } + auto view = values[i]->get(); + if (view.empty()) + { + std::cerr << "get transaction empty, blockNumber: " << blockNumber + << ", txHash: " << toHex(txHashes[i]) << std::endl; + exit(1); + } + Json::Reader reader; + if (!reader.parse(view.data(), view.data() + view.size(), jsonValue)) + { + std::cerr << "parse json failed: " << reader.getFormattedErrorMessages(); + exit(1); + } + // convert json to transaction + int32_t version = jsonValue["version"].asInt(); + auto nonce = u256(jsonValue["nonce"].asString()); + auto input = fromHexWithPrefix(jsonValue["input"].asString()); + auto signature = fromHexWithPrefix(jsonValue["signature"].asString()); + auto tx = transactionFactory->createTransaction(version, + jsonValue["to"].asString(), input, nonce, jsonValue["blockLimit"].asInt64(), + jsonValue["chainID"].asString(), jsonValue["groupID"].asString(), + jsonValue["importTime"].asInt64()); + dynamic_pointer_cast(tx)->setSignatureData( + signature); + tx->encode(txs[i]); + txsView[i] = std::string_view((char*)txs[i].data(), txs[i].size()); + } + }); + + // write transactions to local storage + localStorage->setRows(ledger::SYS_HASH_2_TX, txHashes, std::move(txsView)); + + // get receipts from archive database + std::promise>> promiseReceipts; + archiveStorage->asyncGetRows(ledger::SYS_HASH_2_RECEIPT, txHashes, + [&](Error::UniquePtr err, std::vector> values) { + if (err) + { + std::cerr << "get receipts failed: " << err->errorMessage(); + exit(1); + } + promiseReceipts.set_value(std::move(values)); + }); + values = promiseReceipts.get_future().get(); + std::vector receipts(txHashes.size(), bytes()); + std::vector receiptsView(txHashes.size(), std::string_view()); + tbb::parallel_for(tbb::blocked_range(0, txHashes.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) + { + Json::Value jsonValue; + Json::Reader reader; + // if value option is none, the data is broken, fatal error + if (!values[i]) + { + std::cerr << "get receipt failed, blockNumber: " << blockNumber + << ", txHash: " << toHex(txHashes[i]) << std::endl; + exit(1); + } + auto view = values[i]->get(); + if (view.empty()) + { + std::cerr << "get receipt empty, blockNumber: " << blockNumber + << ", txHash: " << toHex(txHashes[i]) << std::endl; + exit(1); + } + if (!reader.parse(view.data(), view.data() + view.size(), jsonValue)) + { + std::cerr << "parse json failed: " << reader.getFormattedErrorMessages(); + exit(1); + } + // convert json to receipt + auto gasUsed = u256(jsonValue["gasUsed"].asString()); + auto status = jsonValue["status"].asInt(); + bytes output; + auto outString = jsonValue["output"].asString(); + if (outString.size() > 2) + { + output = fromHexWithPrefix(outString); + } + std::string contractAddress; + if (!nodeConfig->isWasm() && jsonValue["contractAddress"].asString().size() > 2) + { + auto addressBytes = + fromHexWithPrefix(jsonValue["contractAddress"].asString()); + contractAddress = + std::string((char*)addressBytes.data(), addressBytes.size()); + } + std::shared_ptr> logEntries = + std::make_shared>(); + + for (uint j = 0; j < jsonValue["logEntries"].size(); ++j) + { + auto logEntryJson = jsonValue["logEntries"][j]; + bcos::protocol::LogEntry logEntry; + auto data = fromHexWithPrefix(logEntryJson["data"].asString()); + h256s topics; + for (const auto& k : logEntryJson["topics"]) + { + topics.push_back(h256(k.asString())); + } + auto address = logEntryJson["address"].asString(); + auto addr = bytes(address.data(), address.data() + address.size()); + logEntries->emplace_back(addr, topics, data); + } + auto receipt = receiptFactory->createReceipt(gasUsed, contractAddress, + *logEntries, status, ref(output), jsonValue["blockNumber"].asInt64()); + receipt->encode(receipts[i]); + receiptsView[i] = + std::string_view((char*)receipts[i].data(), receipts[i].size()); + } + }); + // write receipt to local storage + localStorage->setRows(ledger::SYS_HASH_2_RECEIPT, txHashes, std::move(receiptsView)); + std::cout << "\r" + << "reimport block " << blockNumber << " size: " << txHashes.size() << std::flush; + } + // }); + std::cout << std::endl + << "reimport from archive database success, block range [" << startBlockNumber << "," + << endBlockNumber << ")" << std::endl; +} + +int main(int argc, const char* argv[]) +{ + boost::property_tree::ptree propertyTree; + auto params = initCommandLine(argc, argv); + // parse config file + std::string configPath("./config.ini"); + if (params.count("config") != 0U) + { + configPath = params["config"].as(); + } + if (!fs::exists(configPath)) + { + cout << "config file not found:" << configPath << endl; + return 1; + } + + std::string genesisFilePath("./config.genesis"); + if (params.count("genesis") != 0U) + { + genesisFilePath = params["genesis"].as(); + } + cout << "config file: " << configPath << " | genesis file: " << genesisFilePath << endl; + std::string archivePath; + if (params.count("path") != 0U) + { + archivePath = params["path"].as(); + } + std::string pdAddresses; + if (params.count("pd") != 0U) + { + pdAddresses = params["pd"].as(); + } + std::string endpoint; + if (params.count("endpoint") != 0U) + { + endpoint = params["endpoint"].as(); + } + if (params.count("archive") != 0U && endpoint.empty()) + { + cout << "the IP::Port of node's archive service is empty" << endl; + return 1; + } + std::vector pdAddrs; + + std::string archiveType = "RocksDB"; + if (!archivePath.empty() && pdAddresses.empty()) + { + cout << "use rocksDB as archive DB, path: " << archivePath << endl; + } + else if (archivePath.empty() && !pdAddresses.empty()) + { + archiveType = "TiKV"; + boost::split(pdAddrs, pdAddresses, boost::is_any_of(",")); + cout << "use TiKV as archive DB, pd address: " << pdAddresses << endl; + } + else + { + cerr << "please set archive rocksDB path or pd address, not both." << endl; + return 1; + } + + bool isArchive = false; + int64_t startBlockNumber = 0; + int64_t endBlockNumber = 0; + if (params.count("archive") != 0U && params.count("reimport") == 0U) + { + auto parameters = params["archive"].as>(); + isArchive = true; + if (parameters.size() != 2) + { + cerr << "archive parameters error, should set [start block number] [end block number]" + << endl; + return 1; + } + startBlockNumber = std::stoi(parameters[0]); + endBlockNumber = std::stoi(parameters[1]); + cout << "archive the blocks of range [" << startBlockNumber << "," << endBlockNumber + << ") into " << archiveType << endl; + } + else if (params.count("reimport") != 0U && params.count("archive") == 0U) + { + isArchive = false; + auto parameters = params["reimport"].as>(); + if (parameters.size() != 2) + { + cerr << "reimport parameters error, should set [start block number] [end block number]" + << endl; + return 1; + } + startBlockNumber = std::stoi(parameters[0]); + endBlockNumber = std::stoi(parameters[1]); + cout << "reimport the blocks of range [" << startBlockNumber << "," << endBlockNumber + << ") from " << archiveType << endl; + } + else + { + cerr << "please set archive or reimport, not both." << endl; + return 1; + } + + std::string secondaryPath = "./rocksdb_secondary/"; + + boost::property_tree::read_ini(configPath, propertyTree); + auto logInitializer = std::make_shared(); + logInitializer->initLog(propertyTree); + + // load node config + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(keyFactory); + nodeConfig->loadConfig(configPath); + if (fs::exists(genesisFilePath)) + { + nodeConfig->loadGenesisConfig(genesisFilePath); + } + + // create ledger to get block data + auto localStorage = + createBackendStorage(nodeConfig, logInitializer->logPath(), !isArchive, secondaryPath); + auto protocolInitializer = std::make_shared(); + protocolInitializer->init(nodeConfig); + auto ledger = + std::make_shared(protocolInitializer->blockFactory(), localStorage); + std::promise promise; + ledger->asyncGetBlockNumber( + [&promise](const Error::Ptr& error, bcos::protocol::BlockNumber number) { + if (error) + { + cout << "get block number failed: " << error->errorMessage() << endl; + exit(1); + } + promise.set_value(number); + cout << "current block number is " << number << endl; + }); + auto currentBlockNumber = promise.get_future().get(); + // verify the start and end block number, the genesis block should not be archived and the end + // block number should not be larger than the latest block number + if (startBlockNumber <= 0 || startBlockNumber >= currentBlockNumber || endBlockNumber <= 0 || + endBlockNumber >= currentBlockNumber || startBlockNumber >= endBlockNumber) + { + cerr << "invalid block number, start: " << startBlockNumber << ", end: " << endBlockNumber + << ", current: " << currentBlockNumber << endl; + return 1; + } + // read archived block number to check the request range + std::promise>> statePromise; + ledger->asyncGetCurrentStateByKey(ledger::SYS_KEY_ARCHIVED_NUMBER, + [&statePromise](Error::Ptr&& err, std::optional&& entry) { + statePromise.set_value(std::make_pair(err, entry)); + }); + auto entry = statePromise.get_future().get().second; + protocol::BlockNumber archivedBlockNumber = 0; + if (entry) + { + archivedBlockNumber = boost::lexical_cast(entry->get()); + } + if (isArchive && startBlockNumber < archivedBlockNumber) + { + cerr << "the block range [" << startBlockNumber << "," << archivedBlockNumber + << ") has been archived, the start block number should be " << archivedBlockNumber + << endl; + return 1; + } + StorageInterface::Ptr archiveStorage = nullptr; + if (boost::iequals(archiveType, "RocksDB")) + { // create archive rocksDB storage + archiveStorage = StorageInitializer::build(archivePath, nullptr, nodeConfig->keyPageSize()); + } + else if (boost::iequals(archiveType, "TiKV")) + { // create archive TiKV storage +#ifdef WITH_TIKV + archiveStorage = StorageInitializer::build(pdAddrs, logInitializer->logPath(), "", "", ""); +#endif + } + else + { + std::cerr << "archive storage type not support, only support RocksDB and TiKV, type: " + << archiveType << std::endl; + return 1; + } + if (isArchive) + { + archiveBlocks(archiveStorage, ledger, nodeConfig, startBlockNumber, endBlockNumber); + deleteArchivedBlocksInNode(endpoint, startBlockNumber, endBlockNumber); + } + else + { // reimport + reimportBlocks(archiveStorage, localStorage, nodeConfig, startBlockNumber, endBlockNumber); + } + if (fs::exists(secondaryPath)) + { + fs::remove_all(secondaryPath); + } + return 0; +} diff --git a/tools/log_extract.sh b/tools/log_extract.sh new file mode 100644 index 0000000..f4e4e48 --- /dev/null +++ b/tools/log_extract.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +log_file=$1 +start_block_number=$2 +end_block_number=$3 +key_words="EXECUTOR|STORAGE|SCHEDULER|METRIC" +filter_key_words="s_hash_2_tx|s_tables" + +echo "Extracting log file: $log_file" +if [[ "x${end_block_number}" == "x" ]];then + end_block_number=${start_block_number} +fi +temp_log="${log_file}_clean.log" +cat $log_file | egrep -ai "${key_words}" | egrep -aiv "${filter_key_words}" > "${temp_log}" +LANG=C sed -i "" -e "s/EXECUTOR\:[0-9]*/EXECUTOR/g" "${temp_log}" +LANG=C sed -i "" -e "s/requestTimestamp=[0-9]*//g" "${temp_log}" +LANG=C sed -i "" -e "s/timeCost=[0-9]*//g" "${temp_log}" + +start_line=$(cat -n "${temp_log}" | grep -ai "${start_block_number}]ExecuteBlock request" | grep "${start_block_number}" | head -n 1 | awk '{print $1}') +end_line=$(cat -n "${temp_log}" | grep -ai "ExecuteBlock success" | grep "${end_block_number}" | head -n 1 | awk '{print $1}') +# end_line=$(cat -n "${temp_log}" | grep -ai "${end_block_number}]GetTableHashes success" | grep "${end_block_number}" | head -n 1 | awk '{print $1}') + +echo "temp_log line: $start_line - $end_line is wanted" +result="${log_file}_${start_block_number}_${end_block_number}" +sed -n "${start_line},${end_line}p" "${temp_log}" > "${result}.log" +cat "${result}.log" | cut -d '|' -f 3-20 > "${result}_clean.log" +cat "${result}_clean.log" | sort > "${result}_sort.log" +cat "${result}_sort.log" | grep -ai storage > "${result}_sort_storage.log" +cat "${result}_sort_storage.log" | grep -ai "hash" > "${result}_sort_storage_hash.log" + +# cat "${result}_clean.log" | sort > "${result}_sort.log" +echo "done. result in ${result}.log" diff --git a/tools/log_extract_executor.sh b/tools/log_extract_executor.sh new file mode 100644 index 0000000..d081519 --- /dev/null +++ b/tools/log_extract_executor.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +log_file=$1 +start_block_number=$2 +end_block_number=$3 +key_words="EXECUTOR|STORAGE|SCHEDULER" +filter_key_words="s_hash_2_tx|s_tables" + +echo "Extracting log file: $log_file" +log_len=`wc -l $log_file` +if [[ "x${end_block_number}" == "x" ]];then + end_block_number=${start_block_number} +fi +temp_log="${log_file}_clean.log" +cat $log_file | egrep -ai "${key_words}" | egrep -aiv "${filter_key_words}" > "${temp_log}" +sed -i "" -e "s/EXECUTOR\:[0-9]*/EXECUTOR/g" "${temp_log}" +sed -i "" -e "s/requestTimestamp=[0-9]*//g" "${temp_log}" +sed -i "" -e "s/timeCost=[0-9]*//g" "${temp_log}" + +start_line=$(cat -n "${temp_log}" | grep -ai "${start_block_number}]NextBlockHeader request" | grep "${start_block_number}" | head -n 1 | awk '{print $1}') +end_line=$(cat -n "${temp_log}" | grep -ai "${end_block_number}]GetTableHashes success" | grep "${end_block_number}" | head -n 1 | awk '{print $1}') +echo "temp_log line: $start_line - $end_line is wanted" +result="${log_file}_${start_block_number}_${end_block_number}" +sed -n "${start_line},${end_line}p" "${temp_log}" > "${result}.log" +cat "${result}.log" | cut -d '|' -f 3-20 > "${result}_clean.log" +cat "${result}_clean.log" | sort > "${result}_sort.log" +cat "${result}_sort.log" | grep -ai storage > "${result}_sort_storage.log" +cat "${result}_sort_storage.log" | grep -ai "hash" > "${result}_sort_storage_hash.log" +cat "${result}_sort.log" | grep -vi storage > "${result}_sort_exec.log" +echo "done. result in ${result}.log" \ No newline at end of file diff --git a/tools/storage-tool/CMakeLists.txt b/tools/storage-tool/CMakeLists.txt new file mode 100644 index 0000000..0177f4e --- /dev/null +++ b/tools/storage-tool/CMakeLists.txt @@ -0,0 +1,12 @@ +file(GLOB SRC_LIST "*.cpp") + +find_package(Boost REQUIRED program_options) + +foreach(source ${SRC_LIST}) + get_filename_component(filename ${source} NAME) + string(REPLACE ".cpp" "" target_name ${filename}) + add_executable(${target_name} ${source}) + target_link_libraries(${target_name} ${STORAGE_TARGET} ${SECURITY_TARGET} ${RPC_TARGET} Boost::program_options ${INIT_LIB} ${LEDGER_TARGET} ${PBFT_INIT_LIB}) + target_include_directories(${target_name} PUBLIC ${CMAKE_SOURCE_DIR} ../bcos-storage ../../libinitializer) + target_compile_options(${target_name} PRIVATE -Wno-unused-variable) +endforeach() diff --git a/tools/storage-tool/reader.cpp b/tools/storage-tool/reader.cpp new file mode 100644 index 0000000..9ebd332 --- /dev/null +++ b/tools/storage-tool/reader.cpp @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file reader.cpp + * @author: xingqiangbai + * @date 2020-06-29 + * @file reader.cpp + * @author: ancelmo + * @date 2021-11-05 + */ + +#include "bcos-framework/storage/StorageInterface.h" +#include "boost/filesystem.hpp" +#include "rocksdb/db.h" +#include "rocksdb/options.h" +#include "rocksdb/slice.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace rocksdb; +using namespace bcos; +using namespace bcos::storage; + +namespace fs = boost::filesystem; +namespace po = boost::program_options; + +po::options_description main_options("Main for Table benchmark"); + +po::variables_map initCommandLine(int argc, const char* argv[]) +{ + main_options.add_options()("help,h", "help of Table benchmark")( + "path,p", po::value()->default_value(""), "[RocksDB path]")("name,n", + po::value()->default_value(""), "[RocksDB name]")("table,t", po::value(), + "table name ")("key,k", po::value()->default_value(""), "table key")( + "iterate,i", po::value()->default_value(false), "traverse table")("config,c", + boost::program_options::value()->default_value("./config.ini"), + "config file path, eg. config.ini")("genesis,g", + boost::program_options::value()->default_value("./config.genesis"), + "genesis config file path, eg. genesis.ini"); + po::variables_map vm; + try + { + po::store(po::parse_command_line(argc, argv, main_options), vm); + po::notify(vm); + } + catch (...) + { + std::cout << "invalid input" << std::endl; + exit(0); + } + if (vm.count("help") || vm.count("h")) + { + std::cout << main_options << std::endl; + exit(0); + } + return vm; +} + +int main(int argc, const char* argv[]) +{ + boost::property_tree::ptree pt; + auto params = initCommandLine(argc, argv); + auto storagePath = params["path"].as(); + auto storageName = params["name"].as(); + if (!fs::exists(storagePath)) + { + cout << "the path is empty:" << storagePath << endl; + return 0; + } + auto iterate = params["iterate"].as(); + auto tableName = params["table"].as(); + auto key = params["key"].as(); + + cout << "rocksdb path : " << storagePath << endl; + cout << "tableName : " << tableName << endl; + // auto factory = make_shared(storagePath); + + rocksdb::DB* db; + rocksdb::Options options; + options.IncreaseParallelism(); + options.OptimizeLevelStyleCompaction(); + options.create_if_missing = false; + rocksdb::Status s = rocksdb::DB::Open(options, storagePath, &db); + + std::string configPath("./config.ini"); + if (params.count("config")) + { + configPath = params["config"].as(); + } + if (params.count("c")) + { + configPath = params["c"].as(); + } + + std::string genesisFilePath("./config.genesis"); + if (params.count("genesis")) + { + genesisFilePath = params["genesis"].as(); + } + if (params.count("g")) + { + genesisFilePath = params["g"].as(); + } + + if (!boost::filesystem::exists(configPath)) + { + std::cout << "config \'" << configPath << "\' not found!"; + exit(0); + } + + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(keyFactory); + nodeConfig->loadConfig(configPath); + if (true == boost::filesystem::exists(genesisFilePath)) + nodeConfig->loadGenesisConfig(genesisFilePath); + + bcos::security::DataEncryption::Ptr dataEncryption = + std::make_shared(nodeConfig); + dataEncryption->init(); + + auto adapter = + std::make_shared(std::unique_ptr(db), dataEncryption); + + if (iterate) + { + cout << "iterator " << tableName << endl; + + std::vector keys; + adapter->asyncGetPrimaryKeys( + tableName, {}, [&](Error::Ptr error, std::vector _keys) { + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + keys = std::move(_keys); + }); + + if (keys.empty()) + { + cout << tableName << " is empty" << endl; + return 0; + } + + // cout << "keys=" << boost::algorithm::join(keys, "\t") << endl; + for (auto& k : keys) + { + std::string hex; + hex.reserve(k.size() * 2); + boost::algorithm::hex_lower(k.begin(), k.end(), std::back_inserter(hex)); + cout << "key=" << hex << "|"; + + std::optional row; + adapter->asyncGetRow(tableName, k, [&](Error::Ptr error, std::optional entry) { + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + row = std::move(entry); + }); + + auto view = row->get(); + std::string hexData; + hexData.reserve(view.size() * 2); + boost::algorithm::hex_lower(view.begin(), view.end(), std::back_inserter(hexData)); + cout << " [" << hex << "] "; + + cout << " [status=" << row->status() << "]"; + // << " [num=" << row->num() << "]"; + cout << endl; + } + return 0; + } + + std::optional row; + adapter->asyncGetRow(tableName, key, [&](Error::Ptr error, std::optional entry) { + if (error) + { + BOOST_THROW_EXCEPTION(*error); + } + + row = std::move(entry); + }); + + auto view = row->get(); + std::string hexData; + hexData.reserve(view.size() * 2); + boost::algorithm::hex_lower(view.begin(), view.end(), std::back_inserter(hexData)); + cout << " [" << hex << "] "; + + cout << " [status=" << row->status() << "]"; + return 0; +} diff --git a/tools/storage-tool/storageTool.cpp b/tools/storage-tool/storageTool.cpp new file mode 100644 index 0000000..792b2c2 --- /dev/null +++ b/tools/storage-tool/storageTool.cpp @@ -0,0 +1,874 @@ +/* + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @brief the tool to read and modify data of storage + * @file storageTool.cpp + * @author: xingqiangbai + * @date 2022-07-13 + */ + +#include "bcos-framework/ledger/LedgerTypeDef.h" +#include "bcos-framework/storage/StorageInterface.h" +#include "bcos-ledger/src/libledger/utilities/Common.h" +#include "bcos-tars-protocol/protocol/TransactionImpl.h" +#include "bcos-tool/bcos-tool/BfsFileFactory.h" +#include "bcos-utilities/BoostLogInitializer.h" +#include "boost/filesystem.hpp" +#include "libinitializer/ProtocolInitializer.h" +#include "libinitializer/StorageInitializer.h" +#include "rocksdb/db.h" +#include "rocksdb/options.h" +#include "rocksdb/slice.h" +#include "tikv_client.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using namespace rocksdb; +using namespace bcos; +using namespace bcos::storage; +using namespace bcos::initializer; + +namespace fs = boost::filesystem; +namespace po = boost::program_options; + +po::options_description main_options("storage tool used to read/write the data of storage"); + +po::variables_map initCommandLine(int argc, const char* argv[]) +{ + main_options.add_options()("help,h", "help of storage tool")( + "statistic,s", "statistic the data usage of the storage")( + "stateSize,S", "statistic the data usage of the contracts state")( + "read,r", po::value>()->multitoken(), "[TableName] [Key]")("write,w", + po::value>()->multitoken(), + "[TableName] [Key] [Value]")("iterate,i", po::value(), "[TableName]")("hex,H", + po::value()->default_value(false), + "if read display value use hex, if write decode hex value")("compare,C", + po::value>()->multitoken(), + "[RocksDB] [path] [Table] or [TiKV] [pd addresses] [Table]/[ca path if use ssl] [cert path " + "if use ssl] [Table], eg RocksDB ../node0/data s_hash_2_tx" + "[key path if use ssl]")("config,c", + boost::program_options::value()->default_value("./config.ini"), + "config file path")("genesis,g", + boost::program_options::value()->default_value("./config.genesis"), + "genesis config file path"); + po::variables_map varMap; + try + { + po::store(po::parse_command_line(argc, argv, main_options), varMap); + po::notify(varMap); + } + catch (std::exception& e) + { + std::cout << "parse_command_line failed:" << e.what() << std::endl; + std::cout << main_options << std::endl; + exit(0); + } + if ((varMap.count("help") != 0U) || (varMap.count("h") != 0U)) + { + std::cout << main_options << std::endl; + exit(0); + } + return varMap; +} + +std::shared_ptr>> getKeyPageIgnoreTables( + uint32_t version = (uint32_t)protocol::BlockVersion::V3_1_VERSION) +{ + auto ignoreTables = std::make_shared>>( + std::initializer_list>::value_type>{ + std::string(ledger::SYS_CONFIG), + std::string(ledger::SYS_CONSENSUS), + std::string(ledger::SYS_CURRENT_STATE), + std::string(ledger::SYS_HASH_2_NUMBER), + std::string(ledger::SYS_NUMBER_2_HASH), + std::string(ledger::SYS_BLOCK_NUMBER_2_NONCES), + std::string(ledger::SYS_NUMBER_2_BLOCK_HEADER), + std::string(ledger::SYS_NUMBER_2_TXS), + std::string(ledger::SYS_HASH_2_TX), + std::string(ledger::SYS_HASH_2_RECEIPT), + std::string(storage::FS_ROOT), + std::string(storage::FS_APPS), + std::string(storage::FS_USER), + std::string(storage::FS_SYS_BIN), + std::string(storage::FS_USER_TABLE), + std::string(ledger::SYS_CONTRACT_ABI), + std::string(ledger::SYS_CODE_BINARY), + storage::StorageInterface::SYS_TABLES, + }); + if (version >= (uint32_t)protocol::BlockVersion::V3_1_VERSION) + { + for (const auto& _sub : tool::FS_ROOT_SUBS) + { + std::string sub(_sub); + ignoreTables->erase(sub); + } + } + return ignoreTables; +} + +StateStorageInterface::Ptr createKeyPageStorage( + StorageInterface::Ptr backend, size_t keyPageSize, uint32_t blockVersion) +{ + auto keyPageIgnoreTables = getKeyPageIgnoreTables(blockVersion); + return std::make_shared( + backend, keyPageSize, blockVersion, keyPageIgnoreTables); +} + +void print( + std::string_view tableName, std::string_view key, std::string_view value, bool hex = false) +{ + cout << "[tableName=" << tableName << "]" + << " [key=" << key << "] [value=" << (hex ? toHex(value) : value) << "]" << endl; +} + +void writeKV(std::ofstream& output, std::string_view key, std::string_view value, bool hex = false) +{ + output << "[key=" << (hex ? toHex(key) : key) << "] [value=" << (hex ? toHex(value) : value) + << "]" << endl; +} + +void writeKeys(std::ostream& output, const std::vector& keys, bool hex = false) +{ + output << "["; + for (size_t i = 0; i < keys.size() - 1; ++i) + { + output << (hex ? toHex(keys[i]) : keys[i]) << ","; + } + output << (hex ? toHex(keys.back()) : keys.back()) << "]" << endl; +} + +DB* createSecondaryRocksDB( + const std::string& path, const std::string& secondaryPath = "./rocksdb_secondary/") +{ + Options options; + options.create_if_missing = false; + options.max_open_files = -1; + DB* db_secondary = nullptr; + Status status = DB::OpenAsSecondary(options, path, secondaryPath, &db_secondary); + if (!status.ok()) + { + std::cout << "open rocksDB failed: " << status.ToString() << std::endl; + exit(1); + } + status = db_secondary->TryCatchUpWithPrimary(); + if (!status.ok()) + { + std::cout << "TryCatchUpWithPrimary failed: " << status.ToString() << std::endl; + exit(1); + } + return db_secondary; +} + +void getTableSize(DB* db, const string_view& table) +{ + std::string tableName(table); + double size = 0; + rocksdb::Iterator* it = db->NewIterator(rocksdb::ReadOptions()); + it->Seek(tableName); + while (it->Valid()) + { + if (it->key().starts_with(tableName)) + { + size += it->value().size(); + size += it->key().size(); + } + else + { + break; + } + it->Next(); + } + delete it; + auto setw = 30; + if (size < 1024) + { // < 1MB + cout << std::left << std::setw(setw) << tableName << " size is " << size << "B" << endl; + } + else if (size < 1024 * 1024) + { // < 1MB + cout << std::left << std::setw(setw) << tableName << " size is " << (size / 1024) << "KB" + << endl; + } + else if (size < 1024 * 1024 * 1024) + { // < 1GB + cout << std::left << std::setw(setw) << tableName << " size is " << (size / 1024 / 1024) + << "MB" << endl; + } + else + { + cout << std::left << std::setw(setw) << tableName << " size is " + << (size / 1024 / 1024 / 1024) << "GB" << endl; + } +} + +TransactionalStorageInterface::Ptr createBackendStorage( + std::shared_ptr nodeConfig, const std::string& logPath, + bool write = false, const std::string& secondaryPath = "./rocksdb_secondary/") +{ + bcos::storage::TransactionalStorageInterface::Ptr storage = nullptr; + if (boost::iequals(nodeConfig->storageType(), "RocksDB")) + { + bcos::security::DataEncryption::Ptr dataEncryption = nullptr; + if (nodeConfig->storageSecurityEnable()) + { + dataEncryption = std::make_shared(nodeConfig); + dataEncryption->init(); + } + if (write) + { + storage = StorageInitializer::build( + nodeConfig->storagePath(), dataEncryption, nodeConfig->keyPageSize()); + } + else + { + auto* rocksdb = createSecondaryRocksDB(nodeConfig->storagePath(), secondaryPath); + storage = std::make_shared( + std::unique_ptr(rocksdb), dataEncryption); + } + } + else if (boost::iequals(nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + storage = StorageInitializer::build(nodeConfig->pdAddrs(), logPath, nodeConfig->pdCaPath(), + nodeConfig->pdCertPath(), nodeConfig->pdKeyPath()); +#endif + } + else + { + throw std::runtime_error("storage type not support"); + } + return storage; +} + +bool compareTables(StorageInterface::Ptr local, StorageInterface::Ptr remote, + const std::string& table, auto blockFactory) +{ + std::promise> localKeysPromise; + local->asyncGetPrimaryKeys(table, std::nullopt, + [&localKeysPromise](Error::UniquePtr error, std::vector keys) { + if (error) + { + std::cout << "get local primary keys failed: " << error << std::endl; + exit(1); + } + localKeysPromise.set_value(std::move(keys)); + }); + std::promise> remoteKeysPromise; + remote->asyncGetPrimaryKeys(table, std::nullopt, + [&remoteKeysPromise](Error::UniquePtr error, std::vector keys) { + if (error) + { + std::cout << "get local primary keys failed: " << error << std::endl; + exit(1); + } + remoteKeysPromise.set_value(std::move(keys)); + }); + // TODO: batch compare keys + auto localKeys = localKeysPromise.get_future().get(); + auto remoteKeys = remoteKeysPromise.get_future().get(); + std::sort(localKeys.begin(), localKeys.end()); + std::sort(remoteKeys.begin(), remoteKeys.end()); + if (localKeys != remoteKeys) + { + std::cout << table << ", keys not equal" << LOG_KV("localSize", localKeys.size()) + << LOG_KV("remoteSize", remoteKeys.size()) << std::endl; + std::cout << table << ", Remote:"; + writeKeys(std::cout, localKeys, true); + std::cout << table << ", Local:"; + writeKeys(std::cout, remoteKeys, true); + return false; + } + std::promise>> localValuesPromise; + local->asyncGetRows(table, localKeys, + [&localValuesPromise](Error::UniquePtr error, std::vector> values) { + if (error) + { + std::cout << "get local values failed: " << error << std::endl; + exit(1); + } + localValuesPromise.set_value(std::move(values)); + }); + std::promise>> remoteValuesPromise; + remote->asyncGetRows(table, localKeys, + [&remoteValuesPromise](Error::UniquePtr error, std::vector> values) { + if (error) + { + std::cout << "get local values failed: " << error << std::endl; + exit(1); + } + remoteValuesPromise.set_value(std::move(values)); + }); + auto localValues = localValuesPromise.get_future().get(); + auto remoteValues = remoteValuesPromise.get_future().get(); + bool equal = true; + auto transactionFactory = blockFactory->transactionFactory(); + + for (size_t i = 0; i < localValues.size(); ++i) + { + if (localValues[i]->get().compare(remoteValues[i]->get()) != 0) + { + if (table == std::string(ledger::SYS_HASH_2_TX)) + { + auto lView = localValues[i]->get(); + auto rView = remoteValues[i]->get(); + auto localTx = dynamic_pointer_cast( + transactionFactory->createTransaction( + bytesConstRef((unsigned char*)lView.data(), lView.size()), false)); + auto remoteTx = dynamic_pointer_cast( + transactionFactory->createTransaction( + bytesConstRef((unsigned char*)rView.data(), rView.size()), false)); + if (localTx->hash() == remoteTx->hash()) + { +#if 0 + std::cout << "localTx equal to remoteTx" << std::endl; + std::cout << "localTx :" + // << LOG_KV("signatureData", toHex(localTx->signatureData())) + // << LOG_KV("sender", toHex(localTx->sender())) + << LOG_KV("importTime", localTx->importTime()) + << LOG_KV("attribute", localTx->attribute()) + << LOG_KV("source", localTx->source()) << std::endl; + std::cout << "remoteTx:" + // << LOG_KV("signatureData", toHex(remoteTx->signatureData())) + // << LOG_KV("sender", toHex(remoteTx->sender())) + << LOG_KV("importTime", remoteTx->importTime()) + << LOG_KV("attribute", remoteTx->attribute()) + << LOG_KV("source", remoteTx->source()) << std::endl; +#endif + } + else + { + std::cout << table << ", value not equal, key: " << toHex(localKeys[i]) + << LOG_KV("local", toHex(localValues[i]->get())) + << LOG_KV("remote", toHex(remoteValues[i]->get())) << std::endl; + std::cout << "localTx not equal to remoteTx" << std::endl; + equal = false; + } + } + else if (table == std::string(ledger::SYS_NUMBER_2_BLOCK_HEADER)) + { + auto lView = localValues[i]->get(); + auto rView = remoteValues[i]->get(); + auto headerFactory = blockFactory->blockHeaderFactory(); + auto localBlockHeader = headerFactory->createBlockHeader( + bytesConstRef((unsigned char*)lView.data(), lView.size())); + auto remoteBlockHeader = headerFactory->createBlockHeader( + bytesConstRef((unsigned char*)rView.data(), rView.size())); + if (localBlockHeader->hash() != remoteBlockHeader->hash()) + { + std::cout << table << ", value not equal, key: " << toHex(localKeys[i]) + << LOG_KV("local", toHex(localValues[i]->get())) + << LOG_KV("remote", toHex(remoteValues[i]->get())) << std::endl; + std::cout << "localBlock not equal to remoteBlock" << std::endl; + equal = false; + } + } + else + { + std::cout << table << ", value not equal, key: " << toHex(localKeys[i]) + << LOG_KV("local", toHex(localValues[i]->get())) + << LOG_KV("remote", toHex(remoteValues[i]->get())) << std::endl; + equal = false; + } + } + } + cout << "The data of table " << std::setw(64) << table << " is same\r" << flush; + return equal; +} + +int main(int argc, const char* argv[]) +{ + boost::property_tree::ptree pt; + auto params = initCommandLine(argc, argv); + // TODO: parse config file + std::string configPath("./config.ini"); + if (params.count("config")) + { + configPath = params["config"].as(); + } + if (!fs::exists(configPath)) + { + cout << "config file not found:" << configPath << endl; + return 1; + } + + std::string genesisFilePath("./config.genesis"); + if (params.count("genesis")) + { + genesisFilePath = params["genesis"].as(); + } + + auto hexEncoded = params["hex"].as(); + + cout << "config file : " << configPath << endl; + cout << "genesis file : " << genesisFilePath << endl; + boost::property_tree::read_ini(configPath, pt); + auto logInitializer = std::make_shared(); + logInitializer->initLog(pt); + + // load node config + auto keyFactory = std::make_shared(); + auto nodeConfig = std::make_shared(keyFactory); + if (fs::exists(genesisFilePath)) + { + nodeConfig->loadGenesisConfig(genesisFilePath); + } + + nodeConfig->loadConfig(configPath); + bcos::security::DataEncryption::Ptr dataEncryption = nullptr; + if (nodeConfig->storageSecurityEnable()) + { + dataEncryption = std::make_shared(nodeConfig); + dataEncryption->init(); + } + + auto keyPageSize = nodeConfig->keyPageSize(); + auto keyPageIgnoreTables = getKeyPageIgnoreTables(nodeConfig->compatibilityVersion()); + std::string secondaryPath = "./rocksdb_secondary/"; + std::string remoteSecondaryPath = "./rocksdb_secondary/"; + if (params.count("read")) + { // read + auto readParameters = params["read"].as>(); + if (readParameters.empty()) + { + cerr << "invalid tableName" << endl; + return -1; + } + auto tableName = readParameters[0]; + string key; + if (readParameters.size() >= 2) + { + key = readParameters[1]; + } + cout << "read " << tableName << ", key is " << key << endl; + if (hexEncoded) + { + auto keyBytes = fromHexString(key); + key = std::string((char*)keyBytes->data(), keyBytes->size()); + } + // create secondary instance + StorageInterface::Ptr storage = createBackendStorage(nodeConfig, logInitializer->logPath()); + if (keyPageSize > 0 && !keyPageIgnoreTables->count(tableName)) + { + auto keyPageStorage = + createKeyPageStorage(storage, keyPageSize, nodeConfig->compatibilityVersion()); + keyPageStorage->setReadOnly(true); + storage = keyPageStorage; + } + std::promise>> getPromise; + storage->asyncGetRow( + tableName, key, [&](Error::UniquePtr err, const std::optional& opEntry) { + getPromise.set_value(std::make_pair(std::move(err), opEntry)); + }); + auto ret = getPromise.get_future().get(); + if (ret.first) + { + cerr << "get row failed, err:" << ret.first->errorMessage() << endl; + return -1; + } + // print result + if (!ret.second.has_value()) + { + cerr << "get row not found," << LOG_KV("table", tableName) << LOG_KV("key", key) + << endl; + return -1; + } + if (key.empty()) + { // print table meta + KeyPageStorage::TableMeta meta(ret.second->get()); + cout << meta << std::endl; + } + else + { + print(tableName, key, ret.second->get(), hexEncoded); + } + } + else if (params.count("write")) + { // write + auto writeParameters = params["write"].as>(); + if (writeParameters.empty() || writeParameters.size() < 3) + { + cerr << "invalid parameters, should include [TableName] [Key] [Value]" << endl; + return -1; + } + auto tableName = writeParameters[0]; + auto key = writeParameters[1]; + std::string value; + if (hexEncoded) + { + auto tempBytes = fromHex(writeParameters[2]); + value = std::string((char*)tempBytes.data(), tempBytes.size()); + } + else + { + value = writeParameters[2]; + } + TransactionalStorageInterface::Ptr rocksdbStorage = + dynamic_pointer_cast( + createBackendStorage(nodeConfig, logInitializer->logPath(), true)); + StorageInterface::Ptr storage = rocksdbStorage; + if (keyPageSize > 0 && !keyPageIgnoreTables->count(tableName)) + { + storage = + createKeyPageStorage(storage, keyPageSize, nodeConfig->compatibilityVersion()); + } + // std::promise>> getPromise; + // storage->asyncGetRow( + // tableName, key, [&](Error::UniquePtr err, std::optional opEntry) { + // getPromise.set_value(std::make_pair(std::move(err), opEntry)); + // }); + // auto ret = getPromise.get_future().get(); + // if (ret.first) + // { + // cerr << "get row failed, err:" << ret.first->errorMessage() << endl; + // return -1; + // } + + // async set row, check if need hex decode and write + std::promise setPromise; + Entry e; + if (value.empty()) + { + e.setStatus(Entry::Status::DELETED); + } + else + { + e.set(std::move(value)); + } + storage->asyncSetRow( + tableName, key, e, [&](Error::UniquePtr err) { setPromise.set_value(std::move(err)); }); + auto err = setPromise.get_future().get(); + if (err) + { + cerr << "set row failed, err:" << err->errorMessage() << endl; + return -1; + } + // if use key page need commit use rocksDB + if (keyPageSize > 0 && !keyPageIgnoreTables->count(tableName)) + { + auto* keyPageStorage = dynamic_cast(storage.get()); + bcos::protocol::TwoPCParams param; + rocksdbStorage->asyncPrepare( + param, *keyPageStorage, [&](Error::Ptr err, uint64_t, const std::string&) { + if (err) + { + cerr << "asyncPrepare failed, err:" << err->errorMessage() << endl; + exit(1); + } + }); + rocksdbStorage->asyncCommit(param, [](Error::Ptr err, uint64_t) { + if (err) + { + cerr << "asyncCommit failed, err:" << err->errorMessage() << endl; + exit(1); + } + }); + } + cout << "set successfully" << endl; + } + else if (params.count("iterate")) + { // iterate + auto tableName = params["iterate"].as(); + if (tableName.empty()) + { + cerr << "empty table name" << endl; + return -1; + } + StorageInterface::Ptr storage = createBackendStorage(nodeConfig, logInitializer->logPath()); + if (keyPageSize > 0 && !keyPageIgnoreTables->count(tableName)) + { + storage = + createKeyPageStorage(storage, keyPageSize, nodeConfig->compatibilityVersion()); + } + auto outputFileName = tableName + ".txt"; + boost::replace_all(outputFileName, "/", "_"); + ofstream outfile("./" + outputFileName); + outfile << "db path : " << nodeConfig->storagePath() << ", table : " << tableName << endl; + if (keyPageSize > 0 && !keyPageIgnoreTables->count(tableName)) + { // keypage + size_t batchSize = 1000; + size_t gotKeys = 1000; + size_t total = 0; + cout << "iterate use key page" << endl; + while (gotKeys == batchSize) + { + storage::Condition condition; + condition.limit(total, 1000); + storage->asyncGetPrimaryKeys( + tableName, condition, [&](Error::UniquePtr err, std::vector keys) { + if (err) + { + cerr << "asyncGetPrimaryKeys failed, err:" << err->errorMessage() + << endl; + exit(1); + } + gotKeys = keys.size(); + total += gotKeys; + for (auto& key : keys) + { + storage->asyncGetRow( + tableName, key, [&](Error::UniquePtr err, std::optional e) { + if (err) + { + cerr << "asyncGetRow failed, err:" << err->errorMessage() + << endl; + exit(1); + } + writeKV(outfile, key, e ? e->get() : "", hexEncoded); + }); + } + }); + } + } + else + { + if (boost::iequals(nodeConfig->storageType(), "RocksDB")) + { + // rocksdb + auto* rocksdb = createSecondaryRocksDB(nodeConfig->storagePath(), secondaryPath); + rocksdb::Iterator* it = rocksdb->NewIterator(rocksdb::ReadOptions()); + it->Seek(tableName); + while (it->Valid()) + { + if (it->key().starts_with(tableName)) + { + // outfile << "[" << it->key().ToString() << "][" << it->value().ToString() + // << + // "]" << endl; + writeKV(outfile, it->key().ToString(), it->value().ToString(), hexEncoded); + } + else + { + break; + } + it->Next(); + } + delete it; + } + else if (boost::iequals(nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + std::shared_ptr cluster = nullptr; + cluster = storage::newTiKVClient(nodeConfig->pdAddrs(), logInitializer->logPath(), + nodeConfig->pdCaPath(), nodeConfig->pdCertPath(), nodeConfig->pdKeyPath()); + auto snapshot = cluster->snapshot(); + bool finished = false; + uint32_t batch = 256; + uint32_t count = 0; + auto lastKey = tableName; + while (!finished) + { + auto kvPairs = + snapshot->scan(lastKey, Bound::Excluded, "", Bound::Unbounded, batch); + for (auto& kv : kvPairs) + { + if (kv.key.rfind(tableName, 0) == 0) + { + writeKV(outfile, kv.key, kv.value, hexEncoded); + } + else + { + finished = true; + break; + } + } + lastKey = kvPairs.back().key; + count += kvPairs.size(); + std::cout << "scan count: " << count << "\r"; + if (kvPairs.size() < batch) + { + finished = true; + } + } +#endif + } + else + { + throw std::runtime_error("storage type not support"); + } + } + cout << "result in ./" << outputFileName << endl; + outfile.close(); + } + else if (params.count("stateSize") || params.count("S") || params.count("statistic") || + params.count("s")) + { + if (boost::iequals(nodeConfig->storageType(), "RocksDB")) + { + if (params.count("statistic") || params.count("s")) + { // statistics + auto* db = createSecondaryRocksDB(nodeConfig->storagePath(), secondaryPath); + getTableSize(db, storage::StorageInterface::SYS_TABLES); + getTableSize(db, ledger::SYS_CONSENSUS); + getTableSize(db, ledger::SYS_CONFIG); + getTableSize(db, ledger::SYS_CURRENT_STATE); + getTableSize(db, ledger::SYS_HASH_2_NUMBER); + getTableSize(db, ledger::SYS_NUMBER_2_HASH); + getTableSize(db, ledger::SYS_BLOCK_NUMBER_2_NONCES); + getTableSize(db, ledger::SYS_NUMBER_2_BLOCK_HEADER); + getTableSize(db, ledger::SYS_NUMBER_2_TXS); + // calculate transactions data size + getTableSize(db, ledger::SYS_HASH_2_TX); + // calculate receipts data size + getTableSize(db, ledger::SYS_HASH_2_RECEIPT); + getTableSize(db, ledger::SYS_CODE_BINARY); + getTableSize(db, ledger::SYS_CONTRACT_ABI); + } + if (params.count("stateSize") || params.count("S")) + { // calculate contract data size + auto* db = createSecondaryRocksDB(nodeConfig->storagePath(), secondaryPath); + getTableSize(db, storage::FS_APPS); + } + } + else if (boost::iequals(nodeConfig->storageType(), "TiKV")) + { +#ifdef WITH_TIKV + // TODO: add TiKV support +#endif + } + } + else if (params.count("compare") != 0U) + { + auto protocolInitializer = std::make_shared(); + protocolInitializer->init(nodeConfig); + auto blockFactory = protocolInitializer->blockFactory(); + auto compareParameters = params["compare"].as>(); + // compare data with tikv is not supported for now + StorageInterface::Ptr localStorage = + createBackendStorage(nodeConfig, logInitializer->logPath()); + StorageInterface::Ptr remoteStorage = nullptr; + auto DBtype = compareParameters[0]; + std::string specificTable; + if (boost::iequals(DBtype, "RocksDB")) + { + auto remoteDBPath = compareParameters[1]; + std::cout << "remoteDBPath:" << remoteDBPath << std::endl; + auto* rocksdb = createSecondaryRocksDB(remoteDBPath, remoteSecondaryPath); + remoteStorage = + std::make_shared(std::unique_ptr(rocksdb), nullptr); + } + else if (boost::iequals(DBtype, "TiKV")) + { +#ifdef WITH_TIKV + vector pdAddrs; + std::cout << "pdAddrs:" << compareParameters[1] << std::endl; + boost::algorithm::split(pdAddrs, compareParameters[1], boost::is_any_of(",")); + std::string caPath; + std::string cert; + std::string key; + + if (compareParameters.size() >= 5) + { + caPath = compareParameters[2]; + cert = compareParameters[3]; + key = compareParameters[4]; + specificTable = (compareParameters.size() == 6 ? compareParameters[5] : ""); + } + remoteStorage = + StorageInitializer::build(pdAddrs, logInitializer->logPath(), caPath, cert, key); +#endif + } + else + { + throw std::runtime_error("storage type not support"); + } + if (compareParameters.size() == 3) + { + specificTable = compareParameters[2]; + } + // compare SYS_TABLES + auto s_tables = std::string(StorageInterface::SYS_TABLES); + if (!compareTables(localStorage, remoteStorage, s_tables, blockFactory)) + { + std::cout << "compare SYS_TABLES failed" << std::endl; + return -1; + } + if (specificTable.empty()) + { + // get all table list and compare + std::promise> localKeysPromise; + localStorage->asyncGetPrimaryKeys(s_tables, std::nullopt, + [&localKeysPromise](Error::UniquePtr error, std::vector keys) { + if (error) + { + std::cout << "get local primary keys failed: " << error << std::endl; + exit(1); + } + localKeysPromise.set_value(std::move(keys)); + }); + auto tableList = localKeysPromise.get_future().get(); + // iterate the list and compare every table + for (auto& tableName : tableList) + { + if (!compareTables(localStorage, remoteStorage, tableName, blockFactory)) + { + std::cout << "compare " << tableName << " failed" << std::endl; + return -1; + } + } + } + else + { + if (!compareTables(localStorage, remoteStorage, specificTable, blockFactory)) + { + std::cout << "compare " << specificTable << " failed" << std::endl; + return -1; + } + } + std::cout << std::endl << "compare data success, all data is same" << std::endl; + } + else + { + std::cout << "invalid parameters" << std::endl; + std::cout << main_options << std::endl; + return 1; + } + + + if (fs::exists(secondaryPath)) + { + fs::remove_all(secondaryPath); + } + if (fs::exists(remoteSecondaryPath)) + { + fs::remove_all(remoteSecondaryPath); + } + return 0; +} diff --git a/tools/template/Dashboard.json b/tools/template/Dashboard.json new file mode 100644 index 0000000..644a734 --- /dev/null +++ b/tools/template/Dashboard.json @@ -0,0 +1,1084 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "A beta version of the HLF 1.4 Monitoring Dashboard.", + "editable": true, + "gnetId": 10716, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 18, + "panels": [], + "title": "Fisco Bcos Metrics", + "type": "row" + }, + { + "datasource": null, + "description": "Height of the chain in blocks. ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "index": 0, + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#73BF69", + "value": null + }, + { + "color": "#FADE2A", + "value": 500 + }, + { + "color": "#d44a3a", + "value": 800 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 0, + "y": 1 + }, + "id": 36, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^Value$/", + "values": true + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": false, + "expr": "ledger_block_height{node=\"node0\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "区块高度", + "type": "stat" + }, + { + "datasource": null, + "description": "p2p当前活跃会话数", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#73BF69", + "value": null + }, + { + "color": "#FADE2A", + "value": 1000 + }, + { + "color": "#EAB839", + "value": 1010 + } + ] + }, + "unit": "string" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 5, + "y": 1 + }, + "id": 39, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^Value$/", + "values": true + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": false, + "expr": "p2p_session_actived{node=\"node0\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "p2p当前活跃会话数", + "type": "stat" + }, + { + "datasource": null, + "description": "Number of transactions processed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": {}, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#73BF69", + "value": null + }, + { + "color": "#FADE2A", + "value": 500 + }, + { + "color": "#d44a3a", + "value": 800 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 11, + "y": 1 + }, + "id": 40, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "allValues" + ], + "fields": "/^Value$/", + "values": true + }, + "textMode": "auto" + }, + "pluginVersion": "7.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": false, + "expr": "txpool_pending_tx_size{node=\"node0\"}", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "title": "待打包的交易数量", + "type": "stat" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "description": "Height of the chain in blocks. ", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 1, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 5 + }, + "hiddenSeries": false, + "id": 38, + "legend": { + "alignAsTable": false, + "avg": false, + "current": true, + "hideEmpty": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": true, + "expr": "ledger_block_height{}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "区块高度", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:268", + "format": "short", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:269", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "description": "The number of proposals received.", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "none" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 5, + "y": 5 + }, + "hiddenSeries": false, + "id": 19, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": true, + "expr": "p2p_session_actived{}", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "p2p当前活跃会话数", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:833", + "format": "none", + "label": "", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:834", + "format": "short", + "logBase": 1, + "show": false + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "description": "Number of transactions processed.", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "none" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 6, + "x": 11, + "y": 5 + }, + "hiddenSeries": false, + "id": 37, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": true, + "expr": "txpool_pending_tx_size{}", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "待打包的交易数量", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1024", + "format": "none", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:1025", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Number of transactions processed.", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "none" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 11 + }, + "hiddenSeries": false, + "id": 42, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": true, + "expr": "block_exec_duration_milliseconds_gauge{}", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "节点区块执行时间", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:1024", + "format": "none", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:1025", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "Height of the chain in blocks. ", + "fieldConfig": { + "defaults": { + "custom": {}, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 9, + "x": 8, + "y": 11 + }, + "hiddenSeries": false, + "id": 41, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": true, + "expr": "block_commit_duration_milliseconds_gauge", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "节点区块提交时间", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "ledger_block_exec_duration_bucket", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "none" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 19 + }, + "hiddenSeries": false, + "id": 10, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": false, + "expr": "block_exec_duration_milliseconds_bucket", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "节点区块执行时间", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": 5, + "max": 10, + "min": 0, + "mode": "series", + "name": null, + "show": false, + "values": [ + "total" + ] + }, + "yaxes": [ + { + "$$hashKey": "object:980", + "format": "none", + "label": "个数", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:981", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + }, + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "description": "ledger_block_commit_duration_bucket", + "fieldConfig": { + "defaults": { + "custom": {}, + "unit": "none" + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 9, + "w": 9, + "x": 8, + "y": 19 + }, + "hiddenSeries": false, + "id": 11, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "links": [], + "maxDataPoints": 100, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.3.3", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "IeXF6xX7z" + }, + "exemplar": false, + "expr": "block_commit_duration_milliseconds_bucket", + "format": "time_series", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "节点区块提交时间", + "tooltip": { + "shared": false, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "series", + "name": null, + "show": false, + "values": [ + "current" + ] + }, + "yaxes": [ + { + "$$hashKey": "object:1046", + "format": "none", + "label": "个数", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:1047", + "format": "short", + "label": "", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false + } + } + ], + "refresh": "", + "schemaVersion": 26, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Fisco Bcos Monitoring for 3.0.0", + "uid": "pUnN6JgWz", + "version": 1 +} \ No newline at end of file diff --git a/vcpkg-configuration.json b/vcpkg-configuration.json new file mode 100644 index 0000000..2cf4082 --- /dev/null +++ b/vcpkg-configuration.json @@ -0,0 +1,21 @@ +{ + "registries": [ + { + "kind": "git", + "repository": "https://github.com/FISCO-BCOS/registry", + "baseline": "b7d6b93d756f34e99bedbc5df191950c211bc6e3", + "packages": [ + "openssl", + "evmone", + "evmc", + "tarscpp", + "ethash", + "intx", + "fiscobcos", + "etcd-cpp-apiv3", + "boost-context", + "wedprcrypto" + ] + } + ] +} diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..95e9037 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,119 @@ +{ + "name": "fiscobcos", + "version-string": "3.2.0", + "homepage": "https://github.com/FISCO-BCOS/FISCO-BCOS", + "description": "FISCO BCOS", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + }, + "boost-log", + "boost-beast", + "boost-uuid", + "boost-heap", + "boost-graph", + "boost-property-map", + "boost-chrono", + "boost-iostreams", + "boost-thread", + "boost-test", + "boost-compute", + "boost-multiprecision", + "boost-program-options", + "ms-gsl", + "zstd", + "tbb", + "zlib", + "redis-plus-plus", + "jsoncpp", + "protobuf", + "cryptopp", + { + "name": "tarscpp", + "version>=": "3.0.3-m" + }, + { + "name": "openssl", + "version>=": "1.1.1-tassl" + }, + { + "name": "boost-context", + "version>=": "1.79.0-m1" + }, + "wedprcrypto", + "range-v3" + ], + "features": { + "fullnode": { + "description": "Full node dependencies", + "dependencies": [ + { + "name": "evmone", + "version>=": "0.9.1" + }, + { + "name": "evmc", + "version>=": "10.0.0" + }, + "boost-coroutine2", + { + "name": "rocksdb", + "features": [ + "zstd" + ] + }, + "zstd" + ] + }, + "lightnode": { + "description": "Light node dependencies", + "dependencies": [ + { + "name": "rocksdb", + "features": [ + "zstd" + ] + } + ] + }, + "etcd": { + "description": "ETCD dependencies", + "dependencies": [ + "etcd-cpp-apiv3", + { + "name": "grpc", + "version>=": "1.44.0" + } + ] + }, + "tcmalloc": { + "description": "tcmalloc dependencies", + "dependencies": [ + { + "name": "gperftools", + "features": [ + "override" + ] + } + ] + }, + "jemalloc": { + "description": "jemalloc dependencies", + "dependencies": [ + "jemalloc" + ] + }, + "mimalloc": { + "description": "mimalloc dependencies", + "dependencies": [ + "mimalloc" + ] + } + }, + "builtin-baseline": "7e3dcf74e37034eea358934a90a11d618520e139" +} \ No newline at end of file

%@qGTv+>5Ybf`snMTTi`duS~-}VMGR^5l$)$!*w-4+V?zoX_~qnfUyN5j1Me{}8Y zNS0GT?p+u;=xjZG^P7ubwHS;DKAe2)S>-q+mCHMig4$sgYgwiGB-9i`)Bi;rVp>lO zBB*J6VlFRxp)62>s_cg5sK&((lB1&P`<%%VZNE2JqV9JmOVs`TWQn?}(XKclf^(dup@E`jAXQael^sgA z2J0^EPt-T7rR%eCG)nzf5Kw6&UU-&&1_IJ{y*x?kNjuA*yLC126S^M|`3vK5aGaBP96m%9f9hvj@F zbqXQ_Z65335GO7;b-`j<{uqGT(;Vyr1iat1Z9(7&{r#f#&zQV5dd!~UX|w8xxbtNb zep|7g2Jb}=sNrgx--?N)=cuSWcL}f<{5gBPoP-#Bi779~9Zq}b;#_fD8ZDZqPe97E z;W;`F4y|AAROC(%aj1uVY#7_~J%MD5sdJ8c$pccR(oM5FrfI}#Ph zXUp~W8M812Y2@(;DN&g|%t9Wrv1Bu;LefJ zMds|3g~%D8AoTLN?&EX3MgUE!qK~LwECo(>Lfd>8g^<$m!vxP_=TS^(lJdF|tk^Pn z{U4BZ?+A9habo3dU;+Q}p83?8fIRW)~d_tDb`9gvdkSQe5U^|-k47mq~ zsUg*zX(U(&qpCp-gY|L~8D!pbA|uLZBD2*lC-;bdSxx4fqxGgm(Asv68yc7?mWj>A zH1feACUx=?!%eLo^od*)cbu#$f@|N!PSZdl*N4a=X`}8_h-o8&JgXSLYbZ558*m?Q z$eK98$%!n!Cu*Xb$Cg@ctT! zq#p}C;1Qk8V?OHsf zqsQY(-qIy)O&{C)_i#uT>b`VM9k>Lg2A@|WObtUx=!Qi_OWa!G1yH&%*gbJ%;~>YO zRml>qpGx6v6K6RnftCWfU zhNXVOJt!0DT}Ze>Eyi&Er&sAlPWY);95gYIPS;9a?9=w_X^lI49a3!8*K9fPI0!*# zk+3)YpCE!j4xf}85KS+Y} z6&b+7x7fQW@>s-V@%sbjfo_d(2IWV-)JDzX^3PG0VTZRW=F=Bye$YS_m_A=y z4xREr-+iwZJTy-?EtW0&4;t8#zTEJx_vHp#eVmJDAG0B!{iXC)mU;>1l3wIP^E6Bi zitZ9GGcER_e1`}6HqXOI;f2Acu5TPEbjw9Gsz0&zEO!Ya+N&RU zt=)^m!6CUGCbXw-3Y^m`5qP1I?or}FCkjBt@IirJ_<v9>}*dn8ml|d58;@ zXvVl{R;C@4b;MhhCBI)E7x=*NP2dpEx0Ib=c&li~(2$6Qk#tS}^1&aK9U(tB~a z<0!&pt%*qbMJGFWO4qz-gEC8r`*r zRO(Zn)2;sf$*X!SDHW@ZQ)Dke#%_vlP|uF`){E=e3&ba!b8fx9j{;8w`Tp4-;8)uR z;@2&}NAT9qkPx!Y?Vy(THqvvP_jLHG7yq6Qyhml!afeo>hbv0%I@nvc#QSyL%U^1S`EG-} z;|(kq*EchBuWP)!^^69G&E)&n+ua?OI(=0rf;_Tbj>eKQBsmr0IHz4aCg(o|%1^>< zWaQ#wuv+3cKCZX>HqVxSm2ke8h+NJTGj>IDM6PDk>y*GV=F+JRzWK6m?TY zh@V%HD^@poY`%8%f20%fbtfmjOO5IZEO5B-a?W>7CyVQv(Sa*33HYPyY~o+LcOASy3@Q?LG9F zmOoD6NQ!t6c-+ z`SDHayZ9(c4@EYgaO#<&mps&dm_}^l`m)6squKT*Jy5ZWl#~&#&Bz+`94o|>5Ig{3 zeqO>cfhT)8jfnVJR@d zBXQ1-u#1Gqn!EY^740}Ov-paQi%pxaD?C;(f1G!;>5}8>;o+O~<2BI{qg(Ifwxe?n zdOR%C4!wLxYwR;pp04T90=!$t4X$XbAkv+9o&KVN2*K1j2@ejx(EA?hL9jEk&`L{e zuz7RncOadu9@VQ%85I~3^m!on%5gkX$_S5;T+JJ%9m0jD4~1_TVDdp0?ah(wRD%c~ zylTOZ+w%Q&95gEZNKJgoz9%iD985W93zGyE&Fp-2+BEB$)`oNlgWm2#cf8xSHD4{b z=bHRhpY`4~4o!1rFl+86NM3O&fi`07d0a~Bl!KZNN6CD0NVNVv?oP&EatK(UVc+3K zCA5b;{RRx4i$V*HT-T`k99I@-q{~%rkjNoTjlx>l6jvokTFD3L{~S|p3EB6WD< z{qOIWiMt9wp{U)7uv;u3Gm*Fwi9{lCwusH={1tJ2{ozXO>dDbT-m|M5SDBv+Y74Vm z`-PU_)e)KDdg^77o>_^kiyuB(kkLiYfs8Gpv~asipXYk1-6S7A`d5)ov_PvUJl&}O z-1(O!*%5dN9>}xV;;KmN`yDU5QQQT&-ORZ)p|v5Wg1kRf#QYTA&k)Y7e-1bSl_54;vgar zh@rwfza{L#KnXnr^*r zHS<63NAq`oiQ|9Xrj2xfzS?Gl^2zxc2O~cY4(UX2Sp11az7sYP49!asCpyVtlQE~~ zcoQI@lP$*A$?#%gb<-u)DWUk`8jeb#>b#cK+2RiOFpKGeBF=>1MtBYwLLmY2DIblp zr_=5IPoD3 z7w|xivE#$RN-YdW)~I&ttFdZql7G*t0?+!;o9nm|kiedU6nK@Cd;Kd6D;3u!}m=Li{5)056Y5hZm++r()HywFzmRJf6(f(Mp823bDQx`p-O4nTyn6u!! zr?wv3#2Cwuq%yE8JjYZ&J5GXL;1V5y_X6(0yW(be)mR7vBE!J%Cb2}kvsCLbdr^ky zv&1$s@I7iFOBi0I)kBwYvG;3I#chNh{XzZRW562l9%TsneFWW*cR779rg)cnJb@*U zp7u;?FhrDvI7yQ`utu+?346tdBs3SLh8P&Q7K%`^Q{(|JJ2-a5U4kCt*TPDwIrK#0ZqE5U-;InME32r#-d=2ml+G5{B^?~0wGom#9sc6rC>{9d?D*yx zhS$_4Wq25J`@p9|pI!Ii1<*Y>IlE5hV>pZqXm@nt8NG6W=2*K2@$o@+j<6p6FmMMo zySq6{tpXmb;828z&?JvkoZ?huxK7|KfiG|!43Ex|3oYuN;CFXt$Dh-=BJdtVmB3*! zNFAvJ-Vgfo&FRtJ_D&yxL^aq5Yj-28{z&J28sVZ(cU<)8>fzUe9Xc;c?L5Hq`B4ve zK2J)8zd5@;xj5e5`6ZntiL#ILjMP$Y&%T`8^eRMP^e^Mr9)tF5c-TW467+VDX~*zA z+USJsRO>ms?F7T$cjzUR=r-NbKhUmqX!Z}ztzHhObD3nyTaK>A$YH~45#lTgYUhtv> zcv1B&q$djB4L_2toLU)1I*}tL6{$d=;Z`J(Sf>y|AL3_ISiW=i)kqwTP^qA`RAo)K zx>Y=t^diq!o8x|YPr+Z_QSjwEDtz+C<`q8qqi5%z{E^-hCx2|x`FOS+f_99v;Iq2i z-QM3nm@OZ(9t&20K+lRIrggsGL){ec*m9<~k3hM}UV35m*aq+xIGvxbtJSg}E7bxj z=Faw>>pB$K%olajWi~Er2)gMv8^<`=?$c{0a}N8GwoJl0Fg!o#(VoK|gW=}OVGq)P z?!m{&-w{2CE?p+qGk=AbHOEj+M{388jrSDb^Qv%S2FDRt5a8BfI!lbv6C4G|*UWk% z_QsOWE2bB7EG`G6BESm3#`aYB3V~P zfl-R4{$0h1O$8ur>jTz#lhILBgzX=bi(1w&9pNkXTNFV8n*6Vydu+2TyzT9s9wxuj|2*ztP&_Vr=&bK+ay9u_0` zdn3YsI-kRQj^p~iSVzy~Sl+9kW0;RmkG4PUem>70@>xIhF+c3{75B={*N=<-w)_j6 z*_OvWw$MlLjV)G3S(UsWBHd~u-eAmIB==Vd!$BN=Xy)MdBf`kN?(g{#b#@dR$Cpubkzvsuqbnuslj3CDLeh_DSKZq5o8A{sS31Wq61*}M&0zCkvK-&vXQ-8HY zo}WXSuYN4b3FCyCkg!5+NO_?~6nWwDLd{5cp?0La<*Eu-51F14bp&_1RErCzn2R{e zAY$&I_QRcZfx!h+?ATpuxQvNIwst8Z{r07#tlGtqQlgaz9)4*h5`H@spxgUiSWhy5 zcXzzNo@4;SjNg<{#DynWN{1G>ocpbGEy+STJPMKkhc`})h4nf{Vx4@5A%(+_200Qj+x;V%mrUb!NOdBuvz z@=6tz6)ejuQv_C|PQGy>kbI&UIYH5^^ZXprRPi?;<%DrUO-NXwHl(~zBZ|Cmd7)+` zyihw*o?kShQDmm4#19{leaK;vRWJ%9a9m|po1A>QV;#;FcmCV?5cRlz#)6+S;Va*e z`|Le>hqp4w{o5^pqxjOB52U8chp(I>)?PG3A0S$1W0x9fuV>>yEv{labYvEX4Rtao z_|AMTT+@FX6b*`QE{bgy*#PjA+Z*8zjW(MsShwBke)yP?=1468&gs#c21zTs z4wh>JdD(}0eL`bK^xuzzFsT-#mmY!$g;~~_;Zh8Umwb&Up!0A6R(7}u8^~V>Z(l?y z5i&NEht48@Are;)-|4}2r}LaFc>}@$C~CY-4Ko`Y{Tt~+x`gkfL4zW{3o5IX(N4s6 zZuHa~=MQ*_5c5iOol69fUT}gc+rm>zlunr(0n1_QfdWY+WcjK;U)QTIA;NTR4bKr& zmlPz}DN^OQsg;CBBNd~D%II#39b!gsnC-6v;Le8tke+{md^y|$xq74q@+b6`SG$jK zQRQVw6Xl=Na)59)xR$dPE6l&#rU?M<@1?=*?xewO@2A0aL!lPGBtfNA0mM>j0I-w_ z0IZv{30Zhjcw@j6?nc7K0adrVbP1bMJ|x1dLGZ)J6-{)6Kx;2xCeOD#yGvO^q&b;B z%6bZ6aq=zEdXo4Scq`LK+sgLSwq$%;dq7>`%}Mjm-zIjxm%Lu=+O&0+k8PdlrRoYM zU#m1Bd}TCYL{T&Z{_i0FW8jEFrN{9q;0IxNsY@DZR=+JqTeuiEFGd6TfZ;zK%J?|J zZKOs1FN5R&@R$@Kr?>d6HrAE!-sB=*ZB@&WP@ObSD)ok*Xu^B9o{V}~BKojxwOu2y z*!Kb|H7-}e$RIB8$!+5O2y0d8cyKkr5k7Rx&@r0oF?EXDo4w#pdLnS13|Z$hyq}_j z|0L3XC>B}u))$NJkM_m+UYCf&B_Bge5Sn$$;(;JZX z@~MR7zP}H6a&r*v^!6a=^adg5^cFc&mVrxzS#!=JV*^oR#aaiV8k17pw?L3E+*#>2 zOD*(RLH5KJD9O;IrKbWP@JUkQu*4-<=g>9Qnip>1{3a;1W4^j97njBC=J%a{8(0iqerhsl{5&N|LPMOvyYw9c-nT8EQdMYE1Xj+(0r~{c4xP~< z+odu(z+D=n1DxJ~q+X_0k6@GQN5JV7BR;y5t1mL1#K5i~(OchaqCnhqJ} zf1Gw`j}|ad{&w-up>H%1QftRrZy)jkA(ec$p4?zOm2iT#-k{7%TQ7cCxx6f|@PnoeG|h~2)EdJh>Z)OL`RT=a)8TZOI=hH&yo>}gep@gXFVAeNYNry zIb1u#Y6512Sr*Yfd1ahUSnWoPa4NOfp1ew|O}I@#?c#TTZxep^_crFY12w`gtCs29 zngPg&QHDE8?cGR1`HU7Bm@EmH5oRGx(i=$0kxke{K~c0gkGnhlx!m1}78qzw@Y#VF z=d^dvqri?49_F+IF~TXGZS`zYLfNE6JMsK%(z?Yq0W?sLHPS(gvfEK?-!)Gcyz%O# zDfC>yT)g+xxu?L?1#c=Z9Rhu3P6P2hb;j^Yp9s2KV7;@@J|fL7b|dMe2}n!W1~rzL z@2Pb^p`&@;T!8Sn>@7bu)@F5O^bMqkh4+qv`^ye4cT+tUoy7S3Pp?sB(B4s7BGOZC z=yEq&JXL-BN)0Y`W1*q2d&&%h_KqgrL}GBk?-CeHp|`xySew^(e{UmsA<*7a?1mBp z*Hu_cdQZ`t$&CHIcM6UDJ?^jGQbXdsr^Zz92697`{2sx<<79&xze{v*p&Q5!iT9p{ z-c)+*@4Z`mV0`x42K<_Ux6w=1^>@O=&BqP16 z$evO{mbs~j06PBbB_9OJ#&raGPstz(+;kfP>`i2XLEE^dy`=%l+C_+{W}*(?<=yu zkl^9}4l%L2v!S5Si0`QJCc*+kIn_ieoGMd~4+S)CohVB%5|k}IRle9L|CM&)Xrnms z>YAslmgjDh!(PHj6)2E;aw(8D<+G3MQfx9#Pc9i}Qzm&nBu_-ero`&WsKj~~tI6Wg zVRe6R6IS>4Hf6QX`k@$QoStkl&U={b-JDcn@75GZoAQ~yIH{%tM$d)>#yi;SJ%3Q# z?oNLecX!^wWbdv9lf8SIaW-YL#{#K(noxSSBcW`-p*}i56?-g@4%*+77fA=rd3+&l zq15<&7t03X1{{kL-@|jyg;TT4cpGrcc<*7D#c-kmjghMvX1om;X1w<@+(#Zb9PjUK z$nyT)dw9mY+n|YowE?%ldMB%WmIU3pD0X*eGj?}(-otReU6DP6CFTZ9OU(DM-EYCr z%}i(;FidEham(`+o!f8S&{(~A)mZOfb%RBNixqhN*?rHF!3FnUF$`LNcHgmHaIySP zFIi^L`g6;;?-&e(-*c_d?DkwLEWCFxjEUC2ae>soX@T@UK6|bb+&(C@=OSUy-ofoA zO9U6Z$qHd3zJur9>jRhDdwI}Uo3kp;`g;#sf!2HA3bgldyWt9DR ziTiIWXh6vF-qXlDt~Owp@iu5;#(OWr8!Q#d1!6;%H{DiYzQBZ4H({hTY>R_|N3nzBu+0rCC+9; z7swkd78+ghJ}e=sPwMD3S*1FTLcJLh8#Wm$Y%$iwU&}qdm6{vU;1Y z1whAtefb1R-{u6$#*GQwp7I|UjI;rln@WC^w~5#{XnlEom%vA{y`{ax>C5N4Y%6#cA)Sut}8w2i>_ep-~Wz?Tr7UcaKm(kua z7zn@To`73P;BCh5J5~W6{QVmjEca&>NbhJ^Zl#Sl?P)&Zg7}|zaJ%7}p#84;x9)q_ z1>t(tzkx~4_vf~Ab)cB-byqN-If7~8nByj&%;@ofNYIJt4DYLThh32`R742j9gsD@ z6EF~BI9BL~j~tBuD9ugM@%6USAL%)JjE8+`sKVw5+YS8a})dQuGek&(kUL}R(c zdm3FKay%Gaac?{*-O(H=EIU;i;T-wl@s8lG2Am)Ch_qBuBVyETl`ZOm9#V-w$|nt& ziE)VlxTiCE4l@;*{BNlSHC`>?KJ4g=4<9WIJgO3B&4Qg2@$j7vVUlghl&cOlXd*!! zh(_s!V9Mh`srW&fD@2f;%*vMmFV-E7-7W^{hf!y27aR;np%D!gE5~>?$g8TXqIFv@ z=y9O48qt8M8Ls5(iIFi?JyY;xiYfbBtQQ1W6a)_hQNXv(xMDWkX*QcZWTU5>e6+4& z<$w4ns)qd|N9F#8mw^z_Rz5=&sUK?z(RHSJ#!SMa<{er|^?U&hhW*fEj8@NI)KfPd zV7YiZj<;NCpnEB$=i=eHy@X(YqDi5YogsAckAurRuEWfsz2TAUsNe$(S~FH1K;Rvv z7zB4&hju{`X0bpVR|Tf&kAs&A;Res38FdNJ2HrQq@ZuO#A3pj}(RPH`5%VpI z+c{ra*x3qknXe|OerJer;u%v$H4`a7J!=NysBKx#bqfCjK*hn7ap6rexU)J-^ zIVt+YDh@x<8FHzJkE5cbZpbStWH>^^YrJ#!BkQJ=vI*|pg5Go46q~r|DizfeOq2GL zjTcd^`@_egY$9|_=N7_44~}TW5qIdg9$58LvHbRk>0d9it_KfV?A>7lH;WhcKzom# z&CtZ@!($Vd`l*vm0yg#!iK#R6I&sS7k*SK%5kp=8*<$-L85caT(&38gF0uJXnByLnDx!3FN( z!iDZ)1iJxxDKC+e26PuI4e%~rXz(Vp;sSSZ;zD;Z(uWTRwu=o1xQh!irzQ4_4cf(n z4co;6%ilyE9M~=<9N;c4V7gmRiW0gZtG0BBcDAk`JL0jou~?z*ScID;G0q>DQymLq zgF!~?(kQ%TEu#B6eroy~S|DGHJL=CS8nW2%JA#qjBr2yKZ?bJ~=FPrz+$0?0i3-}& z@2VuBkuEwqT@YpxJT`u0zJWamG4@m10h3djDpR1L1%aWf<*L9lhDr1fjj=ol-ltP1 zA*vN130TYMB;?qJOR{WT7T7mAp8M7+hsp5V3$iPBz?}Rpl7ac0QMKum8 zNcK@>CFyjOV;*2tYJ*7d#3r$c$7^Z@2H;&%v;`H}^jccv`yjQ(AuCcpb}4f#K8Hr$ zsaKW=F&>3JjM=r+efX#XDv0p-2~4&Tx|nNXbTh>(FwSwrfsoj%cO2_r58OIQ`f-qU zl;p=vI!%HgCnlwJG`Tz%EtO9fE9GL zcWlruE(~lE3vzRv&>A3Y0VlAbp}QGT+Er?UwBWngX&`iSq*b_7mf8qiJT)=8nR0gA z30>BL?_#Ne(9IDBg|;pvFw_L^;>U&WX2;rxCvek%?qbFP@8-qcjwdkF1n=U;g=cnB zwpd~!oYB$uV^%+IO%~4sxL~a3`+Jb&^v9FVCW0TPWjUSYgK0U#;ohLErd!LZT$R{y zZ=s*^YLU&h#`y{k3gdxzKJqI{*bq&*b@eDy_)jDt@bP$!YA>sNQoLf%Ut;&qf0DTM zx~37ybHzlWw>g6;TG!faIkoFyx0o zGJ`S9r5F1YE?8&tC7gTA?ir&N=9Itu_g_-lYFTB|c{aE#?-oz_TRuL=*-e$r>i_u5 z1vVtvG>=j7vLx~T<1ge#Q~!l^j=%iB|8e$)<+>WZgS+FrUKNXstS6gR@qeLK?`(8% z6zTLvcTEe7l()`N%W{jM2A^Wo4crfUZoJNCkQ^s`rVgobN>WAN{tCTwz#lBC=`1VdEB-$4)Fppkg{9U&y7S59tpdi7stL zllWKQttuGF*wI?Y`K*}N7@&H=echrrmbcbud>Bg6_Tyr3UY1YmC0vEkI4O`_P*UVK z%dE-sN)%bGp#~5b&z=-Ox6DPp+A7A2OwCh^0%bj}R!jb8x?Yj9E3ZHvn4PUhoX9^3 z2-B!`8z^!LbeRv;jB5+6zvXz?GtvHs`$QqQ?ha>cfw#jm?*Kuf|&G z@KujU<=H#|a0IFeV5b$TPP3?kNrwB16MxKDDS!f%wjp^w9p?}0X}hWd zS+aI=v3nq8#dZHn(Z&lpsU5!wEVfK@#}4HR^R5;9JZ|44@!mM9pM_@)Pr%AL2)U^Z=Ss4 z^&B^c|5(Ek=E)U%NmHz2cfj_98XEiS9|s2yFh7!pL|1Ru*n%hE@CGaivT>~?$OYh( z89br|-{Inx=#~Kp6!>)nLVqPAt@kLkKXZgN=)N zT6geh;F6d$;7Y*^F>sl`gj)ug-J|x8P2l^Kv@PD-xX$rjr7;pb(2q$gaVl_O~H=qgkFU;#I}%(Gu4H--tan z%SOb?(Yjuh^ZyBqu8M_95_kjW3YFW~<9w2>XDb;jLRK!^;=;%u?2yTN!IsG|fe#;X zrF{wC++4KYj|2YOJ%b`>mt{mo1PbiUVV9t4m(#uQH|sPk{*1~f7EBc`{jQfk4){;3 z8VzOqWI#N6EM{X;!NY_G!vw|$>NfJ z$C9lWphy8nxQ~B^v4{8vE8OOdPxTH&%>GF!6^X^NWJd|E?0;iNXIAV zC$}eQ#r)?Qs(w0GH#zxUbi*SIz>APlX>91m`FS$$gCVM#jHGLujA1HFD06Hs)ee<^ z*ZFEqu?pyTN#s(p_{D&$tbTGUM4D1I8^m*2o2(RJr|%^`x0n||`&-EY7%FP{G~ELK z#JUACE1O^SYOJ@*7NFXD(~blh_&Fj=-ADz%fRAwgT;z1BIz;@D6;{E@WMb+K^Zcoi zbXii+lo`CGbO|`pemz;1qsLp^&@;)vzbNXO6kd?=rQcx3iJ%-Ni_aRzI5a$ZTrZwz zRX&2QT<3KNv41|G8LpqHH~H2YjAa!zqNbe-GPRXG>M>vf&4$EA>K zWX|^#DnJevcW_`%Mm$t^!KGaBH*DfD@o2~BDgWUKOI z&@>?Lrtx*L6x)FYCIgU3>X=qVc6-19w9Bg|;+XRWYR-s_4W=8SHRUkaw2;MU6MQss zU6qQ|`P@?r47$}<2(YUKwyTQ<36+TjT?p$4%oQ|2c;#HI12klQBUkoGO+t?>HI3{7 zAqE3k_2YU4SAs<#ds<;&OxClZ1Z&eq)64NgBrwGqWmDH+-{EPq7jm4Ub2CpKuwfHWDHl>~y^8(9IhS*rm;Y7nsOw8tlq1y1Ap)T}} z7YE{Qv97a+nPnrlwKPGp|je32{LCA0pQV zm4rxOmrzmMMnhqU@g*6$yE$)Xi`G!(VXO|<6ozw5X0{!ZbE35dawc}tFU!?%y(A6S?w2b6 zgZts+bu?R#^QLeIz02~5^&CSCEh|-%ucdX`FrX6zb{r*f-V~iAm12dQmm~IoF~y*4 z>J#uyQ5Roqu95Y%_zoAiMk2;I`AareTYz&VS-TK^tGWZVd?W5DN|nwbj%F10jj1*= zN7c+)VMpbxTr@frYm2&b?TQP|V1BBdr(o7zBWqMH->|B?@aT!Qwt{+8ndnH=$Cd}& zErB+AHnsXiEl#56_+L{Lx>}@rMO{tyW{YDQM{KRGT5=g``5&Y)aL6}3ChA2onGB05 ze9hq#YPIcrxi=x_7{dut%tsCPwc0$?iEWkC?Hd+F$vWN*RpNCcXlv}zIC6gw221#rc&Xe*YTfD{6UD0V% zqLQqUg)HhNI6FgrVwY(zbjYJJ2%|NCk!R0@7B5E#ESXnVFN>Pc9rop7)?US#7d~TF zc`h!kE{I3hAeLdrA*Lf%Qy!%&tZ3G5n?JD=|MdC;|Aa7|9%pYf{SXX;VCzRv_9R_E zK0I1*gxO5XR%LNQhA=@2bvQ&gHzteU=V)8B=^4TzauVh}SAjpqa2Gtxaa##yL1tr> zRjW(vg2d6eI#GLvv2pkj}`|^|dLq3KR?Cn2Dc@?}pz<8iP2=Mk#B1PNy+ds!T2Qq#| zx3!2vaZ4v+^EGCl;86?jY|TkDO~tTjRIVF)pZ0jv1c_?6&q;9CvQC`^-&QyZ%g0A& z$2XB$SNU{^kg~L=C|<)f0Y<(D&p8&(9Lww&n~caQ+#FpBMqzIYR(pi=sFG&?42Ruh z=MF;32Ez9IlyBZ)V;crO7R$Jh(VbvCv$|k$co%1IuIx(TDqvzn&TB?c`||3zbi$@K z&J1Ijb=Rr#^ki`kdt$8N>J?TANT6_=0RsE+NZS(tbK+PvYo7jo`Q+>p>o3I-Z5d2JIG^bLW0x5!_YxLT5rP14% zG+ScNNu4D?I4met9be#GR)_NNbxj^#FzsTbhy<+b*hh)q*zVY$f&-nWy^I8~`ozX6 z&*_$fETAe!s5*NYA?3FM;VbcXxWY;&e~{TjB%!tG7yfW-AFR$62RJ!fjCsZ)XQrxk zP{F!~gk?FK9br2{TTBt|Sm5Ja67yq$yU)XX37_~CmfQ;Gv$Qywp{i2Wb$*b;F$mTU zm6YW*?yc5r-%x1;fJ6-gwCbSB7a1lJ_9_Yt{fHg1`oeE;fuUPv7k1*o43|}Egw%#p zjRkxE#_s~Clm*bSaL+Wz>o5BtcYSqzba~rI91c(Rwi{`u7Y90pYWe%$=Q)h8&sLes zH8#o<4Rwza?=d8yp}J{^KkcSI;J|xaV-S_q=^Qgt@hs9W^JzOPht^1zJ_9V5gD+P% zS68M&4`dsLA(scHqD!HGV8Y$GWuuTvg{GiOE>_tC)RHGBp#csMPC271ZHfq8Cf?pZ zVMDH+w!70#+uw83ASW^T8fg@O(@hdZ@GiqGp_R11=OhXGZW57qQ!oOH5tXsOXBro3 z-jmQsRgufbxB42lui0{BCw^T|aTXEFcq}HS!EnBW(=}`8iqkT(j*N7xLhRR&ChX;a zQy{|^VPn^$0dopPKZo#M=p+o*qsM&oG|wv2o!R&qw|>Yj2>GJ8hgZUsCLlaStt6_t z{XMlm{;)p`zo4{SAsPTq5)~y(J*4VS{KjoLuy5wsbhLzAF!Sk!46}z>RTWqq6q)Jh zkVJZpDClB4r!rnjt9sKBPR5@|RI*{ns^bzX7Q0rhmzpNLV^Q-XGQpafPe(`BcWj)s zN(aGay#R;pN(Jd@!D0P*#^I2ui%KvRsb8=))hx_msaf8ePnew+EDPO1huRmbnkA*- zbe2EoGfLO!oHBHV87Dziq>*U=NnVi;O0{w(J0Y1*A6@!*!60S~*TItTPp3O!yfOX*#?psFTA`IE(*cGPBu_OKR<;2JXN#d}| zv!@$>@;6gkT_9eIfTN_U7&>Eguzod5Ae^r%)-La#;kBf|Q27du3D7*o<(&7hI_Isv z{d!GemR+P&@|ps(l=J&>Zb(B+-adlc@eulkz1G*o6ie>ClSI>l*Hz8KxOgtc(sNZ6 zLk^aRZ1mzna;zga2_1+bg>Vj<5l9`hkwup6s!Pkx`6hMqrMMak+Z5amJ{b zGv>1TZ85?Ym83qTg)<|ufE^+Q%e=1Nl6=Kw;u(D4Uv&<9h&!Y)oFDVoae*y{89dm~ zv1LLv&is?6Ff~8tJP@sK?04_UbL@T$`Kd9;?F3Bo$%P^)|I(npg@UPJ2^)i|xu9UF zwCarBg(|B^(HD%)&NpPY{w5uWhENS1+a#hbVKFgHHp<{{&P$@uGH)^OO&4L!nSsDO z(*&j?=aa4WbDhhd7f0mY*hp(mQ*d97=I3_x^4FZ~QKs}o{xT;+cR8{2wgvVsI6z@% zNL>czpaFs5XOv^D&EYC(YR>bIlzNQ>bt9WyRXFp}Nz@H2`E&|&TdT>jmEh;_R3A)X z0KgpuX?xH}GFjXkZ>FAD+A^0#@8sOOvdyI1x;5N8j6A`Ikqfk~yZ;lhpcG@A@M+G_L&)j{Ko9`X1W_M}VGZIo2yqh~7#6AC*G zYw@4FjO_&m7<5NxYNtWoL%po8e$!REeXUuW{J;61n5h&^SM14cQghy8!+%SPA&D$q01}69^M{gmJ33WHdLpBh zPJ15LB~A_3uX2Jp8G;6%{VJXa9?m?(eL2CY20$DXn3+aTa7rft$|G&Tvf1z_wBx<|FxOY@=X1`YEIT*3&gx4xerKlsO zA5=oi+NCn65%Iz*EF&6rRgO#jp>^|GCym&p3ZZ}** zJ9km6^xN~{_O3(E%A}Kt9450-F4pJ(?FQIod2lkcNy-h-_{bvdE{?H!TXi-$Hy44N;qI@W{@%brYk=TaSc_k>Dwp1ZxEb2_;ezmbX9p^v2rPNrZFNzM?8`V2Ps z^-_p;otC{}n7U~k-&UAfBq1_Td^ysD$m0Bq17Mr0CC+#~pTGS872IB01)SZYDutU3 zrbL{P(aH1H9JebA9OBs6jf@kx0Yb@#qN#n*8W5TYofOqg!aDaNdxb|nj0X*L797aQ zAm$obHm-D!YJ&Vhmw!%R+`;yh9a2cmfMUP0j~{7tm~?jIYrrmqTagV!j`X6?2CVR+ z7g@^n$QouSY*0-``+wcpgT1a8z44g{(HKCJnP?39AWJ=E;Qz7k2BJ}a4v&!=TFepE zm9y~+Y7)Go?iMiG(>43!%c1NQ7XZ6Bf3^@maOixJxV z*e+m{<~twA78F#b__{^smDto3v$rN`oXVE7XIc;#MNA9UOlbOWnp}x4hx`S-l)R-D zDwm`&9cUdF+3fb{nqgEL0phSl+_m6CT7ndjA`$d~s-{3;T-82bPKHuEi9TnL_a2^- zCSMgIfc~NQL;8Eh=PmjZ>=Ht`T%9cp&?7O%=%#6r50fFyIk(Amx-h*3GIeW#;AJ^n zj~+Fiq9>9sXfDG%Mf_Ohk-w0TJXFB*-r3^!eOmV6#6k&Y*Ux(ogr&bAg=*nX%9;2S zm#{Pd9Wkkoedhz`m^h+`(tz!QB)*T1U-I^c5_tc4z~%`3dFXx~>CXa}ZJ_cW(GHKG zc~)cciZ5E(a8xHgFnP#eCT<-Q?6J^NF{CjFg=83%P>tyfADa?(BowHC{vxV_Uq{0K zdLa55Pm`j27)(w3$xfit&{o^0jlkaZQOh|#pvQ&OPWPZ&VLlFfPhsq&S`++&!NeV(nngzW)jxCsoUNr2O=xW{sYD#336KQPUnE$OLJFt2bA z0+tVzuq359gH2KV4Whq$#nu7geGDMODDWZLDH1<1vg}6 zSt}GPG^0kB@F&=YpDJ3Py6*={+Vb?Cn;yea&FW$Z7wXv$4|H3>YG3hfn$CJa*`IYo zVVHH+A^U0ZySX|I&MEMhc!s|s9cqZ=9P&#hlK^g~imjNYp|1Mq1ciMtekO~K;Xoz; z;S>&c8Xiqb1=&2HlGp}8m0;&?*1qkApzE0=Rke~UAX=O=98&F;;xtROCa*YJ7`CQ= z7E7xTHywo?ksAiyrhsY6#z2l#JmoHsj-_lm!fM5-R80(W8!(%#zT_)u6);;mR34$@ zjhU;NqYgH4^V^Xe{0X-Z@^_-&TMceZnm84qf-OLT&ekjV&kLo%guiABs>Ki-B*tZh zC~2Mmk0xHWsX!V$JfLBMg+Q!+NJA)U9wI_(PeXa8IM1{;(=Fdq0 zlpyWsf^m#1g@ZAAi6*}wul7Xv-=WAaR#(uMu)@70VPVFx*Fs7OsD)fdzCv!yVSY`) zVt=)pvRtt`lY%kJ{(K_@SqjGnNx{Qm1{CP-epfC0C~85MgIVZ{z`bU?3uC@4xC!hN%u zJ{c`mGrV~xy@wR|J@0zemvFeYzG&NKeL@oJPy9YP_;PS|>7<-p{(f-oq+DK|zzJCs zVatTPu!bEwHV>*9*i@=NYjMnNyZh7a2<)*id>^)O&CqIg>#{%-2s`*0G$?uXGXhA* ztRcAe8!ASqHAuEW(NK8aXh9JG=yG8vJjOQmxLCUAT9;TX#j$P=%-d4qCKbpQ7gFt| zww6*<0|)DX+FJ#&ai#|qFWhma@g(GTc%Yy$$UB%DkM8lp{)wv^kQx>pHyv9LzQ{?& zY&QpeQHndBZaOZ5h?dTMxud$4BZGpmiDlKrC&x^v$=Gs{-c&bAotJ+e!q|=#$(Kt; zhc>6|wS#?R`9e;q<>GI{ThzKi7=^;}h|9QRX*X_`jAOOpIgkfj96)Enst*s<5_LfYCOrVQvYv>Kw1xIKbT#|i*CtIr;G_It9*)y)t=y&4X zo(|5w*BCV^FbRBr#~35dJIKM}grP4F4;zD!&ko=icA5m( ziTX&?Em#4vN7KX$iYu+e&~UM&O(KFEU^oV&ezovr!UG&XsWW-oA=9w@U&C980Egy;M8Z>4i1`%;v4ekwp-dF8C`@#W9Fvdi7Zv^scanV;k)6TsRy3{v z2+l6-uv{HbH12|>VcSK{5qumKphLs55i%rF;Mnb^83s&Gh{Ta zFgelN(i|NCll3*Bs{(N3U`uB;9NsDb(+Xx4fb&JQ3V@=%B;s+Zs1Az4fU;ru)&a%R z2|%8Z zUnaOMR#oSz3`3A&JzDE0e`3tSKWq5|f1pcn>;so=^~Hu5@pVTYEaE3=I1m+N3ZVm0 zW02<8H%xi$yvi3wi=O20&;c`zXgpjHm%(No?y7bfsFBx5Lv1FIm6TPcC#y}QeTv>J z!y^#F45iYJpfr&`AvRh%X=Hv*%+J#NG_c2X^G9b~j`dF&FG0~fHyLyD(~vx$>C_AJ z%P?}Gt!#sfg$B4ZSeJ&@rOrRnzpf3bYs2KVp?Ym@mc_&7Z_7suvC1BBXsj_SY)t@b5)dD0WqlvwfCI5>Od}pqBr+5PX? zqm{DCOfwzg*a8$x?qgQq-0R6oDVOEE#PtzPvdSJ|jI=%x-oPq<4U?6_(E713-3{L! z#QQZa*wubu)!_FRXCq%W>(QC`jbOv}C!Cb-Z%Vq)^JWSL*m_Z#LHIQzGk`(MA1b`~qS*dg;H6Tu zzfQob?zlsj&F&AdIk6k*3|A-V?z$PExMR(888#}wUuTaqIOQ2ajob>&W%2R14Bc)I z{@>vHWYzpP_zGrY!`E*x(mvUY{+7LEkN4-Mz~2z0sH`6yB9Cx#THFuku+`rS!K3;6 z?GgH}^;Leirt)u(>v8si>8AnCGt;E!=tFKJk!RKYK{MgdN~kUH zw~^gQ=WiqcH0VY4n0?3ewi2E&uuUy4Fr?n_znPAR?KZZ15#I&4#Vafp5!_(IQJxwS z@LeNE*2d6;LkcwYg1o2wIn4MVjgA%O_LhC8FM%e!P4ua06>Gy}w@LP;8ywe}yCNRP%Q=wZ-t&>>f8;tQ|j3YOOO#dlmr9g>XByagFRFzhy9yeU?kBpVHg3}u$(%hj8G9jEkN{k zT|LL}SMYVDvA+ndpMpIm8v-ulr{-%kqv-SNEE?0leOnY8GX44uX zMl*i>SYowzCd+jVr;)sB38I@EbH=niOk@`SLkKxYHLFR687|>Nj99D95R%1~MfiTU zTX9&7$99L(MGNui`mAGVQkl1W*OU>citXviM zm)X=>KZjUzGt=>~w`O!>UiAyUp(I%2mq7~@7uK46n>|^@-DdN`tV_4F zOqu2VHlMAhrXxYu7UK9cbNaS;fWx90oVQrtFeQybc3V^km2KMaj%J9xCjV|x`vxbg zN7Hl&(F(>eu&hP+zi=(yk}3aXSosH-e8~QUsZtQxP5ARQ0MSDMFW9dDWOU?!7t!5)&S)lkOL|mAn&DPu4)XG{0+)T zeh)Vd`2Oj<3K163yJO;$Mgn#`Xh zL?gR=U)7J$%8lJUoHCk|i#-xg%bDp}YVxZJCn&mL%9e(KH=Q^^;<@`}nu;?G0sb^H ziaswKRBID|ip+*4N$_Nku_gc|xjO(#F)Fn7TYR0{P9#n;7ACp|BhRJ%S>yo1$Cyqw z-2lP}3Sp~5a&sMyxLB)eIlcm|%y5zVVvmmkOi4N)au3tVVVQ2sv?~H6+_Mwjt`0cH zbAh8JC++L)#rcURosJJ>dRcE#z!A&Xq*7q9qRSV@ITUCF4isPnOYtzA1n`6qHaZE2 zm_GI=&fiY?g16=lF=wnIon)X(e@OU{7tp%!cCNABnKTvs(K>(>F))`6i(&u(<*T1G^wp|IkC;;i(2l2u%PK20@gK^V&hNb2S_CzRn ztax<7;sV;+99H0`2>X|aOTh1Adw@7pv351xQe(?M7(}xKP`0p!!2NR*%*T97O&7~7lcFl5-{{G9pDTrVXI24QnBVxcfNpwtuTYxSq zE*wg0!kF5UASm1!Eyeh0U?1Sgn$5h^L1iHj0`yiDn8}Dl<NjjL?pa+&~M z?(FRG9CcFfDY*&wdEX28dA|X;`-_(%k{f`ZceZ^Lk?aD3^M7Ea=L@554&5qHjE{Fd zf8PGpQ+piHVZ7M;B88%IuzIXYy0zHMaGF6uFL$ge>qNVHI?<{M;!d@BqeSXL;R|Xy zlF|zidVh%R2?is?nc|Kz9|{D)(fm>h8tEGE0^tEbimrxu(6TO0-pMO`P@sSDnNbu% z1d_98fB`GY2-*AH%wvScp;JmsH8%rG0gNgz*-#c$w%rV`pFepzj#JMN-KK&a5s!=4 zHMu;457>TW5e#DY94BC!!k3;dn9)UH8`R1PrCSZn#2`UNIU?2Llob);Y+`tGYeh?p zZfb_7RNR_o6A>9wZ4C4gEga+lg9vG28Zy$7dk#+B6ugKX`0U)Wpy-JrWZBK|;CeW8 zknQXfF$-GxUk|K7%S95_*8^+RTB)D6cbXI~zMSe=$&h@Jg*0>>Z|RsXUU|bls&^HWY@XwL0rIcj`q%U>0-x2`$XaBB^7;^}}}z%mZwmDTYg9 zjA<~+gvAznFvR=CJ~jkLA-^d6*&D61q~0LXMg!IZay6=#31DY+y|zXRg1WWk1|?!n z;T%8<9ZHf)Ol`%@vy;D^Ufi844k!chA9SEJ27D-Ab%-;Spj(v^R=JbE${V?Q`Uv1% zyEHtn<$k)jV;6Ua36-XA#uS+b`WmFwndGeSkM7R>Iu#kJ!w}H+O@ekA~YKXU)kco zZeuvaAyN;HF|AU`XBPiEp*2j}pP$$nR{;De-qMsG`-}2VZ!;4%LP*j72-r%F7*=t< zcJ?5wa7~q#w(yPjMhP4Xs~3j8^pjl139E$MEzk)QYXT&UR8pwW2Xjb~1q^R|agss0!Duw`<(@PUlR?mtIKhvtO6%QO?fY>7}7o%Zyc;yMzHi2WNF=P)>X!lnN4@aFeaR%4`W6usuIq5 zou#vpfl6=yDiu<%kxgM+WZaQP4jud99trlH8IH+E^cV^Z7jCHxBhWPn?OV4-)o9n& zj;zG9lamuipVlo-mej^Ux6~2ZAS1qucl4MoY^^#5C&D&CWw3e_2F}MVN|O7Y`)vGb z;6RNmMH&cZ1n2t+o=mHH{gBZ!Jb2z0&L|odj^)K@_y@nx)5y|j{%n-OHfv1^JqU}t zc$>yfWGRmO&Zf{=p5bM0#1+(F9D0S8E(8+v%~|pY*}|-WF#_#?DBgHoz-pgl6l*3V zdIP7UV^Yqe%Rub`xo= z)Q*rO<$~MGr0(w-5g^OY3;d|H@xi_VzI`f<-QE~eKm-2p*i+4GWLVZgvdph zYl;w?A0|JrMzGGlV)lt_%lv$73W`%meOe zz%lax*9>bY+KFXJEKEYdaWW##mP(44UW-mnEY8Kc`NqM(5^;;V+}+;azu(3~f$+E9 zNv&c7Z+Anyd&~|TZ;kq*_u+GIXZx=`=o5Hfww4HtNsjE&nfn;yEVV?13jgfTovud6E;qWeBG-Mfr3|8Hoy|kwe&(PhKHBipZcTh z_Ci_TogMeb=+|&m#^>H#^+wpeIX&9j-r4DmxVI_d=S>ke!aF}Z?p3wZpj-*3vT;PF-UElMD5RMM~gnj)jifxVhRpBC}G z!d|HS)DWGp^}?d?r*}8~n1n5|Sgm{N3NyGw^~b7*m%XY(uh%SahQ&yj=f8eVRwbLL z+uJ+IYVYKa@j?~Z2k&7ul8>$QswL3)0-}w3n2#Ruu14a%02KJPRUMM)NWq3@3 z?N7U(#mjn$<74#PPmEB2gL2$Y^Bq;Cm^7(_fbI?*<9i1bXs*-tPs931`0bs8sH1vyytk+Y4Cjb#L)?0(&**`mm9i)ih5DZ zy1`JVL%c?v42WsOgS{Jpo*YPNRa`BEC)z2x^|xX%CR1gs4`7+3;ftvqgQBMf2&@&& z-ZQTtDo9de1mYL55F?Da%QPhh|4zVxAMYtgXvy)*avJU^iqUAA_Q!&=Fcxnd_xCOC zj-Scsg~u^c?`TngZ(3LLAzT=OzmnMN1idW9wOxS{YpW%O@E)$RmvM;(ga4YBW#K#$ z9cZxaW4$0ZYQEe{3s{T;jA9VQnlZu9=l~?B1jqtlYOuv95?n{2@;VeIR|gX;AMF8OJ_M zi&a8EyN81@csfc&TA|lR!%ioKPv8D(o*2OXpKrnF@6_Cy_jf3hb)(O^GDh4!3kT@YZ>*GLL ze#F5XY1s*SX5?iYmg=EqT_+@IFyzw|(G96L62P$Vq4lt)P0Hw!LW2fUF? zjul+|zn?y@P`n+`Xg;f*$Gu zJ>jdQ)|6Z#{0Ocs)H1I?1CI;Z}njgH#BFSdx`o?Hh#dys+vF=814$# zjUz-P7CA^i@iI9zp*=FZ%+(a1peKsb`MRm&LjN6PVkZ~kQBz)?;lS{yoKMQ-(-fDe zwJyn$XsG<*>PDg~} zQkzA17FQ%Hy~R@R4Oefo{1p2wjD5!3q zy8%jRJD#-NMjEu&*_WzZFB|EEzvoH&>`B}Ar2W;C_KPR&S5F$QLU=0Zt07`Jcp#f~ zTWfvcs|XMK;*@Ix#Jv~1r|x0KG;ExO*RU$13A z>lJY?q^2*Xr>I-x zIG_G;ZWnZcLDb_;V4yTZ%>_Vkl`UNOu;;Q1saB3q0X~w7niMi#C4!u*; z23Gf+_(Iv zU+jsxe!yz8DzS5qgq~~w(UVCxQ^!dMHz6H5H1066kREWUwVai z+e3jbT@bTPHE~QG2qFYy3^va0i_~i4gji>^8@8jJ=#7ldJ3cu*xI4eSAD$fDo?Ri# za0?qzaE}nCl@8*n8Wq5Hz6EnEHkUF~fd>F>BCi~HGK@47!~= zFUJ)>E_jJf8Hl+cDR7g``6J-aWxPI03DvqR|cZ>(Tzg_JHcg* zAnZNGw25>B&x`Pmf?Dz`7?_Wmz%UNq$Hu8yo3qj`Y` zKx(j0%8ZVU_TENxakk{F1z%&XyTL{7!c2%U{1jhO6SW>kR0Ayv?9RN+RmhR8a&C` zaP4w}(`42$Js8M3f>jWF)Sg___l!Lzn#?_5@PGPr(!2yL8VPx)rz+2P-DYGnS|Dp-V<4_31SPcEjE2yWh4NLb7M7%b;%yG z-Lh4dU;k09F1Af989~%yOP3;Z=Ia*lGas_}lIe)Il`aT*d#SM%jSr0mFvO+a-}-tt z08ZQ7G;p)qO@PP#)xYUY!;S2H4_mCHBSOk4nNDneMh zG2a|2E)ZJ(Lb&Xl7f<;N=HO`^*j8%73j{0rV~t3KGf18o2i%wdE5--a6aq07`ddzc zn>r|iQ+n~+*n{k*ax0l}GX6(O{1Pm^k7oqWlPv{VtgLV;V?m0 z-owlth{uZ~5C~F@cLES90uOjrXi9$UI0AowW2uL%;P*izV2A6Od{;6CB;PuYfZ)L` z_!BqAs@qmaf8s(?tPzf(uHZSmNGV_Vy`d-szq1=5ae|;=9i<#_go1350D4G|^VN?D zkYs7=DEDMd`{<0EcDg|M$yvo`0{lshaP9O)Wu#>gw~QYHjewjMi!RP!NG+DdqKuVv ziU&U9LjjjH__6D5Nd1&@gzc~5k>eNy9LtLs%SROs(>of_ywMsd=|H_p9)ZCPo)T8H zj^fTnc%6*i_KWe&FT}?C{cjn@8$BW#;Yh!L9fA1`4`e}TpIZ8sj@*D$!GbSo|5Q4!zzSDFcyz9@m(I@p3Q+`PtV9p$k0jh_37)WS(h`k)r!_h)NTk!tnWp zKTmWZb78T{AL7yRj?r+5XT)aFQjXXBvQ>D&yDY00JWv_04j!ERj&&}^E#8#rkgC@> zHo=p#9aTE4vOgiYvPBxW64hzYHzi)l>!|C^8a~tU<`~L1gCnD4I4hswIMM-ur;_6( z9pLSTE*R|l`HAURSptL?t0+(KM(XIr;Y;?2{)tf$?+!=Uk#7&jAn5(!SU$aW9amBA zp6CsLj`qE)#_L!)cYi+M3H1mg^!)My7MZxz#xvqwf_+H-s{Dj&0`M*A#UhMs0`x!d zsEU1HFv}54bWG<>Kd-C65px3udk68*ON0*XFSHdV4#&52@v@3A>cn9$%e!jv4GTfB zI6IDmesyoHd+I=*Y&H!y0vV1taTyHHmH*5Kxd^7<#Gkd!>=N*>mlICH=&S|Ym8iQo zdU&<8&q2r?gi-)L#3S0{^2I=n>0v63vx4pFY63WzgcX)Pr=pj;FiwLW#@YaZUMef+ zcqko7l-;8gL=Z-Z+8AH*OiTD+%MZ(L5-H1ziMyO^d+Uq$0N?nH5Yeu?JDXze?`?!h z*DW?Ilu$P;Ro*<`h-1dxuv~b)imP^{7YE0;cQlY`RoG(tVv@zUv!*hBHD4cKC+M_+ zs}0JGNKXG7<6$zh^SCtnM{4OQ6v$VQ8t9vsSj+k`Z?NKVsQlh#!T=~7>w04%mIp7h z!9iez99h#bYTzrxFD~H1dRiN63OIc$>{IUuvl?evWz)I+R9Xb7F@e`wGVHtB0Y^R@MY*qfbfIYW z#uSvIPhlDp=N(msAg8EaA)dcGs7FO1To97Wx2Om+=?yW2PBAVs-a7l(m=qN`p`>C$ zoLM+XTW^aPl@~<-bP3zwJu4*mVH0`1tHG z4vZB}yrWoxgiXm+Q`vavK`V%J-x0yn910h8*hZe1?Q^b254HF3a0!dC$~KsQ6SJbNUEs;rvuj>D59r&BWzTP z((t=Sofr}1I0I{4;840f@B|io1Mplh*;UfVp2neo1xa`i0OZq?1PiC)6gWh-!(F_Q zy&@&lKx5S+$ep}++S$e$ufn^+z1Sn~=-#Eoj^bNAsd)>Z%|~!ThwovO#MApQf%tKL z7%z6dAHfP9_=j=A9sm)XfJ;CaBj_U#MhQ9%L{I`=1YwM@2S6A{o!@VQ+v#`^E;j5g z5XMpGU7O(Y@sFzOCIlkR3t^7K-V9-!uzN!cC+P1GK?*rQgi$&@BEqN<7l|-Z&}Slo zQuv)H!Wa>+iZD{l%_58y@w*5kLH!ClVnom)o*5A=cu@Jz4Z}DQ-;FR*#F-Ffo*fgG?AL z&0{8vuT+Yt3r!e3;!_hr3Od<@al&3V5uA`4P8=oVmlMW{IO>Fv!k#;wI3ZV_2x8E; zCx#Pp_6g&JyniAX`3!zxy#&my-#;i)M$lm>j1%)9ieUL&iXsRBAEPiv)afXU7Iqa1 z5nhO5%%{u!YlkAp<| z@?g(L5GIc5=Fk)A>?_br=d-(330F&TCg?z; z4Fz8WwhQio5DEXKDKY1g_7NR9Zg zE@p^na^}rkQT$Gq3arwNUSG8b=t_j2b2(~UvZTW04a-Ie6f|sx^GX+8H((=Od4>En zkiH*C{~So)3#9J`(su&s+l};ZGSa4-tm1Ftzzzd+Qo6a+x0Fh!FHUQa`zPL?E*GOJ z7uST{{E?M&Tk`c?ylv7tT2)Ev09Ab>vfc|^Ajtk4^y(;RI#INSaZa9#?#X647NHLD zDoFfL7`MFXjaf^;M$eGp@qre2?h9@m?S&4V`E0lcHw@ou_b7D%t-B;>YF}mcv-Y|> zD41|nlvds8Fnnv`Hb?n?3!G#RK3dHC{^h^_f?Ct#4|(+;^iwpzZTXk~N6jHJbR9J#i}J7>zbOa~J4_Z5*%F8f ztSNaK^&>kLO4^DBTUZo6IUWuU*AsNVFCVPKJFSjTK=J3roF0D=HSkc;b$LKdXw}Kb z9;lBR41Q5K;l(8kT!TNs^eU^LpuF(Oc5?s_MMcZsHbJg*c{-HY;1q{+j|UTosH4aA z;z@K6k#CGuLLFQ!eXQw9$f19_UX098Zp{Y`j;IE!a#YTIG&QFK?8Bb(i}h=mq9!OJ z_FgT?o4c0fhS5wB@V4L>wLMVsR~+-%``LCg?b?&NEfFY*qnZf7vb#5>OqAb^OYq^oj}0FM}I9S7IC@gZZIhIc{caK zndaw~rKcdJG;vE?;zdu95o!v&><*Q3T63)%wc)f7;zhp7WFz#(rKazV^rbv_$=-US z-3)I$U2aZ7p$sCXdjiKE@=BoOMscnYs zA?{76IcIe<*NetBbl1SJVGzZBLgl5ZX;ewUw5HzZ&IeXG>E#k~iw)>lf@ADTb5JMFC+qOmE<~5b z1Cx{}bW%u{!j=MU_&mT>AYb2@`Y|#2d`aI~PrZ~t9X&+B@%hSQcM%QNB5MNE(j(Jt zo=4W#_%;*==<=}{#2}-L4&@ZAFW=0QVG<91WXp=7}E0Q#`yG$Z111-tHv@2EC{200N%2D~P%vKHlghMDcSzhoc5loYV7%@^@WKaav7R z1{Fhd+&jEJ(tLizCWH5uh?Kj|qkBsQiP4OE21%gQ1l4Acq7+N5(ww%-Z^LSr1i7I` z9Qa&rvAtQ&ep^*^jE^H{-)8AS2#1ZM20jgBG}g8 zdN`ElsR;;l+A*Tl1kuAFKz@gN#pLaxo=Vg$%BOan+dBX(pLIEL27dvvjQRn-jB0#lV%Zi@r}{3 z=b-MvuzH0(np(HsgbUTN)(GSdC&#FoueMW;cT9Nt^*vp>3HR2BpcQhxQ4@%c_$`0K zM8#y7=I`XhjLqK7VU3Ani0q9R;Zga{+8i}x21$>=8NC!uBqZQpT&)^v!AC3qk*3N! zS_jq}MD)w5*&CghZ_+sM4itybn;>Va^Bl2e!Wx%VRjBZYoeJ^b6Z&?Wj8>1|pl<>G zCvtY4xtWC4vy_{m0^|92o?ueD=-KSrnnMJaRO`OC{FnHzHmE3lu^gtU@Rzmxs zYZ`TYKh1WZyq{*fFTymT^=xCefrw$N$mE-kKevHoujvse4ElZAQN5_rpM-9<%}MB1 z(j=&r-cgBO=~mh6TozK#HV%Gd@a2PI|@RE znEHzMntX(monQPlTSBp8Yiw=xsQ`(4xQ-*Vl5(cOt~Uf+;}i%7P;#@soZ-F+jwsFpH)}YP zY$)t{P)9fTL{X_G7vw6#QPX@?{um;{kG{{churJ) z8pVP^&%5$bA2W0Md}1JdC4wy%Du;Zhm=uKj>l?O*vx^MxYy6Z5k0yl&n-STGXrp3W z{X5DjaQF0ozcypM!BH&URZ?r&!GwWb@+q?LG?zWHg(Ip3X&%yGJ#0xSTE(%H;{qfs zjUs00;1KiZi7q$%LpJBZM_@(%P{*(&cKalmHycM!nU zRI&rSgTmS59mqFiSbGQlEk@Tn(CI~tG<3vD#8sjJiO2X+mIN$llOaW;on!{KohmeD z_~~&WjOz#FOGJJ+C-$L|);p}sgs;*BkibvqPE82Ixgiq(a$Qe92B6HnmjFN-8T%&8 zy9hPz#=MJ`b#p}ctiFqyeU0RQfSkEe^DeI3+Ym{l0zjjXr*r^bt_zmSbO11I1POm& zdFd;S61{^w7_Si?3U+bc$Na=e{L@TnPLuC>bU=xndj}9Xitg_v0Cj+*kO54XN?C8^ zuQ@-&({gxjx*jyP{Kyu#!puCxC5+;AnBkI$|Hxk!^jdhg1Bw_qCM^AjtRJ;~XjDI^ zIbGr|F?7$_>~RZc;piD$onGVR5wCKtj2kV-J?Z)ZcSb!RS}^QCsa0+5NjOj}drQ*r6u4$g3cc!Z_&U^b=j1&{OpU)#0qwv7W({mi~B7V_qT zV9~eKNs9v8rbu@4QWS=+wh~M7O0rx3ea{RjTC^#Vma-2{AbVzb5ii4;;TanPR6Xp! zuz@ts8IoyO!VtI&^41W{kWI9_)_1#YRt%+Jqkr1twrBnbSa>65M7Nop0E$l{zmZM& zzlFG=9naA%h__g)xE`}rGXP`?-0gigliFRG$ncr7*ZAZ7bNfoA8~HsMF_m^=WV)^M z^O>AEmQj9MfYG@vYYc`X;X~9>7$JO@1Es1XHf}lr+@CaGmIU5=8DwSWl`lVbdn-f+ z7ap*}?(Uz&yD`=7q-Lu;h^`ow5IAb9?GXxe!@?Wq1dqRz5 z*-3@?+#W9kjL)lCm@Off+@h^FfXp%!kBtb;!^;sTw=O=Bk&Gl+iPW0PcVPP0RGlu| zv+tm7$8Qc}B6Kr*Z9F=C3nLC^xT5WDexJt-oC+yDPtUl{fhdpDFzq zl9{@>dW@+?oBjD)v&w+DZ zOyEz}^_2P}sL!!*;s2Wf#|B4cqg7d_K)eZ}RQqRsA1W(u<>GJ-n8@%2uE9?@y>>Mh zQZ+Jw6d_0hbS*74L9I;P70*mAMAIz&pG1@I{mn&7?f=cI&4-@K|5_R?1oqyf#=d!_ zXasQhWoJ_|zfA4jFWbc!cfV*YzMz46m#i6R6_*j359PLqkE|0$rhCF_zzX}G+%!}@g$Qyl|8e@`IU;DE7Tzm2LFydD7BN-{uxn#N z0X&xeV|f$CGJfiwA@!dDki5jP*NIi<6xs~@lE#QIoi@xQiuss=SZy4`$oGH8Fd{Ae zC^p_z#&DLI<109vulc>h7EGtc!4qeq4F?)2ZZ+&KAtwFokk1_^TwEtJt66UQ1!nA- z3$NxoX9W$zL}0BG82C0=lA#7>5YlP;wlfzYy><&1W|^dRawW)g#2P2^ola>Ca)x4g z=|xL#dk#l_kp?y0uGipEYv^J4QDy>sgL*k=<3pe=;FqK z$U=f@159kNX}o&dX{=R-9BYk1V<}165L~FNHKIv^6dV_qwl0u_)>jweQ1#tQagWkl zETFs;(ks(?tB=CU2(gRSwUPUe&9*(9e z_f%vCYknR=*-80I33{>H4XXP 0) - fmt.Printf(" ATTRIBUTES.XFRM: %s\n", hex.EncodeToString(quote[104:112])) - fmt.Printf(" MRENCLAVE: %s\n", hex.EncodeToString(quote[112:144])) - fmt.Printf(" MRSIGNER: %s\n", hex.EncodeToString(quote[176:208])) - fmt.Printf(" ISVPRODID: %s\n", hex.EncodeToString(quote[304:306])) - fmt.Printf(" ISVSVN: %s\n", hex.EncodeToString(quote[306:308])) - fmt.Printf(" REPORTDATA: %s\n", hex.EncodeToString(quote[368:400])) - fmt.Printf(" %s\n", hex.EncodeToString(quote[400:432])) -} diff --git a/internal/routers/api/v1/report.go b/internal/routers/api/v1/report.go deleted file mode 100644 index 52392d9..0000000 --- a/internal/routers/api/v1/report.go +++ /dev/null @@ -1,54 +0,0 @@ -package v1 - -import ( - "encoding/hex" - "fmt" - "io/ioutil" - "os" - - "github.com/gin-gonic/gin" -) - -type Report struct { -} - -func NewReport() Report { - return Report{} -} - -func (f Report) Get(c *gin.Context) { - if _, err := os.Stat("/dev/attestation/report"); os.IsNotExist(err) { - fmt.Println("Cannot find `/dev/attestation/report`; are you running under SGX?") - os.Exit(1) - } - - myTargetInfo, err := ioutil.ReadFile("/dev/attestation/my_target_info") - if err != nil { - panic(err) - } - - err = ioutil.WriteFile("/dev/attestation/target_info", myTargetInfo, 0644) - if err != nil { - panic(err) - } - - err = ioutil.WriteFile("/dev/attestation/user_report_data", make([]byte, 64), 0644) - if err != nil { - panic(err) - } - - report, err := ioutil.ReadFile("/dev/attestation/report") - if err != nil { - panic(err) - } - - fmt.Printf("Generated SGX report with size = %d and the following fields:\n", len(report)) - fmt.Printf(" ATTRIBUTES.FLAGS: %s [ Debug bit: %t ]\n", hex.EncodeToString(report[48:56]), report[48]&2 > 0) - fmt.Printf(" ATTRIBUTES.XFRM: %s\n", hex.EncodeToString(report[56:64])) - fmt.Printf(" MRENCLAVE: %s\n", hex.EncodeToString(report[64:96])) - fmt.Printf(" MRSIGNER: %s\n", hex.EncodeToString(report[128:160])) - fmt.Printf(" ISVPRODID: %s\n", hex.EncodeToString(report[256:258])) - fmt.Printf(" ISVSVN: %s\n", hex.EncodeToString(report[258:260])) - fmt.Printf(" REPORTDATA: %s\n", hex.EncodeToString(report[320:352])) - fmt.Printf(" %s\n", hex.EncodeToString(report[352:384])) -} diff --git a/internal/routers/router.go b/internal/routers/router.go deleted file mode 100644 index 22da287..0000000 --- a/internal/routers/router.go +++ /dev/null @@ -1,32 +0,0 @@ -package routers - -import ( - v1 "fisco-sgx-go/internal/routers/api/v1" - - "github.com/gin-gonic/gin" -) - -func NewRouter() *gin.Engine { - r := gin.New() - r.Use(gin.Logger()) - r.Use(gin.Recovery()) - - fisco := v1.NewFisco() - quote := v1.NewQuote() - report := v1.NewReport() - - apiv1 := r.Group("/api/v1") - { - //这个路由负责后台启动fisco程序 - apiv1.GET("/startSgx", fisco.Get) - apiv1.DELETE("/stopSgx", fisco.DELETE) - - //这个路由负责远程证明 - apiv1.GET("/quote", quote.Get) - - //这个路由负责获取报告 - apiv1.GET("/report", report.Get) - } - - return r -} diff --git a/libinitializer/AuthInitializer.h b/libinitializer/AuthInitializer.h new file mode 100644 index 0000000..5b128fb --- /dev/null +++ b/libinitializer/AuthInitializer.h @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2021 FISCO BCOS. + * SPDX-License-Identifier: Apache-2.0 + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @file AuthInitializer.h + * @author: kyonRay + * @date 2021-11-24 + */ + +#pragma once +#include "Common.h" +#include "libinitializer/ProtocolInitializer.h" +#include +#include +#include +#include +#include +#include + +using namespace bcos; +using namespace bcos::tool; +using namespace bcos::initializer; +namespace bcos::initializer +{ +// clang-format off +constexpr static const char* const committeeBin = "60806040523480156200001157600080fd5b5060405162005e6138038062005e6183398101604081905262000034916200022c565b83838383604051620000469062000103565b6200005594939291906200032f565b604051809103906000f08015801562000072573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169182179055604051309190620000a39062000111565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620000d7573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905550620003d892505050565b611584806200286a83390190565b6120738062003dee83390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200016057620001606200011f565b604052919050565b60006001600160401b038211156200018457620001846200011f565b5060051b60200190565b600082601f830112620001a057600080fd5b81516020620001b9620001b38362000168565b62000135565b82815260059290921b84018101918181019086841115620001d957600080fd5b8286015b848110156200020a57805163ffffffff81168114620001fc5760008081fd5b8352918301918301620001dd565b509695505050505050565b805160ff811681146200022757600080fd5b919050565b600080600080608085870312156200024357600080fd5b84516001600160401b03808211156200025b57600080fd5b818701915087601f8301126200027057600080fd5b8151602062000283620001b38362000168565b82815260059290921b8401810191818101908b841115620002a357600080fd5b948201945b83861015620002da5785516001600160a01b0381168114620002ca5760008081fd5b82529482019490820190620002a8565b918a0151919850909350505080821115620002f457600080fd5b5062000303878288016200018e565b935050620003146040860162000215565b9150620003246060860162000215565b905092959194509250565b6080808252855190820181905260009060209060a0840190828901845b82811015620003735781516001600160a01b0316845292840192908401906001016200034c565b5050508381038285015286518082528783019183019060005b81811015620003b057835163ffffffff16835292840192918401916001016200038c565b505060ff871660408601529250620003c6915050565b60ff8316606083015295945050505050565b61248280620003e86000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637475f00f11610097578063bcfb9b6111610066578063bcfb9b61146101f8578063d978ffba1461020b578063e43581b814610240578063f675fdaa1461026357600080fd5b80637475f00f146101aa5780637a25132d146101bd57806385a6a091146101d05780639e3f4f4e146101e557600080fd5b8063614235f3116100d3578063614235f31461015e57806365012582146101715780636ba4790c146101845780637222b4a81461019757600080fd5b806303f19159146100fa578063185c1587146101205780633234f0e61461014b575b600080fd5b61010d610108366004611d36565b610276565b6040519081526020015b60405180910390f35b600054610133906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b61010d610159366004611d9e565b610419565b61010d61016c366004611dce565b6104db565b61010d61017f366004611eb1565b610679565b61010d610192366004611f04565b61077a565b61010d6101a5366004611f34565b610851565b61010d6101b8366004611f52565b610b36565b61010d6101cb366004611f82565b610d31565b6101e36101de366004611fef565b610e56565b005b61010d6101f3366004612008565b610ee2565b6101e3610206366004612072565b611001565b61022e610219366004611fef565b60009081526002602052604090205460ff1690565b60405160ff9091168152602001610117565b61025361024e3660046120a2565b611909565b6040519015158152602001610117565b600154610133906001600160a01b031681565b600061028133611909565b6102a65760405162461bcd60e51b815260040161029d906120bf565b60405180910390fd5b60648460ff1611156103045760405162461bcd60e51b815260206004820152602160248201527f696e76616c69642072616e6765206f66207061727469636970617465735261746044820152606560f81b606482015260840161029d565b60648360ff1611156103585760405162461bcd60e51b815260206004820152601860248201527f696e76616c69642072616e6765206f662077696e526174650000000000000000604482015260640161029d565b6040805160028082526060808301845292600092919060208301908036833701905050905060608682600081518110610393576103936120ed565b602002602001019060ff16908160ff168152505085826001815181106103bb576103bb6120ed565b60ff9092166020928302919091018201526040805160e081018252600c8152309281019290925281018390526060810182905260006080820181905260a0820185905260c082015261040d818761197e565b98975050505050505050565b600061042433611909565b6104405760405162461bcd60e51b815260040161029d906120bf565b604080516001808252818301909252600091602080830190803683370190505090506060808683600081518110610479576104796120ed565b6001600160a01b039283166020918202929092018101919091526040805160e081018252600b8152928a169183019190915281018390526060810182905263ffffffff8716608082015260a08101849052600160c082015261040d818761197e565b60006104e633611909565b6105025760405162461bcd60e51b815260040161029d906120bf565b8260ff166110056001600160a01b0316631749bea96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056a9190612103565b14156105de5760405162461bcd60e51b815260206004820152603b60248201527f7468652063757272656e74206465706c6f79206175746820747970652069732060448201527f7468652073616d6520617320796f752077616e7420746f207365740000000000606482015260840161029d565b60408051600180825281830190925260609160009190602080830190803683370190505090506060858260008151811061061a5761061a6120ed565b60ff9092166020928302919091018201526040805160e081018252601581526110059281019290925281018390526060810182905260006080820181905260a0820185905260c082015261066e818761197e565b979650505050505050565b600061068433611909565b6106a05760405162461bcd60e51b815260040161029d906120bf565b60018351116106e15760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b2103737b2329760991b604482015260640161029d565b6040805160018082528183019092526060918291600091816020015b60608152602001906001900390816106fd5790505090508581600081518110610728576107286120ed565b6020908102919091018101919091526040805160e08101825260348152611003928101929092528101839052606081018290526000608082015260a08101849052600160c082015261066e818761197e565b600061078533611909565b6107a15760405162461bcd60e51b815260040161029d906120bf565b6040805160018082528183019092526000916020808301908036833701905050905084816000815181106107d7576107d76120ed565b60200260200101906001600160a01b031690816001600160a01b03168152505060608060006040518060e00160405280601660ff168152602001896001600160a01b03168152602001848152602001838152602001600063ffffffff168152602001858152602001881515815250905061040d818761197e565b600061085c33611909565b6108785760405162461bcd60e51b815260040161029d906120bf565b60008054604080516302f3bff160e51b8152905160609384936001600160a01b031692635e77fe2092600480830193928290030181865afa1580156108c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108e991908101906121b4565b506000546040805163185c158760e01b815290519296508994506001600160a01b0391821693509084169163185c1587916004808201926020929091908290030181865afa15801561093f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096391906122a1565b6001600160a01b0316146109ce5760405162461bcd60e51b815260206004820152602c60248201527f6e657720766f746520636f6d707574657220636f6d6d6974746565206164647260448201526b0cae6e640dad2e6dac2e8c6d60a31b606482015260840161029d565b6040516353bfcf2f60e01b81526001600160a01b038216906353bfcf2f906109fc9086908690600401612302565b602060405180830381865afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d9190612330565b60ff16600214610a8f5760405162461bcd60e51b815260206004820152601e60248201527f6e657720766f746520636f6d707574657220696d70657266656374696f6e0000604482015260640161029d565b604080516001808252818301909252600091602080830190803683370190505090506060808883600081518110610ac857610ac86120ed565b6001600160a01b039283166020918202929092018101919091526040805160e081018252600d81526001549093169183019190915281018390526060810182905260006080820181905260a0820185905260c0820152610b28818a61197e565b9a9950505050505050505050565b6000610b4133611909565b610b5d5760405162461bcd60e51b815260040161029d906120bf565b6001600160a01b038316610bb35760405162461bcd60e51b815260206004820152601c60248201527f636f6e74726163742061646472657373206e6f74206578697374732e00000000604482015260640161029d565b6040516364efb22b60e01b81526001600160a01b0384166004820152611005906364efb22b90602401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d91906122a1565b6001600160a01b0316846001600160a01b03161415610c9b5760405162461bcd60e51b815260206004820152603460248201527f746865206163636f756e7420686173206265656e207468652061646d696e206f604482015273331031b7b731bab9393a1031b7b73a3930b1ba1760611b606482015260840161029d565b604080516001808252818301909252600091602080830190803683370190505090506060808683600081518110610cd457610cd46120ed565b6001600160a01b039283166020918202929092018101919091526040805160e081018252601f81529289169183019190915281018390526060810182905260006080820181905260a0820185905260c082015261040d818761197e565b6000610d3c33611909565b610d585760405162461bcd60e51b815260040161029d906120bf565b6001845111610d9f5760405162461bcd60e51b815260206004820152601360248201527234b73b30b634b21035b2bc903632b733ba341760691b604482015260640161029d565b60408051600280825260608281019093528291600091816020015b6060815260200190600190039081610dba5790505090508681600081518110610de557610de56120ed565b60200260200101819052508581600181518110610e0457610e046120ed565b6020908102919091018101919091526040805160e081018252602981526110009281019290925281018390526060810182905260006080820181905260a0820185905260c082015261040d818761197e565b610e5f33611909565b610e7b5760405162461bcd60e51b815260040161029d906120bf565b600154604051631068aa6d60e11b8152600481018390523360248201526001600160a01b03909116906320d154da90604401600060405180830381600087803b158015610ec757600080fd5b505af1158015610edb573d6000803e3d6000fd5b5050505050565b6000610eed33611909565b610f095760405162461bcd60e51b815260040161029d906120bf565b6001855111610f4a5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b2103737b2329760991b604482015260640161029d565b6040805160018082528183019092526060918291600091816020015b6060815260200190600190039081610f665790505090508781600081518110610f9157610f916120ed565b602002602001018190525060006040518060e00160405280603360ff1681526020016110036001600160a01b031681526020018481526020018381526020018963ffffffff1681526020018581526020018815158152509050610ff4818761197e565b9998505050505050505050565b61100a33611909565b6110265760405162461bcd60e51b815260040161029d906120bf565b6001546040516318ae72f160e11b81526004810184905282151560248201523360448201526000916001600160a01b03169063315ce5e2906064016020604051808303816000875af1158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190612330565b90506110fa6040518060e00160405280600060ff16815260200160006001600160a01b031681526020016060815260200160608152602001600063ffffffff168152602001606081526020016000151581525090565b8160ff16600214156119035760008481526002602090815260408083208054825160e08101845260ff82168082526101009092046001600160a01b031681860152600183018054855181880281018801875281815293969295860193928301828280156111a457602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116111755790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561127e5783829060005260206000200180546111f19061234d565b80601f016020809104026020016040519081016040528092919081815260200182805461121d9061234d565b801561126a5780601f1061123f5761010080835404028352916020019161126a565b820191906000526020600020905b81548152906001019060200180831161124d57829003601f168201915b5050505050815260200190600101906111d2565b50505090825250600382015463ffffffff1660208083019190915260048301805460408051828502810185018252828152940193928301828280156112ec57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112ce575b50505091835250506005919091015460ff90811615156020909201919091529093508116600b141561144b57608083015163ffffffff166113a757336001600160a01b03168360a00151600081518110611348576113486120ed565b60200260200101516001600160a01b031614156113a75760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c662100000000604482015260640161029d565b6000805460a085015180516001600160a01b039092169263f437695a926113d0576113d06120ed565b602002602001015185608001516040518363ffffffff1660e01b81526004016114149291906001600160a01b0392909216825263ffffffff16602082015260400190565b600060405180830381600087803b15801561142e57600080fd5b505af1158015611442573d6000803e3d6000fd5b505050506118cd565b8060ff16600c14156114d35760008054604085015180516001600160a01b03909216926399bc9c1b92611480576114806120ed565b6020026020010151856040015160018151811061149f5761149f6120ed565b60200260200101516040518363ffffffff1660e01b815260040161141492919060ff92831681529116602082015260400190565b8060ff16600d141561153e5760015460a084015180516001600160a01b039092169163290bc797919060009061150b5761150b6120ed565b60200260200101516040518263ffffffff1660e01b815260040161141491906001600160a01b0391909116815260200190565b8060ff16601514156115e9576110056001600160a01b031663bb0aa40c8460400151600081518110611572576115726120ed565b60200260200101516040518263ffffffff1660e01b815260040161159f919060ff91909116815260200190565b6020604051808303816000875af11580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e29190612103565b91506118cd565b8060ff1660161415611682578260c001511561165a576110056001600160a01b031663615480998460a00151600081518110611627576116276120ed565b60200260200101516040518263ffffffff1660e01b815260040161159f91906001600160a01b0391909116815260200190565b6110056001600160a01b03166356bd70848460a00151600081518110611627576116276120ed565b8060ff16601f14156116f5576110056001600160a01b031663c53057b484602001518560a001516000815181106116bb576116bb6120ed565b60200260200101516040518363ffffffff1660e01b815260040161159f9291906001600160a01b0392831681529116602082015260400190565b8060ff166029141561176d576110006001600160a01b031663bd291aef8460600151600081518110611729576117296120ed565b60200260200101518560600151600181518110611748576117486120ed565b60200260200101516040518363ffffffff1660e01b815260040161159f9291906123d5565b8060ff166033141561185e578260c001511561183657608083015163ffffffff166117de576110036001600160a01b0316632800efc084606001516000815181106117ba576117ba6120ed565b60200260200101516040518263ffffffff1660e01b815260040161159f91906123fa565b6110036001600160a01b031663359168568460600151600081518110611806576118066120ed565b6020026020010151856080015163ffffffff166040518363ffffffff1660e01b815260040161159f92919061240d565b6110036001600160a01b031663ce6fa5c58460600151600081518110611806576118066120ed565b8060ff1660341415611892576110036001600160a01b03166380599e4b84606001516000815181106117ba576117ba6120ed565b60405162461bcd60e51b815260206004820152601060248201526f3b37ba32903a3cb8329032b93937b91760811b604482015260640161029d565b6040518281527f7251e13f6f51fdfe60094817f80310366d2e1148fe8a46cb475b582d35bfdea89060200160405180910390a150505b50505050565b60008054604051631c86b03760e31b81526001600160a01b0384811660048301529091169063e43581b890602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611978919061242f565b92915050565b6001548251602084015160405163161cab7f60e11b815233600482015260ff90921660248301526001600160a01b039081166044830152606482018490526000928392911690632c3956fe906084016020604051808303816000875af11580156119ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a109190612103565b60008181526002602090815260409182902087518154838a01516001600160a01b0316610100026001600160a81b031990911660ff909216919091171781559187015180519394508793611a6a9260018501920190611af0565b5060608201518051611a86916002840191602090910190611b96565b50608082015160038201805463ffffffff191663ffffffff90921691909117905560a08201518051611ac2916004840191602090910190611bef565b5060c091909101516005909101805460ff1916911515919091179055611ae9816001611001565b9392505050565b82805482825590600052602060002090601f01602090048101928215611b865791602002820160005b83821115611b5757835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611b19565b8015611b845782816101000a81549060ff0219169055600101602081600001049283019260010302611b57565b505b50611b92929150611c44565b5090565b828054828255906000526020600020908101928215611be3579160200282015b82811115611be35782518051611bd3918491602090910190611c59565b5091602001919060010190611bb6565b50611b92929150611ccd565b828054828255906000526020600020908101928215611b86579160200282015b82811115611b8657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611c0f565b5b80821115611b925760008155600101611c45565b828054611c659061234d565b90600052602060002090601f016020900481019282611c875760008555611b86565b82601f10611ca057805160ff1916838001178555611b86565b82800160010185558215611b86579182015b82811115611b86578251825591602001919060010190611cb2565b80821115611b92576000611ce18282611cea565b50600101611ccd565b508054611cf69061234d565b6000825580601f10611d06575050565b601f016020900490600052602060002090810190611d249190611c44565b50565b60ff81168114611d2457600080fd5b600080600060608486031215611d4b57600080fd5b8335611d5681611d27565b92506020840135611d6681611d27565b929592945050506040919091013590565b6001600160a01b0381168114611d2457600080fd5b63ffffffff81168114611d2457600080fd5b600080600060608486031215611db357600080fd5b8335611dbe81611d77565b92506020840135611d6681611d8c565b60008060408385031215611de157600080fd5b8235611dec81611d27565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e3957611e39611dfa565b604052919050565b600082601f830112611e5257600080fd5b813567ffffffffffffffff811115611e6c57611e6c611dfa565b611e7f601f8201601f1916602001611e10565b818152846020838601011115611e9457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611ec457600080fd5b823567ffffffffffffffff811115611edb57600080fd5b611ee785828601611e41565b95602094909401359450505050565b8015158114611d2457600080fd5b600080600060608486031215611f1957600080fd5b8335611f2481611d77565b92506020840135611d6681611ef6565b60008060408385031215611f4757600080fd5b8235611dec81611d77565b600080600060608486031215611f6757600080fd5b8335611f7281611d77565b92506020840135611d6681611d77565b600080600060608486031215611f9757600080fd5b833567ffffffffffffffff80821115611faf57600080fd5b611fbb87838801611e41565b94506020860135915080821115611fd157600080fd5b50611fde86828701611e41565b925050604084013590509250925092565b60006020828403121561200157600080fd5b5035919050565b6000806000806080858703121561201e57600080fd5b843567ffffffffffffffff81111561203557600080fd5b61204187828801611e41565b945050602085013561205281611d8c565b9250604085013561206281611ef6565b9396929550929360600135925050565b6000806040838503121561208557600080fd5b82359150602083013561209781611ef6565b809150509250929050565b6000602082840312156120b457600080fd5b8135611ae981611d77565b6020808252601490820152733cb7ba9036bab9ba1031329033b7bb32b93737b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561211557600080fd5b5051919050565b600067ffffffffffffffff82111561213657612136611dfa565b5060051b60200190565b600082601f83011261215157600080fd5b815160206121666121618361211c565b611e10565b82815260059290921b8401810191818101908684111561218557600080fd5b8286015b848110156121a957805161219c81611d8c565b8352918301918301612189565b509695505050505050565b600080600080608085870312156121ca57600080fd5b84516121d581611d27565b809450506020808601516121e881611d27565b604087015190945067ffffffffffffffff8082111561220657600080fd5b818801915088601f83011261221a57600080fd5b81516122286121618261211c565b81815260059190911b8301840190848101908b83111561224757600080fd5b938501935b8285101561226e57845161225f81611d77565b8252938501939085019061224c565b60608b0151909750945050508083111561228757600080fd5b505061229587828801612140565b91505092959194509250565b6000602082840312156122b357600080fd5b8151611ae981611d77565b600081518084526020808501945080840160005b838110156122f75781516001600160a01b0316875295820195908201906001016122d2565b509495945050505050565b60408152600061231560408301856122be565b828103602084015261232781856122be565b95945050505050565b60006020828403121561234257600080fd5b8151611ae981611d27565b600181811c9082168061236157607f821691505b6020821081141561238257634e487b7160e01b600052602260045260246000fd5b50919050565b6000815180845260005b818110156123ae57602081850181015186830182015201612392565b818111156123c0576000602083870101525b50601f01601f19169290920160200192915050565b6040815260006123e86040830185612388565b82810360208401526123278185612388565b602081526000611ae96020830184612388565b6040815260006124206040830185612388565b90508260208301529392505050565b60006020828403121561244157600080fd5b8151611ae981611ef656fea2646970667358221220e85439387687fb40a454c2907e0cc9f5672a2730662480ebb006640171ea0d1464736f6c634300080b003360806040523480156200001157600080fd5b506040516200158438038062001584833981016040819052620000349162000724565b600080546001600160a01b031916331781555b84518163ffffffff161015620000c257620000ad858263ffffffff168151811062000076576200007662000827565b6020026020010151858363ffffffff168151811062000099576200009962000827565b6020026020010151620000fb60201b60201c565b80620000b98162000853565b91505062000047565b506004805461ffff191661010060ff8481169190910260ff191691909117908416179055620000f13362000287565b50505050620008c5565b6200010633620002f0565b620001465760405162461bcd60e51b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b60448201526064015b60405180910390fd5b63ffffffff8116620001f0576001600160a01b038216321415620001ad5760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c66210000000060448201526064016200013d565b6001600160a01b0382166000908152600360209081526040909120805463ffffffff19169055620001ec906001908490620005c462000338821b17901c565b5050565b6200020b826001620004d660201b620007421790919060201c565b1562000240576001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff83161790555050565b6001600160a01b0382166000908152600360209081526040909120805463ffffffff191663ffffffff8416179055620001ec906001908490620004f4811b6200076017901c565b6200029233620002f0565b620002ce5760405162461bcd60e51b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b60448201526064016200013d565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382163014156200030c57506001919050565b6000546001600160a01b03838116911614156200032b57506001919050565b506000919050565b919050565b6001600160a01b038116600090815260208390526040902054620003ab5760405162461bcd60e51b815260206004820152602360248201527f4c6962416464726573735365743a2076616c756520646f65736e27742065786960448201526239ba1760e91b60648201526084016200013d565b6001600160a01b038116600090815260208390526040812054620003d2906001906200087a565b600184810154919250600091620003ea91906200087a565b9050600084600101828154811062000406576200040662000827565b6000918252602090912001546001860180546001600160a01b0390921692508291859081106200043a576200043a62000827565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556200047083600162000894565b6001600160a01b038083166000908152602088905260408082209390935590861681529081205560018501805480620004ad57620004ad620008af565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b031660009081526020919091526040902054151590565b6001600160a01b038116620005565760405162461bcd60e51b815260206004820152602160248201527f4c6962416464726573735365743a2076616c75652063616e27742062652030786044820152600360fc1b60648201526084016200013d565b6001600160a01b03811660009081526020839052604090205415620005d65760405162461bcd60e51b815260206004820152602f60248201527f4c6962416464726573735365743a2076616c756520616c72656164792065786960448201526e39ba399034b7103a34329039b2ba1760891b60648201526084016200013d565b6001808301805491820181556000818152602080822090930180546001600160a01b039095166001600160a01b0319909516851790559054928152929052604090912055565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200065d576200065d6200061c565b604052919050565b60006001600160401b038211156200068157620006816200061c565b5060051b60200190565b600082601f8301126200069d57600080fd5b81516020620006b6620006b08362000665565b62000632565b82815260059290921b84018101918181019086841115620006d657600080fd5b8286015b848110156200070757805163ffffffff81168114620006f95760008081fd5b8352918301918301620006da565b509695505050505050565b805160ff811681146200033357600080fd5b600080600080608085870312156200073b57600080fd5b84516001600160401b03808211156200075357600080fd5b818701915087601f8301126200076857600080fd5b815160206200077b620006b08362000665565b82815260059290921b8401810191818101908b8411156200079b57600080fd5b948201945b83861015620007d25785516001600160a01b0381168114620007c25760008081fd5b82529482019490820190620007a0565b918a0151919850909350505080821115620007ec57600080fd5b50620007fb878288016200068b565b9350506200080c6040860162000712565b91506200081c6060860162000712565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818114156200087057620008706200083d565b6001019392505050565b6000828210156200088f576200088f6200083d565b500390565b60008219821115620008aa57620008aa6200083d565b500190565b634e487b7160e01b600052603160045260246000fd5b610caf80620008d56000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063ac6c525111610071578063ac6c52511461014d578063b2bdfa7b1461017c578063b6fd9067146101a7578063cd5d2118146101b9578063e43581b8146101dc578063f437695a146101ef57600080fd5b806313af4035146100b957806322acb867146100ce5780635615696f146100f05780635e77fe201461010f578063965b9ff11461012757806399bc9c1b1461013a575b600080fd5b6100cc6100c7366004610959565b610202565b005b6100d6610252565b60405163ffffffff90911681526020015b60405180910390f35b6004546100fd9060ff1681565b60405160ff90911681526020016100e7565b610117610266565b6040516100e7949392919061097b565b6100d6610135366004610a33565b61036b565b6100cc610148366004610b09565b6103ea565b6100d661015b366004610959565b6001600160a01b031660009081526003602052604090205463ffffffff1690565b60005461018f906001600160a01b031681565b6040516001600160a01b0390911681526020016100e7565b6004546100fd90610100900460ff1681565b6101cc6101c7366004610959565b610432565b60405190151581526020016100e7565b6101cc6101ea366004610959565b610478565b6100cc6101fd366004610b3c565b61048b565b61020b33610432565b6102305760405162461bcd60e51b815260040161022790610b7c565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006102616101356001610875565b905090565b6000806060806102766001610875565b9150815167ffffffffffffffff81111561029257610292610a1d565b6040519080825280602002602001820160405280156102bb578160200160208202803683370190505b50905060005b825181101561035257600360008483815181106102e0576102e0610ba1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900463ffffffff1682828151811061032b5761032b610ba1565b63ffffffff909216602092830291909101909101528061034a81610bcd565b9150506102c1565b5060045460ff8082169661010090920416945091925090565b600080805b83518163ffffffff1610156103e35760036000858363ffffffff168151811061039b5761039b610ba1565b6020908102919091018101516001600160a01b03168252810191909152604001600020546103cf9063ffffffff1683610be8565b9150806103db81610c10565b915050610370565b5092915050565b6103f333610432565b61040f5760405162461bcd60e51b815260040161022790610b7c565b6004805461ffff191661010060ff9384160260ff19161792909116919091179055565b60006001600160a01b03821630141561044d57506001919050565b6000546001600160a01b038381169116141561046b57506001919050565b506000919050565b919050565b6000610485600183610742565b92915050565b61049433610432565b6104b05760405162461bcd60e51b815260040161022790610b7c565b63ffffffff8116610546576001600160a01b0382163214156105145760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c6621000000006044820152606401610227565b6001600160a01b0382166000908152600360205260409020805463ffffffff191690556105426001836105c4565b5050565b610551600183610742565b15610585576001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff83161790555050565b6001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff8381169190911790915561054290600190849061076016565b6105ce8282610742565b6106265760405162461bcd60e51b815260206004820152602360248201527f4c6962416464726573735365743a2076616c756520646f65736e27742065786960448201526239ba1760e91b6064820152608401610227565b6001600160a01b03811660009081526020839052604081205461064b90600190610c34565b6001848101549192506000916106619190610c34565b9050600084600101828154811061067a5761067a610ba1565b6000918252602090912001546001860180546001600160a01b0390921692508291859081106106ab576106ab610ba1565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556106df836001610c4b565b6001600160a01b03808316600090815260208890526040808220939093559086168152908120556001850180548061071957610719610c63565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b031660009081526020919091526040902054151590565b6001600160a01b0381166107c05760405162461bcd60e51b815260206004820152602160248201527f4c6962416464726573735365743a2076616c75652063616e27742062652030786044820152600360fc1b6064820152608401610227565b6107ca8282610742565b1561082f5760405162461bcd60e51b815260206004820152602f60248201527f4c6962416464726573735365743a2076616c756520616c72656164792065786960448201526e39ba399034b7103a34329039b2ba1760891b6064820152608401610227565b6001808301805491820181556000818152602080822090930180546001600160a01b039095166001600160a01b0319909516851790559054928152929052604090912055565b600181015460609060009067ffffffffffffffff81111561089857610898610a1d565b6040519080825280602002602001820160405280156108c1578160200160208202803683370190505b50905060005b60018401548110156103e3578360010181815481106108e8576108e8610ba1565b9060005260206000200160009054906101000a90046001600160a01b031682828151811061091857610918610ba1565b6001600160a01b03909216602092830291909101909101528061093a81610bcd565b9150506108c7565b80356001600160a01b038116811461047357600080fd5b60006020828403121561096b57600080fd5b61097482610942565b9392505050565b60006080820160ff87168352602060ff8716818501526080604085015281865180845260a086019150828801935060005b818110156109d15784516001600160a01b0316835293830193918301916001016109ac565b50508481036060860152855180825290820192508186019060005b81811015610a0e57825163ffffffff16855293830193918301916001016109ec565b50929998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215610a4657600080fd5b823567ffffffffffffffff80821115610a5e57600080fd5b818501915085601f830112610a7257600080fd5b813581811115610a8457610a84610a1d565b8060051b604051601f19603f83011681018181108582111715610aa957610aa9610a1d565b604052918252848201925083810185019188831115610ac757600080fd5b938501935b82851015610aec57610add85610942565b84529385019392850192610acc565b98975050505050505050565b803560ff8116811461047357600080fd5b60008060408385031215610b1c57600080fd5b610b2583610af8565b9150610b3360208401610af8565b90509250929050565b60008060408385031215610b4f57600080fd5b610b5883610942565b9150602083013563ffffffff81168114610b7157600080fd5b809150509250929050565b6020808252600b908201526a4f6e6c79206f776e65722160a81b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610be157610be1610bb7565b5060010190565b600063ffffffff808316818516808303821115610c0757610c07610bb7565b01949350505050565b600063ffffffff80831681811415610c2a57610c2a610bb7565b6001019392505050565b600082821015610c4657610c46610bb7565b500390565b60008219821115610c5e57610c5e610bb7565b500190565b634e487b7160e01b600052603160045260246000fdfea264697066735822122085fafc65a9ded246b2c31779d206cec20aefb591774f8d42cc273420eb860a2664736f6c634300080b003360806040523480156200001157600080fd5b5060405162002073380380620020738339810160408190526200003491620000e1565b600080546001600160a01b03191633179055604051829082906200005890620000b6565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156200008c573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905550620001199050565b610a2b806200164883390190565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060408385031215620000f557600080fd5b6200010083620000c4565b91506200011060208401620000c4565b90509250929050565b61151f80620001296000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063401853b711610097578063bc903cb811610066578063bc903cb8146102c3578063cd5d2118146102e9578063dde248e31461030c578063fcf81c141461032c57600080fd5b8063401853b7146102555780636d23cd581461027c5780636f2904cc1461028f578063b2bdfa7b1461029857600080fd5b806320d154da116100d357806320d154da14610209578063290bc7971461021c5780632c3956fe1461022f578063315ce5e21461024257600080fd5b80630a4948401461010557806313af40351461019657806319dcd07e146101ab5780631cc05cbc146101d0575b600080fd5b6101586101133660046110c1565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b03918216939182169260ff600160a01b90930483169290911685565b604080516001600160a01b03968716815295909416602086015260ff92831693850193909352606084015216608082015260a0015b60405180910390f35b6101a96101a43660046110f1565b61033f565b005b6101be6101b93660046110c1565b61038f565b60405160ff909116815260200161018d565b6101fb6101de366004611125565b600460209081526000928352604080842090915290825290205481565b60405190815260200161018d565b6101a961021736600461115a565b61043b565b6101a961022a3660046110f1565b61054d565b6101fb61023d36600461117d565b610594565b6101be6102503660046111ca565b6107d6565b6101be6102633660046110c1565b6000908152600360208190526040909120015460ff1690565b6101fb61028a366004611125565b610b26565b6101fb60025481565b6000546102ab906001600160a01b031681565b6040516001600160a01b03909116815260200161018d565b6102d66102d13660046110c1565b610b54565b60405161018d9796959493929190611251565b6102fc6102f73660046110f1565b610c62565b604051901515815260200161018d565b61031f61031a3660046112b5565b610ca8565b60405161018d91906112d7565b6001546102ab906001600160a01b031681565b61034833610c62565b61036d5760405162461bcd60e51b8152600401610364906113af565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260036020819052604082200154829060ff166103e75760405162461bcd60e51b8152602060048201526012602482015271141c9bdc1bdcd85b081b9bdd08195e1a5cdd60721b6044820152606401610364565b60008381526003602081905260409091209081015460ff166001141561042b57806002015443111561042b57600301805460ff191660059081179091559150610435565b6003015460ff1691505b50919050565b61044433610c62565b6104605760405162461bcd60e51b8152600401610364906113af565b60008281526003602052604090206104778361038f565b60ff166001146104dc5760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79206e65776c7920637265617465642070726f706f73616c2063616e206044820152691899481c995d9bdad95960b21b6064820152608401610364565b60018101546001600160a01b0383811691161461053b5760405162461bcd60e51b815260206004820152601860248201527f4f6e6c792070726f706f7365722063616e207265766f6b6500000000000000006044820152606401610364565b600301805460ff191660041790555050565b61055633610c62565b6105725760405162461bcd60e51b8152600401610364906113af565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600061059f33610c62565b6105bb5760405162461bcd60e51b8152600401610364906113af565b60ff80851660009081526004602090815260408083206001600160a01b03881684528252808320548084526003928390529220015490911660011415610606576106048161038f565b505b6000818152600360208190526040909120015460ff166001141561066c5760405162461bcd60e51b815260206004820152601860248201527f43757272656e742070726f706f73616c206e6f7420656e6400000000000000006044820152606401610364565b6002805490600061067c836113ea565b91905055506000600254905060608060006040518060e00160405280896001600160a01b031681526020018b6001600160a01b031681526020018a60ff16815260200188436106cb9190611405565b815260016020808301829052604080840188905260609384018790526000898152600380845290829020865181546001600160a01b0319166001600160a01b0391821617825587850151958201805494890151969091166001600160a81b031990941693909317600160a01b60ff96871602179092559385015160028201556080850151938101805460ff1916949093169390931790915560a08301518051939450849361077f9260048501920190611047565b5060c0820151805161079b916005840191602090910190611047565b50505060ff891660009081526004602090815260408083206001600160a01b038c168452909152902084905550919350505050949350505050565b60006107e133610c62565b6107fd5760405162461bcd60e51b8152600401610364906113af565b60008481526003602081905260409091200154849060ff166108565760405162461bcd60e51b8152602060048201526012602482015271141c9bdc1bdcd85b081b9bdd08195e1a5cdd60721b6044820152606401610364565b60008581526003602081905260409091200154859060ff166001146108bd5760405162461bcd60e51b815260206004820152601760248201527f50726f706f73616c206973206e6f7420766f7461626c650000000000000000006044820152606401610364565b600086815260036020818152604092839020835160e08101855281546001600160a01b03908116825260018301549081168285015260ff600160a01b9091048116828701526002830154606083015293820154909316608084015260048101805485518185028101850190965280865291946109e69493869360a08601939183018282801561097557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610957575b50505050508152602001600582018054806020026020016040519081016040528092919081815260200182805480156109d757602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109b9575b50505050508152505086610fa7565b15610a235760405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606401610364565b8515610a5e57600481018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b038716179055610a8f565b600581018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0387161790555b6001546040516353bfcf2f60e01b81526000916001600160a01b0316906353bfcf2f90610ac79060048087019160058801910161145b565b602060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190611489565b600392909201805460ff191660ff8416179055509695505050505050565b60ff821660009081526004602090815260408083206001600160a01b03851684529091529020545b92915050565b600081815260036020818152604092839020805460018201546002830154948301546004840180548851818802810188019099528089526001600160a01b039485169894841697600160a01b90940460ff908116979496931694606094859493919290830182828015610bf057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bd2575b5050505050925080600501805480602002602001604051908101604052809291908181526020018280548015610c4f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c31575b5050505050915050919395979092949650565b60006001600160a01b038216301415610c7d57506001919050565b6000546001600160a01b0383811691161415610c9b57506001919050565b506000919050565b919050565b6060600254831115610d0b5760405162461bcd60e51b815260206004820152602660248201527f2766726f6d272069732067726561746572207468616e202770726f706f73616c604482015265436f756e742760d01b6064820152608401610364565b81831115610d5b5760405162461bcd60e51b815260206004820152601b60248201527f2766726f6d272069732067726561746572207468616e2027746f2700000000006044820152606401610364565b600254821115610d6b5760025491505b6001831015610d7957600192505b6000610d8584846114a6565b610d90906001611405565b67ffffffffffffffff811115610da857610da86114bd565b604051908082528060200260200182016040528015610e3157816020015b610e1e6040518060e0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600060ff16815260200160008152602001600060ff16815260200160608152602001606081525090565b815260200190600190039081610dc65790505b5090506000845b848111610f9d57600081815260036020818152604092839020835160e08101855281546001600160a01b03908116825260018301549081168285015260ff600160a01b909104811682870152600283015460608301529382015490931660808401526004810180548551818502810185019096528086529194859360a086019391929190830182828015610ef557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed7575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610f5757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f39575b505050505081525050848480610f6c906113ea565b955081518110610f7e57610f7e6114d3565b6020026020010181905250508080610f95906113ea565b915050610e38565b5090949350505050565b6000610fb78360a0015183610fe1565b80610fcb5750610fcb8360c0015183610fe1565b15610fd857506001610b4e565b50600092915050565b6000805b835181101561103d57838181518110611000576110006114d3565b60200260200101516001600160a01b0316836001600160a01b0316141561102b576001915050610b4e565b80611035816113ea565b915050610fe5565b5060009392505050565b82805482825590600052602060002090810192821561109c579160200282015b8281111561109c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611067565b506110a89291506110ac565b5090565b5b808211156110a857600081556001016110ad565b6000602082840312156110d357600080fd5b5035919050565b80356001600160a01b0381168114610ca357600080fd5b60006020828403121561110357600080fd5b61110c826110da565b9392505050565b60ff8116811461112257600080fd5b50565b6000806040838503121561113857600080fd5b823561114381611113565b9150611151602084016110da565b90509250929050565b6000806040838503121561116d57600080fd5b82359150611151602084016110da565b6000806000806080858703121561119357600080fd5b61119c856110da565b935060208501356111ac81611113565b92506111ba604086016110da565b9396929550929360600135925050565b6000806000606084860312156111df57600080fd5b83359250602084013580151581146111f657600080fd5b9150611204604085016110da565b90509250925092565b600081518084526020808501945080840160005b838110156112465781516001600160a01b031687529582019590820190600101611221565b509495945050505050565b6001600160a01b0388811682528716602082015260ff8681166040830152606082018690528416608082015260e060a082018190526000906112959083018561120d565b82810360c08401526112a7818561120d565b9a9950505050505050505050565b600080604083850312156112c857600080fd5b50508035926020909101359150565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156113a157888303603f19018552815180516001600160a01b0390811685528882015116888501528681015160ff16878501526060808201519085015260808082015160e091906113568288018260ff169052565b505060a080830151828288015261136f8388018261120d565b9250505060c0808301519250858203818701525061138d818361120d565b9689019694505050908601906001016112fe565b509098975050505050505050565b6020808252600b908201526a4f6e6c79206f776e65722160a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156113fe576113fe6113d4565b5060010190565b60008219821115611418576114186113d4565b500190565b6000815480845260208085019450836000528060002060005b838110156112465781546001600160a01b031687529582019560019182019101611436565b60408152600061146e604083018561141d565b8281036020840152611480818561141d565b95945050505050565b60006020828403121561149b57600080fd5b815161110c81611113565b6000828210156114b8576114b86113d4565b500390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fdfea26469706673582212202722242e3b6e57d58d24efcb69cf52b88dbcc2c1e33fb95d0406bae9462e0a2764736f6c634300080b0033608060405234801561001057600080fd5b50604051610a2b380380610a2b83398101604081905261002f916101fe565b600080546001600160a01b03191633179055818161004c8261013c565b600180546001600160a01b0319166001600160a01b0383169081178255604080516322acb86760e01b815290516322acb867916004808201926020929091908290030181865afa1580156100a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c89190610231565b63ffffffff1610156101335760405162461bcd60e51b815260206004820152602960248201527f636f6d6d6974746565206973206572726f722c20706c6561736520636865636b60448201526820616464726573732160b81b60648201526084015b60405180910390fd5b5050505061025e565b610145336101a1565b61017f5760405162461bcd60e51b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b604482015260640161012a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382163014156101bc57506001919050565b6000546001600160a01b03838116911614156101da57506001919050565b506000919050565b919050565b80516001600160a01b03811681146101e257600080fd5b6000806040838503121561021157600080fd5b61021a836101e7565b9150610228602084016101e7565b90509250929050565b60006020828403121561024357600080fd5b815163ffffffff8116811461025757600080fd5b9392505050565b6107be8061026d6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301410de21461006757806313af403514610091578063185c1587146100a657806353bfcf2f146100d1578063b2bdfa7b146100e4578063cd5d2118146100f7575b600080fd5b61007a6100753660046104d1565b61011a565b60405160ff90911681526020015b60405180910390f35b6100a461009f366004610559565b61018c565b005b6001546100b9906001600160a01b031681565b6040516001600160a01b039091168152602001610088565b61007a6100df366004610633565b6101f5565b6000546100b9906001600160a01b031681565b61010a610105366004610559565b610467565b6040519015158152602001610088565b600061012960ff8416856106ad565b63ffffffff1661013a8660646106ad565b63ffffffff16101561014e57506001610183565b61015b8560ff84166106ad565b63ffffffff1661016c8760646106ad565b63ffffffff161061017f57506002610183565b5060035b95945050505050565b61019533610467565b6101d35760405162461bcd60e51b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163965b9ff160e01b815260009182916001600160a01b039091169063965b9ff19061022a9087906004016106d9565b602060405180830381865afa158015610247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026b9190610726565b60015460405163965b9ff160e01b81529192506000916001600160a01b039091169063965b9ff1906102a19087906004016106d9565b602060405180830381865afa1580156102be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e29190610726565b6102ec9083610743565b90506000600160009054906101000a90046001600160a01b03166001600160a01b03166322acb8676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610726565b905061045d838383600160009054906101000a90046001600160a01b03166001600160a01b0316635615696f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e6919061076b565b600160009054906101000a90046001600160a01b03166001600160a01b031663b6fd90676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610439573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610075919061076b565b9695505050505050565b60006001600160a01b03821630141561048257506001919050565b6000546001600160a01b03838116911614156104a057506001919050565b506000919050565b919050565b63ffffffff811681146104bf57600080fd5b50565b60ff811681146104bf57600080fd5b600080600080600060a086880312156104e957600080fd5b85356104f4816104ad565b94506020860135610504816104ad565b93506040860135610514816104ad565b92506060860135610524816104c2565b91506080860135610534816104c2565b809150509295509295909350565b80356001600160a01b03811681146104a857600080fd5b60006020828403121561056b57600080fd5b61057482610542565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126105a257600080fd5b8135602067ffffffffffffffff808311156105bf576105bf61057b565b8260051b604051601f19603f830116810181811084821117156105e4576105e461057b565b60405293845285810183019383810192508785111561060257600080fd5b83870191505b848210156106285761061982610542565b83529183019190830190610608565b979650505050505050565b6000806040838503121561064657600080fd5b823567ffffffffffffffff8082111561065e57600080fd5b61066a86838701610591565b9350602085013591508082111561068057600080fd5b5061068d85828601610591565b9150509250929050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818516818304811182151516156106d0576106d0610697565b02949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561071a5783516001600160a01b0316835292840192918401916001016106f5565b50909695505050505050565b60006020828403121561073857600080fd5b8151610574816104ad565b600063ffffffff80831681851680830382111561076257610762610697565b01949350505050565b60006020828403121561077d57600080fd5b8151610574816104c256fea26469706673582212207e324ba2bb41822f929f1314b540322ac6d0e6f01442a9d4e444f42878dcb0b364736f6c634300080b0033"; +constexpr static const char* const committeeSmBin = "60806040523480156200001157600080fd5b5060405162005e9038038062005e9083398101604081905262000034916200022c565b83838383604051620000469062000103565b6200005594939291906200032f565b604051809103906000f08015801562000072573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169182179055604051309190620000a39062000111565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620000d7573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905550620003d892505050565b611591806200287b83390190565b6120848062003e0c83390190565b63b95aa35560e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200016057620001606200011f565b604052919050565b60006001600160401b038211156200018457620001846200011f565b5060051b60200190565b600082601f830112620001a057600080fd5b81516020620001b9620001b38362000168565b62000135565b82815260059290921b84018101918181019086841115620001d957600080fd5b8286015b848110156200020a57805163ffffffff81168114620001fc5760008081fd5b8352918301918301620001dd565b509695505050505050565b805160ff811681146200022757600080fd5b919050565b600080600080608085870312156200024357600080fd5b84516001600160401b03808211156200025b57600080fd5b818701915087601f8301126200027057600080fd5b8151602062000283620001b38362000168565b82815260059290921b8401810191818101908b841115620002a357600080fd5b948201945b83861015620002da5785516001600160a01b0381168114620002ca5760008081fd5b82529482019490820190620002a8565b918a0151919850909350505080821115620002f457600080fd5b5062000303878288016200018e565b935050620003146040860162000215565b9150620003246060860162000215565b905092959194509250565b6080808252855190820181905260009060209060a0840190828901845b82811015620003735781516001600160a01b0316845292840192908401906001016200034c565b5050508381038285015286518082528783019183019060005b81811015620003b057835163ffffffff16835292840192918401916001016200038c565b505060ff871660408601529250620003c6915050565b60ff8316606083015295945050505050565b61249380620003e86000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063869328ad11610097578063cbca676d11610066578063cbca676d1461022a578063cfe0a26c1461023d578063d294443914610250578063de0033561461026357600080fd5b8063869328ad146101ac578063922b7906146101e1578063b5f23235146101f4578063ba2de76c1461021757600080fd5b80635b5cc736116100d35780635b5cc736146101465780635d826f401461015b57806368baf8bd1461016e5780637bc855161461019957600080fd5b80630cb0a8d9146100fa5780631f975035146101205780634489465614610133575b600080fd5b61010d610108366004611d5b565b610276565b6040519081526020015b60405180910390f35b61010d61012e366004611e53565b610363565b61010d610141366004611e98565b610471565b610159610154366004611ec4565b610759565b005b61010d610169366004611f06565b611064565b600154610181906001600160a01b031681565b6040516001600160a01b039091168152602001610117565b600054610181906001600160a01b031681565b6101cf6101ba366004611f70565b60009081526002602052604090205460ff1690565b60405160ff9091168152602001610117565b61010d6101ef366004611f89565b611185565b610207610202366004611fb9565b611381565b6040519015158152602001610117565b610159610225366004611f70565b6113f6565b61010d610238366004611fe5565b611483565b61010d61024b366004612015565b611614565b61010d61025e366004612082565b61173b565b61010d6102713660046120b2565b6117fe565b600061028133611381565b6102a757604051636381e58960e11b815260040161029e906120d0565b60405180910390fd5b6040805160018082528183019092526000916020808301908036833701905050905084816000815181106102dd576102dd6120fe565b60200260200101906001600160a01b031690816001600160a01b03168152505060608060006040518060e00160405280601660ff168152602001896001600160a01b03168152602001848152602001838152602001600063ffffffff1681526020018581526020018815158152509050610357818761198f565b98975050505050505050565b600061036e33611381565b61038b57604051636381e58960e11b815260040161029e906120d0565b60018351116103cd57604051636381e58960e11b815260206004820152600d60248201526c34b73b30b634b2103737b2329760991b604482015260640161029e565b6040805160018082528183019092526060918291600091816020015b60608152602001906001900390816103e95790505090508581600081518110610414576104146120fe565b6020908102919091018101919091526040805160e08101825260348152611003928101929092528101839052606081018290526000608082015260a08101849052600160c0820152610466818761198f565b979650505050505050565b600061047c33611381565b61049957604051636381e58960e11b815260040161029e906120d0565b600080546040805163749280c760e01b8152905160609384936001600160a01b03169263749280c792600480830193928290030181865afa1580156104e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261050a91908101906121ac565b5060005460408051633de42a8b60e11b815290519296508994506001600160a01b03918216935090841691637bc85516916004808201926020929091908290030181865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190612299565b6001600160a01b0316146105f057604051636381e58960e11b815260206004820152602c60248201527f6e657720766f746520636f6d707574657220636f6d6d6974746565206164647260448201526b0cae6e640dad2e6dac2e8c6d60a31b606482015260840161029e565b6040516308e2b09560e41b81526001600160a01b03821690638e2b09509061061e90869086906004016122fa565b602060405180830381865afa15801561063b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065f9190612328565b60ff166002146106b257604051636381e58960e11b815260206004820152601e60248201527f6e657720766f746520636f6d707574657220696d70657266656374696f6e0000604482015260640161029e565b6040805160018082528183019092526000916020808301908036833701905050905060608088836000815181106106eb576106eb6120fe565b6001600160a01b039283166020918202929092018101919091526040805160e081018252600d81526001549093169183019190915281018390526060810182905260006080820181905260a0820185905260c082015261074b818a61198f565b9a9950505050505050505050565b61076233611381565b61077f57604051636381e58960e11b815260040161029e906120d0565b6001546040516368b739c960e01b81526004810184905282151560248201523360448201526000916001600160a01b0316906368b739c9906064016020604051808303816000875af11580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190612328565b90506108536040518060e00160405280600060ff16815260200160006001600160a01b031681526020016060815260200160608152602001600063ffffffff168152602001606081526020016000151581525090565b8160ff166002141561105e5760008481526002602090815260408083208054825160e08101845260ff82168082526101009092046001600160a01b031681860152600183018054855181880281018801875281815293969295860193928301828280156108fd57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116108ce5790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156109d757838290600052602060002001805461094a90612345565b80601f016020809104026020016040519081016040528092919081815260200182805461097690612345565b80156109c35780601f10610998576101008083540402835291602001916109c3565b820191906000526020600020905b8154815290600101906020018083116109a657829003601f168201915b50505050508152602001906001019061092b565b50505090825250600382015463ffffffff166020808301919091526004830180546040805182850281018501825282815294019392830182828015610a4557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a27575b50505091835250506005919091015460ff90811615156020909201919091529093508116600b1415610ba557608083015163ffffffff16610b0157336001600160a01b03168360a00151600081518110610aa157610aa16120fe565b60200260200101516001600160a01b03161415610b0157604051636381e58960e11b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c662100000000604482015260640161029e565b6000805460a085015180516001600160a01b0390921692639067531d92610b2a57610b2a6120fe565b602002602001015185608001516040518363ffffffff1660e01b8152600401610b6e9291906001600160a01b0392909216825263ffffffff16602082015260400190565b600060405180830381600087803b158015610b8857600080fd5b505af1158015610b9c573d6000803e3d6000fd5b50505050611028565b8060ff16600c1415610c2d5760008054604085015180516001600160a01b03909216926358dd53d992610bda57610bda6120fe565b60200260200101518560400151600181518110610bf957610bf96120fe565b60200260200101516040518363ffffffff1660e01b8152600401610b6e92919060ff92831681529116602082015260400190565b8060ff16600d1415610c985760015460a084015180516001600160a01b039092169163ecbea6bc9190600090610c6557610c656120fe565b60200260200101516040518263ffffffff1660e01b8152600401610b6e91906001600160a01b0391909116815260200190565b8060ff1660151415610d43576110056001600160a01b031663b0ca889b8460400151600081518110610ccc57610ccc6120fe565b60200260200101516040518263ffffffff1660e01b8152600401610cf9919060ff91909116815260200190565b6020604051808303816000875af1158015610d18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190612380565b9150611028565b8060ff1660161415610ddc578260c0015115610db4576110056001600160a01b031663026a22fd8460a00151600081518110610d8157610d816120fe565b60200260200101516040518263ffffffff1660e01b8152600401610cf991906001600160a01b0391909116815260200190565b6110056001600160a01b0316631a2052518460a00151600081518110610d8157610d816120fe565b8060ff16601f1415610e4f576110056001600160a01b03166302b3703b84602001518560a00151600081518110610e1557610e156120fe565b60200260200101516040518363ffffffff1660e01b8152600401610cf99291906001600160a01b0392831681529116602082015260400190565b8060ff1660291415610ec7576110006001600160a01b0316630749b5188460600151600081518110610e8357610e836120fe565b60200260200101518560600151600181518110610ea257610ea26120fe565b60200260200101516040518363ffffffff1660e01b8152600401610cf99291906123e6565b8060ff1660331415610fb8578260c0015115610f9057608083015163ffffffff16610f38576110036001600160a01b03166325e85d168460600151600081518110610f1457610f146120fe565b60200260200101516040518263ffffffff1660e01b8152600401610cf9919061240b565b6110036001600160a01b03166350f4c5098460600151600081518110610f6057610f606120fe565b6020026020010151856080015163ffffffff166040518363ffffffff1660e01b8152600401610cf992919061241e565b6110036001600160a01b0316639fdc9df88460600151600081518110610f6057610f606120fe565b8060ff1660341415610fec576110036001600160a01b03166386b733f98460600151600081518110610f1457610f146120fe565b604051636381e58960e11b815260206004820152601060248201526f3b37ba32903a3cb8329032b93937b91760811b604482015260640161029e565b6040518281527f406818d541a0d6840b3ed377d6be620edc0ffdb3912d08690fca6715d14512229060200160405180910390a150505b50505050565b600061106f33611381565b61108c57604051636381e58960e11b815260040161029e906120d0565b60018551116110ce57604051636381e58960e11b815260206004820152600d60248201526c34b73b30b634b2103737b2329760991b604482015260640161029e565b6040805160018082528183019092526060918291600091816020015b60608152602001906001900390816110ea5790505090508781600081518110611115576111156120fe565b602002602001018190525060006040518060e00160405280603360ff1681526020016110036001600160a01b031681526020018481526020018381526020018963ffffffff1681526020018581526020018815158152509050611178818761198f565b9998505050505050505050565b600061119033611381565b6111ad57604051636381e58960e11b815260040161029e906120d0565b6001600160a01b03831661120457604051636381e58960e11b815260206004820152601c60248201527f636f6e74726163742061646472657373206e6f74206578697374732e00000000604482015260640161029e565b6040516205d1af60e31b81526001600160a01b038416600482015261100590622e8d7890602401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190612299565b6001600160a01b0316846001600160a01b031614156112eb57604051636381e58960e11b815260206004820152603460248201527f746865206163636f756e7420686173206265656e207468652061646d696e206f604482015273331031b7b731bab9393a1031b7b73a3930b1ba1760611b606482015260840161029e565b604080516001808252818301909252600091602080830190803683370190505090506060808683600081518110611324576113246120fe565b6001600160a01b039283166020918202929092018101919091526040805160e081018252601f81529289169183019190915281018390526060810182905260006080820181905260a0820185905260c0820152610357818761198f565b6000805460405163b5f2323560e01b81526001600160a01b0384811660048301529091169063b5f2323590602401602060405180830381865afa1580156113cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f09190612440565b92915050565b6113ff33611381565b61141c57604051636381e58960e11b815260040161029e906120d0565b6001546040516394d8f86f60e01b8152600481018390523360248201526001600160a01b03909116906394d8f86f90604401600060405180830381600087803b15801561146857600080fd5b505af115801561147c573d6000803e3d6000fd5b5050505050565b600061148e33611381565b6114ab57604051636381e58960e11b815260040161029e906120d0565b60648460ff16111561150a57604051636381e58960e11b815260206004820152602160248201527f696e76616c69642072616e6765206f66207061727469636970617465735261746044820152606560f81b606482015260840161029e565b60648360ff16111561155f57604051636381e58960e11b815260206004820152601860248201527f696e76616c69642072616e6765206f662077696e526174650000000000000000604482015260640161029e565b604080516002808252606080830184529260009291906020830190803683370190505090506060868260008151811061159a5761159a6120fe565b602002602001019060ff16908160ff168152505085826001815181106115c2576115c26120fe565b60ff9092166020928302919091018201526040805160e081018252600c8152309281019290925281018390526060810182905260006080820181905260a0820185905260c0820152610357818761198f565b600061161f33611381565b61163c57604051636381e58960e11b815260040161029e906120d0565b600184511161168457604051636381e58960e11b815260206004820152601360248201527234b73b30b634b21035b2bc903632b733ba341760691b604482015260640161029e565b60408051600280825260608281019093528291600091816020015b606081526020019060019003908161169f57905050905086816000815181106116ca576116ca6120fe565b602002602001018190525085816001815181106116e9576116e96120fe565b6020908102919091018101919091526040805160e081018252602981526110009281019290925281018390526060810182905260006080820181905260a0820185905260c0820152610357818761198f565b600061174633611381565b61176357604051636381e58960e11b815260040161029e906120d0565b60408051600180825281830190925260009160208083019080368337019050509050606080868360008151811061179c5761179c6120fe565b6001600160a01b039283166020918202929092018101919091526040805160e081018252600b8152928a169183019190915281018390526060810182905263ffffffff8716608082015260a08101849052600160c0820152610357818761198f565b600061180933611381565b61182657604051636381e58960e11b815260040161029e906120d0565b8260ff166110056001600160a01b031663598ab5966040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190612380565b141561190357604051636381e58960e11b815260206004820152603b60248201527f7468652063757272656e74206465706c6f79206175746820747970652069732060448201527f7468652073616d6520617320796f752077616e7420746f207365740000000000606482015260840161029e565b60408051600180825281830190925260609160009190602080830190803683370190505090506060858260008151811061193f5761193f6120fe565b60ff9092166020928302919091018201526040805160e081018252601581526110059281019290925281018390526060810182905260006080820181905260a0820185905260c082015261046681875b60015482516020840151604051631ca37ba360e11b815233600482015260ff90921660248301526001600160a01b039081166044830152606482018490526000928392911690633946f746906084016020604051808303816000875af11580156119fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a219190612380565b60008181526002602090815260409182902087518154838a01516001600160a01b0316610100026001600160a81b031990911660ff909216919091171781559187015180519394508793611a7b9260018501920190611b01565b5060608201518051611a97916002840191602090910190611ba7565b50608082015160038201805463ffffffff191663ffffffff90921691909117905560a08201518051611ad3916004840191602090910190611c00565b5060c091909101516005909101805460ff1916911515919091179055611afa816001610759565b9392505050565b82805482825590600052602060002090601f01602090048101928215611b975791602002820160005b83821115611b6857835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611b2a565b8015611b955782816101000a81549060ff0219169055600101602081600001049283019260010302611b68565b505b50611ba3929150611c55565b5090565b828054828255906000526020600020908101928215611bf4579160200282015b82811115611bf45782518051611be4918491602090910190611c6a565b5091602001919060010190611bc7565b50611ba3929150611cde565b828054828255906000526020600020908101928215611b97579160200282015b82811115611b9757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611c20565b5b80821115611ba35760008155600101611c56565b828054611c7690612345565b90600052602060002090601f016020900481019282611c985760008555611b97565b82601f10611cb157805160ff1916838001178555611b97565b82800160010185558215611b97579182015b82811115611b97578251825591602001919060010190611cc3565b80821115611ba3576000611cf28282611cfb565b50600101611cde565b508054611d0790612345565b6000825580601f10611d17575050565b601f016020900490600052602060002090810190611d359190611c55565b50565b6001600160a01b0381168114611d3557600080fd5b8015158114611d3557600080fd5b600080600060608486031215611d7057600080fd5b8335611d7b81611d38565b92506020840135611d8b81611d4d565b929592945050506040919091013590565b63b95aa35560e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ddb57611ddb611d9c565b604052919050565b600082601f830112611df457600080fd5b813567ffffffffffffffff811115611e0e57611e0e611d9c565b611e21601f8201601f1916602001611db2565b818152846020838601011115611e3657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611e6657600080fd5b823567ffffffffffffffff811115611e7d57600080fd5b611e8985828601611de3565b95602094909401359450505050565b60008060408385031215611eab57600080fd5b8235611eb681611d38565b946020939093013593505050565b60008060408385031215611ed757600080fd5b823591506020830135611ee981611d4d565b809150509250929050565b63ffffffff81168114611d3557600080fd5b60008060008060808587031215611f1c57600080fd5b843567ffffffffffffffff811115611f3357600080fd5b611f3f87828801611de3565b9450506020850135611f5081611ef4565b92506040850135611f6081611d4d565b9396929550929360600135925050565b600060208284031215611f8257600080fd5b5035919050565b600080600060608486031215611f9e57600080fd5b8335611fa981611d38565b92506020840135611d8b81611d38565b600060208284031215611fcb57600080fd5b8135611afa81611d38565b60ff81168114611d3557600080fd5b600080600060608486031215611ffa57600080fd5b833561200581611fd6565b92506020840135611d8b81611fd6565b60008060006060848603121561202a57600080fd5b833567ffffffffffffffff8082111561204257600080fd5b61204e87838801611de3565b9450602086013591508082111561206457600080fd5b5061207186828701611de3565b925050604084013590509250925092565b60008060006060848603121561209757600080fd5b83356120a281611d38565b92506020840135611d8b81611ef4565b600080604083850312156120c557600080fd5b8235611eb681611fd6565b6020808252601490820152733cb7ba9036bab9ba1031329033b7bb32b93737b960611b604082015260600190565b63b95aa35560e01b600052603260045260246000fd5b600067ffffffffffffffff82111561212e5761212e611d9c565b5060051b60200190565b600082601f83011261214957600080fd5b8151602061215e61215983612114565b611db2565b82815260059290921b8401810191818101908684111561217d57600080fd5b8286015b848110156121a157805161219481611ef4565b8352918301918301612181565b509695505050505050565b600080600080608085870312156121c257600080fd5b84516121cd81611fd6565b809450506020808601516121e081611fd6565b604087015190945067ffffffffffffffff808211156121fe57600080fd5b818801915088601f83011261221257600080fd5b815161222061215982612114565b81815260059190911b8301840190848101908b83111561223f57600080fd5b938501935b8285101561226657845161225781611d38565b82529385019390850190612244565b60608b0151909750945050508083111561227f57600080fd5b505061228d87828801612138565b91505092959194509250565b6000602082840312156122ab57600080fd5b8151611afa81611d38565b600081518084526020808501945080840160005b838110156122ef5781516001600160a01b0316875295820195908201906001016122ca565b509495945050505050565b60408152600061230d60408301856122b6565b828103602084015261231f81856122b6565b95945050505050565b60006020828403121561233a57600080fd5b8151611afa81611fd6565b600181811c9082168061235957607f821691505b6020821081141561237a5763b95aa35560e01b600052602260045260246000fd5b50919050565b60006020828403121561239257600080fd5b5051919050565b6000815180845260005b818110156123bf576020818501810151868301820152016123a3565b818111156123d1576000602083870101525b50601f01601f19169290920160200192915050565b6040815260006123f96040830185612399565b828103602084015261231f8185612399565b602081526000611afa6020830184612399565b6040815260006124316040830185612399565b90508260208301529392505050565b60006020828403121561245257600080fd5b8151611afa81611d4d56fea264697066735822122025c2ff1d74d5fbc92a29d8fcf59aa314bd7c9bf9dc3bd91e399198263194f85e64736f6c634300080b003360806040523480156200001157600080fd5b50604051620015913803806200159183398101604081905262000034916200072a565b600080546001600160a01b031916331781555b84518163ffffffff161015620000c257620000ad858263ffffffff16815181106200007657620000766200082d565b6020026020010151858363ffffffff16815181106200009957620000996200082d565b6020026020010151620000fb60201b60201c565b80620000b98162000859565b91505062000047565b506004805461ffff191661010060ff8481169190910260ff191691909117908416179055620000f13362000289565b50505050620008cb565b6200010633620002f3565b6200014757604051636381e58960e11b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b60448201526064015b60405180910390fd5b63ffffffff8116620001f2576001600160a01b038216321415620001af57604051636381e58960e11b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c66210000000060448201526064016200013e565b6001600160a01b0382166000908152600360209081526040909120805463ffffffff19169055620001ee906001908490620005c86200033b821b17901c565b5050565b6200020d826001620004da60201b620007471790919060201c565b1562000242576001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff83161790555050565b6001600160a01b0382166000908152600360209081526040909120805463ffffffff191663ffffffff8416179055620001ee906001908490620004f8811b6200076517901c565b6200029433620002f3565b620002d157604051636381e58960e11b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b60448201526064016200013e565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382163014156200030f57506001919050565b6000546001600160a01b03838116911614156200032e57506001919050565b506000919050565b919050565b6001600160a01b038116600090815260208390526040902054620003af57604051636381e58960e11b815260206004820152602360248201527f4c6962416464726573735365743a2076616c756520646f65736e27742065786960448201526239ba1760e91b60648201526084016200013e565b6001600160a01b038116600090815260208390526040812054620003d69060019062000880565b600184810154919250600091620003ee919062000880565b905060008460010182815481106200040a576200040a6200082d565b6000918252602090912001546001860180546001600160a01b0390921692508291859081106200043e576200043e6200082d565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055620004748360016200089a565b6001600160a01b038083166000908152602088905260408082209390935590861681529081205560018501805480620004b157620004b1620008b5565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b031660009081526020919091526040902054151590565b6001600160a01b0381166200055b57604051636381e58960e11b815260206004820152602160248201527f4c6962416464726573735365743a2076616c75652063616e27742062652030786044820152600360fc1b60648201526084016200013e565b6001600160a01b03811660009081526020839052604090205415620005dc57604051636381e58960e11b815260206004820152602f60248201527f4c6962416464726573735365743a2076616c756520616c72656164792065786960448201526e39ba399034b7103a34329039b2ba1760891b60648201526084016200013e565b6001808301805491820181556000818152602080822090930180546001600160a01b039095166001600160a01b0319909516851790559054928152929052604090912055565b63b95aa35560e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000663576200066362000622565b604052919050565b60006001600160401b0382111562000687576200068762000622565b5060051b60200190565b600082601f830112620006a357600080fd5b81516020620006bc620006b6836200066b565b62000638565b82815260059290921b84018101918181019086841115620006dc57600080fd5b8286015b848110156200070d57805163ffffffff81168114620006ff5760008081fd5b8352918301918301620006e0565b509695505050505050565b805160ff811681146200033657600080fd5b600080600080608085870312156200074157600080fd5b84516001600160401b03808211156200075957600080fd5b818701915087601f8301126200076e57600080fd5b8151602062000781620006b6836200066b565b82815260059290921b8401810191818101908b841115620007a157600080fd5b948201945b83861015620007d85785516001600160a01b0381168114620007c85760008081fd5b82529482019490820190620007a6565b918a0151919850909350505080821115620007f257600080fd5b50620008018782880162000691565b935050620008126040860162000718565b9150620008226060860162000718565b905092959194509250565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600063ffffffff8083168181141562000876576200087662000843565b6001019392505050565b60008282101562000895576200089562000843565b500390565b60008219821115620008b057620008b062000843565b500190565b63b95aa35560e01b600052603160045260246000fd5b610cb680620008db6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806358dd53d91161007157806358dd53d91461015f5780636e0376d414610172578063749280c7146101955780639067531d146101ad578063b5f23235146101c0578063c77695e4146101d357600080fd5b806305282c70146100b957806307f44999146100ce5780630e878ed0146100f757806323bdace11461010457806328e914891461012c57806337df996214610157575b600080fd5b6100cc6100c7366004610960565b610202565b005b6004546100e090610100900460ff1681565b60405160ff90911681526020015b60405180910390f35b6004546100e09060ff1681565b610117610112366004610998565b610253565b60405163ffffffff90911681526020016100ee565b60005461013f906001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b6101176102d2565b6100cc61016d366004610a6e565b6102e6565b610185610180366004610960565b61032f565b60405190151581526020016100ee565b61019d610375565b6040516100ee9493929190610aa1565b6100cc6101bb366004610b43565b61047a565b6101856101ce366004610960565b6105b5565b6101176101e1366004610960565b6001600160a01b031660009081526003602052604090205463ffffffff1690565b61020b3361032f565b61023157604051636381e58960e11b815260040161022890610b83565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b83518163ffffffff1610156102cb5760036000858363ffffffff168151811061028357610283610ba8565b6020908102919091018101516001600160a01b03168252810191909152604001600020546102b79063ffffffff1683610bd4565b9150806102c381610bfc565b915050610258565b5092915050565b60006102e1610112600161087c565b905090565b6102ef3361032f565b61030c57604051636381e58960e11b815260040161022890610b83565b6004805461ffff191661010060ff9384160260ff19161792909116919091179055565b60006001600160a01b03821630141561034a57506001919050565b6000546001600160a01b038381169116141561036857506001919050565b506000919050565b919050565b600080606080610385600161087c565b9150815167ffffffffffffffff8111156103a1576103a1610982565b6040519080825280602002602001820160405280156103ca578160200160208202803683370190505b50905060005b825181101561046157600360008483815181106103ef576103ef610ba8565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900463ffffffff1682828151811061043a5761043a610ba8565b63ffffffff909216602092830291909101909101528061045981610c20565b9150506103d0565b5060045460ff8082169661010090920416945091925090565b6104833361032f565b6104a057604051636381e58960e11b815260040161022890610b83565b63ffffffff8116610537576001600160a01b03821632141561050557604051636381e58960e11b815260206004820152601c60248201527f596f752063616e206e6f742072656d6f766520796f757273656c6621000000006044820152606401610228565b6001600160a01b0382166000908152600360205260409020805463ffffffff191690556105336001836105c8565b5050565b610542600183610747565b15610576576001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff83161790555050565b6001600160a01b0382166000908152600360205260409020805463ffffffff191663ffffffff8381169190911790915561053390600190849061076516565b60006105c2600183610747565b92915050565b6105d28282610747565b61062b57604051636381e58960e11b815260206004820152602360248201527f4c6962416464726573735365743a2076616c756520646f65736e27742065786960448201526239ba1760e91b6064820152608401610228565b6001600160a01b03811660009081526020839052604081205461065090600190610c3b565b6001848101549192506000916106669190610c3b565b9050600084600101828154811061067f5761067f610ba8565b6000918252602090912001546001860180546001600160a01b0390921692508291859081106106b0576106b0610ba8565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556106e4836001610c52565b6001600160a01b03808316600090815260208890526040808220939093559086168152908120556001850180548061071e5761071e610c6a565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b031660009081526020919091526040902054151590565b6001600160a01b0381166107c657604051636381e58960e11b815260206004820152602160248201527f4c6962416464726573735365743a2076616c75652063616e27742062652030786044820152600360fc1b6064820152608401610228565b6107d08282610747565b1561083657604051636381e58960e11b815260206004820152602f60248201527f4c6962416464726573735365743a2076616c756520616c72656164792065786960448201526e39ba399034b7103a34329039b2ba1760891b6064820152608401610228565b6001808301805491820181556000818152602080822090930180546001600160a01b039095166001600160a01b0319909516851790559054928152929052604090912055565b600181015460609060009067ffffffffffffffff81111561089f5761089f610982565b6040519080825280602002602001820160405280156108c8578160200160208202803683370190505b50905060005b60018401548110156102cb578360010181815481106108ef576108ef610ba8565b9060005260206000200160009054906101000a90046001600160a01b031682828151811061091f5761091f610ba8565b6001600160a01b03909216602092830291909101909101528061094181610c20565b9150506108ce565b80356001600160a01b038116811461037057600080fd5b60006020828403121561097257600080fd5b61097b82610949565b9392505050565b63b95aa35560e01b600052604160045260246000fd5b600060208083850312156109ab57600080fd5b823567ffffffffffffffff808211156109c357600080fd5b818501915085601f8301126109d757600080fd5b8135818111156109e9576109e9610982565b8060051b604051601f19603f83011681018181108582111715610a0e57610a0e610982565b604052918252848201925083810185019188831115610a2c57600080fd5b938501935b82851015610a5157610a4285610949565b84529385019392850192610a31565b98975050505050505050565b803560ff8116811461037057600080fd5b60008060408385031215610a8157600080fd5b610a8a83610a5d565b9150610a9860208401610a5d565b90509250929050565b60006080820160ff87168352602060ff8716818501526080604085015281865180845260a086019150828801935060005b81811015610af75784516001600160a01b031683529383019391830191600101610ad2565b50508481036060860152855180825290820192508186019060005b81811015610b3457825163ffffffff1685529383019391830191600101610b12565b50929998505050505050505050565b60008060408385031215610b5657600080fd5b610b5f83610949565b9150602083013563ffffffff81168114610b7857600080fd5b809150509250929050565b6020808252600b908201526a4f6e6c79206f776e65722160a81b604082015260600190565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600063ffffffff808316818516808303821115610bf357610bf3610bbe565b01949350505050565b600063ffffffff80831681811415610c1657610c16610bbe565b6001019392505050565b6000600019821415610c3457610c34610bbe565b5060010190565b600082821015610c4d57610c4d610bbe565b500390565b60008219821115610c6557610c65610bbe565b500190565b63b95aa35560e01b600052603160045260246000fdfea26469706673582212209d87ae3059ef7c4e89a9812d140136cc3f2e1d099fad7b316cba2f4d2bc5b06a64736f6c634300080b003360806040523480156200001157600080fd5b5060405162002084380380620020848339810160408190526200003491620000e1565b600080546001600160a01b03191633179055604051829082906200005890620000b6565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156200008c573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905550620001199050565b610a2e806200165683390190565b80516001600160a01b0381168114620000dc57600080fd5b919050565b60008060408385031215620000f557600080fd5b6200010083620000c4565b91506200011060208401620000c4565b90509250929050565b61152d80620001296000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806389ebc3b711610097578063d47e52c211610066578063d47e52c2146102c8578063e59e7b34146102f3578063ec84604414610306578063ecbea6bc1461032c57600080fd5b806389ebc3b71461025b57806394d8f86f1461028257806398159bb514610295578063c0b560c2146102b557600080fd5b806362e7ec50116100d357806362e7ec50146101f757806368b739c9146102005780636e0376d41461022557806386840d091461024857600080fd5b806302ad26cc1461010557806305282c701461019657806328e91489146101ab5780633946f746146101d6575b600080fd5b6101586101133660046110cf565b600360208190526000918252604090912080546001820154600283015492909301546001600160a01b03918216939182169260ff600160a01b90930483169290911685565b604080516001600160a01b03968716815295909416602086015260ff92831693850193909352606084015216608082015260a0015b60405180910390f35b6101a96101a43660046110ff565b61033f565b005b6000546101be906001600160a01b031681565b6040516001600160a01b03909116815260200161018d565b6101e96101e4366004611133565b610390565b60405190815260200161018d565b6101e960025481565b61021361020e366004611180565b6105d4565b60405160ff909116815260200161018d565b6102386102333660046110ff565b610928565b604051901515815260200161018d565b6101e96102563660046111c3565b61096e565b6102136102693660046110cf565b6000908152600360208190526040909120015460ff1690565b6101a96102903660046111f8565b61099c565b6102a86102a336600461121b565b610ab1565b60405161018d9190611281565b6001546101be906001600160a01b031681565b6101e96102d63660046111c3565b600460209081526000928352604080842090915290825290205481565b6102136103013660046110cf565b610db2565b6103196103143660046110cf565b610e5f565b60405161018d9796959493929190611359565b6101a961033a3660046110ff565b610f6d565b61034833610928565b61036e57604051636381e58960e11b8152600401610365906113bd565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061039b33610928565b6103b857604051636381e58960e11b8152600401610365906113bd565b60ff80851660009081526004602090815260408083206001600160a01b038816845282528083205480845260039283905292200154909116600114156104035761040181610db2565b505b6000818152600360208190526040909120015460ff166001141561046a57604051636381e58960e11b815260206004820152601860248201527f43757272656e742070726f706f73616c206e6f7420656e6400000000000000006044820152606401610365565b6002805490600061047a836113f8565b91905055506000600254905060608060006040518060e00160405280896001600160a01b031681526020018b6001600160a01b031681526020018a60ff16815260200188436104c99190611413565b815260016020808301829052604080840188905260609384018790526000898152600380845290829020865181546001600160a01b0319166001600160a01b0391821617825587850151958201805494890151969091166001600160a81b031990941693909317600160a01b60ff96871602179092559385015160028201556080850151938101805460ff1916949093169390931790915560a08301518051939450849361057d9260048501920190611055565b5060c08201518051610599916005840191602090910190611055565b50505060ff891660009081526004602090815260408083206001600160a01b038c168452909152902084905550919350505050949350505050565b60006105df33610928565b6105fc57604051636381e58960e11b8152600401610365906113bd565b60008481526003602081905260409091200154849060ff1661065657604051636381e58960e11b8152602060048201526012602482015271141c9bdc1bdcd85b081b9bdd08195e1a5cdd60721b6044820152606401610365565b60008581526003602081905260409091200154859060ff166001146106be57604051636381e58960e11b815260206004820152601760248201527f50726f706f73616c206973206e6f7420766f7461626c650000000000000000006044820152606401610365565b600086815260036020818152604092839020835160e08101855281546001600160a01b03908116825260018301549081168285015260ff600160a01b9091048116828701526002830154606083015293820154909316608084015260048101805485518185028101850190965280865291946107e79493869360a08601939183018282801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b50505050508152602001600582018054806020026020016040519081016040528092919081815260200182805480156107d857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107ba575b50505050508152505086610fb5565b1561082557604051636381e58960e11b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606401610365565b851561086057600481018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b038716179055610891565b600581018054600181018255600091825260209091200180546001600160a01b0319166001600160a01b0387161790555b6001546040516308e2b09560e41b81526000916001600160a01b031690638e2b0950906108c990600480870191600588019101611469565b602060405180830381865afa1580156108e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090a9190611497565b600392909201805460ff191660ff8416179055509695505050505050565b60006001600160a01b03821630141561094357506001919050565b6000546001600160a01b038381169116141561096157506001919050565b506000919050565b919050565b60ff821660009081526004602090815260408083206001600160a01b03851684529091529020545b92915050565b6109a533610928565b6109c257604051636381e58960e11b8152600401610365906113bd565b60008281526003602052604090206109d983610db2565b60ff16600114610a3f57604051636381e58960e11b815260206004820152602a60248201527f4f6e6c79206e65776c7920637265617465642070726f706f73616c2063616e206044820152691899481c995d9bdad95960b21b6064820152608401610365565b60018101546001600160a01b03838116911614610a9f57604051636381e58960e11b815260206004820152601860248201527f4f6e6c792070726f706f7365722063616e207265766f6b6500000000000000006044820152606401610365565b600301805460ff191660041790555050565b6060600254831115610b1557604051636381e58960e11b815260206004820152602660248201527f2766726f6d272069732067726561746572207468616e202770726f706f73616c604482015265436f756e742760d01b6064820152608401610365565b81831115610b6657604051636381e58960e11b815260206004820152601b60248201527f2766726f6d272069732067726561746572207468616e2027746f2700000000006044820152606401610365565b600254821115610b765760025491505b6001831015610b8457600192505b6000610b9084846114b4565b610b9b906001611413565b67ffffffffffffffff811115610bb357610bb36114cb565b604051908082528060200260200182016040528015610c3c57816020015b610c296040518060e0016040528060006001600160a01b0316815260200160006001600160a01b03168152602001600060ff16815260200160008152602001600060ff16815260200160608152602001606081525090565b815260200190600190039081610bd15790505b5090506000845b848111610da857600081815260036020818152604092839020835160e08101855281546001600160a01b03908116825260018301549081168285015260ff600160a01b909104811682870152600283015460608301529382015490931660808401526004810180548551818502810185019096528086529194859360a086019391929190830182828015610d0057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ce2575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015610d6257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d44575b505050505081525050848480610d77906113f8565b955081518110610d8957610d896114e1565b6020026020010181905250508080610da0906113f8565b915050610c43565b5090949350505050565b600081815260036020819052604082200154829060ff16610e0b57604051636381e58960e11b8152602060048201526012602482015271141c9bdc1bdcd85b081b9bdd08195e1a5cdd60721b6044820152606401610365565b60008381526003602081905260409091209081015460ff1660011415610e4f578060020154431115610e4f57600301805460ff191660059081179091559150610e59565b6003015460ff1691505b50919050565b600081815260036020818152604092839020805460018201546002830154948301546004840180548851818802810188019099528089526001600160a01b039485169894841697600160a01b90940460ff908116979496931694606094859493919290830182828015610efb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610edd575b5050505050925080600501805480602002602001604051908101604052809291908181526020018280548015610f5a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f3c575b5050505050915050919395979092949650565b610f7633610928565b610f9357604051636381e58960e11b8152600401610365906113bd565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610fc58360a0015183610fef565b80610fd95750610fd98360c0015183610fef565b15610fe657506001610996565b50600092915050565b6000805b835181101561104b5783818151811061100e5761100e6114e1565b60200260200101516001600160a01b0316836001600160a01b03161415611039576001915050610996565b80611043816113f8565b915050610ff3565b5060009392505050565b8280548282559060005260206000209081019282156110aa579160200282015b828111156110aa57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611075565b506110b69291506110ba565b5090565b5b808211156110b657600081556001016110bb565b6000602082840312156110e157600080fd5b5035919050565b80356001600160a01b038116811461096957600080fd5b60006020828403121561111157600080fd5b61111a826110e8565b9392505050565b60ff8116811461113057600080fd5b50565b6000806000806080858703121561114957600080fd5b611152856110e8565b9350602085013561116281611121565b9250611170604086016110e8565b9396929550929360600135925050565b60008060006060848603121561119557600080fd5b83359250602084013580151581146111ac57600080fd5b91506111ba604085016110e8565b90509250925092565b600080604083850312156111d657600080fd5b82356111e181611121565b91506111ef602084016110e8565b90509250929050565b6000806040838503121561120b57600080fd5b823591506111ef602084016110e8565b6000806040838503121561122e57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156112765781516001600160a01b031687529582019590820190600101611251565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561134b57888303603f19018552815180516001600160a01b0390811685528882015116888501528681015160ff16878501526060808201519085015260808082015160e091906113008288018260ff169052565b505060a08083015182828801526113198388018261123d565b9250505060c08083015192508582038187015250611337818361123d565b9689019694505050908601906001016112a8565b509098975050505050505050565b6001600160a01b0388811682528716602082015260ff8681166040830152606082018690528416608082015260e060a0820181905260009061139d9083018561123d565b82810360c08401526113af818561123d565b9a9950505050505050505050565b6020808252600b908201526a4f6e6c79206f776e65722160a81b604082015260600190565b63b95aa35560e01b600052601160045260246000fd5b600060001982141561140c5761140c6113e2565b5060010190565b60008219821115611426576114266113e2565b500190565b6000815480845260208085019450836000528060002060005b838110156112765781546001600160a01b031687529582019560019182019101611444565b60408152600061147c604083018561142b565b828103602084015261148e818561142b565b95945050505050565b6000602082840312156114a957600080fd5b815161111a81611121565b6000828210156114c6576114c66113e2565b500390565b63b95aa35560e01b600052604160045260246000fd5b63b95aa35560e01b600052603260045260246000fdfea26469706673582212205bbf6564dd81edaf252007f48f4aa3987af9ad8d4f92c6308579d2c64edc7f1664736f6c634300080b0033608060405234801561001057600080fd5b50604051610a2e380380610a2e83398101604081905261002f91610200565b600080546001600160a01b03191633179055818161004c8261013d565b600180546001600160a01b0319166001600160a01b038316908117825560408051631befccb160e11b815290516337df9962916004808201926020929091908290030181865afa1580156100a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c89190610233565b63ffffffff16101561013457604051636381e58960e11b815260206004820152602960248201527f636f6d6d6974746565206973206572726f722c20706c6561736520636865636b60448201526820616464726573732160b81b60648201526084015b60405180910390fd5b50505050610260565b610146336101a3565b61018157604051636381e58960e11b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b604482015260640161012b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382163014156101be57506001919050565b6000546001600160a01b03838116911614156101dc57506001919050565b506000919050565b919050565b80516001600160a01b03811681146101e457600080fd5b6000806040838503121561021357600080fd5b61021c836101e9565b915061022a602084016101e9565b90509250929050565b60006020828403121561024557600080fd5b815163ffffffff8116811461025957600080fd5b9392505050565b6107bf8061026f6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806305282c701461006757806328e914891461007c5780636e0376d4146100ac5780637bc85516146100cf5780638e2b0950146100e25780639a93008c14610107575b600080fd5b61007a6100753660046104c5565b61011a565b005b60005461008f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100bf6100ba3660046104c5565b610184565b60405190151581526020016100a3565b60015461008f906001600160a01b031681565b6100f56100f036600461059f565b6101ca565b60405160ff90911681526020016100a3565b6100f5610115366004610627565b61043c565b61012333610184565b61016257604051636381e58960e11b815260206004820152600b60248201526a4f6e6c79206f776e65722160a81b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b03821630141561019f57506001919050565b6000546001600160a01b03838116911614156101bd57506001919050565b506000919050565b919050565b6001546040516323bdace160e01b815260009182916001600160a01b03909116906323bdace1906101ff908790600401610698565b602060405180830381865afa15801561021c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061024091906106e5565b6001546040516323bdace160e01b81529192506000916001600160a01b03909116906323bdace190610276908790600401610698565b602060405180830381865afa158015610293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b791906106e5565b6102c19083610718565b90506000600160009054906101000a90046001600160a01b03166001600160a01b03166337df99626040518163ffffffff1660e01b8152600401602060405180830381865afa158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c91906106e5565b9050610432838383600160009054906101000a90046001600160a01b03166001600160a01b0316630e878ed06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610397573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bb9190610740565b600160009054906101000a90046001600160a01b03166001600160a01b03166307f449996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561040e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101159190610740565b9695505050505050565b600061044b60ff84168561075d565b63ffffffff1661045c86606461075d565b63ffffffff161015610470575060016104a5565b61047d8560ff841661075d565b63ffffffff1661048e87606461075d565b63ffffffff16106104a1575060026104a5565b5060035b95945050505050565b80356001600160a01b03811681146101c557600080fd5b6000602082840312156104d757600080fd5b6104e0826104ae565b9392505050565b63b95aa35560e01b600052604160045260246000fd5b600082601f83011261050e57600080fd5b8135602067ffffffffffffffff8083111561052b5761052b6104e7565b8260051b604051601f19603f83011681018181108482111715610550576105506104e7565b60405293845285810183019383810192508785111561056e57600080fd5b83870191505b8482101561059457610585826104ae565b83529183019190830190610574565b979650505050505050565b600080604083850312156105b257600080fd5b823567ffffffffffffffff808211156105ca57600080fd5b6105d6868387016104fd565b935060208501359150808211156105ec57600080fd5b506105f9858286016104fd565b9150509250929050565b63ffffffff8116811461061557600080fd5b50565b60ff8116811461061557600080fd5b600080600080600060a0868803121561063f57600080fd5b853561064a81610603565b9450602086013561065a81610603565b9350604086013561066a81610603565b9250606086013561067a81610618565b9150608086013561068a81610618565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b818110156106d95783516001600160a01b0316835292840192918401916001016106b4565b50909695505050505050565b6000602082840312156106f757600080fd5b81516104e081610603565b63b95aa35560e01b600052601160045260246000fd5b600063ffffffff80831681851680830382111561073757610737610702565b01949350505050565b60006020828403121561075257600080fd5b81516104e081610618565b600063ffffffff8083168185168183048111821515161561078057610780610702565b0294935050505056fea2646970667358221220fabea83a81929920d3c210ab7da2ccedb38f40dcd6c8c80fc0e4c020d8ff182164736f6c634300080b0033"; +// clang-format on + +class AuthInitializer +{ +public: + static void init(protocol::BlockNumber _number, + const std::shared_ptr& _protocol, + const std::shared_ptr& _nodeConfig, const protocol::Block::Ptr& block) + { + // hex bin code to bytes + bytes code; + boost::algorithm::unhex( + _nodeConfig->smCryptoType() ? committeeSmBin : committeeBin, std::back_inserter(code)); + + + // constructor (address[] initGovernors, = [authAdminAddress] + // uint32[] memory weights, = [1] + // uint8 participatesRate, = 0 + // uint8 winRate) = 0 + auto authAdmin = Address(_nodeConfig->authAdminAddress()); + std::vector

iv7A5;7BP**)M$NGoC1_k+5-~3M=Ayy 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�fpv+8GfPW}6v|Fim; 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

db71RQM{{HmGtIT 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�`u<_8rX9}`4O4H-s?j0h5e5s$#~35Faz$B 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

4Gy}a7byB!{x2| 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

<1oE%+r+nlnJ*g8G`xUSvJGY@ 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

&H3XNZuE$ypF(mZn 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

F^F{DL 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

Dww&uZVM?a`NpueteVni_Cl1Sh$!J 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Ð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 t zKhN_mYR1b%S1jLK6NFO(E}6a+q1h;je(T<5U`U?3FINU*y+qdmV5HQZGM$@`O z6DfSHFKlR_G>?wmRFD8lZXu)cx@~Dpi5IasHo4IEW3#k=nHCU;nO_}H+7hQBZ$bM@ z2~4(~j*OAodeGQ4?0~CzeK&im;C=$JSVHA4#B4B9%^u{ZsKAs5V7lD_&^Yq0uE+gRFH46#yG7KkB}{bKQp++OV8;# zSL>YLLqKu>)Q-Q)XIcP<4F=7vA~VA_lL*M=-n>#ij@>LG+0+jt!hh`w%T(jBNwqg^ zPma-0HDDC118cci?%Z+>BEO}QAQ@m3qPD3a_-(`tNviEIvFWlVWkI+AHZ9zz;BS!@pU??zDJ2Y)1e(LUEyC45qDSi{$7$yf({x zN+%a~PHcZ&W~sZUYv`z!#h&omNelIE8DWx_WX?b{70!;K`U)8M2r*JWObS? zgry6+j}23dUB}^|xcN(O=Giuflflav$BXw-l3t2y;<%c8inwX{o>`r>yuiJL08?eV z;vLkj@@+CVLPgz=V#inHxdJ(%_m8HbFqxWytE5`AWip|PG(t?oa)i*yz8(fv5afoHyS+MQ6HAb}?Cp z6bHb9euz$1-6`8@{0q#L`lHPtp|syagHP9$@yGBJo`HN5iZ_^0BaB=+mA7(Yy2E+< z5uB$XC(4W6b!Vn#rz}5W#_K7^MG9y%R{x}bMZkwlQMwJcy-4e8-Z#1HbI)BcxNu0} z$7+Q+)9@V7k+AJbQth9hr+)rNv8fFUs}AFHx1v+MxBA*nw2eiso8@V)CUy?)RsT7} zwsj8Y?g!-$=*pXv*}&Bj;uTg<1qr!-znVtC;G21c*+jT|&wqC~gzE>1QCCR8_gG7lhfHT-CtHMo&7Fv)tlNTX&;)o6zY)ofayGq1j9k7}V>RS|2Kxdm z&QF;XukcT|V1Zeidk?_3I``3h*p(f4wx4(SrEX|pCYMbjuDk|`V(`R!o>E|>zR~;X z+OGPKL%;b*;^sh1azK9~D2^==Hb}I%P#3eG#z@QJrO7qGb0kOovkfYGRmnc5qVd%_#}ANK+1p5e3>K8F!J0e>V2q z_6v+I5jpqar*2I(wL;%t!YaxN7Pfx#K3^qt=YW67r4j?uzyvVbOmhGxm+k$1ppMDy zq{wuC_w$%YNpZ$g3U^%&8|ek3g0FEk^7r2|*RNC`pA zG$G1l@~;QJ?7Yqw&>sT>=}1{}R%?shq~NE2lJDt)M|Ko7a8C8!7+G-kG`gz{et(h| z7zSH$(6BaPQDO>eMnow}%|<_IxqH7dzdcd~12ORBeV7yxLDD!|4Dg z>=>V&{P}{1W5T%&QWP5ww}U!X_PZ!10+VN2e;_yw(dqZA!IE z({0LtIxyv&_amOlKFuhHxB=fzpIVZEKS4ch9Wy#6L58+IsS@Shf8{ns zrLB74c4aWNd9`+6{I`hC@}E2zq~+4VbLK^1EAeAfp>g=R;5XS(b)-eGQASQWCN<@u z16mhcP>j%%3iisSuQaSZ@00~Y{Y{rhxz)w%<^wJxjNAblRdogn zHkvir?KTcN?Gm2K8Iss9&S#Xz+J47bJbf_+Km(H>YCdvqT6lum4itR5XGj7+xLtR2^Dl&3j}N0wY{EdDdE=7zDwqw z{z`sfxV75HGa8?#kg_^qBLYD>ZP^_Sij$Y$rwG|7N_CJ)uF$bf*YId9?GEl@sMM=@}=Z9q(^$$W?Tz9qqlUrA!(5mgXe)-#-9kUAx8Q z%;~(hG)u?}*djo#r;rOIj2*DS=DqCigglHF#aPxZeIcAz4kIc{H&^Ns%m>AzLtT*A zO;398xZ;fQ>gHuq8{Sofno<4Y3Jl)>wD*8DQ#jk&I-#|j<{s)Up>⪙eqF9qX-#~ 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 z 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�kf;sVq@cIFBKM* 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%0D5X`D>5_eTLcDf(zg&F3O7 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

yrCA#P`6 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

M&R5|^D7i9eA_KM5ph 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≀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

wSqgAPWC!$S*%9w!FN0 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 @V8_C1xxHhi~+& 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
  • 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
  • FadE#O<{TQ} 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

    N!dmwytN<|4?t$5o0zMbcuM1SDvzq|dHOme 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∋) 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

    2d03I7$5%IM2!I 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.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 z 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

    }sBd)a*fgr$+HH~;_}tpW?~R!@sO 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 z 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⁡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
    &1J=4r=z8SZ6U0`3V6DR1vhKEZdp} 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

      WeJ7WuO6&sX(#|g*{$>34K#GS- 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