-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: implement p2p protocol and rpc service #221
Conversation
cmd/storage_provider/init.go
Outdated
@@ -3,6 +3,7 @@ package main | |||
import ( | |||
"fmt" | |||
|
|||
"github.com/bnb-chain/greenfield-storage-provider/service/p2p" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix the location of imported pkg
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
config/config.go
Outdated
@@ -64,6 +67,7 @@ var DefaultStorageProviderConfig = &StorageProviderConfig{ | |||
model.TaskNodeService: model.TaskNodeGRPCAddress, | |||
model.SignerService: model.SignerGRPCAddress, | |||
model.MetadataService: model.MetadataGRPCAddress, | |||
model.P2pService: model.P2PGRPCAddress, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2pService -> P2PService
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
config/config.go
Outdated
@@ -74,13 +78,15 @@ var DefaultStorageProviderConfig = &StorageProviderConfig{ | |||
model.TaskNodeService: model.TaskNodeGRPCAddress, | |||
model.SignerService: model.SignerGRPCAddress, | |||
model.MetadataService: model.MetadataGRPCAddress, | |||
model.P2pService: model.P2PGRPCAddress, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
config/subconfig.go
Outdated
@@ -173,6 +174,11 @@ func (cfg *StorageProviderConfig) MakeTaskNodeConfig() (*tasknode.TaskNodeConfig | |||
} else { | |||
return nil, fmt.Errorf("missing signer gRPC address configuration for task node service") | |||
} | |||
if _, ok := cfg.Endpoint[model.P2pService]; ok { | |||
snCfg.P2PGrpcAddress = cfg.Endpoint[model.P2pService] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix snCfg.P2PGrpcAddress to snCfg.P2PGRPCAddress
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
model/const.go
Outdated
// P2PGRPCAddress default gRPC address of p2p service | ||
P2PGRPCAddress = "localhost:9833" | ||
// P2PGListenAddress default p2p protocol listen address of p2p node | ||
P2PGListenAddress = "127.0.0.1:9933" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
error spelling of P2PGListenAddress which should be P2PListenAddress
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
model/errors/rpc_error.go
Outdated
// ErrSPMismatch defines the SP's operate address mismatch error | ||
ErrSPMismatch = errors.New("SP's operate address mismatch") | ||
// ErrApprovalExpire defines the SP's operate address mismatch error | ||
ErrApprovalExpire = errors.New("approval expire") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix ErrApprovalExpire to ErrApprovalExpired
fix errors.New("approval expire")
to errors.New("approval expired")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
model/errors/rpc_error.go
Outdated
@@ -62,6 +62,12 @@ var ( | |||
ErrCheckPaymentAccountActive = errors.New("payment account is not active") | |||
// ErrCheckQuotaEnough defines check quota is enough | |||
ErrCheckQuotaEnough = errors.New("quota is not enough") | |||
// ErrSPMismatch defines the SP's operate address mismatch error | |||
ErrSPMismatch = errors.New("SP's operate address mismatch") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix ErrSPMismatch to ErrMismatchedSP
fix errors.New("SP's operate address mismatch")
to errors.New("the operator address of SP is a mismatch")
;
comment also should be fixed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
model/errors/rpc_error.go
Outdated
// task node service error | ||
var ( | ||
// ErrSPApprovalNumber defines failed to insufficient SPs' approvals from p2p server | ||
ErrSPApprovalNumber = errors.New("failed to get sufficient SPs' approvals from p2p server") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix errors.New("failed to get sufficient SPs' approvals from p2p server")
to errors.New("failed to get sufficient approvals of SPs from p2p server")
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
|
||
// pattern: /protocol-name/request-or-response-message/version | ||
const GetApprovalRequest = "/approval/request/0.0.1" | ||
const GetApprovalResponse = "/approval/response/0.0.1" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
move these constants to const.go?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The p2p protocol independent, and has no interaction with other parts. It is recommended to separate it first.
defer func() { | ||
if err != nil { | ||
n.peers.DeletePeer(peerID) | ||
log.Warnw("failed to receive pong", "peer_id", peerID, "error", err) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use log.Errorw
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
|
||
err = types.VerifySignature(pong.GetSpOperatorAddress(), pong.GetSignBytes(), pong.GetSignature()) | ||
if err != nil { | ||
log.Warnw("failed to verify pong msg signature", "local", s.Conn().LocalPeer(), "remote", s.Conn().RemotePeer(), "error", err) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the same , the ping msg fail is normal
proto/pkg/p2p/types/p2p.proto
Outdated
// sp_operator_address define sp operator public key | ||
string sp_operator_address = 2; | ||
// time_out defines the approval valid deadline | ||
int64 time_out = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix time_out to timeout
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
proto/pkg/p2p/types/p2p.proto
Outdated
// time_out defines the approval valid deadline | ||
int64 time_out = 3; | ||
// refuse_reason defines the reason of refusing | ||
string refuse_reason = 4; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix refuse_reason to refused_reason
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
proto/service/p2p/types/p2p.proto
Outdated
// expect_accept defines the number of expecting accept approval | ||
int64 expect_accept = 3; | ||
// time_out defines approval request time out | ||
int64 time_out = 4; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix time_out to timeout
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
proto/service/p2p/types/p2p.proto
Outdated
// approval defines the object info for approval | ||
pkg.p2p.types.GetApprovalRequest approval = 1; | ||
// expect_accept defines the number of expecting accept approval | ||
int64 expect_accept = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix expect_accept to expected_accept
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
service/gateway/request_util.go
Outdated
if strings.Compare(g.config.SpOperatorAddress, approval.GetSpOperatorAddress()) != 0 { | ||
log.Errorw("failed to verify replicate approval's SP operate address", | ||
"approval_operate_address", approval.GetSpOperatorAddress(), | ||
"self_operate_address", g.config.SpOperatorAddress) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix self_operate_address to own_operate_address
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
README.md
Outdated
[P2PConfig] | ||
ListenAddress = "127.0.0.1:9933" | ||
# p2p node msg Secp256k1 encryption key, it is different from other SP's addresses | ||
PrivKey = "" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aligned with the above, no abbreviation. use PrivateKey
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
@@ -189,6 +191,7 @@ main() { | |||
reset_sp $2 | |||
;; | |||
--start) | |||
stop_sp |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a restart
case to ensure to be clearer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is okay for the time being, because minimizing the commands of local setup script also reduces the complexity of use, and in the scenario of local setup script, it is not possible to run more than 7 SPs at the same time.
deployment/localup/env.info
Outdated
Node4="0b5a6480fe664671fd01979fc4278fa393f0abc08c95980f4a900056f035ca7e" | ||
Node5="896caab68f3f3fdbf053ba64a29ce0292c8a5536a2790713b67dd1851f4d77fc" | ||
Node6="ec09def8ee42ac9c23394080ce5bfcdcb1dc57255048a8afc74e9deaae4399cd" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Uniformly use uppercase for shell environment variables.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
@@ -24,6 +24,8 @@ var ( | |||
BlockSyncerService = strings.ToLower("BlockSyncer") | |||
// ManagerService defines the name of manager service | |||
ManagerService = strings.ToLower("Manager") | |||
// P2PService defines the name of p2p service | |||
P2PService = strings.ToLower("p2p") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p2p
as a module name is a bit general, what aboutP2PNode
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, you are right.
But it is more user-friendly. In the './gnfd-sp -server p2p' scenario, and other services also does not have 'service' or 'node' suffixes, p2p may be more suitable.
model/const.go
Outdated
@@ -37,6 +39,7 @@ var SpServiceDesc = map[string]string{ | |||
SignerService: "Sign the transaction and broadcast to chain", | |||
MetadataService: "Provides the ability to query meta data", | |||
BlockSyncerService: "Syncs block data to db", | |||
P2PService: "Service for p2p protocol interaction between SPs", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consistent with above, the verb begins with.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
proto/service/p2p/types/p2p.proto
Outdated
// approval defines the object info for approval | ||
pkg.p2p.types.GetApprovalRequest approval = 1; | ||
// expected_accept defines the number of expecting accept approval | ||
int64 expected_accept = 3; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
= 2
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
|
||
// SignGetApprovalReqResponse is response type for the SignReplicateApprovalReqMsg RPC method | ||
message SignReplicateApprovalReqMsgResponse { | ||
pkg.p2p.types.GetApprovalRequest approval = 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
GetApprovalResponse?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
singer RPC have Object/Bucket approval interface. so the approval should have prefix. ReplicateApproval is distinguish from ObjectApproval.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the request here a typo? Replace GetApprovalRequest
with GetApprovalResponse
?
service/gateway/request_util.go
Outdated
"own_operate_address", g.config.SpOperatorAddress) | ||
return errors.ErrSPMismatch | ||
} | ||
if time.Now().Unix() > approval.Timeout { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Timeout means expired_time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
service/p2p/p2p_config.go
Outdated
|
||
type P2PConfig struct { | ||
SpOperatorAddress string | ||
GrpcAddress string |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use GRPCAddress
, align with other services.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
service/p2p/p2p_config.go
Outdated
type P2PConfig struct { | ||
SpOperatorAddress string | ||
GrpcAddress string | ||
SignerGRPCAddress string |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SignerGrpcAddress
, align with other services config.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
cmd/p2p/p2p.go
Outdated
}, | ||
Category: "P2P COMMANDS", | ||
Description: ` | ||
The p2p.create.key creates 'n'' sets of Secp256k1 key pairs, each key pair contains a private key |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'n''
It seems that there is an extra single quotation mark?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
cmd/utils/flags.go
Outdated
Name: "configremote", | ||
Usage: "Flag load config from remote db,if 'configremote' be set, the db.user, " + | ||
Name: "config.remote", | ||
Usage: "Flag load config from remote db,if 'config.remote' be set, the db.user, " + | ||
"db.password and db.address flags are needed, otherwise use default value", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
otherwise use the
default value
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
Dsn = "localhost:3308" | ||
|
||
[P2PConfig] | ||
ListenAddress = "127.0.0.1:9933" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is the difference between this ListenAddress and ListAddress.p2p?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2PConfig.ListenAddress p2p protocol , another is rpc address
model/const.go
Outdated
@@ -37,6 +39,7 @@ var SpServiceDesc = map[string]string{ | |||
SignerService: "Sign the transaction and broadcast to chain", | |||
MetadataService: "Provides the ability to query meta data", | |||
BlockSyncerService: "Syncs block data to db", | |||
P2PService: "Communicate with SPs on p2p protocol", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
polish Communicate
to Communicates
, and polish the above SignerService
description Signs and Broadcasts
if you get time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
|
||
// SignGetApprovalReqResponse is response type for the SignReplicateApprovalReqMsg RPC method | ||
message SignReplicateApprovalReqMsgResponse { | ||
pkg.p2p.types.GetApprovalRequest approval = 1; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the request here a typo? Replace GetApprovalRequest
with GetApprovalResponse
?
service/p2p/p2p_service.go
Outdated
Accept: accept, | ||
Refuse: refuse, | ||
} | ||
log.CtxInfow(ctx, "success to get approval", "object_id", objectInfo.Id.Uint64(), "accept", len(accept), "refuse", len(refuse)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
succeed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the request here a typo? Replace GetApprovalRequest with GetApprovalResponse?
no , it is the GetApprovalRequest
) | ||
|
||
// pattern: /protocol-name/request-or-response-message/version | ||
const GetApprovalRequest = "/approval/request/0.0.1" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is the 0.0.1
a protocol version? if yes, I suggest to use v0.0.1
// maintains requests for getting approvals in memory | ||
type ApprovalProtocol struct { | ||
node *Node | ||
response map[uint64]chan *types.GetApprovalResponse |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the key in the map is created first, is there no need to use a lock?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
33 lines define the mutex
func (a *ApprovalProtocol) cancelApprovalRequest(id uint64) { | ||
a.mux.Lock() | ||
defer a.mux.Unlock() | ||
if _, ok := a.response[id]; !ok { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does !ok
mean that it has been canceled?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes
|
||
// hangApprovalRequest records the approval request in memory for response to router | ||
// notice: the caller need to call cancelApprovalRequest to delete the record | ||
func (a *ApprovalProtocol) hangApprovalRequest(id uint64) (chan *types.GetApprovalResponse, error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's the id
means? OperatorAddress of sp?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
objectID
README.md
Outdated
Dsn = "localhost:3306" | ||
Dsn = "localhost:3308" | ||
# p2p node configuration | ||
[P2PConfig] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix P2PConfig to P2PCfg to keep the same style with other services
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
Flags: []cli.Flag{ | ||
number, | ||
}, | ||
Category: "P2P COMMANDS", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
define as a constant
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
next PR, the metrics PR has defined the constant, it should be at the same file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
* fix: fix verify permission bug (#225) * feat: merge release v0.0.4 fix to develop (#230) * fix: fix route bug * build: change signer wiltlist ip * fix: fix https sync failed * fix: router getUserBucketsRouterName path (#229) * fix: router getUserBucketsRouterName path and update router comments Co-authored-by: BarryTong65 <122767193+BarryTong65@users.noreply.github.com> Co-authored-by: will-2012 <will.w@nodereal.io> * ci: add gosec action (#231) * feat: implement p2p protocol and rpc service (#221) * feat: implement p2p protocol node and RPC service * feat: p2p RPC server * fix: config port conflict * feat: get secondary SP approval from p2p server * feat: verify approval in gateway * fix: golang ci lint error * fix: integration testing bugs * feat: load p2p private key from ENV var * feat: implement p2p protocol msg sign and verify * feat: p2p protocol msg sign in signer service * feat: signer client method for sign p2p protocol msg * feat: signature verify in related modules * fix: manager grace stop * fix: object Id proto clone to deep copy panic * feat: p2p create key pairs command * feat: p2p config to local up script * fix: local up script deploy p2p error * fix: pr comments * fix: change p2p config name for following the project specification * chore: refine error code * feat: sp services add metrics (#211) * feat: sp service adds metrics * fix: add metrics config * refactor: refactor metrics service * fix: update go.mod * fix: fix config toml template * chore: coding adjustments * fix: golang ci lint error --------- Co-authored-by: DylanYong <dylan.y@nodereal.io> Co-authored-by: joeylichang <joeycli0919@gmail.com> * feat: implement metadata payment apis (#235) * feat: implement metadata payment apis fix: update commnets and db schema fix: update OutFlows type json fix: update metadata * fix: add the errDesciption and fix requestID * fix: fix Id & CheckSums * feat: update bucket id (#241) * feat: metadata schema update fix: update config * fix: update SettleTimestamp and format imports * fix: fix owner and end_block_number * fix: adjust check condition to avoid panic (#243) Co-authored-by: DylanYong <dylan.y@nodereal.io> * feat: update the juno version (#244) * feat: resource manager (#246) * feat: resouce manager * feat: add resource manager flags * feat: add resource manager to dowmloader service * feat: add resource manager to challenge service * feat: add resource manager to task node service * chore: rich log info for rcmgr * feat: init global resource manager * fix: integration testing bugs * feat: return preparations error to client during put object * chore: fix cr comments * docs: release changlog for v0.0.5 (#249) * docs: release changlog for v0.0.5 * build: update the greenfield chain version (#248) * build: update the greenfield chain version * feat:update juno version * fix: update metadata for chain v0.0.10 fix: update metadata for chain v0.0.10 fix: update comments for bsdb schema * fix: update from OneRowId to OneRowID --------- Co-authored-by: constwz <changbohao30@gmail.com> Co-authored-by: BarryTong65 <barrytong.work@gmail.com> --------- Co-authored-by: joeycli <joeycli0919@gmail.com> Co-authored-by: BarryTong65 <122767193+BarryTong65@users.noreply.github.com> Co-authored-by: VM <112189277+sysvm@users.noreply.github.com> Co-authored-by: DylanYong <dylan.y@nodereal.io> Co-authored-by: krish-nr <krish.z@nodereal.io> Co-authored-by: krish-z <122767080+krish-nr@users.noreply.github.com> Co-authored-by: constwz <122766871+constwz@users.noreply.github.com> Co-authored-by: dylanhuang <j75689@gmail.com> Co-authored-by: constwz <changbohao30@gmail.com> Co-authored-by: BarryTong65 <barrytong.work@gmail.com>
Description
Implement p2p service.
Rationale
P2P node implements 2 protocols:
Ping protocol
Approval protocol
Example
N/A
Changes
Notable changes: