@opcat-labs/cat-sdk 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/artifacts/.templates/cat20/cat20Admin.scrypt.tpl +4 -4
  2. package/artifacts/.templates/cat20/cat20Guard_12_12_2.scrypt.tpl +2 -2
  3. package/artifacts/.templates/cat20/cat20Guard_12_12_4.scrypt.tpl +2 -2
  4. package/artifacts/.templates/cat20/cat20Guard_6_6_2.scrypt.tpl +2 -2
  5. package/artifacts/.templates/cat20/cat20Guard_6_6_4.scrypt.tpl +2 -2
  6. package/artifacts/.templates/cat20/minters/cat20ClosedMinter.scrypt.tpl +2 -2
  7. package/artifacts/.templates/cat20/minters/cat20OpenMinter.scrypt.map +1 -1
  8. package/artifacts/.templates/cat20/minters/cat20OpenMinter.scrypt.tpl +3 -2
  9. package/artifacts/.templates/cat721/cat721Guard_12_12_2.scrypt.tpl +2 -2
  10. package/artifacts/.templates/cat721/cat721Guard_12_12_4.scrypt.tpl +2 -2
  11. package/artifacts/.templates/cat721/cat721Guard_6_6_2.scrypt.tpl +2 -2
  12. package/artifacts/.templates/cat721/cat721Guard_6_6_4.scrypt.tpl +2 -2
  13. package/artifacts/.templates/cat721/minters/cat721ClosedMinter.scrypt.tpl +2 -2
  14. package/artifacts/.templates/cat721/minters/cat721OpenMinter.scrypt.tpl +2 -2
  15. package/artifacts/cat20/cat20.json +52 -34
  16. package/artifacts/cat20/cat20.scrypt +18 -18
  17. package/artifacts/cat20/cat20Admin.json +54 -36
  18. package/artifacts/cat20/cat20Admin.scrypt +30 -30
  19. package/artifacts/cat20/cat20GuardStateLib.json +39 -21
  20. package/artifacts/cat20/cat20GuardStateLib.scrypt +5 -5
  21. package/artifacts/cat20/cat20Guard_12_12_2.json +53 -35
  22. package/artifacts/cat20/cat20Guard_12_12_2.scrypt +29 -29
  23. package/artifacts/cat20/cat20Guard_12_12_4.json +53 -35
  24. package/artifacts/cat20/cat20Guard_12_12_4.scrypt +29 -29
  25. package/artifacts/cat20/cat20Guard_6_6_2.json +53 -35
  26. package/artifacts/cat20/cat20Guard_6_6_2.scrypt +29 -29
  27. package/artifacts/cat20/cat20Guard_6_6_4.json +53 -35
  28. package/artifacts/cat20/cat20Guard_6_6_4.scrypt +29 -29
  29. package/artifacts/cat20/cat20StateLib.json +40 -22
  30. package/artifacts/cat20/cat20StateLib.scrypt +5 -5
  31. package/artifacts/cat20/minters/cat20ClosedMinter.json +52 -34
  32. package/artifacts/cat20/minters/cat20ClosedMinter.scrypt +22 -22
  33. package/artifacts/cat20/minters/cat20OpenMinter.json +52 -34
  34. package/artifacts/cat20/minters/cat20OpenMinter.scrypt +19 -18
  35. package/artifacts/cat20/types.json +5 -5
  36. package/artifacts/cat20/types.scrypt +5 -5
  37. package/artifacts/cat721/cat721.json +52 -34
  38. package/artifacts/cat721/cat721.scrypt +18 -18
  39. package/artifacts/cat721/cat721GuardStateLib.json +39 -21
  40. package/artifacts/cat721/cat721GuardStateLib.scrypt +5 -5
  41. package/artifacts/cat721/cat721Guard_12_12_2.json +52 -34
  42. package/artifacts/cat721/cat721Guard_12_12_2.scrypt +26 -26
  43. package/artifacts/cat721/cat721Guard_12_12_4.json +52 -34
  44. package/artifacts/cat721/cat721Guard_12_12_4.scrypt +26 -26
  45. package/artifacts/cat721/cat721Guard_6_6_2.json +52 -34
  46. package/artifacts/cat721/cat721Guard_6_6_2.scrypt +26 -26
  47. package/artifacts/cat721/cat721Guard_6_6_4.json +52 -34
  48. package/artifacts/cat721/cat721Guard_6_6_4.scrypt +26 -26
  49. package/artifacts/cat721/cat721StateLib.json +40 -22
  50. package/artifacts/cat721/cat721StateLib.scrypt +5 -5
  51. package/artifacts/cat721/minters/cat721ClosedMinter.json +52 -34
  52. package/artifacts/cat721/minters/cat721ClosedMinter.scrypt +18 -18
  53. package/artifacts/cat721/minters/cat721OpenMintInfo.json +5 -5
  54. package/artifacts/cat721/minters/cat721OpenMintInfo.scrypt +4 -4
  55. package/artifacts/cat721/minters/cat721OpenMinter.json +57 -39
  56. package/artifacts/cat721/minters/cat721OpenMinter.scrypt +22 -22
  57. package/artifacts/cat721/minters/cat721OpenMinterMerkleTree.json +37 -19
  58. package/artifacts/cat721/minters/cat721OpenMinterMerkleTree.scrypt +6 -6
  59. package/artifacts/cat721/types.json +5 -5
  60. package/artifacts/cat721/types.scrypt +5 -5
  61. package/artifacts/constants.json +2 -2
  62. package/artifacts/constants.scrypt +1 -1
  63. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/backtrace.scrypt +13 -13
  64. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/contextUtils.scrypt +16 -16
  65. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/stateUtils.scrypt +1 -1
  66. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/stdUtils.scrypt +13 -13
  67. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/txHashPreimageUtils.scrypt +7 -7
  68. package/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/txUtils.scrypt +12 -12
  69. package/artifacts/scrypt-ts-opcat/assets/smart-contract/types/structs.scrypt +15 -9
  70. package/artifacts/types.json +2 -2
  71. package/artifacts/types.scrypt +2 -2
  72. package/artifacts/utils/ownerUtils.json +32 -14
  73. package/artifacts/utils/ownerUtils.scrypt +3 -3
  74. package/artifacts/utils/safeMath.json +32 -14
  75. package/artifacts/utils/safeMath.scrypt +1 -1
  76. package/dist/artifacts/cat20/cat20.json +52 -34
  77. package/dist/artifacts/cat20/cat20.scrypt +18 -18
  78. package/dist/artifacts/cat20/cat20Admin.json +54 -36
  79. package/dist/artifacts/cat20/cat20Admin.scrypt +30 -30
  80. package/dist/artifacts/cat20/cat20GuardStateLib.json +39 -21
  81. package/dist/artifacts/cat20/cat20GuardStateLib.scrypt +5 -5
  82. package/dist/artifacts/cat20/cat20Guard_12_12_2.json +53 -35
  83. package/dist/artifacts/cat20/cat20Guard_12_12_2.scrypt +29 -29
  84. package/dist/artifacts/cat20/cat20Guard_12_12_4.json +53 -35
  85. package/dist/artifacts/cat20/cat20Guard_12_12_4.scrypt +29 -29
  86. package/dist/artifacts/cat20/cat20Guard_6_6_2.json +53 -35
  87. package/dist/artifacts/cat20/cat20Guard_6_6_2.scrypt +29 -29
  88. package/dist/artifacts/cat20/cat20Guard_6_6_4.json +53 -35
  89. package/dist/artifacts/cat20/cat20Guard_6_6_4.scrypt +29 -29
  90. package/dist/artifacts/cat20/cat20StateLib.json +40 -22
  91. package/dist/artifacts/cat20/cat20StateLib.scrypt +5 -5
  92. package/dist/artifacts/cat20/minters/cat20ClosedMinter.json +52 -34
  93. package/dist/artifacts/cat20/minters/cat20ClosedMinter.scrypt +22 -22
  94. package/dist/artifacts/cat20/minters/cat20OpenMinter.json +52 -34
  95. package/dist/artifacts/cat20/minters/cat20OpenMinter.scrypt +19 -18
  96. package/dist/artifacts/cat20/types.json +5 -5
  97. package/dist/artifacts/cat20/types.scrypt +5 -5
  98. package/dist/artifacts/cat721/cat721.json +52 -34
  99. package/dist/artifacts/cat721/cat721.scrypt +18 -18
  100. package/dist/artifacts/cat721/cat721GuardStateLib.json +39 -21
  101. package/dist/artifacts/cat721/cat721GuardStateLib.scrypt +5 -5
  102. package/dist/artifacts/cat721/cat721Guard_12_12_2.json +52 -34
  103. package/dist/artifacts/cat721/cat721Guard_12_12_2.scrypt +26 -26
  104. package/dist/artifacts/cat721/cat721Guard_12_12_4.json +52 -34
  105. package/dist/artifacts/cat721/cat721Guard_12_12_4.scrypt +26 -26
  106. package/dist/artifacts/cat721/cat721Guard_6_6_2.json +52 -34
  107. package/dist/artifacts/cat721/cat721Guard_6_6_2.scrypt +26 -26
  108. package/dist/artifacts/cat721/cat721Guard_6_6_4.json +52 -34
  109. package/dist/artifacts/cat721/cat721Guard_6_6_4.scrypt +26 -26
  110. package/dist/artifacts/cat721/cat721StateLib.json +40 -22
  111. package/dist/artifacts/cat721/cat721StateLib.scrypt +5 -5
  112. package/dist/artifacts/cat721/minters/cat721ClosedMinter.json +52 -34
  113. package/dist/artifacts/cat721/minters/cat721ClosedMinter.scrypt +18 -18
  114. package/dist/artifacts/cat721/minters/cat721OpenMintInfo.json +5 -5
  115. package/dist/artifacts/cat721/minters/cat721OpenMintInfo.scrypt +4 -4
  116. package/dist/artifacts/cat721/minters/cat721OpenMinter.json +57 -39
  117. package/dist/artifacts/cat721/minters/cat721OpenMinter.scrypt +22 -22
  118. package/dist/artifacts/cat721/minters/cat721OpenMinterMerkleTree.json +37 -19
  119. package/dist/artifacts/cat721/minters/cat721OpenMinterMerkleTree.scrypt +6 -6
  120. package/dist/artifacts/cat721/types.json +5 -5
  121. package/dist/artifacts/cat721/types.scrypt +5 -5
  122. package/dist/artifacts/constants.json +2 -2
  123. package/dist/artifacts/constants.scrypt +1 -1
  124. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/backtrace.scrypt +13 -13
  125. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/contextUtils.scrypt +16 -16
  126. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/stateUtils.scrypt +1 -1
  127. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/stdUtils.scrypt +13 -13
  128. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/txHashPreimageUtils.scrypt +7 -7
  129. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/builtin-libs/txUtils.scrypt +12 -12
  130. package/dist/artifacts/scrypt-ts-opcat/assets/smart-contract/types/structs.scrypt +15 -9
  131. package/dist/artifacts/types.json +2 -2
  132. package/dist/artifacts/types.scrypt +2 -2
  133. package/dist/artifacts/utils/ownerUtils.json +32 -14
  134. package/dist/artifacts/utils/ownerUtils.scrypt +3 -3
  135. package/dist/artifacts/utils/safeMath.json +32 -14
  136. package/dist/artifacts/utils/safeMath.scrypt +1 -1
  137. package/dist/cjs/contracts/cat20/minters/cat20OpenMinter.js +1 -0
  138. package/dist/cjs/contracts/cat20/minters/cat20OpenMinter.js.map +1 -1
  139. package/dist/cjs/utils/index.js +1 -1
  140. package/dist/cjs/utils/index.js.map +1 -1
  141. package/dist/esm/contracts/cat20/minters/cat20OpenMinter.js +1 -0
  142. package/dist/esm/contracts/cat20/minters/cat20OpenMinter.js.map +1 -1
  143. package/dist/esm/utils/index.js +1 -1
  144. package/dist/esm/utils/index.js.map +1 -1
  145. package/dist/types/contracts/cat20/minters/cat20OpenMinter.d.ts.map +1 -1
  146. package/package.json +4 -4
  147. package/scrypt.index.json +13 -13
