Skip to content

Instantly share code, notes, and snippets.

@cgcardona
Created August 24, 2019 23:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cgcardona/39d81548b174c84cf2d542a3f1f7a6e7 to your computer and use it in GitHub Desktop.
Save cgcardona/39d81548b174c84cf2d542a3f1f7a6e7 to your computer and use it in GitHub Desktop.
{
"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