LogoLogo
CSPR.build PortalCSPR.click Website
CSPR.click v1.2
CSPR.click v1.2
  • Introduction (v1.2)
    • CSPR.click overview
    • Get your application Id
    • Changelog
  • UI SDK
    • Getting started with the template application
    • Integrating the UI SDK into your application
    • Integrating the UI SDK into a non-React application
    • Customizing the top bar
      • Account dropdown menu
      • Theme selector
      • Network selector
      • Language selector
      • Currency selector
      • Custom selector
    • useClickRef() hook
    • Handling events
    • Signing transactions
  • Core JS SDK
    • Getting started
    • Properties
    • Methods
    • Types
    • Events
  • Get support
    • Contact us
Powered by GitBook
On this page
  1. UI SDK

Signing transactions

PreviousHandling eventsNextGetting started

Last updated 1 year ago

Your app will need to send transactions to Casper. Such operations must be approved by the user by signing what we call in Casper the deploy.

How to build a deploy object is out of the scope of this documentation. We recommend to refer to the official Casper docs on . Note that your frontend web application does not necessarily always create the deploy. In some scenarios, that can be a responsibility of your backend application or even another party.

In any case, at some point you will have a deploy in the form of a json obect. Removing the payment and session details for the sake of simplicity, it will look like this:

{
    "hash": "5803e985c113a5d4d24bef4cd8cbb01dc546a1d138756c406880858eb44380e2",
    "header": {
      "account": "020339898123654b6290f1b36c794393514d355e006336d1bc2c1c4ca84596d68f02",
      "timestamp": "2023-08-30T21:50:48.627Z",
      "ttl": "30m",
      "gas_price": 1,
      "body_hash": "024f684ba6d35436296377aa428f7fc9dbe72412ba8eaec8130a86276a32d385",
      "dependencies": [],
      "chain_name": "casper"
    },
    "payment": {
      ...
    },
    "session": {
      ...
    },
    "approvals": []
  }

Typically, you'll handle a deploy without approvals. And such approval is what you want to get from the user. Then, the deploy will be ready to be processed by a Casper node.

To get the approval CSPR.click SDK offers two options:

In most cases, you can just use the send() method and process its result to communicate to the user whether the operation is being processed in the Casper network or it has been rejected for some reason.

But in some advanced scenarios you will require the sign() method and get the signature to continue the processing of the transaction.

Buy Alice a Coffee on testnet

Take a look into the <BuyMeACoffee> component. Here are the key parts:

function BuyMeACoffee() {
  const clickRef = useClickRef();
  const activeAccount = clickRef?.getActiveAccount();
	
  const handleSignTransaction = async () => {
    const sender = activeAccount?.public_key?.toLowerCase() || '';
    const deploy = makeTransferDeploy(sender, recipientPk, '50' + '000000000', 'casper-test');
    
    clickRef?.send(deploy, sender)
      .then((res: SendResult | undefined) => {
        if (res?.deployHash) {
          alert('Transaction sent successfully: ' + res.deployHash);
	} else if (res?.cancelled) {
	  alert('Sign cancelled');
 	} else {
	  alert('Error in send(): ' + res?.error + '\n' + res?.errorData);
	}
      })
      .catch((err: any) => {
	alert('Error: ' + err);
      });
  };
	
  return (
    ...
    <button onClick={() => handleSignTransaction()} />Sign transaction</button>
    ...
  )
}

makeTransferDeploy() is a method that uses Casper JS SDK to build a deploy object to transfer CSPR tokens from the signer to another recipient.

To request the user an approval for this deploy, we're calling the send() method indicating also the sender public address. CSPR.click then forwards the deploy to the corresponding active wallet. The user then must review the details of the transaction and approve the transaction. Then, the transaction is automatically sent to the network.

Finally, don't forget that your application must handle different responses. Sometimes your user will click the Cancel button in the wallet or the Casper node will reject it due to different reasons.

method. Use it to ask CSPR.click to request the user to approve the transaction and then send it to a Casper node, where it will be processed.

method. Use it to ask CSPR.click to request the user to approve the transaction and return to you the signature value.

In the React create-react-app we've added an example that shows how to request the approval for a transaction that sends to Alice (an imaginary colleague in our team) 50 CSPR tokens on testnet.

this topic
template
send()
sign()