diff --git a/example/client/main.go b/example/client/main.go
index 1bb70b16f4faf0628e9256161b09941b81633600..c946ef8180c7ccda185bbde12f7bbd2af7ca3604 100644
--- a/example/client/main.go
+++ b/example/client/main.go
@@ -8,7 +8,7 @@ import (
 )
 
 func main() {
-	client, err := jrpc.Dial("ws://localhost:8545")
+	client, err := jrpc.Dial("https://mainnet.boba.network/")
 	if err != nil {
 		panic(err)
 	}
diff --git a/pkg/codec/json.go b/pkg/codec/json.go
index f90adcfab45f103325435de6c4c02f2fb629c404..ff2e1cdcf71ffce399ab6cdbf3565ff11d3049af 100644
--- a/pkg/codec/json.go
+++ b/pkg/codec/json.go
@@ -163,10 +163,10 @@ func (m *Message) UnmarshalJSON(xs []byte) error {
 	return UnmarshalMessage(m, dec)
 }
 
-func (m *Message) MarshalJSON() ([]byte, error) {
+func (m Message) MarshalJSON() ([]byte, error) {
 	buf := &bytes.Buffer{}
 	enc := jx.NewStreamingEncoder(buf, 4096)
-	err := MarshalMessage(m, enc)
+	err := MarshalMessage(&m, enc)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/codec/reqresp.go b/pkg/codec/reqresp.go
index 484edd5d5da0ec2552119f880641e13ac4bacb3a..c00371aaa0414e184c68e9eb4f4e01036577d95a 100644
--- a/pkg/codec/reqresp.go
+++ b/pkg/codec/reqresp.go
@@ -41,11 +41,11 @@ type Request struct {
 }
 
 func (r *Request) UnmarshalJSON(xs []byte) error {
-	return json.Unmarshal(xs, &r.Message)
+	return r.Message.UnmarshalJSON(xs)
 }
 
-func (r *Request) MarshalJSON() ([]byte, error) {
-	return json.Marshal(r.Message)
+func (r Request) MarshalJSON() ([]byte, error) {
+	return r.Message.MarshalJSON()
 }
 
 func NewRequestFromMessage(ctx context.Context, message *Message) (r *Request) {