【发布时间】:2019-10-25 11:59:41
【问题描述】:
HyperLeger Sawtooth 支持订阅事务处理器中的事件。但是有没有办法在事务处理器中创建特定于应用程序的事件,例如这里的 Python 示例:https://www.jacklllll.xyz/blog/2019/04/08/sawtooth/
ctx.addEvent(
'agreement/create',
[['name', 'agreement'],
['address', address],
['buyer name', agreement.BuyerName],
['seller name', agreement.SellerName],
['house id', agreement.HouseID],
['creator', signer]],
null)
在当前的 Sawtooth-Java SDK v0.1.2 中,唯一的覆盖是
apply(TpProcessRequest, State)
addEvent(TpProcessRequest, Context)
到目前为止,我已经设法收听了 sawtooth/state-delta 的事件,但这给了我 tx-family 的所有状态变化
import sawtooth.sdk.protobuf.EventSubscription;
import sawtooth.sdk.protobuf.EventFilter;
import sawtooth.sdk.protobuf.ClientEventsSubscribeRequest;
import sawtooth.sdk.protobuf.ClientEventsSubscribeResponse;
import sawtooth.sdk.protobuf.ClientEventsUnsubscribeRequest;
import sawtooth.sdk.protobuf.Message;
EventFilter filter = EventFilter.newBuilder()
.setKey("address")
.setMatchString(nameSpace.concat(".*"))
.setFilterType(EventFilter.FilterType.REGEX_ANY)
.build();
EventSubscription subscription = EventSubscription.newBuilder()
.setEventType("sawtooth/state-delta")
.addFilters(filter)
.build();
context = new ZContext();
socket = context.createSocket(ZMQ.DEALER);
socket.connect("tcp://sawtooth-rest:4004");
ClientEventsSubscribeRequest request = ClientEventsSubscribeRequest.newBuilder()
.addSubscriptions(subscription)
.build();
message = Message.newBuilder()
.setCorrelationId("123")
.setMessageType(Message.MessageType.CLIENT_EVENTS_SUBSCRIBE_REQUEST)
.setContent(request.toByteString())
.build();
socket.send(message.toByteArray());
Message.MessageType.CLIENT_EVENTS_SUBSCRIBE_REQUEST 注册后,我会在线程循环中收到消息。
我希望在 TransactionHandler 中我应该能够addEvent() 或创建某种类型的事件,然后可以使用 Java SDK 订阅这些事件。
有其他人尝试在 Sawtooth 上用 JAVA 创建自定义事件吗?
【问题讨论】:
-
有人为 Java SDK 找到了这个吗?我完全被困在这一点上? apply() 方法中没有可用的上下文。虽然 TpProcessRequest 对象中有一个 getContextId()。
标签: java events hyperledger-sawtooth