அலைகள் ஸ்மார்ட் சொத்துக்கள்: கருப்பு மற்றும் வெள்ளை பட்டியல்கள், இடைவெளி வர்த்தகம்

அலைகள் ஸ்மார்ட் சொத்துக்கள்: கருப்பு மற்றும் வெள்ளை பட்டியல்கள், இடைவெளி வர்த்தகம்

முந்தைய இரண்டு கட்டுரைகளில் ஸ்மார்ட் கணக்குகள் மற்றும் அவற்றை எவ்வாறு பயன்படுத்தலாம் என்பதைப் பற்றி பேசினோம் ஏலங்களை நடத்துவதற்கும் விசுவாச திட்டங்களை உருவாக்குவதற்கும்மேலும் உதவவும் நிதிக் கருவிகளின் வெளிப்படைத்தன்மையை உறுதி செய்தல்.

இப்போது நாம் ஸ்மார்ட் சொத்துக்கள் மற்றும் அவற்றின் பயன்பாட்டின் பல நிகழ்வுகளைப் பார்ப்போம், இதில் சொத்துக்களை முடக்குவது மற்றும் குறிப்பிட்ட முகவரிகளில் பரிவர்த்தனைகளுக்கு கட்டுப்பாடுகளை உருவாக்குவது உட்பட.

Waves Smart Assets ஆனது, ஸ்மார்ட் கணக்குகளின் அதே இயக்கவியலைப் பின்பற்றி, சொத்துக்களில் ஸ்கிரிப்ட்களை மேலெழுத பயனர்களை அனுமதிக்கிறது. ஸ்மார்ட் சொத்தைப் பயன்படுத்தி உருவாக்கப்படும் ஒவ்வொரு புதிய பரிவர்த்தனையும் முதலில் ஸ்கிரிப்ட் மூலம் உறுதிசெய்யப்படும், பின்னர் மட்டுமே பிளாக்செயின் மூலம் உறுதிப்படுத்தப்படும்.

ஸ்மார்ட் சொத்துக்களுக்கும் ஸ்மார்ட் கணக்குகளுக்கும் உள்ள பின்வரும் வேறுபாடுகளைக் குறிப்பிடுவது மதிப்பு:

  1. ஸ்மார்ட் சொத்தின் குறியீட்டில், ஆதாரங்களைச் சரிபார்க்க இயலாது (நாங்கள் அவற்றைப் பற்றி பேசினோம் முதல் கட்டுரையில்).
  2. ஸ்மார்ட் கணக்குக் குறியீட்டில், உங்கள் கணக்கு மேட்சர் கணக்காக இருந்தால் மட்டுமே ExchangeTransactionஐச் சரிபார்க்க முடியும். இல்லையெனில், ஆர்டர் மட்டுமே சரிபார்க்கப்படும். ஸ்மார்ட் சொத்துக் குறியீட்டில், நீங்கள் ஆர்டரை நேரடியாகச் சரிபார்க்க முடியாது; நீங்கள் ExchangeTransactionஐச் சரிபார்த்து, தேவைப்பட்டால், அதிலிருந்து ஒரு ஆர்டரைப் பிரித்தெடுக்கலாம்.
  3. ஸ்மார்ட் கணக்கைப் போலல்லாமல், ஸ்மார்ட் அசெட்டில் ஒரு நிலை இல்லை, ஆனால் ஸ்கிரிப்டில் இருந்து கணக்கு நிலைகளுக்கான அணுகல் எங்களிடம் உள்ளது.

ஸ்மார்ட் சொத்துக்கள் ஒப்பந்தங்களை எழுதுவதை பெரிதும் எளிதாக்குகின்றன, பல வழக்குகளை சுருக்கமாகவும் நேர்த்தியாகவும் செயல்படுத்துகின்றன.

சொத்து முடக்கம்

ஒரு குறிப்பிட்ட தொகுதி உயரத்திற்கு சொத்துக்களை முடக்குவதற்கு இலக்கு உயரம், பின்வரும் ஸ்மார்ட் சொத்தின் ஸ்கிரிப்ட்டில் இந்த மதிப்பை அமைக்கலாம்:

let targetHeight = 1500000
height >= targetHeight
 
height - функция языка, возращающая текущую высоту.

மேட்சர் குறிப்பிட்ட நிலை

ஒரு குறிப்பிட்ட மேட்ச்சரை விரும்பியதாக அமைக்க, அதன் முகவரியை அனுப்புபவராக ஒரு ஸ்மார்ட் அசெட் ஸ்கிரிப்டில் அமைக்கலாம்:

match tx {
    case t : ExchangeTransaction =>
        t.sender == addressFromString("3PJaDyprvekvPXPuAtxrapacuDJopgJRaU3")
    case _ => true
}

பெறுநர்களின் "வெள்ளை பட்டியல்"

சில கணக்குகளுக்கு மட்டுமே டோக்கன்களை அனுப்ப அனுமதிக்க - பெறுநர்களின் "வெள்ளை பட்டியலை" உருவாக்க - பட்டியலில் சேர்க்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கும் பின்வரும் திட்டத்துடன் ஸ்மார்ட் சொத்தைப் பயன்படுத்தலாம்:

match tx {
  case t : TransferTransaction =>
    let trustedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let trustedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let trustedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient == trustedRecipient1 || t.recipient == trustedRecipient2 || t.recipient == trustedRecipient3
  case _ => false
}

பாதுகாப்புக் காரணங்களுக்காகவும், மொழியின் நிரூபிக்கக்கூடிய முழுமைக்காகவும், பட்டியலில் மறு செய்கை செயல்படுத்தல் இல்லை. எனவே இது உறுதியான கூறுகளின் தொகுப்பாக வரையறுக்கப்படுகிறது.

பெறுநர்களின் "கருப்பு பட்டியல்"

இதேபோல், சில கணக்குகளுக்கு டோக்கன்களை அனுப்புவதை தடை செய்ய, நீங்கள் ஒரு "கருப்பு பட்டியல்" உருவாக்கலாம். இந்த வழக்கில், அதே ஸ்மார்ட் சொத்து பயன்படுத்தப்படுகிறது, ஆனால் அது தடுப்புப்பட்டியலில் இல்லை என்பதை உறுதிப்படுத்த முகவரி சரிபார்க்கப்பட்டது:

match tx {
  case t : TransferTransaction =>
    let bannedRecipient1 = addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4")
    let bannedRecipient2 = addressFromString("3PLZcCJyYQnfWfzhKXRA4rteCQC9J1ewf5K")
    let bannedRecipient3 = addressFromString("3PHrS6VNPRtUD8MHkfkmELavL8JnGtSq5sx")
    t.recipient != bannedRecipient1 && t.recipient != bannedRecipient2 && t.recipient != bannedRecipient3
  case _ => false
}

வழங்குபவரின் அனுமதியுடன் அனுப்புதல்

ஸ்மார்ட் அசெட்டைப் பயன்படுத்தி, வழங்குபவரின் அனுமதியுடன் மட்டுமே ஸ்மார்ட் அசெட்டை அனுப்புவதற்கான விருப்பத்தையும் நீங்கள் அமைக்கலாம் (உறுதி/கடன் முத்திரை) வழங்குபவர் தனது கணக்கின் நிலையில் பரிவர்த்தனை ஐடியை வைப்பதன் மூலம் தனது ஒப்புதலை வெளிப்படுத்துகிறார்:

match tx {
  case t : TransferTransaction =>
    let issuer = extract(addressFromString("3P6ms9EotRX8JwSrebeTXYVnzpsGCrKWLv4"))
    #убеждаемся, что в стейте эмитента содержится ID текущей транзакции
    isDefined(getInteger(issuer, toBase58String(t.id)))
  case _ => false
}

குறிப்பிட்ட நாணயங்களுக்கு மட்டுமே மாற்றவும்

ஒரு ஸ்மார்ட் சொத்து குறிப்பிட்ட நாணயங்களுக்கு மட்டுமே அதை மாற்ற அனுமதி அளிக்கிறது. எடுத்துக்காட்டாக, Bitcoins பரிமாற்றத்தை மட்டுமே அனுமதிக்க, நீங்கள் பின்வரும் குறியீட்டைப் பயன்படுத்தலாம்:

