Symverse Docs
  • πŸ’šSymverse μ†Œκ°œ
    • EFDN KOR
    • Multichain KOR
    • SymID KOR
    • SCT KOR
    • SymSensus KOR
  • Developer
    • μ‹œμž‘ν•˜κΈ°
      • μ§€κ°‘ μ‚¬μš©
        • 계정 생성
        • ν…ŒμŠ€νŠΈλ„· μ „ν™˜
      • ν…ŒμŠ€νŠΈ Sym λ°›κΈ°
      • λ…Έλ“œ μ‹€ν–‰
        • GettingStart
        • Command Line Options
    • RPC API
      • Transaction
      • JSON RPC API
      • JSON RPC SCT API
      • JSON RPC SCT ErrorCodes
    • ID NODE API
    • SDK
      • sym-web3j (java)
        • μ‹œμž‘ν•˜κΈ°
        • RPC API μ‚¬μš©ν•˜κΈ°
      • sym-web3js (javascript)
        • μ‹œμž‘ν•˜κΈ°
        • RPC API μ‚¬μš©ν•˜κΈ°
      • sym-tools (javascript)
        • API μ‚¬μš©ν•˜κΈ°
      • @sallt/pepper_wallet (NodeJS)
  • Services
    • Symverse WebSite
    • Main-net Dashboard
    • Main-net Block Explorer
Powered by GitBook
On this page
  • @sallt/pepper_wallet
  • μ„€μΉ˜λ°©λ²•
  • μ‚¬μš©λ°©λ²•
  • κΈ°μ—¬ν•˜κΈ°
  • λΌμ΄μ„ΌμŠ€
  • μ°Έκ³ 
  • Pepper Wallet (WASM)
  • νŒ¨ν‚€μ§€ 이름
  • μ°Έκ³ 
  • μ‚¬μš©μ˜ˆ
  1. Developer
  2. SDK

@sallt/pepper_wallet (NodeJS)

@sallt/pepper_wallet

Sallt ν”„λ‘œμ νŠΈμ˜ SymKeystoreLoader ν”„λ‘œμ νŠΈλ₯Ό Node.js와 Webμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ WebAssembly둜 개발된 νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€.

κΈ°λŠ₯ κ°œμ„ μ΄λ‚˜ μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μ˜ˆκ³ μ—†μ΄ ꡬ쑰가 변경될 수 μžˆμŠ΅λ‹ˆλ‹€. μ—…λ°μ΄νŠΈμ‹œ μ•ˆλ‚΄λ₯Ό κΌ­ ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

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 μ„œλΉ„μŠ€ μƒνƒœκ³„ ν™•λŒ€λ₯Ό μœ„ν•΄ κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κΈ°μ—¬λ₯Ό 톡해 ν”„λ‘œμ νŠΈλ₯Ό ν•¨κ»˜ λ°œμ „μ‹œμΌœ μ£Όμ„Έμš”!

λΌμ΄μ„ΌμŠ€

Apache-2.0

MIT

μ°Έκ³ 

Sallt

ν•˜λ‹¨μ˜ λ‚΄μš©μ€ Bundlerκ°€ ν¬ν•¨λœ Web Javascript 용 νŒ¨ν‚€μ§€ 및 νŒ¨ν‚€μ§€μ˜ μ‚¬μš© μ„€λͺ…μ΄λ―€λ‘œ Node.jsμ—μ„œ μ‚¬μš©ν•  κ²½μš°μ—λŠ” μƒλ‹¨μ˜ λ‚΄μš©λ§Œ μ°Έκ³ ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

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

μ°Έκ³ 

  • WebAssembly Demo

μ‚¬μš©μ˜ˆ

  • SymTransaction 도ꡬλ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.

    • 데이터 νƒ€μž…μ€ μ§€μ •λœ νƒ€μž…μ„ μ‚¬μš©ν•œλ‹€.

  • Credentials λ„κ΅¬μ˜ sign ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ μ„œλͺ…ν•œλ‹€.

  • SymTransaction νƒ€μž…κ³Ό EthTransaction νƒ€μž…μ„ 같이 μ§€μ›ν•˜κΈ° μœ„ν•΄ 포인터λ₯Ό μ‚¬μš©ν•œλ‹€.

    • 포인터λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우 signSymTx, signEthTx ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.

  • FunctionParameters 도ꡬλ₯Ό μ΄ˆκΈ°ν™”ν•˜λ©΄μ„œ ν•¨μˆ˜μ˜ 이름을 μ§€μ •ν•œλ‹€.

  • Function의 μž…λ ₯ νŒŒλΌλ―Έν„°μ˜ μˆœμ„œμ— 맞게 νƒ€μž…κ³Ό 값을 λ„£μ–΄μ€€λ‹€.

  • FunctionCoder λ„κ΅¬μ˜ encode λ©”μ†Œλ“œμ— νŒŒλΌλ―Έν„° 객체와 ν•΄μ‹œ 인코딩 κ·œμΉ™μ„ μ§€μ •ν•˜μ—¬ μΈμ½”λ”©ν•œλ‹€.

  • FunctionCoder λ„κ΅¬μ˜ decode λ©”μ†Œλ“œμ— μΈμ½”λ”©λœ 데이터와 νŒŒλΌλ―Έν„°λ₯Ό μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•œ λ¬Έμžμ—΄μ„ λ„£μ–΄μ£Όλ©΄ νŒŒμ‹±ν•œ κ²°κ³Όκ°€ 좜λ ₯λœλ‹€.

PreviousAPI μ‚¬μš©ν•˜κΈ°

Last updated 2 years ago