はあなたが唯一の下の太字で私の質問を読んで全体の質問に答えることができ、私は質問は私がblockchainを再作成し、そのため必要なのですJSONのcustumizeののtoString
明らかではないが、念のためにいくつかのコンテキストを提供したかったです作成されたブロックが特定の要件を満たしていることを確認します(ブロック全体をハッシュします(ナンセのソリューションに入れたマイナーが与えられたターゲットよりも小さくなければなりません)。
それでは、私が現在やっていると働いているものは次のとおりです。私が最初に私は私のdatastrucutre BlockPayloadを使用していること、しかし何ができると思っ
private static boolean checkDifficulty(JSONObject message) {
try {
String blockString = message.get("block").toString();
JSONObject blockPayLoad = (JSONObject) JSONValue.parse(blockString);
BlockPayload block = new BlockPayload(blockPayLoad);
BigInteger base = new BigInteger("2",16);
String difficulty = Integer.toHexString(20+block.getDifficulty());
BigInteger exponent = new BigInteger(difficulty,16);
BigInteger totalSpace = base.pow(512);
BigInteger target = totalSpace.divide(base.pow(exponent.intValueExact()));
BigInteger hashedBlock3 = new BigInteger(1,hashSHA512(blockString));
return(hashedBlock3.compareTo(target) == -1);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return false;
何。関連する部分は次のようになります。
public BlockPayload(JSONObject blockPayLoad) {
this.stringRepresentation = blockPayLoad.toString();
this.type = blockPayLoad.get("type").toString();
this.transactions = blockPayLoad.get("transactions").toString();
this.timestamp = blockPayLoad.get("timestamp").toString();
this.reward = blockPayLoad.get("reward").toString();
this.difficulty = Integer.parseInt(blockPayLoad.get("difficulty").toString());
this.nonce = blockPayLoad.get("nonce").toString();
this.parent = blockPayLoad.get("parent").toString();
}
私のtoString()は、stringReprensentationを返します。 悲しいことに、上記と同じことを試してみると(Stringの展開をハッシュすると)、別の結果が得られます。
私はこれがb/cであると考えました。私のtoStringは同じ順序を持たず、JSONObject内の属性の順序が変更されています。
ここで私の質問です:toString()をカスタマイズすることができますか?属性が必要な順序で表示されることを保証できますか?
これはJson Format tho – InDaPond
の中にとどまっているので、jsonを注文したいですか? –
Gsonと呼ばれるライブラリがあり、それはtreemapからjson構造に変換されます。それをハッシュすることができます –