Skip to content

Commit

Permalink
fixes for actionProof
Browse files Browse the repository at this point in the history
  • Loading branch information
shaqk committed Feb 27, 2023
1 parent d072651 commit 5dadde7
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 12 deletions.
3 changes: 3 additions & 0 deletions abstract.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ const getTxs = res =>{
delete act.action.data
traces.push(act)
}
//sort traces by global sequenece since SHIP doesnt sort them
traces.sort((a,b)=> a.receipt.global_sequence > b.receipt.global_sequence? 1 :-1);
txs.push(traces)


}
return txs;
Expand Down
2 changes: 1 addition & 1 deletion firehoseFunctions.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const loadProto = package => ProtoBuf.loadSync( path.resolve(__dirname, "proto"
const eosioProto = loadProto("dfuse/eosio/codec/v1/codec.proto")
const bstreamService = loadGrpcPackageDefinition("dfuse/bstream/v1/bstream.proto").dfuse.bstream.v1
const eosioBlockMsg = eosioProto.root.lookupType("dfuse.eosio.codec.v1.Block")

const { getActionProof } = require("./ibcFunctions")
const sleep = s => new Promise(resolve=>setTimeout(resolve, s*1000));

const getFirehoseClient = () => new bstreamService.BlockStreamV2(
Expand Down
11 changes: 8 additions & 3 deletions handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,15 @@ function handleLightProof(msgObj, ws){
console.log(msgObj);

let checkBlock = await checkValidBlockRange(msgObj.block_to_prove);
if(!checkBlock.available) return ws.send(JSON.stringify({ type:"error", error: checkBlock.error }));
let checkBlock2 = await checkValidBlockRange(msgObj.last_proven_block);
if(!checkBlock2.available) return ws.send(JSON.stringify({ type:"error", error: checkBlock2.error }));

if (!checkBlock.available){
console.log("Block is not in valid range")
if(!checkBlock.available) return ws.send(JSON.stringify({ type:"error", error: checkBlock.error }));
if(!checkBlock2.available) return ws.send(JSON.stringify({ type:"error", error: checkBlock2.error }));
}

console.log("passed valid block check")
var result = await getIrreversibleBlock(msgObj.block_to_prove);
var block_to_prove = preprocessBlock(result, true);

Expand Down Expand Up @@ -163,7 +168,7 @@ function checkValidBlockRange(blockNum){
}catch(ex){
resolve({
available: false,
error: `Error fetchingstatus of lightproof`
error: `Error fetching status of lightproof`
});
}
})
Expand Down
14 changes: 8 additions & 6 deletions ibcFunctions.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ function getReceiptDigests(block_to_prove, action_receipt_digest){
function getShipReceiptDigests(block_to_prove, action_receipt_digest){
let action_return_value;
var action_receipt_digests = [];
var traces = block_to_prove.traces;
for (trace of traces){
var receipt_digest = getReceiptDigest(trace.receipt[1]);
//if this is the trace of the action we are trying to prove, assign the action_return_value from trace result
if (receipt_digest === action_receipt_digest && trace.return_value) action_return_value = trace.return_value.toString()
action_receipt_digests.push(receipt_digest);
var transactions = block_to_prove.transactions;
for (traces of transactions){
for (trace of traces.action_traces.sort((a,b)=> a.receipt.global_sequence > b.receipt.global_sequence? 1 :-1)){
var receipt_digest = getReceiptDigest(trace.receipt);
//if this is the trace of the action we are trying to prove, assign the action_return_value from trace result
if (receipt_digest === action_receipt_digest && trace.return_value) action_return_value = trace.return_value.toString()
action_receipt_digests.push(receipt_digest);
}
}
return { action_receipt_digests, action_return_value };
}
Expand Down
22 changes: 20 additions & 2 deletions shipFunctions.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const SHIP = require('./ship');
const { getActionProof } = require("./ibcFunctions")
const axios = require('axios');
//Digest
const getShipIrreversibleBlock = async start_block_num =>{
Expand Down Expand Up @@ -64,9 +65,26 @@ const getShipHeavyProof = req => new Promise((resolve) => {
header : json_obj.header,
// merkle : blockrootMerkle,
traces : json_obj.traces,

transactions : json_obj.transactions,
producer_signatures : [json_obj.producer_signature]
}

//format ship header
let header = {};

header.timestamp = block.header.timestamp;
header.producer = block.header.producer;
header.confirmed = block.header.confirmed;
header.previous = block.header.previous.toLowerCase();
header.transaction_mroot = block.header.transaction_mroot.toLowerCase();
header.action_mroot = block.header.action_mroot.toLowerCase();
header.schedule_version = block.header.schedule_version;
header.new_producers = block.header.new_producers;
header.header_extensions = block.header.header_extensions;

block.header = header;

//if block is signed by eosio
if (block.header.producer == "eosio") {
console.log("Found block signed by eosio. Proof is not supported");
Expand Down Expand Up @@ -103,14 +121,14 @@ const getShipHeavyProof = req => new Promise((resolve) => {
//if first block in request
if (block.number == req.firehoseOptions.start_block_num ){
// previous_block = preprocessBlock(json_obj, false);
previous_block = json_obj;
previous_block = block;
return add = false;
}

//if second block in request
else if (block.number == req.firehoseOptions.start_block_num + 1){
// block_to_prove = preprocessFirehoseBlock(json_obj, true);
block_to_prove = json_obj;
block_to_prove = block;
add = false;
}

Expand Down

0 comments on commit 5dadde7

Please sign in to comment.