{ "contracts": [ { "contractName": "TimeToCashout", "constructorInputs": [ { "name": "owner", "type": "pubkey", "visible": false, "unused": false }, { "name": "recoveryPkh", "type": "bytes20", "visible": true, "unused": false }, { "name": "gratitude", "type": "int", "visible": true, "unused": false }, { "name": "timeout", "type": "int", "visible": true, "unused": false } ], "abi": [ { "name": "transfer", "inputs": [ { "name": "signature", "type": "sig" } ] }, { "name": "cashout", "inputs": [] } ], "dependencies": [], "bytecode": "OP_FROMALTSTACK OP_FROMALTSTACK OP_FROMALTSTACK OP_FROMALTSTACK OP_4 OP_PICK OP_0 OP_NUMEQUAL OP_IF OP_5 OP_ROLL OP_SWAP OP_CHECKSIGVERIFY OP_2DROP OP_2DROP OP_ELSE OP_4 OP_ROLL OP_1 OP_NUMEQUALVERIFY OP_3 OP_ROLL OP_CHECKSEQUENCEVERIFY OP_DROP 005114 OP_ROT OP_CAT OP_0 OP_OUTPUTBYTECODE OP_EQUALVERIFY OP_0 OP_OUTPUTVALUE OP_5 OP_PUSH_TX_STATE OP_3 OP_ROLL OP_SUB OP_GREATERTHANOREQUAL OP_VERIFY OP_DROP OP_ENDIF", "contracts": [] } ], "source": "pragma nexscript >= 0.2.0;\n\ncontract TimeToCashout(\n pubkey owner,\n bytes20 visible recoveryPkh,\n int visible gratitude,\n int visible timeout,\n) {\n function transfer(sig signature) {\n require(checkSig(signature, owner));\n }\n\n function cashout() {\n require(tx.age >= timeout);\n\n bytes23 recoveryBytecode = new LockingBytecodeP2PKT(recoveryPkh);\n\n require(tx.outputs[0].lockingBytecode == recoveryBytecode);\n require(tx.outputs[0].value >= tx.amountIn - gratitude);\n }\n}\n", "compiler": { "name": "nexc", "version": "0.10.0" }, "updatedAt": "2024-09-11T09:15:53.813Z" }