د ویوز سمارټ حسابونو غوښتنلیکونه: له لیلام څخه تر بونس برنامو پورې

د ویوز سمارټ حسابونو غوښتنلیکونه: له لیلام څخه تر بونس برنامو پورې

بلاکچین اکثرا یوازې د کریپټو اسعارو سره تړاو لري ، مګر د DLT ټیکنالوژۍ پلي کولو ساحې خورا پراخه دي. د بلاکچین کارولو لپاره یو له خورا ژمنو ساحو څخه یو سمارټ قرارداد دی چې په اوتومات ډول اجرا کیږي او د هغه اړخونو ترمینځ باور ته اړتیا نلري چې دې ته داخل شوي.

RIDE - د سمارټ قراردادونو لپاره یوه ژبه

څپو د سمارټ قراردادونو لپاره ځانګړې ژبه رامینځته کړې - RIDE. د هغې بشپړ اسناد موقعیت لري دلته. او دلته - په دې موضوع مقاله په هابر کې

د RIDE قرارداد یو وړاندیز دی او د محصول په توګه "ریښتیا" یا "غلط" بیرته راګرځي. په دې اساس، لیږد یا په بلاکچین کې ثبت شوی یا رد شوی. سمارټ قرارداد په بشپړ ډول د ځانګړو شرایطو پوره کولو تضمین کوي. په RIDE کې د تړون څخه د لیږد رامینځته کول اوس مهال امکان نلري.

نن ورځ د Waves سمارټ قراردادونه دوه ډوله دي: سمارټ حسابونه او سمارټ شتمنۍ. یو سمارټ حساب یو منظم کارن حساب دی، مګر یو سکریپټ د دې لپاره ټاکل شوی چې ټولې لیږد کنټرولوي. د سمارټ حساب سکریپټ ممکن داسې ښکاري، د بیلګې په توګه:

match tx {
  case t: TransferTransaction | MassTransferTransaction => false
  case _ => true
}

tx یوه معامله ده چې پروسس کیږي چې موږ اجازه ورکوو چې د نمونې میچ کولو میکانیزم کارولو ته اجازه ورکړو یوازې که دا د لیږد لیږد نه وي. په RIDE کې د نمونې میچ کول د راکړې ورکړې ډول چک کولو لپاره کارول کیږي. ټول موجود حسابونه د سمارټ حساب سکریپټ کې پروسس کیدی شي د راکړې ورکړې ډولونه.

سکریپټ کولی شي متغیرات هم اعلان کړي، د شرایطو بشپړ چک کولو لپاره "که-نو-بل" جوړونه او نور میتودونه وکاروي. د دې لپاره چې ډاډ ترلاسه شي چې قراردادونه د ثابت بشپړتیا او پیچلتیا (لګښت) لري چې د قرارداد اجرا کولو دمخه وړاندوینه کول اسانه دي، RIDE لوپ یا جمپ بیانونه نلري.

د Waves حسابونو نور ځانګړتیاوې د "ریاست" شتون شامل دي، دا د حساب حالت دی. تاسو کولی شئ د ډیټا لیږد (Data Transaction) په کارولو سره د حساب حالت ته لا محدود شمیر جوړه (کیلي، ارزښت) ولیکئ. دا معلومات بیا د REST API له لارې او مستقیم په سمارټ قرارداد کې پروسس کیدی شي.

هره معامله کیدای شي د ثبوتونو لړۍ ولري، په کوم کې چې د ګډون کونکي لاسلیک، د اړتیا وړ لیږد ID، او نور داخل کیدی شي.

له لارې د RIDE سره کار کول دلته تاسو ته اجازه درکوي د تړون تالیف شوی لید وګورئ (که دا تالیف شوی وي) ، نوي حسابونه رامینځته کړئ او د دې لپاره سکریپټونه تنظیم کړئ ، او همدارنګه د کمانډ لاین له لارې لیږدونه واستوئ.

