diff --git a/cmd/cli/admin.go b/cmd/cli/admin.go
index c03af31106..7baf18e6f3 100644
--- a/cmd/cli/admin.go
+++ b/cmd/cli/admin.go
@@ -228,7 +228,7 @@ var (
Short: "edit an existing sell order - use the simulate flag to generate json only",
Args: cobra.MinimumNArgs(6),
Run: func(cmd *cobra.Command, args []string) {
- writeTxResultToConsole(client.TxEditOrder(argGetAddrOrNickname(args[0]), uint64(argToInt(args[1])), uint64(argToInt(args[2])), uint64(argToInt(args[3])), uint64(argToInt(args[4])), args[5], getPassword(), !sim, fee))
+ writeTxResultToConsole(client.TxEditOrder(argGetAddrOrNickname(args[0]), uint64(argToInt(args[1])), uint64(argToInt(args[2])), args[3], uint64(argToInt(args[4])), args[5], getPassword(), !sim, fee))
},
}
@@ -237,7 +237,7 @@ var (
Short: "delete an existing sell order - use the simulate flag to generate json only",
Args: cobra.MinimumNArgs(3),
Run: func(cmd *cobra.Command, args []string) {
- writeTxResultToConsole(client.TxDeleteOrder(argGetAddrOrNickname(args[0]), uint64(argToInt(args[1])), uint64(argToInt(args[2])), getPassword(), !sim, fee))
+ writeTxResultToConsole(client.TxDeleteOrder(argGetAddrOrNickname(args[0]), args[1], uint64(argToInt(args[2])), getPassword(), !sim, fee))
},
}
@@ -246,7 +246,16 @@ var (
Short: "lock an existing sell order - use the simulate flag to generate json only",
Args: cobra.MinimumNArgs(3),
Run: func(cmd *cobra.Command, args []string) {
- writeTxResultToConsole(client.TxLockOrder(argGetAddrOrNickname(args[0]), argGetAddr(args[1]), uint64(argToInt(args[2])), getPassword(), !sim, fee))
+ writeTxResultToConsole(client.TxLockOrder(argGetAddrOrNickname(args[0]), argGetAddr(args[1]), args[2], getPassword(), !sim, fee))
+ },
+ }
+
+ txCloseOrderCmd = &cobra.Command{
+ Use: "tx-close-order
--fee=10000 --simulate=true",
+ Short: "closes an existing locked sell order - use the simulate flag to generate json only",
+ Args: cobra.MinimumNArgs(2),
+ Run: func(cmd *cobra.Command, args []string) {
+ writeTxResultToConsole(client.TxCloseOrder(argGetAddrOrNickname(args[0]), args[1], getPassword(), !sim, fee))
},
}
diff --git a/cmd/cli/query.go b/cmd/cli/query.go
index a3b80b2247..9cbd16c07c 100644
--- a/cmd/cli/query.go
+++ b/cmd/cli/query.go
@@ -173,7 +173,7 @@ var (
Short: "query a specific sell order",
Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) {
- writeToConsole(client.Order(height, uint64(argToInt(args[0])), committee))
+ writeToConsole(client.Order(height, args[0], committee))
},
}
diff --git a/cmd/rpc/admin.go b/cmd/rpc/admin.go
index 23fc60d402..16daafbacb 100644
--- a/cmd/rpc/admin.go
+++ b/cmd/rpc/admin.go
@@ -347,8 +347,13 @@ func (s *Server) TransactionLockOrder(w http.ResponseWriter, r *http.Request, _
if err := s.getFeeFromState(w, ptr, fsm.MessageSendName, true); err != nil {
return nil, err
}
+ // convert the order id to bytes
+ oId, err := lib.StringToBytes(ptr.OrderId)
+ if err != nil {
+ return nil, err
+ }
// Create and return the transaction to be sent
- return fsm.NewLockOrderTx(p, lib.LockOrder{OrderId: ptr.OrderId, BuyerSendAddress: p.PublicKey().Address().Bytes(), BuyerReceiveAddress: ptr.ReceiveAddress}, s.config.NetworkID, s.config.ChainId, ptr.Fee, s.controller.ChainHeight())
+ return fsm.NewLockOrderTx(p, lib.LockOrder{OrderId: oId, BuyerSendAddress: p.PublicKey().Address().Bytes(), BuyerReceiveAddress: ptr.ReceiveAddress}, s.config.NetworkID, s.config.ChainId, ptr.Fee, s.controller.ChainHeight())
})
}
@@ -382,8 +387,13 @@ func (s *Server) TransactionCloseOrder(w http.ResponseWriter, r *http.Request, _
if int64(order.BuyerChainDeadline)-int64(s.controller.ChainHeight()) < 10 {
return nil, fmt.Errorf("too close to buyer chain deadline")
}
+ // convert the order id to bytes
+ oId, err := lib.StringToBytes(ptr.OrderId)
+ if err != nil {
+ return nil, err
+ }
// Create the close order structure
- co := lib.CloseOrder{OrderId: ptr.OrderId, CloseOrder: true}
+ co := lib.CloseOrder{OrderId: oId, CloseOrder: true}
// Exit with the new CloseOrderTx
return fsm.NewCloseOrderTx(p, co, crypto.NewAddress(order.SellerReceiveAddress), order.RequestedAmount, s.config.NetworkID, s.config.ChainId, ptr.Fee, s.controller.ChainHeight())
})
diff --git a/cmd/rpc/client.go b/cmd/rpc/client.go
index c6da9ff0c2..cf4ecab45c 100644
--- a/cmd/rpc/client.go
+++ b/cmd/rpc/client.go
@@ -194,7 +194,7 @@ func (c *Client) RetiredCommittees(height uint64) (p *[]uint64, err lib.ErrorI)
return
}
-func (c *Client) Order(height, orderId, chainId uint64) (p *lib.SellOrder, err lib.ErrorI) {
+func (c *Client) Order(height uint64, orderId string, chainId uint64) (p *lib.SellOrder, err lib.ErrorI) {
p = new(lib.SellOrder)
err = c.orderRequest(OrderRouteName, height, orderId, chainId, p)
return
@@ -578,7 +578,7 @@ func (c *Client) TxCreateOrder(from AddrOrNickname, sellAmount, receiveAmount, c
return c.transactionRequest(TxCreateOrderRouteName, txReq, submit)
}
-func (c *Client) TxEditOrder(from AddrOrNickname, sellAmount, receiveAmount, orderId, chainId uint64, receiveAddress string,
+func (c *Client) TxEditOrder(from AddrOrNickname, sellAmount, receiveAmount uint64, orderId string, chainId uint64, receiveAddress string,
pwd string, submit bool, optFee uint64) (hash *string, tx json.RawMessage, e lib.ErrorI) {
receiveAddr, err := lib.NewHexBytesFromString(receiveAddress)
if err != nil {
@@ -603,7 +603,7 @@ func (c *Client) TxEditOrder(from AddrOrNickname, sellAmount, receiveAmount, ord
return c.transactionRequest(TxEditOrderRouteName, txReq, submit)
}
-func (c *Client) TxDeleteOrder(from AddrOrNickname, orderId, chainId uint64,
+func (c *Client) TxDeleteOrder(from AddrOrNickname, orderId string, chainId uint64,
pwd string, submit bool, optFee uint64) (hash *string, tx json.RawMessage, e lib.ErrorI) {
txReq := txDeleteOrder{
Fee: optFee,
@@ -620,7 +620,7 @@ func (c *Client) TxDeleteOrder(from AddrOrNickname, orderId, chainId uint64,
return c.transactionRequest(TxDeleteOrderRouteName, txReq, submit)
}
-func (c *Client) TxLockOrder(from AddrOrNickname, receiveAddress string, orderId uint64,
+func (c *Client) TxLockOrder(from AddrOrNickname, receiveAddress string, orderId string,
pwd string, submit bool, optFee uint64) (hash *string, tx json.RawMessage, e lib.ErrorI) {
receiveHex, err := lib.NewHexBytesFromString(receiveAddress)
if err != nil {
@@ -640,7 +640,7 @@ func (c *Client) TxLockOrder(from AddrOrNickname, receiveAddress string, orderId
return c.transactionRequest(TxLockOrderRouteName, txReq, submit)
}
-func (c *Client) TxCloseOrder(from AddrOrNickname, orderId uint64, pwd string, submit bool, optFee uint64) (hash *string, tx json.RawMessage, e lib.ErrorI) {
+func (c *Client) TxCloseOrder(from AddrOrNickname, orderId string, pwd string, submit bool, optFee uint64) (hash *string, tx json.RawMessage, e lib.ErrorI) {
txReq := txCloseOrder{
Fee: optFee,
OrderId: orderId,
@@ -850,7 +850,7 @@ func (c *Client) heightRequest(routeName string, height uint64, ptr any) (err li
return
}
-func (c *Client) orderRequest(routeName string, height, orderId, chainId uint64, ptr any) (err lib.ErrorI) {
+func (c *Client) orderRequest(routeName string, height uint64, orderId string, chainId uint64, ptr any) (err lib.ErrorI) {
bz, err := lib.MarshalJSON(orderRequest{
ChainId: chainId,
OrderId: orderId,
diff --git a/cmd/rpc/query.go b/cmd/rpc/query.go
index 38da88973f..832a084202 100644
--- a/cmd/rpc/query.go
+++ b/cmd/rpc/query.go
@@ -262,7 +262,11 @@ func (s *Server) RetiredCommittees(w http.ResponseWriter, r *http.Request, _ htt
func (s *Server) Order(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
// Invoke helper with the HTTP request, response writer and an inline callback
s.orderParams(w, r, func(s *fsm.StateMachine, p *orderRequest) (any, lib.ErrorI) {
- return s.GetOrder(p.OrderId, p.ChainId)
+ orderId, err := lib.StringToBytes(p.OrderId)
+ if err != nil {
+ return nil, err
+ }
+ return s.GetOrder(orderId, p.ChainId)
})
}
diff --git a/cmd/rpc/sock.go b/cmd/rpc/sock.go
index 186052007e..4bae647f08 100644
--- a/cmd/rpc/sock.go
+++ b/cmd/rpc/sock.go
@@ -179,7 +179,7 @@ func (r *RCManager) GetOrders(rootChainId, rootHeight, id uint64) (*lib.OrderBoo
}
// Order() returns a specific order from the root order book
-func (r *RCManager) GetOrder(rootChainId, height, orderId, chainId uint64) (*lib.SellOrder, lib.ErrorI) {
+func (r *RCManager) GetOrder(rootChainId, height uint64, orderId string, chainId uint64) (*lib.SellOrder, lib.ErrorI) {
// if the root chain id is the same as the info
sub, found := r.subscriptions[rootChainId]
if !found {
diff --git a/cmd/rpc/types.go b/cmd/rpc/types.go
index 2ad57a5bc5..b277392b0d 100644
--- a/cmd/rpc/types.go
+++ b/cmd/rpc/types.go
@@ -20,7 +20,7 @@ type chainRequest struct {
type orderRequest struct {
ChainId uint64 `json:"chainId"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
heightRequest
}
@@ -224,7 +224,7 @@ type txEditOrder struct {
Submit bool `json:"submit"`
ReceiveAmount uint64 `json:"receiveAmount"`
ReceiveAddress lib.HexBytes `json:"receiveAddress"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
fromFields
txChangeParamRequest
committeesRequest
@@ -232,7 +232,7 @@ type txEditOrder struct {
type txDeleteOrder struct {
Fee uint64 `json:"fee"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
Password string `json:"password"`
fromFields
txChangeParamRequest
@@ -241,7 +241,7 @@ type txDeleteOrder struct {
type txLockOrder struct {
Fee uint64 `json:"fee"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
Password string `json:"password"`
ReceiveAddress lib.HexBytes `json:"receiveAddress"`
fromFields
@@ -251,7 +251,7 @@ type txLockOrder struct {
type txCloseOrder struct {
Fee uint64 `json:"fee"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
Password string `json:"password"`
fromFields
}
@@ -304,7 +304,7 @@ type txRequest struct {
Submit bool `json:"submit"`
ReceiveAmount uint64 `json:"receiveAmount"`
ReceiveAddress lib.HexBytes `json:"receiveAddress"`
- OrderId uint64 `json:"orderId"`
+ OrderId string `json:"orderId"`
Memo string `json:"memo"`
PollJSON json.RawMessage `json:"pollJSON"`
PollApprove bool `json:"pollApprove"`
diff --git a/cmd/rpc/web/explorer/components/table.jsx b/cmd/rpc/web/explorer/components/table.jsx
index 5d54527244..96f224979e 100644
--- a/cmd/rpc/web/explorer/components/table.jsx
+++ b/cmd/rpc/web/explorer/components/table.jsx
@@ -15,6 +15,7 @@ import {
// convertValue() converts the value based on its key and handles different types
function convertValue(k, v, openModal) {
+ if (k === "Id") return v;
if (k === "publicKey") return ;
if (isHex(v) || k === "height") {
const content = isNumber(v) ? v : ;
@@ -122,7 +123,7 @@ function convertGovernanceParams(v) {
function convertOrder(v) {
const exchangeRate = v.requestedAmount / v.amountForSale;
return {
- Id: v.id ?? 0,
+ Id: v.id ?? "error",
Chain: v.committee,
AmountForSale: toCNPY(v.amountForSale),
Rate: exchangeRate.toFixed(2),
@@ -226,7 +227,7 @@ export default function DTable(props) {
{sortedData.map((val, idx) => (
{Object.keys(val).map((k, i) => (
- |
+ |
{convertValue(k, val[k], props.openModal)}
|
))}
diff --git a/cmd/rpc/web/explorer/styles/globals.css b/cmd/rpc/web/explorer/styles/globals.css
index 7fa605e23b..8baf26b791 100644
--- a/cmd/rpc/web/explorer/styles/globals.css
+++ b/cmd/rpc/web/explorer/styles/globals.css
@@ -137,6 +137,7 @@ input::placeholder {
}
.table {
+ table-layout: auto;
background-color: #d2d2d2;
border: 1px solid #d2d2d2;
border-radius: 5px !important;
@@ -364,10 +365,6 @@ h5 {
margin-bottom: 25px !important;
}
-th {
- font-family: var(--font-heading);
-}
-
.detail-table-title {
white-space: nowrap;
font-weight: 600;
@@ -411,6 +408,18 @@ th {
float: right;
}
+td, th {
+ font-family: var(--font-heading);
+}
+
+.large-table-col {
+ max-width: 1000px !important;
+ font-size: 13px !important;
+ padding-left: 10px !important;
+ padding-top: 15px !important;
+ padding-bottom: 15px !important;
+}
+
.table-col {
max-width: 200px !important;
font-size: 13px !important;
diff --git a/cmd/rpc/web/wallet/components/account.jsx b/cmd/rpc/web/wallet/components/account.jsx
index 87b6a22a9e..305ca5f12e 100644
--- a/cmd/rpc/web/wallet/components/account.jsx
+++ b/cmd/rpc/web/wallet/components/account.jsx
@@ -2,23 +2,24 @@ import {
KeystoreGet,
KeystoreImport,
KeystoreNew,
- TxLockOrder,
TxCloseOrder,
TxCreateOrder,
TxDeleteOrder,
TxEditOrder,
TxEditStake,
+ TxLockOrder,
TxPause,
TxSend,
TxStake,
TxUnpause,
- TxUnstake,
+ TxUnstake
} from "@/components/api";
import FormInputs from "@/components/form_inputs";
import {
copy,
downloadJSON,
formatNumber,
+ getActionFee,
getFormInputs,
numberFromCommas,
onFormSubmit,
@@ -26,23 +27,22 @@ import {
retryWithDelay,
toCNPY,
toUCNPY,
- withTooltip,
- getActionFee,
+ withTooltip
} from "@/components/util";
import { KeystoreContext } from "@/pages";
import {
- LockIcon,
+ CloseIcon,
CopyIcon,
+ DeleteOrderIcon,
EditOrderIcon,
EditStakeIcon,
- DeleteOrderIcon,
+ LockIcon,
PauseIcon,
- UnpauseIcon,
SendIcon,
StakeIcon,
SwapIcon,
- UnstakeIcon,
- CloseIcon,
+ UnpauseIcon,
+ UnstakeIcon
} from "@/components/svg_icons";
import { useContext, useEffect, useRef, useState } from "react";
import { Button, Card, Col, Form, Modal, Row, Spinner, Table } from "react-bootstrap";
@@ -67,7 +67,7 @@ const transactionButtons = [
{ title: "LOCK", name: "lock_order", src: LockIcon },
{ title: "CLOSE", name: "close_order", src: CloseIcon },
{ title: "REPRICE", name: "edit_order", src: EditOrderIcon },
- { title: "VOID", name: "delete_order", src: DeleteOrderIcon },
+ { title: "VOID", name: "delete_order", src: DeleteOrderIcon }
];
// Accounts() returns the main component of this file
@@ -89,7 +89,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
showAlert: false,
alertMsg: "",
primaryColor: "",
- greyColor: "",
+ greyColor: ""
}),
acc = account.account;
@@ -124,7 +124,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
setState((prevState) => ({
...prevState,
primaryColor,
- greyColor,
+ greyColor
}));
}, []);
@@ -138,7 +138,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
showModal: false,
showPKModal: false,
showNewModal: false,
- showPKImportModal: false,
+ showPKImportModal: false
});
}
@@ -200,7 +200,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
resetState,
10,
1000,
- false,
+ false
);
}
@@ -209,7 +209,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
onFormSubmit(state, e, ks, (r) =>
KeystoreGet(r.sender, r.password, r.nickname).then((r) => {
setState({ ...state, showSubmit: Object.keys(state.txResult).length === 0, pk: r });
- }),
+ })
);
}
@@ -219,7 +219,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
KeystoreNew(r.password, r.nickname).then((r) => {
setState({ ...state, showSubmit: Object.keys(state.txResult).length === 0, pk: r });
setActivePrivateKey(r.nickname);
- }),
+ })
);
}
@@ -266,7 +266,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
r.memo,
fee,
r.password,
- submit,
+ submit
),
"edit-stake": () =>
TxEditStake(
@@ -280,29 +280,29 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
r.memo,
fee,
r.password,
- submit,
+ submit
),
unstake: () => TxUnstake(r.sender, r.signer, r.memo, fee, r.password, submit),
pause: () => TxPause(r.sender, r.signer, r.memo, fee, r.password, submit),
unpause: () => TxUnpause(r.sender, r.signer, r.memo, fee, r.password, submit),
create_order: () =>
TxCreateOrder(r.sender, r.chainId, amount, receiveAmount, r.receiveAddress, r.memo, fee, r.password, submit),
- close_order: () => TxCloseOrder(r.sender, numberFromCommas(r.orderId), fee, r.password, submit),
- lock_order: () => TxLockOrder(r.sender, r.receiveAddress, numberFromCommas(r.orderId), fee, r.password, submit),
+ close_order: () => TxCloseOrder(r.sender, r.orderId, fee, r.password, submit),
+ lock_order: () => TxLockOrder(r.sender, r.receiveAddress, r.orderId, fee, r.password, submit),
edit_order: () =>
TxEditOrder(
r.sender,
r.chainId,
- numberFromCommas(r.orderId),
+ r.orderId,
amount,
receiveAmount,
r.receiveAddress,
r.memo,
fee,
r.password,
- submit,
+ submit
),
- delete_order: () => TxDeleteOrder(r.sender, r.chainId, r.orderId, r.memo, fee, r.password, submit),
+ delete_order: () => TxDeleteOrder(r.sender, r.chainId, r.orderId, r.memo, fee, r.password, submit)
};
const txFunction = txMap[state.txType];
@@ -316,7 +316,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
setState({
...state,
showAlert: true,
- alertMsg: "Transaction failed. Please verify the fields and try again.",
+ alertMsg: "Transaction failed. Please verify the fields and try again."
});
});
}
@@ -379,7 +379,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
{[
{ title: "Account Type", info: getAccountType() },
{ title: "Stake Amount", info: getValidatorAmount(), after: " cnpy" },
- { title: "Staked Status", info: getStakedStatus() },
+ { title: "Staked Status", info: getStakedStatus() }
].map((v, i) => (
))}
@@ -389,7 +389,7 @@ export default function Accounts({ keygroup, account, validator, setActiveKey, p
{[
{ title: "Nickname", info: keygroup.keyNickname },
{ title: "Address", info: keygroup.keyAddress },
- { title: "Public Key", info: keygroup.publicKey },
+ { title: "Public Key", info: keygroup.publicKey }
].map((v, i) => (
))}
@@ -496,7 +496,7 @@ function AccSumTabCol({ detail, i, state, setState }) {
,
detail,
i,
- "top",
+ "top"
);
}
@@ -566,25 +566,25 @@ function RenderButtons({ type, state, closeOnClick }) {
// RenderModal() returns the transaction modal
function RenderModal({
- show,
- title,
- txType,
- onFormSub,
- keyGroup,
- account,
- validator,
- onHide,
- btnType,
- setState,
- state,
- closeOnClick,
- keystore,
- showAlert = false,
- alertMsg,
- JsonViewVariant,
- onFormFieldChange,
- params,
-}) {
+ show,
+ title,
+ txType,
+ onFormSub,
+ keyGroup,
+ account,
+ validator,
+ onHide,
+ btnType,
+ setState,
+ state,
+ closeOnClick,
+ keystore,
+ showAlert = false,
+ alertMsg,
+ JsonViewVariant,
+ onFormFieldChange,
+ params
+ }) {
return (