mirror of
https://github.com/yi-sun/zk-attestor.git
synced 2026-01-09 13:37:56 -05:00
RlpArrayCheck: Add logging, fix bugs
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user