@@ -13,7 +13,7 @@ contract CAT20Admin {
13
13
  constructor(bytes genesisOutpoint) {
14
14
  this.genesisOutpoint = genesisOutpoint;
15
15
  }
16
- public function authorizeToSpendToken(PubKey adminPubKey, Sig adminSig, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20AdminState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
16
+ public function authorizeToSpendToken(PubKey adminPubKey, Sig adminSig, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20AdminState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
17
17
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
18
18
 
19
19
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -36,9 +36,9 @@ contract CAT20Admin {
36
36
  require(checkSig(adminSig, adminPubKey));
37
37
  bytes adminOutput = TxUtils.buildDataOutput(adminScriptHash, __scrypt_ts_shPreimage.value, __scrypt_ts_shPreimage.spentDataHash);
38
38
  require(hash256(adminOutput +
39
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
39
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
40
40
  }
41
- public function transferOwnership(PubKey adminPubKey, Sig adminSig, Ripemd160 newPubKeyHash, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20AdminState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
41
+ public function transferOwnership(PubKey adminPubKey, Sig adminSig, Ripemd160 newPubKeyHash, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20AdminState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
42
42
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
43
43
 
44
44
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -62,7 +62,7 @@ contract CAT20Admin {
62
62
  __scrypt_ts_nextState.adminAddress = OwnerUtils.pubKeyHashtoLockingScript(newPubKeyHash);
63
63
  bytes adminOutput = TxUtils.buildDataOutput(adminScriptHash, __scrypt_ts_shPreimage.value, CAT20Admin.stateHash(__scrypt_ts_nextState));
64
64
  require(hash256(adminOutput +
65
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
65
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
66
66
  }
67
67
  static function serializeState(CAT20AdminState __scrypt_ts_curState): bytes {
68
68
  return num2bin(len(__scrypt_ts_curState.tag), 2) + __scrypt_ts_curState.tag + num2bin(len(__scrypt_ts_curState.adminAddress), 2) + __scrypt_ts_curState.adminAddress + hash160(hash160(__scrypt_ts_curState.tag) + hash160(__scrypt_ts_curState.adminAddress));
@@ -116,7 +116,7 @@ contract CAT20Guard_12_12_2 {
116
116
  }
117
117
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
118
118
  }
119
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
119
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
120
120
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
121
121
 
122
122
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -130,7 +130,7 @@ contract CAT20Guard_12_12_2 {
130
130
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
131
131
  require(checkSig(userSig, userPubKey));
132
132
  require(hash256(
133
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
133
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
134
134
  }
135
135
  static function serializeState(CAT20GuardConstState __scrypt_ts_curState): bytes {
136
136
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[0]), 2) + __scrypt_ts_curState.tokenScriptHashes[0] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[1]), 2) + __scrypt_ts_curState.tokenScriptHashes[1] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[2]), 2) + __scrypt_ts_curState.tokenScriptHashes[2] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[3]), 2) + __scrypt_ts_curState.tokenScriptHashes[3] + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenAmounts[3]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[3]) + num2bin(len(__scrypt_ts_curState.tokenScriptIndexes), 2) + __scrypt_ts_curState.tokenScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.tokenScriptHashes[0]) + hash160(__scrypt_ts_curState.tokenScriptHashes[1]) + hash160(__scrypt_ts_curState.tokenScriptHashes[2]) + hash160(__scrypt_ts_curState.tokenScriptHashes[3]) + hash160(pack(__scrypt_ts_curState.tokenAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[3])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[3])) + hash160(__scrypt_ts_curState.tokenScriptIndexes));
@@ -116,7 +116,7 @@ contract CAT20Guard_12_12_4 {
116
116
  }
