αα
αααα»αα’αααααααΈααα»α ααΎαααΆααα·ααΆαα’αααΈααααΈααααΆααα αα·αααααααααα½αααΆα’αΆα
ααααΎααααΆααααΆαα
α₯α‘αΌααααααΎαααΉααα·αα·αααααΎααααααααααααααα·ααααΆααα αα·αααααΈαα½αα
ααα½αααααΆαααααΎααααΆααααααααΆ αα½αααΆααααΆαααααααααααααααααααα· αα·αααΆααααααΎαααΆαααΉααααααΉαααΎααααα·ααααα·ααΆααα
α’αΆααααααΆααααααΆααααααΆααα
Waves Smart Assets α’αα»ααααΆαβα±ααβα’αααβααααΎβαααα½αβααΎβααααααΈαβααΎβααααααααααα αααβα’αα»ααααβααΆαβααααααΆαβααΌα
βααααΆβααΉαβααααΈβααααΆαααα ααααα·ααααα·ααΆαααααΈααΈαα½αααααααΆααααααΎααααααααΎαααααααααααααααΆαααααΉαααααΌαααΆααααααΆααααΆαα»ααααααααααΈα α αΎαααΆααααααααΆααααααα blockchain ααα»αααααα
αα½ααααααααΆααααΈααΆααα»αααααΆααΆαααααααααΆααααααααααααααα·ααααΆααα αα·αααααΈααααΆαααα
- αα
αααα»αααΌααααααααααααααααααΆααα ααΆαα·αα’αΆα
αα
αα½α
αααααα»αααΆααααα½ααα·αα·αααααααα»ααΆα (ααΎαααΆααα·ααΆαα’αααΈαα½αααα
αα αααα»αα’αααααααααΌα ). - αα αααα»ααααααΌαααααΈααααΆααα α’αααα’αΆα αα·αα·ααα ExchangeTransaction ααΆααα»αααααΆααααααΈααααα’αααααΆααααΈαααααααΌαααααΆα ααΎαα·αααΌα ααααααααΆαααααΆααααααΆαα·αααα»ααααααααααααΌαααΆααααα½ααα·αα·αααα αα αααα»αααΌααααααααααααααα·ααααΆααα α’ααααα·αα’αΆα αα·αα·αααααΎαααΆααααααΆαα·ααααααααΆααααΆααα α’αααα’αΆα αα·αα·αααααΎαααΆαααααΆααααααΌαααααα·ααααα·ααΆα α αΎαααααα·αααΎα αΆαααΆα α ααΆαααααΆααααααΆαα·αααΈααΆα
- αααααααααααααααΆααα αα·αααΌα ααααΈααααΆααα αα·αααΆαααααΆαααΆααα ααα»ααααααΎααα ααααΆααα·αααα·α αΌαααααΎααααΆαααΆαααααΈααΈααααααΈαα
αααααααααααααααΆααααα½αααααα½ααααααΆαααααααα·α αα αααααΆαααΆαα αααΎα ααααΎα±ααααΆαα’αα»αααααααα»αααΏαααΆα αααΎαααΆαααΆααααααα αα·αααΎαααΆαα
ααΆαααααααααααααααααααα·
ααΎααααΈααααααααααααααααααα·αα αααααααααα»αααΆααααΆαααα½αα ααααααααααα α’αααα’αΆα ααααααααααααααα αααα»αααααααΈααααααααααααααααααΆαααααΆααααααα
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
}
ααΆααα½αααΌαααΆααααααααΈ oracle
αα αααα»αααααααΈααααααααααααααααΆααα α’αααα’αΆα αααααααΆαα’αα»ααααΆαααΎααααΈααααΎααΆαα·αααααααααΆααααααα»αααααααααααα»αααααΆαααΆααα oracle αααα’αΆα αα»αα α·αααααΆαα αααααΊααΆα§ααΆα αααααααααααΈαααααααα
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 α αα αααα»αααααααΈα ααΎαααααΎα±ααααααΆααααΆααΆααα½αααΌαααααΌαααΆαα’αα»αααααα½αααααΆααΆαα½α 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