Nhảy đến nội dung chính

Account

NEAR sử dụng những account ID mà con người có thể đọc được thay vì public key hash.

Ví dụ, bạn có thể tạo account ID là alice.near hoặc bob.near thay vì 0x71C7656EC7ab88b098defB751B7401B5f6d8976F. Điều này giúp user có trải nghiệm đơn giản và ít nhầm lẫn hơn khi giao dịch.

Quy tắc đặt Account ID

  • độ dài tối thiểu là 2
  • độ dài tối đa là 64
  • Account ID bao gồm những phần Account ID được tách ra bởi .
  • Phần Account ID bao gồm các ký hiệu chữ và số viết thường được phân tách bằng _ hoặc -.

Tên account tương tự như tên miền. Bất kỳ ai cũng có thể tạo được top-level account (TLA) không có dấu cách, ví dụ: near. Chỉ near có thể tạo được alice.near. Và chỉ alice.near có thể tạo được app.alice.near và tương tự như vậy. Lưu ý, near KHÔNG THỂ tạo được app.alice.near trực tiếp.

Câu regex cho một account ID hoàn chỉnh mà không cần kiểm tra độ dài: ^(([a-z\d]+[\-_])*[a-z\d]+\.)*([a-z\d]+[\-_])*[a-z\d]+$


Các Top-level account

Các tên top-level account (TLAs) rất có giá trị vì chúng cung cấp nguồn gốc tin cậy và khả năng khám phá cho các tổ chức, application và user. Để cho phép truy cập công bằng, tên top-level account ngắn hơn MIN_ALLOWED_TOP_LEVEL_ACCOUNT_LENGTH ký tự (32 tại thời điểm viết bài) sẽ được bán đấu giá.

Đặc biệt, chỉ REGISTRAR_ACCOUNT_ID account có thể tạo top-level account mới ngắn hơn MIN_ALLOWED_TOP_LEVEL_ACCOUNT_LENGTH ký tự. REGISTRAR_ACCOUNT_ID implement một interface tiêu chuẩn Đặt tên Account cho phép tạo các account mới.

Chúng tôi sẽ không deploy đấu giá registrar khi ra mắt. Thay vào đó, chúng tôi sẽ cho phép nó được NEAR Foundation deploy vào một thời điểm nào đó trong tương lai.

Tất cả các account mainnet hiện tại sử dụng một tên top-level account là near (ví dụ example.near) và tất cả testnet account sử dụng một tên top-level account là testnet (vd. example.testnet).


Các Subaccount

Như đã nói ở trên, tên account trên NEAR có quy tắc tương tự như tên miền trang web. Các account có thể tạo bao nhiêu subaccount tùy thích và chỉ account mẹ mới có thể tạo một subaccount. Ví dụ, example.near có thể tạo subaccount1.example.nearsubaccount2.example.near nhưng KHÔNG THỂ tạo sub.subaccount.example.near. Chỉ subaccount.example.near mới có thể tạo sub.subaccount.example.near giống như cách test.near KHÔNG THỂ tạo subaccount.example.near. Chỉ account mẹ trực tiếp mới có quyền tạo subaccount.

Hãy thử lệnh near-cli, near create-account, trong terminal của bạn.


Các Implicit-Account

Các implicit account làm việc tương tự như các account Bitcoin/Ethereum. Chúng cho phép bạn đặt account ID trước khi tạo bằng cách generate ra key-pair ED25519 một cách cục bộ. Key-pair này có một public key được map thành 64 character hex, và sẽ trở thành account ID.

Ví dụ:

  • Public key ở base58: BGCCDDHfysuuVnaNVtEhhqeT4k9Muyem3Kpgq2U1m9HX
  • Implicit Account: 98793cd91a3f870fb126f66285808c7e094afcfc4eda8a970f6648cdf0dbd6de

[ Bấm vào đây ] để biết thêm thông tin cũng như hướng dẫn cách tạo implicit account.


