ವೇವ್ಸ್ ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತುಗಳು: ಕಪ್ಪು ಮತ್ತು ಬಿಳಿ ಪಟ್ಟಿಗಳು, ಮಧ್ಯಂತರ ವ್ಯಾಪಾರ

ವೇವ್ಸ್ ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತುಗಳು: ಕಪ್ಪು ಮತ್ತು ಬಿಳಿ ಪಟ್ಟಿಗಳು, ಮಧ್ಯಂತರ ವ್ಯಾಪಾರ

ಹಿಂದಿನ ಎರಡು ಲೇಖನಗಳಲ್ಲಿ ನಾವು ಸ್ಮಾರ್ಟ್ ಖಾತೆಗಳು ಮತ್ತು ಅವುಗಳನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದರ ಕುರಿತು ಮಾತನಾಡಿದ್ದೇವೆ ಹರಾಜುಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಲು ಮತ್ತು ನಿಷ್ಠೆ ಕಾರ್ಯಕ್ರಮಗಳನ್ನು ರಚಿಸಲುಮತ್ತು ಸಹ ಸಹಾಯ ಹಣಕಾಸು ಸಾಧನಗಳ ಪಾರದರ್ಶಕತೆಯನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.

ಈಗ ನಾವು ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತುಗಳು ಮತ್ತು ಅವುಗಳ ಬಳಕೆಯ ಹಲವಾರು ಪ್ರಕರಣಗಳನ್ನು ನೋಡುತ್ತೇವೆ, ಸ್ವತ್ತುಗಳನ್ನು ಫ್ರೀಜ್ ಮಾಡುವುದು ಮತ್ತು ನಿರ್ದಿಷ್ಟ ವಿಳಾಸಗಳಲ್ಲಿ ವಹಿವಾಟುಗಳ ಮೇಲೆ ನಿರ್ಬಂಧಗಳನ್ನು ರಚಿಸುವುದು ಸೇರಿದಂತೆ.

ವೇವ್ಸ್ ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತುಗಳು ಬಳಕೆದಾರರಿಗೆ ಸ್ವತ್ತುಗಳ ಮೇಲೆ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಒವರ್ಲೇ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ, ಸ್ಮಾರ್ಟ್ ಖಾತೆಗಳಂತೆಯೇ ಅದೇ ಯಂತ್ರಶಾಸ್ತ್ರವನ್ನು ಅನುಸರಿಸುತ್ತದೆ. ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತನ್ನು ಬಳಸಿಕೊಂಡು ರಚಿಸಲಾದ ಪ್ರತಿಯೊಂದು ಹೊಸ ವಹಿವಾಟನ್ನು ಮೊದಲು ಸ್ಕ್ರಿಪ್ಟ್‌ನಿಂದ ದೃಢೀಕರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನಂತರ ಮಾತ್ರ ಬ್ಲಾಕ್‌ಚೈನ್‌ನಿಂದ ದೃಢೀಕರಿಸಲಾಗುತ್ತದೆ.

ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತುಗಳು ಮತ್ತು ಸ್ಮಾರ್ಟ್ ಖಾತೆಗಳ ನಡುವಿನ ಕೆಳಗಿನ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಗಮನಿಸುವುದು ಯೋಗ್ಯವಾಗಿದೆ:

  1. ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತಿನ ಕೋಡ್‌ನಲ್ಲಿ, ಪುರಾವೆಗಳನ್ನು ಪರಿಶೀಲಿಸುವುದು ಅಸಾಧ್ಯ (ನಾವು ಅವುಗಳ ಬಗ್ಗೆ ಮಾತನಾಡಿದ್ದೇವೆ ಮೊದಲ ಲೇಖನದಲ್ಲಿ).
  2. ಸ್ಮಾರ್ಟ್ ಖಾತೆ ಕೋಡ್‌ನಲ್ಲಿ, ನಿಮ್ಮ ಖಾತೆಯು ಹೊಂದಾಣಿಕೆಯ ಖಾತೆಯಾಗಿದ್ದರೆ ಮಾತ್ರ ನೀವು ಎಕ್ಸ್‌ಚೇಂಜ್ ವಹಿವಾಟನ್ನು ಪರಿಶೀಲಿಸಬಹುದು. ಇಲ್ಲದಿದ್ದರೆ, ಆದೇಶವನ್ನು ಮಾತ್ರ ಪರಿಶೀಲಿಸಲಾಗುತ್ತದೆ. ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತು ಕೋಡ್‌ನಲ್ಲಿ, ನೀವು ಆದೇಶವನ್ನು ನೇರವಾಗಿ ಪರಿಶೀಲಿಸಲಾಗುವುದಿಲ್ಲ; ನೀವು ಎಕ್ಸ್‌ಚೇಂಜ್ ಟ್ರಾನ್ಸಾಕ್ಷನ್ ಅನ್ನು ಪರಿಶೀಲಿಸಬಹುದು ಮತ್ತು ಅಗತ್ಯವಿದ್ದರೆ, ಅದರಿಂದ ಆದೇಶವನ್ನು ಹೊರತೆಗೆಯಬಹುದು.
  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
}

ನಿರ್ದಿಷ್ಟ ನಾಣ್ಯಗಳಿಗೆ ಮಾತ್ರ ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಿ

ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತು ಕೆಲವು ನಾಣ್ಯಗಳಿಗೆ ಮಾತ್ರ ಅದನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲು ಅನುಮತಿ ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಬಿಟ್‌ಕಾಯಿನ್‌ಗಳಿಗೆ ಮಾತ್ರ ವಿನಿಮಯವನ್ನು ಅನುಮತಿಸಲು, ನೀವು ಈ ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಬಳಸಬಹುದು:

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
}

ವಹಿವಾಟು ನಡೆಸುವ ಆಸ್ತಿಯ ಐಡಿಯನ್ನು ಪರಿಶೀಲಿಸುವಾಗ ಇಲ್ಲಿ ನಾವು ಸ್ಪಷ್ಟವಲ್ಲದ ಅಂಶವನ್ನು ಎದುರಿಸುತ್ತೇವೆ. ವಿಷಯವೆಂದರೆ ಆಸ್ತಿ ID ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸದಿದ್ದರೆ, ನಾವು ವೇವ್ಸ್ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತಿದ್ದೇವೆ. ಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ, ವೇವ್‌ಗಳ ಜೊತೆಯಲ್ಲಿ ವ್ಯಾಪಾರವನ್ನು ನಿಖರವಾಗಿ ಈ ರೀತಿಯಲ್ಲಿ ನಡೆಸಲಾಗುತ್ತದೆ ಎಂದು ನಾವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೇವೆ.

ಸ್ಥಿರ ಬೆಲೆ ಏರಿಕೆ

ನೀವು ಸ್ಮಾರ್ಟ್ ಸ್ವತ್ತಿಗೆ ಸ್ಥಿರ ಬೆಲೆಯನ್ನು ಹೊಂದಿಸಬಹುದು, ಇದು ನಿರ್ದಿಷ್ಟ ಅನುಪಾತದಲ್ಲಿ ಹಂತ ಹಂತವಾಗಿ ಹೆಚ್ಚಾಗುತ್ತದೆ. ಪ್ರತಿ 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