let BTCId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
match tx {
  case t : ExchangeTransaction =>
    t.sellOrder.assetPair.priceAsset == BTCId ||
     t.sellOrder.assetPair.amountAsset == BTCId
  case _ => true
}

ஆரக்கிளில் இருந்து விலையில் வர்த்தகம்

ஸ்மார்ட் அசெட் ஸ்கிரிப்ட்டில், நம்பகமான ஆரக்கிள் நிலையில் நிர்ணயிக்கப்பட்ட விலையில் மட்டுமே வர்த்தகம் செய்வதற்கான அனுமதியை நீங்கள் அமைக்கலாம். அத்தகைய ஸ்கிரிப்ட்டின் எடுத்துக்காட்டு இங்கே:

let oracle = Address(base58'3PLNmokt22NrSiNvCLvwMUP84LCMJqbXwAD')
let assetId = toBase58String(base58'oWgJN6YGZFtZrV8BWQ1PGktZikgg7jzGmtm16Ktyvjd')
 
match tx {
  #запрещаем передачу ассета
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    #убеждаемся, что торговля происходит по цене, заданной в стейте оракла для этого ассета
    let correctPrice = e.price == extract(getInteger(oracle, assetId))
    #убеждаемся, что торговля происходит в обмен на WAVES
    let correctPriceAsset = !isDefined(e.sellOrder.assetPair.priceAsset) 
correctPrice && correctPriceAsset
  case _ => true
}

வர்த்தகம் மேற்கொள்ளப்படும் சொத்தின் ஐடியைச் சரிபார்க்கும் போது இங்கு நாம் ஒரு வெளிப்படையான புள்ளியை எதிர்கொள்கிறோம். விஷயம் என்னவென்றால், சொத்து ஐடி வரையறுக்கப்படவில்லை என்றால், நாங்கள் அலைகளைப் பற்றி பேசுகிறோம். ஸ்கிரிப்ட்டில், வர்த்தகம் WAVES உடன் இணைந்து, சரியாக இந்த வழியில் மேற்கொள்ளப்படுவதை உறுதிசெய்கிறோம்.

நிலையான விலை உயர்வு

ஒரு ஸ்மார்ட் சொத்துக்கான நிலையான விலையை நீங்கள் அமைக்கலாம், இது கொடுக்கப்பட்ட விகிதத்தில் படிப்படியாக அதிகரிக்கும். ஒவ்வொரு 5 தொகுதிகளுக்கும் 1000% விலை அதிகரிக்கும் சொத்து ஸ்கிரிப்ட்டின் உதாரணம் இங்கே:

let startPrice = 10
let startHeight = 1000
let interval = 1000
#на сколько процентов цена увеличивается за один шаг
let raise = 5
 
match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case e: ExchangeTransaction =>
    e.price == startPrice + ((height - startHeight) / interval) * (100 + raise) / 100
    && !isDefined(e.sellOrder.assetPair.priceAsset)
  case _ => true
}


இடைவெளி வர்த்தகம்

மேலும், ஸ்கிரிப்டுக்கு நன்றி, ஸ்மார்ட் சொத்தின் வர்த்தகம் முன்னரே தீர்மானிக்கப்பட்ட இடைவெளிகளுக்கு மட்டுப்படுத்தப்படலாம். அத்தகைய ஸ்கிரிப்ட்டின் எடுத்துக்காட்டு இங்கே:

let startHeight = 10000
let interval = 44000
let limit = 1500
 
match tx {
  case t: TransferTransaction | MassTransferTransaction | ExchangeTransaction =>
    (height - startHeight) % interval < limit
  case _ => true
}

ஸ்கிரிப்ட்டில் நாம் வர்த்தகத்தின் தொடக்கத்தில் இருந்து உறுதி செய்கிறோம் தொடக்க உயரம் இதனை விட எல்லை இடைவெளிகள். இடைவெளியின் நீளம் புலத்தில் குறிப்பிடப்பட்ட தொகுதிகளின் எண்ணிக்கைக்கு சமம் இடைவெளி.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்