Skip to content

Commit

Permalink
add poc
Browse files Browse the repository at this point in the history
  • Loading branch information
pengpengliu committed Jan 6, 2021
1 parent a039997 commit 5c86f67
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
4 changes: 4 additions & 0 deletions core/src/main/java/org/bitcorej/chain/ChainStateProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import org.bitcorej.chain.pi.PIStateProvider;
import org.bitcorej.chain.plc.PLCStateProvider;
import org.bitcorej.chain.pmeer.PMEERStateProvider;
import org.bitcorej.chain.poc.POCStateProvider;
import org.bitcorej.chain.qtum.QTUMStateProvider;
import org.bitcorej.chain.ripple.RippleStateProvider;
import org.bitcorej.chain.rvc.RVCStateProvider;
Expand Down Expand Up @@ -232,6 +233,9 @@ public class ChainStateProxy implements ChainState, UTXOState, USDTState, XMRSta
AKTStateProvider akt = new AKTStateProvider();
services.put("AKT", akt);
services.put("AKT_MAIN", akt);
POCStateProvider poc = new POCStateProvider();
services.put("POC", poc);
services.put("POC_MAIN", poc);
}

private ChainState provider;
Expand Down
59 changes: 59 additions & 0 deletions core/src/main/java/org/bitcorej/chain/poc/POCStateProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.bitcorej.chain.poc;

import org.apache.commons.codec.binary.Base64;
import org.bitcoinj.core.ECKey;
import org.bitcoinj.core.Sha256Hash;
import org.bitcorej.chain.cosmos.CosmosStateProvider;
import org.bitcorej.utils.ByteUtil;
import org.bitcorej.utils.NumericUtil;
import org.bouncycastle.util.encoders.Hex;
import org.json.JSONObject;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;

public class POCStateProvider extends CosmosStateProvider {
public POCStateProvider() {
super.bech32AccAddr = "poc";
super.transferPrefix = "poc/MsgSend";
}

@Override
public String signRawTransaction(String rawTx, List<String> keys) {
JSONObject jsonObject = new JSONObject(rawTx);
int accountNumber = jsonObject.getInt("account_number");
String chainId = jsonObject.getString("chain_id");
String feeDenom = jsonObject.getJSONObject("fees").getString("denom");
String feeAmount = jsonObject.getJSONObject("fees").getString("amount");
String gas = jsonObject.getString("gas");
String memo = jsonObject.getString("memo");
int sequence = jsonObject.getInt("sequence");
String from = jsonObject.getString("from");
String to = jsonObject.getJSONObject("msg").getString("to");
String toDenom = jsonObject.getJSONObject("msg").getJSONArray("coins").getJSONObject(0).getString("denom");
String toAmount = jsonObject.getJSONObject("msg").getJSONArray("coins").getJSONObject(0).getString("amount");

String msg = "{\"account_number\":\"" + accountNumber + "\",\"chain_id\":\"" + chainId + "\",\"fee\":{\"amount\":[{\"amount\":\"" + feeAmount + "\",\"denom\":\"" + feeDenom + "\"}],\"gas\":\"" + gas + "\"},\"memo\":\"" + memo + "\",\"msgs\":[{\"type\":\"" + this.transferPrefix + "\",\"value\":{\"amount\":[{\"amount\":\"" + toAmount + "\",\"denom\":\"" + toDenom + "\"}],\"from_address\":\"" + from + "\",\"to_address\":\"" + to + "\"}}],\"sequence\":\"" + sequence + "\"}";
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
byte[] hash = digest.digest(
msg.getBytes(StandardCharsets.UTF_8));
String sha256hex = new String(Hex.encode(hash));

ECKey ecKey = ECKey.fromPrivate(NumericUtil.hexToBytes(keys.get(0)));
ECKey.ECDSASignature sig = ecKey.sign(Sha256Hash.wrap(sha256hex));

byte[] signature = ByteUtil.concat(sig.r.toByteArray(), sig.s.toByteArray());

String sigBase64 = Base64.encodeBase64String(ByteUtil.trimLeadingZeroes(signature));
String pub = Base64.encodeBase64String(ecKey.getPubKey());
return "{\"tx\":{\"msg\":[{\"type\":\"" + this.transferPrefix + "\",\"value\":{\"amount\":[{\"amount\":\"" + toAmount +"\",\"denom\":\"" + toDenom + "\"}],\"from_address\":\"" + from + "\",\"to_address\":\"" + to + "\"}}],\"fee\":{\"amount\":[{\"denom\":\"" + feeDenom + "\",\"amount\":\"" + feeAmount + "\"}],\"gas\":\"" + gas + "\"},\"signatures\":[{\"pub_key\":{\"type\":\"tendermint/PubKeySecp256k1\",\"value\":\"" + pub + "\"},\"signature\":\"" + sigBase64 + "\"}],\"memo\":\"" + memo + "\"},\"mode\":\"async\"}";
}
}

0 comments on commit 5c86f67

Please sign in to comment.