erigontech / silkrpc Goto Github PK
View Code? Open in Web Editor NEWC++ implementation of Ethereum JSON RPC daemon within Thorax architecture
License: Apache License 2.0
C++ implementation of Ethereum JSON RPC daemon within Thorax architecture
License: Apache License 2.0
The fields blockReward
, uncleReward
e issuance
in the tg_issuance
API return value should be typed as QUANTITY
I installed and built the repo with
git clone....
cd silkrpc
mkdir -p build && cd build
cmake ..
make
The build works fine... I then did these commands:
make clean
make
As soon as the build starts, I get this warning:
sh@desktop:~/D/T/build|main✓➤ make
-- GLOB mismatch!
-- GLOB mismatch!
-- GLOB mismatch!
-- GLOB mismatch!
and the build fails at the linker with this error:
[100%] Linking CXX executable kv_seek
Undefined symbols for architecture x86_64:
"remote::KV::Stub::TxRaw(grpc_impl::ClientContext*)", referenced from:
_main in kv_seek.cpp.o
"remote::KV::NewStub(std::__1::shared_ptr<grpc::ChannelInterface> const&, grpc::StubOptions const&)", referenced from:
_main in kv_seek.cpp.o
"remote::Pair::Pair(google::protobuf::Arena*)", referenced from:
_main in kv_seek.cpp.o
"remote::Pair::~Pair()", referenced from:
_main in kv_seek.cpp.o
"remote::Cursor::Cursor(google::protobuf::Arena*)", referenced from:
_main in kv_seek.cpp.o
"remote::Cursor::~Cursor()", referenced from:
_main in kv_seek.cpp.o
"vtable for remote::KV::Stub", referenced from:
_main in kv_seek.cpp.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [cmd/kv_seek] Error 1
make[1]: *** [cmd/CMakeFiles/kv_seek.dir/all] Error 2
make: *** [all] Error 2
Without doing anything else, if I then do:
make
the build works.
In the PR I'm working on, only the .proto
files are stored in the repo. The generated code is placed in the ./build
folder which is not included in the repo.
I suggest we remove the generated code from the repo (one of the reasons is exactly this issue.)
This allows us to:
.proto
files and the build will take care of the rest,.proto
files and have them build without modifying the CMakeLists.txt
files.make clean
The following TX on Goerli testnet has performance significantly worst than RPCDaemon in eth_call
: > 1 sec whilst RPCDaemon does about 100ms
0x21b162fa10bf075c9db059eb828a24d7aad2fa22b435ad242df71f67ed6858f6
As reference here it is the curl
request:
time curl --silent -X POST -H "Content-Type: application/json" --data '{"jsonrpc": "2.0", "method": "eth_call", "params": [{"data": "0x60806040526000621e84815561010060405190810160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250621e853a9060086200007a92919062000422565b5033621e854360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061024060405190810160405280600060ff168152602001602d60ff168152602001602e60ff168152602001604860ff168152602001604960ff168152602001606260ff168152602001606360ff168152602001607c60ff168152602001607d60ff168152602001609060ff168152602001609160ff16815260200160a260ff16815260200160a360ff16815260200160b460ff16815260200160b560ff16815260200160b660ff16815260200160b760ff16815260200160b860ff16815250621e8551906012620001919291906200046c565b5061024060405190810160405280600060ff168152602001602d60ff168152602001602e60ff168152602001604860ff168152602001604960ff168152602001606260ff168152602001606360ff168152602001607c60ff168152602001607d60ff168152602001609060ff168152602001609160ff16815260200160a260ff16815260200160a360ff16815260200160b460ff16815260200160b560ff16815260200160b660ff16815260200160b760ff16815260200160b860ff16815250621e8563906012620002659291906200046c565b5061024060405190810160405280600060ff168152602001602f60ff168152602001603060ff168152602001604560ff168152602001604660ff168152602001605b60ff168152602001605c60ff168152602001607160ff168152602001607260ff168152602001608760ff168152602001608860ff168152602001609d60ff168152602001609e60ff16815260200160b460ff16815260200160b560ff16815260200160b660ff16815260200160b760ff16815260200160b860ff16815250621e8575906012620003399291906200046c565b5061024060405190810160405280600060ff168152602001602660ff168152602001602760ff168152602001603d60ff168152602001603e60ff168152602001605360ff168152602001605460ff168152602001606960ff168152602001606a60ff168152602001607e60ff168152602001607f60ff168152602001609360ff168152602001609460ff16815260200160a760ff16815260200160a860ff16815260200160b460ff16815260200160b560ff16815260200160b860ff16815250621e85879060126200040d9291906200046c565b503480156200041b57600080fd5b50620004de565b826008810192821562000459579160200282015b8281111562000458578251829060ff1690559160200191906001019062000436565b5b509050620004689190620004b6565b5090565b8260128101928215620004a3579160200282015b82811115620004a2578251829060ff1690559160200191906001019062000480565b5b509050620004b29190620004b6565b5090565b620004db91905b80821115620004d7576000816000905550600101620004bd565b5090565b90565b61282880620004ee6000396000f3fe608060405260043610610126576000357c0100000000000000000000000000000000000000000000000000000000900480638fdb7189116100b2578063a8af1f2411610081578063a8af1f2414610480578063cbb859c1146104cf578063e01c6d4e14610565578063e5aa3d581461056f578063e9ab979f1461059a57610126565b80638fdb7189146103465780638ff193af146103715780639e0551c6146103da578063a74915cf1461045557610126565b8063310bd74b116100f9578063310bd74b1461021b5780633bab87a1146102565780634c644b38146102a55780635e59a03f146102e05780637365870b146102f757610126565b80630e3a3faf1461012b5780631b9265b81461017a5780631e925633146101915780632c2d0d29146101e0575b600080fd5b34801561013757600080fd5b506101646004803603602081101561014e57600080fd5b81019080803590602001909291905050506105c5565b6040518082815260200191505060405180910390f35b34801561018657600080fd5b5061018f6105e8565b005b34801561019d57600080fd5b506101ca600480360360208110156101b457600080fd5b810190808035906020019092919050505061084c565b6040518082815260200191505060405180910390f35b3480156101ec57600080fd5b506102196004803603602081101561020357600080fd5b8101908080359060200190929190505050610868565b005b34801561022757600080fd5b506102546004803603602081101561023e57600080fd5b8101908080359060200190929190505050610936565b005b34801561026257600080fd5b5061028f6004803603602081101561027957600080fd5b8101908080359060200190929190505050610a45565b6040518082815260200191505060405180910390f35b3480156102b157600080fd5b506102de600480360360208110156102c857600080fd5b8101908080359060200190929190505050610a61565b005b3480156102ec57600080fd5b506102f5610b2d565b005b34801561030357600080fd5b506103306004803603602081101561031a57600080fd5b8101908080359060200190929190505050610c26565b6040518082815260200191505060405180910390f35b34801561035257600080fd5b5061035b610c42565b6040518082815260200191505060405180910390f35b34801561037d57600080fd5b506103c06004803603602081101561039457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e44565b604051808215151515815260200191505060405180910390f35b3480156103e657600080fd5b50610413600480360360208110156103fd57600080fd5b8101908080359060200190929190505050610e66565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046157600080fd5b5061046a610ea6565b6040518082815260200191505060405180910390f35b34801561048c57600080fd5b506104b9600480360360208110156104a357600080fd5b8101908080359060200190929190505050610f48565b6040518082815260200191505060405180910390f35b3480156104db57600080fd5b5061054f60048036036101008110156104f357600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610f66565b6040518082815260200191505060405180910390f35b61056d6113ea565b005b34801561057b57600080fd5b506105846116d8565b6040518082815260200191505060405180910390f35b3480156105a657600080fd5b506105af6116e0565b6040518082815260200191505060405180910390f35b6000818154811015156105d457fe5b906000526020600020016000915090505481565b6105f06116e8565b5050621e8542621e847f5481548110151561060757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561066b57600080fd5b600080621e847f5481548110151561067f57fe5b90600052602060002001541415806106b057506000620f4240621e847f54620f423f811015156106ab57fe5b015414155b15156106bb57600080fd5b6000620f4240621e847f54620f423f811015156106d457fe5b01546000621e847f548154811015156106e957fe5b906000526020600020015401905060006509184e72a000820266038d7ea4c680008302039050621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6509184e72a00084029081150290604051600060405180830381858888f19350505050158015610781573d6000803e3d6000fd5b50621e8542621e847f5481548110151561079757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610807573d6000803e3d6000fd5b506000620f4240621e847f54620f423f8110151561082157fe5b0181905550600080621e847f5481548110151561083a57fe5b90600052602060002001819055505050565b600181620f423f8110151561085d57fe5b016000915090505481565b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108c657600080fd5b60018114156108eb57621e8563621e85519060126108e592919061279a565b50610933565b600281141561091057621e8575621e855190601261090a92919061279a565b50610932565b600381141561093157621e8587621e855190601261092f92919061279a565b505b5b5b50565b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561099457600080fd5b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109f257600080fd5b60008082815481101515610a0257fe5b90600052602060002001819055506000620f424082620f423f81101515610a2557fe5b01819055506000600182620f423f81101515610a3d57fe5b018190555050565b621e855181601281101515610a5657fe5b016000915090505481565b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610abf57600080fd5b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b29573d6000803e3d6000fd5b5050565b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b8b57600080fd5b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610be957600080fd5b621e854360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b621e853a81600881101515610c3757fe5b016000915090505481565b6000610c4c6116e8565b5050621e8542621e847f54815481101515610c6357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cc757600080fd5b6000620f4240621e847f54620f423f81101515610ce057fe5b015414151515610cef57600080fd5b60006003610cfb6117cf565b811515610d0457fe5b0690506000811415610d4d576002620f4240621e847f54620f423f81101515610d2957fe5b015402620f4240621e847f54620f423f81101515610d4357fe5b0181905550610d91565b600081141515610d90576000620f4240621e847f54620f423f81101515610d7057fe5b015402620f4240621e847f54620f423f81101515610d8a57fe5b01819055505b5b7fa32fe7d3feeebafaea45672784c12ac3d984391968387adf269273ed42b199c881334260405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825260068152602001807f646f75626c65000000000000000000000000000000000000000000000000000081525060200194505050505060405180910390a18091505090565b621e85446020528060005260406000206000915054906101000a900460ff1681565b621e854281815481101515610e7757fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600090505b621e85428054905081111515610f43573373ffffffffffffffffffffffffffffffffffffffff16621e854282815481101515610ee657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f365780915050610f45565b8080600101915050610eae565b505b90565b620f424081620f423f81101515610f5b57fe5b016000915090505481565b6000610f706116e8565b5050621e8542621e847f54815481101515610f8757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610feb57600080fd5b610ffb8989898989898989611834565b600060b8611007611b05565b81151561101057fe5b069050621e848160008154809291906001019190505550621e8551600060128110151561103957fe5b0154811015801561105d5750621e8551600160128110151561105757fe5b01548111155b1561106f5761106a611b6a565b6112b3565b621e8551600260128110151561108157fe5b015481101580156110a55750621e8551600360128110151561109f57fe5b01548111155b156110b7576110b2611cb2565b6112b2565b621e855160046012811015156110c957fe5b015481101580156110ed5750621e855160056012811015156110e757fe5b01548111155b156110ff576110fa611de4565b6112b1565b621e8551600660128110151561111157fe5b015481101580156111355750621e8551600760128110151561112f57fe5b01548111155b1561114757611142611f16565b6112b0565b621e8551600860128110151561115957fe5b0154811015801561117d5750621e8551600960128110151561117757fe5b01548111155b1561118f5761118a612048565b6112af565b621e8551600a6012811015156111a157fe5b015481101580156111c55750621e8551600b6012811015156111bf57fe5b01548111155b156111d7576111d261217a565b6112ae565b621e8551600c6012811015156111e957fe5b0154811015801561120d5750621e8551600d60128110151561120757fe5b01548111155b1561121f5761121a6122ac565b6112ad565b621e8551600e60128110151561123157fe5b015481101580156112555750621e8551600f60128110151561124f57fe5b01548111155b15611267576112626123de565b6112ac565b621e8551601060128110151561127957fe5b0154811015801561129d5750621e8551601160128110151561129757fe5b01548111155b156112ab576112aa612510565b5b5b5b5b5b5b5b5b5b7f040451b74a590808c18e87a7facf911f38b76896d282f8c65c77ecd7d2464c32813342621e84815460405180806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281038252600a8152602001807f77686963686c69676874000000000000000000000000000000000000000000008152506020019550505050505060405180910390a17fbfc91b7e6816cd1266b9feee339cfd788942b06dc0862fe1ab641802587408f58a8a8a8a8a8a8a8a604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a18091505098975050505050505050565b600034905066038d7ea4c680008111151561140457600080fd5b60001515621e854460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561156457621e85423390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600066038d7ea4c68000828115156114db57fe5b0490806001815401808255809150509060018203906000526020600020016000909192909190915055506001621e854460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116d5565b60011515621e854460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156116d4576115c76116e8565b50506000621e847f548154811015156115dc57fe5b90600052602060002001546001621e847f54620f423f811015156115fc57fe5b0181905550600080621e847f5481548110151561161557fe5b9060005260206000200154141561165f5766038d7ea4c680008181151561163857fe5b046000621e847f5481548110151561164c57fe5b90600052602060002001819055506116d3565b600080621e847f5481548110151561167357fe5b90600052602060002001541415156116d2576001621e847f54620f423f8110151561169a57fe5b015466038d7ea4c68000828115156116ae57fe5b04016000621e847f548154811015156116c357fe5b90600052602060002001819055505b5b5b5b50565b621e847f5481565b621e84815481565b6000606060008090505b621e854280549050811115156117c9573373ffffffffffffffffffffffffffffffffffffffff16621e85428281548110151561172a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117bc5761177a816125db565b50806040805190810160405280600a81526020017f67657420706c617965720000000000000000000000000000000000000000000081525092509250506117cb565b80806001019150506116f2565b505b9091565b60004442621e854560405160200180848152602001838152602001826003801561180e576020028201915b8154815260200190600101908083116117fa575b505093505050506040516020818303038152906040528051906020012060019004905090565b61183c6116e8565b5050621e8542621e847f5481548110151561185357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118b757600080fd5b6000881415806118c8575060008714155b806118d4575060008614155b806118e0575060008514155b806118ec575060008414155b806118f8575060008314155b80611904575060008214155b80611910575060008114155b151561191b57600080fd5b600081838587898b8d8f010101010101019050620f4240621e847f54620f423f8110151561194557fe5b01546000621e847f5481548110151561195a57fe5b906000526020600020015401811115151561197457600080fd5b600080621e847f5481548110151561198857fe5b90600052602060002001541415806119b957506000620f4240621e847f54620f423f811015156119b457fe5b015414155b15156119c457600080fd5b80620f4240621e847f54620f423f811015156119dc57fe5b01546000621e847f548154811015156119f157fe5b906000526020600020015401036000621e847f54815481101515611a1157fe5b90600052602060002001819055506000620f42406001620f423f81101515611a3557fe5b018190555088621e853a6000600881101515611a4d57fe5b018190555087621e853a6001600881101515611a6557fe5b018190555086621e853a6002600881101515611a7d57fe5b018190555085621e853a6003600881101515611a9557fe5b018190555084621e853a6004600881101515611aad57fe5b018190555083621e853a6005600881101515611ac557fe5b018190555082621e853a6006600881101515611add57fe5b018190555081621e853a6007600881101515611af557fe5b0181905550505050505050505050565b60004442621e8482604051602001808481526020018381526020018260b88015611b44576020028201915b815481526020019060010190808311611b30575b505093505050506040516020818303038152906040528051906020012060019004905090565b60006004611b7661266b565b811515611b7f57fe5b0690506000811480611b915750600181145b80611b9c5750600281145b15611be6576005621e853a6000600881101515611bb557fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611bdc57fe5b0181905550611c27565b6002621e853a6000600881101515611bfa57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611c2157fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b60006003611cbe6126d0565b811515611cc757fe5b0690506001811415611d18576002621e853a6001600881101515611ce757fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611d0e57fe5b0181905550611d59565b600a621e853a6001600881101515611d2c57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611d5357fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b60006003611df06126d0565b811515611df957fe5b0690506000811415611e4a576002621e853a6002600881101515611e1957fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611e4057fe5b0181905550611e8b565b600f621e853a6002600881101515611e5e57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611e8557fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b60006003611f226126d0565b811515611f2b57fe5b0690506002811415611f7c576002621e853a6003600881101515611f4b57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611f7257fe5b0181905550611fbd565b6014621e853a6003600881101515611f9057fe5b015402621e848081905550621e848054620f4240621e847f54620f423f81101515611fb757fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b60006002612054612735565b81151561205d57fe5b06905060018114156120ae576002621e853a600460088110151561207d57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f811015156120a457fe5b01819055506120ef565b6014621e853a60046008811015156120c257fe5b015402621e848081905550621e848054620f4240621e847f54620f423f811015156120e957fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b60006002612186612735565b81151561218f57fe5b06905060018114156121e0576002621e853a60056008811015156121af57fe5b015402621e848081905550621e848054620f4240621e847f54620f423f811015156121d657fe5b0181905550612221565b601e621e853a60056008811015156121f457fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561221b57fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b600060026122b8612735565b8115156122c157fe5b0690506001811415612312576002621e853a60066008811015156122e157fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561230857fe5b0181905550612353565b6028621e853a600660088110151561232657fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561234d57fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b600060026123ea612735565b8115156123f357fe5b0690506001811415612444576032621e853a600760088110151561241357fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561243a57fe5b0181905550612485565b6064621e853a600760088110151561245857fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561247f57fe5b01819055505b7f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe81621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a150565b6032621e853a600760088110151561252457fe5b015402621e848081905550621e848054620f4240621e847f54620f423f8110151561254b57fe5b01819055507f984aad1018be9d33007a8d616c895e365ec54fa8b0e68585d1d26b4b8babf1fe6008621e848054621e84815460405180806020018581526020018481526020018381526020018281038252600a8152602001807f6269676f72736d616c6c0000000000000000000000000000000000000000000081525060200194505050505060405180910390a1565b600081621e847f819055503373ffffffffffffffffffffffffffffffffffffffff16621e8542621e847f5481548110151561261257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561266557621e847f549050612666565b5b919050565b60004442621e85486040516020018084815260200183815260200182600480156126aa576020028201915b815481526020019060010190808311612696575b505093505050506040516020818303038152906040528051906020012060019004905090565b60004442621e854c60405160200180848152602001838152602001826003801561270f576020028201915b8154815260200190600101908083116126fb575b505093505050506040516020818303038152906040528051906020012060019004905090565b60004442621e854f604051602001808481526020018381526020018260028015612774576020028201915b815481526020019060010190808311612760575b505093505050506040516020818303038152906040528051906020012060019004905090565b82601281019282156127c6579182015b828111156127c55782548255916001019190600101906127aa565b5b5090506127d391906127d7565b5090565b6127f991905b808211156127f55760008160009055506001016127dd565b5090565b9056fea165627a7a723058209a7b685b5705188ec0760add24bbf9229d4db0fed4b06e8044dc73e9ea66f43f0029", "from": "0xffbf52733195ccafea7be8d871f5c8be7ca360cf", "to": null, "gas": "0x41CBF2", "gasPrice": "0x5D21DBA00"}, "0x5B42"], "id": 1}' localhost:8545
This tool (https://docs.buf.build/) is really nice for two things:
The linter is pretty opinionated, but it's easily configured. buf check ls-lint-checkers
lists all available linters.
Also, buf ls-files
and buf build
look interesting.
See Erigon PR #2277
Add support for gRPC SSL/TLS authentication mechanism with dedicated command-line option to choose between no authentication or SSL/TLS authentication (the latter should become the default)
Thread pool should be setup once and for all in eth_call implementation but currently is created in each call
Silkrpc at commit 0352fa8 crashes during eth_getLogs
workload test:
NONE [06-03|20:05:10.526] 140250064285888 Silkrpc launched with target localhost:9090 using 6 contexts
NONE [06-03|20:05:10.534] 140250064285888 KV compatible interface versions: client: 2.0.0 server: 2.0.0
NONE [06-03|20:05:10.535] 140250064285888 Silkrpc running at localhost:51515 [pid=17695, main thread: 140250064285888]
tcmalloc: large alloc 10673659904 bytes == 0x56249f190000 @
tcmalloc: large alloc 10673668096 bytes == 0x56249f1b0000 @
tcmalloc: large alloc 10673668096 bytes == 0x56271bcea000 @
tcmalloc: large alloc 10673668096 bytes == 0x56271bcea000 @
tcmalloc: large alloc 10673668096 bytes == 0x56271bcea000 @
tcmalloc: large alloc 10673668096 bytes == 0x56271bcea000 @
tcmalloc: large alloc 10673659904 bytes == 0x56271bcea000 @
./start-silkrpc.sh: line 2: 17695 Segmentation fault (core dumped) taskset -c 0-2 ./build_gcc_release/silkrpc/silkrpcdaemon --target localhost:9090 --local localhost:51515 --logLevel c
Analysis of the dumped core reveals the following stack trace:
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007fa8a096b859 in __GI_abort () at abort.c:79
#2 0x00007fa8a0f77ace in ?? () from /lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4
#3 0x00007fa8a0f78829 in ?? () from /lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4
#4 0x000055d9972a8316 in run_container_free () at /home/paolo/project/silkrpc/silkworm/CRoaring/src/containers/run.c:118
#5 0x000055d99728bd60 in roaring_bitmap_and_inplace () at /home/paolo/project/silkrpc/silkworm/CRoaring/src/roaring.c:713
#6 0x000055d996d73cdc in silkrpc::commands::EthereumRpcApi::_ZN7silkrpc8commands14EthereumRpcApi19handle_eth_get_logsERKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEEERSF_.actor(silkrpc::commands::EthereumRpcApi::handle_eth_get_logs(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > > const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char> > >&)::_ZN7silkrpc8commands14EthereumRpcApi19handle_eth_get_logsERKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS2_14adl_serializerES5_IhSaIhEEEERSF_.frame*) ()
#7 0x000055d996d19840 in void asio::detail::executor_function::complete<asio::detail::binder2<asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair>, std::error_code, remote::Pair>, std::allocator<void> >(asio::detail::executor_function::impl_base*, bool) ()
#8 0x000055d996bf6356 in void asio::io_context::basic_executor_type<std::allocator<void>, 4u>::execute<asio::detail::executor_function>(asio::detail::executor_function&&) const ()
#9 0x000055d996d1ab19 in silkrpc::ethdb::kv::async_seek<asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair>, asio::io_context::basic_executor_type<std::allocator<void>, 0u> >::do_complete(void*, silkrpc::ethdb::kv::async_operation<void, std::error_code, remote::Pair>*, std::error_code, remote::Pair) ()
#10 0x000055d996d19b85 in std::_Function_handler<void (grpc::Status const&, remote::Pair), silkrpc::ethdb::kv::initiate_async_seek<asio::io_context::basic_executor_type<std::allocator<void>, 0u> >::operator()<asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair> >(asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair>&&)::{lambda(grpc::Status const&)#1}::operator()(grpc::Status const&) const::{lambda(grpc::Status const&, remote::Pair)#1}>::_M_invoke(std::_Any_data const&, grpc::Status const&, remote::Pair&&) ()
#11 0x000055d996bf6b4b in silkrpc::ethdb::kv::StreamingClient::completed(bool) ()
#12 0x000055d996d0628e in asio::detail::completion_handler<silkrpc::grpc::CompletionRunner::run()::{lambda()#1}, asio::io_context::basic_executor_type<std::allocator<void>, 0u> >::do_complete(void*, asio::detail::scheduler_operation*, std::error_code const&, unsigned long) ()
#13 0x000055d996d00818 in asio::detail::scheduler::run(std::error_code&) ()
#14 0x000055d996cfea8f in asio::detail::posix_thread::func<silkrpc::ContextPool::run()::{lambda()#2}>::run() ()
#15 0x000055d996be4004 in asio_detail_posix_thread_function ()
#16 0x00007fa8a0f4b609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#17 0x00007fa8a0a68293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Remove boost::filesystem
as unused Hunter dependency
11:21 AM] tjayrush: Do you ever see this build failure?
[ 76%] Linking CXX executable kv_seek_async
Undefined symbols for architecture x86_64:
"___llvm_profile_runtime", referenced from:
___llvm_profile_runtime_user in libsilkwormd.a(util.cpp.o)
(maybe you meant: ___llvm_profile_runtime_user)
[11:22 AM] tjayrush: The only way I can make it disappear is to do rm -fR * in the build folder and then cmake .. and make. That cleans it up, but then it keeps coming back.
[11:23 AM] canepat: Unfortunately no
[11:24 AM] canepat: I have no clue what is means atm
[11:24 AM] canepat: Seems an issue in Silkworm linking
[11:25 AM] canepat: Have you tried googling the error?
[11:26 AM] canepat: Seems that Silkworm references ___llvm_profile_runtime instead of ___llvm_profile_runtime_user
[11:26 AM] tjayrush: I have another weird error with the linking (weak symbol)... I googled, but not must useful.
[11:27 AM] tjayrush: It's weird because it's intermittent and disappears if I remove the build artifacts.
[11:27 AM] canepat: You are on a Mac, aren't you?
[11:27 AM] tjayrush: I'll play around with it. I thought you may have seen it.
[11:27 AM] tjayrush: Yes. Mac. You're linux?
[11:28 AM] canepat: Yes Ubuntu 20.04
[11:29 AM] canepat: Swinject/Swinject#296 (comment)
GitHub
Undefined symbols for architecture x86_64: ___llvm_profile_runtime ...
I'm getting an issue linking Swinject framework into my project when using Xcode9 and Swift3.2 It's giving me the following error: Undefined symbols for architecture x86_64: &qu...
[11:31 AM] canepat: Could be something around the -fprofile-instr-generate setting, but it seems Siilkworm does it right by passing it both as compiler and as linker option
[11:32 AM] canepat: But above all: it's not the first time you build, you already built many times, so something changed
[11:33 AM] canepat: What did you have changed recently? (time locality principle also for bugs... 😁)
[11:35 AM] tjayrush: I do make clean all the time...silkworm gets re-built each time I do.
[11:36 AM] tjayrush: "time locality principle also for bugs..." Yes.
[11:37 AM] tjayrush: Let me look into it. Thanks for the pointers... I think I'll write an issue just so I don't forget.
Relevant features:
See here for a list of libraries to consider
Move recovery of transaction sender from JSON serialization function to the implementation of any JSON API requiring it, as already done for eth_sendRawTransaction
Explore usage of asio-grpc library
This could help simplifying the code and hopefully improving the performance too
Use evmc_status_code_to_string
to obtain EVMC error string from error code after EVMC error strings get aligned to Go EVM ones
~/workspace/silkrpc$ ./build_clang_release.sh
[ 1%] Built target hex
[ 1%] Built target instructions
[ 3%] Built target cborcpp
[ 4%] Built target generate_sentry_grpc
[ 4%] Built target secp256k1
[ 5%] Built target mdbx-static
[ 7%] Built target loader
[ 14%] Built target ff
[ 16%] Built target mdbx_copy
[ 17%] Built target mdbx_chk
[ 17%] Built target tooling
[ 20%] Built target roaring
[ 23%] Built target evmone
[ 23%] Built target mdbx_drop
[ 24%] Built target mdbx_dump
[ 28%] Built target silkinterfaces
[ 28%] Built target mdbx_load
[ 29%] Built target mdbx_stat
[ 42%] Built target silkworm_core
[ 57%] Built target silkworm_node
[ 72%] Built target silkrpc
[ 72%] Built target kv_seek_async
[ 74%] Built target kv_seek
[ 75%] Built target ethbackend_async
[ 75%] Built target kv_seek_async_callback
[ 76%] Built target kv_seek_async_asio
[ 77%] Built target kv_seek_async_coroutines
[ 78%] Built target silkrpcdaemon
[ 78%] Built target kv_seek_both
[ 78%] Built target ethbackend
[ 78%] Built target ethbackend_coroutines
[ 78%] Built target get_latest_block
[100%] Built target unit_test
tcmalloc: large alloc 139668265140224 bytes == (nil) @ 0x7f070d783680 ...
terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
unit_test is a Catch v2.13.4 host application.
Run with -? for options
-------------------------------------------------------------------------------
RemoteCursor::seek
success w/ sync read - sync write
-------------------------------------------------------------------------------
~/workspace/silkrpc/silkrpc/ethdb/kv/remote_cursor_test.cpp:362
...............................................................................
~/workspace/silkrpc/silkrpc/ethdb/kv/remote_cursor_test.cpp:362: FAILED:
{Unknown expression after the reported line}
due to a fatal error condition:
SIGABRT - Abort (abnormal termination) signal
===============================================================================
test cases: 82 | 81 passed | 1 failed
assertions: 678 | 677 passed | 1 failed
./build_clang_release.sh: line 6: 465118 Aborted (core dumped) cmd/unit_test
The unit test failure is intermittent (i.e typically once in a series of 50 unit_test executions), it happens only using Clang compiler in release (no issue using Clang debug and GCC release/debug) and can be associated to different test cases or sections.
The problem can be always tracked down to the usage of some coroutine API expecting one or more const silkworm::ByteView&
parameter activated using asio::co_spawn
. The solution here is modifying all pass-by-reference usages of silkworm::ByteView
into pass-by-value (extra verification required).
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from build_gcc_release/silkrpc/silkrpcdaemon...
[New LWP 2008926]
[New LWP 2008916]
[New LWP 2008924]
[New LWP 2008922]
[New LWP 2008932]
[New LWP 2008923]
[New LWP 2008925]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `build_gcc_release/silkrpc/silkrpcdaemon --target localhost:9090 --local localho'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007fc8a605a0ae in tc_newarray () from /usr/lib/x86_64-linux-gnu/libtcmalloc.so.4
[Current thread is 1 (Thread 0x7fc8a39e7700 (LWP 2008926))]
(gdb) up
#1 0x00005608793af64d in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) [clone .isra.0] ()
(gdb) up
#2 0x00005608793beb31 in google::protobuf::internal::ArenaStringPtr::CreateInstance(google::protobuf::Arena*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*) ()
(gdb) up
#3 0x00005608795e1510 in remote::Pair::Pair(remote::Pair const&) ()
(gdb) up
#4 0x00005608794c72ff in std::_Function_handler<void (grpc::Status const&, remote::Pair), silkrpc::ethdb::kv::initiate_async_seek<asio::io_context::basic_executor_type<std::allocator<void>, 0u> >::operator()<asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair> >(asio::detail::awaitable_handler<asio::execution::any_executor<asio::execution::context_as_t<asio::execution_context&>, asio::execution::detail::blocking::never_t<0>, asio::execution::prefer_only<asio::execution::detail::blocking::possibly_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::tracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::outstanding_work::untracked_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::fork_t<0> >, asio::execution::prefer_only<asio::execution::detail::relationship::continuation_t<0> > >, std::error_code, remote::Pair>&&)::{lambda(grpc::Status const&)#1}::operator()(grpc::Status const&) const::{lambda(grpc::Status const&, remote::Pair)#1}>::_M_invoke(std::_Any_data const&, grpc::Status const&, remote::Pair&&) ()
(gdb) up
#5 0x000056087939ea3b in silkrpc::ethdb::kv::StreamingClient::completed(bool) ()
(gdb) up
#6 0x00005608794b36ee in asio::detail::completion_handler<silkrpc::grpc::CompletionRunner::run()::{lambda()#1}, asio::io_context::basic_executor_type<std::allocator<void>, 0u> >::do_complete(void*, asio::detail::scheduler_operation*, std::error_code const&, unsigned long) ()
(gdb) down
#5 0x000056087939ea3b in silkrpc::ethdb::kv::StreamingClient::completed(bool) ()
(gdb)
Use stricter type representation for Storage
in DumpAccount
:
using Storage = std::map<std::string, std::string>;
struct DumpAccount {
intx::uint256 balance{};
uint64_t nonce{0};
uint64_t incarnation{0};
evmc::bytes32 root{0};
evmc::bytes32 code_hash{0};
std::optional<silkworm::Bytes> code;
std::optional<Storage> storage;
};
Both storage location and value could be silkworm::Bytes
or evmc::bytes32
instead of std::string
. See also impacted code in AccountDumper::load_storage and to_json
Add fuzz testing at least for HTTP JSON RPC external interface
See RPCDaemon behavior that supports integers. Silkrpc response to web3_clientVersion
request with "id": 1
is currently:
{
"error": {
"code": 100,
"message": "[json.exception.type_error.302] type must be number, but is string"
},
"id": 0,
"jsonrpc": "2.0"
}
Many chain forks are missing in tg_forks API
Specification: JSON Batch spec
Comparison: Erigon RPCDaemon batch issue
Implementation hints:
Request request_
-> std::vector<Request> requests_
in Connection
Request& req
-> std::vector<Request>& requests
in RequestParser::parse
RequestParser::consume
using i-th Request
as long as result
is not indeterminate and begin != end
(Parser::reset
before each iteration)asio::co_spawn
to launch separate coroutine stacks in Connection::do_read
, one for each Request
Block header RLP changed in block 0x4D3FCD
Remove common header for constants and move each of them to an appropriate class or module
Having one common header for constants increases code coupling and compilation time when one constant is added/changed/removed
A separate header just for command-line default options should be considered, anyway
To improve readability and clarity in logs add a leading 0x in functions converting hex values (as addresses, bytes32, ByteView and other) into strings.
Impacted functions should be:
Add a template function for intx::uint with the same behaviour.
Exceptions thrown during request processing should cause an error in response instead
Guidelines:
Adding one or more SILKRPC_LOG traces causes the unit test executable to crash with segmentation fault
Probably it's something related to logging streams, please @Sixtysixter provide more info here when available
Add support for shared-memory access to chaindata as replacement for KV
interface in local deployments (Silkrpc
colocated with TurboGeth Core
)
The parallel compilation blocks VM or poor host.
A best choice could be using CMAKE_BUILD_PARALLEL_LEVEL
env variable and let the user set it to its best value.
For example adding
export CMAKE_BUILD_PARALLEL_LEVEL=4
or
export CMAKE_BUILD_PARALLEL_LEVEL=8
in .bashrc file.
Add interface versioning mechanism:
interfaces
submodule using at least d23176c0Explore usage of io_uring in asio library
PR #42 contains initial work for addressing this issue
Substitute pass-by-reference with pass by value for silkworm::ByteView
(see here)
See EIP-2718
Refactor content of core
package to improve testability:
rawdb
subpackage into core
accessors.hpp
to database_reader.hpp
chain.hpp
content introducing interface Chain
and subclass DatabaseChain
using DatabaseReader
blocks
functions into Chain
interface and implement them in DatabaseChain
The main
branch can be removed as it is no longer needed.
I tried to remove it, but can't because I don't have permission.
Add to_quantity
function in types
namespace to avoid repeating "0x" + to_hex_no_leading_zeros
Add state cache using state change streaming supported by KV.StateChanges RPC
Review for AccountWalker and StorageWalker to allow a better unit test
Unify command-line debug tools for Thorax gRPC interfaces (ethbackend_async
, ethbackend
, kv_seek_async
, kv_seek
...) into one unique silkrpc_toolbox
executable for better structure and faster Silkrpc build time.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.