Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
55 changes: 27 additions & 28 deletions signing-providers/dummy-certificate-key.pem
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDH2ieSlD9B+FoJ
dAD1M3SJMNIxfeM2wyw3KWewaxJxd20qL/FXiBM2v5gRQZnxUdfjXALgz5DCa5zF
/eKnDHGepPA2hc7fNLofXvB1qpO9M/Y1Cjvv5kABIw1BtNMVaMRmzzkQW1aCMn9m
F3qIm8+db7iMN6pNlvvXA1Q44UgZFu1G7lhn/HSQedb90ScoDOZ2HZnLIdI2sVob
y9f6+va48Noqe2XdveA0GGE4Poch1c1l0ljffrd2mmnQRTg/bXgX5KQ+zEJg9TMT
ugz+WNrP49fW9s0Sr3/3q8gKG0D5xJrTUh0blYBecj9r37wUUMK67IIsHZuAw6kf
2GoLf2KVAgMBAAECggEAJwYdJg0WkQ4qnp/tM/P5NHS5Bnr7bA0OTDMkkRlHP6q/
QTadXKcwgUdGLVBu++UsT7P+x+Ef9ibHNQ4PPOk8Ims4kJzuOT11fnyuXXuSX6aO
0+qMq5p9MvuiMgtaEFslxqF+FgiPytqLb+bzwUsTbj2Lfq277myl/mUjA/xRdLxh
/7yly7YBAoffsUsRu65ek7k/itV7heVCqpgbioJ4KjGpLruh3G8EEID7FfFlafRY
phU9f+xWG9QtZTEBsWDgJhljeFZ64wOHpG3Wokpq17sYWoobykkRN19kgu6ag8ok
3LC2mkw8Hf56ZdZt2B+RDOQCez1x5O3N/GbO8obKAQKBgQDkiOYmtFPAbvnZHCdN
JMYHFSMw6/hB+QZWho0oc+qAdzX4xE9rvAXOb7/oilyZf1DJdwILCm34NVH4gaVP
BhGD24usTEKMq2w/JhLsLPYYlKyvtNKBCFpg0S7xoyfPT6xfUYfsnvN+50V7R5cG
WyHeJytGKnkkc5UVRzuORWfagQKBgQDf3s6HrL3LTjuXWqgXNk6HefKP/888MZHL
/iyJ6Av8xmeSyvWITcB2Hr7xka+weTb3Co/6MH140LDc0zAMEISsTKP+p4qV5Ewv
e60wOAx+7r0gYPy9vTef7oW4zwh1we1UUO1FklI3/mUIEkNlHQnSGouTCrS/BVib
7IWBi8N2FQKBgQCXbmciymacomyIAnHAWlelpcn1xsZv4LTkbK/oWDbQ/S0UM/B0
cNhgHAhL7DLDu2sqs+L0seqAh8RTKIUDQgAlITsB5l5Km+RUS8RKHtjLHOj4XJcH
zSMl+DZlAzmD00Viu8GXdxPdyR1vPNbD7WsZq1avXcF79+KXgOXjtfXFAQKBgQCa
kVploKYWNfi9ArHl/O/xaAhK1iN+evcgMmkL+nQ0XcRrPMiUCKLmq0nIvn7gSIDj
xp4r7sji3qwOe53D5q/DytK742+zGEJl0m18SmaOSUW5kl1On9NFEEmxlPhRXckA
GzQHggRUdsfI79sqeAcs0nkl2BF9hjJszbxL+nTFFQKBgQDVl/toy30trOx9vyB+
yA76hyF654Drjjnbhbi1UDkKoVo95H1q8Arnu/VzgEhW/GcfIUAkUAuRlxNK08Et
LjINeDA2blVI9emwGSLRSeuMkpOLTexs5PqaB64A36IPn2YZWRsQ760z0PqlZwPf
G7Or7/WAMMKnmsuXYA2ZOc6w7A==
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAoqdRehXsILBOKtFbR1uxf1mkczsW7GCo6RYEA/l444eDYKIO
oKLCcCO9E9c9oHgjqLSR17cDa2epd91jBfKZumMlM0LaL0PT45GvBBS3f5/sN+2w
j8ymwa7AAMj8f6Dj5DjncuJRQ2PeXx+ctbB0whX6AARjGhL7tJN01XR1rUnB57e2
G6rnUIEjlNLbL+dXmUlS0qMMNODxp4BUdnEZzQuOgfdPCswOMur2PpkAowosN8Ch
7rBY31uUTSntGqOxbIkyBlo5vmdr55nkpFDpF0yxFHKzksZi+unxwR8W1QWVq10P
sL9o0DimCRx5TxgqZIOMWmrbFuymReUR0s/5kwIDAQABAoIBAFI3byjeAfB4Ddr4
3kHQqITt5AFXIfwz082WEkuMA75HFnJ3GBu8ibozZnSr/PurHqM9OucmHDVjPbdY
EaDFA03CpeAmb7EqgOVsE2Jlsmdxh+6xV+koEjaexXDgJznAMtF+rgdVPKxqw9Gj
Ygw4+JvOjgMKNKnOZKrfSlRHPOBtNIYel/UxCQCO+567udqawtQdeAFxE8iMPNZo
Pxu0h8ZAwQYa7ug96/rtnhpfeNElL5GXt7Y9y/0Keb3dPVvq6GB2cqMg3p64v5YD
t6e4qwgBn6lJmbf3hr7/oXV1K5VZRMVbI2A6Fwca2yR2tvxvbFMgkM2K56kWsudC
Ukhj85ECgYEA08mKQ3C+h5vpBuyS21T4GZnd6ek9CL0WZr6zJsP5FyBAL6UjUulr
V0vjtno5PqvxAyhV32gDa6W1FsstKoRe1NsBTVyx2kfC0kQZOgBou4j+OQ5xX9Bl
u3aiZfXDth+ZdQsXOa1Q7YkxRnuDhmcV4/TXiCfUCC97yf/AQ7/57JkCgYEAxJvy
d+6Wm9yvsieGV2TBd4RYARi/DUr8KvSh1D9xWGjFGeSMatSMiYyH3vXnsFdLWto1
a4TJNXFtINNA3xv1Xu0tNM+2n/5455NjQckdLWdiUwAFlc4BjNQU+LmpvtRnh0kY
haQe3g+VHYQrrH01AKRSkTbdaoI/83cu0OlzpwsCgYBhAIFcbEpIEGgF7NtCrENK
bogOt+5ljz2wZ43kpoPzTKk5aViphBHPFQpCLO8FPnmQKaxTO++9IVO1EfAo9iH9
OiX5ighH4vBfoCMxxrgxlQhjl7Lj4K6H00mEi7FNPGHsEt1bZH+ZnGm+T5opOBP1
qdICIcPiz+TR21rzbP2KmQKBgDIXLTJDFhoForm3+jEf2W6SyD0XSe2gEhj7lJNX
yo/kuXq8UM4S8u9EX4V9jxbNVsSB3aRUA1NbX5tCVz/AhsY1lRPka7ndgn41fc9P
5uAfe9x7n/CnuJthmSo5WzbkNLAx/k5mHvsiazJG7z2V9MACHYsjuEuffZ2Q2tuc
7rs7AoGBAKdpicNM6Yp7fbq2B/btV0oDBVY8yaJvAr10T6NlLyyYukWMLZrtYf+k
dwehH5decS4rnToea6Fir9LVy5E+A4C3dA2MsfcqUETLhu53xiY0+5kUbNYdY4yg
b64UT6CQUJ2uddkAS4WWHPIcw269eiIlIAqzbbqikp/iZSahDn7A
-----END RSA PRIVATE KEY-----
39 changes: 18 additions & 21 deletions signing-providers/dummy-certificate.pem
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIURipd1gg/wb/awjtz1q09AeYhAkcwDQYJKoZIhvcNAQEL
BQAwcjELMAkGA1UEBhMCUk8xDTALBgNVBAgMBFRlc3QxDTALBgNVBAcMBFRlc3Qx
DTALBgNVBAoMBFRlc3QxDTALBgNVBAsMBFRlc3QxEjAQBgNVBAMMCTEyNy4wLjAu
MTETMBEGCSqGSIb3DQEJARYEVGVzdDAeFw0yMjAzMjgxNDU5NTdaFw0zMjAzMjUx
NDU5NTdaMHIxCzAJBgNVBAYTAlJPMQ0wCwYDVQQIDARUZXN0MQ0wCwYDVQQHDARU
ZXN0MQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MRIwEAYDVQQDDAkxMjcu
MC4wLjExEzARBgkqhkiG9w0BCQEWBFRlc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDH2ieSlD9B+FoJdAD1M3SJMNIxfeM2wyw3KWewaxJxd20qL/FX
iBM2v5gRQZnxUdfjXALgz5DCa5zF/eKnDHGepPA2hc7fNLofXvB1qpO9M/Y1Cjvv
5kABIw1BtNMVaMRmzzkQW1aCMn9mF3qIm8+db7iMN6pNlvvXA1Q44UgZFu1G7lhn
/HSQedb90ScoDOZ2HZnLIdI2sVoby9f6+va48Noqe2XdveA0GGE4Poch1c1l0ljf
frd2mmnQRTg/bXgX5KQ+zEJg9TMTugz+WNrP49fW9s0Sr3/3q8gKG0D5xJrTUh0b
lYBecj9r37wUUMK67IIsHZuAw6kf2GoLf2KVAgMBAAGjUzBRMB0GA1UdDgQWBBQv
xzKASX+752Cpd/Ja7gjZ9lTIcTAfBgNVHSMEGDAWgBQvxzKASX+752Cpd/Ja7gjZ
9lTIcTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBzcWWvnWtb
v7VlDqxoJIsveaGfKl8vlrvYR/FBskxDEQRjp6ptoDiDDbbTc6fJ9x4WdX003Cvv
mkG1+SnjrpKTm8Sr5DlYPZW61yG/77Is7mLiQUN65NUhud2soTn5ZFst6aZSY0dA
QtubNXoshwKSru7xVwzOBqiwf0kdBNnDxD4p2s88f99B26l6Ze4rw1xrRMgBaA2I
WU0/jqOCkJc6khL0MMjvRGiilTAt4ra+IUf2hAwf6TORbH27CBWACPwL74rNb3Yh
M2SSUK0wxego+3Jvh8JAiViVetPfkWI01Nu64VVB+CJOydTFotPGCSJkc/BF4yJq
ZlzZ1OQJvjZX
MIIDTTCCAjWgAwIBAgIJE0oFz2cohNz8MA0GCSqGSIb3DQEBCwUAMBQxEjAQBgNV
BAMTCWxvY2FsaG9zdDAeFw0yMzAxMjUxMzQ4MjZaFw0yMzAyMjQxMzQ4MjZaMBQx
EjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAKKnUXoV7CCwTirRW0dbsX9ZpHM7FuxgqOkWBAP5eOOHg2CiDqCiwnAjvRPX
PaB4I6i0kde3A2tnqXfdYwXymbpjJTNC2i9D0+ORrwQUt3+f7DftsI/MpsGuwADI
/H+g4+Q453LiUUNj3l8fnLWwdMIV+gAEYxoS+7STdNV0da1Jwee3thuq51CBI5TS
2y/nV5lJUtKjDDTg8aeAVHZxGc0LjoH3TwrMDjLq9j6ZAKMKLDfAoe6wWN9blE0p
7RqjsWyJMgZaOb5na+eZ5KRQ6RdMsRRys5LGYvrp8cEfFtUFlatdD7C/aNA4pgkc
eU8YKmSDjFpq2xbspkXlEdLP+ZMCAwEAAaOBoTCBnjALBgNVHQ8EBAMCAvQwMQYD
VR0lBCowKAYIKwYBBQUHAwEGCCsGAQUFBwMCBggrBgEFBQcDAwYIKwYBBQUHAwgw
XAYDVR0RBFUwU4IJbG9jYWxob3N0ghVsb2NhbGhvc3QubG9jYWxkb21haW6CBmx2
aC5tZYIIKi5sdmgubWWCBVs6OjFdhwR/AAABhxD+gAAAAAAAAAAAAAAAAAABMA0G
CSqGSIb3DQEBCwUAA4IBAQA6iOXzAKSE6/QmQbUkVw3MT7ERPQRjOx7BQxte81Er
ksGgrkHBWfYH/G+X8T/7kOzFthr3iypez2aPhKx7HzJiR1ZLtw0lOGQTCKvAx7Yp
tH/fj478OtX4e/DHLzGSi1NKG3n392vPhpcro6FXZbz0YXFGHcmKhVHAE9vAfHCL
LDrdaMh6DFPKLgZ7RVfGZLAJwOhZV9g/1JEb/pjP4uzoFlBI47R6IkbcAHjF3gXA
eJC/ooPY9uJzo0MhNldQgKzcu29R99MJAVrWMbsh/P/qK9H8IRWT/V2JJ58HNpFS
HNPcNt/AxOOvBPUNuw5hV8GqRiJvQLhUJEvyontmoUtZ
-----END CERTIFICATE-----
18 changes: 18 additions & 0 deletions signing-providers/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,23 @@ <h3>Extension (Maiar DeFi Wallet)</h3>
</div>
</div>

