コード例 #1
0
ファイル: nns_credit.cs プロジェクト: ttblack/neo-ns
        //登记认证
        //必须拥有NNS的所有权才能成功
        static byte[] authenticate(byte[] addr, string[] domainArray)
        {
            //只能操作自己的地址
            if (!Runtime.CheckWitness(addr))
            {
                return new byte[] { 0 }
            }
            ;

            //使用StorageMap,推荐的存储区使用方式
            StorageMap addrCreditMap = Storage.CurrentContext.CreateMap("addrCreditMap");

            //使用域名中心计算namehash
            //byte[] roothash = rootCall("nameHash", new object[] { rootDomain }) as byte[];
            //byte[] namehash = rootCall("nameHashSub", new object[] { roothash,subDomain }) as byte[];
            byte[] namehash = rootCall("nameHashArray", new object[] { domainArray }) as byte[];

            //使用域名中心获取域名信息
            OwnerInfo ownerInfo = getOwnerInfo(namehash);

            //判断NNS有没有初始化,初始化了才进行
            if (ownerInfo.owner.Length > 0)
            {
                //获取最新块时间
                var lastBlockTime = Blockchain.GetHeader(Blockchain.GetHeight()).Timestamp;

                //如果addr是所有者,而且没有过期,才能登记
                if ((ownerInfo.owner == addr) && (lastBlockTime <= ownerInfo.TTL))
                {
                    NNScredit creditData = new NNScredit();

                    creditData.namehash = namehash;

                    //根域名
                    string fullDomainStr = domainArray[0];
                    //其它逐级拼接
                    for (var i = 1; i < domainArray.Length; i++)
                    {
                        fullDomainStr = string.Concat(domainArray[i], string.Concat(".", fullDomainStr));
                    }
                    creditData.fullDomainName = fullDomainStr;

                    creditData.TTL = ownerInfo.TTL;

                    //creditData.witness = "77e193f1af44a61ed3613e6e3442a0fc809bb4b8".AsByteArray();

                    //存储
                    addrCreditMap.Put(addr, creditData.Serialize());
                    //通知注册
                    onAddrCreditRegistered(addr, creditData);

                    return(new byte[] { 1 });
                }
            }

            return(new byte[] { 0 });
        }
コード例 #2
0
        static NNScredit getCreditInfo(byte[] addr)
        {
            //addr不满足地址正常长度,返回失败
            //if (addr.Length != 20) return new NNScredit();

            //使用StorageMap,推荐的存储区使用方式
            StorageMap addrCreditMap = Storage.CurrentContext.CreateMap("addrCreditMap");

            byte[] creditData = addrCreditMap.Get(addr);

            NNScredit nnsCredit = new NNScredit();

            //如果存储区没有这个地址的数据,返回空类
            if (creditData.Length == 0)
            {
                return(new NNScredit());
            }

            //有数据继续操作
            //读取并反序列化为类,反序列化前必须先验证是否为null
            nnsCredit = (NNScredit)creditData.Deserialize();

            //获取域名信息
            OwnerInfo ownerInfo = getOwnerInfo(nnsCredit.namehash);

            //获取最新块时间
            var lastBlockTime = Blockchain.GetHeader(Blockchain.GetHeight()).Timestamp;

            //如果NNS所有者变了,或者NNS过期了则不返回数据(即使有)
            if ((ownerInfo.owner != addr) || (lastBlockTime > ownerInfo.TTL))
            {
                return(new NNScredit());
            }

            return(nnsCredit);
        }
コード例 #3
0
ファイル: nns_credit.cs プロジェクト: ttblack/neo-ns
        static NNScredit getCreditInfo(byte[] addr)
        {
            //addr不满足地址正常长度,返回失败
            //if (addr.Length != 20) return new NNScredit();

            //使用StorageMap,推荐的存储区使用方式
            StorageMap addrCreditMap = Storage.CurrentContext.CreateMap("addrCreditMap");

            byte[] creditData = addrCreditMap.Get(addr);

            NNScredit nnsCredit = new NNScredit();

            //如果存储区没有这个地址的数据,返回空类
            if (creditData.Length == 0)
            {
                //nnsCredit.namehash = new byte[0];
                //nnsCredit.fullDomainName = "";
                //nnsCredit.TTL = 0;
                return(new NNScredit());
            }

            //有数据继续操作
            //读取并反序列化为类,反序列化前必须先验证是否为null
            nnsCredit = (NNScredit)creditData.Deserialize();

            //获取域名信息
            OwnerInfo ownerInfo = getOwnerInfo(nnsCredit.namehash);

            //获取最新块时间
            var lastBlockTime = Blockchain.GetHeader(Blockchain.GetHeight()).Timestamp;

            //如果NNS所有者变了,或者NNS过期了则不返回数据(即使有)
            if ((ownerInfo.owner != addr) || (lastBlockTime > ownerInfo.TTL))
            {
                //为了能够不用发送交易也能正常运行,这里不能做删除操作(修改性操作)
                ////操作注销
                //addrCreditMap.Delete(addr);
                ////通知注销
                //onAddrCreditRevoke(addr);

                //返回空类
                //nnsCredit.namehash = new byte[0];
                //nnsCredit.fullDomainName = "";
                //nnsCredit.TTL = 0;
                return(new NNScredit());
            }

            return(nnsCredit);


            ////判断addr是否做过NNS登记
            //if (creditData.namehash.Length > 0)
            //{
            //    ////默认返回完整域名名称
            //    //if (flag == new byte[] { 0 })
            //    //    return creditData.fullDomainName.AsByteArray();
            //    //else if (flag == new byte[] { 1 })
            //    //    return creditData.namehash;
            //    //else if (flag == new byte[] { 2 })
            //    //    return creditData.TTL.AsByteArray();
            //    //else
            //    return creditData;
            //}
            //else
            //{
            //    return new NNScredit();
            //}
        }