Các Dev Account

Các dev account là các account đặc biệt được tạo tự động bởi các công cụ như near-cli và wallet để giúp bạn tự động hóa việc test và deploy các contract. Vì mọi account có thể có một contract, nhưng khi re-deploy các contract sẽ KHÔNG tạo state mới, nên bạn thường muốn deploy sang một account khác khi test.

Lưu ý: Khi triển khai nhiều ví dụ test và tạo dev account mới, bạn cần "Sign Out" khỏi NEAR Wallet trên bất kỳ các ví dụ localhost và "Sign In" lại! Đăng nhập sẽ thêm access key vào account của bạn và lưu private key trong localStorage để ứng dụng có thể gọi các phương thức contract mà không cần yêu cầu phê duyệt lại. Nhưng! Bây giờ, có một cơ hội cho bạn cố gắng tương tác với một contract được deploy trên một dev account khác.

Cách tạo một tài khoản dev account

  • Khi bạn thực hiện lệnh dev-deploy từ near-cli, nó sẽ tìm kiếm một tệp ở đây /neardev/dev-account với dev account ID để triển khai.

  • Nếu không tìm thấy, nó sẽ tạo một dev account (sử dụng dịch vụ trợ giúp trên cloud của chúng tôi để tạo account test) và sau đó tạo thư mục cho bạn với file dev-account.

  • Nó cũng sẽ tạo thông tin đăng nhập được liên kết, một cặp public key và private key tại đây: ~/.near-credentials/default/[dev-account-id].json. Tiếp tục và thử nó:

code ~/.near-credentials/default/[dev-account-id].json
  • Thay thế dev-account-id bằng account ID tại đây /neardev/dev-account và mở tệp json lên trong trình soạn thảo mà bạn chọn (VS Code để code).

Làm cách nào để tạo một account khác

  • Xóa thư mục /neardev và thực hiện near dev-deploy [wasmFile default="/out/main.wasm"] và bạn sẽ thấy một dev account mới đã được tạo trong neardev và thông tin đăng nhập cũng được lưu trữ.

Ok tôi có một dev account, vậy thì sao?

  • Các account này và các cặp khóa liên quan được tìm thấy trong file json rất có ích để tự động hóa test của bạn.

  • Nhiều ví dụ trong hệ sinh thái NEAR sử dụng một số script yarn dev:deploy để triển khai các contract và có thể chạy một số test. Điều quan trọng là phải biết các account này được tạo ra như thế nào, nơi lưu trữ thông tin đăng nhập và cách bạn có thể sử dụng chúng.


Các Access Key

NEAR sử dụng account ID mà con người có thể đọc được thay vì sử dụng một public key hash làm định danh cho account và nhiều key (public/private key pairs) có thể được tạo cho mỗi account mà chúng tôi gọi là các "Access Key". Hiện tại, có hai loại access key: FullAccess & FunctionCall.

Các Full Access Key

Như tên cho thấy, các FullAccess key có toàn quyền kiểm soát account tương tự như có quyền administrator trên hệ điều hành của bạn. Với key này, bạn có khả năng thực hiện bất kỳ loại action nào trong số tám kiểu action trên NEAR mà không có bất kỳ giới hạn nào.

1) Tạo Account 2) Xóa Account 3) Thêm Key 4) Xóa Key 5) Deploy Contract 6) Function Call 7) Transfer Ⓝ 8) Stake Ⓝ (cho các validator)

Xem thêm phần: các thông số của action để biết thêm chi tiết.

Các Function Call Key

Một key FunctionCall là duy nhất vì nó chỉ có quyền gọi (các) method của smart contract không đính kèm Ⓝ dưới dạng deposit (ví dụ như các payable function). Các key này có ba thuộc tính sau:

