forked from onflow/fcl-js
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathvoucher.js
61 lines (54 loc) · 1.85 KB
/
voucher.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import {withPrefix} from "@onflow/util-address"
import {encodeTxIdFromVoucher} from "../encode/encode.js"
export function findInsideSigners(ix) {
// Inside Signers Are: (authorizers + proposer) - payer
let inside = new Set(ix.authorizations)
inside.add(ix.proposer)
inside.delete(ix.payer)
return Array.from(inside)
}
export function findOutsideSigners(ix) {
// Outside Signers Are: (payer)
let outside = new Set([ix.payer])
return Array.from(outside)
}
export const createSignableVoucher = ix => {
const buildAuthorizers = () => {
const authorizations = ix.authorizations
.map(cid => withPrefix(ix.accounts[cid].addr))
.reduce((prev, current) => {
return prev.find(item => item === current) ? prev : [...prev, current]
}, [])
return authorizations[0] ? authorizations : []
}
const buildInsideSigners = () =>
findInsideSigners(ix).map(id => ({
address: withPrefix(ix.accounts[id].addr),
keyId: ix.accounts[id].keyId,
sig: ix.accounts[id].signature,
}))
const buildOutsideSigners = () =>
findOutsideSigners(ix).map(id => ({
address: withPrefix(ix.accounts[id].addr),
keyId: ix.accounts[id].keyId,
sig: ix.accounts[id].signature,
}))
return {
cadence: ix.message.cadence,
refBlock: ix.message.refBlock || null,
computeLimit: ix.message.computeLimit,
arguments: ix.message.arguments.map(id => ix.arguments[id].asArgument),
proposalKey: {
address: withPrefix(ix.accounts[ix.proposer].addr),
keyId: ix.accounts[ix.proposer].keyId,
sequenceNum: ix.accounts[ix.proposer].sequenceNum,
},
payer: withPrefix(ix.accounts[ix.payer].addr),
authorizers: buildAuthorizers(),
payloadSigs: buildInsideSigners(),
envelopeSigs: buildOutsideSigners(),
}
}
export const voucherToTxId = voucher => {
return encodeTxIdFromVoucher(voucher)
}