0

如果钱包里有“FreezeToken”,冻结钱包。如果钱包中有“ThawToken”,则取消冻结。此代码是失败的示例。

let FreezeToken = base58'GwmXnsF3Z5tANgHwmDW7Lf4SwyYNEp4S3QZM3aBFLHwS'
let ThawToken = base58'GK7ZV8xFbh1Qz14Cnr6mLkV93svaZGrurVuaBZocwLZZ'
match tx {
     case m : ExchangeTransaction. =>
         if (assetBalance(e.sender,ThawToken) >= 1 ) then{true}
         else if (assetBalance(e.sender,ThawToken) >= 1 ) then{false}
         else true
     case _ => false
}

TransferTransaction 成功但 ExchangeTransaction 失败。如何更改此代码?请告诉我。

4

1 回答 1

1

我猜您正在创建一个智能帐户?从我在代码中看到的是,您使用了 2 次 ThawToken,一次结果为真,另一次为假。我的猜测是您希望将 2 中的一个替换为 FreezeToken

同样在您的示例中,您有“ExchangeTransaction。”,从我从您的代码中可以理解的内容来看,这里似乎不需要这个点。

同样根据示例,您的整个第二个 if 结构似乎应该包含在 {} 中。示例:https ://github.com/wavesplatform/ride-examples/blob/bc8db2342f53fe1554a10dc5aaa211b1542a5ca1/smart-assets/HotPotatoToken.ride#L41

但是我认为这个问题可以通过 && 语句来解决,并且不再需要第二个 if-then-else。我建议做以下检查:

检查 ThawToken 是否不在钱包中,如果是这种情况,请检查 freezetoken 是否在钱包中。

如果 ThawToken 是并且 FreezeToken 也是 => 钱包免费,因为 ThawToken 会释放它。

如果 ThawToken 不是并且 FreezeToken 是 1 个或更多 => 钱包被锁定,因为只有 FreezeToken。

如果 ThawToken 不是并且 FreezeToken 不是 => 钱包免费,因为没有 FreezeToken

    if (assetBalance(e.sender,ThawToken) == 0 &&
 assetBalance(e.sender,FreezeToken) >= 1 ) then{
      false
    }else{
      true
    }

同样要阻止所有交易并确实冻结钱包,您需要过滤另一种类型,所有类型都使用:交易,请注意这也会禁用更改脚本的选项,以防您锁定帐户。要阻止转账交易,请使用:TransferTransaction。

所有类型都可以在这里找到: https ://docs.wavesplatform.com/en/smart-contracts/ride-language/standard-library.html

于 2019-04-09T07:37:55.780 回答