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); }
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); }