UNPKG

@tatumio/transaction-simulator

Version:

Transaction Simulation Extension

108 lines (107 loc) 4.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TRACER = void 0; exports.TRACER = ` { simResult: null, lookupAccount: function(addr, db) { var acc = toHex(addr); if (this.simResult.stateDiff[acc] === undefined) { this.simResult.stateDiff[acc] = { balance: { "*": { from: "0x0", to: "0x" + db.getBalance(addr).toString(16) } }, code: toHex(db.getCode(addr)), storage: {} }; } }, lookupStorage: function(addr, key, db) { var acc = toHex(addr); var idx = toHex(key); if (this.simResult.stateDiff[acc] === undefined) { this.lookupAccount(addr, db); } if (this.simResult.stateDiff[acc].storage[idx] === undefined) { this.simResult.stateDiff[acc].storage[idx] = { "*": { from: toHex(db.getState(addr, key)), to: "something" }, _info: { originalAddr: addr, originalKey: key } }; } }, result: function(ctx, db) { if (this.simResult === null) { this.simResult = { trace: [{}], stateDiff: {} }; } this.lookupAccount(ctx.to, db); this.lookupAccount(ctx.from, db); var fromBal = bigInt(this.simResult.stateDiff[toHex(ctx.from)].balance["*"].to.slice(2), 16); var toBal = bigInt(this.simResult.stateDiff[toHex(ctx.to)].balance["*"].to.slice(2), 16); this.simResult.stateDiff[toHex(ctx.to)].balance["*"].from = "0x" + toBal.subtract(ctx.value).toString(16); this.simResult.stateDiff[toHex(ctx.from)].balance["*"].from = "0x" + fromBal.add(ctx.value).add(ctx.gasUsed * ctx.gasPrice).toString(16); for (var acc in this.simResult.stateDiff) { for (var idx in this.simResult.stateDiff[acc].storage) { var originalAddr = this.simResult.stateDiff[acc].storage[idx]._info.originalAddr; var originalKey = this.simResult.stateDiff[acc].storage[idx]._info.originalKey; this.simResult.stateDiff[acc].storage[idx]["*"].to = toHex(db.getState(originalAddr, originalKey)); } } if (ctx.type == "CREATE") { delete this.simResult.stateDiff[toHex(ctx.to)]; } return this.simResult; }, step: function(log, db) { if (this.simResult === null) { this.simResult = { trace: [{}], stateDiff: {} }; this.lookupAccount(log.contract.getAddress(), db); } switch (log.op.toString()) { case "EXTCODECOPY": case "EXTCODESIZE": case "EXTCODEHASH": case "BALANCE": this.lookupAccount(toAddress(log.stack.peek(0).toString(16)), db); break; case "CREATE": var from = log.contract.getAddress(); this.lookupAccount(toContract(from, db.getNonce(from)), db); break; case "CREATE2": var from = log.contract.getAddress(); var offset = log.stack.peek(1).valueOf(); var size = log.stack.peek(2).valueOf(); var end = offset + size; this.lookupAccount(toContract2(from, log.stack.peek(3).toString(16), log.memory.slice(offset, end)), db); break; case "CALL": case "CALLCODE": case "DELEGATECALL": case "STATICCALL": this.lookupAccount(toAddress(log.stack.peek(1).toString(16)), db); break; case "SSTORE": case "SLOAD": this.lookupStorage(log.contract.getAddress(), toWord(log.stack.peek(0).toString(16)), db); break; } }, fault: function(log, db) {} } `; //# sourceMappingURL=tracer.js.map