encodes signature for saving, save sig api

This commit is contained in:
samepant
2021-05-01 18:14:33 -04:00
parent 588db42159
commit ca8f9ce8f2
7 changed files with 3337 additions and 34 deletions
+14 -5
View File
@@ -1,4 +1,5 @@
import axios from "axios";
import { encode, decode } from "uint8-to-base64";
import React from "react";
import { SigningStargateClient } from "@cosmjs/stargate";
@@ -43,7 +44,6 @@ export default class TransactionSigning extends React.Component {
try {
await window.keplr.enable("cosmoshub");
const walletAccount = await window.keplr.getKey("cosmoshub");
console.log(walletAccount);
this.setState({ walletAccount });
} catch (e) {
console.log("enable err: ", e);
@@ -68,11 +68,20 @@ export default class TransactionSigning extends React.Component {
this.props.tx.memo,
signerData
);
// save body bytes to the tx
// save/create the signature in the db
console.log(bodyBytes, signatures);
console.log(bodyBytes, signatures[0]);
const signature = {
bodyBytes,
signature: encode(signatures[0]),
address: this.state.walletAccount.bech32Address,
};
const res = await axios.post(
`/api/transaction/${this.props.transactionID}/signature`,
signature
);
console.log(decode(res.data.signature));
} catch (error) {
console.log(error);
console.log("Error creating signature:", error);
}
};
+3 -6
View File
@@ -13,18 +13,15 @@ type SourceAddress {
type Transaction {
signatures: [Signature] @relation
dataJSON: String
bodyBytes: String
}
type Signature {
transaction: Transaction! @relation
dataJSON: String!
bodyBytes: String!
signature: String!
address: String!
}
type Query {
getMultisig(address: String!): Multisig
}
type Mutation {
setTransactionBody(address: String!): Multisig
}
+19 -4
View File
@@ -90,10 +90,13 @@ const findTransactionByID = async (id) => {
query: `
query {
findTransactionByID(id: "${id}") {
_id
dataJSON
signatures {
data {
dataJSON
address
signature
bodyBytes
}
}
}
@@ -106,7 +109,8 @@ const findTransactionByID = async (id) => {
/**
* Creates signature record in faunadb
*
* @param {object} transaction The base transaction
* @param {object} signature an object with bodyBytes (string) and signature set (Uint8 Array)
* @param {string} transactionId id of the transaction to relate the signature with
* @return Returns async function that makes a request to the faunadb graphql endpoint
*/
const createSignature = async (signature, transactionId) => {
@@ -117,9 +121,14 @@ const createSignature = async (signature, transactionId) => {
mutation {
createSignature(data: {
transaction: {connect: ${transactionId}},
dataJSON:
bodyBytes: "${signature.bodyBytes}",
signature: "${signature.signature}",
address: "${signature.address}"
}) {
_id
address
signature
address
}
}
`,
@@ -127,4 +136,10 @@ const createSignature = async (signature, transactionId) => {
});
};
export { createMultisig, getMultisig, createTransaction, findTransactionByID };
export {
createMultisig,
getMultisig,
createTransaction,
findTransactionByID,
createSignature,
};
+3291 -9
View File
File diff suppressed because it is too large Load Diff
+2 -1
View File
@@ -6,10 +6,10 @@
"start": "next start"
},
"dependencies": {
"@cosmjs/amino": "^0.25.0-alpha.1",
"@cosmjs/launchpad": "^0.25.0-alpha.1",
"@cosmjs/proto-signing": "^0.25.0-alpha.1",
"@cosmjs/stargate": "^0.25.0-alpha.1",
"@cosmjs/amino": "^0.25.0-alpha.1",
"axios": "^0.21.1",
"chalk": "^4.1.0",
"encoding": "^0.1.13",
@@ -17,6 +17,7 @@
"next": "^10.0.7",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"uint8-to-base64": "^0.2.0",
"uuid": "^8.3.0"
}
}
@@ -1,17 +1,16 @@
import { createTransaction } from "../../../../lib/graphqlHelpers";
import { createSignature } from "../../../../lib/graphqlHelpers";
export default async function (req, res) {
return new Promise(async (resolve) => {
switch (req.method) {
case "POST":
try {
const { transactionID } = req.query;
const data = req.body;
console.log("Function `createTransaction` invoked", data);
const saveRes = await createTransaction(data.dataJSON);
console.log("Function `createSignature` invoked", data);
const saveRes = await createSignature(data, transactionID);
console.log("success", saveRes.data);
res
.status(200)
.send({ transactionID: saveRes.data.data.createTransaction._id });
res.status(200).send(saveRes.data.data.createSignature);
return resolve();
} catch (err) {
console.log(err);
@@ -25,11 +25,11 @@ export async function getServerSideProps(context) {
console.log(err);
}
return {
props: { transactionJSON, accountOnChain, holdings },
props: { transactionJSON, accountOnChain, holdings, transactionID },
};
}
const transactionPage = ({ transactionJSON }) => {
const transactionPage = ({ transactionJSON, transactionID }) => {
const txInfo = (transactionJSON && JSON.parse(transactionJSON)) || null;
console.log(txInfo);
return (
@@ -39,7 +39,7 @@ const transactionPage = ({ transactionJSON }) => {
<h1>In Progress Transaction</h1>
</StackableContainer>
<TransactionInfo tx={txInfo} />
<TransactionSigning tx={txInfo} />
<TransactionSigning tx={txInfo} transactionID={transactionID} />
</StackableContainer>
<style jsx>{``}</style>