A python sdk to resolve .algo names and perform name operations on ANS .algo names.
Install Package
pip
pip3 install anssdk
from anssdk.ans import ANS
algod_client = "" # set up your algodV2 client
algod_indexer = "" # set up your algod indexer
#indexer is not required if the intention is to only resolve .algo names, but it is required to view the names owned by an algorand wallet address
#indexer and client must point to mainnet
sdk = ANS(algod_client, algod_indexer)
Resolve .algo name to get the address of the owner. The owner of the account is authorized to manage the domain including setting properties and transfer
name = "ans.algo"
owner = sdk.name(name).get_owner()
print(owner)
The value property is set by the owner to return a different address when resolving the domain names.
name = "ans.algo"
value_property = sdk.name(name).get_value()
print(value_property)
The content property is set by the user to host a website on web3 infrastructure. This is expected to be either a Skylink content ID or an IPFS content ID
name = "ans.algo"
content = sdk.name(name).get_content()
print(content)
Return text record (socials, avatar etc) set by the owner.
name = "ans.algo"
key = "discord"
record = sdk.name(name).get_text(key)
print(record)
Return the entire domain information for the given domains.
name = "ans.algo"
information = sdk.name(name).get_all_information()
print(information)
Prepare name registration transactions
name_to_register = "" #.algo name to register
address = "" # owner's algorand wallet address
period = 0 # duration of registration
try:
name_registration_txns = sdk.name(name_to_register).register(address, period)
# Returns a tuple of size two
# name_registration_txns[0] includes the array of transactions
# name_registration_txns[1] has the logic sig
if(len(name_registration_txns[0]) == 2):
# Lsig account previous opted in (name expired)
# Sign both transactions
# Send all to network
elif(len(name_registration_txns[0]) == 4):
# name_registration_txns[2] must be signed by the sdk
# Sign name_registration_txns index 0,1,3
# Submit transactions as a group
signed_group_txns = []
txns = [
signed_group_txns[0],
signed_group_txns[1],
signed_group_txns[2], # must be signed by the sdk
signed_group_txns[3]
]
# send to network
except:
pass
This method returns transactions to set the social media handles of a domain name
try:
name = "" #.algo name
address = "" # owner's algorand address
edited_handles = {
'discord': '',
'github': ''
}
update_name_property_txns = sdk.name(name).update(address, edited_handles)
# Returns an array of transactions
# Sign each and send to network
except:
pass
Retrieve transactions to renew a name. The ANS registry currently supports renewal only by the owner hence the transactions will fail if the input address is not the current owner of the name.
try:
name = "" # .algo name
owner = "" # owner address
period = 0 # period for renewal
name_renewal_txns = sdk.name(name).renew(owner, period)
# Returns an array of transactions
# Sign each and send to network
except:
pass
This method returns a transaction to initiate name transfer. The owner is required to set the price for transfer and the recipient's algorand account address.
try:
name = "" # .algo name to initiate transfer
owner = "" # current owner
new_owner = "" # new owner's address
price = 0 # price at which the seller is willing to sell the name
name_transfer_transaction = sdk.name(name).init_transfer( owner, new_owner, price)
# Returns a transaction to be signed by `owner`
# Sign and send to network
except:
pass
Retrieve the transactions to complete the transfer by providing the current owner's address, the transfer recipient's address, and the price set by the owner
try:
name = "" # .algo name to accept transfer
owner = "" # current owner
new_owner = "" # new owner's address
price = 0 # price set in the previous transaction
accept_name_transfer_txns = sdk.name(name).accept_transfer( new_owner, owner, price)
# Returns an array of transactions to be signed by `newOwner`
# Sign each and send to network
except:
pass
Returns domains owned by an algorand address
address="" # provide an algorand address here
socials=True # return socials along with domain information
metadata=True # return metadata along with domain information
limit=1 #limit the number of domains to retrieve
domains = sdk.address(address).get_names(socials, metadata, limit)
print(domains)
If configured, this method returns the default domain set by an address. If not configured, this method returns the most recently purchased domain by an address
address="" # provide an algorand address here
default_domain = sdk.address(address).get_default_domain()
print(default_domain)