ARC20
Soyut
ARC-20 standardı, akıllı sözleşmelerde belirteçler için standart bir API’nin uygulanmasına izin verir. Bu standart, belirteçleri transfer etmek için temel işlevsellik sağlamanın yanı sıra, belirteçlerin zincir üzerindeki başka bir üçüncü tarafça harcanabilmesi için onaylanmasına izin verir. ERC-20 ile tam uyumludur.
Belirteç Standartları
ARC-20, dönüştürülebilir misli tokenler için bir standarttır. Sözleşme standardı, sözleşme tanımlı işlevleri, olayları vb. belirtir. Bu standarda uygun olarak yazılan tüm sözleşmeler bir ARC-20 sözleşmesi olarak kabul edilir.
contract ARC20 {
//required
function totalSupply() constant returns (uint theTotalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
//optional
function name() public view returns (string);
function symbol() public view returns (string);
function decimals() public view returns (uint8);
//events
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}Gerekli arayüzler
- totalSupply: Toplam token arzını verir.
- balanceOf: _owner adresli başka bir hesabın hesap bakiyesini döndürür.
- transfer: _value miktarındaki belirteçleri _to adresine aktarır ve Transfer olayını başlatması GEREKİR. Mesajı arayanın hesap bakiyesinde harcayacak yeterli jeton yoksa işlev atmalıdır *GEREKLİ*.
- onayla: _spender’ın hesabınızdan _value tutarına kadar birden çok kez para çekmesine izin verir. Bu işlev tekrar çağrılırsa, geçerli ödeneğin üzerine _value yazar.
- transferFrom: _from adresinden _to adresine _value miktarda belirteç aktarır ve Transfer olayını başlatması GEREKİR.
- alınanlık: _spender’ın hesabınızdan _value miktarına kadar birden çok kez para çekmesine izin verir. Bu işlev tekrar çağrılırsa, geçerli ödeneğin üzerine _value yazar.
İsteğe bağlı arayüzler
name: Jetonun adını döndürür.
sembol: İade jetonu sembolü.
ondalık sayılar: Dönüş Simgesi Doğruluğu.
Etkinlik#
Transfer: Sıfır değerli transferler dahil olmak üzere jetonlar transfer edildiğinde tetiklenmesi GEREKİR. Yeni belirteçler oluşturan bir belirteç sözleşmesi, belirteçler oluşturulduğunda _from adresi 0x0 olarak ayarlanmış bir Transfer olayını tetiklemelidir *ÖNERİ*.
Onay: Onaylamak için yapılan herhangi bir başarılı aramada tetiklenmesi GEREKİR (adres _spender, uint256 _değer).
Örnek
ARC-20 standardı, ERC-20 ile tamamen uyumludur, örneklere buradan ulaşabilirsiniz.
Get Engr-ceemise’s stories in your inbox
Join Medium for free to get updates from this writer.
Jetonu Görüntüle
ARC-20 Token ve işlem geçmişini Alaya Explorer ve ATON Wallet’ta görüntüleyebilirsiniz.
Sözleşme Dağıtımı
Lütfen Solidity Başlarken bölümüne bakın.
Yöntem çağrısı
İşte Python SDK kullanılarak bir sözleşme yönteminin nasıl çağrılacağına dair bir örnek.
Bağımlılıkları kurun
Python kitaplığını yüklemek için aşağıdaki komutu kullanın, Python sürüm 3.7.5+ önerilir:
pip install client-sdk-pythonYükleme işlemi sırasında, bazı bağımlılık paketleri c++14 derlemesi gerektirecektir, lütfen ilgili istemi gördükten sonra cppbuildtools’u indirin, yüklemek için varsayılan değeri kullanın ve ardından pip install komutunu yeniden çalıştırın.
somutlaştırma
from client_sdk_python import Web3, HTTPProvider
rpc, chain_id, hrp = 'http://127.0.0.1:6789', 201030, 'ATP'
w3 = Web3(HTTPProvider(rpc), chain_id=chain_id, hrp_type=hrp)
abi = [
{
"inputs":[
{"internalType":"uint256", "name":"initialSupply", "type":"uint256"},
{"internalType":"string", "name":"tokenName", "type":"string"},
{"internalType":"string", "name":"tokenSymbol", "type":"string"}
],
"stateMutability":"nonpayable",
"type":"constructor"
},
{
"inputs":[],
"name":"totalSupply",
"outputs":[{"internalType":"uint256", "name":"", "type":"uint256"}],
"stateMutability":"view",
"type":"function"
},
{
"inputs":[{"internalType":"address", "name":"", "type":"address"}],
"name":"balanceOf",
"outputs":[{"internalType":"uint256", "name":"", "type":"uint256"}],
"stateMutability":"view",
"type":"function"
},
{
"inputs":[
{"internalType":"address", "name":"_to", "type":"address"},
{"internalType":"uint256", "name":"_value", "type":"uint256"}
],
"name":"transfer",
"outputs":[{"internalType":"bool", "name":"success", "type":"bool"}],
"stateMutability":"nonpayable",
"type":"function"
},
{
"anonymous":false,
"inputs":[
{"indexed":true, "internalType":"address", "name":"from", "type":"address"},
{"indexed":true, "internalType":"address", "name":"to", "type":"address"},
{"indexed":false, "internalType":"uint256", "name":"value", "type":"uint256"}
],
"name":"Transfer",
"type":"event"
}
]
arc20 = w3.eth.contract(address='contract address', abi=abi)
print([func for func in arc20.functions])
print([event for event in arc20.events])Sözleşme Bilgilerini Sorgula
Aşağıdaki totalSupply örneği, balanceOf, diğer sorgulama yöntemleri buna benzer.
# Query the total number of tokens issued
arc20.functions.totalSupply().call()
# Query the token balance of the specified address
arc20.functions.balanceOf('your address').call()Bir sözleşme işlemi gönderme
Aşağıda bir aktarma çağrısı örneği verilmiştir.
# Transfer the token to the specified account
tx = {
'chainId': w3.chain_id,
'nonce': w3.eth.getTransactionCount('your address'),
'gas': 4012388,
'value': 0,
'gasPrice': 1000000000,
}
txn = arc20.functions.transfer(to='to address', value=1 * 10 ** 18).buildTransaction(tx)
signed_txn = w3.eth.account.signTransaction(txn, private_key='your private key')
tx_hash = w3.eth.sendRawTransaction(signed_txn.rawTransaction).hex()
receipt = w3.eth.waitForTransactionReceipt(tx_hash)Sözleşme etkinliklerini alın
Bir transfer işlemi olayı örneği olarak.
events = arc20.events.Transfer().processReceipt(receipt)







