RlpArrayCheck: Add logging, fix bugs

This commit is contained in:
Yi Sun
2022-04-10 20:40:34 +00:00
parent ededc8b0bc
commit fa1c3bf9e0
3 changed files with 125 additions and 7 deletions

View File

@@ -21,6 +21,9 @@ TAG_TO_NAME = {
333333300001: 'SubArray',
333333300002: 'ArrayEq',
333333300003: 'ShiftLeft',
333333300004: 'RlpArrayPrefix',
333333300005: 'RlpFieldPrefix',
333333300006: 'RlpArrayCheck',
444444400001: 'Multiplexer',
555555500001: 'EthBlockHashHex',
555555500002: 'EthAddressProof',
@@ -159,6 +162,75 @@ def parse_one(lines, idx):
for idx2 in range(log["nIn"]):
log["out"].append(int(lines[idx][:-1]))
idx = idx + 1
elif tag == 333333300004:
log["in"] = []
log["in"].append(int(lines[idx][:-1]))
log["in"].append(int(lines[idx + 1][:-1]))
idx = idx + 2
log["inner_logs"], idx = parse_next(lines, idx)
log["isBig"] = int(lines[idx][:-1])
log["prefixOrTotalHexLen"] = int(lines[idx + 1][:-1])
log["isValid"] = int(lines[idx + 2][:-1])
idx = idx + 3
elif tag == 333333300005:
log["in"] = []
log["in"].append(int(lines[idx][:-1]))
log["in"].append(int(lines[idx + 1][:-1]))
idx = idx + 2
log["inner_logs"], idx = parse_next(lines, idx)
log["isBig"] = int(lines[idx][:-1])
log["isLiteral"] = int(lines[idx + 1][:-1])
log["prefixOrTotalHexLen"] = int(lines[idx + 2][:-1])
log["isValid"] = int(lines[idx + 3][:-1])
idx = idx + 4
elif tag == 333333300006:
log["maxHexLen"] = int(lines[idx][:-1])
log["nFields"] = int(lines[idx + 1][:-1])
log["arrayPrefixMaxHexLen"] = int(lines[idx + 2][:-1])
idx = idx + 3
log["fieldMinHexLen"] = []
log["fieldMaxHexLen"] = []
for idx2 in range(log["nFields"]):
log["fieldMinHexLen"].append(int(lines[idx][:-1]))
idx = idx + 1
for idx2 in range(log["nFields"]):
log["fieldMaxHexLen"].append(int(lines[idx][:-1]))
idx = idx + 1
log["arrayRlpPrefix1HexLen"] = int(lines[idx][:-1])
idx = idx + 1
log["in"] = []
for idx2 in range(log["maxHexLen"]):
log["in"].append(int(lines[idx][:-1]))
idx = idx + 1
log["fieldRlpPrefix1HexLen"] = []
for idx2 in range(log["nFields"]):
log["fieldRlpPrefix1HexLen"].append(int(lines[idx][:-1]))
idx = idx + 1
log["inner_logs"], idx = parse_next(lines, idx)
log["out"] = int(lines[idx][:-1])
log["totalRlpHexLen"] = int(lines[idx + 1][:-1])
idx = idx + 2
log["fieldHexLen"] = []
for idx2 in range(log["nFields"]):
log["fieldHexLen"].append(int(lines[idx][:-1]))
idx = idx + 1
log["fields"] = []
for idx2 in range(log["nFields"]):
log["fields"].append([])
for idx3 in range(log["maxHexLen"]):
log["fields"][-1].append(int(lines[idx][:-1]))
idx = idx + 1
elif tag == 222222200001:
log["inLenMin"] = int(lines[idx][:-1])
log["inLenMax"] = int(lines[idx + 1][:-1])
@@ -175,7 +247,6 @@ def parse_one(lines, idx):
log["out"] = []
for idx2 in range(log["outLen"]):
# print(lines[idx][:-1])
log["out"].append(int(lines[idx][:-1]))
idx = idx + 1
elif tag == 222222200002:

View File

@@ -215,7 +215,11 @@ template RlpArrayPrefix() {
signal output isBig;
signal output prefixOrTotalHexLen;
signal output isValid;
log(333333300004);
log(in[0]);
log(in[1]);
component n2b1 = Num2Bits(4);
component n2b2 = Num2Bits(4);
n2b1.in <== in[0];
@@ -239,8 +243,12 @@ template RlpArrayPrefix() {
// [c0, f7] or [f8, ff]
var prefixVal = 16 * in[0] + in[1];
prefixOrTotalHexLen <== 2 * (prefixVal - 16 * 12) + 2 * isBig * (16 * 12 - 16 * 15 - 8);
prefixOrTotalHexLen <== 2 * (prefixVal - 16 * 12) + 2 * isBig * (16 * 12 - 16 * 15 - 7);
isValid <== 1 - lt1.out;
log(isBig);
log(prefixOrTotalHexLen);
log(isValid);
}
template RlpFieldPrefix() {
@@ -249,7 +257,11 @@ template RlpFieldPrefix() {
signal output isLiteral;
signal output prefixOrTotalHexLen;
signal output isValid;
log(333333300005);
log(in[0]);
log(in[1]);
component n2b1 = Num2Bits(4);
component n2b2 = Num2Bits(4);
n2b1.in <== in[0];
@@ -279,9 +291,14 @@ template RlpFieldPrefix() {
var prefixVal = 16 * in[0] + in[1];
// [00, 7f] or [80, b7] or [b8, bf]
prefixOrTotalHexLen <== 2 * (prefixVal - 16 * 8) + 2 * isBig * (16 * 8 - 16 * 11 - 8);
prefixOrTotalHexLen <== 2 * (prefixVal - 16 * 8) + 2 * isBig * (16 * 8 - 16 * 11 - 7);
isValid <== lt1.out;
log(isBig);
log(isLiteral);
log(prefixOrTotalHexLen);
log(isValid);
}
// fieldMinHexLens, fieldMaxHexLens are arrays of length nFields
@@ -295,6 +312,24 @@ template RlpArrayCheck(maxHexLen, nFields, arrayPrefixMaxHexLen, fieldMinHexLen,
signal output fields[nFields][maxHexLen];
signal output totalRlpHexLen;
log(333333300006);
log(maxHexLen);
log(nFields);
log(arrayPrefixMaxHexLen);
for (var idx = 0; idx < nFields; idx++) {
log(fieldMinHexLen[idx]);
}
for (var idx = 0; idx < nFields; idx++) {
log(fieldMaxHexLen[idx]);
}
log(arrayRlpPrefix1HexLen);
for (var idx = 0; idx < maxHexLen; idx++) {
log(in[idx]);
}
for (var idx = 0; idx < nFields; idx++) {
log(fieldRlpPrefix1HexLen[idx]);
}
component rlpArrayPrefix = RlpArrayPrefix();
rlpArrayPrefix.in[0] <== in[0];
rlpArrayPrefix.in[1] <== in[1];
@@ -360,7 +395,7 @@ template RlpArrayCheck(maxHexLen, nFields, arrayPrefixMaxHexLen, fieldMinHexLen,
fieldHexLenMulti[idx].inp[j][0] <== temp;
}
fieldHexLenMulti[idx].sel <== fieldPrefix[idx].isBig * (fieldRlpPrefix1HexLen[idx] - 1);
field_temp[idx] <== fieldPrefix[idx].prefixOrTotalHexLen + fieldPrefix[idx].isBig * (fieldHexLenMulti[idx].out[0] - fieldPrefix[idx].prefixOrTotalHexLen);
field_temp[idx] <== fieldPrefix[idx].prefixOrTotalHexLen + fieldPrefix[idx].isBig * (2 * fieldHexLenMulti[idx].out[0] - fieldPrefix[idx].prefixOrTotalHexLen);
fieldHexLen[idx] <== field_temp[idx] + fieldPrefix[idx].isLiteral * (2 - field_temp[idx]);
for (var j = 0; j < maxHexLen; j++) {
@@ -391,4 +426,15 @@ template RlpArrayCheck(maxHexLen, nFields, arrayPrefixMaxHexLen, fieldMinHexLen,
outCheck.in[1] <== 2 * nFields + 3;
out <== outCheck.out;
log(out);
log(totalRlpHexLen);
for (var idx = 0; idx < nFields; idx++) {
log(fieldHexLen[idx]);
}
for (var idx = 0; idx < nFields; idx++) {
for (var j = 0; j < maxHexLen; j++) {
log(fields[idx][j]);
}
}
}

View File

@@ -422,7 +422,8 @@ def get_block_pf2(block, debug=False):
print(rlp_block, len(rlp_block))
print(keccak256(rlp_block))
print(block['hash'])
for x in block_list:
print(len(rlp.encode(x).hex()), x)
rlp_prefix = rlp_block[:2]
rlp_prefix_hex_len = 2 + 2 * (int(rlp_prefix, 16) - int('f7', 16))