Closed hewison-chris closed 2 years ago
We can have ngrok
public URLs using ngrok
as follows. All the URLs are different for all the protocols as you can see.
Forwarding tcp://0.tcp.ngrok.io:12466 -> localhost:2826
Forwarding http://0efe-211-179-51-66.ngrok.io -> http://localhost:8080
Forwarding https://0efe-211-179-51-66.ngrok.io -> http://localhost:8080
Forwarding tcp://8.tcp.ngrok.io:13713 -> localhost:8053
Need to test on the current live TestNet. We did not test on the TestNet because it was not available at that time.
Found an error that only occurred in my local machine running with ngrok
as follows. It occurs continuously. Will analyze more the reason.
core.exception.OutOfMemoryError@core/lifetime.d(137): Memory allocation failed
----------------
??:? onOutOfMemoryError [0x10ccde38d]
??:? _d_newarrayU [0x10cd0e2ca]
??:? pure nothrow agora.consensus.data.Enrollment.Enrollment[] std.array.arrayAllocImpl!(false, agora.consensus.data.Enrollment.Enrollment[], ulong).arrayAllocImpl(ulong) [0x10bdb79fb]
??:? pure nothrow @trusted agora.consensus.data.Enrollment.Enrollment[] std.array.uninitializedArray!(agora.consensus.data.Enrollment.Enrollment[], ulong).uninitializedArray(ulong) [0x10bdb7894]
??:? pure nothrow @trusted agora.consensus.data.Enrollment.Enrollment[] std.array.array!(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Enrollment.Enrollment[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult).array(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Enrollment.Enrollment[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult).__lambda6() [0x10bdb787b]
??:? @safe agora.consensus.data.Enrollment.Enrollment[] std.array.array!(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Enrollment.Enrollment[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult).array(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Enrollment.Enrollment[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult) [0x10bdb76d1]
??:? @safe agora.consensus.data.Enrollment.Enrollment[] agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Enrollment.Enrollment[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions) [0x10bdb784b]
??:? @safe agora.consensus.data.Enrollment.Enrollment[] agora.serialization.Serializer.deserializeFull!(agora.consensus.data.Enrollment.Enrollment[]).deserializeFull(scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions) [0x10c2c5335]
??:? @safe agora.consensus.data.Enrollment.Enrollment[] agora.serialization.Serializer.deserializeFull!(agora.consensus.data.Block.BlockHeader).deserializeFull(scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).convert!(agora.consensus.data.Enrollment.Enrollment[]).convert() [0x10c2c48b7]
??:? @safe agora.consensus.data.Block.BlockHeader agora.serialization.Serializer.deserializeFull!(agora.consensus.data.Block.BlockHeader).deserializeFull(scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions) [0x10c2c4795]
??:? @safe agora.consensus.data.Block.BlockHeader agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Block.BlockHeader[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4!(ulong).__lambda4(ulong) [0x10c2d4136]
??:? @property @safe agora.consensus.data.Block.BlockHeader std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Block.BlockHeader[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult.front() [0x10bef7076]
??:? @safe agora.consensus.data.Block.BlockHeader[] std.array.array!(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Block.BlockHeader[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult).array(std.algorithm.iteration.MapResult!(agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Block.BlockHeader[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions).__lambda4, std.range.iota!(ulong, ulong).iota(ulong, ulong).Result).MapResult) [0x10bef6eab]
??:? @safe agora.consensus.data.Block.BlockHeader[] agora.serialization.Serializer.deserializeArray!(agora.consensus.data.Block.BlockHeader[]).deserializeArray(ulong, scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions) [0x10bef6fcb]
??:? @safe agora.consensus.data.Block.BlockHeader[] agora.serialization.Serializer.deserializeFull!(agora.consensus.data.Block.BlockHeader[]).deserializeFull(scope const(ubyte)[] delegate(ulong) @safe, in agora.serialization.Serializer.DeserializerOptions) [0x10c2537b5]
??:? @safe void agora.network.RPC.RPCClient!(agora.api.Validator.API).RPCClient.getBlockHeaders(agora.common.Set.Set!(ulong).Set).__lambda12() [0x10c253710]
??:? @safe agora.common.Types.Height agora.network.RPC.RPCClient!(agora.api.Validator.API).RPCClient.postPreimage(in ref agora.consensus.data.PreImageInfo.PreImageInfo) [0x10c25800e]
??:? nothrow agora.common.Types.Height agora.network.Client.NetworkClient.attemptRequest!(agora.api.FullNode.API.postPreimage(in ref agora.consensus.data.PreImageInfo.PreImageInfo), 0, 1, agora.consensus.data.PreImageInfo.PreImageInfo).attemptRequest(ref agora.consensus.data.PreImageInfo.PreImageInfo, immutable(char)[], uint) [0x10c0fce45]
??:? nothrow void agora.network.Client.NetworkClient.handleGossip(agora.network.Client.NetworkClient.GossipEvent) [0x10c2864fd]
??:? void agora.network.Client.NetworkClient.gossipTask() [0x10c286235]
??:? nothrow @trusted void agora.common.Task.ITaskManager.toSafeHandler(void delegate()).__lambda2().__lambda1() [0x10c3189b7]
??:? nothrow @safe void agora.common.Task.ITaskManager.toSafeHandler(void delegate()).__lambda2() [0x10c31899c]
??:? nothrow @safe void vibe.core.core.createTimer(void delegate() nothrow @safe).C.opCall(vibe.core.core.Timer).__lambda2(vibe.core.core.Timer) [0x10ca8a661]
??:? nothrow void vibe.core.task.TaskFuncInfo.set!(void delegate(vibe.core.core.Timer) nothrow @safe, vibe.core.core.Timer).set(ref void delegate(vibe.core.core.Timer) nothrow @safe, ref vibe.core.core.Timer).callDelegate(ref vibe.core.task.TaskFuncInfo) [0x10cad47f5]
??:? void vibe.core.task.TaskFuncInfo.call() [0x10cad209b]
??:? nothrow void vibe.core.task.TaskFiber.run() [0x10cad163d]
??:? fiber_entryPoint [0x10ccfbd33]
[1] 92494 abort ./agora -c my_config.yaml --testnet
When running Agora as a Validator it is required to provide a public endpoint for other validators to reach for communication. Using something like https://ngrok.com/ will make this easier from say a laptop or home server. This should work with docker image and also binary.