tx · 3qTxDETWcngTXj1QJhYwMRoR4GXjrK57pawVDg5LCzTY

3N8PYRFdwoxS9d2WT96aVK2WtUF6wLvXAmo:  -0.00600000 Waves

2022.08.10 16:40 [2178415] smart account 3N8PYRFdwoxS9d2WT96aVK2WtUF6wLvXAmo > SELF 0.00000000 Waves

{ "type": 13, "id": "3qTxDETWcngTXj1QJhYwMRoR4GXjrK57pawVDg5LCzTY", "fee": 600000, "feeAssetId": null, "timestamp": 1660138886365, "version": 2, "chainId": 84, "sender": "3N8PYRFdwoxS9d2WT96aVK2WtUF6wLvXAmo", "senderPublicKey": "9D2Gz2qTRY9jysW7Q1eDpJSQiuGHaUUfQDdspbAPrDN7", "proofs": [ "5678vMSkhpHjjdr31BKUkUghpLo6AaTGBCPwKBSWLX94EjkoFFQfWvExjrNheFnrTBjvff3ZeG3tPFCJ1CHTALE" ], "script": "base64:AAIFAAAAAAAAABoIAhIFCgMICAgSABIDCgEBEgASBAoCCAESAAAAABMAAAAAE2tleV9IYXNocmF0ZVRva2VuSWQCAAAAD2hhc2hyYXRlVG9rZW5JZAAAAAAQa2V5X1Byb21vVG9rZW5JZAIAAAAMcHJvbW9Ub2tlbklkAAAAAA9rZXlfU3Rha2luZ0RBcHACAAAADHN0YWtpbmctZGFwcAAAAAANa2V5X0NvbGxlY3RvcgIAAAAJY29sbGVjdG9yAAAAAAtrZXlfUmVzZXJ2ZQIAAAAHcmVzZXJ2ZQAAAAAPa2V5X1Byb21vSXNzdWVkAgAAAAxwcm9tby1pc3N1ZWQAAAAAD2tleV9TdGFrZWRUb3RhbAIAAAAMc3Rha2VkX3RvdGFsAQAAAA9rZXlfVXNlclN0YWtpbmcAAAACAAAAB2FkZHJlc3MAAAAEdHhJZAkAASwAAAACCQABLAAAAAIFAAAAB2FkZHJlc3MCAAAACV9zdGFraW5nXwUAAAAEdHhJZAEAAAATa2V5X1VzZXJTdGFrZWRUb3RhbAAAAAEAAAAHYWRkcmVzcwkAASwAAAACBQAAAAdhZGRyZXNzAgAAAAZfdG90YWwAAAAAEmhhc2hyYXRlVG9rZW5JZFN0cgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAE2tleV9IYXNocmF0ZVRva2VuSWQCAAAAAAAAAAAPaGFzaHJhdGVUb2tlbklkCQACWQAAAAEFAAAAEmhhc2hyYXRlVG9rZW5JZFN0cgAAAAAPcHJvbW9Ub2tlbklkU3RyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAQa2V5X1Byb21vVG9rZW5JZAIAAAAAAAAAAAxwcm9tb1Rva2VuSWQJAAJZAAAAAQUAAAAPcHJvbW9Ub2tlbklkU3RyAAAAAAtzdGFraW5nREFwcAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAD2tleV9TdGFraW5nREFwcAIAAAAAAAAAAAljb2xsZWN0b3IJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAA1rZXlfQ29sbGVjdG9yAgAAAAAAAAAAB3Jlc2VydmUJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAtrZXlfUmVzZXJ2ZQIAAAAAAAAAAAtwcm9tb0lzc3VlZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAD2tleV9Qcm9tb0lzc3VlZAIAAAAAAAAAAAZBQ1RJVkUCAAAAATEAAAAACEZJTklTSEVEAgAAAAEwAAAABgAAAANpbnYBAAAABGluaXQAAAADAAAAD2hhc2hyYXRlQXNzZXRJZAAAABJzdGFraW5nREFwcEFkZHJlc3MAAAAQY29sbGVjdG9yQWRkcmVzcwQAAAAQaW5pdEFtb3VudFRvQnVybgAAAAAAAAAAAQQAAAAKaXNzdWVQcm9tbwkABEIAAAAFAgAAAAxSRURTbWJfUHJvbW8CAAAAAAUAAAAQaW5pdEFtb3VudFRvQnVybgAAAAAAAAAACAYEAAAAB3Byb21vSWQJAAQ4AAAAAQUAAAAKaXNzdWVQcm9tbwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlfSGFzaHJhdGVUb2tlbklkCQACWAAAAAEICQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAPsAAAAAQkAAlkAAAABBQAAAA9oYXNocmF0ZUFzc2V0SWQCAAAAAAAAAAJpZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlfU3Rha2luZ0RBcHAJAAQlAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEnN0YWtpbmdEQXBwQWRkcmVzcwIAAAAACQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtleV9Db2xsZWN0b3IJAAQlAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAEGNvbGxlY3RvckFkZHJlc3MCAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5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", "height": 2178415, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6DFWrB3DikRbGFuk3XNETFvQVsaNRpYnc5EN3riAfz7D Next: BXqhwYP6p1oQp7LzZhBt3V38rBdNus2Rxp7F7vm1m6QX Diff:
OldNewDifferences
8383
8484
8585 @Callable(inv)
86-func stakePromo (rewardType,timelock) = {
86+func lockPromo (rewardType,timelock) = {
8787 let stakingTotalKey = key_UserStakedTotal(toString(inv.caller))
8888 let stakingKey = key_UserStaking(toString(inv.caller), toBase58String(inv.transactionId))
8989 if (if ((inv.caller == stakingDApp))
103103 if ((staking == staking))
104104 then {
105105 let stakingValue = valueOrErrorMessage(getString(stakingDApp, stakingKey), "Could not find the newly created staking")
106-[IntegerEntry(stakingTotalKey, (valueOrElse(getInteger(this, stakingTotalKey), 0) + inv.payments[0].amount)), StringEntry(stakingKey, stakingValue)]
106+ let newValue = take(stakingValue, (valueOrErrorMessage(lastIndexOf(stakingValue, ","), "") + 1))
107+[IntegerEntry(stakingTotalKey, (valueOrElse(getInteger(this, stakingTotalKey), 0) + inv.payments[0].amount)), StringEntry(stakingKey, newValue)]
107108 }
108109 else throw("Strict value is not equal to itself.")
109110 }
112113
113114
114115 @Callable(inv)
115-func unstakePromo () = nil
116+func unlockPromo () = nil
116117
117118
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let key_HashrateTokenId = "hashrateTokenId"
55
66 let key_PromoTokenId = "promoTokenId"
77
88 let key_StakingDApp = "staking-dapp"
99
1010 let key_Collector = "collector"
1111
1212 let key_Reserve = "reserve"
1313
1414 let key_PromoIssued = "promo-issued"
1515
1616 let key_StakedTotal = "staked_total"
1717
1818 func key_UserStaking (address,txId) = ((address + "_staking_") + txId)
1919
2020
2121 func key_UserStakedTotal (address) = (address + "_total")
2222
2323
2424 let hashrateTokenIdStr = valueOrErrorMessage(getString(this, key_HashrateTokenId), "")
2525
2626 let hashrateTokenId = fromBase58String(hashrateTokenIdStr)
2727
2828 let promoTokenIdStr = valueOrErrorMessage(getString(this, key_PromoTokenId), "")
2929
3030 let promoTokenId = fromBase58String(promoTokenIdStr)
3131
3232 let stakingDApp = addressFromStringValue(valueOrErrorMessage(getString(this, key_StakingDApp), ""))
3333
3434 let collector = addressFromStringValue(valueOrErrorMessage(getString(this, key_Collector), ""))
3535
3636 let reserve = valueOrErrorMessage(getInteger(this, key_Reserve), "")
3737
3838 let promoIssued = valueOrErrorMessage(getInteger(this, key_PromoIssued), "")
3939
4040 let ACTIVE = "1"
4141
4242 let FINISHED = "0"
4343
4444 @Callable(inv)
4545 func init (hashrateAssetId,stakingDAppAddress,collectorAddress) = {
4646 let initAmountToBurn = 1
4747 let issuePromo = Issue("REDSmb_Promo", "", initAmountToBurn, 8, true)
4848 let promoId = calculateAssetId(issuePromo)
4949 [StringEntry(key_HashrateTokenId, toBase58String(valueOrErrorMessage(assetInfo(fromBase58String(hashrateAssetId)), "").id)), StringEntry(key_StakingDApp, toString(valueOrErrorMessage(addressFromString(stakingDAppAddress), ""))), StringEntry(key_Collector, toString(valueOrErrorMessage(addressFromString(collectorAddress), ""))), IntegerEntry(key_Reserve, 0), IntegerEntry(key_PromoIssued, 0), issuePromo, Burn(promoId, initAmountToBurn), StringEntry(key_PromoTokenId, toBase58String(promoId)), IntegerEntry(key_Reserve, 0)]
5050 }
5151
5252
5353
5454 @Callable(inv)
5555 func increaseReserve () = if ((inv.caller == this))
5656 then throw()
5757 else if ((size(inv.payments) != 1))
5858 then throw()
5959 else if ((inv.payments[0].assetId != hashrateTokenId))
6060 then throw()
6161 else if ((0 >= inv.payments[0].amount))
6262 then throw()
6363 else [IntegerEntry(key_Reserve, (reserve + inv.payments[0].amount))]
6464
6565
6666
6767 @Callable(inv)
6868 func buyPromo (amountOfPromoTokens) = if ((size(inv.payments) != 1))
6969 then throw("WAVES payment required")
7070 else if (isDefined(inv.payments[0].assetId))
7171 then throw("Only WAVES payment accepted!")
7272 else if ((0 >= inv.payments[0].amount))
7373 then throw("Payment amount must be positive")
7474 else if ((amountOfPromoTokens > (reserve - promoIssued)))
7575 then throw("")
7676 else [IntegerEntry(key_PromoIssued, (promoIssued + amountOfPromoTokens)), Reissue(promoTokenId, amountOfPromoTokens, true), ScriptTransfer(collector, inv.payments[0].amount, inv.payments[0].assetId), ScriptTransfer(inv.caller, amountOfPromoTokens, promoTokenId)]
7777
7878
7979
8080 @Callable(inv)
8181 func redeemHashrateToken () = [Burn(valueOrErrorMessage(inv.payments[1].assetId, ""), inv.payments[1].amount), ScriptTransfer(collector, inv.payments[0].amount, inv.payments[0].assetId), ScriptTransfer(inv.caller, inv.payments[1].amount, hashrateTokenId)]
8282
8383
8484
8585 @Callable(inv)
86-func stakePromo (rewardType,timelock) = {
86+func lockPromo (rewardType,timelock) = {
8787 let stakingTotalKey = key_UserStakedTotal(toString(inv.caller))
8888 let stakingKey = key_UserStaking(toString(inv.caller), toBase58String(inv.transactionId))
8989 if (if ((inv.caller == stakingDApp))
9090 then true
9191 else (inv.caller == this))
9292 then throw("Caller cannot be Staking DApp or Promo DApp")
9393 else if ((size(inv.payments) != 1))
9494 then throw("Single payment of Promo token required")
9595 else if ((inv.payments[0].assetId != promoTokenId))
9696 then throw("Only Promo token payment is accepted")
9797 else if ((0 >= inv.payments[0].amount))
9898 then throw("Payment must be positive")
9999 else if (isDefined(getString(this, stakingKey)))
100100 then throw("staking already exists")
101101 else {
102102 let staking = invoke(stakingDApp, "lockBy", [toString(inv.caller), rewardType, timelock], [AttachedPayment(hashrateTokenId, inv.payments[0].amount)])
103103 if ((staking == staking))
104104 then {
105105 let stakingValue = valueOrErrorMessage(getString(stakingDApp, stakingKey), "Could not find the newly created staking")
106-[IntegerEntry(stakingTotalKey, (valueOrElse(getInteger(this, stakingTotalKey), 0) + inv.payments[0].amount)), StringEntry(stakingKey, stakingValue)]
106+ let newValue = take(stakingValue, (valueOrErrorMessage(lastIndexOf(stakingValue, ","), "") + 1))
107+[IntegerEntry(stakingTotalKey, (valueOrElse(getInteger(this, stakingTotalKey), 0) + inv.payments[0].amount)), StringEntry(stakingKey, newValue)]
107108 }
108109 else throw("Strict value is not equal to itself.")
109110 }
110111 }
111112
112113
113114
114115 @Callable(inv)
115-func unstakePromo () = nil
116+func unlockPromo () = nil
116117
117118

github/deemru/w8io/169f3d6 
89.63 ms