د بشپړ دورې لپاره ، پشمول د اکاونټ رامینځته کول ، پدې کې د سمارټ قرارداد نصب کول او د راکړې ورکړې لیږل ، تاسو کولی شئ د REST API سره د متقابل عمل لپاره کتابتون هم وکاروئ (د مثال په توګه ، C#, C, Java, JavaScript, Python, Rust, Elixir) . د IDE سره د کار پیل کولو لپاره، یوازې د نوي تڼۍ کلیک وکړئ.

د سمارټ قراردادونو کارولو امکانات پراخ دي: د ځینې پتې ("تور لیست") څخه پیچلي dApps ته د معاملو منع کول.

اوس راځئ چې په سوداګرۍ کې د سمارټ قراردادونو کارولو ځانګړي مثالونه وګورو: کله چې لیلامونه ترسره کول ، بیمه کول ، او د وفادارۍ برنامې رامینځته کول.

نیلامونه

د بریالۍ لیلام لپاره یو له شرایطو څخه روڼتیا ده: ګډون کونکي باید ډاډه وي چې د داوطلبۍ اداره کول ناممکن دي. دا د بلاکچین څخه مننه ترلاسه کیدی شي ، چیرې چې د ټولو شرطونو او هغه وخت په اړه غیر متقابل معلومات چې دوی رامینځته شوي به ټولو برخه اخیستونکو ته شتون ولري.

د ویوز بلاکچین کې ، داوطلبي د ډیټا لیږد له لارې د لیلام حساب حالت کې ثبت کیدی شي.

تاسو کولی شئ د بلاک شمیرو په کارولو سره د نیلام پیل او پای وختونه هم تنظیم کړئ: د ویوز بلاکچین کې د بلاک تولید فریکوینسي نږدې مساوي ده 60 ثانیې

1. د انګلیسي لوړیدونکي نرخ لیلام

په انګلیسي لیلام کې برخه اخیستونکي د یو بل سره سیالۍ کې داوطلبي کوي. هر نوی شرط باید د تیر څخه ډیر وي. لیلام پای ته رسیږي کله چې د وروستي داوطلبۍ څخه ډیر داوطلبۍ شتون نلري. په دې حالت کې، لوړ داوطلب باید د ټاکل شوي مقدار چمتو کړي.

د لیلام اختیار هم شتون لري په کوم کې چې پلورونکي د لاټ لپاره لږترلږه نرخ ټاکي، او وروستی قیمت باید له هغې څخه ډیر وي. که نه نو، ډیری پلورل پاتې دي.

په دې مثال کې، موږ د یو حساب سره کار کوو چې په ځانګړې توګه د لیلام لپاره جوړ شوی. د لیلام موده د 3000 بلاکس ده، او د لاټ پیل قیمت 0,001 WAVES دی. یو ګډون کوونکی کولی شي داوطلبي د ډیټا لیږد لیږلو سره د کلیدي "قیمت" او د دوی د داوطلبۍ ارزښت سره واستوي.

د نوې داوطلبۍ بیه باید د دې کلیمې لپاره د اوسني نرخ څخه لوړه وي، او ګډون کوونکی باید لږ تر لږه په خپل حساب کې [نوی_بایډ + کمیشن] ټیکونه ولري. د داوطلبۍ پته باید د ډیټا لیږد کې د "لیږونکي" ساحه کې ثبت شي، او د داوطلبۍ اوسنۍ بلاک لوړوالی باید د لیلام په موده کې وي.

که د لیلام په پای کې برخه اخیستونکي ترټولو لوړه بیه ټاکلې وي، هغه کولی شي د تبادلې لیږد واستوي ترڅو په ټاکل شوي نرخ او اسعارو جوړه کې د اړوند لاټ لپاره تادیه کړي.

let startHeight = 384120
let finishHeight = startHeight + 3000
let startPrice = 100000
 
#извлекаем из транзакции адрес отправителя
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
 
match tx {
case d : DataTransaction =>
  #проверяем, задана ли в стейте цена
  let currentPrice = if isDefined(getInteger(this, "price"))
 
                      #извлекаем цену из стейта
                      then extract(getInteger(this, "price"))
                      else startPrice
 
  #извлекаем цену из транзакции
  let newPrice = extract(getInteger(d.data, "price"))
  let priceIsBigger = newPrice > currentPrice
  let fee = 700000
  let hasMoney = wavesBalance(tx.sender) + fee >= newPrice
 
  #убеждаемся, что в текущей транзакции два поля и что отправитель совпадает с указанным в транзакции
  let correctFields = size(d.data) == 2 &&      
      d.sender == addressFromString(extract(getString(d.data,"sender")))
  startHeight <= height && height <= finishHeight && priceIsBigger && hasMoney && correctFields
case e : ExchangeTransaction =>
  let senderIsWinner = e.sender == addressFromString(extract(getString(this, "sender"))) #убеждаемся, что лот обменивает тот, кто его выиграл
  let correctAssetPair = e.sellOrder.assetPair.amountAsset == token && ! isDefined(e.sellOrder.assetPair.priceAsset)
  let correctAmount = e.amount == 1
  let correctPrice = e.price == extract(getInteger(this, "price"))
 
  height > finishHeight && senderIsWinner && correctAssetPair && correctAmount && correctPrice
case _ => false
}

2. د کمیدو نرخونو هالنډي لیلام

په هالنډي لیلام کې، په پیل کې ډیر څه د هغه څه په پرتله لوړ نرخ کې وړاندیز کیږي چې پیرودونکي یې تادیه کولو ته لیواله وي. نرخ ګام په ګام کمیږي تر هغه چې یو برخه اخیستونکي په اوسني نرخ کې د پیرودلو موافقه وکړي.

په دې مثال کې موږ د تیر په څیر ورته ثباتونه کاروو، او همدارنګه د قیمت مرحله کله چې ډیلټا کمیږي. د حساب سکریپټ ګوري چې ایا ګډون کوونکی واقعیا لومړی دی چې شرط یې ایښی دی. که نه نو، د ډیټا لیږد د بلاکچین لخوا نه منل کیږي.

let startHeight = 384120
let finishHeight = startHeight + 3000
let startPrice = 100000000
let delta = 100
 
#извлекаем из транзакции адрес отправителя
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
match tx {
case d : DataTransaction =>
  let currentPrice = startPrice - delta * (height - startHeight)
 
  #извлекаем из поступившей дата-транзакции поле "price"
  let newPrice = extract(getInteger(d.data, "price"))
 
  #убеждаемся, что в стейте текущего аккаунта не содержится поля "sender"
  let noBetsBefore = !isDefined(getInteger(this, "sender"))
  let fee = 700000
  let hasMoney = wavesBalance(tx.sender) + fee >= newPrice
 
  #убеждаемся, что в текущей транзакции только два поля
  let correctFields = size(d.data) == 2 && newPrice == currentPrice && d.sender == addressFromString(extract(getString(d.data, "sender")))
  startHeight <= height && height <= finishHeight && noBetsBefore && hasMoney && correctFields
case e : ExchangeTransaction =>
 
  #убеждаемся, что отправитель текущей транзакции указан в стейте аккаунта по ключу sender
  let senderIsWinner = e.sender == addressFromString(extract(getString(this, "sender")))
 
  #убеждаемся, что аmount ассета указан корректно, и что прайс-ассет - waves
  let correctAssetPair = e.sellOrder.assetPair.amountAsset == token && ! isDefined(e.sellOrder.assetPair.priceAsset)
  let correctAmount = e.amount == 1
  let correctPrice = e.price == extract(getInteger(this, "price"))
  height > finishHeight && senderIsWinner && correctAssetPair && correctAmount && correctPrice
case _ => false
}

3. لیلام "ټول معاش"

"ټول تادیه" یو لیلام دی چې ټول ګډونوال داوطلبي ورکوي، پرته له دې چې څوک یې وګټي. هر نوی ګډون کوونکی داوطلبۍ ورکوي، او هغه ګډون کوونکی چې اعظمي داوطلبۍ کوي ډیره برخه ګټي.

زموږ په مثال کې، د لیلام هر ګډون کوونکی د (کیلي، ارزښت)* = ("ګټونکي"، پته)، ("قیمت"، قیمت) سره د ډیټا لیږد له لارې داوطلبي کوي. دا ډول ډیټا لیږد یوازې هغه وخت تصویب کیږي چې دا برخه اخیستونکي دمخه د خپل لاسلیک سره د لیږد لیږد ولري او د هغه داوطلبي د ټولو پخوانیو څخه لوړه وي. لیلام تر پایه لوړوالی ته رسیدو پورې دوام لري.

let startHeight = 1000
let endHeight = 2000
let this = extract(tx.sender)
let token = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
match tx {
 case d: DataTransaction =>
   #извлекаем из поступившей дата-транзакции поле "price"
   let newPrice = extract(getInteger(d.data, "price"))
 
   #извлекаем из пруфов транзакции публичный ключ аккаунта
   let pk = d.proofs[1]
   let address = addressFromPublicKey(pk)
 
   #извлекаем транзакцию доказательство из пруфов поступившей дата транзакции
   let proofTx = extract(transactionById(d.proofs[2]))
   
   height > startHeight && height < endHeight
   && size(d.data) == 2
   #убеждаемся, что адрес победителя, извлеченный из текущей транзакции, совпадает с адресом, извлеченным из пруфов
   && extract(getString(d.data, "winner")) == toBase58String(address.bytes)
   && newPrice > extract(getInteger(this, "price"))
   #проверяем, что транзакция подписана
   && sigVerify(d.bodyBytes, d.proofs[0], d.proofs[1])
   #проверяем корректность транзакции, указанной в пруфах
   && match proofTx {
     case tr : TransferTransaction =>
       tr.sender == address &&
       tr.amount == newPrice
     case _ => false
   }
 case t: TransferTransaction =>
 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
 || (
   height > endHeight
   && extract(getString(this, "winner")) == toBase58String((addressFromRecipient(t.recipient)).bytes)
   && t.assetId == token
   && t.amount == 1
 )
 case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}

بیمه / د پیسو تمویل

راځئ یو داسې وضعیت په پام کې ونیسو چیرې چې تاسو اړتیا لرئ د مالي زیانونو په وړاندې د کاروونکو شتمنۍ بیمه کړئ. د مثال په توګه، یو کاروونکی یو تضمین غواړي چې که چیرې یو نښه ټیټه شي، نو هغه به وکوالی شي د دې ټکنونو لپاره تادیه شوي بشپړ مقدار بیرته ترلاسه کړي، او د بیمې مناسب مقدار تادیه کولو ته چمتو دی.

د دې پلي کولو لپاره، "د بیمې نښې" باید صادر شي. بیا یو سکریپټ د پالیسي لرونکي حساب کې نصب شوی، یوازې د تبادلې لیږد ته اجازه ورکوي چې ځینې شرایط پوره کړي چې اجرا شي.

د دوه ګوني لګښتونو د مخنیوي لپاره، تاسو اړتیا لرئ چې د کارونکي څخه غوښتنه وکړئ چې د پالیسي لرونکي حساب ته د (کیلي، ارزښت) = (د پیرود لیږد ID، sellOrderId) سره مخکې له مخکې د ډیټا لیږد واستوئ او د هغه کیلي سره د ډیټا لیږد لیږل منع کړئ چې دمخه کارول شوي.

له همدې امله، د کارونکي ثبوتونه باید د بیمې نښه پیرود د لیږد ID ولري. د اسعارو جوړه باید د پیرود لیږد کې ورته وي. لګښت هم باید د پیرودلو په وخت کې ټاکل شوي سره مساوي وي، د بیمې قیمت منفي.

دا معلومه شوه چې وروسته د بیمې حساب د کارونکي څخه د بیمې ټیکونه په هغه قیمت کې اخلي چې هغه یې اخیستي وي: د بیمې حساب د تبادلې لیږد رامینځته کوي، کارونکي امر لاسلیک کوي (که معامله په سمه توګه بشپړه شوې وي)، د بیمې حساب دوهم امر او ټوله معامله لاسلیک کوي او بلاکچین ته یې لیږي.

که چیرې پیرود ونشي، کاروونکي کولی شي د تبادلې لیږد رامینځته کړي د مقرراتو سره سم چې په سکریپټ کې بیان شوي او لیږد بلاکچین ته واستوي. پدې توګه کاروونکي کولی شي هغه پیسې بیرته ورکړي چې د بیمه شوي ټوکن پیرود باندې مصرف شوي.

let insuranceToken = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
 
#извлекаем из транзакции адрес отправителя
let this = extract(tx.sender)
let freezePeriod = 150000
let insurancePrice = 10000
match tx {
 
 #убеждаемся, что, если поступила дата-транзакция, то у нее ровно одно поле и в стейте еще нет такого ключа
 case d : DataTransaction => size(d.data) == 1 && !isDefined(getBinary(this, d.data[0].key))
 case e : ExchangeTransaction =>
 
   #если у транзакции нет седьмого пруфа, проверяем корректность подписи
   if !isDefined(e.proofs[7]) then
     sigVerify(e.bodyBytes, e.proofs[0], e.senderPublicKey)
   else
     #если у транзакции есть седьмой пруф, извлекаем из него транзакцию и узнаём её высоту
     let purchaseTx = transactionById(e.proofs[7])
     let purchaseTxHeight = extract(transactionHeightById(e.proofs[7]))
    
     #обрабатываем транзакцию из пруфа
     match purchaseTx {
       case purchase : ExchangeTransaction =>
         let correctSender = purchase.sender == e.sellOrder.sender
         let correctAssetPair = e.sellOrder.assetPair.amountAsset == insuranceToken &&
                                purchase.sellOrder.assetPair.amountAsset == insuranceToken &&
                                e.sellOrder.assetPair.priceAsset == purchase.sellOrder.assetPair.priceAsset
         let correctPrice = e.price == purchase.price - insurancePrice && e.amount == purchase.amount
         let correctHeight = height > purchaseTxHeight + freezePeriod
 
         #убеждаемся, что в транзакции-пруфе указан верный ID текущей транзакции
         let correctProof = extract(getBinary(this, toBase58String(purchase.id))) == e.sellOrder.id
         correctSender && correctAssetPair && correctPrice && correctHeight && correctProof
     case _ => false
   }
 case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}

د بیمې نښه کولی شي سمارټ شتمني جوړه کړي، د بیلګې په توګه، دریم اړخ ته د هغې لیږد منع کول.

دا سکیم د کراوډ فنډینګ ټوکنونو لپاره هم پلي کیدی شي ، کوم چې مالکینو ته بیرته ورکول کیږي که چیرې اړین مقدار نه وي راټول شوي.

د راکړې ورکړې مالیې

سمارټ قراردادونه په هغه قضیو کې هم پلي کیږي چیرې چې دا اړینه ده چې په هر لیږد باندې د څو ډوله شتمنیو سره مالیه راټول کړئ. دا د نصب سره د نوې شتمنۍ له لارې ترسره کیدی شي سپانسرشپ د سمارټ شتمنیو سره د معاملو لپاره:

1. موږ FeeCoin صادروو، کوم چې کاروونکو ته به په ټاکلي نرخ لیږل کیږي: 0,01 WAVES = 0,001 FeeCoin.

2. د FeeCoin او د تبادلې نرخ لپاره سپانسرشپ ترتیب کړئ: 0,001 WAVES = 0,001 FeeCoin.

3. د سمارټ شتمنۍ لپاره لاندې سکریپټ ترتیب کړئ:

let feeAssetId = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
let taxDivisor = 10
 
match tx {
  case t: TransferTransaction =>
    t.feeAssetId == feeAssetId && t.fee == t.amount / taxDivisor
  case e: ExchangeTransaction | MassTransferTransaction => false
  case _ => true
}

اوس هرکله چې څوک د N سمارټ شتمنۍ لیږدوي، دوی به تاسو ته د N/taxDivisor په مقدار کې FeeCoin درکوي (کوم چې تاسو څخه په 10 *N/taxDivisor WAVES کې اخیستل کیدی شي)، او تاسو به کان کینونکي ته N/taxDivisor WAVES درکوي. د پایلې په توګه، ستاسو ګټه (مالیه) به 9*N / tax Divisor WAVES وي.

تاسو کولی شئ د سمارټ اثاثو سکریپټ او ماس ټرانسفر لیږد په کارولو سره مالیه هم ترسره کړئ:

let taxDivisor = 10
 
match tx {
  case t : MassTransferTransaction =>
    let twoTransfers = size(t.transfers) == 2
    let issuerIsRecipient = t.transfers[0].recipient == addressFromString("3MgkTXzD72BTfYpd9UW42wdqTVg8HqnXEfc")
    let taxesPaid = t.transfers[0].amount >= t.transfers[1].amount / taxDivisor
    twoTransfers && issuerIsRecipient && taxesPaid
  case _ => false
}

د کیش بیک او وفادارۍ برنامې

کیش بیک د وفادارۍ یو ډول برنامه ده چې په هغه کې پیرودونکي د محصول یا خدماتو مصرف شوي مقدار برخه بیرته ترلاسه کوي.

کله چې د سمارټ حساب په کارولو سره دا قضیه پلي کول، موږ باید ثبوتونه په ورته ډول وګورو لکه څنګه چې موږ د بیمې په قضیه کې ترسره کړل. د دوه ګوني لګښتونو د مخنیوي لپاره، کاروونکي باید د پیسو بیرته ترلاسه کولو دمخه د (کیلي، ارزښت) = (د پیرود لیږد ID، cashbackTransactionId) سره ډیټا لیږد واستوي.

موږ باید د ډیټا لیږد په کارولو موجوده کیلي باندې بندیز هم ولګوو. د کیش بیک ډیویزر - واحد د کیش بیک ونډې لخوا ویشل شوی. هغوی. که د کیش بیک ونډې 0.1 وي، نو د کیش بیک ډیویزر 1 / 0.1 = 10.

let cashbackToken = base58'8jfD2JBLe23XtCCSQoTx5eAW5QCU6Mbxi3r78aNQLcNf'
 
#извлекаем из транзакции адрес отправителя
let this = extract(tx.sender)
let cashbackDivisor = 10
match tx {
 
 #убеждаемся, что, если поступила дата-транзакция, то у нее ровно одно поле и в стейте еще нет такого ключа
 case d : DataTransaction => size(d.data) == 1 && !isDefined(getBinary(this, d.data[0].key))
 case e : TransferTransaction =>
 
   #если у транзакции нет седьмого пруфа, проверяем корректность подписи
   if !isDefined(e.proofs[7]) then
     sigVerify(e.bodyBytes, e.proofs[0], e.senderPublicKey)
   else
 
     #если у транзакции есть седьмой пруф, извлекаем из него транзакцию и узнаём её высоту
     let purchaseTx = transactionById(e.proofs[7])
     let purchaseTxHeight = extract(transactionHeightById(e.proofs[7]))
    
     #обрабатываем транзакцию из пруфа
     match purchaseTx {
       case purchase : TransferTransaction =>
         let correctSender = purchase.sender == e.sender
         let correctAsset = e.assetId == cashbackToken
         let correctPrice = e.amount == purchase.amount / cashbackDivisor
 
         #убеждаемся, что в транзакции-пруфе указан верный ID текущей транзакции
         let correctProof = extract(getBinary(this, toBase58String(purchase.id))) == e.id
         correctSender && correctAsset && correctPrice && correctProof
     case _ => false
   }
 case _ => sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
}

اټومي تبادله

اټومي تبادله کاروونکو ته اجازه ورکوي چې د تبادلې مرستې پرته د شتمنیو تبادله وکړي. د اټومي تبادلې سره، په راکړه ورکړه کې دواړه برخه اخیستونکي اړ دي چې دا د یوې ټاکلې مودې دننه تایید کړي.

که لږ تر لږه یو ګډونوال د راکړې ورکړې لپاره په ټاکل شوي وخت کې د راکړې ورکړې سمه تایید وړاندې نه کړي، معامله فسخه کیږي او تبادله نه کیږي.

زموږ په مثال کې، موږ به لاندې سمارټ حساب سکریپټ وکاروو:

let Bob = Address(base58'3NBVqYXrapgJP9atQccdBPAgJPwHDKkh6A8')
let Alice = Address(base58'3PNX6XwMeEXaaP1rf5MCk8weYeF7z2vJZBg')
 
let beforeHeight = 100000
 
let secret = base58'BN6RTYGWcwektQfSFzH8raYo9awaLgQ7pLyWLQY4S4F5'
match tx {
  case t: TransferTransaction =>
    let txToBob = t.recipient == Bob && sha256(t.proofs[0]) == secret && 20 + beforeHeight >= height
    let backToAliceAfterHeight = height >= 21 + beforeHeight && t.recipient == Alice
    txToBob || backToAliceAfterHeight
  case _ => false
}

په راتلونکې مقاله کې به موږ په مالي وسایلو لکه اختیارونو، فیوچرونو او بیلونو کې د سمارټ حسابونو کارول وګورو.

سرچینه: www.habr.com

Add a comment