117
117
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
118
118
  }
119
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
119
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
120
120
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
121
121
 
122
122
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -130,7 +130,7 @@ contract CAT20Guard_12_12_4 {
130
130
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
131
131
  require(checkSig(userSig, userPubKey));
132
132
  require(hash256(
133
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
133
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
134
134
  }
135
135
  static function serializeState(CAT20GuardConstState __scrypt_ts_curState): bytes {
136
136
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[0]), 2) + __scrypt_ts_curState.tokenScriptHashes[0] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[1]), 2) + __scrypt_ts_curState.tokenScriptHashes[1] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[2]), 2) + __scrypt_ts_curState.tokenScriptHashes[2] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[3]), 2) + __scrypt_ts_curState.tokenScriptHashes[3] + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenAmounts[3]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[3]) + num2bin(len(__scrypt_ts_curState.tokenScriptIndexes), 2) + __scrypt_ts_curState.tokenScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.tokenScriptHashes[0]) + hash160(__scrypt_ts_curState.tokenScriptHashes[1]) + hash160(__scrypt_ts_curState.tokenScriptHashes[2]) + hash160(__scrypt_ts_curState.tokenScriptHashes[3]) + hash160(pack(__scrypt_ts_curState.tokenAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[3])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[3])) + hash160(__scrypt_ts_curState.tokenScriptIndexes));
@@ -116,7 +116,7 @@ contract CAT20Guard_6_6_2 {
116
116
  }
117
117
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
118
118
  }
119
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
119
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
120
120
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
121
121
 
122
122
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -130,7 +130,7 @@ contract CAT20Guard_6_6_2 {
130
130
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
131
131
  require(checkSig(userSig, userPubKey));
132
132
  require(hash256(
133
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
133
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
134
134
  }
135
135
  static function serializeState(CAT20GuardConstState __scrypt_ts_curState): bytes {
136
136
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[0]), 2) + __scrypt_ts_curState.tokenScriptHashes[0] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[1]), 2) + __scrypt_ts_curState.tokenScriptHashes[1] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[2]), 2) + __scrypt_ts_curState.tokenScriptHashes[2] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[3]), 2) + __scrypt_ts_curState.tokenScriptHashes[3] + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenAmounts[3]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[3]) + num2bin(len(__scrypt_ts_curState.tokenScriptIndexes), 2) + __scrypt_ts_curState.tokenScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.tokenScriptHashes[0]) + hash160(__scrypt_ts_curState.tokenScriptHashes[1]) + hash160(__scrypt_ts_curState.tokenScriptHashes[2]) + hash160(__scrypt_ts_curState.tokenScriptHashes[3]) + hash160(pack(__scrypt_ts_curState.tokenAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[3])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[3])) + hash160(__scrypt_ts_curState.tokenScriptIndexes));
@@ -116,7 +116,7 @@ contract CAT20Guard_6_6_4 {
116
116
  }
117
117
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
118
118
  }
119
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
119
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
120
120
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
121
121
 
122
122
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -130,7 +130,7 @@ contract CAT20Guard_6_6_4 {
130
130
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
131
131
  require(checkSig(userSig, userPubKey));
132
132
  require(hash256(
133
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
133
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
134
134
  }
135
135
  static function serializeState(CAT20GuardConstState __scrypt_ts_curState): bytes {
136
136
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[0]), 2) + __scrypt_ts_curState.tokenScriptHashes[0] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[1]), 2) + __scrypt_ts_curState.tokenScriptHashes[1] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[2]), 2) + __scrypt_ts_curState.tokenScriptHashes[2] + num2bin(len(__scrypt_ts_curState.tokenScriptHashes[3]), 2) + __scrypt_ts_curState.tokenScriptHashes[3] + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenAmounts[3]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[0])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[0]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[1])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[1]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[2])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[2]) + num2bin(len(pack(__scrypt_ts_curState.tokenBurnAmounts[3])), 2) + pack(__scrypt_ts_curState.tokenBurnAmounts[3]) + num2bin(len(__scrypt_ts_curState.tokenScriptIndexes), 2) + __scrypt_ts_curState.tokenScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.tokenScriptHashes[0]) + hash160(__scrypt_ts_curState.tokenScriptHashes[1]) + hash160(__scrypt_ts_curState.tokenScriptHashes[2]) + hash160(__scrypt_ts_curState.tokenScriptHashes[3]) + hash160(pack(__scrypt_ts_curState.tokenAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenAmounts[3])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[0])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[1])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[2])) + hash160(pack(__scrypt_ts_curState.tokenBurnAmounts[3])) + hash160(__scrypt_ts_curState.tokenScriptIndexes));
@@ -16,7 +16,7 @@ contract CAT20ClosedMinter {
16
16
  this.issuerAddress = ownerAddress;
17
17
  this.genesisOutpoint = genesisOutpoint;
18
18
  }
19
- public function mint(CAT20State tokenMint, PubKey issuerPubKey, Sig issuerSig, int minterSatoshis, int tokenSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20ClosedMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
19
+ public function mint(CAT20State tokenMint, PubKey issuerPubKey, Sig issuerSig, int minterSatoshis, int tokenSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20ClosedMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
20
20
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
21
21
 
22
22
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -46,7 +46,7 @@ contract CAT20ClosedMinter {
46
46
  bytes tokenStateHash = CAT20StateLib.stateHash(tokenMint);
47
47
  bytes tokenOutput = TxUtils.buildDataOutput(__scrypt_ts_nextState.tokenScriptHash, tokenSatoshis, tokenStateHash);
48
48
  require(hash256(minterOutput + tokenOutput +
49
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
49
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
50
50
  }
51
51
  static function checkState(CAT20ClosedMinterState _state) : bool {
52
52
  require(len(_state.tokenScriptHash) == 32);
@@ -1 +1 @@
1
- [[],[],[],[],[],[],[],[],[],[],[],[[9,0,41,13]],[[2,0,43,19],[8,0,43,2]],[[2,0,47,12],[6,0,47,2]],[[2,0,51,11],[6,0,51,2]],[[2,0,54,16],[6,0,54,2]],[[2,0,57,9],[6,0,57,2]],[[2,0,60,16],[8,0,60,2]],[[2,0,62,2],[14,0,63,21],[20,0,63,4],[37,0,64,14],[41,0,64,4],[51,0,65,13],[55,0,65,4],[64,0,66,18],[68,0,66,4],[82,0,67,11],[86,0,67,4],[93,0,68,17],[99,0,68,4]],[[4,0,71,4],[8,0,71,9],[25,0,71,4],[27,0,71,27]],[[4,0,72,4],[8,0,72,9],[18,0,72,4],[20,0,72,20]],[[4,0,75,4],[8,0,75,9],[17,0,75,4],[19,0,75,19]],[[4,0,76,4],[8,0,76,9],[22,0,76,4],[24,0,76,24]],[[4,0,77,4],[8,0,77,9],[15,0,77,4],[17,0,77,17]],[[4,0,78,4],[8,0,78,9],[22,0,78,4],[24,0,78,24]],[],[[2,0,82,2],[18,0,82,9],[23,0,84,15],[34,0,84,4],[45,0,85,25],[48,0,85,25],[52,0,85,4],[73,0,87,20],[80,0,87,4],[96,0,88,17],[100,0,88,4],[113,0,90,20],[117,0,90,4],[133,0,92,19],[137,0,92,4],[152,0,94,19],[166,0,94,4]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[33,0,97,29],[48,0,97,44],[52,0,97,49]],[[4,0,100,24],[10,0,100,8],[26,0,100,37]],[[4,0,101,32],[8,0,101,8],[32,0,101,32]],[[15,0,102,13]],[[8,0,103,29],[12,0,103,12],[29,0,103,29],[49,0,103,49]],[[8,0,104,6],[11,0,104,10],[26,0,104,10],[28,0,104,27]],[[10,0,105,8],[32,0,105,8],[35,0,105,33]],[[10,0,106,8],[24,0,106,8],[27,0,106,25],[34,0,106,33],[91,0,108,10],[107,0,109,10],[114,0,109,17],[129,0,109,33],[145,0,109,48],[167,0,110,40],[185,0,111,29]],[],[],[[4,0,119,27],[11,0,119,10],[28,0,119,27],[35,0,119,34],[48,0,119,48],[64,0,119,63]],[[4,0,120,24],[10,0,120,10],[24,0,120,24],[31,0,120,32],[69,0,121,17],[87,0,122,6],[102,0,123,6]],[[4,0,125,4],[7,0,125,8],[29,0,125,20],[46,0,125,8],[49,0,125,39],[53,0,125,44],[62,0,125,39],[64,0,125,54]],[[8,0,127,6],[16,0,127,13],[20,0,127,18],[30,0,127,13],[54,0,127,41],[70,0,127,30],[72,0,127,58],[76,0,127,63]],[[8,0,129,6],[18,0,129,17],[34,0,129,32],[50,0,129,48],[54,0,129,53]],[[8,0,130,6],[16,0,130,18],[24,0,130,13],[25,0,130,27],[38,0,130,40],[52,0,130,13]],[[8,0,132,6],[16,0,132,13],[38,0,132,13],[62,0,132,49]],[[8,0,133,6],[16,0,133,13],[25,0,133,23],[33,0,133,13],[36,0,133,33],[40,0,133,38]],[],[[8,0,136,6],[11,0,136,10],[33,0,136,22]],[[10,0,138,8],[18,0,138,15],[22,0,138,20],[32,0,138,15],[56,0,138,43]],[[10,0,139,8],[18,0,139,15],[22,0,139,20],[36,0,139,15],[39,0,139,36]],[[10,0,140,8],[18,0,140,15],[22,0,140,20],[31,0,140,15],[34,0,140,31]],[],[[8,0,142,6],[16,0,142,13],[38,0,142,13],[62,0,142,49],[78,0,142,38],[80,0,142,66]],[[8,0,143,6],[16,0,143,13],[25,0,143,23],[33,0,143,13],[36,0,143,33],[40,0,143,38]],[],[[4,0,147,25],[10,0,147,10]],[],[[4,0,150,4],[20,0,150,29],[34,0,150,29],[36,0,150,45],[48,0,150,29],[50,0,150,59]],[],[],[],[],[],[],[],[]]
1
+ [[],[],[],[],[],[],[],[],[],[],[],[[9,0,41,13]],[[2,0,43,19],[8,0,43,2]],[[2,0,47,12],[6,0,47,2]],[[2,0,51,11],[6,0,51,2]],[[2,0,54,16],[6,0,54,2]],[[2,0,57,9],[6,0,57,2]],[[2,0,60,16],[8,0,60,2]],[[2,0,62,2],[14,0,63,21],[20,0,63,4],[37,0,64,14],[41,0,64,4],[51,0,65,13],[55,0,65,4],[64,0,66,18],[68,0,66,4],[82,0,67,11],[86,0,67,4],[93,0,68,17],[99,0,68,4]],[[4,0,71,4],[8,0,71,9],[25,0,71,4],[27,0,71,27]],[[4,0,72,4],[8,0,72,9],[18,0,72,4],[20,0,72,20]],[[4,0,75,4],[8,0,75,9],[17,0,75,4],[19,0,75,19]],[[4,0,76,4],[8,0,76,9],[22,0,76,4],[24,0,76,24]],[[4,0,77,4],[8,0,77,9],[15,0,77,4],[17,0,77,17]],[[4,0,78,4],[8,0,78,9],[22,0,78,4],[24,0,78,24]],[],[[2,0,82,2],[18,0,82,9],[23,0,84,15],[34,0,84,4],[45,0,85,25],[48,0,85,25],[52,0,85,4],[73,0,87,20],[80,0,87,4],[96,0,88,17],[100,0,88,4],[113,0,90,20],[117,0,90,4],[133,0,92,19],[137,0,92,4],[152,0,94,19],[166,0,94,4]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[33,0,97,29],[48,0,97,44],[52,0,97,49]],[[4,0,100,24],[10,0,100,8],[26,0,100,37]],[[4,0,101,32],[8,0,101,8],[32,0,101,32]],[[15,0,102,13]],[[8,0,103,29],[12,0,103,12],[29,0,103,29],[49,0,103,49]],[[8,0,104,6],[11,0,104,10],[26,0,104,10],[28,0,104,27]],[[10,0,105,8],[32,0,105,8],[35,0,105,33]],[[10,0,106,8],[24,0,106,8],[27,0,106,25],[34,0,106,33],[91,0,108,10],[107,0,109,10],[114,0,109,17],[129,0,109,33],[145,0,109,48],[167,0,110,40],[185,0,111,29]],[],[],[[4,0,119,4],[17,0,119,18],[29,0,119,29]],[[4,0,120,27],[11,0,120,10],[28,0,120,27],[35,0,120,34],[48,0,120,48],[64,0,120,63]],[[4,0,121,24],[10,0,121,10],[24,0,121,24],[31,0,121,32],[69,0,122,17],[87,0,123,6],[102,0,124,6]],[[4,0,126,4],[7,0,126,8],[29,0,126,20],[46,0,126,8],[49,0,126,39],[53,0,126,44],[62,0,126,39],[64,0,126,54]],[[8,0,128,6],[16,0,128,13],[20,0,128,18],[30,0,128,13],[54,0,128,41],[70,0,128,30],[72,0,128,58],[76,0,128,63]],[[8,0,130,6],[18,0,130,17],[34,0,130,32],[50,0,130,48],[54,0,130,53]],[[8,0,131,6],[16,0,131,18],[24,0,131,13],[25,0,131,27],[38,0,131,40],[52,0,131,13]],[[8,0,133,6],[16,0,133,13],[38,0,133,13],[62,0,133,49]],[[8,0,134,6],[16,0,134,13],[25,0,134,23],[33,0,134,13],[36,0,134,33],[40,0,134,38]],[],[[8,0,137,6],[11,0,137,10],[33,0,137,22]],[[10,0,139,8],[18,0,139,15],[22,0,139,20],[32,0,139,15],[56,0,139,43]],[[10,0,140,8],[18,0,140,15],[22,0,140,20],[36,0,140,15],[39,0,140,36]],[[10,0,141,8],[18,0,141,15],[22,0,141,20],[31,0,141,15],[34,0,141,31]],[],[[8,0,143,6],[16,0,143,13],[38,0,143,13],[62,0,143,49],[78,0,143,38],[80,0,143,66]],[[8,0,144,6],[16,0,144,13],[25,0,144,23],[33,0,144,13],[36,0,144,33],[40,0,144,38]],[],[[4,0,148,25],[10,0,148,10]],[],[[4,0,151,4],[20,0,151,29],[34,0,151,29],[36,0,151,45],[48,0,151,29],[50,0,151,59]],[],[],[],[],[],[],[],[]]
@@ -24,7 +24,7 @@ contract CAT20OpenMinter {
24
24
  this.limit = limit;
25
25
  this.preminerAddr = premineAddr;
26
26
  }
27
- public function mint(CAT20State tokenMint, int[2] nextRemainingCounts, PubKey preminerPubKey, Sig preminerSig, int minterSatoshis, int tokenSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT20OpenMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
27
+ public function mint(CAT20State tokenMint, int[2] nextRemainingCounts, PubKey preminerPubKey, Sig preminerSig, int minterSatoshis, int tokenSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT20OpenMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
28
28
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
29
29
 
30
30
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -51,6 +51,7 @@ contract CAT20OpenMinter {
51
51
  minterOutputs += TxUtils.buildDataOutput(__scrypt_ts_shPreimage.spentScriptHash, minterSatoshis, sha256(CAT20OpenMinter.serializeState({__scrypt_ts_nextState.tokenScriptHash, true, remainingCount})));
52
52
  }
53
53
  }
54
+ CAT20StateLib.checkState(tokenMint);
54
55
  Sha256 tokenStateHash = sha256(CAT20StateLib.serializeState(tokenMint));
55
56
  bytes tokenOutput = TxUtils.buildDataOutput(__scrypt_ts_nextState.tokenScriptHash, tokenSatoshis, tokenStateHash);
56
57
  if(!__scrypt_ts_nextState.hasMintedBefore && this.premine > 0) {
@@ -69,7 +70,7 @@ contract CAT20OpenMinter {
69
70
  require(tokenMint.amount == this.limit);
70
71
  }
71
72
  bytes changeOutput =
72
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'');
73
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'');
73
74
  require(hash256(minterOutputs + tokenOutput + changeOutput) == __scrypt_ts_shPreimage.hashOutputs);
74
75
  }
75
76
  static function serializeState(CAT20OpenMinterState __scrypt_ts_curState): bytes {
@@ -114,7 +114,7 @@ contract CAT721Guard_12_12_2 {
114
114
  require(nextNftCount == outputNftCount);
115
115
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
116
116
  }
117
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
117
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
118
118
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
119
119
 
120
120
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -128,7 +128,7 @@ contract CAT721Guard_12_12_2 {
128
128
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
129
129
  require(checkSig(userSig, userPubKey));
130
130
  require(hash256(
131
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
131
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
132
132
  }
133
133
  static function serializeState(CAT721GuardConstState __scrypt_ts_curState): bytes {
134
134
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.nftScriptHashes[0]), 2) + __scrypt_ts_curState.nftScriptHashes[0] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[1]), 2) + __scrypt_ts_curState.nftScriptHashes[1] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[2]), 2) + __scrypt_ts_curState.nftScriptHashes[2] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[3]), 2) + __scrypt_ts_curState.nftScriptHashes[3] + num2bin(len(__scrypt_ts_curState.nftBurnMasks), 2) + __scrypt_ts_curState.nftBurnMasks + num2bin(len(__scrypt_ts_curState.nftScriptIndexes), 2) + __scrypt_ts_curState.nftScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.nftScriptHashes[0]) + hash160(__scrypt_ts_curState.nftScriptHashes[1]) + hash160(__scrypt_ts_curState.nftScriptHashes[2]) + hash160(__scrypt_ts_curState.nftScriptHashes[3]) + hash160(__scrypt_ts_curState.nftBurnMasks) + hash160(__scrypt_ts_curState.nftScriptIndexes));
@@ -114,7 +114,7 @@ contract CAT721Guard_12_12_4 {
114
114
  require(nextNftCount == outputNftCount);
115
115
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
116
116
  }
117
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
117
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
118
118
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
119
119
 
120
120
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -128,7 +128,7 @@ contract CAT721Guard_12_12_4 {
128
128
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
129
129
  require(checkSig(userSig, userPubKey));
130
130
  require(hash256(
131
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
131
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
132
132
  }
133
133
  static function serializeState(CAT721GuardConstState __scrypt_ts_curState): bytes {
134
134
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.nftScriptHashes[0]), 2) + __scrypt_ts_curState.nftScriptHashes[0] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[1]), 2) + __scrypt_ts_curState.nftScriptHashes[1] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[2]), 2) + __scrypt_ts_curState.nftScriptHashes[2] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[3]), 2) + __scrypt_ts_curState.nftScriptHashes[3] + num2bin(len(__scrypt_ts_curState.nftBurnMasks), 2) + __scrypt_ts_curState.nftBurnMasks + num2bin(len(__scrypt_ts_curState.nftScriptIndexes), 2) + __scrypt_ts_curState.nftScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.nftScriptHashes[0]) + hash160(__scrypt_ts_curState.nftScriptHashes[1]) + hash160(__scrypt_ts_curState.nftScriptHashes[2]) + hash160(__scrypt_ts_curState.nftScriptHashes[3]) + hash160(__scrypt_ts_curState.nftBurnMasks) + hash160(__scrypt_ts_curState.nftScriptIndexes));
@@ -114,7 +114,7 @@ contract CAT721Guard_6_6_2 {
114
114
  require(nextNftCount == outputNftCount);
115
115
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
116
116
  }
117
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
117
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
118
118
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
119
119
 
120
120
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -128,7 +128,7 @@ contract CAT721Guard_6_6_2 {
128
128
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
129
129
  require(checkSig(userSig, userPubKey));
130
130
  require(hash256(
131
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
131
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
132
132
  }
133
133
  static function serializeState(CAT721GuardConstState __scrypt_ts_curState): bytes {
134
134
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.nftScriptHashes[0]), 2) + __scrypt_ts_curState.nftScriptHashes[0] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[1]), 2) + __scrypt_ts_curState.nftScriptHashes[1] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[2]), 2) + __scrypt_ts_curState.nftScriptHashes[2] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[3]), 2) + __scrypt_ts_curState.nftScriptHashes[3] + num2bin(len(__scrypt_ts_curState.nftBurnMasks), 2) + __scrypt_ts_curState.nftBurnMasks + num2bin(len(__scrypt_ts_curState.nftScriptIndexes), 2) + __scrypt_ts_curState.nftScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.nftScriptHashes[0]) + hash160(__scrypt_ts_curState.nftScriptHashes[1]) + hash160(__scrypt_ts_curState.nftScriptHashes[2]) + hash160(__scrypt_ts_curState.nftScriptHashes[3]) + hash160(__scrypt_ts_curState.nftBurnMasks) + hash160(__scrypt_ts_curState.nftScriptIndexes));
@@ -114,7 +114,7 @@ contract CAT721Guard_6_6_4 {
114
114
  require(nextNftCount == outputNftCount);
115
115
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
116
116
  }
117
- public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
117
+ public function destroy(Sig userSig, PubKey userPubKey, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721GuardConstState __scrypt_ts_curState, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes) {
118
118
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
119
119
 
120
120
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -128,7 +128,7 @@ contract CAT721Guard_6_6_4 {
128
128
  OwnerUtils.checkUserOwner(userPubKey, __scrypt_ts_nextState.deployerAddr);
129
129
  require(checkSig(userSig, userPubKey));
130
130
  require(hash256(
131
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
131
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'')) == __scrypt_ts_shPreimage.hashOutputs);
132
132
  }
133
133
  static function serializeState(CAT721GuardConstState __scrypt_ts_curState): bytes {
134
134
  return num2bin(len(__scrypt_ts_curState.deployerAddr), 2) + __scrypt_ts_curState.deployerAddr + num2bin(len(__scrypt_ts_curState.nftScriptHashes[0]), 2) + __scrypt_ts_curState.nftScriptHashes[0] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[1]), 2) + __scrypt_ts_curState.nftScriptHashes[1] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[2]), 2) + __scrypt_ts_curState.nftScriptHashes[2] + num2bin(len(__scrypt_ts_curState.nftScriptHashes[3]), 2) + __scrypt_ts_curState.nftScriptHashes[3] + num2bin(len(__scrypt_ts_curState.nftBurnMasks), 2) + __scrypt_ts_curState.nftBurnMasks + num2bin(len(__scrypt_ts_curState.nftScriptIndexes), 2) + __scrypt_ts_curState.nftScriptIndexes + hash160(hash160(__scrypt_ts_curState.deployerAddr) + hash160(__scrypt_ts_curState.nftScriptHashes[0]) + hash160(__scrypt_ts_curState.nftScriptHashes[1]) + hash160(__scrypt_ts_curState.nftScriptHashes[2]) + hash160(__scrypt_ts_curState.nftScriptHashes[3]) + hash160(__scrypt_ts_curState.nftBurnMasks) + hash160(__scrypt_ts_curState.nftScriptIndexes));
@@ -18,7 +18,7 @@ contract CAT721ClosedMinter {
18
18
  this.genesisOutpoint = genesisOutpoint;
19
19
  this.max = max;
20
20
  }
21
- public function mint(CAT721State nftMint, PubKey issuerPubKey, Sig issuerSig, int minterSatoshis, int nftSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721ClosedMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
21
+ public function mint(CAT721State nftMint, PubKey issuerPubKey, Sig issuerSig, int minterSatoshis, int nftSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721ClosedMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
22
22
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
23
23
 
24
24
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -50,7 +50,7 @@ contract CAT721ClosedMinter {
50
50
  require(nftMint.localId == __scrypt_ts_nextState.nextLocalId);
51
51
  outputs += TxUtils.buildDataOutput(__scrypt_ts_nextState.nftScriptHash, nftSatoshis, CAT721StateLib.stateHash(nftMint));
52
52
  outputs +=
53
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'');
53
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'');
54
54
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
55
55
  }
