public void RegisterName(Address target, string name) { Runtime.Expect(target.IsUser, "must be user address"); Runtime.Expect(target != Runtime.GenesisAddress, "address must not be genesis"); Runtime.Expect(Runtime.IsWitness(target), "invalid witness"); Runtime.Expect(ValidationUtils.IsValidIdentifier(name), "invalid name"); var stake = Runtime.GetStake(target); Runtime.Expect(stake >= UnitConversion.GetUnitValue(DomainSettings.StakingTokenDecimals), "must have something staked"); Runtime.Expect(name != Runtime.NexusName, "name already used for nexus"); Runtime.Expect(!Runtime.ChainExists(name), "name already used for a chain"); Runtime.Expect(!Runtime.PlatformExists(name), "name already used for a platform"); Runtime.Expect(!Runtime.ContractExists(name), "name already used for a contract"); Runtime.Expect(!Runtime.FeedExists(name), "name already used for a feed"); Runtime.Expect(!Runtime.OrganizationExists(name), "name already used for a organization"); Runtime.Expect(!Runtime.TokenExists(name.ToUpper()), "name already used for a token"); Runtime.Expect(!_addressMap.ContainsKey(target), "address already has a name"); Runtime.Expect(!_nameMap.ContainsKey(name), "name already used for other account"); var isReserved = ValidationUtils.IsReservedIdentifier(name); if (isReserved && Runtime.IsWitness(Runtime.GenesisAddress)) { isReserved = false; } Runtime.Expect(!isReserved, $"name '{name}' reserved by system"); _addressMap.Set(target, name); _nameMap.Set(name, target); Runtime.Notify(EventKind.AddressRegister, target, name); }