Created
August 24, 2019 23:02
-
-
Save cgcardona/39d81548b174c84cf2d542a3f1f7a6e7 to your computer and use it in GitHub Desktop.
Mecenas CashScript Artifact. More info: https://developer.bitcoin.com/cashscript/docs/language#artifacts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"contractName": "Mecenas", | |
"constructorInputs": [ | |
{ | |
"name": "pkh", | |
"type": "bytes20" | |
}, | |
{ | |
"name": "pkh2", | |
"type": "bytes20" | |
}, | |
{ | |
"name": "pledge", | |
"type": "int" | |
} | |
], | |
"abi": [ | |
{ | |
"name": "protege", | |
"inputs": [ | |
{ | |
"name": "pk", | |
"type": "pubkey" | |
}, | |
{ | |
"name": "s", | |
"type": "sig" | |
}, | |
{ | |
"name": "ver", | |
"type": "bytes" | |
}, | |
{ | |
"name": "hPhSo", | |
"type": "bytes" | |
}, | |
{ | |
"name": "scriptCode", | |
"type": "bytes" | |
}, | |
{ | |
"name": "value", | |
"type": "bytes" | |
}, | |
{ | |
"name": "nSequence", | |
"type": "bytes" | |
}, | |
{ | |
"name": "hashOutput", | |
"type": "bytes" | |
}, | |
{ | |
"name": "tail", | |
"type": "bytes" | |
} | |
] | |
}, | |
{ | |
"name": "mecenas", | |
"inputs": [ | |
{ | |
"name": "pk", | |
"type": "pubkey" | |
}, | |
{ | |
"name": "s", | |
"type": "sig" | |
} | |
] | |
} | |
], | |
"bytecode": "OP_3 OP_PICK OP_0 OP_NUMEQUAL OP_IF OP_6 OP_PICK OP_SIZE OP_NIP OP_4 OP_NUMEQUAL OP_VERIFY OP_7 OP_PICK OP_SIZE OP_NIP 64 OP_NUMEQUAL OP_VERIFY OP_9 OP_PICK OP_SIZE OP_NIP OP_8 OP_NUMEQUAL OP_VERIFY OP_10 OP_PICK OP_SIZE OP_NIP OP_4 OP_NUMEQUAL OP_VERIFY OP_10 OP_PICK OP_SIZE OP_NIP 20 OP_NUMEQUAL OP_VERIFY OP_12 OP_PICK OP_SIZE OP_NIP OP_8 OP_NUMEQUAL OP_VERIFY OP_5 OP_PICK OP_5 OP_PICK OP_CHECKSIG OP_VERIFY OP_6 OP_PICK OP_8 OP_PICK OP_CAT OP_9 OP_PICK OP_CAT OP_10 OP_PICK OP_CAT OP_11 OP_PICK OP_CAT OP_12 OP_PICK OP_CAT OP_13 OP_PICK OP_CAT OP_6 OP_PICK OP_SIZE OP_1 OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK OP_SHA256 OP_7 OP_PICK OP_CHECKDATASIG OP_VERIFY e803 OP_4 OP_PICK OP_8 OP_NUM2BIN OP_12 OP_PICK OP_BIN2NUM OP_6 OP_PICK OP_SUB OP_2 OP_PICK OP_SUB OP_8 OP_NUM2BIN 76 87 a9 14 17 19 88 ac 14 OP_PICK OP_3 OP_SPLIT OP_DROP 1e OP_CHECKLOCKTIMEVERIFY OP_DROP 13 OP_PICK OP_BIN2NUM OP_2 OP_GREATERTHANOREQUAL OP_VERIFY OP_9 OP_PICK OP_5 OP_PICK OP_CAT OP_7 OP_PICK OP_CAT OP_6 OP_PICK OP_CAT OP_1 OP_PICK OP_HASH160 OP_CAT OP_8 OP_PICK OP_CAT OP_11 OP_PICK OP_5 OP_PICK OP_CAT OP_10 OP_PICK OP_CAT OP_8 OP_PICK OP_CAT OP_7 OP_PICK OP_CAT OP_15 OP_PICK OP_CAT OP_4 OP_PICK OP_CAT OP_3 OP_PICK OP_CAT OP_1 OP_PICK OP_1 OP_PICK OP_CAT OP_HASH256 1b OP_PICK OP_SHA256 OP_EQUAL OP_VERIFY OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_1 OP_ELSE OP_3 OP_PICK OP_1 OP_NUMEQUAL OP_IF OP_4 OP_PICK OP_HASH160 OP_2 OP_PICK OP_EQUAL OP_VERIFY OP_5 OP_PICK OP_5 OP_PICK OP_CHECKSIG OP_VERIFY OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_1 OP_ENDIF OP_ENDIF", | |
"source": "contract Mecenas(bytes20 pkh, bytes20 pkh2, int pledge) {\n function protege(pubkey pk, sig s, bytes ver, bytes hPhSo, bytes scriptCode, bytes value, bytes nSequence, bytes hashOutput, bytes tail ) {\n require(ver.length == 4);\n require(hPhSo.length == 100);\n require(value.length == 8);\n require(nSequence.length == 4);\n require(nSequence.length == 32);\n require(tail.length == 8);\n require(checkSig(s, pk));\n bytes preimage = ver + hPhSo + scriptCode + value + nSequence + hashOutput + tail;\n require(checkDataSig(datasig(s), sha256(preimage), pk));\n int fee = 1000;\n // num2bin?\n bytes amount2 = bytes(pledge);\n bytes amount1 = bytes(int(value) - pledge - fee);\n\n bytes opDup = 0x76;\n bytes opEqual = 0x87;\n bytes opHash160 = 0xa9;\n bytes pushHash = 0x14;\n bytes newVarInt1 = 0x17;\n bytes newVarInt2 = 0x19;\n bytes opEqualverify = 0x88;\n bytes opChecksig = 0xac;\n\n // original spedn\n // bin [_, rawscr] = scriptCode @ 3;\n // is this split correctly?\n bytes rawscr = scriptCode.split(3)[0];\n\n // how to check for 30 days?\n require(tx.time >= 30);\n require(int(ver) >= 2);\n\n bytes out1 = amount1 + newVarInt1 + opHash160 + pushHash + hash160(rawscr) + opEqual;\n bytes out2 = amount2 + newVarInt2 + opDup + opHash160 + pushHash + pkh + opEqualverify + opChecksig;\n require(hash256(out1 + out2) == sha256(hashOutput)); \n } \n\n function mecenas(pubkey pk, sig s) {\n require(hash160(pk) == pkh2);\n require(checkSig(s, pk));\n }\n}", | |
"networks": { | |
"testnet": { | |
"bchtest:pqlny5knurmsev00xuwun9fxgg66e60y9s7k4w3jef": "OP_10 128a8ec247edbae9d5a94a4b4e3c2b17b453a321 810a5751ece7fc3c0096043d7c9b9fc2bf32f11c OP_3 OP_PICK OP_0 OP_NUMEQUAL OP_IF OP_6 OP_PICK OP_SIZE OP_NIP OP_4 OP_NUMEQUAL OP_VERIFY OP_7 OP_PICK OP_SIZE OP_NIP 64 OP_NUMEQUAL OP_VERIFY OP_9 OP_PICK OP_SIZE OP_NIP OP_8 OP_NUMEQUAL OP_VERIFY OP_10 OP_PICK OP_SIZE OP_NIP OP_4 OP_NUMEQUAL OP_VERIFY OP_10 OP_PICK OP_SIZE OP_NIP 20 OP_NUMEQUAL OP_VERIFY OP_12 OP_PICK OP_SIZE OP_NIP OP_8 OP_NUMEQUAL OP_VERIFY OP_5 OP_PICK OP_5 OP_PICK OP_CHECKSIG OP_VERIFY OP_6 OP_PICK OP_8 OP_PICK OP_CAT OP_9 OP_PICK OP_CAT OP_10 OP_PICK OP_CAT OP_11 OP_PICK OP_CAT OP_12 OP_PICK OP_CAT OP_13 OP_PICK OP_CAT OP_6 OP_PICK OP_SIZE OP_1 OP_SUB OP_SPLIT OP_DROP OP_1 OP_PICK OP_SHA256 OP_7 OP_PICK OP_CHECKDATASIG OP_VERIFY e803 OP_4 OP_PICK OP_8 OP_NUM2BIN OP_12 OP_PICK OP_BIN2NUM OP_6 OP_PICK OP_SUB OP_2 OP_PICK OP_SUB OP_8 OP_NUM2BIN 76 87 a9 14 17 19 88 ac 14 OP_PICK OP_3 OP_SPLIT OP_DROP 1e OP_CHECKLOCKTIMEVERIFY OP_DROP 13 OP_PICK OP_BIN2NUM OP_2 OP_GREATERTHANOREQUAL OP_VERIFY OP_9 OP_PICK OP_5 OP_PICK OP_CAT OP_7 OP_PICK OP_CAT OP_6 OP_PICK OP_CAT OP_1 OP_PICK OP_HASH160 OP_CAT OP_8 OP_PICK OP_CAT OP_11 OP_PICK OP_5 OP_PICK OP_CAT OP_10 OP_PICK OP_CAT OP_8 OP_PICK OP_CAT OP_7 OP_PICK OP_CAT OP_15 OP_PICK OP_CAT OP_4 OP_PICK OP_CAT OP_3 OP_PICK OP_CAT OP_1 OP_PICK OP_1 OP_PICK OP_CAT OP_HASH256 1b OP_PICK OP_SHA256 OP_EQUAL OP_VERIFY OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_1 OP_ELSE OP_3 OP_PICK OP_1 OP_NUMEQUAL OP_IF OP_4 OP_PICK OP_HASH160 OP_2 OP_PICK OP_EQUAL OP_VERIFY OP_5 OP_PICK OP_5 OP_PICK OP_CHECKSIG OP_VERIFY OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_DROP OP_1 OP_ENDIF OP_ENDIF" | |
} | |
}, | |
"compiler": { | |
"name": "cashc", | |
"version": "v0.1.0-beta.1" | |
}, | |
"updatedAt": "2019-08-24T22:59:07.429Z" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment