UNPKG

meta-contract-debug

Version:

Meta Contract SDK

107 lines (106 loc) 4.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getGenesisIdentifiers = exports.rebuildNftLockingScript = exports.createNftMintContract = exports.createNftGenesisContract = void 0; const nft_1 = require("../mcp01/contract-factory/nft"); const nftGenesis_1 = require("../mcp01/contract-factory/nftGenesis"); const __1 = require(".."); const nftProto = require("../mcp01/contract-proto/nft.proto"); const ftProto = require("../mcp02/contract-proto/token.proto"); const protoheader_1 = require("../common/protoheader"); const token_1 = require("../mcp02/contract-factory/token"); const TokenUtil = require("../common/tokenUtil"); const tokenGenesis_1 = require("../mcp02/contract-factory/tokenGenesis"); function createNftGenesisContract({ totalSupply, address, }) { const totalSupplyInBn = new __1.BN(totalSupply.toString()); const nftAddress = address.hashBuffer.toString('hex'); const genesisContract = nftGenesis_1.NftGenesisFactory.createContract(); genesisContract.setFormatedDataPart({ totalSupply: totalSupplyInBn, nftAddress, }); return genesisContract; } exports.createNftGenesisContract = createNftGenesisContract; function createNftMintContract({ genesisHash, genesisContract, metaTxId, metaOutputIndex, sensibleID, receiverAddress, unlockContractCodeHashArray, }) { const nftAddress = receiverAddress.hashBuffer.toString('hex'); const mintContract = nft_1.NftFactory.createContract(unlockContractCodeHashArray); mintContract.setFormatedDataPart({ metaidOutpoint: { txid: metaTxId, index: metaOutputIndex, }, nftAddress, totalSupply: genesisContract.getFormatedDataPart().totalSupply, tokenIndex: genesisContract.getFormatedDataPart().tokenIndex, genesisHash, sensibleID, }); return mintContract; } exports.createNftMintContract = createNftMintContract; function rebuildNftLockingScript(nftUtxo, receiverAddress) { const nftScriptBuf = nftUtxo.lockingScript.toBuffer(); let dataPart = nftProto.parseDataPart(nftScriptBuf); dataPart.protoType = protoheader_1.PROTO_TYPE.NFT; dataPart.protoVersion = nftProto.PROTO_VERSION; dataPart.nftAddress = receiverAddress.hashBuffer.toString('hex'); return nftProto.updateScript(nftScriptBuf, dataPart); } exports.rebuildNftLockingScript = rebuildNftLockingScript; function getGenesisIdentifiers({ genesisTx, purse, transferCheckCodeHashArray, unlockContractCodeHashArray, type, }) { let genesis, codehash, sensibleId; const proto = type === 'nft' ? nftProto : ftProto; const genesisOutputIndex = 0; const genesisTxId = genesisTx.id; const genesisLockingScript = genesisTx.outputs[genesisOutputIndex].script; let artifactContract; let genesisHash; if (type === 'nft') { artifactContract = nft_1.NftFactory.createContract(unlockContractCodeHashArray); const genesisContract = nftGenesis_1.NftGenesisFactory.createContract(); genesisContract.setFormatedDataPartFromLockingScript(genesisLockingScript); genesisContract.setFormatedDataPart({ sensibleID: { txid: genesisTxId, index: genesisOutputIndex, }, tokenIndex: __1.BN.Zero, }); genesisHash = genesisContract.getScriptHash(); artifactContract.setFormatedDataPart({ sensibleID: { txid: genesisTxId, index: genesisOutputIndex, }, genesisHash, tokenAddress: purse.address.hashBuffer.toString('hex'), }); } else { artifactContract = token_1.TokenFactory.createContract(transferCheckCodeHashArray, unlockContractCodeHashArray); let newGenesisContract = tokenGenesis_1.TokenGenesisFactory.createContract(); newGenesisContract.setFormatedDataPartFromLockingScript(genesisLockingScript); newGenesisContract.setFormatedDataPart({ sensibleID: { txid: genesisTxId, index: genesisOutputIndex, }, }); genesisHash = newGenesisContract.getScriptHash(); artifactContract.setFormatedDataPart({ sensibleID: { txid: genesisTxId, index: genesisOutputIndex, }, genesisHash, tokenAmount: new __1.BN(0), tokenAddress: purse.address.hashBuffer.toString('hex'), }); } let scriptBuf = artifactContract.lockingScript.toBuffer(); genesis = proto.getQueryGenesis(scriptBuf); codehash = artifactContract.getCodeHash(); sensibleId = TokenUtil.getOutpointBuf(genesisTxId, genesisOutputIndex).toString('hex'); return { codehash, genesis, sensibleId }; } exports.getGenesisIdentifiers = getGenesisIdentifiers;