Sitemap

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-python

Yü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)

--

--