Ejemplo n.º 1
0
        public void AddProxy(Address from, Address to, BigInteger percentage)
        {
            Runtime.Expect(percentage > 0, "invalid percentage");
            Runtime.Expect(percentage <= 100, "invalid percentage");
            Runtime.Expect(from != to, "invalid proxy address");
            Runtime.Expect(IsWitness(from), "invalid witness");

            Runtime.Expect(!to.IsNull, "destination cannot be null address");
            Runtime.Expect(!to.IsInterop, "destination cannot be interop address");

            var stakersList   = _proxyStakersMap.Get <Address, StorageList>(from);
            var receiversList = _proxyReceiversMap.Get <Address, StorageList>(to);

            BigInteger sum   = percentage;
            int        index = -1;
            var        count = stakersList.Count();

            for (int i = 0; i < count; i++)
            {
                var proxy = stakersList.Get <EnergyProxy>(i);

                Runtime.Expect(proxy.address != to, "repeated proxy address");

                /*if (proxy.address == to)
                 * {
                 *  sum += percentage;
                 *  index = i;
                 * }
                 * else
                 * {*/
                sum += proxy.percentage;
                //}
            }

            Runtime.Expect(sum <= 100, "invalid sum");

            var entry = new EnergyProxy()
            {
                percentage = (byte)percentage, address = to
            };

            //if (index < 0)
            //{
            stakersList.Add <EnergyProxy>(entry);
            receiversList.Add <Address>(from);

            /*}
             * else
             * {
             *  stakersList.Replace<EnergyProxy>(index, entry);
             * }*/

            Runtime.Notify(EventKind.AddressLink, from, to);
        }
Ejemplo n.º 2
0
        public void AddProxy(Address from, Address to, BigInteger percentage)
        {
            Runtime.Expect(percentage > 0, "invalid percentage");
            Runtime.Expect(percentage <= 100, "invalid percentage");
            Runtime.Expect(from != to, "invalid proxy address");
            Runtime.Expect(IsWitness(from), "invalid witness");

            var list = _proxyMap.Get <Address, StorageList>(from);

            BigInteger sum   = percentage;
            int        index = -1;
            var        count = list.Count();

            for (int i = 0; i < count; i++)
            {
                var proxy = list.Get <EnergyProxy>(i);

                Runtime.Expect(proxy.address != to, "repeated proxy address");

                /*if (proxy.address == to)
                 * {
                 *  sum += percentage;
                 *  index = i;
                 * }
                 * else
                 * {*/
                sum += proxy.percentage;
                //}
            }

            Runtime.Expect(sum <= 100, "invalid sum");

            var entry = new EnergyProxy()
            {
                percentage = (byte)percentage, address = to
            };

            if (index < 0)
            {
                list.Add <EnergyProxy>(entry);
            }
            else
            {
                list.Replace <EnergyProxy>(index, entry);
            }

            Runtime.Notify(EventKind.AddressAdd, from, to);
        }