meta-contract-debug
Version:
Meta Contract SDK
107 lines (106 loc) • 4.86 kB
JavaScript
"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;