UNPKG

@mutopad/connex-framework

Version:
165 lines 13.8 kB
import { abi } from 'thor-devkit'; import { decodeRevertReason } from './revert-reason'; import { newFilter } from './filter'; import { newTxSigningService } from './vendor'; import * as R from './rules'; export function newAccountVisitor(readyDriver, addr) { return { get address() { return addr; }, get: () => { return readyDriver.then(d => d.getAccount(addr, d.head.id)); }, getCode: () => { return readyDriver.then(d => d.getCode(addr, d.head.id)); }, getStorage: key => { key = R.test(key, R.bytes32, 'arg0').toLowerCase(); return readyDriver.then(d => d.getStorage(addr, key, d.head.id)); }, method: jsonABI => { let coder; try { coder = new abi.Function(JSON.parse(JSON.stringify(jsonABI))); } catch (err) { throw new R.BadParameter(`arg0: expected valid ABI (${err.message})`); } return newMethod(readyDriver, addr, coder); }, event: jsonABI => { let coder; try { coder = new abi.Event(JSON.parse(JSON.stringify(jsonABI))); } catch (err) { throw new R.BadParameter(`arg0: expected valid ABI (${err.message})`); } return newEvent(readyDriver, addr, coder); } }; } function newMethod(readyDriver, addr, coder) { let value = 0; const opts = {}; let cacheHints; return { value(val) { value = R.test(val, R.bigInt, 'arg0'); return this; }, caller(addr) { opts.caller = R.test(addr, R.address, 'arg0').toLowerCase(); return this; }, gas(gas) { opts.gas = R.test(gas, R.uint64, 'arg0'); return this; }, gasPrice(gp) { opts.gasPrice = R.test(gp, R.bigInt, 'arg0').toString().toLowerCase(); return this; }, gasPayer(addr) { opts.gasPayer = R.test(addr, R.address, 'arg0').toLowerCase(); return this; }, cache(hints) { cacheHints = R.test(hints, [R.address], 'arg0').map(t => t.toLowerCase()); return this; }, asClause: (...args) => { const inputsLen = (coder.definition.inputs || []).length; R.ensure(inputsLen === args.length, `args count expected ${inputsLen}`); try { const data = coder.encode(...args); return { to: addr, value: value.toString().toLowerCase(), data }; } catch (err) { throw new R.BadParameter(`args can not be encoded (${err.message})`); } }, call(...args) { const clause = this.asClause(...args); return readyDriver.then(d => d.explain(Object.assign({ clauses: [clause] }, opts), d.head.id, cacheHints)) .then(outputs => outputs[0]) .then(output => { if (output.reverted) { const revertReason = decodeRevertReason(output.data); return Object.assign(Object.assign({}, output), { revertReason, decoded: {} }); } else { const decoded = coder.decode(output.data); return Object.assign(Object.assign({}, output), { decoded }); } }); }, transact(...args) { const clause = this.asClause(...args); return newTxSigningService(readyDriver, [Object.assign(Object.assign({}, clause), { abi: coder.definition })]); } }; } function newEvent(readyDriver, addr, coder) { const encode = (indexed) => { const topics = coder.encode(indexed); return { address: addr, topic0: topics[0] || undefined, topic1: topics[1] || undefined, topic2: topics[2] || undefined, topic3: topics[3] || undefined, topic4: topics[4] || undefined }; }; return { asCriteria: indexed => { try { return encode(indexed); } catch (err) { throw new R.BadParameter(`arg0: can not be encoded (${err.message})`); } }, filter: (indexed) => { R.test(indexed, [{}], 'arg0'); if (indexed.length === 0) { indexed = [{}]; } const criteria = indexed.map((o, i) => { try { return encode(o); } catch (err) { throw new R.BadParameter(`arg0.#${i}: can not be encoded (${err.message})`); } }); const filter = newFilter(readyDriver, 'event', criteria); return { range(range) { filter.range(range); return this; }, order(order) { filter.order(order); return this; }, cache(hints) { filter.cache(hints); return this; }, apply(offset, limit) { return filter.apply(offset, limit) .then(events => events.map(event => { const decoded = coder.decode(event.data, event.topics); return Object.assign(Object.assign({}, event), { decoded }); })); } }; } }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC12aXNpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FjY291bnQtdmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDcEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQzlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFBO0FBRTVCLE1BQU0sVUFBVSxpQkFBaUIsQ0FDN0IsV0FBbUMsRUFDbkMsSUFBWTtJQUVaLE9BQU87UUFDSCxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQSxDQUFDLENBQUM7UUFDN0IsR0FBRyxFQUFFLEdBQUcsRUFBRTtZQUNOLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNWLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBQ0QsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDbEQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMs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