我已经解决了这个问题,但是我想了解为什么它首先出现:
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;
}
}
答案 0 :(得分:1)
ExampleFlowWithFixedToken调用内置的IssueTokens流。 此流程在内部构建事务,以指定输入,输出状态,命令(在这种情况下为IssueCommand)。 下一步是验证合同。
在验证合同之前,我们由发行人将输入/输出令牌分组。 然后为每个组分配一个令牌命令。 这样做是因为,如果事务包含多种类型的令牌,则它们需要按IssuedTokenType分组。 另请注意,不同发行者发行的相同令牌类型不可互换。 因此,需要按IssuedTokenType进行分组。 一旦我们通过IssuedTokenType拥有了分组,就可以对每个分组分别进行合同验证。
当我们尝试将令牌命令分配给每个组时,我们将IssuedTokenType in命令与我们的组中的命令进行比较。 因此,如果我们不重写equals方法,则组中的IssuedTokenType都不会与TokenCommand中的那个匹配。
因此,不会为该组分配任何TokenCommand。 每个组至少应有一个命令。如果没有,我们将不知道该如何处理。因此,它无法说“存在没有分配命令的令牌组”
希望有帮助!