<div class="card mt-3 mb-3">
<div class="card-header">
<div class="card-title">
<h3>Opera (Opera Crypto Wallet)</h3>
</div>
</div>
<div class="card-body">
<div>
<button class="btn btn-info" onclick="opera.login()">Login</button>
<button class="btn btn-info" onclick="opera.loginWithToken()">Login with token</button>
<button class="btn btn-info" onclick="opera.signTransactions()">Sign transactions</button>
<button class="btn btn-info" onclick="opera.signMessage()">Sign message</button>
<button class="btn btn-info" onclick="opera.logout()">Logout</button>
</div>
</div>
</div>

<div class="card mt-3 mb-3">
<div class="card-header">
<div class="card-title">
Expand Down Expand Up @@ -152,6 +169,7 @@ <h3>Hardware Wallet</h3>
<script>
const webWallet = new app.WebWallet();
const extension = new app.Extension();
const opera = new app.Opera();
const walletConnect = new app.WalletConnect();
const hw = new app.HW();
</script>
Expand Down
75 changes: 74 additions & 1 deletion signing-providers/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion signing-providers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
"@elrondnetwork/erdjs-hw-provider": "2.0.4",
"@elrondnetwork/erdjs-wallet-connect-provider": "2.0.3",
"@elrondnetwork/erdjs-walletcore": "1.0.0",
"@elrondnetwork/erdjs-web-wallet-provider": "2.1.1"
"@elrondnetwork/erdjs-web-wallet-provider": "2.1.1",
"@multiversx/sdk-opera-provider": "^1.0.0-alpha.1",
"qrcode": "^1.5.1"
},
"devDependencies": {
"@types/node": "18.0.3",
Expand Down
1 change: 1 addition & 0 deletions signing-providers/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export * from "./web-wallet";
export * from "./extension";
export * from "./wallet-connect";
export * from "./hw";
export * from "./opera";
97 changes: 97 additions & 0 deletions signing-providers/src/opera.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { OperaProvider } from "@multiversx/sdk-opera-provider";
import {
Address,
SignableMessage,
Transaction,
TransactionPayload,
} from "@elrondnetwork/erdjs";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@multiversx/sdk-core instead of @elrondnetwork/erdjs

import {
acquireThirdPartyAuthToken,
verifyAuthTokenSignature,
} from "./backendFacade";

export class Opera {
constructor() {
this.provider = OperaProvider.getInstance();
}

async login() {
await this.provider.init();
const address = await this.provider.login();

alert(`Address: ${address}`);
}

async loginWithToken() {
await this.provider.init();

const authToken = acquireThirdPartyAuthToken();
await this.provider.login({ token: authToken });

const address = this.provider.account.address;
const signature = this.provider.account.signature;
alert(`Address: ${address};\nsignature of token = ${signature}`);

alert(verifyAuthTokenSignature(address, authToken, signature));
}

async logout() {
await this.provider.init();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it necessary to call init before logout ?

await this.provider.logout();
}

async signTransactions() {
await this.provider.init();

const firstTransaction = new Transaction({
nonce: 42,
value: "1",
receiver: new Address(
"erd1uv40ahysflse896x4ktnh6ecx43u7cmy9wnxnvcyp7deg299a4sq6vaywa"
),
gasPrice: 1000000000,
gasLimit: 50000,
data: new TransactionPayload(),
chainID: "T",
version: 1,
});

const secondTransaction = new Transaction({
nonce: 43,
value: "100000000",
receiver: new Address(
"erd1uv40ahysflse896x4ktnh6ecx43u7cmy9wnxnvcyp7deg299a4sq6vaywa"
),
gasPrice: 1000000000,
gasLimit: 50000,
data: new TransactionPayload("hello world"),
chainID: "T",
version: 1,
});

await this.provider.signTransactions([firstTransaction, secondTransaction]);
console.log("First transaction, upon signing:");
console.log(firstTransaction);
console.log("Second transaction, upon signing:");
console.log(secondTransaction);

alert(
JSON.stringify(
[firstTransaction.toSendable(), secondTransaction.toSendable()],
null,
4
)
);
}

async signMessage() {
await this.provider.init();
Copy link
Contributor

@CiprianDraghici CiprianDraghici Feb 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that you call the provider.init function before every action. Can't be moved in the constructor to avoid calling this function many times?


const message = new SignableMessage({
message: Buffer.from("hello"),
});

await this.provider.signMessage(message);
alert(JSON.stringify(message.toJSON(), null, 4));
}
}