//存储一口价销售信息 private static void saveFixedSellingInfo(string[] domainArray, byte[] seller, BigInteger price) { byte[] namehash = getFullNamehashForArray(domainArray); fixedSellingInfo fixedSellingInfo = new fixedSellingInfo(); fixedSellingInfo.fullHash = namehash; fixedSellingInfo.fullDomain = getFullStrForArray(domainArray); fixedSellingInfo.seller = seller; fixedSellingInfo.price = price; //fixedSellingInfo.TTL = TTL; StorageMap fixedSellingInfoMap = Storage.CurrentContext.CreateMap("fixedSellingInfoMap"); fixedSellingInfoMap.Put(namehash, fixedSellingInfo.Serialize()); //通知 onLaunched(fixedSellingInfo); }
//下架 public static object Discontinue(byte[] fullHash) { StorageMap fixedSellingInfoMap = Storage.CurrentContext.CreateMap("fixedSellingInfoMap"); fixedSellingInfo FSI = getfixedSellingInfoByFullhash(fullHash); //无出售信息不能下架 if (FSI.fullHash.Length == 0) { return(false); } //非出售者或超级管理员不可以下架 if (!Runtime.CheckWitness(FSI.seller) && !Runtime.CheckWitness(superAdmin)) { return(false); } //var price = FSI.price; //var seller = FSI.seller; //if (FSI.price == 0) // return false; //将域名所有权转回出售者(域名所有权:DEX合约=>卖家) var result = (byte[])centerCall("owner_SetOwner", new object[3] { ExecutionEngine.ExecutingScriptHash, fullHash, FSI.seller }); if (result.AsBigInteger() != 1) { return(false); } //清除出售信息 fixedSellingInfoMap.Delete(fullHash); //通知 onDiscontinued(FSI); return(true); }
public static object Buy(byte[] buyer, byte[] fullHash) { //只能用本人的钱购买 if (!Runtime.CheckWitness(buyer)) { return(false); } //先获取这个域名的信息 OwnerInfo ownerInfo = GetOwnerInfo(fullHash); //域名没有初始化不能买 if (ownerInfo.owner.Length == 0) { return(false); } //域名已经到期了不能购买 if (!verifyExpires(ownerInfo.TTL)) { return(false); } //获取出售信息 fixedSellingInfo FSI = getfixedSellingInfoByFullhash(fullHash); //无出售信息不能买 if (FSI.fullHash.Length == 0) { return(false); } var seller = FSI.seller; //不允许自己买自己的NNS if (seller.AsBigInteger() == buyer.AsBigInteger()) { return(false); } var price = FSI.price; StorageMap balanceMap = Storage.CurrentContext.CreateMap("balanceMap"); var balanceOfBuyer = balanceMap.Get(buyer).AsBigInteger(); //钱不够不能买 if (balanceOfBuyer < price) { return(false); } //进行域名的转让操作(域名所有权:DEX合约=>买家) var result = (byte[])centerCall("owner_SetOwner", new object[3] { ExecutionEngine.ExecutingScriptHash, FSI.fullHash, buyer }); if (result.AsBigInteger() != 1) //如果域名所有权转移失败,返回失败 { return(false); } /* * 域名转让成功 开始算钱 */ var balanceOfSeller = balanceMap.Get(seller).AsBigInteger(); //给卖方增加钱 balanceMap.Put(seller, balanceOfSeller + price); //给买方减少钱 if (balanceOfBuyer == price)//如果交易金额是全部余额,则清除账户 { balanceMap.Delete(buyer); } else { balanceMap.Put(buyer, balanceOfBuyer - price); } //完成 把售卖信息删除 StorageMap fixedSellingInfoMap = Storage.CurrentContext.CreateMap("fixedSellingInfoMap"); fixedSellingInfoMap.Delete(fullHash); //通知 onBuy(buyer, FSI); return(true); }