Skip to content

Commit

Permalink
feat: PRT - add UTXO support on protocol side. do not omit empty nil …
Browse files Browse the repository at this point in the history
…errors / results.
  • Loading branch information
ranlavanet committed Feb 6, 2025
1 parent 580b88f commit 808d6f7
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 9 deletions.
10 changes: 10 additions & 0 deletions protocol/chainlib/chainproxy/rpcclient/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,16 @@ type JsonrpcMessage struct {
Result json.RawMessage `json:"result,omitempty"`
}

// BTCResponse represents a unified Bitcoin RPC response structure
type BTCResponse struct {
Version string `json:"jsonrpc,omitempty"`
ID json.RawMessage `json:"id,omitempty"`
Method string `json:"method,omitempty"`
Params json.RawMessage `json:"params,omitempty"`
Error interface{} `json:"error"` // Can be *JsonError or string
Result interface{} `json:"result"` // Can be json.RawMessage or string
}

type tendermintSubscribeReply struct {
Query string `json:"query"`
}
Expand Down
30 changes: 30 additions & 0 deletions protocol/chainlib/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import (
"time"

sdkerrors "cosmossdk.io/errors"
"github.com/goccy/go-json"
gojson "github.com/goccy/go-json"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/compress"
"github.com/gofiber/fiber/v2/middleware/favicon"
"github.com/gofiber/websocket/v2"
"github.com/lavanet/lava/v5/protocol/chainlib/chainproxy/rpcclient"
common "github.com/lavanet/lava/v5/protocol/common"
"github.com/lavanet/lava/v5/protocol/metrics"
"github.com/lavanet/lava/v5/utils"
Expand Down Expand Up @@ -176,6 +178,34 @@ func constructFiberCallbackWithHeaderAndParameterExtractionAndReferer(callbackTo
return handler
}

func checkBTCResponseAndFixReply(chainID string, replyData []byte) string {
response := string(replyData)
if chainID == "BTC" || chainID == "BTCT" {
var jsonMsg *rpcclient.JsonrpcMessage
if err := json.Unmarshal(replyData, &jsonMsg); err == nil {
btcResponse := &rpcclient.BTCResponse{
Version: jsonMsg.Version,
ID: jsonMsg.ID,
Method: jsonMsg.Method,
Error: jsonMsg.Error,
Result: jsonMsg.Result,
}
if marshaledRes, err := json.Marshal(btcResponse); err == nil {
response = string(marshaledRes)
}
}
}
return response
}

func addHeadersAndSendString(c *fiber.Ctx, metaData []pairingtypes.Metadata, data string) error {
for _, value := range metaData {
c.Set(value.Name, value.Value)
}

return c.SendString(data)
}

func convertToJsonError(errorMsg string) string {
jsonResponse, err := gojson.Marshal(fiber.Map{
"error": errorMsg,
Expand Down
3 changes: 2 additions & 1 deletion protocol/chainlib/jsonRPC.go
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,8 @@ func (apil *JsonRPCChainListener) Serve(ctx context.Context, cmdFlags common.Con
// Return error json response
return addHeadersAndSendString(fiberCtx, reply.GetMetadata(), response)
}
response := string(reply.Data)

response := checkBTCResponseAndFixReply(chainID, reply.Data)
// Log request and response
apil.logger.LogRequestAndResponse("jsonrpc http",
false,
Expand Down
8 changes: 0 additions & 8 deletions protocol/chainlib/rest.go
Original file line number Diff line number Diff line change
Expand Up @@ -456,14 +456,6 @@ func (apil *RestChainListener) GetListeningAddress() string {
return apil.listeningAddress
}

func addHeadersAndSendString(c *fiber.Ctx, metaData []pairingtypes.Metadata, data string) error {
for _, value := range metaData {
c.Set(value.Name, value.Value)
}

return c.SendString(data)
}

type RestChainProxy struct {
BaseChainProxy
httpClient *http.Client
Expand Down
59 changes: 59 additions & 0 deletions scripts/pre_setups/init_btc_only_with_node.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/bin/bash
__dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
source "$__dir"/../useful_commands.sh
. "${__dir}"/../vars/variables.sh

LOGS_DIR=${__dir}/../../testutil/debugging/logs
mkdir -p $LOGS_DIR
rm $LOGS_DIR/*.log

killall screen
screen -wipe

echo "[Test Setup] installing all binaries"
make install-all

echo "[Test Setup] setting up a new lava node"
screen -d -m -S node bash -c "./scripts/start_env_dev.sh"
screen -ls
echo "[Test Setup] sleeping 20 seconds for node to finish setup (if its not enough increase timeout)"
sleep 5
wait_for_lava_node_to_start

GASPRICE="0.00002ulava"
specs=$(get_all_specs)
lavad tx gov submit-legacy-proposal spec-add $specs --lava-dev-test -y --from alice --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE &
wait_next_block
wait_next_block
lavad tx gov vote 1 yes -y --from alice --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE
sleep 4

# Plans proposal
lavad tx gov submit-legacy-proposal plans-add ./cookbook/plans/test_plans/default.json,./cookbook/plans/test_plans/temporary-add.json -y --from alice --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE
wait_next_block
wait_next_block
lavad tx gov vote 2 yes -y --from alice --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE

sleep 4

CLIENTSTAKE="500000000000ulava"
PROVIDERSTAKE="500000000000ulava"

PROVIDER1_LISTENER="127.0.0.1:2220"

lavad tx subscription buy DefaultPlan $(lavad keys show user1 -a) -y --from user1 --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE
wait_next_block
lavad tx pairing stake-provider "BTC" $PROVIDERSTAKE "$PROVIDER1_LISTENER,1" 1 $(operator_address) -y --from servicer1 --provider-moniker "dummyMoniker" --gas-adjustment "1.5" --gas "auto" --gas-prices $GASPRICE

sleep_until_next_epoch

screen -d -m -S provider1 bash -c "source ~/.bashrc; lavap rpcprovider \
$PROVIDER1_LISTENER BTC jsonrpc '$BTC' \
$EXTRA_PROVIDER_FLAGS --geolocation 1 --log_level debug --from servicer1 --chain-id lava --metrics-listen-address ":7776" 2>&1 | tee $LOGS_DIR/PROVIDER1.log" && sleep 0.25

screen -d -m -S consumers bash -c "source ~/.bashrc; lavap rpcconsumer \
127.0.0.1:3360 BTC jsonrpc \
$EXTRA_PORTAL_FLAGS --geolocation 1 --log_level debug --from user1 --chain-id lava --allow-insecure-provider-dialing --metrics-listen-address ":7779" 2>&1 | tee $LOGS_DIR/CONSUMERS.log" && sleep 0.25

echo "--- setting up screens done ---"
screen -ls

0 comments on commit 808d6f7

Please sign in to comment.