Corda令牌SDK:“存在没有分配命令的令牌组”错误

时间:2019-07-31 18:52:51

标签: corda

我已经解决了这个问题,但是我想了解为什么它首先出现:
1.我正在使用令牌SDK的 Java 模板
2.我创建了自己的令牌类型
3.我修改了ExampleFlowWithFixedToken类以发布我的新令牌
4.运行start ExampleFlowWithFixedToken amount: 100, recipient: PartyB时,出现错误:有一个令牌组,没有分配的命令
5.最初,当我添加新的令牌类时,它没有实现equals()方法。错误消失了,我能够发行令牌了。

为什么要添加该方法来解决问题?

public class MyTokenType implements TokenType {

    private final int fractionDigits = 6;
    private final String tokenIdentifier = "MY_TOKEN";

    @NotNull
    @Override
    public BigDecimal getDisplayTokenSize() {
        return BigDecimal.ONE.scaleByPowerOfTen(-fractionDigits);
    }

    @Override
    public int getFractionDigits() {
        return fractionDigits;
    }

    @NotNull
    @Override
    public Class<?> getTokenClass() {
        return this.getClass();
    }

    @NotNull
    @Override
    public String getTokenIdentifier() {
        return tokenIdentifier;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof MyTokenType;
    }
}

1 个答案:

答案 0 :(得分:1)

ExampleFlowWithFixedToken调用内置的IssueTokens流。 此流程在内部构建事务,以指定输入,输出状态,命令(在这种情况下为IssueCommand)。 下一步是验证合同。

在验证合同之前,我们由发行人将输入/输出令牌分组。 然后为每个组分配一个令牌命令。 这样做是因为,如果事务包含多种类型的令牌,则它们需要按IssuedTokenType分组。 另请注意,不同发行者发行的相同令牌类型不可互换。 因此,需要按IssuedTokenType进行分组。 一旦我们通过IssuedTokenType拥有了分组,就可以对每个分组分别进行合同验证。

当我们尝试将令牌命令分配给每个组时,我们将IssuedTokenType in命令与我们的组中的命令进行比较。 因此,如果我们不重写equals方法,则组中的IssuedTokenType都不会与TokenCommand中的那个匹配。

因此,不会为该组分配任何TokenCommand。 每个组至少应有一个命令。如果没有,我们将不知道该如何处理。因此,它无法说“存在没有分配命令的令牌组”

希望有帮助!