export declare const TRACER = "\n{\n    simResult: null,\n    lookupAccount: function(addr, db) {\n        var acc = toHex(addr);\n        if (this.simResult.stateDiff[acc] === undefined) {\n            this.simResult.stateDiff[acc] = {\n                balance: {\n                    \"*\": {\n                        from: \"0x0\",\n                        to: \"0x\" + db.getBalance(addr).toString(16)\n                    }\n                },\n                code: toHex(db.getCode(addr)),\n                storage: {}\n            };\n        }\n    },\n    lookupStorage: function(addr, key, db) {\n        var acc = toHex(addr);\n        var idx = toHex(key);\n        if (this.simResult.stateDiff[acc] === undefined) {\n            this.lookupAccount(addr, db);\n        }\n        if (this.simResult.stateDiff[acc].storage[idx] === undefined) {\n            this.simResult.stateDiff[acc].storage[idx] = {\n                \"*\": {\n                    from: toHex(db.getState(addr, key)),\n                    to: \"something\"\n                },\n                _info: {\n                    originalAddr: addr,\n                    originalKey: key\n                }\n            };\n        }\n    },\n    result: function(ctx, db) {\n        if (this.simResult === null) {\n            this.simResult = {\n                trace: [{}],\n                stateDiff: {}\n            };\n        }\n        this.lookupAccount(ctx.to, db);\n        this.lookupAccount(ctx.from, db);\n        var fromBal = bigInt(this.simResult.stateDiff[toHex(ctx.from)].balance[\"*\"].to.slice(2), 16);\n        var toBal = bigInt(this.simResult.stateDiff[toHex(ctx.to)].balance[\"*\"].to.slice(2), 16);\n        this.simResult.stateDiff[toHex(ctx.to)].balance[\"*\"].from = \"0x\" + toBal.subtract(ctx.value).toString(16);\n        this.simResult.stateDiff[toHex(ctx.from)].balance[\"*\"].from = \"0x\" + fromBal.add(ctx.value).add(ctx.gasUsed * ctx.gasPrice).toString(16);\n\n        for (var acc in this.simResult.stateDiff) {\n            for (var idx in this.simResult.stateDiff[acc].storage) {\n                var originalAddr = this.simResult.stateDiff[acc].storage[idx]._info.originalAddr;\n                var originalKey = this.simResult.stateDiff[acc].storage[idx]._info.originalKey;\n                this.simResult.stateDiff[acc].storage[idx][\"*\"].to = toHex(db.getState(originalAddr, originalKey));\n            }\n        }\n        if (ctx.type == \"CREATE\") {\n            delete this.simResult.stateDiff[toHex(ctx.to)];\n        }\n        return this.simResult;\n    },\n    step: function(log, db) {\n        if (this.simResult === null) {\n            this.simResult = {\n                trace: [{}],\n                stateDiff: {}\n            };\n            this.lookupAccount(log.contract.getAddress(), db);\n        }\n        switch (log.op.toString()) {\n            case \"EXTCODECOPY\":\n            case \"EXTCODESIZE\":\n            case \"EXTCODEHASH\":\n            case \"BALANCE\":\n                this.lookupAccount(toAddress(log.stack.peek(0).toString(16)), db);\n                break;\n            case \"CREATE\":\n                var from = log.contract.getAddress();\n                this.lookupAccount(toContract(from, db.getNonce(from)), db);\n                break;\n            case \"CREATE2\":\n                var from = log.contract.getAddress();\n                var offset = log.stack.peek(1).valueOf();\n                var size = log.stack.peek(2).valueOf();\n                var end = offset + size;\n                this.lookupAccount(toContract2(from, log.stack.peek(3).toString(16), log.memory.slice(offset, end)), db);\n                break;\n            case \"CALL\":\n            case \"CALLCODE\":\n            case \"DELEGATECALL\":\n            case \"STATICCALL\":\n                this.lookupAccount(toAddress(log.stack.peek(1).toString(16)), db);\n                break;\n            case \"SSTORE\":\n            case \"SLOAD\":\n                this.lookupStorage(log.contract.getAddress(), toWord(log.stack.peek(0).toString(16)), db);\n                break;\n        }\n    },\n    fault: function(log, db) {}\n}\n";
