@sallt/pepper_wallet (NodeJS)
@sallt/pepper_wallet
κΈ°λ₯ κ°μ μ΄λ μ±λ₯ ν₯μμ μν΄ μκ³ μμ΄ κ΅¬μ‘°κ° λ³κ²½λ μ μμ΅λλ€. μ λ°μ΄νΈμ μλ΄λ₯Ό κΌ νμΈνμκΈ° λ°λλλ€.
Sallt νλ‘μ νΈλ Dart/Flutter νλ μμν¬λ₯Ό μ¬μ©νμ¬ ν¬λ‘μ€νλ«νΌμΌλ‘ κ°λ°λμμ΅λλ€.
Dartλ‘ λ§λ€μ΄μ§ SDK ν¨ν€μ§λ νλ₯ν μ±λ₯κ³Ό κΈ°λ₯μ μ 곡νμ§λ§, Dartλ‘ λ§λ€μ΄μ§ μ»΄ν¬λνΈ λ° μλ² μ ν리μΌμ΄μ , Flutterλ‘ λ§λ€μ΄μ§ λͺ¨λ°μΌ μ ν리μΌμ΄μ μ΄λ μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ (SPA)μμλ§ μ¬μ©ν μ μμΌλ―λ‘ μμν μΉμ΄λ Node νλ‘μ νΈμμλ μ¬μ©μ΄ μ νλ©λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ WebAssemblyλ‘ κ°λ°λ pepper-wallet
λ₯Ό μ¬μ©νλ©΄, Node.jsμ μΉμμλ SymKeystoreLoader ν¨ν€μ§μ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
μ€μΉλ°©λ²
NPM
μ€μΉ ν¨ν€μ§ λ§€λμ λ₯Ό ν΅ν΄ μ€μΉν©λλ€.
μ체 NPM Registryλ₯Ό μ¬μ©νκ³ μμΌλ―λ‘, npm config
λ₯Ό ν΅ν΄ μΆκ° μ€μ μ ν΄μΌ ν©λλ€.
npm config set registry=https://registry.yarnpkg.com/
npm config set @sallt:registry=https://nexus.symverse.com/repository/sallt-npm/
npm config set //nexus.symverse.com/repository/sallt-npm/:_auth=Z3Vlc3Q6Z3Vlc3Q=
npm config set always-auth=true
λλ,
.npmrc
νμΌμ μμ±νμ¬ μλ λ΄μ©μ μΆκ°ν©λλ€.
registry=https://registry.yarnpkg.com/
@sallt:registry=https://nexus.symverse.com/repository/sallt-npm/
//nexus.symverse.com/repository/sallt-npm/:_auth=Z3Vlc3Q6Z3Vlc3Q=
always-auth=true
μ΄ν μλ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ ν¨ν€μ§λ₯Ό μ€μΉν©λλ€.
npm install @sallt/pepper_wallet
μ¬μ©λ°©λ²
import { SCrypt, Credentials, MsgHashAlgorithm, SymId, UInt256, UInt8, WorkNodes, Data, SymTransaction } from '@sallt/pepper_wallet';
// Parameters of the encrypted private key
let iv = "{16byte hex string}";
let ciphertext = "{32byte hex string}";
let dklen = 32;
let n = 262144;
let p = 1;
let r = 8;
let salt = "{32byte hex string}";
// Recovering the private key
let scrypt = new SCrypt(dklen, n, p, r, salt);
let credentials = new Credentials(scrypt, ciphertext, iv);
await credentials.initialize(_passphrase).then(
async () => {
// credentials is initialized
// public key hash
let publicKeyHash = credentials.publicKeyHash(MsgHashAlgorithm.Sha3_256);
let pubKeyHash = Web3Utils.uint8ArrayToHexString(publicKeyHash);
},
async (error) => {
// error
}
);
// Composing a transaction
let symId = "{10byte hex string}";
let nonce = "{nonce in hex string}";
let gas_price = "{gas price in hex string}";
let gas_limit = "{gas limit in hex string}";
let recipient_sym_id = "{10byte hex string}";
let hex_amount = "{amount in hex string}";
let data = "{data in hex string}";
let transaction_type = "{0x00(original), 0x01(sct) or 0x02(deposit)}";
let work_node_id = "{10byte hex string}";
let extra_data = "{extra data in hex string}";
let symTransaction = new SymTransaction(
SymId.fromHexString(symId),
UInt256.fromHexString(nonce),
UInt256.fromHexString(gas_price),
UInt256.fromHexString(gas_limit),
SymId.fromHexString(recipient_sym_id),
UInt256.fromHexString(hex_amount),
Data.fromHexString(data),
UInt8.fromHexString(transaction_type),
new WorkNodes(SymId.fromHexString(work_node_id)),
Data.fromHexString(extra_data)
);
// Signing a transaction
let chain_id = 1;
let fork_id = 0;
let sha3Sign = _credentials.sign(MsgHashAlgorithm.Sha3_256, chain_id, fork_id, symTransaction.selfPtr());
let signedMsg = sha3Sign.hexSignedMsg();
// Send a transaction
// use webd3 ...no
κΈ°μ¬νκΈ°
λ³Έ νλ‘μ νΈλ Sallt μλΉμ€ μνκ³ νλλ₯Ό μν΄ κ°λ°λμμ΅λλ€.
κΈ°μ¬λ₯Ό ν΅ν΄ νλ‘μ νΈλ₯Ό ν¨κ» λ°μ μμΌ μ£ΌμΈμ!
λΌμ΄μΌμ€
μ°Έκ³
Pepper Wallet (WASM)
Pepper Wallet JSμ κΈ°λ₯μ WASMμΌλ‘ ꡬνν ꡬν체 νλ‘μ νΈμ λλ€.
ꡬ쑰체 ꡬνμ΄ κ°λ₯ν ꡬ쑰μ΄λ―λ‘ Pepper Wallet JSλ³΄λ€ λ λ€μν λκ΅¬κ° μ 곡λ©λλ€.
SCrypt, Aes128Ctr, Signer
Wallet κ΄λ¦¬ κΈ°λ₯(μμ )μ μ 곡νλ©°, λΈλΌμ°μ λ΄μμ ν©λ¦¬μ μ΄κ³ ν¨μ¨μ μΈ λ°©λ²μΌλ‘ 보κ΄νκ³ μ΄μ©ν μ μλ κΈ°λ₯μ μ 곡ν©λλ€.
SCryptλ₯Ό ν΅ν΄ 256λΉνΈ κΈΈμ΄μ Derived Keyλ₯Ό λ§λ€ μ μμ΅λλ€.
Aes128Ctrμ ν΅ν΄ ν€μ€ν μ΄μ Crypto(aes-128-ctr)μ λμ½λν μ μμ΅λλ€.
SCryptλ‘ λ§λ DKμ μ 128λΉνΈλ₯Ό μνΈν ν€λ‘ μ¬μ©
Signerλ₯Ό ν΅ν΄ SymVerse λ€νΈμν¬ λ° Ethereum λ€νΈμν¬μμ μ¬μ©λλ μλͺ μ λ§λ€ μ μμ΅λλ€.
Pepper Wief (WASM)μ κ°μ΄ μ¬μ©νμ¬ μΉ μ체μ μΈ μ§κ° μ΄μ©μ΄ κ°λ₯ν©λλ€.
Wief ν¬λ§·μΌλ‘ λ°μ΄ν°λ₯Ό λΈλΌμ°μ μ μ₯μμ 보κ΄
Wief ν¬λ§·μ λμ½λνμ¬ μ»μ κ°μΈν€λ₯Ό μ¬μ©νμ¬ Signerλ‘ μλͺ
Pepper Web3 (WASM)λ₯Ό μ¬μ©νμ¬ νΈλμμ μ μ§μ μ μ‘ν μ μμ΅λλ€.
let web3 = new Web3("{endpoint_url}");
let symWeb3 = web3.newSymWeb3();
let method = SymMethodContainer.{method_func}({params});
let response = await symWeb3.send(method);
ν¨ν€μ§ μ΄λ¦
pepper_wallet_rust
μ°Έκ³
μ¬μ©μ
SymTransaction λꡬλ₯Ό μ΄κΈ°ννλ€.
λ°μ΄ν° νμ μ μ§μ λ νμ μ μ¬μ©νλ€.
Credentials λꡬμ sign ν¨μλ₯Ό μ¬μ©νμ¬ νΈλμμ μ μλͺ νλ€.
SymTransaction νμ κ³Ό EthTransaction νμ μ κ°μ΄ μ§μνκΈ° μν΄ ν¬μΈν°λ₯Ό μ¬μ©νλ€.
ν¬μΈν°λ₯Ό μ¬μ©νμ§ μμ κ²½μ° signSymTx, signEthTx ν¨μλ₯Ό μ¬μ©νλ€.
FunctionParameters λꡬλ₯Ό μ΄κΈ°ννλ©΄μ ν¨μμ μ΄λ¦μ μ§μ νλ€.
Functionμ μ λ ₯ νλΌλ―Έν°μ μμμ λ§κ² νμ κ³Ό κ°μ λ£μ΄μ€λ€.
FunctionCoder λꡬμ encode λ©μλμ νλΌλ―Έν° κ°μ²΄μ ν΄μ μΈμ½λ© κ·μΉμ μ§μ νμ¬ μΈμ½λ©νλ€.
FunctionCoder λꡬμ decode λ©μλμ μΈμ½λ©λ λ°μ΄ν°μ νλΌλ―Έν°λ₯Ό μμλλ‘ λμ΄ν λ¬Έμμ΄μ λ£μ΄μ£Όλ©΄ νμ±ν κ²°κ³Όκ° μΆλ ₯λλ€.
Last updated