56
56
  static function serializeState(CAT721ClosedMinterState __scrypt_ts_curState): bytes {
@@ -22,7 +22,7 @@ contract CAT721OpenMinter {
22
22
  this.premine = premine;
23
23
  this.preminerAddr = preminerAddr;
24
24
  }
25
- public function mint(CAT721State nftMint, CAT721OpenMintInfoState openMintInfo, bytes[15] proof, bool[15] proofNodePos, PubKey preminerPubKey, Sig preminerSig, int minterSatoshis, int nftSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, TxOut __scrypt_ts_changeInfo, CAT721OpenMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
25
+ public function mint(CAT721State nftMint, CAT721OpenMintInfoState openMintInfo, bytes[15] proof, bool[15] proofNodePos, PubKey preminerPubKey, Sig preminerSig, int minterSatoshis, int nftSatoshis, BacktraceInfo backtraceInfo, SHPreimage __scrypt_ts_shPreimage, Sig __scrypt_ts_preimageSig, ChangeInfo __scrypt_ts_changeInfo, CAT721OpenMinterState __scrypt_ts_curState, bytes __scrypt_ts_prevouts, bytes __scrypt_ts_spentAmounts, bytes __scrypt_ts_spentDataHashes, bytes __scrypt_ts_spentScriptHashes, TxHashPreimage __scrypt_ts_prevTxHashPreimage) {
26
26
  require(checkDataSig(Sig(__scrypt_ts_preimageSig[0 : len(__scrypt_ts_preimageSig) - 1]), sha256(ContextUtils.serializeSHPreimage(__scrypt_ts_shPreimage)), ContextUtils.pubKey) && checkSig(__scrypt_ts_preimageSig, ContextUtils.pubKey));
27
27
 
28
28
  int __scrypt_ts_inputCount = ContextUtils.checkSpentAmounts(__scrypt_ts_spentAmounts, __scrypt_ts_shPreimage.hashSpentAmounts);
@@ -61,7 +61,7 @@ contract CAT721OpenMinter {
61
61
  require(checkSig(preminerSig, preminerPubKey));
62
62
  }
63
63
  outputs +=
64
- (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildOutput(__scrypt_ts_changeInfo.scriptHash, __scrypt_ts_changeInfo.satoshis) : b'');
64
+ (__scrypt_ts_changeInfo.satoshis > 0 ? TxUtils.buildDataOutput(sha256(TxUtils.buildP2PKHScript(__scrypt_ts_changeInfo.pubkeyhash)), __scrypt_ts_changeInfo.satoshis, __scrypt_ts_changeInfo.dataHash) : b'');
65
65
  require(hash256(outputs) == __scrypt_ts_shPreimage.hashOutputs);
66
66
  }
67
67
  static function serializeState(CAT721OpenMinterState __scrypt_ts_curState): bytes {
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 10,
3
3
  "compilerVersion": "1.22.0+commit.47800da",
4
- "contract": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20",
4
+ "contract": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20",
5
5
  "md5": "a4c8a5ce008e7206460b16ff7cd1b928",
6
6
  "structs": [
7
7
  {
8
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20GuardConstState",
8
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20GuardConstState",
9
9
  "params": [
10
10
  {
11
11
  "name": "deployerAddr",
@@ -31,7 +31,7 @@
31
31
  "genericTypes": []
32
32
  },
33
33
  {
34
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20State",
34
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20State",
35
35
  "params": [
36
36
  {
37
37
  "name": "ownerAddr",
@@ -45,7 +45,7 @@
45
45
  "genericTypes": []
46
46
  },
47
47
  {
48
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20ClosedMinterState",
48
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20ClosedMinterState",
49
49
  "params": [
50
50
  {
51
51
  "name": "tokenScriptHash",
@@ -55,7 +55,7 @@
55
55
  "genericTypes": []
56
56
  },
57
57
  {
58
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20OpenMinterState",
58
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20OpenMinterState",
59
59
  "params": [
60
60
  {
61
61
  "name": "tokenScriptHash",
@@ -73,7 +73,7 @@
73
73
  "genericTypes": []
74
74
  },
75
75
  {
76
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20AdminState",
76
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20AdminState",
77
77
  "params": [
78
78
  {
79
79
  "name": "tag",
@@ -87,7 +87,7 @@
87
87
  "genericTypes": []
88
88
  },
89
89
  {
90
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxOut",
90
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxOut",
91
91
  "params": [
92
92
  {
93
93
  "name": "scriptHash",
@@ -105,7 +105,7 @@
105
105
  "genericTypes": []
106
106
  },
107
107
  {
108
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxIn",
108
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxIn",
109
109
  "params": [
110
110
  {
111
111
  "name": "prevTxHash",
@@ -127,7 +127,7 @@
127
127
  "genericTypes": []
128
128
  },
129
129
  {
130
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxHashPreimage",
130
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxHashPreimage",
131
131
  "params": [
132
132
  {
133
133
  "name": "version",
@@ -149,11 +149,11 @@
149
149
  "genericTypes": []
150
150
  },
151
151
  {
152
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__BacktraceInfo",
152
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__BacktraceInfo",
153
153
  "params": [
154
154
  {
155
155
  "name": "prevTxInput",
156
- "type": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxIn"
156
+ "type": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxIn"
157
157
  },
158
158
  {
159
159
  "name": "prevTxInputIndex",
@@ -161,13 +161,13 @@
161
161
  },
162
162
  {
163
163
  "name": "prevPrevTxPreimage",
164
- "type": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxHashPreimage"
164
+ "type": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxHashPreimage"
165
165
  }
166
166
  ],
167
167
  "genericTypes": []
168
168
  },
169
169
  {
170
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__SHPreimage",
170
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__SHPreimage",
171
171
  "params": [
172
172
  {
173
173
  "name": "nVersion",
@@ -229,7 +229,7 @@
229
229
  "genericTypes": []
230
230
  },
231
231
  {
232
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__Outpoint",
232
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__Outpoint",
233
233
  "params": [
234
234
  {
235
235
  "name": "txHash",
@@ -243,7 +243,25 @@
243
243
  "genericTypes": []
244
244
  },
245
245
  {
246
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__ChainTxVerifyResponse",
246
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__ChangeInfo",
247
+ "params": [
248
+ {
249
+ "name": "pubkeyhash",
250
+ "type": "Ripemd160"
251
+ },
252
+ {
253
+ "name": "satoshis",
254
+ "type": "int"
255
+ },
256
+ {
257
+ "name": "dataHash",
258
+ "type": "Sha256"
259
+ }
260
+ ],
261
+ "genericTypes": []
262
+ },
263
+ {
264
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__ChainTxVerifyResponse",
247
265
  "params": [
248
266
  {
249
267
  "name": "prevPrevScript",
@@ -257,7 +275,7 @@
257
275
  "genericTypes": []
258
276
  },
259
277
  {
260
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20ContractUnlockArgs",
278
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20ContractUnlockArgs",
261
279
  "params": [
262
280
  {
263
281
  "name": "spendType",
@@ -279,7 +297,7 @@
279
297
  "genericTypes": []
280
298
  },
281
299
  {
282
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT721ContractUnlockArgs",
300
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT721ContractUnlockArgs",
283
301
  "params": [
284
302
  {
285
303
  "name": "userPubKey",
@@ -297,7 +315,7 @@
297
315
  "genericTypes": []
298
316
  },
299
317
  {
300
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__ReadVarintResult",
318
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__ReadVarintResult",
301
319
  "params": [
302
320
  {
303
321
  "name": "data",
@@ -313,50 +331,50 @@
313
331
  ],
314
332
  "library": [
315
333
  {
316
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__OwnerUtils",
334
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__OwnerUtils",
317
335
  "params": [],
318
336
  "properties": [],
319
337
  "genericTypes": []
320
338
  },
321
339
  {
322
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxUtils",
340
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxUtils",
323
341
  "params": [],
324
342
  "properties": [],
325
343
  "genericTypes": []
326
344
  },
327
345
  {
328
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__StateUtils",
346
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__StateUtils",
329
347
  "params": [],
330
348
  "properties": [],
331
349
  "genericTypes": []
332
350
  },
333
351
  {
334
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxHashPreimageUtils",
352
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxHashPreimageUtils",
335
353
  "params": [],
336
354
  "properties": [],
337
355
  "genericTypes": []
338
356
  },
339
357
  {
340
- "name": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20GuardStateLib",
358
+ "name": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20GuardStateLib",
341
359
  "params": [],
342
360
  "properties": [],
343
361
  "genericTypes": [],
344
- "stateType": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20GuardConstState"
362
+ "stateType": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20GuardConstState"
345
363
  },
346
364
  {
347
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__Backtrace",
365
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__Backtrace",
348
366
  "params": [],
349
367
  "properties": [],
350
368
  "genericTypes": []
351
369
  },
352
370
  {
353
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__ContextUtils",
371
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__ContextUtils",
354
372
  "params": [],
355
373
  "properties": [],
356
374
  "genericTypes": []
357
375
  },
358
376
  {
359
- "name": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__StdUtils",
377
+ "name": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__StdUtils",
360
378
  "params": [],
361
379
  "properties": [],
362
380
  "genericTypes": []
@@ -371,11 +389,11 @@
371
389
  "params": [
372
390
  {
373
391
  "name": "unlockArgs",
374
- "type": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20ContractUnlockArgs"
392
+ "type": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20ContractUnlockArgs"
375
393
  },
376
394
  {
377
395
  "name": "guardState",
378
- "type": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20GuardConstState"
396
+ "type": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20GuardConstState"
379
397
  },
380
398
  {
381
399
  "name": "guardInputIndex",
@@ -383,11 +401,11 @@
383
401
  },
384
402
  {
385
403
  "name": "backtraceInfo",
386
- "type": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__BacktraceInfo"
404
+ "type": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__BacktraceInfo"
387
405
  },
388
406
  {
389
407
  "name": "__scrypt_ts_shPreimage",
390
- "type": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__SHPreimage"
408
+ "type": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__SHPreimage"
391
409
  },
392
410
  {
393
411
  "name": "__scrypt_ts_preimageSig",
@@ -395,7 +413,7 @@
395
413
  },
396
414
  {
397
415
  "name": "__scrypt_ts_curState",
398
- "type": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20State"
416
+ "type": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20State"
399
417
  },
400
418
  {
401
419
  "name": "__scrypt_ts_prevouts",
@@ -415,7 +433,7 @@
415
433
  },
416
434
  {
417
435
  "name": "__scrypt_ts_prevTxHashPreimage",
418
- "type": "_opcat_labs_scrypt_ts_opcat_3_2_0__rs__TxHashPreimage"
436
+ "type": "_opcat_labs_scrypt_ts_opcat_3_4_0__rs__TxHashPreimage"
419
437
  }
420
438
  ]
421
439
  },
@@ -442,7 +460,7 @@
442
460
  }
443
461
  ],
444
462
  "stateProps": [],
445
- "stateType": "_opcat_labs_cat_sdk_3_2_0__rs__CAT20State",
463
+ "stateType": "_opcat_labs_cat_sdk_3_4_0__rs__CAT20State",
446
464
  "buildType": "release",
447
465
  "file": "../cat20.scrypt",
448
466
  "hex": "2102ba79df5f8ae7604a9830f03c7933028186aede0675a16f025dc4f8be8eec038200000000000000<minterScriptHash><guardVariantScriptHashes[0]><guardVariantScriptHashes[1]><guardVariantScriptHashes[2]><guardVariantScriptHashes[3]><hasAdmin><adminScriptHash>56795e7a755d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5d7a5579557955795579607a607a607a607a6d6d5c7a5c7a5c7a5c7a5c7a5c7a5c7a5c7a5c7a78597a75587a587a587a587a587a587a587a587a76587a75577a577a577a577a577a577a577a6d6d6d7501127901137982778c7f75007f770121790121790121790121790121790121790121790121790121790121790121790121790121790121795d798277549d5c79827701209d5b79827701209d5a79827701209d597900a26958798277549d5779827701209d5679827701209d5579827701209d5479827701209d5379827701209d527900a2697800a26976519c6476529c6751686476539c67516864760281009c67516864760282009c67516864760283009c675168695d795d797e5c797e5b797e5a79767600a2637609ffffffffffffffff00a16700686976586e8b806e7c7f75007f6b6d6d6d6c7e59797e58797e57797e56797e55797e54797e5379546e8b806e7c7f75007f6b6d6d6c7e5279546e8b806e7c7f75007f6b6d6d6c7e7854807e6b6d6d6d6d6d6d6d6ca85979ba630112795879ac670068695e79011b7978aa7888785878827d77527997009d6e7c966b6d6d6c77607901217901187970aa5379886e9f69765479012478827d77527997009d6e7c967777779d537952798b0124957f7552790124957f7d7701207f75007f777801247f7501207f77768277549d767601007e817777726d726d7b755f79011d7954795279aa527988765379012078827d77527997009d6e7c967777779d6d756079011c7954795279aa527988765379012078827d77527997009d6e7c967777779d6d75011479011479011a79011779011779788277528052797e78827752807e787e5279a95279a97ea97ea877770114797653798b0120957f7553790120957f775279886d756079607960796079011879011f79557955795579557953798277549d5279014878827d77527997009d6e7c967777775279014878827d77527997009d6e7c96777777557952790000527902fd009f637551675279030000019f6301fd7b757c52776752790500000000019f6301fe7b757c54776701ff7b757c587768686878537952796e8b806e7c7f75007f6b6d6d6c7e7777777e55797e780000527902fd009f637551675279030000019f6301fd7b757c52776752790500000000019f6301fe7b757c54776701ff7b757c587768686878537952796e8b806e7c7f75007f6b6d6d6c7e7777777e54797e53797eaa6b6d6d6d6c76700124950120937f7553790124957f77886d6d6d75012e79012e79012e79012e79012e79012e79012e79012e79012e79011479011b790125798b0120957f750125790120957f77011a795b795b795b795b795b795b795b795b795b7959797656798b0148957f7556790148957f775a795a795a795a795379827701209d76827701209d707600a2637605ffffffff00a16700686976546e8b806e7c7f75007f6b6d6d6c777e787e52797600a2637605ffffffff00a16700686976546e8b806e7c7f75007f6b6d6d6c777e6b6d6d6c88597976567956795679567953798277549d5279014878827d77527997009d6e7c967777775279014878827d77527997009d6e7c96777777557952790000527902fd009f637551675279030000019f6301fd7b757c52776752790500000000019f6301fe7b757c54776701ff7b757c587768686878537952796e8b806e7c7f75007f6b6d6d6c7e7777777e55797e780000527902fd009f637551675279030000019f6301fd7b757c52776752790500000000019f6301fe7b757c54776701ff7b757c587768686878537952796e8b806e7c7f75007f6b6d6d6c7e7777777e54797e53797eaa6b6d6d6d6c8853795a7901489558930120937f755a7901489558937f77785b797600a2637605ffffffff00a16700686976546e8b806e7c7f75007f6b6d6d6c777e787c726d726d726d726d726d726d785579876478547987675168696d6d6d6d6d6d6d013d79013d79013d79013d79013d79013d79013d79013d79013d79013d79013d79013d79013d79013d79013179012979013f790122790124797853796e8b0120957f75780120957f77777776011f79011f79011f79011f7953766b796c756b6d6d6c876476011f79011f79011f79011f7952766b796c756b6d6d6c876751686476011f79011f79011f79011f7951766b796c756b6d6d6c876751686476011f79011f79011f79011f7900766b796c756b6d6d6c87675168697854796e8b0120957f75780120957f7777770114790114790114790114790114790114790114790114790114790114790114790114790114790114795d79827752805e797e5d795d795d795d7953766b796c756b6d6d6c827752807e5d795d795d795d7953766b796c756b6d6d6c7e5d795d795d795d7952766b796c756b6d6d6c827752807e5d795d795d795d7952766b796c756b6d6d6c7e5d795d795d795d7951766b796c756b6d6d6c827752807e5d795d795d795d7951766b796c756b6d6d6c7e5d795d795d795d7900766b796c756b6d6d6c827752807e5d795d795d795d7900766b796c756b6d6d6c7e597959795979597953766b796c756b6d6d6c827752807e597959795979597953766b796c756b6d6d6c7e597959795979597952766b796c756b6d6d6c827752807e597959795979597952766b796c756b6d6d6c7e597959795979597951766b796c756b6d6d6c827752807e597959795979597951766b796c756b6d6d6c7e597959795979597900766b796c756b6d6d6c827752807e597959795979597900766b796c756b6d6d6c7e557955795579557953766b796c756b6d6d6c827752807e557955795579557953766b796c756b6d6d6c7e557955795579557952766b796c756b6d6d6c827752807e557955795579557952766b796c756b6d6d6c7e557955795579557951766b796c756b6d6d6c827752807e557955795579557951766b796c756b6d6d6c7e557955795579557900766b796c756b6d6d6c827752807e557955795579557900766b796c756b6d6d6c7e78827752807e787e5e79a95e795e795e795e7953766b796c756b6d6d6ca97e5e795e795e795e7952766b796c756b6d6d6ca97e5e795e795e795e7951766b796c756b6d6d6ca97e5e795e795e795e7900766b796c756b6d6d6ca97e5a795a795a795a7953766b796c756b6d6d6ca97e5a795a795a795a7952766b796c756b6d6d6ca97e5a795a795a795a7951766b796c756b6d6d6ca97e5a795a795a795a7900766b796c756b6d6d6ca97e567956795679567953766b796c756b6d6d6ca97e567956795679567952766b796c756b6d6d6ca97e567956795679567951766b796c756b6d6d6ca97e567956795679567900766b796c756b6d6d6ca97e5279a97ea97ea86b6d6d6d6d6d6d6d6c88567955798b7f7555797f77810113790113790113790113795455797600a26976549f69948c766b796c756b6d6d6c5779886d6d6d6d6d6d6d6d6d6d7501417900a26301417952a16700686900013f7900a263013f7956799f690112790140796e8b0120957f75780120957f6b6d6d6c68014279009c630141795379787676827701219d750376a91478a97e0288ac7e7778886d014079014279ad67014279519c6352797888675779697657798868686d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7551"