Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/complete port of esr js #4

Open
wants to merge 42 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
f821722
eosdart import modif
TheRealPaco Jul 29, 2020
150e4c2
clean models
TheRealPaco Jul 29, 2020
881af40
Move print up so print even id decode fail
TheRealPaco Jul 30, 2020
ce96b4c
First draft of signing_request
TheRealPaco Jul 30, 2020
beef34a
Fix errors from port
TheRealPaco Jul 30, 2020
ae9427a
expose src/signing_request
TheRealPaco Jul 30, 2020
f78462b
expose infopair
TheRealPaco Jul 30, 2020
ca4c31a
Fix InfoPair serializing
TheRealPaco Jul 30, 2020
54ba4e3
Rename signing_request
TheRealPaco Jul 30, 2020
6e2a3c0
Remove old implementation
TheRealPaco Jul 30, 2020
1a396b0
Better todo
TheRealPaco Jul 30, 2020
faf90a8
Add resolve methods
TheRealPaco Jul 30, 2020
8b319f8
fix to work with anchor link
TheRealPaco Aug 5, 2020
0677b80
fIx mixup between textencode and textdecoder
TheRealPaco Aug 5, 2020
8b01da2
Add signingrequestmanager from methods
TheRealPaco Aug 5, 2020
e646279
fix imports signing request manager
TheRealPaco Aug 5, 2020
0863e88
Fix inversed bool check
TheRealPaco Aug 5, 2020
4d726b5
Fix deserialize signing request
TheRealPaco Aug 6, 2020
cf2bf4e
Fix if error
TheRealPaco Aug 6, 2020
4725cd8
update getRawActions
TheRealPaco Aug 6, 2020
92e338d
Fix port error
TheRealPaco Aug 6, 2020
f0b40aa
Fix parsing error
TheRealPaco Aug 6, 2020
b60eeff
get contract
TheRealPaco Aug 6, 2020
85135ed
Tempory fix for deserialize actions
TheRealPaco Aug 6, 2020
1ebaa5d
add action deserialization
TheRealPaco Aug 6, 2020
35939ae
Fix wrong chain from chainName
TheRealPaco Aug 11, 2020
049756b
add support for action.data to be identity'
TheRealPaco Aug 11, 2020
9525fbf
Fix error casting map<String, dynamic> map<String, String>
TheRealPaco Aug 11, 2020
dc21bd9
Fix serialize identity action data
TheRealPaco Aug 11, 2020
1cb75ae
minor changes
TheRealPaco Aug 11, 2020
a2be0d9
serializeAction Abstraction in signingRequestManager
TheRealPaco Aug 13, 2020
c49c956
Minor fix for deserializeAction
TheRealPaco Aug 13, 2020
638c18e
Fix pushtransaction error for dart-anchor-link
TheRealPaco Aug 13, 2020
430421f
Add get account from serializeUtils
TheRealPaco Aug 13, 2020
f2a027b
Clean serializeUtils and update defaultAbiProvider
TheRealPaco Aug 19, 2020
276a508
Separate examples in different files
TheRealPaco Aug 19, 2020
19bd7bc
Create encode_identity.dart
DenisCarriere Aug 19, 2020
fa70f5d
add getAvailableKeys to SignatureProvider
TheRealPaco Aug 19, 2020
67eb992
Merge branch 'feature/complete-port-of-esr-js' of https://github.com/…
TheRealPaco Aug 20, 2020
b10d84c
Add archive zlib (waiting for response to PR, using a git repo block …
TheRealPaco Aug 20, 2020
ed61716
Add chainName support
TheRealPaco Aug 20, 2020
feff2c4
update readme and example for eos mainnet
TheRealPaco Aug 20, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ doc/api/
*.js_
*.js.deps
*.js.map
.vscode/launch.json
159 changes: 106 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,112 +1,165 @@
# dart-esr

dart-esr is used to generate an EOSIO signing request (ESR) for a transaction/action/actions[]/identity request to be send, sign and broadcast to a node by a wallet (Anchor)
dart-esr is used to generate an EOSIO signing request (ESR) for a transaction/action/actions[]/identity request to be send, sign and broadcast to a node by a wallet (Greymass' Anchor Wallet or other supporting ESR)

ESR protocol documentation -> https://github.com/eosio-eps/EEPs/blob/master/EEPS/eep-7.md#ESR---The--EOSIO-Signing-Request--protocol
Greymass' ESR protocol documentation -> https://github.com/eosio-eps/EEPs/blob/master/EEPS/eep-7.md#ESR---The--EOSIO-Signing-Request--protocol

dart-esr is based on javascript library eosio-signing-request -> https://github.com/greymass/eosio-signing-request
dart-esr is based on the javascript library eosio-signing-request -> https://github.com/greymass/eosio-signing-request

Request format -> https://github.com/eosio-eps/EEPs/blob/master/EEPS/eep-7.md#payload

## Examples

https://github.com/EOS-Nation/dart-esr/tree/feature/eosio-signing-request/example
https://github.com/EOS-Nation/dart-esr/tree/master/example

## Usage

####Import
#### Import
```dart
import 'package:dart_esr/dart_esr.dart';
```

####Create Signing request object with a eos node url, version and ChainName
#### Encode an action

```dart
var auth = <Authorization>[ESRConstants.PlaceholderAuth];

var esr = EOSIOSigningrequest('https://jungle2.cryptolions.io', 'v1',
chainName: ChainName.EOS_JUNGLE2);
```
var data = <String, dynamic>{
'voter': ESRConstants.PlaceholderName,
'proxy': 'eosnationftw',
'producers': [],
};

####Encode a transaction
```dart
var auth = <Authorization>[
Authorization()
..actor = 'testName1111'
..permission = 'active'
];
var action = Action()
..account = 'eosio'
..name = 'voteproducer'
..authorization = auth
..data = data;

var data = <String, String>{'name': 'data'};
var args = SigningRequestCreateArguments(
action: action,
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
);

var actions = <Action>[
Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data,
];
SigningRequestEncodingOptions options =
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io');

var transaction = Transaction()..actions = actions;
var request = await SigningRequestManager.create(args, options: options);

var encoded = await esr.encodeTransaction(transaction);
var uri = request.encode();
print('action\n' + uri);
```
####Encode an action

#### Encode a transaction
```dart
var auth = <Authorization>[
Authorization.fromJson(ESRConstants.PlaceholderAuth)
];
var auth = <Authorization>[ESRConstants.PlaceholderAuth];

var data = <String, String>{'name': 'data'};
var data = <String, dynamic>{
'voter': ESRConstants.PlaceholderName,
'proxy': 'eosnationftw',
'producers': [],
};

var action = Action()
..account = 'eosnpingpong'
..name = 'ping'
..account = 'eosio'
..name = 'voteproducer'
..authorization = auth
..data = data;

var encoded = await esr.encodeAction(action);
var transaction = Transaction()..actions = [action];

var args = SigningRequestCreateArguments(
transaction: transaction,
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
);
SigningRequestEncodingOptions options =
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io');

var request = await SigningRequestManager.create(args, options: options);

var uri = request.encode();
print('transaction\n' + uri);
```

####Encode a list of actions
#### Encode an identity request
```dart
var auth = <Authorization>[
Authorization.fromJson(ESRConstants.PlaceholderAuth)
];
var callback = CallbackType('http://callback.com', true);
var args = SigningRequestCreateIdentityArguments(callback,
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
account: ESRConstants.PlaceholderName,
permission: ESRConstants.PlaceholderPermission);

SigningRequestEncodingOptions options = defaultSigningRequestEncodingOptions(
nodeUrl: 'https://eos.eosn.io');

var idReq = await SigningRequestManager.identity(args, options: options);

var uri = idReq.encode();
print('identity\n' + uri);
```

#### Encode a list of actions
```dart
var auth = <Authorization>[ESRConstants.PlaceholderAuth];

var data1 = <String, String>{'name': 'data1'};
var data2 = <String, String>{'name': 'data2'};
var data3 = <String, String>{'name': 'data3'};

var action1 = Action()
var action = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data1;

var data2 = <String, String>{'name': 'data2'};

var action2 = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data2;

var actions = <Action>[action1, action2];

var encoded = await esr.encodeActions(actions);
var action3 = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data3;

var args = SigningRequestCreateArguments(
actions: [action, action2, action3],
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
);
SigningRequestEncodingOptions options = defaultSigningRequestEncodingOptions(
nodeUrl: 'https://jungle.greymass.com');

var request = await SigningRequestManager.create(args, options: options);

var uri = request.encode();
print('actions\n' + uri);
```
####Encode an identity request
```dart
var permission = IdentityPermission()
..actor = 'testname1111'
..permission = 'active';

var identity = Identity()..identityPermission = permission;
String callback = "https://cNallback.com";
#### Decode a signing request
```dart
var esr =
'esr://gmNcs7jsE9uOP6rL3rrcvpMWUmN27LCdleD836_eTzFz-vCSjQEMXhmEFohe6ry3yuguIyNEiIEJSgvCBA58nnUl1dgwlAEoAAA';
var request = SigningRequestManager.from(esr,
options:
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io'));

var encoded = await esr.encodeIdentity(identity, callback);
print('decode\n' + request?.data?.toString());
```

## Installing
TODO when added to pub.dev
The package is available in pub dev repository => https://pub.dev/packages/dart_esr
or in github => https://github.com/EOS-Nation/dart-esr

1 - Resolve dependencies
```console
pub get
```
2 - Execute examples
```console
pub run example/example.dart
```

## Features and bugs

Expand Down
15 changes: 0 additions & 15 deletions example/decode_signed_requests.dart

This file was deleted.

13 changes: 13 additions & 0 deletions example/decode_signing_request.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:dart_esr/dart_esr.dart';

main(List<String> args) => decodeExample();

void decodeExample() {
var esr =
'esr://gmNcs7jsE9uOP6rL3rrcvpMWUmN27LCdleD836_eTzFz-vCSjQEMXhmEFohe6ry3yuguIyNEiIEJSgvCBA58nnUl1dgwlAEoAAA';
var request = SigningRequestManager.from(esr,
options:
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io'));

print('decode\n' + request?.data?.toString());
}
35 changes: 20 additions & 15 deletions example/encode_action.dart
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
import 'package:dart_esr/dart_esr.dart';

void main(List<String> arguments) => actionExample();
main(List<String> args) => actionExample();

Future<void> actionExample() async {
print('Action');
var esr = EOSIOSigningrequest('https://jungle2.cryptolions.io', 'v1',
chainName: ChainName.EOS_JUNGLE2);
var auth = <Authorization>[ESRConstants.PlaceholderAuth];

var auth = <Authorization>[
Authorization.fromJson(ESRConstants.PlaceholderAuth)
];

var data = <String, String>{'name': 'data'};
var data = <String, dynamic>{
'voter': ESRConstants.PlaceholderName,
'proxy': 'eosnationftw',
'producers': [],
};

var action = Action()
..account = 'eosnpingpong'
..name = 'ping'
..account = 'eosio'
..name = 'voteproducer'
..authorization = auth
..data = data;

var encoded = await esr.encodeAction(action);
var decoded = esr.deserialize(encoded);
var args = SigningRequestCreateArguments(
action: action,
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
);

SigningRequestEncodingOptions options =
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io');

var request = await SigningRequestManager.create(args, options: options);

print('encoded : ' + encoded);
print('decoded : ' + decoded.toString());
var uri = request.encode();
print('action\n' + uri);
}
36 changes: 20 additions & 16 deletions example/encode_actions.dart
Original file line number Diff line number Diff line change
@@ -1,37 +1,41 @@
import 'package:dart_esr/dart_esr.dart';

void main(List<String> arguments) => actionsExample();
main(List<String> args) => actionsExample();

Future<void> actionsExample() async {
print('Actions');
var esr = EOSIOSigningrequest('https://jungle2.cryptolions.io', 'v1',
chainName: ChainName.EOS_JUNGLE2);

var auth = <Authorization>[
Authorization.fromJson(ESRConstants.PlaceholderAuth)
];
var auth = <Authorization>[ESRConstants.PlaceholderAuth];

var data1 = <String, String>{'name': 'data1'};
var data2 = <String, String>{'name': 'data2'};
var data3 = <String, String>{'name': 'data3'};

var action1 = Action()
var action = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data1;

var data2 = <String, String>{'name': 'data2'};

var action2 = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data2;

var actions = <Action>[action1, action2];
var action3 = Action()
..account = 'eosnpingpong'
..name = 'ping'
..authorization = auth
..data = data3;

var args = SigningRequestCreateArguments(
actions: [action, action2, action3],
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
);
SigningRequestEncodingOptions options = defaultSigningRequestEncodingOptions(
nodeUrl: 'https://jungle.greymass.com');

var encoded = await esr.encodeActions(actions);
var decoded = esr.deserialize(encoded);
var request = await SigningRequestManager.create(args, options: options);

print('encoded : ' + encoded);
print('decoded : ' + decoded.toString());
var uri = request.encode();
print('actions\n' + uri);
}
25 changes: 11 additions & 14 deletions example/encode_identity.dart
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
import 'package:dart_esr/dart_esr.dart';

void main(List<String> arguments) => identityExample();
main(List<String> args) => identityExample();

Future<void> identityExample() async {
print('Identity');
var esr = EOSIOSigningrequest('https://jungle2.cryptolions.io', 'v1',
chainName: ChainName.EOS_JUNGLE2);
var callback = CallbackType('http://callback.com', true);
var args = SigningRequestCreateIdentityArguments(callback,
chainId: ESRConstants.ChainIdLookup[ChainName.EOS],
account: ESRConstants.PlaceholderName,
permission: ESRConstants.PlaceholderPermission);

var permission = IdentityPermission()
..actor = 'testname1111'
..permission = 'active';
SigningRequestEncodingOptions options =
defaultSigningRequestEncodingOptions(nodeUrl: 'https://eos.eosn.io');

var identity = Identity()..identityPermission = permission;
String callback = "https://cNallback.com";
var idReq = await SigningRequestManager.identity(args, options: options);

var encoded = await esr.encodeIdentity(identity, callback);
var decoded = esr.deserialize(encoded);

print('encoded : ' + encoded);
print('decoded : ' + decoded.toString());
var uri = idReq.encode();
print('identity\n' + uri);
}
Loading