对称公平交易协议(原子交换)

293 阅读1分钟

Predefined Constants

AlicePublicKey
BobPulicKey
E1

A1

moneyButton.render(div, {
    outputs: [{
        type: `script`,
        script: `OP_IF
                    2 ${AlicePublicKey} ${BobPublicKey} 2 OP_CHECKMULTISIG
                OP_ELSE
                    OP_HASH160 ${hash(Sa)+hash(Sb)} OP_EQUALVERIFY ${BobPublicKey} OP_CHECKSIG
                OP_ENDIF`,
        amount: E1,
        currency: `BSV`
    }]
}

B1

moneyButton.render(div, {
    outputs: [{
        type: `script`,
        script: `OP_IF
                    2 ${AlicePublicKey} ${BobPublicKey} 2 OP_CHECKMULTISIG
                OP_ELSE
                    OP_HASH160 ${hash(Sa)+hash(Sb)} OP_EQUALVERIFY ${AlicePublicKey} OP_CHECKSIG
                OP_ENDIF`,
        amount: E1,
        currency: `BSV`
    }]
}

A2

moneyButton.render(div, {
    inputs: [{
        previous_hash: ${A1Hash},
        signature_script: `0 ${AliceSignature} ${BobSignature} OP_TRUE`,
        locktime: `${N}hours`
    }],
    outputs: [{
        type: `address`,
        address: AliceAddress,
        amount: E1,
        currency: `BSV`
    }]
}

B2

moneyButton.render(div, {
    inputs: [{
        previous_hash: ${B1Hash},
        signature_script: `0 ${AliceSignature} ${BobSignature} OP_TRUE`,
        locktime: `${N}hours`
    }],
    outputs: [{
        type: `address`,
        address: BobAddress,
        amount: E1,
        currency: `BSV`
    }]
}

A3

moneyButton.render(div, {
    inputs: [{
        previous_hash: ${B1Hash},
        signature_script: `${AliceSignature} ${Sa+Sb} OP_FALSE`
    }],
    outputs: [{
        type: `address`,
        address: AliceAddress,
        amount: E1,
        currency: `BSV`
    }]
}

B3

moneyButton.render(div, {
    inputs: [{
        previous_hash: ${B1Hash},
        signature_script: `${BobSignature} ${Sa+Sb} OP_FALSE`
    }],
    outputs: [{
        type: `address`,
        address: BobAddress,
        amount: E1,
        currency: `BSV`
    }]
}