├── .gitignore ├── .travis.yml ├── CHANGELOG ├── CHANGELOG.md ├── LICENSE ├── README.md ├── checkstyle-suppressions.xml ├── checkstyle.xml ├── docs ├── MQ使用手册.md ├── hyperchain_litesdk_DID_document.md ├── hyperchain_litesdk_bvm_document.md ├── hyperchain_litesdk_deprecated_interface_document.md ├── hyperchain_litesdk_document.docx ├── hyperchain_litesdk_document.md ├── hyperchain_litesdk_filemgr_document.md ├── hyperchain_litesdk_indexdb_document.md ├── hyperchain_litesdk_proof_document.md ├── img │ ├── image-20200817143508082.png │ └── proof-1.png └── 接口权限管理使用手册.md ├── pom.xml ├── prepare_nodes.sh ├── scripts └── deploy.sh └── src ├── main ├── java │ └── cn │ │ └── hyperchain │ │ └── sdk │ │ ├── account │ │ ├── Account.java │ │ ├── Algo.java │ │ ├── DIDAccount.java │ │ ├── ECAccount.java │ │ ├── ED25519Account.java │ │ ├── PKIAccount.java │ │ ├── R1Account.java │ │ ├── SMAccount.java │ │ └── Version.java │ │ ├── bvm │ │ ├── OperationResult.java │ │ ├── OperationResultCode.java │ │ ├── Result.java │ │ └── operate │ │ │ ├── AccountOperation.java │ │ │ ├── BuiltinOperation.java │ │ │ ├── BuiltinOperationBuilder.java │ │ │ ├── CAMode.java │ │ │ ├── CAModeOperation.java │ │ │ ├── CNSOperation.java │ │ │ ├── CertOperation.java │ │ │ ├── ConfigOperation.java │ │ │ ├── ContractMethod.java │ │ │ ├── ContractOperation.java │ │ │ ├── DIDOperation.java │ │ │ ├── HashChangeOperation.java │ │ │ ├── HashOperation.java │ │ │ ├── MPCOperation.java │ │ │ ├── NodeOperation.java │ │ │ ├── Operation.java │ │ │ ├── PermissionOperation.java │ │ │ ├── ProposalContentOperation.java │ │ │ ├── ProposalOperation.java │ │ │ ├── ProposalType.java │ │ │ ├── RootCAOperation.java │ │ │ └── params │ │ │ ├── AlgoSet.java │ │ │ ├── ContractManageOption.java │ │ │ ├── GenesisInfo.java │ │ │ ├── GenesisNode.java │ │ │ └── NsFilterRule.java │ │ ├── common │ │ ├── adapter │ │ │ └── StringNullAdapter.java │ │ ├── hvm │ │ │ ├── HVMBeanAbi.java │ │ │ └── HVMType.java │ │ ├── protos │ │ │ └── ProposalOuterClass.java │ │ ├── solidity │ │ │ ├── Abi.java │ │ │ ├── ContractType.java │ │ │ └── SolidityType.java │ │ └── utils │ │ │ ├── Async.java │ │ │ ├── Base64.java │ │ │ ├── Buffer.java │ │ │ ├── ByteUtil.java │ │ │ ├── CertUtil.java │ │ │ ├── Decoder.java │ │ │ ├── Encoder.java │ │ │ ├── FVMAbi.java │ │ │ ├── FileExtra.java │ │ │ ├── FileUtil.java │ │ │ ├── FuncParams.java │ │ │ ├── HVMPayload.java │ │ │ ├── HttpsUtils.java │ │ │ ├── InvokeDirectlyParams.java │ │ │ ├── InvokeHVMAbiParams.java │ │ │ ├── MPCCurveType.java │ │ │ ├── MethodNameUtil.java │ │ │ ├── MethodType.java │ │ │ ├── ProofValidation.java │ │ │ └── Utils.java │ │ ├── crypto │ │ ├── CipherUtil.java │ │ ├── HashUtil.java │ │ ├── SignerUtil.java │ │ ├── cert │ │ │ ├── CertKeyPair.java │ │ │ ├── CertUtils.java │ │ │ └── SM2Priv.java │ │ ├── cryptohash │ │ │ ├── Digest.java │ │ │ ├── DigestEngine.java │ │ │ ├── Keccak256.java │ │ │ ├── Keccak512.java │ │ │ └── KeccakCore.java │ │ ├── ecdsa │ │ │ ├── BIUtil.java │ │ │ ├── ECKey.java │ │ │ ├── ECUtil.java │ │ │ └── R1Util.java │ │ ├── ed25519 │ │ │ └── ED25519Util.java │ │ ├── jce │ │ │ ├── ECAlgorithmParameters.java │ │ │ ├── ECKeyAgreement.java │ │ │ ├── ECKeyFactory.java │ │ │ ├── ECKeyPairGenerator.java │ │ │ ├── ECSignatureFactory.java │ │ │ └── SpongyCastleProvider.java │ │ └── sm │ │ │ ├── sm2 │ │ │ └── SM2Util.java │ │ │ ├── sm3 │ │ │ └── SM3Util.java │ │ │ └── sm4 │ │ │ └── SM4Util.java │ │ ├── did │ │ ├── DIDCredential.java │ │ ├── DIDDocument.java │ │ └── DIDPublicKey.java │ │ ├── exception │ │ ├── AccountException.java │ │ ├── AllNodesBadException.java │ │ ├── FileMgrException.java │ │ ├── IllegalSignatureException.java │ │ ├── IllegalStateException.java │ │ ├── RequestException.java │ │ └── RequestExceptionCode.java │ │ ├── fvm │ │ ├── scale │ │ │ ├── ByteData.java │ │ │ ├── CompactMode.java │ │ │ ├── FixedBytes.java │ │ │ ├── ScaleCodecReader.java │ │ │ ├── ScaleCodecWriter.java │ │ │ ├── ScaleExtract.java │ │ │ ├── ScaleReader.java │ │ │ ├── ScaleWriter.java │ │ │ ├── UnionValue.java │ │ │ ├── reader │ │ │ │ ├── BoolOptionalReader.java │ │ │ │ ├── BoolReader.java │ │ │ │ ├── CompactBigIntReader.java │ │ │ │ ├── CompactUIntReader.java │ │ │ │ ├── EnumReader.java │ │ │ │ ├── Int128Reader.java │ │ │ │ ├── Int16Reader.java │ │ │ │ ├── Int32Reader.java │ │ │ │ ├── Int64Reader.java │ │ │ │ ├── ListReader.java │ │ │ │ ├── StringReader.java │ │ │ │ ├── UByteReader.java │ │ │ │ ├── UInt128Reader.java │ │ │ │ ├── UInt16Reader.java │ │ │ │ ├── UInt32Reader.java │ │ │ │ ├── UInt64Reader.java │ │ │ │ ├── UnionReader.java │ │ │ │ └── UnsupportedReader.java │ │ │ └── writer │ │ │ │ ├── BoolOptionalWriter.java │ │ │ │ ├── BoolWriter.java │ │ │ │ ├── ByteWriter.java │ │ │ │ ├── CompactBigIntWriter.java │ │ │ │ ├── CompactUIntWriter.java │ │ │ │ ├── CompactULongWriter.java │ │ │ │ ├── Int128Writer.java │ │ │ │ ├── Int16Writer.java │ │ │ │ ├── Int32Writer.java │ │ │ │ ├── Int64Writer.java │ │ │ │ ├── ListWriter.java │ │ │ │ ├── StringWriter.java │ │ │ │ ├── UByteWriter.java │ │ │ │ ├── UInt128Writer.java │ │ │ │ ├── UInt16Writer.java │ │ │ │ ├── UInt32Writer.java │ │ │ │ ├── UInt64Writer.java │ │ │ │ ├── ULong32Writer.java │ │ │ │ └── UnionWriter.java │ │ └── types │ │ │ ├── BoolType.java │ │ │ ├── ByteType.java │ │ │ ├── CompoundType.java │ │ │ ├── FVMType.java │ │ │ ├── FixedLengthListType.java │ │ │ ├── Int128Type.java │ │ │ ├── Int16Type.java │ │ │ ├── Int32Type.java │ │ │ ├── Int64Type.java │ │ │ ├── PrimitiveType.java │ │ │ ├── StringType.java │ │ │ ├── StructType.java │ │ │ ├── UByteType.java │ │ │ ├── UInt128Type.java │ │ │ ├── UInt16Type.java │ │ │ ├── UInt32Type.java │ │ │ ├── UInt64Type.java │ │ │ └── UnfixedLengthListType.java │ │ ├── grpc │ │ ├── GrpcApiContractGrpc.java │ │ ├── GrpcApiDidGrpc.java │ │ ├── GrpcApiMQGrpc.java │ │ ├── GrpcApiTransactionGrpc.java │ │ ├── GrpcUtil.java │ │ └── Transaction.java │ │ ├── kvsqlutil │ │ ├── Chunk.java │ │ ├── Column.java │ │ ├── IntegerDataType.java │ │ ├── InternalDate.java │ │ ├── InternalTime.java │ │ ├── InternalTimestamp.java │ │ ├── KVSQLField.java │ │ └── ValueDecoder.java │ │ ├── provider │ │ ├── DefaultHttpProvider.java │ │ ├── FileMgrHttpProvider.java │ │ ├── GrpcProvider.java │ │ ├── HttpProvider.java │ │ ├── Manager.java │ │ ├── PStatus.java │ │ ├── Provider.java │ │ ├── ProviderManager.java │ │ ├── ServerStreamManager.java │ │ ├── StreamManager.java │ │ └── TCertPool.java │ │ ├── request │ │ ├── ArchiveRequest.java │ │ ├── AuthRequest.java │ │ ├── BalanceRequest.java │ │ ├── BlockRequest.java │ │ ├── CompileRequest.java │ │ ├── ConfigRequest.java │ │ ├── ContractRequest.java │ │ ├── DIDRequest.java │ │ ├── FileInfoRequest.java │ │ ├── FileTransferRequest.java │ │ ├── MQRequest.java │ │ ├── NodeRequest.java │ │ ├── PollingRequest.java │ │ ├── ProofRequest.java │ │ ├── RadarRequest.java │ │ ├── ReceiptRequest.java │ │ ├── Request.java │ │ ├── SendBatchTxsRequest.java │ │ ├── SendDIDTxRequest.java │ │ ├── SendTxRequest.java │ │ ├── StringRequest.java │ │ ├── TCertRequest.java │ │ └── TxRequest.java │ │ ├── response │ │ ├── CompileResponse.java │ │ ├── EventLog.java │ │ ├── PageResult.java │ │ ├── PollingResponse.java │ │ ├── ReceiptListResponse.java │ │ ├── ReceiptResponse.java │ │ ├── Response.java │ │ ├── TCertResponse.java │ │ ├── TxHashResponse.java │ │ ├── TxHashesResponse.java │ │ ├── account │ │ │ ├── AccountsByRoleResponse.java │ │ │ ├── BalanceResponse.java │ │ │ ├── RolesResponse.java │ │ │ └── StatusResponse.java │ │ ├── archive │ │ │ ├── ArchiveBoolResponse.java │ │ │ ├── ArchiveFilterIdResponse.java │ │ │ ├── ArchiveLatestResponse.java │ │ │ ├── ArchiveResponse.java │ │ │ └── ArchiveStringResponse.java │ │ ├── auth │ │ │ ├── AddressesResponse.java │ │ │ ├── InspectorRulesResponse.java │ │ │ ├── Response.java │ │ │ └── RolesResponse.java │ │ ├── block │ │ │ ├── BlockAvgTimeResponse.java │ │ │ ├── BlockCountResponse.java │ │ │ ├── BlockLimitResponse.java │ │ │ ├── BlockNumberResponse.java │ │ │ └── BlockResponse.java │ │ ├── config │ │ │ ├── AddressResponse.java │ │ │ ├── AllCNSResponse.java │ │ │ ├── AllRolesResponse.java │ │ │ ├── ConfigResponse.java │ │ │ ├── HostsResponse.java │ │ │ ├── NameResponse.java │ │ │ ├── ProposalResponse.java │ │ │ ├── RoleExistResponse.java │ │ │ └── VSetResponse.java │ │ ├── contract │ │ │ ├── CompileContractResponse.java │ │ │ ├── DeployerListResponse.java │ │ │ └── StringResponse.java │ │ ├── did │ │ │ ├── DIDCredentialResponse.java │ │ │ ├── DIDDocumentResponose.java │ │ │ └── DIDResponse.java │ │ ├── filemgr │ │ │ ├── FileDownloadResponse.java │ │ │ ├── FileExtraFromFileHashResponse.java │ │ │ ├── FileExtraFromTxHashResponse.java │ │ │ ├── FilePushResponse.java │ │ │ ├── FileUpdateResponse.java │ │ │ └── FileUploadResponse.java │ │ ├── mq │ │ │ ├── MQGrpcConsumeResponse.java │ │ │ ├── MQMessage.java │ │ │ └── MQResponse.java │ │ ├── node │ │ │ ├── NodeHashResponse.java │ │ │ ├── NodeResponse.java │ │ │ └── NodeStateResponse.java │ │ ├── proof │ │ │ ├── AccountProof.java │ │ │ ├── AccountProofResponse.java │ │ │ ├── ProofNode.java │ │ │ ├── StateProof.java │ │ │ ├── StateProofResponse.java │ │ │ ├── TxProof.java │ │ │ ├── TxProofResponse.java │ │ │ ├── ValidateStateResponse.java │ │ │ └── ValidateTxResponse.java │ │ ├── radar │ │ │ └── RadarResponse.java │ │ └── tx │ │ │ ├── TxAvgTimeResponse.java │ │ │ ├── TxCountResponse.java │ │ │ ├── TxCountWithTSResponse.java │ │ │ ├── TxLimitResponse.java │ │ │ ├── TxResponse.java │ │ │ └── TxVersionResponse.java │ │ ├── service │ │ ├── AccountService.java │ │ ├── ArchiveService.java │ │ ├── AuthService.java │ │ ├── BlockService.java │ │ ├── CompileService.java │ │ ├── ConfigService.java │ │ ├── ContractService.java │ │ ├── DIDService.java │ │ ├── FileMgrService.java │ │ ├── MQGrpcService.java │ │ ├── MQService.java │ │ ├── NodeService.java │ │ ├── ProofService.java │ │ ├── RadarService.java │ │ ├── ServiceManager.java │ │ ├── SqlService.java │ │ ├── TxService.java │ │ ├── impl │ │ │ ├── AccountServiceImpl.java │ │ │ ├── ArchiveServiceImpl.java │ │ │ ├── AuthServiceImpl.java │ │ │ ├── BlockServiceImpl.java │ │ │ ├── CompileServiceImpl.java │ │ │ ├── ConfigServiceImpl.java │ │ │ ├── ContractServiceImpl.java │ │ │ ├── DIDServiceImpl.java │ │ │ ├── FileMgrServiceImpl.java │ │ │ ├── MQGrpcServiceImpl.java │ │ │ ├── MQServiceImpl.java │ │ │ ├── NodeServiceImpl.java │ │ │ ├── ProofServiceImpl.java │ │ │ ├── RadarServiceImpl.java │ │ │ ├── SqlServiceImpl.java │ │ │ └── TxServiceImpl.java │ │ └── params │ │ │ ├── FileUploadParams.java │ │ │ ├── FilterParam.java │ │ │ ├── InspectorRuleParam.java │ │ │ ├── KeyParam.java │ │ │ ├── LedgerMetaParam.java │ │ │ ├── MQParam.java │ │ │ ├── MetaDataParam.java │ │ │ └── ProofParam.java │ │ └── transaction │ │ ├── Transaction.java │ │ ├── TxVersion.java │ │ ├── VMType.java │ │ └── proto │ │ ├── TransactionValueProto.java │ │ └── TransactionValueProto0.java └── proto │ └── transaction.proto └── test ├── java └── cn │ ├── hyperchain │ ├── logic │ │ ├── Contract.java │ │ ├── IContractList.java │ │ ├── IContractMapExtra.java │ │ ├── IContractMapPTS.java │ │ ├── IContractMapSTP.java │ │ └── entity │ │ │ └── Person.java │ ├── sdk │ │ ├── BVMTest.java │ │ ├── CertTest.java │ │ ├── EVMTest.java │ │ ├── EVMTypeTest.java │ │ ├── FVMTest.java │ │ ├── GrpcTest.java │ │ ├── HVMTest.java │ │ ├── MPCTest.java │ │ ├── SetHashTest.java │ │ ├── account │ │ │ ├── AccountTest.java │ │ │ └── AccountTest1.java │ │ ├── common │ │ │ ├── solidity │ │ │ │ └── AbiTest.java │ │ │ └── utils │ │ │ │ ├── ByteUtilTest.java │ │ │ │ ├── CertTest.java │ │ │ │ ├── DecoderTest.java │ │ │ │ ├── EncoderTest.java │ │ │ │ ├── FVMAbiTest.java │ │ │ │ └── UtilsTest.java │ │ ├── crypto │ │ │ ├── CipherUtilTest.java │ │ │ ├── HashUtilTest.java │ │ │ ├── cert │ │ │ │ └── CertUtilsTest.java │ │ │ ├── ecdsa │ │ │ │ └── BIUtilTest.java │ │ │ └── sm │ │ │ │ ├── SM3Test.java │ │ │ │ └── SM4Test.java │ │ ├── hvm │ │ │ └── ContractInvoke.java │ │ ├── kvsqlutil │ │ │ └── KVSQLTest.java │ │ ├── provider │ │ │ ├── DefaultHttpProviderTest.java │ │ │ └── ProviderManagerTest.java │ │ ├── service │ │ │ ├── AccountServiceTest.java │ │ │ ├── ArchiveServiceTest.java │ │ │ ├── AuthServiceTest.java │ │ │ ├── BlockServiceTest.java │ │ │ ├── Common.java │ │ │ ├── CompileServiceTest.java │ │ │ ├── ConfigServiceTest.java │ │ │ ├── ContractServiceTest.java │ │ │ ├── DIDServiceTest.java │ │ │ ├── FileMgrServiceTest.java │ │ │ ├── MQGrpcServiceTest.java │ │ │ ├── MQServiceTest.java │ │ │ ├── NodeServiceTest.java │ │ │ ├── ProofServiceTest.java │ │ │ ├── RadarServiceTest.java │ │ │ ├── SendTxServiceTest.java │ │ │ ├── SqlServiceTest.java │ │ │ └── TxServiceTest.java │ │ ├── transaction │ │ │ ├── TransactionTest.java │ │ │ └── TxVersionTest.java │ │ └── utils │ │ │ ├── UtilsTest.java │ │ │ └── bean │ │ │ ├── Animal.java │ │ │ └── Cat.java │ └── utils │ │ └── Common.java │ └── test │ ├── hvm │ └── ContractInvoke.java │ ├── logic │ ├── Contract.java │ ├── IContractList.java │ ├── IContractMapExtra.java │ ├── IContractMapPTS.java │ ├── IContractMapSTP.java │ └── entity │ │ └── Person.java │ └── utils │ └── Common.java └── resources ├── cert.cer ├── certs ├── guomi │ ├── sdkcert.cert │ ├── sdkcert.priv │ ├── sdkcert_guomi.cert │ ├── sdkcert_guomi.priv │ ├── sdkcert_ra.cert │ ├── sdkcert_ra.priv │ ├── unique_guomi.priv │ └── unique_guomi.pub ├── sdk1.cert ├── sdk1.priv ├── sdkcert.cert ├── sdkcert.priv ├── tls │ ├── tls_peer.cert │ ├── tls_peer.priv │ └── tlsca.ca ├── unique.priv └── unique.pub ├── fvm-abi ├── test-abi-1.json └── test-abi-2.json ├── fvm-contract ├── make_student │ ├── contract.json │ ├── lib.rs │ └── make_student.wasm ├── set_hash │ ├── SetHash-gc.wasm │ ├── SetHash.wasm │ ├── contract.json │ └── lib.rs ├── set_hash_advance │ ├── SetHash-Advanced.wasm │ └── lib.rs ├── types │ ├── contract.json │ ├── lib.rs │ └── types_gc.wasm ├── u64_test │ ├── contract.json │ └── simple_contract_gc.wasm └── upgrade │ ├── after-bad.rs │ ├── after-bad.wasm │ ├── after-okay.rs │ ├── after-okay.wasm │ ├── before.rs │ ├── before.wasm │ ├── contract-2.json │ └── contract.json ├── hvm-abi └── hvm-auction.abi ├── hvm-jar ├── contract-auction.jar ├── contractcollection-2.0-SNAPSHOT.jar └── credential-1.0-credential.jar ├── log4j2.properties └── solidity ├── DSolc.sol ├── DSolc_sol_DSolc.abi ├── DSolc_sol_DSolc.bin ├── sol1 ├── ByteArrayTest.abi ├── ByteArrayTest.bin └── ByteArrayTest.sol ├── sol2 ├── TestContract.sol ├── TestContract_sol_TypeTestContract.abi └── TestContract_sol_TypeTestContract.bin ├── sol3 ├── bytes32Test.abi ├── bytes32Test.bin └── bytes32Test.sol └── sol4 ├── setHash.abi ├── setHash.bin └── setHash.sol /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | target 3 | 4 | .idea 5 | .gradle 6 | *.iml 7 | 8 | #vscode 9 | .classpath 10 | .project 11 | .settings 12 | .vscode 13 | .factorypath 14 | lite-docs -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | jdk: 4 | - oraclejdk8 5 | 6 | dist: trusty 7 | 8 | install: 9 | - docker pull hyperchaincn/hvmd 10 | - docker run -d --rm --name=hvmd -p 8091:9999 hyperchaincn/hvmd 11 | - docker run -d --name myrabbitmq -p 5672:5672 -p 15672:15672 docker.io/rabbitmq:latest 12 | - npm install -g solc@0.4.25 13 | 14 | - wget https://github.com/hyperchain/hyperchain/releases/download/v1.0.0/hyperchain-solo-1.0.0-8b68028-20190516-Ubuntu-16.04.tar.gz 15 | - tar zxvf hyperchain-solo-1.0.0-8b68028-20190516-Ubuntu-16.04.tar.gz 16 | - cd hyperchain-solo-8b68028 && nohup ./hyperchain & 17 | 18 | before_script: 19 | # - mvn --version 20 | - mvn clean 21 | 22 | script: 23 | - mvn validate 24 | # - mvn install 25 | - mvn test 26 | 27 | after_success: 28 | - mvn jacoco:report coveralls:report -------------------------------------------------------------------------------- /checkstyle-suppressions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 24 | 26 | 28 | 30 | -------------------------------------------------------------------------------- /docs/hyperchain_litesdk_document.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/docs/hyperchain_litesdk_document.docx -------------------------------------------------------------------------------- /docs/img/image-20200817143508082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/docs/img/image-20200817143508082.png -------------------------------------------------------------------------------- /docs/img/proof-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/docs/img/proof-1.png -------------------------------------------------------------------------------- /scripts/deploy.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # make sure settings.xml has oss config and gpg key is ready local 4 | mvn deploy -Dmaven.test.skip=true -P release -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/account/Version.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.account; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | public enum Version { 6 | @SerializedName("1.0") 7 | V1("1.0"), 8 | @SerializedName("2.0") 9 | V2("2.0"), 10 | @SerializedName("3.0") 11 | V3("3.0"), 12 | @SerializedName("4.0") 13 | V4("4.0"); 14 | 15 | private String v; 16 | Version(String v) { 17 | this.v = v; 18 | } 19 | 20 | public String getV() { 21 | return v; 22 | } 23 | 24 | /** 25 | * get {@link Version} by version value. 26 | * @param v string value 27 | * @return {@link Version} 28 | */ 29 | public static Version getVersion(String v) { 30 | switch (v) { 31 | case "1.0": return V1; 32 | case "2.0": return V2; 33 | case "3.0": return V3; 34 | case "4.0": return V4; 35 | default: return null; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/OperationResult.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | public class OperationResult { 6 | @Expose 7 | protected int code; 8 | 9 | @Expose 10 | protected String msg; 11 | 12 | public int getCode() { 13 | return code; 14 | } 15 | 16 | public String getMsg() { 17 | return msg; 18 | } 19 | 20 | public void setCode(int code) { 21 | this.code = code; 22 | } 23 | 24 | public void setMsg(String msg) { 25 | this.msg = msg; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "OperationResult{" + 31 | "code=" + code + 32 | ", msg='" + msg + '\'' + 33 | '}'; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/OperationResultCode.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm; 2 | 3 | public enum OperationResultCode { 4 | SuccessCode(200), 5 | 6 | MethodNotExistCode(-30001), 7 | 8 | ParamsLenMisMatchCode(-30002), 9 | 10 | InvalidParamsCode(-30003), 11 | 12 | CallErrorCode(-30004); 13 | 14 | public int getCode() { 15 | return code; 16 | } 17 | 18 | private int code; 19 | 20 | OperationResultCode(int code) { 21 | this.code = code; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/Result.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm; 2 | 3 | import cn.hyperchain.sdk.common.utils.Base64; 4 | import com.google.common.base.Strings; 5 | import com.google.gson.annotations.Expose; 6 | import com.google.gson.annotations.SerializedName; 7 | 8 | public class Result { 9 | 10 | @Expose 11 | @SerializedName("Success") 12 | protected boolean success; 13 | 14 | @Expose 15 | @SerializedName("Err") 16 | protected String err; 17 | 18 | @Expose 19 | @SerializedName("Ret") 20 | protected String ret; 21 | 22 | public boolean isSuccess() { 23 | return success; 24 | } 25 | 26 | public String getErr() { 27 | return err; 28 | } 29 | 30 | /** 31 | * return bvm result ret. 32 | * 33 | * @return decode ret 34 | */ 35 | public String getRet() { 36 | if (!Strings.isNullOrEmpty(ret)) { 37 | return new String(Base64.getDecoder().decode(ret)); 38 | } 39 | return ret; 40 | } 41 | 42 | public void setRet(String ret) { 43 | this.ret = ret; 44 | } 45 | 46 | @Override 47 | public String toString() { 48 | return "Result{" + 49 | "success=" + success + 50 | ", err='" + err + '\'' + 51 | ", ret='" + ret + '\'' + 52 | '}'; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/AccountOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public class AccountOperation extends BuiltinOperation { 4 | 5 | private AccountOperation() { 6 | 7 | } 8 | 9 | public static class AccountBuilder extends BuiltinOperationBuilder { 10 | 11 | public AccountBuilder() { 12 | super(new AccountOperation()); 13 | opt.setAddress("0x0000000000000000000000000000000000ffff04"); 14 | } 15 | 16 | /** 17 | * create AccountBuilder to register. 18 | * @param address register address 19 | * @param cert register cert 20 | * @return {@link AccountBuilder} 21 | */ 22 | public AccountBuilder register(String address, String cert) { 23 | opt.setMethod(ContractMethod.AccountRegister); 24 | opt.setArgs(address, cert); 25 | return this; 26 | } 27 | 28 | /** 29 | * create AccountBuilder to abandon. 30 | * @param address abandon address 31 | * @param sdkCert the used sdkCert to logout 32 | * @return {@link AccountBuilder} 33 | */ 34 | public AccountBuilder abandon(String address, String sdkCert) { 35 | opt.setMethod(ContractMethod.AccountAbandon); 36 | opt.setArgs(address, sdkCert); 37 | return this; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/BuiltinOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public abstract class BuiltinOperation extends Operation { 4 | 5 | private String address; 6 | 7 | private boolean[] base64Index; 8 | 9 | public String getAddress() { 10 | return address; 11 | } 12 | 13 | public void setAddress(String address) { 14 | this.address = address; 15 | } 16 | 17 | public boolean[] getBase64Index() { 18 | return base64Index; 19 | } 20 | 21 | /** 22 | * set base64 decode index. 23 | * @param index the base64 decode param index 24 | */ 25 | public void setBase64Index(int... index) { 26 | if (index.length > 0) { 27 | base64Index = new boolean[this.getArgs().length]; 28 | for (int i : index) { 29 | base64Index[i] = true; 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/BuiltinOperationBuilder.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public abstract class BuiltinOperationBuilder { 4 | protected BuiltinOperation opt; 5 | 6 | protected BuiltinOperationBuilder(BuiltinOperation opt) { 7 | this.opt = opt; 8 | } 9 | 10 | /** 11 | * return build BuiltinOperation. 12 | * 13 | * @return {@link BuiltinOperation} 14 | */ 15 | public BuiltinOperation build() { 16 | return opt; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/CAMode.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public enum CAMode { 4 | Center(1), 5 | Distributed(2), 6 | None(3); 7 | 8 | 9 | private int mode; 10 | 11 | CAMode(int mode) { 12 | this.mode = mode; 13 | } 14 | 15 | public int getMode() { 16 | return mode; 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | return this.name(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/CAModeOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public class CAModeOperation extends ProposalContentOperation { 4 | private CAModeOperation() { 5 | } 6 | 7 | public static class CAModeBuilder { 8 | private CAModeOperation opt; 9 | 10 | public CAModeBuilder() { 11 | opt = new CAModeOperation(); 12 | opt.setPty(ProposalType.CA); 13 | } 14 | 15 | /** 16 | * create CAModeOperation to set ca mode. 17 | * when has not set ca mode, can set ca mode. 18 | * 19 | * @param mode {@link CAMode} 20 | * @return {@link CAModeBuilder} 21 | */ 22 | public CAModeBuilder setCAMode(CAMode mode) { 23 | opt.setMethod(ContractMethod.CASetCAMode); 24 | opt.setArgs(String.valueOf(mode.getMode())); 25 | return this; 26 | } 27 | 28 | /** 29 | * create CAModeOperation to get ca mode. 30 | * 31 | * @return {@link CAModeBuilder} 32 | */ 33 | public CAModeBuilder getCAMode() { 34 | opt.setMethod(ContractMethod.CAGetCAMode); 35 | return this; 36 | } 37 | 38 | /** 39 | * return build CAModeOperation. 40 | * 41 | * @return {@link CAModeOperation} 42 | */ 43 | public CAModeOperation builder() { 44 | return opt; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/CNSOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | import static cn.hyperchain.sdk.bvm.operate.ContractMethod.CNSSetCName; 4 | import static cn.hyperchain.sdk.bvm.operate.ProposalType.CNS; 5 | 6 | public class CNSOperation extends ProposalContentOperation { 7 | 8 | private CNSOperation() { 9 | 10 | } 11 | 12 | public static class CNSBuilder { 13 | private CNSOperation opt; 14 | 15 | public CNSBuilder() { 16 | opt = new CNSOperation(); 17 | opt.setPty(CNS); 18 | } 19 | 20 | /** 21 | * create CNSOperation to set contract name for contract address. 22 | * 23 | * @param address contract address 24 | * @param name contract name 25 | * @return {@link CNSBuilder} 26 | */ 27 | public CNSBuilder setCName(String address, String name) { 28 | opt.setMethod(CNSSetCName); 29 | opt.setArgs(address, name); 30 | return this; 31 | } 32 | 33 | /** 34 | * return build CNSOperation. 35 | * 36 | * @return {@link CNSOperation} 37 | */ 38 | public CNSOperation build() { 39 | return opt; 40 | } 41 | 42 | 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/DIDOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | 4 | import cn.hyperchain.sdk.account.Account; 5 | 6 | public class DIDOperation extends BuiltinOperation { 7 | public DIDOperation() { 8 | 9 | } 10 | 11 | public static class DIDOperationBuilder extends BuiltinOperationBuilder { 12 | 13 | public DIDOperationBuilder() { 14 | super(new DIDOperation()); 15 | opt.setAddress("0x0000000000000000000000000000000000ffff06"); 16 | } 17 | 18 | /** 19 | * setChainID set chain's chainID. 20 | * @param chainID chainID 21 | * @return {@link DIDOperationBuilder} 22 | */ 23 | public DIDOperationBuilder setChainID(String chainID) { 24 | opt.setMethod(ContractMethod.DIDSetChainID); 25 | opt.setArgs(chainID); 26 | return this; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/Operation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | import com.google.gson.annotations.Expose; 4 | import com.google.gson.annotations.SerializedName; 5 | 6 | public abstract class Operation { 7 | 8 | @Expose(serialize = false) 9 | @SerializedName("Params") 10 | private String[] args; 11 | 12 | @Expose(serialize = false) 13 | @SerializedName("MethodName") 14 | private ContractMethod method; 15 | 16 | public void setArgs(String... args) { 17 | this.args = args; 18 | } 19 | 20 | public void setMethod(ContractMethod method) { 21 | this.method = method; 22 | } 23 | 24 | public String[] getArgs() { 25 | return args; 26 | } 27 | 28 | public ContractMethod getMethod() { 29 | return method; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/ProposalContentOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public abstract class ProposalContentOperation extends Operation { 4 | 5 | private ProposalType pty; 6 | 7 | 8 | public ProposalType getPty() { 9 | return pty; 10 | } 11 | 12 | public void setPty(ProposalType pty) { 13 | this.pty = pty; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/ProposalType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public enum ProposalType { 4 | Config("CONFIG"), 5 | Permission("PERMISSION"), 6 | Node("NODE"), 7 | Contract("CONTRACT"), 8 | CNS("CNS"), 9 | CA("CA"); 10 | private String typ; 11 | 12 | ProposalType(String typ) { 13 | this.typ = typ; 14 | } 15 | 16 | public String getTyp() { 17 | return typ; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/RootCAOperation.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate; 2 | 3 | public class RootCAOperation extends BuiltinOperation { 4 | 5 | private RootCAOperation() { 6 | } 7 | 8 | public static class RootCABuilder extends BuiltinOperationBuilder { 9 | 10 | public RootCABuilder() { 11 | super(new RootCAOperation()); 12 | opt.setAddress("0x0000000000000000000000000000000000ffff0b"); 13 | } 14 | 15 | /** 16 | * create RootCAOperation to add root ca. 17 | * when ca mode is center, admin can add root ca. 18 | * 19 | * @param rootCA the root ca which will be add. 20 | * @return {@link RootCABuilder} 21 | */ 22 | public RootCABuilder addRootCA(String rootCA) { 23 | opt.setMethod(ContractMethod.RootCAAdd); 24 | opt.setArgs(rootCA); 25 | return this; 26 | } 27 | 28 | /** 29 | * create RootCAOperation to get root cas. 30 | * when ca mode is center, everyone can get root cas. 31 | * 32 | * @return {@link RootCABuilder} 33 | */ 34 | public RootCABuilder getRootCAs() { 35 | opt.setMethod(ContractMethod.RootCAGet); 36 | return this; 37 | } 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/params/GenesisInfo.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate.params; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | public class GenesisInfo { 9 | @Expose 10 | private Map genesisAccount; 11 | 12 | @Expose 13 | private List genesisNodes; 14 | 15 | public GenesisInfo(Map genesisAccount, List genesisNodes) { 16 | this.genesisAccount = genesisAccount; 17 | this.genesisNodes = genesisNodes; 18 | } 19 | 20 | public Map getGenesisAccount() { 21 | return genesisAccount; 22 | } 23 | 24 | public void setGenesisAccount(Map genesisAccount) { 25 | this.genesisAccount = genesisAccount; 26 | } 27 | 28 | public List getGenesisNodes() { 29 | return genesisNodes; 30 | } 31 | 32 | public void setGenesisNodes(List genesisNodes) { 33 | this.genesisNodes = genesisNodes; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/bvm/operate/params/GenesisNode.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.bvm.operate.params; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | public class GenesisNode { 6 | @Expose 7 | private String genesisNode; 8 | 9 | @Expose 10 | private String certContent; 11 | 12 | public GenesisNode(String genesisNode, String certContent) { 13 | this.genesisNode = genesisNode; 14 | this.certContent = certContent; 15 | } 16 | 17 | public String getGenesisNode() { 18 | return genesisNode; 19 | } 20 | 21 | public void setGenesisNode(String genesisNode) { 22 | this.genesisNode = genesisNode; 23 | } 24 | 25 | public String getCertContent() { 26 | return certContent; 27 | } 28 | 29 | public void setCertContent(String certContent) { 30 | this.certContent = certContent; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/adapter/StringNullAdapter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.adapter; 2 | 3 | import com.google.gson.TypeAdapter; 4 | import com.google.gson.stream.JsonReader; 5 | import com.google.gson.stream.JsonToken; 6 | import com.google.gson.stream.JsonWriter; 7 | 8 | import java.io.IOException; 9 | 10 | public class StringNullAdapter extends TypeAdapter { 11 | @Override 12 | public String read(JsonReader reader) throws IOException { 13 | if (reader.peek() == JsonToken.NULL) { 14 | reader.nextNull(); 15 | return ""; 16 | } 17 | return reader.nextString(); 18 | } 19 | 20 | @Override 21 | public void write(JsonWriter writer, String value) throws IOException { 22 | if (value == null) { 23 | writer.nullValue(); 24 | return; 25 | } 26 | writer.value(value); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/CertUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import cn.hyperchain.sdk.crypto.HashUtil; 4 | import org.bouncycastle.asn1.ASN1BitString; 5 | import org.bouncycastle.asn1.DERBitString; 6 | import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 7 | import org.bouncycastle.cert.X509CertificateHolder; 8 | import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; 9 | import org.bouncycastle.util.io.pem.PemObject; 10 | import org.bouncycastle.util.io.pem.PemReader; 11 | import java.io.StringReader; 12 | 13 | public class CertUtil { 14 | 15 | /** 16 | * read pem and convert to address. 17 | * @param s pem file context 18 | * @return address 19 | * @throws Exception - 20 | */ 21 | public static String pemToAddr(String s) throws Exception { 22 | PemReader pemReader = new PemReader(new StringReader(s)); 23 | PemObject pemObject = pemReader.readPemObject(); 24 | X509CertificateHolder cert = new X509CertificateHolder(pemObject.getContent()); 25 | SubjectPublicKeyInfo pkInfo = cert.getSubjectPublicKeyInfo(); 26 | ASN1BitString pk = pkInfo.getPublicKeyData(); 27 | byte[] pk64 = ByteUtils.subArray(pk.getBytes(),1); 28 | return ByteUtils.toHexString(HashUtil.sha3omit12(pk64)); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/FuncParams.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * this class represents param for evm method. 8 | * 9 | * @author Jianhui Dong 10 | * @ClassName FuncParams 11 | * @date 2019-07-08 12 | */ 13 | public class FuncParams { 14 | private List params; 15 | 16 | public FuncParams() { 17 | params = new ArrayList(); 18 | } 19 | 20 | public FuncParams(List params) { 21 | this.params = params; 22 | } 23 | 24 | public void addParams(Object arg) { 25 | params.add(arg); 26 | } 27 | 28 | public List getParams() { 29 | return params; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/HVMPayload.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import java.util.Set; 4 | 5 | public class HVMPayload { 6 | private String invokeBeanName; 7 | private String invokeArgs; 8 | private Set invokeMethods; 9 | 10 | /** 11 | * generate a HVMPayload. 12 | * 13 | * @param invokeBeanName invoke bean name 14 | * @param invokeArgs invoke args 15 | * @param invokeMethods invoke bean call methods 16 | */ 17 | public HVMPayload(String invokeBeanName, String invokeArgs, Set invokeMethods) { 18 | this.invokeBeanName = invokeBeanName; 19 | this.invokeArgs = invokeArgs; 20 | this.invokeMethods = invokeMethods; 21 | } 22 | 23 | public String getInvokeBeanName() { 24 | return invokeBeanName; 25 | } 26 | 27 | public String getInvokeArgs() { 28 | return invokeArgs; 29 | } 30 | 31 | public Set getInvokeMethods() { 32 | return invokeMethods; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/MPCCurveType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | public enum MPCCurveType { 4 | CurveSM9("sm9"), 5 | CurveBN254("bn254"); 6 | 7 | private final String ct; 8 | private MPCCurveType(String ct) { 9 | this.ct = ct; 10 | } 11 | 12 | public String getCurve() { 13 | return ct; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/MethodNameUtil.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import java.util.regex.Matcher; 4 | import java.util.regex.Pattern; 5 | 6 | public class MethodNameUtil { 7 | 8 | /** 9 | * get normalized method name. 10 | * for example: 11 | * if we have "testIntAndUint(int,uint,uint256,int[2])" for input, we will get "testIntAndUint(int256,uint256,uint256,int256[2])" for output 12 | * @param methodName method name 13 | * @return normalized methodName 14 | */ 15 | public static String getNormalizedMethodName(String methodName) { 16 | int firstBracketIndex = methodName.indexOf("("); 17 | String stringPrefix = methodName.substring(0,firstBracketIndex); 18 | Pattern p = Pattern.compile("int[^0-9]"); 19 | Matcher m = p.matcher(methodName.substring(firstBracketIndex)); 20 | StringBuffer sb = new StringBuffer(); 21 | while (m.find()) { 22 | m.appendReplacement(sb, "int256" + m.group().substring(3)); 23 | } 24 | m.appendTail(sb); 25 | return stringPrefix + sb.toString(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/common/utils/MethodType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | /** 4 | * this class is created for sending batch transactions. 5 | * 6 | * @author Lam 7 | * @ClassName MethodType 8 | * @date 2019-07-13 9 | */ 10 | public enum MethodType { 11 | SEND_TRANSACTION("tx_sendTransaction"), 12 | DEPLOY_CONTRACT("contract_deployContract"), 13 | INVOKE_CONTRACT("contract_invokeContract"), 14 | MAINTAIN_CONTRACT("contract_maintainContract"); 15 | 16 | String method; 17 | 18 | MethodType(String method) { 19 | this.method = method; 20 | } 21 | 22 | /** 23 | * get method type of corresponding method name. 24 | * 25 | * @param methodName method name 26 | * @return {@link MethodType} 27 | */ 28 | public static MethodType methodType(String methodName) { 29 | switch (methodName) { 30 | case "tx_sendTransaction": 31 | return SEND_TRANSACTION; 32 | case "contract_deployContract": 33 | return DEPLOY_CONTRACT; 34 | case "contract_invokeContract": 35 | return INVOKE_CONTRACT; 36 | case "contract_maintainContract": 37 | return MAINTAIN_CONTRACT; 38 | default: 39 | return null; 40 | } 41 | } 42 | 43 | public String getMethod() { 44 | return method; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/crypto/cert/SM2Priv.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.cert; 2 | 3 | import java.math.BigInteger; 4 | import java.security.PrivateKey; 5 | 6 | public class SM2Priv implements PrivateKey { 7 | private BigInteger privateKey; 8 | 9 | //SM2算法标识 10 | public static final String SM2OID = "1.2.156.10197.1.301"; 11 | 12 | public SM2Priv(BigInteger privateKey) { 13 | this.privateKey = privateKey; 14 | } 15 | 16 | public BigInteger getPrivateKey() { 17 | return privateKey; 18 | } 19 | 20 | @Override 21 | public String getAlgorithm() { 22 | return "SM2"; 23 | } 24 | 25 | @Override 26 | public String getFormat() { 27 | return null; 28 | } 29 | 30 | @Override 31 | public byte[] getEncoded() { 32 | return null; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/crypto/jce/ECKeyAgreement.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.jce; 2 | 3 | import javax.crypto.KeyAgreement; 4 | import java.security.NoSuchAlgorithmException; 5 | import java.security.NoSuchProviderException; 6 | import java.security.Provider; 7 | 8 | public final class ECKeyAgreement { 9 | 10 | public static final String ALGORITHM = "ECDH"; 11 | 12 | private static final String algorithmAssertionMsg = 13 | "Assumed the JRE supports EC key agreement"; 14 | 15 | private ECKeyAgreement() { 16 | } 17 | 18 | public static KeyAgreement getInstance() { 19 | try { 20 | return KeyAgreement.getInstance(ALGORITHM); 21 | } catch (NoSuchAlgorithmException ex) { 22 | throw new AssertionError(algorithmAssertionMsg); 23 | } 24 | } 25 | 26 | public static KeyAgreement getInstance(final String provider) throws NoSuchProviderException { 27 | try { 28 | return KeyAgreement.getInstance(ALGORITHM, provider); 29 | } catch (NoSuchAlgorithmException ex) { 30 | throw new AssertionError(algorithmAssertionMsg); 31 | } 32 | } 33 | 34 | public static KeyAgreement getInstance(final Provider provider) { 35 | try { 36 | return KeyAgreement.getInstance(ALGORITHM, provider); 37 | } catch (NoSuchAlgorithmException ex) { 38 | throw new AssertionError(algorithmAssertionMsg); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/crypto/jce/ECSignatureFactory.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.jce; 2 | 3 | import java.security.NoSuchAlgorithmException; 4 | import java.security.NoSuchProviderException; 5 | import java.security.Provider; 6 | import java.security.Signature; 7 | 8 | public final class ECSignatureFactory { 9 | 10 | public static final String RAW_ALGORITHM = "NONEwithECDSA"; 11 | 12 | private static final String rawAlgorithmAssertionMsg = 13 | "Assumed the JRE supports NONEwithECDSA signatures"; 14 | 15 | private ECSignatureFactory() { 16 | } 17 | 18 | public static Signature getRawInstance() { 19 | try { 20 | return Signature.getInstance(RAW_ALGORITHM); 21 | } catch (NoSuchAlgorithmException ex) { 22 | throw new AssertionError(rawAlgorithmAssertionMsg); 23 | } 24 | } 25 | 26 | public static Signature getRawInstance(final String provider) throws NoSuchProviderException { 27 | try { 28 | return Signature.getInstance(RAW_ALGORITHM, provider); 29 | } catch (NoSuchAlgorithmException ex) { 30 | throw new AssertionError(rawAlgorithmAssertionMsg); 31 | } 32 | } 33 | 34 | public static Signature getRawInstance(final Provider provider) { 35 | try { 36 | return Signature.getInstance(RAW_ALGORITHM, provider); 37 | } catch (NoSuchAlgorithmException ex) { 38 | throw new AssertionError(rawAlgorithmAssertionMsg); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/crypto/jce/SpongyCastleProvider.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.jce; 2 | 3 | import org.bouncycastle.jce.provider.BouncyCastleProvider; 4 | 5 | import java.security.Provider; 6 | 7 | public final class SpongyCastleProvider { 8 | 9 | private static class Holder { 10 | private static final Provider INSTANCE = new BouncyCastleProvider(); 11 | } 12 | 13 | public static Provider getInstance() { 14 | return Holder.INSTANCE; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/crypto/sm/sm3/SM3Util.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.sm.sm3; 2 | 3 | import org.bouncycastle.crypto.digests.SM3Digest; 4 | 5 | public class SM3Util { 6 | 7 | /** 8 | * sm3 hash. 9 | * @param sourceData source data 10 | * @return digest of sm3 11 | */ 12 | public static byte[] hash(byte[] sourceData) { 13 | SM3Digest sm3Digest = new SM3Digest(); 14 | sm3Digest.update(sourceData, 0, sourceData.length); 15 | byte[] md = new byte[sm3Digest.getDigestSize()]; 16 | sm3Digest.doFinal(md, 0); 17 | return md; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/exception/AccountException.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.exception; 2 | 3 | public class AccountException extends RuntimeException { 4 | 5 | public AccountException(String msg) { 6 | super(msg); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/exception/AllNodesBadException.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.exception; 2 | 3 | public class AllNodesBadException extends RuntimeException { 4 | public AllNodesBadException() {} 5 | 6 | public AllNodesBadException(String msg) { 7 | super(msg); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/exception/FileMgrException.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.exception; 2 | 3 | public class FileMgrException extends RuntimeException { 4 | public FileMgrException(String msg) { 5 | super(msg); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/exception/IllegalSignatureException.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.exception; 2 | 3 | public class IllegalSignatureException extends RuntimeException { 4 | public IllegalSignatureException() { 5 | super("illegal signature type"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/exception/IllegalStateException.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.exception; 2 | 3 | public class IllegalStateException extends RuntimeException { 4 | static final long serialVersionUID = -1848914673093119416L; 5 | 6 | public IllegalStateException() { 7 | } 8 | 9 | public IllegalStateException(String var1) { 10 | super(var1); 11 | } 12 | 13 | public IllegalStateException(String var1, Throwable var2) { 14 | super(var1, var2); 15 | } 16 | 17 | public IllegalStateException(Throwable var1) { 18 | super(var1); 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/ScaleReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale; 2 | 3 | /** 4 | * SCALE codec reader for a complex data type. 5 | * @param type 6 | */ 7 | public interface ScaleReader { 8 | 9 | /** 10 | * Reads value from specified reader. The reader must be positioned on the beginning of the value 11 | * 12 | * @param rdr reader with the encoded data 13 | * @return read value 14 | */ 15 | T read(ScaleCodecReader rdr); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/ScaleWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale; 2 | 3 | import java.io.IOException; 4 | 5 | public interface ScaleWriter { 6 | void write(ScaleCodecWriter wrt, T value) throws IOException; 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/BoolOptionalReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | import java.util.Optional; 7 | 8 | public class BoolOptionalReader implements ScaleReader> { 9 | @Override 10 | public Optional read(ScaleCodecReader rdr) { 11 | byte b = rdr.readByte(); 12 | if (b == 0) { 13 | return Optional.empty(); 14 | } 15 | if (b == 1) { 16 | return Optional.of(false); 17 | } 18 | if (b == 2) { 19 | return Optional.of(true); 20 | } 21 | throw new IllegalStateException("Not a boolean option: " + b); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/BoolReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | public class BoolReader implements ScaleReader { 7 | @Override 8 | public Boolean read(ScaleCodecReader rdr) { 9 | byte b = rdr.readByte(); 10 | if (b == 0) { 11 | return false; 12 | } 13 | if (b == 1) { 14 | return true; 15 | } 16 | throw new IllegalStateException("Not a boolean value: " + b); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/CompactBigIntReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.CompactMode; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 5 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 6 | 7 | import java.math.BigInteger; 8 | 9 | public class CompactBigIntReader implements ScaleReader { 10 | 11 | private static final CompactUIntReader intReader = new CompactUIntReader(); 12 | 13 | @Override 14 | public BigInteger read(ScaleCodecReader rdr) { 15 | int type = rdr.readUByte(); 16 | CompactMode mode = CompactMode.byValue((byte) (type & 0b11)); 17 | if (mode != CompactMode.BIGINT) { 18 | rdr.skip(-1); 19 | int value = intReader.read(rdr); 20 | return BigInteger.valueOf(value); 21 | } 22 | int len = (type >> 2) + 4; 23 | byte[] value = rdr.readByteArray(len); 24 | //LE encoded, so need to reverse it 25 | for (int i = 0; i < value.length / 2; i++) { 26 | byte temp = value[i]; 27 | value[i] = value[value.length - i - 1]; 28 | value[value.length - i - 1] = temp; 29 | } 30 | //unsigned, i.e. always positive, signum=1 31 | return new BigInteger(1, value); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/CompactUIntReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.CompactMode; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 5 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 6 | 7 | public class CompactUIntReader implements ScaleReader { 8 | 9 | /** 10 | * 11 | * @param rdr reader with the encoded data. 12 | * @return integer value 13 | * @throws UnsupportedOperationException if the value is encoded with more than four bytes (use {@link CompactBigIntReader}) 14 | */ 15 | @Override 16 | public Integer read(ScaleCodecReader rdr) { 17 | int i = rdr.readUByte(); 18 | CompactMode mode = CompactMode.byValue((byte)(i & 0b11)); 19 | if (mode == CompactMode.SINGLE) { 20 | return i >> 2; 21 | } 22 | if (mode == CompactMode.TWO) { 23 | return (i >> 2) 24 | + (rdr.readUByte() << 6); 25 | } 26 | if (mode == CompactMode.FOUR) { 27 | return (i >> 2) + 28 | (rdr.readUByte() << 6) + 29 | (rdr.readUByte() << (6 + 8)) + 30 | (rdr.readUByte() << (6 + 2 * 8)); 31 | } 32 | throw new UnsupportedOperationException("Mode " + mode + " is not implemented"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/Int128Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | import java.math.BigInteger; 7 | 8 | /** 9 | * @author: Hins Liu. 10 | * @description: int128 reader 11 | */ 12 | public class Int128Reader implements ScaleReader { 13 | @Override 14 | public BigInteger read(ScaleCodecReader rdr) { 15 | byte[] value = rdr.readByteArray(UInt128Reader.SIZE_BYTES); 16 | UInt128Reader.reverse(value); 17 | return new BigInteger(value); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/Int16Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | /** 7 | * @author: Hins Liu 8 | * @description: int16 reader. 9 | */ 10 | public class Int16Reader implements ScaleReader { 11 | 12 | @Override 13 | public Integer read(ScaleCodecReader rdr) { 14 | short ret = 0; 15 | for (int i = 0; i < 2; i++) { 16 | byte bt = rdr.readByte(); 17 | ret |= ((bt & 0xFF) << 8 * i); 18 | } 19 | return (int) ret; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/Int64Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | /** 7 | * @author: Hins Liu 8 | * @description: int64 reader. 9 | */ 10 | public class Int64Reader implements ScaleReader { 11 | 12 | @Override 13 | public Long read(ScaleCodecReader rdr) { 14 | long ret = 0; 15 | for (int i = 0; i < 8; i++) { 16 | byte bt = rdr.readByte(); 17 | ret |= ((long) (bt & 0xFF) << 8 * i); 18 | } 19 | return ret; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/ListReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public class ListReader implements ScaleReader> { 10 | 11 | private ScaleReader scaleReader; 12 | 13 | public ListReader(ScaleReader scaleReader) { 14 | this.scaleReader = scaleReader; 15 | } 16 | 17 | @Override 18 | public List read(ScaleCodecReader rdr) { 19 | int size = rdr.readCompactInt(); 20 | List result = new ArrayList<>(size); 21 | for (int i = 0; i < size; i++) { 22 | result.add(rdr.read(scaleReader)); 23 | } 24 | return result; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/StringReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | /** 7 | * Read string, encoded as UTF-8 bytes. 8 | */ 9 | public class StringReader implements ScaleReader { 10 | @Override 11 | public String read(ScaleCodecReader rdr) { 12 | return rdr.readString(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UByteReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | public class UByteReader implements ScaleReader { 7 | @Override 8 | public Integer read(ScaleCodecReader rdr) { 9 | byte x = rdr.readByte(); 10 | if (x < 0) { 11 | return 256 + (int)x; 12 | } 13 | return (int)x; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UInt128Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | import java.math.BigInteger; 7 | 8 | public class UInt128Reader implements ScaleReader { 9 | 10 | public static final int SIZE_BYTES = 16; 11 | 12 | /** 13 | * reverse. 14 | * 15 | * @param value byte[] 16 | */ 17 | public static void reverse(byte[] value) { 18 | for (int i = 0; i < value.length / 2; i++) { 19 | int other = value.length - i - 1; 20 | byte tmp = value[other]; 21 | value[other] = value[i]; 22 | value[i] = tmp; 23 | } 24 | } 25 | 26 | @Override 27 | public BigInteger read(ScaleCodecReader rdr) { 28 | byte[] value = rdr.readByteArray(SIZE_BYTES); 29 | reverse(value); 30 | return new BigInteger(1, value); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UInt16Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | public class UInt16Reader implements ScaleReader { 7 | 8 | @Override 9 | public Integer read(ScaleCodecReader rdr) { 10 | int result = 0; 11 | result += rdr.readUByte(); 12 | result += rdr.readUByte() << 8; 13 | return result; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UInt32Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | public class UInt32Reader implements ScaleReader { 7 | @Override 8 | public Long read(ScaleCodecReader rdr) { 9 | long result = 0; 10 | result += (long)rdr.readUByte(); 11 | result += ((long)rdr.readUByte()) << 8; 12 | result += ((long)rdr.readUByte()) << (2 * 8); 13 | result += ((long)rdr.readUByte()) << (3 * 8); 14 | return result; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UInt64Reader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | import java.math.BigInteger; 7 | 8 | public class UInt64Reader implements ScaleReader { 9 | 10 | @Override 11 | public BigInteger read(ScaleCodecReader rdr) { 12 | BigInteger result = BigInteger.ZERO; 13 | result = result.add(BigInteger.valueOf(rdr.readUByte())); 14 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(8)); 15 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(16)); 16 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(24)); 17 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(32)); 18 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(40)); 19 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(48)); 20 | result = result.add(BigInteger.valueOf(rdr.readUByte()).shiftLeft(56)); 21 | return result; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UnionReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | import cn.hyperchain.sdk.fvm.scale.UnionValue; 6 | 7 | import java.util.Arrays; 8 | import java.util.List; 9 | 10 | public class UnionReader implements ScaleReader> { 11 | 12 | private final List> mapping; 13 | 14 | public UnionReader(List> mapping) { 15 | this.mapping = mapping; 16 | } 17 | 18 | @SuppressWarnings("unchecked") 19 | public UnionReader(ScaleReader... mapping) { 20 | this(Arrays.asList(mapping)); 21 | } 22 | 23 | @Override 24 | @SuppressWarnings("unchecked") 25 | public UnionValue read(ScaleCodecReader rdr) { 26 | int index = rdr.readUByte(); 27 | if (mapping.size() <= index) { 28 | throw new IllegalStateException("Unknown type index: " + index); 29 | } 30 | T value = (T) mapping.get(index).read(rdr); 31 | return new UnionValue<>(index, value); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/reader/UnsupportedReader.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.reader; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleReader; 5 | 6 | public class UnsupportedReader implements ScaleReader { 7 | 8 | private final String message; 9 | 10 | public UnsupportedReader() { 11 | this("Reading an unsupported value"); 12 | } 13 | 14 | public UnsupportedReader(String message) { 15 | this.message = message; 16 | } 17 | 18 | @Override 19 | public T read(ScaleCodecReader rdr) { 20 | throw new IllegalStateException(message); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/BoolOptionalWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | import java.util.Optional; 8 | 9 | public class BoolOptionalWriter implements ScaleWriter> { 10 | 11 | @Override 12 | public void write(ScaleCodecWriter wrt, Optional value) throws IOException { 13 | if (!value.isPresent()) { 14 | wrt.directWrite(0); 15 | } else if (value.get()) { 16 | wrt.directWrite(2); 17 | } else { 18 | wrt.directWrite(1); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/BoolWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class BoolWriter implements ScaleWriter { 9 | @Override 10 | public void write(ScaleCodecWriter wrt, Boolean value) throws IOException { 11 | if (value) { 12 | wrt.directWrite(1); 13 | } else { 14 | wrt.directWrite(0); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/ByteWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | /** 9 | * @author: Hins Liu 10 | * @description: Write Integer type into stream. 11 | */ 12 | public class ByteWriter implements ScaleWriter { 13 | 14 | public static final int MAX_INT8 = 127; 15 | public static final int MIN_INT8 = -128; 16 | 17 | @Override 18 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 19 | if (value > MAX_INT8 || value < MIN_INT8) { 20 | throw new IllegalArgumentException("Only values in range + " + MIN_INT8 + ".." + MAX_INT8 + " are supported: " + value); 21 | } 22 | wrt.writeByte(value & 0xff); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/CompactBigIntWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.CompactMode; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | public class CompactBigIntWriter implements ScaleWriter { 11 | 12 | private static final CompactULongWriter LONG_WRITER = new CompactULongWriter(); 13 | 14 | @Override 15 | public void write(ScaleCodecWriter wrt, BigInteger value) throws IOException { 16 | CompactMode mode = CompactMode.forNumber(value); 17 | 18 | byte[] data = value.toByteArray(); 19 | int length = data.length; 20 | int pos = data.length - 1; 21 | int limit = 0; 22 | 23 | if (mode != CompactMode.BIGINT) { 24 | LONG_WRITER.write(wrt, value.longValue()); 25 | return; 26 | } 27 | 28 | // skip the first byte if it's 0 29 | if (data[0] == 0x00) { 30 | length--; 31 | limit++; 32 | } 33 | 34 | wrt.directWrite(((length - 4) << 2) + mode.getValue()); 35 | while (pos >= limit) { 36 | wrt.directWrite(data[pos]); 37 | pos--; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/CompactUIntWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.CompactMode; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 6 | 7 | import java.io.IOException; 8 | 9 | public class CompactUIntWriter implements ScaleWriter { 10 | 11 | @Override 12 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 13 | CompactMode mode = CompactMode.forNumber(value); 14 | int compact; 15 | int bytes; 16 | if (mode == CompactMode.BIGINT) { 17 | wrt.directWrite(mode.getValue()); 18 | compact = value; 19 | bytes = 4; 20 | } else { 21 | compact = (value << 2) + mode.getValue(); 22 | if (mode == CompactMode.SINGLE) { 23 | bytes = 1; 24 | } else if (mode == CompactMode.TWO) { 25 | bytes = 2; 26 | } else { 27 | bytes = 4; 28 | } 29 | } 30 | while (bytes > 0) { 31 | wrt.directWrite(compact & 0xff); 32 | compact >>= 8; 33 | bytes--; 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/CompactULongWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.CompactMode; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | public class CompactULongWriter implements ScaleWriter { 11 | 12 | private static final CompactBigIntWriter BIGINT_WRITER = new CompactBigIntWriter(); 13 | 14 | @Override 15 | public void write(ScaleCodecWriter wrt, Long value) throws IOException { 16 | CompactMode mode = CompactMode.forNumber(value); 17 | long compact; 18 | int bytes; 19 | if (mode == CompactMode.BIGINT) { 20 | BIGINT_WRITER.write(wrt, BigInteger.valueOf(value)); 21 | return; 22 | } else { 23 | compact = (value << 2) + mode.getValue(); 24 | if (mode == CompactMode.SINGLE) { 25 | bytes = 1; 26 | } else if (mode == CompactMode.TWO) { 27 | bytes = 2; 28 | } else { 29 | bytes = 4; 30 | } 31 | } 32 | while (bytes > 0) { 33 | wrt.directWrite((int)compact & 0xff); 34 | compact >>= 8; 35 | bytes--; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/Int128Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | import cn.hyperchain.sdk.fvm.scale.reader.UInt128Reader; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | /** 11 | * @author: Hins Liu 12 | * @description: 128 bit Integer writer. 13 | */ 14 | public class Int128Writer implements ScaleWriter { 15 | 16 | public static final int SIZE_BYTES = 16; 17 | 18 | @Override 19 | public void write(ScaleCodecWriter wrt, BigInteger value) throws IOException { 20 | byte[] bs = value.toByteArray(); 21 | int len = bs.length; 22 | 23 | if (len > SIZE_BYTES) { 24 | throw new IllegalArgumentException("Value is too big for 128 bits. Has: " + len * 8 + " bits"); 25 | } 26 | 27 | byte[] encoded = new byte[SIZE_BYTES]; 28 | System.arraycopy(bs, 0, encoded, encoded.length - len, len); 29 | UInt128Reader.reverse(encoded); 30 | 31 | for (int i = 0; i < SIZE_BYTES; i++) { 32 | wrt.writeByte(encoded[i] & 0xff); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/Int16Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | /** 9 | * @author: Hins Liu 10 | * @description: Write Integer type into stream. 11 | */ 12 | public class Int16Writer implements ScaleWriter { 13 | 14 | public static final int MAX_INT16 = 32767; 15 | public static final int MIN_INT16 = -32768; 16 | 17 | @Override 18 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 19 | if (value > MAX_INT16 || value < MIN_INT16) { 20 | throw new IllegalArgumentException("Only values in range + " + MIN_INT16 + ".." + MAX_INT16 + " are supported: " + value); 21 | } 22 | for (int i = 0; i < 2; i++) { 23 | wrt.writeByte((value >> (8 * i)) & 0xff); 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/Int32Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | /** 9 | * @author: Hins Liu 10 | * @description: Write Integer type into stream. 11 | */ 12 | public class Int32Writer implements ScaleWriter { 13 | 14 | @Override 15 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 16 | for (int i = 0; i < 4; i++) { 17 | wrt.writeByte((value >> (8 * i)) & 0xff); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/Int64Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | /** 9 | * @author: Hins Liu 10 | * @description: Write Long(64bit) type into stream. 11 | */ 12 | public class Int64Writer implements ScaleWriter { 13 | 14 | @Override 15 | public void write(ScaleCodecWriter wrt, Long value) throws IOException { 16 | for (int i = 0; i < 8; i++) { 17 | wrt.writeByte(Math.toIntExact((value >> (8 * i)) & 0xff)); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/ListWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | import java.util.List; 8 | 9 | public class ListWriter implements ScaleWriter> { 10 | 11 | private ScaleWriter scaleWriter; 12 | 13 | public ListWriter(ScaleWriter scaleWriter) { 14 | this.scaleWriter = scaleWriter; 15 | } 16 | 17 | @Override 18 | public void write(ScaleCodecWriter wrt, List value) throws IOException { 19 | wrt.writeCompact(value.size()); 20 | for (T item: value) { 21 | scaleWriter.write(wrt, item); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/StringWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class StringWriter implements ScaleWriter { 9 | 10 | @Override 11 | public void write(ScaleCodecWriter wrt, String value) throws IOException { 12 | byte[] bs = value.getBytes(); 13 | int len = bs.length; 14 | wrt.writeCompact(len); 15 | wrt.writeByteArray(bs); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UByteWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class UByteWriter implements ScaleWriter { 9 | 10 | public static final Integer MAX_UINT8 = 255; 11 | 12 | @Override 13 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 14 | if (value < 0 || value > MAX_UINT8) { 15 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT8 + " are supported: " + value); 16 | } 17 | wrt.directWrite(value); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UInt128Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | import cn.hyperchain.sdk.fvm.scale.reader.UInt128Reader; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | public class UInt128Writer implements ScaleWriter { 11 | 12 | @Override 13 | public void write(ScaleCodecWriter wrt, BigInteger value) throws IOException { 14 | if (value.signum() < 0) { 15 | throw new IllegalArgumentException("Negative numbers are not supported by Uint128"); 16 | } 17 | byte[] array = value.toByteArray(); 18 | int pos = 0; 19 | // sometimes BigInteger gives an extra zero byte in the start of the array 20 | if (array[0] == 0) { 21 | pos++; 22 | } 23 | int len = array.length - pos; 24 | if (len > UInt128Reader.SIZE_BYTES) { 25 | throw new IllegalArgumentException("Value is too big for 128 bits. Has: " + len * 8 + " bits"); 26 | } 27 | byte[] encoded = new byte[UInt128Reader.SIZE_BYTES]; 28 | System.arraycopy(array, pos, encoded, encoded.length - len, len); 29 | UInt128Reader.reverse(encoded); 30 | wrt.directWrite(encoded, 0, UInt128Reader.SIZE_BYTES); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UInt16Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class UInt16Writer implements ScaleWriter { 9 | 10 | public static final Integer MAX_UINT16 = 65535; 11 | 12 | @Override 13 | public void write(ScaleCodecWriter wrt, Integer value) throws IOException { 14 | if (value < 0 || value > MAX_UINT16) { 15 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT16 + " are supported: " + value); 16 | } 17 | wrt.directWrite(value & 0xff); 18 | wrt.directWrite((value >> 8) & 0xff); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UInt32Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class UInt32Writer implements ScaleWriter { 9 | 10 | public static final long MAX_UINT32 = Long.parseLong("4294967295"); 11 | 12 | @Override 13 | public void write(ScaleCodecWriter wrt, Long value) throws IOException { 14 | if (value < 0 || value > MAX_UINT32) { 15 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT32 + " are supported: " + value); 16 | } 17 | for (int i = 0; i < 4; i++) { 18 | wrt.directWrite(Math.toIntExact((value >> (i * 8)) & 0xff)); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UInt64Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | import java.math.BigInteger; 8 | 9 | public class UInt64Writer implements ScaleWriter { 10 | 11 | public static final BigInteger MAX_UINT64 = new BigInteger("18446744073709551615"); 12 | 13 | @Override 14 | public void write(ScaleCodecWriter wrt, BigInteger value) throws IOException { 15 | if (value.compareTo(BigInteger.ZERO) < 0 || value.compareTo(MAX_UINT64) > 0) { 16 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT64 + " are supported: " + value); 17 | } 18 | wrt.directWrite(value.and(BigInteger.valueOf(255)).intValue()); 19 | wrt.directWrite(value.shiftRight(8).and(BigInteger.valueOf(255)).intValue()); 20 | wrt.directWrite(value.shiftRight(16).and(BigInteger.valueOf(255)).intValue()); 21 | wrt.directWrite(value.shiftRight(24).and(BigInteger.valueOf(255)).intValue()); 22 | wrt.directWrite(value.shiftRight(32).and(BigInteger.valueOf(255)).intValue()); 23 | wrt.directWrite(value.shiftRight(40).and(BigInteger.valueOf(255)).intValue()); 24 | wrt.directWrite(value.shiftRight(48).and(BigInteger.valueOf(255)).intValue()); 25 | wrt.directWrite(value.shiftRight(56).and(BigInteger.valueOf(255)).intValue()); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/ULong32Writer.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | 6 | import java.io.IOException; 7 | 8 | public class ULong32Writer implements ScaleWriter { 9 | @Override 10 | public void write(ScaleCodecWriter wrt, Long value) throws IOException { 11 | if (value < 0) { 12 | throw new IllegalArgumentException("Negative values are not supported: " + value); 13 | } 14 | if (value > 0xff_ff_ff_ffL) { 15 | throw new IllegalArgumentException("Value is too high: " + value); 16 | } 17 | wrt.directWrite((int)(value & 0xff)); 18 | wrt.directWrite((int)((value >> 8) & 0xff)); 19 | wrt.directWrite((int)((value >> 16) & 0xff)); 20 | wrt.directWrite((int)((value >> 24) & 0xff)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/scale/writer/UnionWriter.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.scale.writer; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleWriter; 5 | import cn.hyperchain.sdk.fvm.scale.UnionValue; 6 | 7 | import java.io.IOException; 8 | import java.util.ArrayList; 9 | import java.util.Arrays; 10 | import java.util.List; 11 | 12 | public class UnionWriter implements ScaleWriter> { 13 | 14 | private final List> mapping; 15 | 16 | /** 17 | * 18 | * @param mapping list ScaleWriter. 19 | */ 20 | @SuppressWarnings("unchecked") 21 | public UnionWriter(List> mapping) { 22 | this.mapping = new ArrayList<>(mapping.size()); 23 | for (ScaleWriter t: mapping) { 24 | this.mapping.add((ScaleWriter) t); 25 | } 26 | } 27 | 28 | @SuppressWarnings("unchecked") 29 | public UnionWriter(ScaleWriter... mapping) { 30 | this(Arrays.asList(mapping)); 31 | } 32 | 33 | @Override 34 | public void write(ScaleCodecWriter wrt, UnionValue value) throws IOException { 35 | wrt.directWrite(value.getIndex()); 36 | T actual = value.getValue(); 37 | mapping.get(value.getIndex()).write(wrt, actual); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/BoolType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.BoolWriter; 6 | 7 | import java.io.IOException; 8 | 9 | /** 10 | * @author: Hins Liu. 11 | * @description: bool type. 12 | */ 13 | public class BoolType extends PrimitiveType implements FVMType { 14 | 15 | @Override 16 | public void encode(ScaleCodecWriter writer, Object arg) { 17 | try { 18 | if (!(arg instanceof Boolean)) { 19 | throw new RuntimeException("Boolean value expected."); 20 | } 21 | BoolWriter boolWriter = new BoolWriter(); 22 | boolWriter.write(writer, (Boolean) arg); 23 | } catch (IOException e) { 24 | throw new RuntimeException("others error: " + e.getMessage()); 25 | } 26 | } 27 | 28 | @Override 29 | public Object decode(ScaleCodecReader reader) { 30 | return reader.readBoolean(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/ByteType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.ByteWriter; 6 | 7 | import java.io.IOException; 8 | 9 | import static cn.hyperchain.sdk.fvm.scale.writer.ByteWriter.MAX_INT8; 10 | import static cn.hyperchain.sdk.fvm.scale.writer.ByteWriter.MIN_INT8; 11 | 12 | /** 13 | * @author: Hins Liu 14 | * @description: Integer 32bit type. 15 | */ 16 | public class ByteType extends PrimitiveType implements FVMType { 17 | 18 | @Override 19 | public void encode(ScaleCodecWriter writer, Object arg) { 20 | try { 21 | if (!(arg instanceof Number)) { 22 | throw new RuntimeException("Number value expected."); 23 | } 24 | ByteWriter int8Writer = new ByteWriter(); 25 | int8Writer.write(writer, Integer.parseInt(String.valueOf(arg))); 26 | } catch (NumberFormatException e) { 27 | throw new IllegalArgumentException("Only values in range + " + MIN_INT8 + ".." + MAX_INT8 + " are supported: " + arg); 28 | } catch (IOException e) { 29 | throw new RuntimeException("others error: " + e.getMessage()); 30 | } 31 | } 32 | 33 | @Override 34 | public Object decode(ScaleCodecReader reader) { 35 | return reader.readByte(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/CompoundType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | /** 4 | * @author: Hins Liu 5 | * @description: compound type in FVM. 6 | */ 7 | public abstract class CompoundType implements FVMType { 8 | 9 | public enum CompoundTypeEnum { 10 | 11 | FixedLengthList("array"), 12 | 13 | UnfixedLengthList("vec"), 14 | 15 | Struct("struct"), 16 | 17 | Tuple("tuple"), 18 | 19 | Map("map"), 20 | 21 | ; 22 | 23 | private final String codecType; 24 | 25 | public String getCodecType() { 26 | return codecType; 27 | } 28 | 29 | CompoundTypeEnum(String typeName) { 30 | this.codecType = typeName; 31 | } 32 | 33 | } 34 | 35 | /** 36 | * getCompoundType. 37 | * 38 | * @param typeName String. 39 | * @return CompoundTypeEnum 40 | */ 41 | public static CompoundTypeEnum getCompoundType(String typeName) { 42 | for (CompoundTypeEnum elem : CompoundTypeEnum.values()) { 43 | if (elem.getCodecType().equals(typeName)) { 44 | return elem; 45 | } 46 | } 47 | throw new RuntimeException("illegal compound type in ABI file: " + typeName); 48 | } 49 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/FVMType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | 6 | /** 7 | * @author: Hins Liu. 8 | * @description: Types in FVM should implement this interface. 9 | */ 10 | public interface FVMType { 11 | 12 | void encode(ScaleCodecWriter writer, Object arg); 13 | 14 | Object decode(ScaleCodecReader reader); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/Int128Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.reader.Int128Reader; 6 | import cn.hyperchain.sdk.fvm.scale.writer.Int128Writer; 7 | 8 | import java.io.IOException; 9 | import java.math.BigInteger; 10 | 11 | /** 12 | * @author: Hins Liu. 13 | * @description: 128bits integer type. 14 | */ 15 | public class Int128Type extends PrimitiveType implements FVMType { 16 | 17 | @Override 18 | public void encode(ScaleCodecWriter writer, Object arg) { 19 | try { 20 | if (!(arg instanceof Number)) { 21 | throw new RuntimeException("Number value expected."); 22 | } 23 | Int128Writer int128Writer = new Int128Writer(); 24 | int128Writer.write(writer, new BigInteger(String.valueOf(arg))); 25 | } catch (IOException e) { 26 | throw new RuntimeException("others error: " + e.getMessage()); 27 | } 28 | } 29 | 30 | @Override 31 | public Object decode(ScaleCodecReader reader) { 32 | return new Int128Reader().read(reader); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/Int32Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.reader.Int32Reader; 6 | import cn.hyperchain.sdk.fvm.scale.writer.Int32Writer; 7 | 8 | import java.io.IOException; 9 | 10 | /** 11 | * @author: Hins Liu 12 | * @description: Integer 32bit type. 13 | */ 14 | public class Int32Type extends PrimitiveType implements FVMType { 15 | @Override 16 | public void encode(ScaleCodecWriter writer, Object arg) { 17 | try { 18 | if (!(arg instanceof Number)) { 19 | throw new RuntimeException("Number value expected."); 20 | } 21 | Int32Writer int32Writer = new Int32Writer(); 22 | int32Writer.write(writer, Integer.parseInt(String.valueOf(arg))); 23 | } catch (NumberFormatException e) { 24 | throw new IllegalArgumentException("Only values in range + " + Integer.MIN_VALUE + ".." + Integer.MAX_VALUE + " are supported: " + arg); 25 | } catch (IOException e) { 26 | throw new RuntimeException("others error: " + e.getMessage()); 27 | } 28 | } 29 | 30 | @Override 31 | public Object decode(ScaleCodecReader reader) { 32 | return new Int32Reader().read(reader); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/Int64Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.reader.Int64Reader; 6 | import cn.hyperchain.sdk.fvm.scale.writer.Int64Writer; 7 | 8 | import java.io.IOException; 9 | 10 | /** 11 | * @author: Hins Liu. 12 | * @description: Integer 32bit type. 13 | */ 14 | public class Int64Type extends PrimitiveType implements FVMType { 15 | @Override 16 | public void encode(ScaleCodecWriter writer, Object arg) { 17 | try { 18 | if (!(arg instanceof Number)) { 19 | throw new RuntimeException("Number value expected."); 20 | } 21 | Int64Writer int64Writer = new Int64Writer(); 22 | int64Writer.write(writer, Long.parseLong(String.valueOf(arg))); 23 | } catch (NumberFormatException e) { 24 | throw new IllegalArgumentException("Only values in range + " + Long.MIN_VALUE + ".." + Long.MAX_VALUE + " are supported: " + arg); 25 | } catch (IOException e) { 26 | throw new RuntimeException("others error: " + e.getMessage()); 27 | } 28 | } 29 | 30 | @Override 31 | public Object decode(ScaleCodecReader reader) { 32 | return new Int64Reader().read(reader); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/StringType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.StringWriter; 6 | 7 | import java.io.IOException; 8 | 9 | /** 10 | * @author: Hins Liu 11 | * @description: encoding String type. 12 | */ 13 | public class StringType extends PrimitiveType implements FVMType { 14 | 15 | @Override 16 | public void encode(ScaleCodecWriter writer, Object arg) { 17 | try { 18 | if (!(arg instanceof String)) { 19 | throw new RuntimeException("String value expected for type 'string'"); 20 | } 21 | StringWriter stringWriter = new StringWriter(); 22 | stringWriter.write(writer, (String) arg); 23 | } catch (IOException e) { 24 | throw new RuntimeException("others error: " + e.getMessage()); 25 | } 26 | } 27 | 28 | @Override 29 | public Object decode(ScaleCodecReader reader) { 30 | return reader.readString(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/UByteType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.UByteWriter; 6 | 7 | import java.io.IOException; 8 | 9 | import static cn.hyperchain.sdk.fvm.scale.writer.UByteWriter.MAX_UINT8; 10 | 11 | /** 12 | * @author: Hins Liu 13 | * @description: Unsigned int 64 type. 14 | */ 15 | public class UByteType extends PrimitiveType implements FVMType { 16 | 17 | @Override 18 | public void encode(ScaleCodecWriter writer, Object arg) { 19 | try { 20 | if (!(arg instanceof Number)) { 21 | throw new RuntimeException("Number value expected."); 22 | } 23 | UByteWriter uByteWriter = new UByteWriter(); 24 | uByteWriter.write(writer, Integer.parseInt(String.valueOf(arg))); 25 | } catch (NumberFormatException e) { 26 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT8 + " are supported: " + arg); 27 | } catch (IOException e) { 28 | throw new RuntimeException("others error: " + e.getMessage()); 29 | } 30 | } 31 | 32 | @Override 33 | public Object decode(ScaleCodecReader reader) { 34 | return reader.readUByte(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/UInt128Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.UInt128Writer; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | /** 11 | * @author: Hins Liu 12 | * @description: Unsigned int 64 type. 13 | */ 14 | public class UInt128Type extends PrimitiveType implements FVMType { 15 | 16 | @Override 17 | public void encode(ScaleCodecWriter writer, Object arg) { 18 | try { 19 | if (!(arg instanceof Number)) { 20 | throw new RuntimeException("Number value expected."); 21 | } 22 | UInt128Writer uInt128Writer = new UInt128Writer(); 23 | uInt128Writer.write(writer, new BigInteger(String.valueOf(arg))); 24 | } catch (IOException e) { 25 | throw new RuntimeException("others error: " + e.getMessage()); 26 | } 27 | } 28 | 29 | @Override 30 | public Object decode(ScaleCodecReader reader) { 31 | return reader.readUint128(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/UInt16Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.UInt16Writer; 6 | 7 | import java.io.IOException; 8 | 9 | import static cn.hyperchain.sdk.fvm.scale.writer.UInt16Writer.MAX_UINT16; 10 | 11 | /** 12 | * @author: Hins Liu 13 | * @description: Unsigned int 64 type. 14 | */ 15 | public class UInt16Type extends PrimitiveType implements FVMType { 16 | 17 | @Override 18 | public void encode(ScaleCodecWriter writer, Object arg) { 19 | try { 20 | if (!(arg instanceof Number)) { 21 | throw new RuntimeException("Number value expected."); 22 | } 23 | UInt16Writer uInt16Type = new UInt16Writer(); 24 | uInt16Type.write(writer, Integer.parseInt(String.valueOf(arg))); 25 | } catch (NumberFormatException e) { 26 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT16 + " are supported: " + arg); 27 | } catch (IOException e) { 28 | throw new RuntimeException("others error: " + e.getMessage()); 29 | } 30 | } 31 | 32 | @Override 33 | public Object decode(ScaleCodecReader reader) { 34 | return reader.readUint16(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/UInt32Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.UInt32Writer; 6 | 7 | import java.io.IOException; 8 | 9 | import static cn.hyperchain.sdk.fvm.scale.writer.UInt32Writer.MAX_UINT32; 10 | 11 | /** 12 | * @author: Hins Liu 13 | * @description: Unsigned int 64 type. 14 | */ 15 | public class UInt32Type extends PrimitiveType implements FVMType { 16 | 17 | @Override 18 | public void encode(ScaleCodecWriter writer, Object arg) { 19 | try { 20 | if (!(arg instanceof Number)) { 21 | throw new RuntimeException("Number value expected."); 22 | } 23 | UInt32Writer uInt32Writer = new UInt32Writer(); 24 | uInt32Writer.write(writer, Long.parseLong(String.valueOf(arg))); 25 | } catch (NumberFormatException e) { 26 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT32 + " are supported: " + arg); 27 | } catch (IOException e) { 28 | throw new RuntimeException("others error: " + e.getMessage()); 29 | } 30 | } 31 | 32 | @Override 33 | public Object decode(ScaleCodecReader reader) { 34 | return reader.readUint32(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/fvm/types/UInt64Type.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.fvm.types; 2 | 3 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecReader; 4 | import cn.hyperchain.sdk.fvm.scale.ScaleCodecWriter; 5 | import cn.hyperchain.sdk.fvm.scale.writer.UInt64Writer; 6 | 7 | import java.io.IOException; 8 | import java.math.BigInteger; 9 | 10 | import static cn.hyperchain.sdk.fvm.scale.writer.UInt64Writer.MAX_UINT64; 11 | 12 | /** 13 | * @author: Hins Liu 14 | * @description: Unsigned int 64 type. 15 | */ 16 | public class UInt64Type extends PrimitiveType implements FVMType { 17 | 18 | @Override 19 | public void encode(ScaleCodecWriter writer, Object arg) { 20 | try { 21 | if (!(arg instanceof Number)) { 22 | throw new RuntimeException("Number value expected."); 23 | } 24 | UInt64Writer uInt64Writer = new UInt64Writer(); 25 | uInt64Writer.write(writer, new BigInteger(String.valueOf(arg))); 26 | } catch (NumberFormatException e) { 27 | throw new IllegalArgumentException("Only values in range 0.." + MAX_UINT64 + " are supported: " + arg); 28 | } catch (IOException e) { 29 | throw new RuntimeException("others error: " + e.getMessage()); 30 | } 31 | } 32 | 33 | @Override 34 | public Object decode(ScaleCodecReader reader) { 35 | return reader.readUint64(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/kvsqlutil/IntegerDataType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.kvsqlutil; 2 | 3 | public enum IntegerDataType { 4 | /** 5 | * 1 byte Protocol::FixedLengthInteger. 6 | */ 7 | INT1, 8 | 9 | INT2, 10 | 11 | INT3, 12 | 13 | INT4, 14 | 15 | INT6, 16 | 17 | INT8, 18 | 19 | INT_LENENC 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/provider/HttpProvider.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | import cn.hyperchain.sdk.account.Account; 4 | import cn.hyperchain.sdk.exception.RequestException; 5 | import cn.hyperchain.sdk.request.Request; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * HttpProvider interface. 11 | * @author tomkk 12 | * @version 0.0.1 13 | */ 14 | public interface HttpProvider { 15 | Object post(Request request) throws RequestException; 16 | 17 | PStatus getStatus(); 18 | 19 | void setStatus(PStatus status); 20 | 21 | String getUrl(); 22 | 23 | Account getAccount(); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/provider/Manager.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.grpc.GrpcUtil; 5 | import cn.hyperchain.sdk.grpc.Transaction; 6 | import cn.hyperchain.sdk.request.Request; 7 | 8 | public class Manager { 9 | protected String method; 10 | protected GrpcProvider grpcProvider; 11 | 12 | 13 | public Manager(String method, GrpcProvider grpcProvider) { 14 | this.method = method; 15 | this.grpcProvider = grpcProvider; 16 | } 17 | 18 | public Object onNext(Transaction.CommonReq commonReq) throws RequestException { 19 | return GrpcUtil.getCommonResByMethod(method, grpcProvider.getChannel(), commonReq); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/provider/PStatus.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | public enum PStatus { 4 | NORMAL, 5 | ABNORMAL, 6 | BUSY 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/provider/Provider.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.Response; 5 | 6 | import java.io.IOException; 7 | import java.util.concurrent.Future; 8 | 9 | 10 | // 由于ProviderManager的需要,此Provider可能无法抽象支持多种连接方式,暂时保留,每一种协议一个接口,每种协议可以有多个实现方式 11 | public interface Provider { 12 | T send(Request request, Class responseType) throws IOException; 13 | 14 | 15 | Future sendAsync(Request request, Class responseType); 16 | 17 | 18 | // > Flowable subscribe( 19 | // Request request, 20 | // String unsubscribeMethod, 21 | // Class responseType); 22 | 23 | /** 24 | * Closes resources used by the service. 25 | * 26 | * @throws IOException thrown if a service failed to close all resources 27 | */ 28 | void close() throws IOException; 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/provider/ServerStreamManager.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.grpc.GrpcUtil; 5 | import cn.hyperchain.sdk.grpc.Transaction; 6 | 7 | import java.util.Iterator; 8 | import java.util.function.Consumer; 9 | 10 | public class ServerStreamManager extends Manager implements Iterator { 11 | private Iterator commonResIterator; 12 | 13 | 14 | public ServerStreamManager(String method, GrpcProvider grpcProvider) { 15 | super(method, grpcProvider); 16 | 17 | } 18 | 19 | @Override 20 | public Object onNext(Transaction.CommonReq commonReq) throws RequestException { 21 | commonResIterator = GrpcUtil.getServerStreamByMethod(method, grpcProvider.getChannel(), commonReq); 22 | return this; 23 | } 24 | 25 | @Override 26 | public boolean hasNext() { 27 | return commonResIterator.hasNext(); 28 | } 29 | 30 | @Override 31 | public Object next() { 32 | return commonResIterator.next().getResult().toStringUtf8(); 33 | } 34 | 35 | @Override 36 | public void remove() { 37 | commonResIterator.remove(); 38 | } 39 | 40 | @Override 41 | public void forEachRemaining(Consumer action) { 42 | commonResIterator.forEachRemaining(action); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/ArchiveRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class ArchiveRequest extends Request { 6 | 7 | public ArchiveRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/AuthRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class AuthRequest extends Request { 6 | 7 | public AuthRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/BalanceRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class BalanceRequest extends Request { 6 | public BalanceRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 7 | super(method, providerManager, clazz, nodeIds); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/BlockRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class BlockRequest extends Request { 6 | public BlockRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 7 | super(method, providerManager, clazz, nodeIds); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/CompileRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | /** 6 | * this class represents request for solidity contract compile. 7 | * 8 | * @author Lam 9 | * @ClassName CompileRequest 10 | * @date 2019-07-09 11 | */ 12 | public class CompileRequest extends Request { 13 | public CompileRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 14 | super(method, providerManager, clazz, nodeIds); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/ConfigRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class ConfigRequest extends Request { 6 | public ConfigRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 7 | super(method, providerManager, clazz, nodeIds); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/ContractRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.provider.ProviderManager; 5 | import cn.hyperchain.sdk.response.Response; 6 | import cn.hyperchain.sdk.response.TxHashResponse; 7 | import cn.hyperchain.sdk.transaction.Transaction; 8 | 9 | /** 10 | * contract result. 11 | * 12 | * @author tomkk 13 | * @version 0.0.1 14 | */ 15 | public class ContractRequest extends Request { 16 | 17 | public ContractRequest(String method, ProviderManager providerManager, Class clazz, Transaction transaction, int... ids) { 18 | super(method, providerManager, clazz, transaction, ids); 19 | } 20 | 21 | @Override 22 | public Response send() throws RequestException { 23 | TxHashResponse response = (TxHashResponse) super.send(); 24 | 25 | response.setTranRequest(this); 26 | response.setNodeIds(this.nodeIds); 27 | response.setProviderManager(this.providerManager); 28 | 29 | return response; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/DIDRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | 4 | import cn.hyperchain.sdk.exception.RequestException; 5 | import cn.hyperchain.sdk.provider.ProviderManager; 6 | import cn.hyperchain.sdk.response.Response; 7 | import cn.hyperchain.sdk.response.TxHashResponse; 8 | 9 | public class DIDRequest extends Request { 10 | public DIDRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 11 | super(method, providerManager, clazz, nodeIds); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/FileInfoRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.provider.ProviderManager; 5 | import cn.hyperchain.sdk.response.Response; 6 | import cn.hyperchain.sdk.response.filemgr.FileUpdateResponse; 7 | import cn.hyperchain.sdk.transaction.Transaction; 8 | 9 | public class FileInfoRequest extends Request { 10 | public FileInfoRequest(String method, ProviderManager providerManager, Class clazz, String jsonRpc, int... nodeIds) { 11 | super(method, providerManager, clazz, nodeIds); 12 | this.setJsonrpc(jsonRpc); 13 | } 14 | 15 | public FileInfoRequest(String method, ProviderManager providerManager, Class clazz, String jsonRpc, Transaction transaction, int... nodeIds) { 16 | super(method, providerManager, clazz, transaction, nodeIds); 17 | this.setJsonrpc(jsonRpc); 18 | } 19 | 20 | @Override 21 | public Response send() throws RequestException { 22 | Response response = super.send(); 23 | if (response instanceof FileUpdateResponse) { 24 | FileUpdateResponse fileUpdateResponse = (FileUpdateResponse) response; 25 | fileUpdateResponse.setTranRequest(this); 26 | fileUpdateResponse.setNodeIds(this.nodeIds); 27 | fileUpdateResponse.setProviderManager(this.providerManager); 28 | return fileUpdateResponse; 29 | } 30 | return response; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/MQRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.exception.RequestExceptionCode; 5 | import cn.hyperchain.sdk.provider.ProviderManager; 6 | import cn.hyperchain.sdk.response.Response; 7 | 8 | public class MQRequest extends Request { 9 | public MQRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 10 | super(method, providerManager, clazz, nodeIds); 11 | } 12 | 13 | @Override 14 | public Response send() throws RequestException { 15 | if (this.nodeIds.length != 1) { 16 | throw new RequestException(RequestExceptionCode.PARAM_ERROR, "the number of NodeIds is must to be one"); 17 | } 18 | return super.send(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/NodeRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class NodeRequest extends Request { 6 | 7 | public NodeRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/ProofRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class ProofRequest extends Request { 6 | 7 | public ProofRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/RadarRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class RadarRequest extends Request { 6 | 7 | public RadarRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/ReceiptRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.exception.RequestExceptionCode; 5 | import cn.hyperchain.sdk.provider.ProviderManager; 6 | import cn.hyperchain.sdk.response.Response; 7 | 8 | public class ReceiptRequest extends Request { 9 | 10 | public ReceiptRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 11 | super(method, providerManager, clazz, nodeIds); 12 | } 13 | 14 | // @Override 15 | // public Response send() throws RequestException { 16 | // Response response = null; 17 | // 18 | // try { 19 | // response = super.send(); 20 | // return response; 21 | // } catch (RequestException e) { 22 | // if (!e.getCode().equals(RequestExceptionCode.RECEIPT_NOT_FOUND.getCode()) || 23 | // !e.getCode().equals(RequestExceptionCode.SYSTEM_BUSY.getCode()) || 24 | // !e.getCode().equals(RequestExceptionCode.HTTP_TIME_OUT.getCode()) || 25 | // !e.getCode().equals(RequestExceptionCode.NETWORK_GETBODY_FAILED.getCode()) || 26 | // !e.getCode().equals(RequestExceptionCode.REQUEST_ERROR.getCode()) 27 | // ) { 28 | // return response; 29 | // } 30 | // throw e; 31 | // } 32 | // } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/SendDIDTxRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.provider.ProviderManager; 5 | import cn.hyperchain.sdk.response.Response; 6 | import cn.hyperchain.sdk.response.TxHashResponse; 7 | import cn.hyperchain.sdk.transaction.Transaction; 8 | 9 | 10 | public class SendDIDTxRequest extends Request { 11 | 12 | 13 | public SendDIDTxRequest(String method, ProviderManager providerManager, Class clazz, Transaction transaction, int... nodeIds) { 14 | super(method, providerManager, clazz, transaction, nodeIds); 15 | } 16 | 17 | @Override 18 | public Response send() throws RequestException { 19 | TxHashResponse response = (TxHashResponse) super.send(); 20 | response.setTranRequest(this); 21 | response.setNodeIds(this.nodeIds); 22 | response.setProviderManager(this.providerManager); 23 | return response; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/SendTxRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.provider.ProviderManager; 5 | import cn.hyperchain.sdk.response.Response; 6 | import cn.hyperchain.sdk.response.TxHashResponse; 7 | import cn.hyperchain.sdk.transaction.Transaction; 8 | 9 | /** 10 | * this class represents send tx request. 11 | * 12 | * @author Lam 13 | * @ClassName SendTxRequest 14 | * @date 2019-07-11 15 | */ 16 | public class SendTxRequest extends Request { 17 | 18 | public SendTxRequest(String method, ProviderManager providerManager, Class clazz, Transaction transaction, int... nodeIds) { 19 | super(method, providerManager, clazz, transaction, nodeIds); 20 | this.providerManager = providerManager; 21 | } 22 | 23 | 24 | @Override 25 | public Response send() throws RequestException { 26 | TxHashResponse response = (TxHashResponse) super.send(); 27 | response.setTranRequest(this); 28 | response.setNodeIds(this.nodeIds); 29 | response.setProviderManager(this.providerManager); 30 | return response; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/StringRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class StringRequest extends Request { 6 | public StringRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 7 | super(method, providerManager, clazz, nodeIds); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/TCertRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class TCertRequest extends Request { 6 | 7 | public TCertRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 8 | super(method, providerManager, clazz, nodeIds); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/request/TxRequest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.request; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | 5 | public class TxRequest extends Request { 6 | public TxRequest(String method, ProviderManager providerManager, Class clazz, int... nodeIds) { 7 | super(method, providerManager, clazz, nodeIds); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/ReceiptListResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response; 2 | 3 | import com.google.gson.annotations.Expose; 4 | import java.util.ArrayList; 5 | 6 | 7 | /** 8 | * @author Wangwenqiang 9 | * @version 0.0.1 10 | * @ClassName ReceiptListResponse 11 | */ 12 | public class ReceiptListResponse extends Response { 13 | @Expose 14 | private ArrayList result; 15 | 16 | public ReceiptListResponse() { 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | return "ReceiptListResponse{" 22 | + "result=" + result 23 | + ", jsonrpc='" + jsonrpc + '\'' 24 | + ", id='" + id + '\'' 25 | + ", code=" + code 26 | + ", message='" + message + '\'' 27 | + ", namespace='" + namespace + '\'' 28 | + '}'; 29 | } 30 | 31 | public ArrayList getResult() { 32 | return result; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/TCertResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response; 2 | 3 | import com.google.gson.JsonElement; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class TCertResponse extends Response { 7 | 8 | @Expose 9 | private JsonElement result; 10 | 11 | public String getTCert() { 12 | return result.getAsJsonObject().get("tcert").getAsString(); 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "TCertResponse{" + 18 | "result=" + result + 19 | ", jsonrpc='" + jsonrpc + '\'' + 20 | ", id='" + id + '\'' + 21 | ", code=" + code + 22 | ", message='" + message + '\'' + 23 | ", namespace='" + namespace + '\'' + 24 | '}'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/TxHashResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.grpc.Transaction.CommonRes; 5 | import org.bouncycastle.util.encoders.Hex; 6 | 7 | /** 8 | * TxHashResponse get transaction hash. 9 | * 10 | * @author tomkk 11 | * @version 0.0.1 12 | */ 13 | 14 | public class TxHashResponse extends PollingResponse { 15 | private String txhash; 16 | 17 | public TxHashResponse() { 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | return "TxHashResponse{" 23 | + "result=" + getTxHash() 24 | + ", jsonrpc='" + jsonrpc + '\'' 25 | + ", id='" + id + '\'' 26 | + ", code=" + code 27 | + ", message='" + message + '\'' 28 | + ", namespace='" + namespace + '\'' 29 | + '}'; 30 | } 31 | 32 | @Override 33 | public void fromGRPCCommonRes(CommonRes commonRes) throws RequestException { 34 | super.fromGRPCCommonRes(commonRes); 35 | String txh = Hex.toHexString(commonRes.getResult().toByteArray()); 36 | this.txhash = txh.startsWith("0x") ? txh : "0x" + txh; 37 | super.result = gson.toJsonTree(txhash); 38 | } 39 | 40 | @Override 41 | public String getTxHash() { 42 | if (isGRPC) { 43 | return txhash; 44 | } 45 | return super.getTxHash(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/account/AccountsByRoleResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.account; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class AccountsByRoleResponse extends Response { 9 | @Expose 10 | private List result; 11 | 12 | public List getAccounts() { 13 | return result; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return "AccountsByRoleResponse{" + 19 | "result=" + result + 20 | ", jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/account/BalanceResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.account; 2 | 3 | import cn.hyperchain.sdk.common.utils.Utils; 4 | import cn.hyperchain.sdk.response.Response; 5 | import com.google.gson.annotations.Expose; 6 | 7 | public class BalanceResponse extends Response { 8 | 9 | @Expose 10 | private String result; 11 | 12 | public long getBalance() { 13 | return Long.parseLong(Utils.deleteHexPre(result), 16); 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return "BalanceResponse{" + 19 | "result=" + result + 20 | ", jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/account/RolesResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.account; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class RolesResponse extends Response { 9 | @Expose 10 | private List result; 11 | 12 | public List getRoles() { 13 | return result; 14 | } 15 | 16 | 17 | @Override 18 | public String toString() { 19 | return "RolesResponse{" + 20 | "result=" + result + 21 | ", jsonrpc='" + jsonrpc + '\'' + 22 | ", id='" + id + '\'' + 23 | ", code=" + code + 24 | ", message='" + message + '\'' + 25 | ", namespace='" + namespace + '\'' + 26 | '}'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/account/StatusResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.account; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class StatusResponse extends Response { 7 | @Expose 8 | private String result; 9 | 10 | public String getStatus() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "StatusResponse{" + 17 | "result='" + result + '\'' + 18 | ", jsonrpc='" + jsonrpc + '\'' + 19 | ", id='" + id + '\'' + 20 | ", code=" + code + 21 | ", message='" + message + '\'' + 22 | ", namespace='" + namespace + '\'' + 23 | '}'; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/archive/ArchiveBoolResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.archive; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents archive boolean response (when return type is only a boolean value). 8 | * 9 | * @author Jianhui Dong 10 | * @ClassName ArchiveBoolResponse 11 | * @date 2019-07-08 12 | */ 13 | public class ArchiveBoolResponse extends Response { 14 | @Expose 15 | private Boolean result; 16 | 17 | public Boolean getResult() { 18 | return result; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "ArchiveBoolResponse{" + 24 | "result=" + result + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/archive/ArchiveFilterIdResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.archive; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents filter id. 8 | * 9 | * @author Jianhui Dong 10 | * @ClassName ArchiveFilterIdResponse 11 | * @date 2019-07-08 12 | */ 13 | public class ArchiveFilterIdResponse extends Response { 14 | @Expose 15 | private String result; 16 | 17 | public String getResult() { 18 | return result; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "ArchiveFilterIdResponse{" + 24 | "result='" + result + '\'' + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/archive/ArchiveStringResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.archive; 2 | 3 | 4 | import cn.hyperchain.sdk.response.Response; 5 | import com.google.gson.annotations.Expose; 6 | 7 | public class ArchiveStringResponse extends Response { 8 | @Expose 9 | private String result; 10 | 11 | public String getResult() { 12 | return result; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "ArchiveStringResponse{" + 18 | "result=" + result + 19 | ", jsonrpc='" + jsonrpc + '\'' + 20 | ", id='" + id + '\'' + 21 | ", code=" + code + 22 | ", message='" + message + '\'' + 23 | ", namespace='" + namespace + '\'' + 24 | '}'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/auth/AddressesResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.auth; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class AddressesResponse extends Response { 9 | @Expose 10 | private List result; 11 | 12 | public List getAddresses() { 13 | return result; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return "AddressesResponse{" + 19 | "result=" + result + 20 | ", jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/auth/Response.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.auth; 2 | 3 | public class Response extends cn.hyperchain.sdk.response.Response { 4 | 5 | @Override 6 | public String toString() { 7 | return "Response{" + 8 | "jsonrpc='" + jsonrpc + '\'' + 9 | ", id='" + id + '\'' + 10 | ", code=" + code + 11 | ", message='" + message + '\'' + 12 | ", namespace='" + namespace + '\'' + 13 | '}'; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/auth/RolesResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.auth; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class RolesResponse extends Response { 9 | @Expose 10 | private List result; 11 | 12 | public List getRoles() { 13 | return result; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return "RolesResponse{" + 19 | "result=" + result + 20 | ", jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/block/BlockAvgTimeResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.block; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents block average generate time response. 8 | * 9 | * @author dong 10 | * @date 07/05/2019 11 | */ 12 | public class BlockAvgTimeResponse extends Response { 13 | @Expose 14 | private String result; 15 | 16 | public String getResult() { 17 | return result; 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | return "BlockAvgTimeResponse{" + 23 | "result=" + result + 24 | ", jsonrpc='" + jsonrpc + '\'' + 25 | ", id='" + id + '\'' + 26 | ", code=" + code + 27 | ", message='" + message + '\'' + 28 | ", namespace='" + namespace + '\'' + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/block/BlockLimitResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.block; 2 | 3 | import cn.hyperchain.sdk.response.PageResult; 4 | import cn.hyperchain.sdk.response.Response; 5 | import com.google.gson.annotations.Expose; 6 | 7 | import java.util.List; 8 | 9 | public class BlockLimitResponse extends Response { 10 | @Expose 11 | private PageResult result; 12 | 13 | public List getResult() { 14 | return result.parseResult(BlockResponse.Block.class); 15 | } 16 | 17 | public boolean hasMore() { 18 | return result.getHasmore(); 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "BlockLimitResponse{" + 24 | "result=" + result + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/block/BlockNumberResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.block; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents block number response. 8 | * 9 | * @author dong 10 | * @date 07/05/2019 11 | */ 12 | public class BlockNumberResponse extends Response { 13 | @Expose 14 | private String result; 15 | 16 | public String getResult() { 17 | return result; 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | return "BlockNumberResponse{" + 23 | "result=" + result + 24 | ", jsonrpc='" + jsonrpc + '\'' + 25 | ", id='" + id + '\'' + 26 | ", code=" + code + 27 | ", message='" + message + '\'' + 28 | ", namespace='" + namespace + '\'' + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/AddressResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class AddressResponse extends Response { 7 | @Expose 8 | private String result; 9 | 10 | public String getAddress() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "AddressResponse{" + 17 | "result='" + result + '\'' + 18 | ", jsonrpc='" + jsonrpc + '\'' + 19 | ", id='" + id + '\'' + 20 | ", code=" + code + 21 | ", message='" + message + '\'' + 22 | ", namespace='" + namespace + '\'' + 23 | '}'; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/AllCNSResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.Map; 7 | 8 | public class AllCNSResponse extends Response { 9 | 10 | @Expose 11 | private Map result; 12 | 13 | public Map getAllCNS() { 14 | return result; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return "AllCNSResponse{" + 20 | "result=" + result + 21 | "jsonrpc='" + jsonrpc + '\'' + 22 | ", id='" + id + '\'' + 23 | ", code=" + code + 24 | ", message='" + message + '\'' + 25 | ", namespace='" + namespace + '\'' + 26 | '}'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/AllRolesResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.Map; 7 | 8 | public class AllRolesResponse extends Response { 9 | @Expose 10 | private Map result; 11 | 12 | public Map getAllRoles() { 13 | return result; 14 | } 15 | 16 | @Override 17 | public String toString() { 18 | return "AllRolesResponse{" + 19 | "result=" + result + 20 | ", jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | '}'; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/ConfigResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class ConfigResponse extends Response { 7 | 8 | @Expose 9 | private String result; 10 | 11 | public String getConfig() { 12 | return result; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "ConfigResponse{" + 18 | "result='" + result + '\'' + 19 | ", jsonrpc='" + jsonrpc + '\'' + 20 | ", id='" + id + '\'' + 21 | ", code=" + code + 22 | ", message='" + message + '\'' + 23 | ", namespace='" + namespace + '\'' + 24 | '}'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/HostsResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.Base64; 7 | import java.util.HashMap; 8 | import java.util.Iterator; 9 | import java.util.Map; 10 | 11 | public class HostsResponse extends Response { 12 | 13 | @Expose 14 | private Map result; 15 | 16 | /** 17 | * convert result to hosts. 18 | * 19 | * @return {@link Map} 20 | */ 21 | public Map getHosts() { 22 | Map hosts = new HashMap<>(); 23 | Iterator> iterator = result.entrySet().iterator(); 24 | while (iterator.hasNext()) { 25 | Map.Entry next = iterator.next(); 26 | hosts.put(next.getKey(), new String(Base64.getDecoder().decode(next.getValue()))); 27 | } 28 | return hosts; 29 | } 30 | 31 | @Override 32 | public String toString() { 33 | return "HostsResponse{" + 34 | "result=" + result + 35 | ", jsonrpc='" + jsonrpc + '\'' + 36 | ", id='" + id + '\'' + 37 | ", code=" + code + 38 | ", message='" + message + '\'' + 39 | ", namespace='" + namespace + '\'' + 40 | '}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/NameResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class NameResponse extends Response { 7 | @Expose 8 | private String result; 9 | 10 | public String getName() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "NameResponse{" + 17 | "result='" + result + '\'' + 18 | ", jsonrpc='" + jsonrpc + '\'' + 19 | ", id='" + id + '\'' + 20 | ", code=" + code + 21 | ", message='" + message + '\'' + 22 | ", namespace='" + namespace + '\'' + 23 | '}'; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/RoleExistResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class RoleExistResponse extends Response { 7 | 8 | @Expose 9 | private boolean result; 10 | 11 | public boolean isRoleExist() { 12 | return result; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "RoleExistResponse{" + 18 | "result=" + result + 19 | ", jsonrpc='" + jsonrpc + '\'' + 20 | ", id='" + id + '\'' + 21 | ", code=" + code + 22 | ", message='" + message + '\'' + 23 | ", namespace='" + namespace + '\'' + 24 | '}'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/config/VSetResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.config; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class VSetResponse extends Response { 9 | 10 | @Expose 11 | private List result; 12 | 13 | public List getVSet() { 14 | return result; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return "VSetResponse{" + 20 | "result=" + result + 21 | ", jsonrpc='" + jsonrpc + '\'' + 22 | ", id='" + id + '\'' + 23 | ", code=" + code + 24 | ", message='" + message + '\'' + 25 | ", namespace='" + namespace + '\'' + 26 | '}'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/contract/CompileContractResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.contract; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class CompileContractResponse extends Response { 9 | @Expose 10 | private CompileCode result; 11 | 12 | public class CompileCode { 13 | @Expose 14 | private List abi; 15 | 16 | @Expose 17 | private List bin; 18 | 19 | @Expose 20 | private List types; 21 | 22 | @Override 23 | public String toString() { 24 | return "CompileCode{ " + 25 | "abi=" + abi + 26 | ", bin=" + bin + 27 | ", types=" + types + 28 | "}"; 29 | } 30 | } 31 | 32 | 33 | public CompileCode getResult() { 34 | return result; 35 | } 36 | 37 | @Override 38 | public String toString() { 39 | return "CompileCodeResponse{" + 40 | "result=" + result + 41 | ", jsonrpc='" + jsonrpc + '\'' + 42 | ", id='" + id + '\'' + 43 | ", code=" + code + 44 | ", message='" + message + '\'' + 45 | ", namespace='" + namespace + '\'' + 46 | '}'; 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/contract/DeployerListResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.contract; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | import java.util.List; 7 | 8 | public class DeployerListResponse extends Response { 9 | 10 | @Expose 11 | private List result; 12 | 13 | public List getResult() { 14 | return result; 15 | } 16 | 17 | @Override 18 | public String toString() { 19 | return "DeployerListResponse{" + 20 | "jsonrpc='" + jsonrpc + '\'' + 21 | ", id='" + id + '\'' + 22 | ", code=" + code + 23 | ", message='" + message + '\'' + 24 | ", namespace='" + namespace + '\'' + 25 | ", result=" + result + 26 | '}'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/contract/StringResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.contract; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * @author Wangwenqiang 8 | * @version 0.0.1 9 | * @ClassName StringResponse 10 | */ 11 | public class StringResponse extends Response { 12 | @Expose 13 | private String result; 14 | 15 | public String getResult() { 16 | return result; 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | return "CompileCodeResponse{" + 22 | "result='" + result + '\'' + 23 | ", jsonrpc='" + jsonrpc + '\'' + 24 | ", id='" + id + '\'' + 25 | ", code=" + code + 26 | ", message='" + message + '\'' + 27 | ", namespace='" + namespace + '\'' + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/did/DIDResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.did; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.JsonElement; 5 | import com.google.gson.annotations.Expose; 6 | 7 | 8 | public class DIDResponse extends Response { 9 | @Expose 10 | private String result; 11 | 12 | public DIDResponse() { 13 | 14 | } 15 | 16 | public String getResult() { 17 | return result; 18 | } 19 | 20 | 21 | @Override 22 | public String toString() { 23 | return "DIDResponse{" + 24 | "result=" + result + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | "}"; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/filemgr/FileDownloadResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.filemgr; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.Gson; 5 | import com.google.gson.GsonBuilder; 6 | 7 | public class FileDownloadResponse extends Response { 8 | private static final Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 9 | 10 | /** 11 | * constructor. 12 | * 13 | * @param code code 14 | * @param message message 15 | */ 16 | public FileDownloadResponse(int code, String message) { 17 | this.code = code; 18 | this.message = message; 19 | } 20 | 21 | /** 22 | * convert FileTransferResponse to String. 23 | * 24 | * @return a String of FileTransferResponse 25 | */ 26 | @Override 27 | public String toString() { 28 | return "FileDownloadResponse{" + 29 | "jsonrpc='" + jsonrpc + '\'' + 30 | ", id='" + id + '\'' + 31 | ", code=" + code + 32 | ", message='" + message + '\'' + 33 | ", namespace='" + namespace + '\'' + 34 | '}'; 35 | } 36 | 37 | public String toJson() { 38 | return gson.toJson(this); 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/filemgr/FileExtraFromTxHashResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.filemgr; 2 | 3 | import cn.hyperchain.sdk.common.utils.FileExtra; 4 | import cn.hyperchain.sdk.response.Response; 5 | import cn.hyperchain.sdk.response.tx.TxResponse; 6 | import com.google.gson.annotations.Expose; 7 | 8 | public class FileExtraFromTxHashResponse extends Response { 9 | @Expose 10 | private TxResponse.Transaction result; 11 | 12 | /** 13 | * parse fileExtra from result. 14 | * 15 | * @return file extra 16 | */ 17 | public FileExtra getFileExtra() { 18 | String extra = result.getExtra(); 19 | return FileExtra.fromJson(extra); 20 | } 21 | 22 | @Override 23 | public String toString() { 24 | return "FileExtraFromTxHashResponse{" + 25 | "result=" + result + 26 | ", jsonrpc='" + jsonrpc + '\'' + 27 | ", id='" + id + '\'' + 28 | ", code=" + code + 29 | ", message='" + message + '\'' + 30 | ", namespace='" + namespace + '\'' + 31 | '}'; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/filemgr/FilePushResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.filemgr; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.Gson; 5 | import com.google.gson.GsonBuilder; 6 | 7 | public class FilePushResponse extends Response { 8 | private static final Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); 9 | 10 | @Override 11 | public String toString() { 12 | return "FilePushResponse{" + 13 | "namespace='" + namespace + '\'' + 14 | ", jsonrpc='" + jsonrpc + '\'' + 15 | ", id='" + id + '\'' + 16 | ", code=" + code + 17 | ", message='" + message + '\'' + 18 | '}'; 19 | } 20 | 21 | public String toJson() { 22 | return gson.toJson(this); 23 | } 24 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/filemgr/FileUpdateResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.filemgr; 2 | 3 | import cn.hyperchain.sdk.response.PollingResponse; 4 | 5 | public class FileUpdateResponse extends PollingResponse { 6 | @Override 7 | public String toString() { 8 | return "FileInfoResponse{" + 9 | "namespace='" + namespace + '\'' + 10 | ", jsonrpc='" + jsonrpc + '\'' + 11 | ", id='" + id + '\'' + 12 | ", code=" + code + 13 | ", message='" + message + '\'' + 14 | ", result='" + getTxHash() + '\'' + 15 | '}'; 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/filemgr/FileUploadResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.filemgr; 2 | 3 | import cn.hyperchain.sdk.exception.RequestException; 4 | import cn.hyperchain.sdk.response.PollingResponse; 5 | import cn.hyperchain.sdk.response.ReceiptResponse; 6 | 7 | public class FileUploadResponse extends PollingResponse { 8 | private String fileHash; 9 | 10 | public String getFileHash() { 11 | return fileHash; 12 | } 13 | 14 | public void setFileHash(String fileHash) { 15 | this.fileHash = fileHash; 16 | } 17 | 18 | /** 19 | * to String. 20 | * 21 | * @return string 22 | */ 23 | public String toString() { 24 | return "FileUploadResponse{" + 25 | "result=" + getTxHash() + 26 | ", jsonrpc='" + jsonrpc + '\'' + 27 | ", id='" + id + '\'' + 28 | ", code=" + code + 29 | ", message='" + message + '\'' + 30 | ", namespace='" + namespace + '\'' + 31 | ", fileHash='" + fileHash + '\'' + 32 | '}'; 33 | } 34 | 35 | public ReceiptResponse polling() throws RequestException { 36 | return super.polling(30,1000,1000); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/mq/MQGrpcConsumeResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.mq; 2 | 3 | import cn.hyperchain.sdk.provider.ServerStreamManager; 4 | import cn.hyperchain.sdk.response.Response; 5 | 6 | public class MQGrpcConsumeResponse extends Response { 7 | private ServerStreamManager manager; 8 | 9 | public MQGrpcConsumeResponse(ServerStreamManager manager) { 10 | this.manager = manager; 11 | } 12 | 13 | 14 | public ServerStreamManager getResult() { 15 | return manager; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/node/NodeHashResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.node; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class NodeHashResponse extends Response { 7 | @Expose 8 | private String result; 9 | 10 | public String getResult() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "NodeHashResponse{" + 17 | "result=" + result + 18 | ", jsonrpc='" + jsonrpc + '\'' + 19 | ", id='" + id + '\'' + 20 | ", code=" + code + 21 | ", message='" + message + '\'' + 22 | ", namespace='" + namespace + '\'' + 23 | "}"; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/AccountProof.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | import java.util.List; 6 | 7 | public class AccountProof { 8 | @Expose 9 | private List accountProof; 10 | 11 | public List getAccountProof() { 12 | return accountProof; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "AccountProofResponse{" + 18 | "accountProof=" + accountProof + 19 | '}'; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/AccountProofResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class AccountProofResponse extends Response { 7 | @Expose 8 | private AccountProof result; 9 | 10 | public AccountProof getResult() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "AccountProofResponse{" + 17 | "result=" + result + 18 | '}'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/StateProof.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | import java.util.List; 6 | 7 | public class StateProof { 8 | @Expose private List statePath; 9 | @Expose private List accountPath; 10 | 11 | public List getStatePath() { 12 | return statePath; 13 | } 14 | 15 | public List getAccountPath() { 16 | return accountPath; 17 | } 18 | 19 | @Override 20 | public String toString() { 21 | return "StateProof{" + 22 | "statePath=" + statePath + 23 | ", accountPath=" + accountPath + 24 | '}'; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/StateProofResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class StateProofResponse extends Response { 7 | @Expose 8 | private StateProof result; 9 | 10 | public StateProof getResult() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "StateProofResponse{" + 17 | "result=" + result + 18 | '}'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/TxProof.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | import java.util.List; 6 | 7 | public class TxProof { 8 | @Expose private List txProof; 9 | 10 | public List getProofPath() { 11 | return txProof; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "TxProof{" + 17 | "txProof=" + txProof + 18 | '}'; 19 | } 20 | 21 | public static class MerkleProofNode { 22 | @Expose private String hash; 23 | @Expose private int index; 24 | 25 | public MerkleProofNode() { 26 | } 27 | 28 | public MerkleProofNode(String hash, int index) { 29 | this.hash = hash; 30 | this.index = index; 31 | } 32 | 33 | public String getHash() { 34 | return hash; 35 | } 36 | 37 | public int getIndex() { 38 | return index; 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return "MerkleProofNode{" + 44 | "hash='" + hash + '\'' + 45 | ", index=" + index + 46 | '}'; 47 | } 48 | } 49 | 50 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/TxProofResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class TxProofResponse extends Response { 7 | @Expose 8 | private TxProof result; 9 | 10 | public TxProof getResult() { 11 | return result; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "TxProofResponse{" + 17 | "result=" + result + 18 | '}'; 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/ValidateStateResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class ValidateStateResponse extends Response { 7 | 8 | @Expose 9 | private boolean result; 10 | 11 | public boolean getResult() { 12 | return result; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "ValidateStateResponse{" + 18 | "result=" + result + 19 | '}'; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/proof/ValidateTxResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.proof; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | public class ValidateTxResponse extends Response { 7 | 8 | @Expose 9 | private boolean result; 10 | 11 | public boolean getResult() { 12 | return result; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return "ValidateTxResponse{" + 18 | "result=" + result + 19 | '}'; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/radar/RadarResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.radar; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.JsonElement; 5 | import com.google.gson.annotations.Expose; 6 | 7 | public class RadarResponse extends Response { 8 | @Expose 9 | private JsonElement result; 10 | 11 | @Override 12 | public String toString() { 13 | return "RadarResponse{" + 14 | "result=" + result + 15 | ", jsonrpc='" + jsonrpc + '\'' + 16 | ", id='" + id + '\'' + 17 | ", code=" + code + 18 | ", message='" + message + '\'' + 19 | ", namespace='" + namespace + '\'' + 20 | '}'; 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/tx/TxAvgTimeResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.tx; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents transaction count with time field response. 8 | * 9 | * @author Jianhui Dong 10 | * @ClassName TxAvgTimeResponse 11 | * @date 2019-07-08 12 | */ 13 | public class TxAvgTimeResponse extends Response { 14 | @Expose 15 | private String result; 16 | 17 | public String getResult() { 18 | return result; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "TxAvgTimeResponse{" + 24 | "result='" + result + '\'' + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/tx/TxCountResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.tx; 2 | 3 | import cn.hyperchain.sdk.response.Response; 4 | import com.google.gson.annotations.Expose; 5 | 6 | /** 7 | * this class represents transaction count response. 8 | * 9 | * @author Jianhui Dong 10 | * @ClassName TxCountResponse 11 | * @date 2019-07-08 12 | */ 13 | public class TxCountResponse extends Response { 14 | @Expose 15 | private String result; 16 | 17 | public String getResult() { 18 | return result; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "TxCountResponse{" + 24 | "result=" + result + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/tx/TxLimitResponse.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.response.tx; 2 | 3 | import cn.hyperchain.sdk.response.PageResult; 4 | import cn.hyperchain.sdk.response.Response; 5 | import com.google.gson.annotations.Expose; 6 | 7 | import java.util.List; 8 | 9 | public class TxLimitResponse extends Response { 10 | @Expose 11 | private PageResult result; 12 | 13 | public List getResult() { 14 | return result.parseResult(TxResponse.Transaction.class); 15 | } 16 | 17 | public boolean hasMore() { 18 | return result.getHasmore(); 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "TxLimitResponse{" + 24 | "result=" + result + 25 | ", jsonrpc='" + jsonrpc + '\'' + 26 | ", id='" + id + '\'' + 27 | ", code=" + code + 28 | ", message='" + message + '\'' + 29 | ", namespace='" + namespace + '\'' + 30 | '}'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/response/tx/TxVersionResponse.java: -------------------------------------------------------------------------------- 1 | 2 | package cn.hyperchain.sdk.response.tx; 3 | 4 | import cn.hyperchain.sdk.response.Response; 5 | import com.google.gson.annotations.Expose; 6 | 7 | /** 8 | * @author Wangwenqiang 9 | * @version 0.0.1 10 | * @ClassName TxVersionResponse 11 | */ 12 | public class TxVersionResponse extends Response { 13 | @Expose 14 | private String result; 15 | 16 | public TxVersionResponse() { 17 | 18 | } 19 | 20 | @Override 21 | public String toString() { 22 | return "TxVersionResponse{" + 23 | "result=" + result + 24 | ", jsonrpc='" + jsonrpc + '\'' + 25 | ", id='" + id + '\'' + 26 | ", code=" + code + 27 | ", message='" + message + '\'' + 28 | ", namespace='" + namespace + '\'' + 29 | '}'; 30 | } 31 | 32 | public String getTxVersionResult() { 33 | return result; 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/AuthService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.auth.AddressesResponse; 5 | import cn.hyperchain.sdk.response.auth.InspectorRulesResponse; 6 | import cn.hyperchain.sdk.response.auth.Response; 7 | import cn.hyperchain.sdk.response.auth.RolesResponse; 8 | import cn.hyperchain.sdk.service.params.InspectorRuleParam; 9 | 10 | import java.util.List; 11 | 12 | public interface AuthService { 13 | 14 | Request getAllRoles(int ...nodeIds); 15 | 16 | Request getRolesByAddress(String address, int ...nodeIds); 17 | 18 | Request getAddressByRole(String role, int ...nodeIds); 19 | 20 | Request addRoles(String address, List roles, int ...nodeIds); 21 | 22 | Request deleteRoles(String address, List roles, int ...nodeIds); 23 | 24 | Request setRules(List rules, int ...nodeIds); 25 | 26 | Request getRules(int ...nodeIds); 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/CompileService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.CompileResponse; 5 | 6 | /** 7 | * solidity contract compile service interface. 8 | * 9 | * @author Lam 10 | * @ClassName CompileService 11 | * @date 2019-07-09 12 | */ 13 | public interface CompileService { 14 | Request compile(String sourceCode, int... nodes); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/ConfigService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.response.config.AddressResponse; 4 | import cn.hyperchain.sdk.request.Request; 5 | import cn.hyperchain.sdk.response.config.AllCNSResponse; 6 | import cn.hyperchain.sdk.response.config.AllRolesResponse; 7 | import cn.hyperchain.sdk.response.config.ConfigResponse; 8 | import cn.hyperchain.sdk.response.config.HostsResponse; 9 | import cn.hyperchain.sdk.response.config.NameResponse; 10 | import cn.hyperchain.sdk.response.config.ProposalResponse; 11 | import cn.hyperchain.sdk.response.config.RoleExistResponse; 12 | import cn.hyperchain.sdk.response.config.VSetResponse; 13 | 14 | public interface ConfigService { 15 | 16 | Request getProposal(int... nodeIds); 17 | 18 | Request getConfig(int... nodeIds); 19 | 20 | Request getGenesisInfo(int... nodeIds); 21 | 22 | Request getHosts(String role, int... nodeIds); 23 | 24 | Request getVSet(int... nodeIds); 25 | 26 | Request getAllRoles(int... nodeIds); 27 | 28 | Request isRoleExist(String role, int... nodeIds); 29 | 30 | Request getNameByAddress(String address, int... nodeIds); 31 | 32 | Request getAddressByName(String name, int... nodeIds); 33 | 34 | Request getAllCNS(int... nodeIds); 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/MQGrpcService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | 4 | import cn.hyperchain.sdk.request.Request; 5 | import cn.hyperchain.sdk.response.mq.MQGrpcConsumeResponse; 6 | import cn.hyperchain.sdk.response.mq.MQResponse; 7 | import cn.hyperchain.sdk.service.params.MQParam; 8 | 9 | import java.util.List; 10 | 11 | public interface MQGrpcService { 12 | Request registerQueue(String from, String queueName, List routingkeys, Boolean isVerbose, int... nodeIds); 13 | 14 | Request registerQueue(MQParam mqParam, int... nodeIds); 15 | 16 | Request unRegisterQueue(String queueName, int... nodeIds); 17 | 18 | Request getAllQueueNames(int... nodeIds); 19 | 20 | Request stopConsume(String queueName, int... nodeIds); 21 | 22 | Request consume(String queueName, int... nodeIds); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/NodeService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.node.NodeHashResponse; 5 | import cn.hyperchain.sdk.response.node.NodeResponse; 6 | import cn.hyperchain.sdk.response.node.NodeStateResponse; 7 | 8 | public interface NodeService { 9 | Request getNodes(int... nodeIds); 10 | 11 | /** 12 | * get all nodes states. 13 | * 14 | * @param nodeIds specific ids 15 | * @return {@link Request} of {@link NodeStateResponse} 16 | */ 17 | Request getNodeStates(int... nodeIds); 18 | 19 | /** 20 | * get hash of the node that select in nodeIds randomly. 21 | * 22 | * @param nodeIds specific ids 23 | * @return {@link Request} of {@link NodeHashResponse} 24 | */ 25 | Request getNodeHash(int... nodeIds); 26 | 27 | /** 28 | * get hash of the node by nodeId. 29 | * 30 | * @param nodeId specific id 31 | * @return {@link Request} of {@link NodeHashResponse} 32 | */ 33 | Request getNodeHashByID(int nodeId); 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/ProofService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.proof.StateProofResponse; 5 | import cn.hyperchain.sdk.response.proof.ValidateStateResponse; 6 | import cn.hyperchain.sdk.response.proof.TxProofResponse; 7 | import cn.hyperchain.sdk.response.proof.AccountProofResponse; 8 | import cn.hyperchain.sdk.response.proof.StateProof; 9 | import cn.hyperchain.sdk.service.params.ProofParam; 10 | 11 | public interface ProofService { 12 | 13 | Request getStateProof(ProofParam proofParam, int... nodeIds); 14 | 15 | Request validateStateProof(ProofParam proofParam, StateProof stateProof, String merkleRoot, int... nodeIds); 16 | 17 | Request getTxProof(String txHash, int... nodeIds); 18 | 19 | Request getAccountProof(String address, int... nodeIds); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/RadarService.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service; 2 | 3 | import cn.hyperchain.sdk.request.Request; 4 | import cn.hyperchain.sdk.response.radar.RadarResponse; 5 | 6 | public interface RadarService { 7 | /** 8 | * to listen contract. 9 | * 10 | * @param sourceCode solidity source code 11 | * @param contractAddress contract address 12 | * @param nodeIds specific ids 13 | * @return {@link Request} of {@link RadarResponse} 14 | */ 15 | @Deprecated 16 | Request listenContract(String sourceCode, String contractAddress, int... nodeIds); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/impl/CompileServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service.impl; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | import cn.hyperchain.sdk.request.CompileRequest; 5 | import cn.hyperchain.sdk.request.Request; 6 | import cn.hyperchain.sdk.response.CompileResponse; 7 | import cn.hyperchain.sdk.service.CompileService; 8 | 9 | /** 10 | * this class represents service implementation that for contract compile. 11 | * 12 | * @author Lam 13 | * @ClassName CompileServiceImpl 14 | * @date 2019-07-09 15 | */ 16 | public class CompileServiceImpl implements CompileService { 17 | private ProviderManager providerManager; 18 | private static final String COMPILE_PREFIX = "contract_"; 19 | 20 | public CompileServiceImpl(ProviderManager providerManager) { 21 | this.providerManager = providerManager; 22 | } 23 | 24 | @Override 25 | public Request compile(String sourceCode, int... nodes) { 26 | CompileRequest compileRequest = new CompileRequest(COMPILE_PREFIX + "compileContract", providerManager, CompileResponse.class, nodes); 27 | compileRequest.addParams(sourceCode); 28 | return compileRequest; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/impl/RadarServiceImpl.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service.impl; 2 | 3 | import cn.hyperchain.sdk.provider.ProviderManager; 4 | import cn.hyperchain.sdk.request.RadarRequest; 5 | import cn.hyperchain.sdk.request.Request; 6 | import cn.hyperchain.sdk.response.radar.RadarResponse; 7 | import cn.hyperchain.sdk.service.RadarService; 8 | 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | 12 | public class RadarServiceImpl implements RadarService { 13 | private ProviderManager providerManager; 14 | private static final String RADAR_PRE = "radar_"; 15 | 16 | public RadarServiceImpl(ProviderManager providerManager) { 17 | this.providerManager = providerManager; 18 | } 19 | 20 | 21 | @Override 22 | public Request listenContract(String sourceCode, String contractAddress, int... nodeIds) { 23 | RadarRequest radarResponseRequest = new RadarRequest(RADAR_PRE + "registerContract", providerManager, RadarResponse.class, nodeIds); 24 | Map metas = new HashMap<>(); 25 | metas.put("source", sourceCode); 26 | metas.put("address", contractAddress); 27 | radarResponseRequest.addParams(metas); 28 | return radarResponseRequest; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/service/params/LedgerMetaParam.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.service.params; 2 | 3 | import com.google.gson.annotations.Expose; 4 | 5 | public class LedgerMetaParam { 6 | @Expose private String snapshotID; 7 | @Expose private long seqNo; 8 | 9 | public LedgerMetaParam() { 10 | } 11 | 12 | public LedgerMetaParam(String snapshotID, long seqNo) { 13 | this.snapshotID = snapshotID; 14 | this.seqNo = seqNo; 15 | } 16 | 17 | public String getSnapshotID() { 18 | return snapshotID; 19 | } 20 | 21 | public void setSnapshotID(String snapshotID) { 22 | this.snapshotID = snapshotID; 23 | } 24 | 25 | public long getSeqNo() { 26 | return seqNo; 27 | } 28 | 29 | public void setSeqNo(long seqNo) { 30 | this.seqNo = seqNo; 31 | } 32 | 33 | @Override 34 | public String toString() { 35 | return "LedgerMetaParam{" + 36 | "snapshotID='" + snapshotID + '\'' + 37 | ", seqNo=" + seqNo + 38 | '}'; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/cn/hyperchain/sdk/transaction/VMType.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.transaction; 2 | 3 | public enum VMType { 4 | EVM("EVM"), 5 | HVM("HVM"), 6 | BVM("BVM"), 7 | TRANSFER("TRANSFER"), 8 | KVSQL("KVSQL"), 9 | FVM("FVM"); 10 | 11 | private String type; 12 | 13 | VMType(String type) { 14 | this.type = type; 15 | } 16 | 17 | public String getType() { 18 | return type; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/logic/IContractList.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.logic; 2 | 3 | import cn.hyperchain.contract.BaseContractInterface; 4 | import cn.hyperchain.logic.entity.Person; 5 | 6 | import java.util.Iterator; 7 | import java.util.List; 8 | import java.util.ListIterator; 9 | 10 | public interface IContractList extends BaseContractInterface { 11 | int sizeList(); 12 | 13 | Person get(int idx); 14 | 15 | boolean isListEmpty(); 16 | 17 | void add(Person person); 18 | 19 | void add(int idx, Person person); 20 | 21 | void remove(Person person); 22 | 23 | void remove(int idx); 24 | 25 | void removeAll(List plist); 26 | 27 | void addAll(List lists); 28 | 29 | void addAll(int idx, List lists); 30 | 31 | void set(int idx, Person person); 32 | 33 | void setWithoutSet(int idx, Person person); 34 | 35 | int indexOf(Person person); 36 | 37 | int lastIndexOf(Person person); 38 | 39 | boolean contains(Person person); 40 | 41 | boolean containsAll(List plist); 42 | 43 | Iterator iterator(); 44 | 45 | ListIterator listIterator(); 46 | 47 | ListIterator listIterator(int index); 48 | 49 | Object[] toArray(); 50 | 51 | Person[] toArray(Person[] a); 52 | 53 | boolean retainAll(List list); 54 | 55 | List subList(int fromIndex, int toIndex); 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/logic/IContractMapExtra.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.logic; 2 | 3 | import cn.hyperchain.contract.BaseContractInterface; 4 | import cn.hyperchain.logic.entity.Person; 5 | 6 | /** 7 | * description: 8 | * date 2019-05-30 9 | * created by dong 10 | */ 11 | public interface IContractMapExtra extends BaseContractInterface { 12 | 13 | String computeIfAbsent(Person person); 14 | 15 | String computeIfPresent(Person person); 16 | 17 | String compute(Person person); 18 | 19 | void replaceAll(); 20 | 21 | void merge(Person person, String string); 22 | 23 | void forEach(); 24 | 25 | void comparingByValue(); 26 | } 27 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/common/utils/ByteUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import java.math.BigInteger; 7 | 8 | public class ByteUtilTest { 9 | 10 | @Test 11 | public void testBiConvertTest() { 12 | byte[] data = ByteUtil.biConvert32Bytes(BigInteger.valueOf(100)); 13 | Assert.assertEquals("0000000000000000000000000000000000000000000000000000000000000064", ByteUtil.toHex(data)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/common/utils/CertTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import java.io.InputStream; 7 | 8 | public class CertTest { 9 | 10 | @Test 11 | public void test1() throws Exception { 12 | InputStream reader = FileUtil.readFileAsStream("cert.cer"); 13 | String s = FileUtil.readFile(reader); 14 | String addr = CertUtil.pemToAddr(s); 15 | Assert.assertEquals("2c1c4e57937b046f78d2bf937153257f6bd8a995", addr); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/common/utils/EncoderTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class EncoderTest { 7 | @Test 8 | public void testEncoderTopic() { 9 | Assert.assertEquals(Encoder.encodeEventTopic("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihello"), Encoder.encodeEventTopic("iiiiiiiiiiiiiiiiiiiiiiiiiiihello")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/common/utils/FVMAbiTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.common.utils; 2 | 3 | import org.junit.Test; 4 | 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | 8 | import static org.junit.Assert.*; 9 | 10 | public class FVMAbiTest { 11 | 12 | @Test 13 | public void fromJson() throws IOException { 14 | InputStream inputStream1 = Thread.currentThread().getContextClassLoader().getResourceAsStream("fvm-contract/set_hash/contract.json"); 15 | String abiStr = FileUtil.readFile(inputStream1); 16 | FVMAbi abi = FVMAbi.fromJson(abiStr); 17 | // System.out.println(abi.getMethods().get(0).input.get(0).ty); 18 | } 19 | } -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/crypto/CipherUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | import java.util.Arrays; 7 | 8 | public class CipherUtilTest { 9 | 10 | private final String origin = "hyperchain"; 11 | private final String originPas = "hpc"; 12 | 13 | @Test 14 | public void testDES() { 15 | byte[] data = CipherUtil.encryptDES(origin.getBytes(), originPas); 16 | System.out.println(Arrays.toString(data)); 17 | byte[] dataDe = CipherUtil.decryptDES(data, originPas); 18 | Assert.assertEquals(origin, new String(dataDe)); 19 | } 20 | 21 | @Test 22 | public void testAES() { 23 | byte[] data = CipherUtil.encryptAES(origin.getBytes(), originPas); 24 | byte[] dataDe = CipherUtil.decryptAES(data, originPas); 25 | Assert.assertEquals(origin, new String(dataDe)); 26 | } 27 | 28 | @Test 29 | public void test3DES() { 30 | byte[] data = CipherUtil.encrypt3DES(origin.getBytes(), originPas); 31 | byte[] dataDe = CipherUtil.decrypt3DES(data, originPas); 32 | Assert.assertEquals(origin, new String(dataDe)); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/crypto/HashUtilTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto; 2 | 3 | import cn.hyperchain.sdk.common.utils.ByteUtil; 4 | import org.junit.Test; 5 | 6 | import java.util.Arrays; 7 | 8 | import static org.junit.Assert.assertEquals; 9 | 10 | public class HashUtilTest { 11 | 12 | @Test 13 | public void sha3() { 14 | String expected2 = "9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658"; 15 | String result2 = ByteUtil.toHex(HashUtil.sha3("test".getBytes())); 16 | System.out.println(Arrays.toString(ByteUtil.fromHex(expected2))); 17 | assertEquals(expected2, result2); 18 | } 19 | 20 | @Test 21 | public void test() { 22 | String hex = "36f028580bb02cc8272a9a020f4200e346e276ae664e45ee80745574e2f5ab80"; 23 | System.out.println(Arrays.toString(ByteUtil.fromHex(hex))); 24 | 25 | System.out.println(Arrays.toString(HashUtil.sha3("test".getBytes()))); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/crypto/sm/SM3Test.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.sm; 2 | 3 | import cn.hyperchain.sdk.common.utils.ByteUtil; 4 | import cn.hyperchain.sdk.crypto.sm.sm3.SM3Util; 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | public class SM3Test { 9 | 10 | private static String sourceData = "hyperchain"; 11 | 12 | @Test 13 | public void test() { 14 | byte[] hash = SM3Util.hash(sourceData.getBytes()); 15 | Assert.assertEquals("96c8aaf27e596fc10922e13fc113af107717d862cc6ff4aab42161cd6a9250b6", ByteUtil.toHex(hash)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/crypto/sm/SM4Test.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.crypto.sm; 2 | 3 | import cn.hyperchain.sdk.common.utils.ByteUtil; 4 | import cn.hyperchain.sdk.crypto.sm.sm4.SM4Util; 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | public class SM4Test { 9 | 10 | @Test 11 | public void sm4Test() throws Exception { 12 | String plainText = "hyperchain sm4"; 13 | 14 | System.out.println("CBC模式"); 15 | byte[] data = SM4Util.encryptCbcPadding(plainText.getBytes(), "11111"); 16 | System.out.println("密文: " + ByteUtil.toHex(data)); 17 | 18 | byte[] dataDe = SM4Util.decryptCbcPadding(data, "11111"); 19 | System.out.println("明文: " + new String(dataDe)); 20 | Assert.assertEquals(plainText, new String(dataDe)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/hvm/ContractInvoke.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.hvm; 2 | 3 | import cn.hyperchain.contract.BaseInvoke; 4 | import cn.hyperchain.logic.IContractList; 5 | import cn.hyperchain.logic.entity.Person; 6 | import cn.hyperchain.utils.Common; 7 | 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * @author Lam 12 | * @ClassName ContractInvoke 13 | * @date 2019-07-19 14 | */ 15 | public class ContractInvoke implements BaseInvoke { 16 | 17 | public String invoke(IContractList iContractList) { 18 | ArrayList personArrayList = Common.listData(); 19 | iContractList.add(0, personArrayList.get(0)); 20 | iContractList.add(1, personArrayList.get(1)); 21 | iContractList.add(2, personArrayList.get(2)); 22 | 23 | iContractList.add(personArrayList.get(0)); 24 | iContractList.add(personArrayList.get(1)); 25 | iContractList.add(personArrayList.get(2)); 26 | 27 | if (iContractList.sizeList() != 9) { 28 | return "ERROR: size errored when insert data!\n"; 29 | } 30 | 31 | return null; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/provider/ProviderManagerTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.provider; 2 | 3 | import org.junit.Before; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.*; 7 | 8 | public class ProviderManagerTest { 9 | public ProviderManager providerManager; 10 | public static String DEFAULT_URL = "localhost:8081"; 11 | 12 | @Before 13 | public void setUp() throws Exception { 14 | DefaultHttpProvider defaultHttpProvider = new DefaultHttpProvider.Builder().setUrl(DEFAULT_URL).build(); 15 | providerManager = ProviderManager.createManager(defaultHttpProvider); 16 | } 17 | 18 | @Test 19 | public void send() { 20 | } 21 | 22 | @Test 23 | public void sendRequest() { 24 | } 25 | } -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/transaction/TxVersionTest.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.transaction; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class TxVersionTest { 7 | 8 | @Test 9 | public void testTxVersionCompare() { 10 | Assert.assertTrue(TxVersion.TxVersion20.isGreaterOrEqual(TxVersion.TxVersion20)); 11 | Assert.assertTrue(TxVersion.TxVersion20.isGreaterOrEqual(TxVersion.TxVersion10)); 12 | Assert.assertTrue(TxVersion.TxVersion34.isGreaterOrEqual(TxVersion.TxVersion25)); 13 | Assert.assertTrue(!TxVersion.TxVersion25.isGreaterOrEqual(TxVersion.TxVersion26)); 14 | Assert.assertTrue(!TxVersion.TxVersion25.isGreaterOrEqual(TxVersion.TxVersion30)); 15 | Assert.assertTrue(!TxVersion.TxVersion30.equal(TxVersion.TxVersion34)); 16 | Assert.assertTrue(TxVersion.TxVersion30.equal(TxVersion.TxVersion30)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/utils/bean/Animal.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.utils.bean; 2 | 3 | /** 4 | * @author Lam 5 | * @ClassName Animal 6 | * @date 2020/1/2 7 | */ 8 | public interface Animal { 9 | String name(); 10 | } 11 | -------------------------------------------------------------------------------- /src/test/java/cn/hyperchain/sdk/utils/bean/Cat.java: -------------------------------------------------------------------------------- 1 | package cn.hyperchain.sdk.utils.bean; 2 | 3 | /** 4 | * @author Lam 5 | * @ClassName Cat 6 | * @date 2020/1/2 7 | */ 8 | public class Cat implements Animal { 9 | @Override 10 | public String name() { 11 | return "cat1"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/test/java/cn/test/hvm/ContractInvoke.java: -------------------------------------------------------------------------------- 1 | package cn.test.hvm; 2 | 3 | import cn.hyperchain.contract.BaseInvoke; 4 | import cn.test.logic.IContractList; 5 | import cn.test.logic.entity.Person; 6 | import cn.test.utils.Common; 7 | 8 | import java.util.ArrayList; 9 | 10 | /** 11 | * @author Lam 12 | * @ClassName ContractInvoke 13 | * @date 2019-07-19 14 | */ 15 | public class ContractInvoke implements BaseInvoke { 16 | 17 | public String invoke(IContractList iContractList) { 18 | ArrayList personArrayList = Common.listData(); 19 | iContractList.add(0, personArrayList.get(0)); 20 | iContractList.add(1, personArrayList.get(1)); 21 | iContractList.add(2, personArrayList.get(2)); 22 | 23 | iContractList.add(personArrayList.get(0)); 24 | iContractList.add(personArrayList.get(1)); 25 | iContractList.add(personArrayList.get(2)); 26 | 27 | if (iContractList.sizeList() != 9) { 28 | return "ERROR: size errored when insert data!\n"; 29 | } 30 | 31 | return null; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/test/java/cn/test/logic/IContractList.java: -------------------------------------------------------------------------------- 1 | package cn.test.logic; 2 | 3 | import cn.hyperchain.contract.BaseContractInterface; 4 | import cn.test.logic.entity.Person; 5 | 6 | import java.util.Iterator; 7 | import java.util.List; 8 | import java.util.ListIterator; 9 | 10 | public interface IContractList extends BaseContractInterface { 11 | int sizeList(); 12 | 13 | Person get(int idx); 14 | 15 | boolean isListEmpty(); 16 | 17 | void add(Person person); 18 | 19 | void add(int idx, Person person); 20 | 21 | void remove(Person person); 22 | 23 | void remove(int idx); 24 | 25 | void removeAll(List plist); 26 | 27 | void addAll(List lists); 28 | 29 | void addAll(int idx, List lists); 30 | 31 | void set(int idx, Person person); 32 | 33 | void setWithoutSet(int idx, Person person); 34 | 35 | int indexOf(Person person); 36 | 37 | int lastIndexOf(Person person); 38 | 39 | boolean contains(Person person); 40 | 41 | boolean containsAll(List plist); 42 | 43 | Iterator iterator(); 44 | 45 | ListIterator listIterator(); 46 | 47 | ListIterator listIterator(int index); 48 | 49 | Object[] toArray(); 50 | 51 | Person[] toArray(Person[] a); 52 | 53 | boolean retainAll(List list); 54 | 55 | List subList(int fromIndex, int toIndex); 56 | } 57 | -------------------------------------------------------------------------------- /src/test/java/cn/test/logic/IContractMapExtra.java: -------------------------------------------------------------------------------- 1 | package cn.test.logic; 2 | 3 | import cn.hyperchain.contract.BaseContractInterface; 4 | import cn.test.logic.entity.Person; 5 | 6 | /** 7 | * description: 8 | * date 2019-05-30 9 | * created by dong 10 | */ 11 | public interface IContractMapExtra extends BaseContractInterface { 12 | 13 | String computeIfAbsent(Person person); 14 | 15 | String computeIfPresent(Person person); 16 | 17 | String compute(Person person); 18 | 19 | void replaceAll(); 20 | 21 | void merge(Person person, String string); 22 | 23 | void forEach(); 24 | 25 | void comparingByValue(); 26 | } 27 | -------------------------------------------------------------------------------- /src/test/java/cn/test/logic/IContractMapSTP.java: -------------------------------------------------------------------------------- 1 | package cn.test.logic; 2 | 3 | import cn.hyperchain.contract.BaseContractInterface; 4 | import cn.test.logic.entity.Person; 5 | 6 | import java.util.Collection; 7 | import java.util.Map; 8 | import java.util.Set; 9 | 10 | public interface IContractMapSTP extends BaseContractInterface { 11 | int sizeMapStrToPerson(); 12 | 13 | Person getFromStr(String string); 14 | 15 | boolean isMapStrToPersonEmpty(); 16 | 17 | void putStrToPerson(String string, Person person); 18 | 19 | void putIfAbsentStrToPerson(String string, Person person); 20 | 21 | void putAllStrToPerson(Map map); 22 | 23 | 24 | void removeStrToPerson(String string, Person person); 25 | 26 | void removeStrToPerson(String string); 27 | 28 | 29 | void setStrToPerson(String string, Person person); 30 | 31 | void setStrToPersonWithoutPut(String string, Person person); 32 | 33 | boolean containsKeyStrToPerson(String key); 34 | 35 | boolean containsValueStrToPerson(Person person); 36 | 37 | Set> entrySetStrToPerson(); 38 | 39 | Set keySetStrToPerson(); 40 | 41 | Collection valuesStrToPerson(); 42 | 43 | boolean isUpdatedSTP(); 44 | 45 | Map modifiedSTP(); 46 | 47 | Person getOrDdefaultSTP(String string, Person defaultKey); 48 | 49 | Person replaceSTP(String string, Person person); 50 | 51 | boolean replaceOldSTP(String string, Person oldV, Person newV); 52 | } 53 | -------------------------------------------------------------------------------- /src/test/resources/cert.cer: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICJzCCAcugAwIBAgIGAKVzDW5GMAwGCCqBHM9VAYN1BQAwNjELMAkGA1UEBhMC 3 | Q04xDzANBgNVBAoMBkNDQlNNMjEWMBQGA1UEAwwNQ0NCU00yQ0FDSElMRDAeFw0x 4 | OTEyMDMwNDI0NTJaFw0yNDEyMDMwODI0NTJaMEkxCzAJBgNVBAYTAkNOMQ8wDQYD 5 | VQQKDAZDQ0JTTTIxEDAOBgNVBAsMB05FVEJBTksxFzAVBgNVBAMMDkdNeTAwMDA2 6 | MjQ5NDA4MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEMR6HQPDH9i2vrvkLWde4 7 | 52LqQecTv9GRgxq79uL9AyJ0DnqD8a5eOFVp3B3t25+H8ew7hDKU1gUwtl3uI/lN 8 | Q6OBrzCBrDAfBgNVHSMEGDAWgBSHLgoc5iRxncOU/Ns7wO1n8nFmwDAJBgNVHRME 9 | AjAAMFIGA1UdHwRLMEkwR6BFoEOkQTA/MREwDwYDVQQDDAhjcmw2MTcxOTEMMAoG 10 | A1UECwwDY3JsMQ8wDQYDVQQKDAZDQ0JTTTIxCzAJBgNVBAYTAkNOMAsGA1UdDwQE 11 | AwIHgDAdBgNVHQ4EFgQUAxPbjiJPDy/l08T7cBhPqnuU5R4wDAYIKoEcz1UBg3UF 12 | AANIADBFAiEArX2MT69kc4ewchQozzxQh5ZjsIRQVgzS4RHE9t4KQlgCIGhzifyM 13 | KHT9B1gOSa7+JT0nLKEnmyN1CKZ0RNou6P9J 14 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIB/DCCAaGgAwIBAgIBATAKBggqhkjOPQQDAjBMMRMwEQYDVQQKEwpIeXBlcmNo 3 | YWluMRYwFAYDVQQDEw1oeXBlcmNoYWluLmNuMRAwDgYDVQQqEwdEZXZlbG9wMQsw 4 | CQYDVQQGEwJaSDAgFw0xODA3MzAwNDE4MjNaGA8yMTE4MDcwNjA1MTgyM1owTDET 5 | MBEGA1UEChMKSHlwZXJjaGFpbjEWMBQGA1UEAxMNaHlwZXJjaGFpbi5jbjEQMA4G 6 | A1UEKhMHRGV2ZWxvcDELMAkGA1UEBhMCWkgwWTATBgcqhkjOPQIBBggqhkjOPQMB 7 | BwNCAAT5VFjxCzwrXewRmUVeJyT+s29LHdLxfOVL6q0VxN+vhlvixG0RdEWAJ5dH 8 | dzMO6JNDdYeddlsO+gjoYg+UwnDpo3IwcDAOBgNVHQ8BAf8EBAMCAgQwJgYDVR0l 9 | BB8wHQYIKwYBBQUHAwIGCCsGAQUFBwMBBgIqAwYDgQsBMAwGA1UdEwEB/wQCMAAw 10 | DQYDVR0OBAYEBAECAwQwGQYDKlYBBBJoeXBlcmNoYWluX3Nka2NlcnQwCgYIKoZI 11 | zj0EAwIDSQAwRgIhAKM1p9YFLEBk7YdX0eskh8776lcb3aZWJdzU+DcRrwToAiEA 12 | yjqkwzwDnaszQiP7dprvyK7NZs/I3xb/axp4yp5pMR4= 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIJf6LArVEHsyxNDRB0x8VdGr118wc0TYF/gjZF/NE3vAoAoGCCqGSM49 3 | AwEHoUQDQgAE+VRY8Qs8K13sEZlFXick/rNvSx3S8XzlS+qtFcTfr4Zb4sRtEXRF 4 | gCeXR3czDuiTQ3WHnXZbDvoI6GIPlMJw6Q== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert_guomi.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIB+zCCAaGgAwIBAgIBATAKBggqgRzPVQGDdTBMMRMwEQYDVQQKEwpIeXBlcmNo 3 | YWluMRYwFAYDVQQDEw1oeXBlcmNoYWluLmNuMRAwDgYDVQQqEwdEZXZlbG9wMQsw 4 | CQYDVQQGEwJaSDAgFw0xODA3MzAwODE5NTRaGA8yMTE4MDcwNjA5MTk1NFowTDET 5 | MBEGA1UEChMKSHlwZXJjaGFpbjEWMBQGA1UEAxMNaHlwZXJjaGFpbi5jbjEQMA4G 6 | A1UEKhMHRGV2ZWxvcDELMAkGA1UEBhMCWkgwWTATBgcqhkjOPQIBBggqgRzPVQGC 7 | LQNCAATn/F55M+KedAbBs0eCr6E/C1bo8SBV5Y0mp0cFJfsgwzqIIUOUP60YJiXC 8 | 2NUOEo4a0eEamoMriLcWNg3DnrT5o3IwcDAOBgNVHQ8BAf8EBAMCAgQwJgYDVR0l 9 | BB8wHQYIKwYBBQUHAwIGCCsGAQUFBwMBBgIqAwYDgQsBMAwGA1UdEwEB/wQCMAAw 10 | DQYDVR0OBAYEBAECAwQwGQYDKlYBBBJoeXBlcmNoYWluX3Nka2NlcnQwCgYIKoEc 11 | z1UBg3UDSAAwRQIgTlTv0NNCpQZjomMw7HShfn5j2wl9IwEI+RvvIIMou4cCIQCz 12 | idtaLbYncuMXsXeE52d4EDefIxCp5ImzJn4HWUCY4g== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert_guomi.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIC2+sHFHiloHKcKCaQiW5JqNWmL1L68TiVet6exUVufIoAoGCCqBHM9V 3 | AYItoUQDQgAE5/xeeTPinnQGwbNHgq+hPwtW6PEgVeWNJqdHBSX7IMM6iCFDlD+t 4 | GCYlwtjVDhKOGtHhGpqDK4i3FjYNw560+Q== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert_ra.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIC5jCCAoqgAwIBAgIFQAOIVEQwDAYIKoEcz1UBg3UFADBhMQswCQYDVQQGEwJDTjEwMC4GA 3 | 1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSAwHgYDVQQDDB 4 | dDRkNBIEFDUyBURVNUIFNNMiBPQ0EzMTAeFw0xODA3MjYyMTIyNTZaFw0yMjExMjkxNjAwMDB 5 | aMHUxCzAJBgNVBAYTAkNOMRUwEwYDVQQKDAxDRkNBIFRFU1QgQ0ExETAPBgNVBAsMCExvY2Fs 6 | IFJBMRUwEwYDVQQLDAxJbmRpdmlkdWFsLTIxJTAjBgNVBAMMHDA1MUBoeXBlcmNoYWluQFp0Z 7 | XN0X2d1b21pQDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATz3VTW08yzWKF1flnHVUKvR+ 8 | fH4Ad88rmvKCTrP1f7AhWkTu2wIR0qWqBwL+6n5ruaaoAMFs5ng3tsN6NSwR+Go4IBFzCCARM 9 | wPwYIKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzABhiNodHRwOi8vb2NzcHRlc3QuY2ZjYS5jb20u 10 | Y246ODAvb2NzcDAfBgNVHSMEGDAWgBQEx7z5WQFpPow0NiBiGDzevLW7DDAMBgNVHRMBAf8EA 11 | jAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly8yMTAuNzQuNDIuMy9PQ0EzMS9TTTIvY3JsMi 12 | 5jcmwwGwYDKlYBBBQMEmh5cGVyY2hhaW5fc2RrY2VydDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0 13 | OBBYEFHAIRCrwlOK9HRWMpcLnHW2dyfVXMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD 14 | BDAMBggqgRzPVQGDdQUAA0gAMEUCIBT4DmQQvuMnRCic/6IuH/KcAmMQoCaTfikwRHZRc2PFA 15 | iEAgtzzLc3wZkHqspJFZmhmzs1Y+BfnjuB3dro0iP/sHwA= 16 | -----END CERTIFICATE----- -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/sdkcert_ra.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEICgja2HcZxJH7wCtZszZfcB3SjFJkF4ayno25IcreMfyoAoGCCqBHM9V 3 | AYItoUQDQgAE891U1tPMs1ihdX5Zx1VCr0fnx+AHfPK5rygk6z9X+wIVpE7tsCEd 4 | KlqgcC/up+a7mmqADBbOZ4N7bDejUsEfhg== 5 | -----END EC PRIVATE KEY----- -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/unique_guomi.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIHxlKJW7h/xJ5FvEZ5t9T1jIBvNtfmLJXuTc9uyC25BLoAoGCCqBHM9V 3 | AYItoUQDQgAEARmvpIn3BuuI/6b6h7H5Yboaatftc9p0A9qJgzgWc1tnQCyk7+R1 4 | vzJyneza5xHTKp32ZZ2PLFB58gLWNlORMw== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/guomi/unique_guomi.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEARmvpIn3BuuI/6b6h7H5Yboaatft 3 | c9p0A9qJgzgWc1tnQCyk7+R1vzJyneza5xHTKp32ZZ2PLFB58gLWNlORMw== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /src/test/resources/certs/sdk1.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICODCCAeSgAwIBAgIIAKkLQNKjcrMwCgYIKoZIzj0EAwIwdDEJMAcGA1UECBMA 3 | MQkwBwYDVQQHEwAxCTAHBgNVBAkTADEJMAcGA1UEERMAMQ4wDAYDVQQKEwVmbGF0 4 | bzEJMAcGA1UECxMAMQ4wDAYDVQQDEwVub2RlMTELMAkGA1UEBhMCWkgxDjAMBgNV 5 | BCoTBWVjZXJ0MB4XDTIxMDMxMDAwMDAwMFoXDTI1MDMxMDAwMDAwMFowPzELMAkG 6 | A1UEBhMCQ04xDjAMBgNVBAoTBWZsYXRvMQ4wDAYDVQQDEwVub2RlMTEQMA4GA1UE 7 | KhMHc2RrY2VydDBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABNgREtzRm2zYJW6K 8 | WPRIlrXtnz5YcpSpUtNLDCS8xk8qWe/hCl3qfJPdb/Zs7HYHNhRCw6YoWi/NUt0n 9 | g2B0xoWjgZQwgZEwDgYDVR0PAQH/BAQDAgHuMDEGA1UdJQQqMCgGCCsGAQUFBwMC 10 | BggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEMAwGA1UdEwEB/wQCMAAwHQYD 11 | VR0OBBYEFJwLsjUoU3ZGpoI6hpvYwaEEuqt4MA8GA1UdIwQIMAaABAECAwQwDgYD 12 | KlYBBAdzZGtjZXJ0MAoGCCqGSM49BAMCA0IAnehXd5B6QnTqKDig6aCyUUrBNpxH 13 | 8VqSd1/bFvjFsH5va6w00dIfd1y8zbj3JTVTzDyUWOh2thX8pFMnN7NlxgE= 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /src/test/resources/certs/sdk1.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQECIFWGC/2d+412FeafHOG6Be8GDfhC86+iWZ+IZc/onnMIoAoGCCqBHM9V 3 | AYItoUQDQgAE2BES3NGbbNglbopY9EiWte2fPlhylKlS00sMJLzGTypZ7+EKXep8 4 | k91v9mzsdgc2FELDpihaL81S3SeDYHTGhQ== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/sdkcert.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIB+zCCAaGgAwIBAgIBATAKBggqhkjOPQQDAjBMMRMwEQYDVQQKEwpIeXBlcmNo 3 | YWluMRYwFAYDVQQDEw1oeXBlcmNoYWluLmNuMRAwDgYDVQQqEwdEZXZlbG9wMQsw 4 | CQYDVQQGEwJaSDAgFw0xOTA4MDYwMzE5MTdaGA8yMTE5MDcxMzA0MTkxN1owTDET 5 | MBEGA1UEChMKSHlwZXJjaGFpbjEWMBQGA1UEAxMNaHlwZXJjaGFpbi5jbjEQMA4G 6 | A1UEKhMHRGV2ZWxvcDELMAkGA1UEBhMCWkgwWTATBgcqhkjOPQIBBggqhkjOPQMB 7 | BwNCAAQ6H62PGs3uOREbcAM32bh4Y5oKTbHfNq6XPlDB5i7y3JL6Pp6V+SCubjH8 8 | YNv//bdSTvYqjthFT4y0NWurs+aJo3IwcDAOBgNVHQ8BAf8EBAMCAoQwJgYDVR0l 9 | BB8wHQYIKwYBBQUHAwIGCCsGAQUFBwMBBgIqAwYDgQsBMAwGA1UdEwEB/wQCMAAw 10 | DQYDVR0OBAYEBAECAwQwGQYDKlYBBBJoeXBlcmNoYWluX3Nka2NlcnQwCgYIKoZI 11 | zj0EAwIDSAAwRQIhAOpaO0pij9FISWrG4MO95YnTxOCcTHSjdP2FsQENgqAzAiAS 12 | /hR0dwhDYzOovaMXNayezY0p/OxP3vr8kck/W+UDfw== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /src/test/resources/certs/sdkcert.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIEWYCGYXXvVb/9xOw+YQkYkCRMBWp52AewAJszUZc3IMoAoGCCqGSM49 3 | AwEHoUQDQgAEOh+tjxrN7jkRG3ADN9m4eGOaCk2x3zaulz5QweYu8tyS+j6elfkg 4 | rm4x/GDb//23Uk72Ko7YRU+MtDVrq7PmiQ== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/tls/tls_peer.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICDTCCAbOgAwIBAgIBATAKBggqhkjOPQQDAjBPMRMwEQYDVQQKEwpIeXBlcmNo 3 | YWluMRYwFAYDVQQDEw1oeXBlcmNoYWluLmNuMRMwEQYDVQQqEwpEZXZlbG9wMTEx 4 | MQswCQYDVQQGEwJaSDAgFw0xODA2MTIxMzAyNDRaGA8yMTE4MDUxOTE0MDI0NFow 5 | TDETMBEGA1UEChMKSHlwZXJjaGFpbjEWMBQGA1UEAxMNaHlwZXJjaGFpbi5jbjEQ 6 | MA4GA1UEKhMHRGV2ZWxvcDELMAkGA1UEBhMCWkgwWTATBgcqhkjOPQIBBggqhkjO 7 | PQMBBwNCAAQPX4PjCNgjqbEAuwy1QBy86AQIh9l/5EtsTUwKIg9U1fbL3nlSBgCa 8 | z0btXs3Hf44/aCtB9AJh0YA6kpK2OCfko4GAMH4wDgYDVR0PAQH/BAQDAgKEMCYG 9 | A1UdJQQfMB0GCCsGAQUFBwMCBggrBgEFBQcDAQYCKgMGA4ELATAMBgNVHRMBAf8E 10 | AjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwFgYDKgMEBA9leHRy 11 | YSBleHRlbnNpb24wCgYIKoZIzj0EAwIDSAAwRQIgSoy5R8MvlSnYSpv67L8ET/Wa 12 | 1MUuu31iOB2x1mYFi2kCIQDAOVRwpe0n8cslmfmTESxTLJslE0+OD2OJNtJv5UIa 13 | zA== 14 | -----END CERTIFICATE----- 15 | -------------------------------------------------------------------------------- /src/test/resources/certs/tls/tls_peer.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIMgMLwOICyZGMN58Fzqr9L8gidsrtqLrJw1zEJvPmOyFoAoGCCqGSM49 3 | AwEHoUQDQgAED1+D4wjYI6mxALsMtUAcvOgECIfZf+RLbE1MCiIPVNX2y955UgYA 4 | ms9G7V7Nx3+OP2grQfQCYdGAOpKStjgn5A== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/tls/tlsca.ca: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICATCCAaegAwIBAgIBATAKBggqhkjOPQQDAzBPMRMwEQYDVQQKEwpIeXBlcmNo 3 | YWluMRYwFAYDVQQDEw1oeXBlcmNoYWluLmNuMRMwEQYDVQQqEwpEZXZlbG9wMTEx 4 | MQswCQYDVQQGEwJaSDAgFw0xODA2MTIxMzAyNDRaGA8yMTE4MDUxOTE0MDI0NFow 5 | TzETMBEGA1UEChMKSHlwZXJjaGFpbjEWMBQGA1UEAxMNaHlwZXJjaGFpbi5jbjET 6 | MBEGA1UEKhMKRGV2ZWxvcDExMTELMAkGA1UEBhMCWkgwWTATBgcqhkjOPQIBBggq 7 | hkjOPQMBBwNCAASiLHjzVg0TX9zEntpfbd6aQZEY/ycQJlEuv3TKMslDcOGH1J1g 8 | X9iR++3SGhIsFRJ6jr4ipb+gep967li0BV5so3IwcDAOBgNVHQ8BAf8EBAMCAgQw 9 | JgYDVR0lBB8wHQYIKwYBBQUHAwIGCCsGAQUFBwMBBgIqAwYDgQsBMA8GA1UdEwEB 10 | /wQFMAMBAf8wDQYDVR0OBAYEBAECAwQwFgYDKgMEBA9leHRyYSBleHRlbnNpb24w 11 | CgYIKoZIzj0EAwMDSAAwRQIhAPLTtecR6IA/DSTGF9J3hGXU8uhc3tk0ACIvc973 12 | WxBCAiBw0VC2bwmIJp2KyM5/8Yezqr1htx4xpB8F/Fw2LaNpnQ== 13 | -----END CERTIFICATE----- 14 | -------------------------------------------------------------------------------- /src/test/resources/certs/unique.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHcCAQEEIN5G6q9FTAFZ/5EhjRMeQN8Yos22ab8IP+R5ylPekESooAoGCCqGSM49 3 | AwEHoUQDQgAEm/CwHCXhCDsyc8/Pw0O9e918CXwB7HV+2IQTlihvJsOR0Q6Lcjpa 4 | OQT0qEY3h54oDGNhiQOW2cEpPNrQz9+4jA== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /src/test/resources/certs/unique.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PUBLIC KEY----- 2 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEm/CwHCXhCDsyc8/Pw0O9e918CXwB 3 | 7HV+2IQTlihvJsOR0Q6LcjpaOQT0qEY3h54oDGNhiQOW2cEpPNrQz9+4jA== 4 | -----END EC PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /src/test/resources/fvm-abi/test-abi-1.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "test-1", 11 | "input": [ 12 | { 13 | "type_id": 0 14 | } 15 | ], 16 | "output": [ 17 | { 18 | "type_id": 0 19 | } 20 | ] 21 | } 22 | ], 23 | "types": [ 24 | { 25 | "id": 0, 26 | "type": "struct", 27 | "fields": [ 28 | { 29 | "type_id": 1 30 | }, 31 | { 32 | "type_id": 2 33 | }, 34 | { 35 | "type_id": 3 36 | } 37 | ] 38 | }, 39 | { 40 | "id": 1, 41 | "type": "primitive", 42 | "primitive": "u32" 43 | }, 44 | { 45 | "id": 2, 46 | "type": "primitive", 47 | "primitive": "str" 48 | }, 49 | { 50 | "id": 3, 51 | "type": "vec", 52 | "fields": [ 53 | { 54 | "type_id": 4 55 | } 56 | ] 57 | }, 58 | { 59 | "id": 4, 60 | "type": "vec", 61 | "fields": [ 62 | { 63 | "type_id": 2 64 | } 65 | ] 66 | } 67 | ] 68 | } 69 | -------------------------------------------------------------------------------- /src/test/resources/fvm-abi/test-abi-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "test-1", 11 | "input": [ 12 | { 13 | "type_id": 0 14 | } 15 | ], 16 | "output": [ 17 | { 18 | "type_id": 0 19 | } 20 | ] 21 | } 22 | ], 23 | "types": [ 24 | { 25 | "id": 0, 26 | "type": "struct", 27 | "fields": [ 28 | { 29 | "type_id": 1 30 | }, 31 | { 32 | "type_id": 2 33 | }, 34 | { 35 | "type_id": 3 36 | } 37 | ] 38 | }, 39 | { 40 | "id": 1, 41 | "type": "primitive", 42 | "primitive": "u32" 43 | }, 44 | { 45 | "id": 2, 46 | "type": "primitive", 47 | "primitive": "str" 48 | }, 49 | { 50 | "id": 3, 51 | "type": "vec", 52 | "fields": [ 53 | { 54 | "type_id": 4 55 | } 56 | ] 57 | }, 58 | { 59 | "id": 4, 60 | "type": "array", 61 | "fields": [ 62 | { 63 | "type_id": 2 64 | } 65 | ], 66 | "array_len": 3 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/make_student/contract.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "make_student", 11 | "input": [ 12 | { 13 | "type_id": 1 14 | }, 15 | { 16 | "type_id": 1 17 | } 18 | ], 19 | "output": [ 20 | { 21 | "type_id": 1 22 | } 23 | ] 24 | } 25 | ], 26 | "types": [ 27 | { 28 | "id": 0, 29 | "type": "primitive", 30 | "primitive": "u64" 31 | }, 32 | { 33 | "id": 1, 34 | "type": "struct", 35 | "fields": [ 36 | { 37 | "type_id": 0 38 | } 39 | ] 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/make_student/lib.rs: -------------------------------------------------------------------------------- 1 | use macros::contract; 2 | use macros::storage; 3 | use fvm_std::runtime; 4 | use scale::{Decode, Encode}; 5 | use fvm_std::collections::hyper_map::HyperMap; 6 | 7 | #[storage] 8 | pub struct MyContract { 9 | 10 | } 11 | 12 | // #[derive(TypeInfo)] 13 | #[derive(Encode, Decode)] 14 | pub struct Student { 15 | age: u64, 16 | } 17 | 18 | #[contract] 19 | impl MyContract { 20 | /// new方法是部署时的初始化方法,仅被调用一次 21 | fn new() -> Self{ 22 | Self{ 23 | 24 | } 25 | } 26 | 27 | pub fn make_student(&mut self, student: Student, _list: Student) -> Student { 28 | Student { 29 | age: student.age + _list.age 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/make_student/make_student.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/make_student/make_student.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/set_hash/SetHash-gc.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/set_hash/SetHash-gc.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/set_hash/SetHash.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/set_hash/SetHash.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/set_hash/contract.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "SetHash", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "set_hash", 11 | "input": [ 12 | { 13 | "type_id": 0 14 | }, 15 | { 16 | "type_id": 0 17 | } 18 | ], 19 | "output": [] 20 | }, 21 | { 22 | "name": "get_hash", 23 | "input": [ 24 | { 25 | "type_id": 0 26 | } 27 | ], 28 | "output": [ 29 | { 30 | "type_id": 1 31 | } 32 | ] 33 | } 34 | ], 35 | "types": [ 36 | { 37 | "id": 0, 38 | "type": "primitive", 39 | "primitive": "str" 40 | }, 41 | { 42 | "id": 1, 43 | "type": "primitive", 44 | "primitive": "str" 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/set_hash/lib.rs: -------------------------------------------------------------------------------- 1 | use macros::contract; 2 | use macros::storage; 3 | use fvm_std::runtime; 4 | use scale::{Decode, Encode}; 5 | use fvm_std::collections::hyper_map::HyperMap; 6 | 7 | #[storage] 8 | pub struct SetHash { 9 | map: HyperMap, 10 | } 11 | 12 | #[contract] 13 | impl SetHash { 14 | fn new() -> Self { 15 | Self { map: HyperMap::new() } 16 | } 17 | 18 | pub fn set_hash(&mut self, key: String, value: String) { 19 | self.map.insert(key, value); 20 | } 21 | 22 | pub fn get_hash(&mut self, key: String) -> &String { 23 | self.map.get(&key).unwrap(); 24 | } 25 | } 26 | 27 | #[cfg(test)] 28 | mod tests { 29 | #[test] 30 | fn it_works() { 31 | assert_eq!(2 + 2, 4); 32 | } 33 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/set_hash_advance/SetHash-Advanced.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/set_hash_advance/SetHash-Advanced.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/types/types_gc.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/types/types_gc.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/u64_test/contract.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "add", 11 | "input": [ 12 | { 13 | "type": "u64" 14 | }, 15 | { 16 | "type": "Vec < Vec < i64 > >" 17 | } 18 | ], 19 | "output": [ 20 | { 21 | "type": "Vec < i64 >" 22 | } 23 | ] 24 | }, 25 | { 26 | "name": "sub", 27 | "input": [ 28 | { 29 | "type": "u64" 30 | } 31 | ], 32 | "output": [ 33 | { 34 | "type": "u64" 35 | } 36 | ] 37 | }, 38 | { 39 | "name": "get", 40 | "input": [], 41 | "output": [ 42 | { 43 | "type": "u64" 44 | } 45 | ] 46 | }, 47 | { 48 | "name": "make_student", 49 | "input": [ 50 | { 51 | "type": "Student" 52 | }, 53 | { 54 | "type": "Student" 55 | } 56 | ], 57 | "output": [ 58 | { 59 | "type": "u64" 60 | } 61 | ] 62 | } 63 | ] 64 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/u64_test/simple_contract_gc.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/u64_test/simple_contract_gc.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/after-bad.rs: -------------------------------------------------------------------------------- 1 | use scale::{Decode, Encode}; 2 | 3 | use fvm_std::collections::hyper_map::HyperMap; 4 | use fvm_std::runtime; 5 | use macros::contract; 6 | use macros::storage; 7 | 8 | #[storage] 9 | pub struct MyContract { 10 | sum: u64, 11 | things: HyperMap 12 | } 13 | 14 | #[contract] 15 | impl MyContract { 16 | fn new() -> Self { 17 | let mut things = HyperMap::new(); 18 | things.insert("key001".to_string(), 5); 19 | 20 | Self { 21 | sum: 5, 22 | things: things 23 | } 24 | } 25 | 26 | pub fn set(&mut self, input: u64) { 27 | self.things.insert("key001".to_string(), input); 28 | 29 | } 30 | 31 | pub fn get(&mut self) -> u64 { 32 | self.sum 33 | } 34 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/after-bad.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/upgrade/after-bad.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/after-okay.rs: -------------------------------------------------------------------------------- 1 | use scale::{Decode, Encode}; 2 | 3 | use fvm_std::collections::hyper_map::HyperMap; 4 | use fvm_std::runtime; 5 | use macros::contract; 6 | use macros::storage; 7 | 8 | #[storage] 9 | pub struct MyContract { 10 | name: String, 11 | sum: u64, 12 | things: HyperMap, 13 | sum1: u64 14 | } 15 | 16 | #[contract] 17 | impl MyContract { 18 | fn new() -> Self { 19 | let mut things = HyperMap::new(); 20 | things.insert("key001".to_string(), 5); 21 | 22 | Self { 23 | name: "name".to_string(), 24 | sum: 5, 25 | things: things, 26 | sum1: 0 27 | } 28 | } 29 | 30 | pub fn set(&mut self, input: u64) { 31 | self.things.insert("key001".to_string(), input); 32 | } 33 | 34 | pub fn set_new(&mut self, input: u64) { 35 | self.sum1 = input 36 | } 37 | 38 | pub fn get_new(&mut self) -> u64 { 39 | self.sum1 40 | } 41 | 42 | pub fn get(&mut self) -> u64 { 43 | self.sum 44 | } 45 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/after-okay.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/upgrade/after-okay.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/before.rs: -------------------------------------------------------------------------------- 1 | use scale::{Decode, Encode}; 2 | 3 | use fvm_std::collections::hyper_map::HyperMap; 4 | use fvm_std::runtime; 5 | use macros::contract; 6 | use macros::storage; 7 | 8 | #[storage] 9 | pub struct MyContract { 10 | name: String, 11 | sum: u64, 12 | things: HyperMap 13 | } 14 | 15 | #[contract] 16 | impl MyContract { 17 | fn new() -> Self { 18 | let mut things = HyperMap::new(); 19 | things.insert("key001".to_string(), 5); 20 | 21 | Self { 22 | name: "name".to_string(), 23 | sum: 5, 24 | things: things 25 | } 26 | } 27 | 28 | pub fn set(&mut self, input: u64) { 29 | self.things.insert("key001".to_string(), input); 30 | 31 | } 32 | 33 | pub fn get(&mut self) -> u64 { 34 | self.sum 35 | } 36 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/before.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/fvm-contract/upgrade/before.wasm -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/contract-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "set", 11 | "input": [ 12 | { 13 | "type_id": 0 14 | } 15 | ], 16 | "output": [] 17 | }, 18 | { 19 | "name": "get", 20 | "input": [], 21 | "output": [ 22 | { 23 | "type_id": 0 24 | } 25 | ] 26 | }, 27 | { 28 | "name": "set_new", 29 | "input": [ 30 | { 31 | "type_id": 0 32 | } 33 | ], 34 | "output": [] 35 | }, 36 | { 37 | "name": "get_new", 38 | "input": [], 39 | "output": [ 40 | { 41 | "type_id": 0 42 | } 43 | ] 44 | } 45 | ], 46 | "types": [ 47 | { 48 | "id": 0, 49 | "type": "primitive", 50 | "primitive": "u64" 51 | } 52 | ] 53 | } -------------------------------------------------------------------------------- /src/test/resources/fvm-contract/upgrade/contract.json: -------------------------------------------------------------------------------- 1 | { 2 | "contract": { 3 | "name": "MyContract", 4 | "constructor": { 5 | "input": [] 6 | } 7 | }, 8 | "methods": [ 9 | { 10 | "name": "set", 11 | "input": [ 12 | { 13 | "type_id": 0 14 | } 15 | ], 16 | "output": [] 17 | }, 18 | { 19 | "name": "get", 20 | "input": [], 21 | "output": [ 22 | { 23 | "type_id": 0 24 | } 25 | ] 26 | } 27 | ], 28 | "types": [ 29 | { 30 | "id": 0, 31 | "type": "primitive", 32 | "primitive": "u64" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /src/test/resources/hvm-jar/contract-auction.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/hvm-jar/contract-auction.jar -------------------------------------------------------------------------------- /src/test/resources/hvm-jar/contractcollection-2.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/hvm-jar/contractcollection-2.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /src/test/resources/hvm-jar/credential-1.0-credential.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hyperchain/javasdk/be718eeb67e3119c2f39dbb7f90b439e9f1c62fa/src/test/resources/hvm-jar/credential-1.0-credential.jar -------------------------------------------------------------------------------- /src/test/resources/solidity/DSolc.sol: -------------------------------------------------------------------------------- 1 | contract DSolc { 2 | struct Bill{ 3 | bytes32 no; 4 | int amt; 5 | } 6 | 7 | mapping (string => mapping(string => Bill)) billMap; 8 | // Bill[][] billss; 9 | 10 | function putMap(string memory key1, string memory key2, int amt) public { 11 | Bill memory bill1 = Bill(amt); 12 | Bill memory bill2 = Bill(amt); 13 | billMap[key1][key2] = bill1; 14 | billMap[key2][key1] = bill2; 15 | billMap[key1][key1] = bill1; 16 | } 17 | 18 | function getMap(string memory key1, string memory key2) public returns(int) { 19 | mapping(string => Bill) bills = billMap[key1]; 20 | Bill storage bill = billMap[key1][key2]; 21 | 22 | Bill storage bill2 = bills[key2]; 23 | 24 | return bill.amt + bill2.amt; 25 | } 26 | } -------------------------------------------------------------------------------- /src/test/resources/solidity/DSolc_sol_DSolc.abi: -------------------------------------------------------------------------------- 1 | [{"constant":false,"inputs":[{"name":"key1","type":"string"},{"name":"key2","type":"string"}],"name":"getMap","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"key1","type":"string"},{"name":"key2","type":"string"},{"name":"amt","type":"int256"}],"name":"putMap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}] -------------------------------------------------------------------------------- /src/test/resources/solidity/sol1/ByteArrayTest.abi: -------------------------------------------------------------------------------- 1 | [{"constant":false,"inputs":[{"name":"a","type":"uint32[2]"},{"name":"b","type":"bool[2]"}],"name":"testArray","outputs":[{"name":"","type":"uint32[2]"},{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name1","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] -------------------------------------------------------------------------------- /src/test/resources/solidity/sol1/ByteArrayTest.bin: -------------------------------------------------------------------------------- 1 | 608060405234801561001057600080fd5b506040516102c33803806102c3833981018060405281019080805182019291905050508060009080519060200190610049929190610050565b50506100f5565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061009157805160ff19168380011785556100bf565b828001600101855582156100bf579182015b828111156100be5782518255916020019190600101906100a3565b5b5090506100cc91906100d0565b5090565b6100f291905b808211156100ee5760008160009055506001016100d6565b5090565b90565b6101bf806101046000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806368a1d11314610046575b600080fd5b34801561005257600080fd5b506100c560048036038101908080604001906002806020026040519081016040528092919082600260200280828437820191505050505091929192908060400190600280602002604051908101604052809291908260026020028082843782019150505050509192919290505050610132565b6040518083600260200280838360005b838110156100f05780820151818401526020810190506100d5565b5050505090500182600260200280838360005b8381101561011e578082015181840152602081019050610103565b505050509050019250505060405180910390f35b61013a61014f565b610142610171565b8383915091509250929050565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002906020820280388339808201915050905050905600a165627a7a72305820f12948e4313c2f3f86d6286eb71af35a4cab3ecf25a8fecd3868d2307b15c3860029 -------------------------------------------------------------------------------- /src/test/resources/solidity/sol1/ByteArrayTest.sol: -------------------------------------------------------------------------------- 1 | contract ByteArrayTest { 2 | bytes name; 3 | 4 | function ByteArrayTest(bytes name1) public { 5 | name = name1; 6 | } 7 | 8 | function testArray(uint32[2] a, bool[2] b) public returns (uint32[2], bool[2]){ 9 | return (a, b); 10 | } 11 | } -------------------------------------------------------------------------------- /src/test/resources/solidity/sol3/bytes32Test.abi: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": true, 4 | "inputs": [ 5 | { 6 | "name": "", 7 | "type": "uint256" 8 | } 9 | ], 10 | "name": "test", 11 | "outputs": [ 12 | { 13 | "name": "", 14 | "type": "bytes32" 15 | } 16 | ], 17 | "payable": false, 18 | "stateMutability": "view", 19 | "type": "function" 20 | }, 21 | { 22 | "constant": false, 23 | "inputs": [], 24 | "name": "getTest", 25 | "outputs": [ 26 | { 27 | "name": "", 28 | "type": "bytes32[]" 29 | } 30 | ], 31 | "payable": false, 32 | "stateMutability": "nonpayable", 33 | "type": "function" 34 | } 35 | ] 36 | -------------------------------------------------------------------------------- /src/test/resources/solidity/sol3/bytes32Test.bin: -------------------------------------------------------------------------------- 1 | 608060405234801561001057600080fd5b50610212806100206000396000f3fe60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329e99f0714610051578063a8cd0a80146100a0575b600080fd5b34801561005d57600080fd5b5061008a6004803603602081101561007457600080fd5b810190808035906020019092919050505061010c565b6040518082815260200191505060405180910390f35b3480156100ac57600080fd5b506100b561012f565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156100f85780820151818401526020810190506100dd565b505050509050019250505060405180910390f35b60008181548110151561011b57fe5b906000526020600020016000915090505481565b6060600060018002908060018154018082558091505090600182039060005260206000200160009091929091909150555060006002600102908060018154018082558091505090600182039060005260206000200160009091929091909150555060008054806020026020016040519081016040528092919081815260200182805480156101dc57602002820191906000526020600020905b8154815260200190600101908083116101c8575b505050505090509056fea165627a7a72305820bf07a0a761d5f64660349309b295fd5d5c31305f3c97c0984ba74121ab0ff5650029 2 | -------------------------------------------------------------------------------- /src/test/resources/solidity/sol3/bytes32Test.sol: -------------------------------------------------------------------------------- 1 | pragma solidity 0.5.0; 2 | contract Accumulator { 3 | bytes32[] public test; 4 | function getTest() public returns (bytes32[] memory) { 5 | test.push(bytes32(uint256(1))); 6 | test.push(bytes32(uint256(2))); 7 | return test; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/test/resources/solidity/sol4/setHash.abi: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "constant": false, 4 | "inputs": [ 5 | { 6 | "internalType": "string", 7 | "name": "key", 8 | "type": "string" 9 | }, 10 | { 11 | "internalType": "string", 12 | "name": "value", 13 | "type": "string" 14 | } 15 | ], 16 | "name": "insert", 17 | "outputs": [], 18 | "payable": false, 19 | "stateMutability": "nonpayable", 20 | "type": "function" 21 | }, 22 | { 23 | "constant": true, 24 | "inputs": [ 25 | { 26 | "internalType": "string", 27 | "name": "key", 28 | "type": "string" 29 | } 30 | ], 31 | "name": "get", 32 | "outputs": [ 33 | { 34 | "internalType": "string", 35 | "name": "", 36 | "type": "string" 37 | } 38 | ], 39 | "payable": false, 40 | "stateMutability": "view", 41 | "type": "function" 42 | } 43 | ] 44 | -------------------------------------------------------------------------------- /src/test/resources/solidity/sol4/setHash.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.5.0; 2 | contract SetHash{ 3 | mapping(string => string) hashMapping; 4 | 5 | function insert(string memory key,string memory value) public { 6 | hashMapping[key] = value; 7 | } 8 | 9 | function get(string memory key) public view returns(string memory) { 10 | return hashMapping[key]; 11 | } 12 | } 13 | --------------------------------------------------------------------------------