1) allowance - số lượng Ⓝ mà key được phép dùng cho phí gas (optional - default: null) 2) receiver_id - contract mà key được phép call method đến (required) 3) method_names - các contract method mà the key được phép call (optional) Lưu ý: Nếu allowance bị bỏ qua, default sẽ là null và key sẽ chỉ được phép call các view method mà thôi. Allowance không thể được thêm vào sau khi key đã được tạo.

Lưu ý: Nếu không chỉ định tên method cụ thể nào, có nghĩa là tất cả các method đều có thể được call.

Cách dễ nhất để tạo một FunctionCall key với dApp của bạn là nhắc người dùng đăng nhập khi sử dụng NEAR Wallet thông qua WalletConnection của near-api-js. Điều này sẽ nhắc các người dùng cấp quyền truy cập và một khi đã được phê duyệt, một FunctionCall key sẽ được tạo. Key này chỉ được phép call các method trên contract mà đã chuyển hướng người dùng đến NEAR Wallet, với khoản allowance mặc định là 0.25 Ⓝ để trả phí gas cho các transaction. Khi các transaction phi tiền tệ được thực hiện với key này, bạn sẽ nhận thấy khoản allowance giảm đi và khi 0.25 Ⓝ bị burn hết, ta cần phải tạo một key mới. Nếu một request được tạo ra để transfer lượng token BẤT KỲ nào đó, với một FunctionCall key, người dùng sẽ được redirect lại về wallet để cấp phép cho transaction này. Bạn có thể thấy chức năng này hoạt động bằng cách dùng thử NEAR Guestbook.

Cách khác để tạo một FunctionAccess key là dùng add-key command của near-cli. Với near-cli bạn có thể chỉ định cụ thể hơn cho FunctionCall key, bằng cách chỉ cho phép nó call một số method cụ thể nào đó của contract, cũng như điều chỉnh lượng allowance tùy ý.

Các FunctionCall access key là một tính năng hữu dụng mạnh mẽ của NEAR, mở ra nhiều khả năng trong develop. Bạn không những có thể loại bỏ tình huống người dùng phải lặp đi lặp lại việc cấp phép cho các transaction nhỏ, mà thậm chí còn có thể cho phép người dùng tương tác với blockchain mà không cần phải tạo account. Điều này có thể được thực hiện bằng cách để dApp tự động tạo một FunctionCall key trỏ đến chính nó, chỉ bằng một cú nhấp chuột trên front-end của bạn, cho phép bất kỳ ai tương tác với dApp của bạn một cách liền mạch.


So sánh với Ethereum

Nếu bạn đã quen với develop trên Ethereum, bạn nên ghi chú nhanh về sự khác biệt của các account. Hình ảnh dưới đây tóm tắt một số điểm khác biệt chính.

Các account Ethereum so với NEAR

nguồn ảnh: medium.com/@clinder


Các Account và Contract

Mỗi account NEAR chỉ có thể có 1 smart contract. Đối với các application mà những user có thể tạo ra nhiều contract, bạn có thể tạo các "subaccount" có "master account" là account user. Định dạng của subaccount sẽ bao gồm một dấu chấm trong tên như contract1.user-A-account, contract2.user-A-account, v.v... NEAR hạn chế việc tạo account có dấu chấm trong tên để những account này chỉ có thể được tạo bởi user-A-account, giống như account người dùng là một top-level domain như your-company.com nếu bạn đã quen với mô hình này.

Sử dụng NEAR CLI, bạn có thể deploy các contract mới cho account của mình như sau:

near deploy --wasm-file path/to/contract.wasm --account-id contractAccount.developerAccount.testnet --master-account yourAccount.testnet

Lưu ý để thực hiện việc này, bạn sẽ cần đăng nhập bằng NEAR CLI và ủy quyền cho nó thay mặt bạn để sử dụng master account (YOUR_ACCOUNT.testnet). Tìm hiểu thêm về NEAR CLI tại đây

Nếu bạn có thắc mắc gì?

Hãy hỏi trên StackOverflow!