├── .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