Skip to content

s-a-y/stellar-sign

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stellar Sign

This is my attempt to implement multisig coordinator without requiring an API endpoint. Wallets that want to support it should listen to incoming transactions like that one

AAAAAPYpaBHmM66tvmgjKUUspj94BS0yUzhTVIxG+b05DimnAAAB9AEB1DsAAAAYAAAAAAAAAAEAAAAGdW1icmUxAAAAAAAFAAAAAAAAAAEAAAAAY7jLWdf+Ukef84py3gmKsShfmf3bZ3ugbuD40A2gJAYAAAAAAAAAAAAAAAEAAAAAAAAACgAAAC5zcnYxOnR4OjM3N2NmZDFjLTcwOWMtNDIzOS05OWY1LTVhNzdhMTk1YWU1YjowAAAAAAABAAAAQAAAAABngMLdMuMsMnxyYGqBB+qCgnUTJZFR5PU6Mz/eSqeGsAAAAGQA/PkXAAIGPAAAAAAAAAABAAAABHRlc3QAAAAAAAAACgAAAC5zcnYxOnR4OjM3N2NmZDFjLTcwOWMtNDIzOS05OWY1LTVhNzdhMTk1YWU1YjowAAAAAAAAAAAAAAAAAAoAAAAuc3J2MTp0eDozNzdjZmQxYy03MDljLTQyMzktOTlmNS01YTc3YTE5NWFlNWI6MQAAAAAAAQAAAEAAAAABAAAAAAAAAAAAAAAAl651UFdEu7Hu0lMzb8cIuXssxM9Nl6lWeTwguHsekDUAAAAAATKzoAAAAAAAAAAAAAAAAAAAAAoAAAAuc3J2MTp0eDozNzdjZmQxYy03MDljLTQyMzktOTlmNS01YTc3YTE5NWFlNWI6MQAAAAAAAAAAAAAAAAABOQ4ppwAAAEBSi/4nif38kBkJlX+7qyh3vUKUKL6rkkcuCngWm0qDNJQcGXcoIFVJvRBlQkDtPH84JiCHFQjdMSSFlmD/LvoB

How to use

Account should have a home domain set to be able to send requests, and on home domain /.well-known/stellar.toml file should contain SIGNING_REQUEST_ACCOUNT=G... to verify the legitimacy of siging request.

Executes StellarSign.requestOperation and pass XDR operation to be sent to the destination.

Usage example:

const StellarSign = require('./index');
const StellarSdk = require('stellar-sdk');

StellarSign
  .setHorizonUrl('https://horizon-testnet.stellar.org')
  .useNetwork(StellarSdk.Networks.TESTNET)
  .requestOperation(
  StellarSdk.Keypair.fromSecret('...'),
  'GD3CS2AR4YZ25LN6NARSSRJMUY7XQBJNGJJTQU2URRDPTPJZBYU2O3DD',
  StellarSdk.Operation.createAccount({
    destination: 'GAUCWS5EXPZLFKYKRSMXV4MRN6P76WTVZDRPKKDSJL7X4ZDQZDYRWRZH',
    startingBalance: '2'
  }).toXDR()
)
  .then(tx => {
    console.log(tx);
	// Success! Signing request sent

  })
  .catch(err => {
    console.error(err);
  });

Or if you want to prepare complete transaction envelope

const StellarSign = require('./index');
const StellarSdk = require('stellar-sdk');

const keypair = StellarSdk.Keypair.fromSecret('...');
const server = new StellarSdk.Server('https://horizon.stellar.org');
server.loadAccount(keypair.publicKey())
	.then(account => {
		const options = {
			memo: StellarSdk.Memo.text('test')
		};
		const builder = new StellarSdk.TransactionBuilder(account, options);
		
		builder
			.addOperation(StellarSdk.Operation.payment({
				destination: 'GAUCWS5EXPZLFKYKRSMXV4MRN6P76WTVZDRPKKDSJL7X4ZDQZDYRWRZH',
				asset: StellarSdk.Asset.native(),
				amount: '0.0000001'
			}));
		
		StellarSign.requestTransaction(
			keypair,
			'GD3CS2AR4YZ25LN6NARSSRJMUY7XQBJNGJJTQU2URRDPTPJZBYU2O3DD',
			builder.build().toEnvelope().toXDR()
		)
		.then(tx => {
			console.log(tx);
			// Success! Signing request sent
		
		})
		.catch(err => {
			console.error(err);
		});
    });

Recipient just listens to incoming transactions, decodes transaction using decodeXDR method

 
StellarSign.decodeXDR(tx.envelope_xdr)
  .then(res => {
	
	if (res.type === 'tx') {
	  const transaction = new StellarSdk.Transaction(res.body);
	  transaction.sign(keypair);
	  server.submitTransaction(transaction);
	} else if (res.type === 'op') {
	  const operation = StellarSdk.Operation.fromXDRObject(StellarSdk.xdr.Operation.fromXDR(res.body, 'base64'));
	  console.log(operation);
	}
  });

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published