Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```
- var prevRedeemScript = readFromStack()
- var preimage = readFromStack()
- validatePreimage(preimage)
- var outputTransfers = readFromStack()
- var siganture = readFromStack()
- var tokenMetadata
- // If this is the genesis transaction allow the script to create
- // and save all the token metadata.
- if tokenMetadata == nil {
- tokenMetadata.tokenID = preimage.prevout
- tokenMetadata.numCoins = 2000000000
- tokenMetadata.inputValue = 2000000000
- // etc
- } else {
- // Otherwise validate prevRedeemScript
- if makeOutputScript(hash160(prevRedeemScript)) != preimage.scriptCode {
- fail()
- }
- tokenMetadata = prevRedeemScript.metadata
- }
- checkSig(redeemScript.pubkey, signature)
- // For each requested output construct a new redeemScript/outputScript which
- // contains the exact same token metadata with the exception of a new value and
- // a new public key.
- //
- // Validate that the covenant sends to these output scripts.
- var totalOut = 0
- for i in range len(outputTransfers) {
- totalOut += outputTransfers[i].value
- // We are including the input's prevOutpoint in the new redeem script to ensure that the redeemScript is unique
- // for this input. This prevents other inputs in the transaction from claiming the same outputs as satisfying their
- // covenant. If they tried, they wouldn't produce a redeemScript that satisfies the covenant.
- newRedeemScript = makeNewRedeemScript(outputTransfers[i].value, outputTransfers[i].pubkey, preimage.prevout)
- outputScript = makeOutputScript(hash160(redeemScript))
- if preimage.outputs[i].script != outputScript {
- fail()
- }
- }
- // Validate that the total out == total in.
- if totalOut != tokenMetadata.inputValue {
- fail()
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement