Đối tượng caver.klay.Contract giúp dễ dàng tương tác với các hợp đồng thông minh trên blockchain Klaytn. Khi tạo một phiên bản hợp đồng mới, bạn cung cấp cho hợp đồng này giao diện JSON của hợp đồng thông minh tương ứng và caver sẽ tự động chuyển đổi tất cả lệnh gọi thành lệnh gọi ABI cấp thấp qua RPC cho bạn.
Điều này cho phép bạn tương tác với các hợp đồng thông minh như thể chúng là các đối tượng JavaScript.
Tạo một phiên bản hợp đồng mới với tất cả các phương pháp và sự kiện được xác định trong đối tượng giao diện JSON của hợp đồng đó.
Tham số
Tên
type
Mô tả
Đối tượng tùy chọn chứa các mục sau:
Tên
Loại
Mô tả
Giá trị trả về
Loại
Mô tả
Ví dụ
var myContract =newcaver.klay.Contract([...],'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', { from:'0x1234567890123456789012345678901234567891',// default from address gasPrice:'25000000000'// default gas price in peb, 25 Gpeb in this case});var myContract =newcaver.klay.Contract([...],'myContract', { from:'0x1234567890123456789012345678901234567891',// default from address gasPrice:'25000000000'// default gas price in peb, 25 Gpeb in this case});
tùy chọn
myContract.options
Đối tượng options cho phiên bản hợp đồng. from, gas và gasPrice được sử dụng làm giá trị dự phòng khi gửi giao dịch.
Thuộc tính
Ví dụ
>myContract.options;{ address:'0x1234567890123456789012345678901234567891', jsonInterface: [...], from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', gasPrice:'10000000000000', gas:1000000}>myContract.options.from ='0x1234567890123456789012345678901234567891'; // default from address>myContract.options.gasPrice ='25000000000000'; // default gas price in peb>myContract.options.gas =5000000; // provide as fallback always 5M gas
options.address
myContract.options.address
Địa chỉ được sử dụng cho phiên bản hợp đồng myContract này. Tất cả các giao dịch do caver-js tạo ra từ hợp đồng này sẽ chứa địa chỉ này dưới dạng "địa chỉ đến". Địa chỉ được lưu trữ ở dạng chữ thường.
Thuộc tính
Ví dụ
>myContract.options.address;'0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae'// đặt địa chỉ mới>myContract.options.address ='0x1234FFDD...';
options.jsonInterface
myContract.options.jsonInterface
Đối tượng giao diện JSON bắt nguồn từ ABI của hợp đồng này myContract.
Thuộc tính
Ví dụ
>myContract.options.jsonInterface;[{"type":"function","name":"foo","inputs": [{"name":"a","type":"uint256"}],"outputs": [{"name":"b","type":"address"}] },{"type":"event","name":"Event""inputs": [{"name":"a","type":"uint256","indexed":true},{"name":"b","type":"bytes32","indexed":false}], }]// đặt giao diện mới>myContract.options.jsonInterface = [...];
Triển khai hợp đồng cho blockchain Klaytn. Sau khi triển khai thành công, promise sẽ được giải quyết bằng một phiên bản hợp đồng mới.
Tham số
options: đối tượng tùy chọn được sử dụng cho việc triển khai:
Giá trị trả về
Đối tượng: Đối tượng giao dịch:
Ví dụ
>myContract.deploy({ data:'0x12345...', arguments: [123,'My String'] }).send({ from:'0x1234567890123456789012345678901234567891', gas:1500000, value:0, },function(error, transactionHash) { ... }).on('error',function(error) { ... }).on('transactionHash',function(transactionHash) { ... }).on('receipt',function(receipt) {console.log(receipt.contractAddress) // contains the new contract address }).then(function(newContractInstance) {console.log(newContractInstance.options.address) // instance with the new contract address });// Khi dữ liệu đã được đặt làm tùy chọn cho chính hợp đồng>myContract.options.data ='0x12345...';>myContract.deploy({ arguments: [123,'My String'] }).send({ from:'0x1234567890123456789012345678901234567891', gas:1500000, value:0, }).then(function(newContractInstance) {console.log(newContractInstance.options.address) // instance with the new contract address });// Mã hóa đơn giản>myContract.deploy({ data:'0x12345...', arguments: [123,'My String'] }).encodeABI();'0x12345...0000012345678765432'// Ước tính gas>myContract.deploy({ data:'0x12345...', arguments: [123,'My String'] }).estimateGas(function(err, gas) {console.log(gas); });
Tạo một đối tượng giao dịch cho phương pháp đó, sau đó có thể gọi, gửi, ước tính hoặc mã hóa dưới dạng ABI.
Các phương pháp của hợp đồng thông minh này có sẵn thông qua:
Tên: myContract.methods.myMethod(123)
Tên có tham số: myContract.methods['myMethod(uint256)'](123)
Chữ ký*: myContract.methods['0x58cf5f10'](123)
Điều này cho phép gọi ra các hàm có cùng tên nhưng khác tham số từ phiên bản hợp đồng JavaScript.
cf) *Chữ ký hàm (Bộ chọn hàm)
Bốn byte đầu tiên của dữ liệu lệnh gọi cho một lệnh gọi hàm chỉ định hàm sẽ được gọi ra.
Đây là bốn byte (left, high-order in big-endian) đầu tiên của hàm băm Keccak-256 (SHA-3) của chữ ký của hàm.
Chữ ký hàm có thể được tạo bằng 2 phương pháp khác nhau.
1. caver.klay.abi.encodeFunctionSignature('funcName(paramType1,paramType2,...)')2. caver.utils.sha3('funcName(paramType1,paramType2,...)').substr(0, 10)
Các tham số của bất kỳ phương pháp nào phụ thuộc vào các phương pháp hợp đồng thông minh, được xác định trong giao diện JSON.
Giá trị trả về
Đối tượng: Đối tượng giao dịch:
Ví dụ
// gọi ra một phương pháp>myContract.methods.myMethod(123).call({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'},function(error, result) {... });// hoặc gửi và sử dụng promise>myContract.methods.myMethod(123).send({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).then(function(receipt) {// biên lai cũng có thể là một phiên bản hợp đồng mới, khi đến từ một "contract.deploy({...}).send()" });// hoặc gửi và sử dụng các sự kiện>myContract.methods.myMethod(123).send({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).on('transactionHash',function(hash) {... }).on('receipt',function(receipt) {... }).on('error',console.error);
Sẽ gọi ra một phương pháp "hằng số" và thực thi phương pháp hợp đồng thông minh của nó trong Máy ảo Klaytn mà không gửi bất kỳ giao dịch nào. Lưu ý rằng việc gọi không thể thay đổi trạng thái hợp đồng thông minh.
Tham số
Đối tượng tùy chọn có thể chứa các thông tin sau:
Giá trị trả về
Promise trả về Mixed: Giá trị trả về(s) của phương pháp hợp đồng thông minh. Nếu trả về một giá trị duy nhất, nó sẽ được trả về như cũ. Nếu có nhiều giá trị trả về, chúng sẽ được trả về dưới dạng một đối tượng có thuộc tính và chỉ số.
Ví dụ
// sử dụng hàm callback>myContract.methods.myMethod(123).call({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'},function(error, result) {... });// sử dụng promise>myContract.methods.myMethod(123).call({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).then(function(result) {... });
// Tính vững chắc: TRẢ LẠI MULTI-ARGUMENT
contract MyContract {
function myFunction() returns(uint256 myNumber, string myString) {
return (23456, "Hello!%");
}
}
>var MyContract =newcaver.klay.Contract(abi, address);>MyContract.methods.myFunction().call().then(console.log);Result { myNumber:'23456', myString:'Hello!%',0: '23456',// these are here as fallbacks if the name is not known or given1: 'Hello!%'}
// Tính vững chắc: TRẢ LẠI MỘT ĐỐI SỐ
contract MyContract {
function myFunction() returns(string myString) {
return "Hello!%";
}
}
Sẽ gửi một giao dịch đến hợp đồng thông minh và thực hiện phương pháp của nó. Lưu ý rằng điều này có thể thay đổi trạng thái hợp đồng thông minh.
Tham số
Đối tượng tùy chọn có thể chứa các thông tin sau:
Giá trị trả về
callback sẽ trả về hàm băm giao dịch 32 byte.
PromiEvent: Bộ phát hiệu ứng sự kiện kết hợp promise. Sẽ được giải quyết khi có biên lai giao dịch hoặc nếu send() này được gọi ra từ someContract.deploy(), thì promise sẽ được giải quyết với phiên bản hợp đồng mới. Ngoài ra, các sự kiện sau đây có sẵn:
Ví dụ
// sử dụng hàm callback> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, transactionHash) {
... });// sử dụng promise>myContract.methods.myMethod(123).send({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).then(function(receipt) {// receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()" });// sử dụng bộ phát sự kiện>myContract.methods.myMethod(123).send({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).on('transactionHash',function(hash) {... }).on('receipt',function(receipt) {console.log(receipt); }).on('error',console.error); // Nếu bị lỗi hết gas thì thông số thứ 2 là hóa đơn.// mẫu hóa đơn{"transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b","transactionIndex": 0,"blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46","blockNumber": 3,"contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe","gasUsed": 30234,"events": {"MyEvent": { returnValues: { myIndexedParam:20, myOtherIndexedParam:'0x123456789...', myNonIndexParam:'My String' }, raw: { data:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385']
}, event:'MyEvent', signature:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', logIndex:0, transactionIndex:0, transactionHash:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', blockHash:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', blockNumber:1234, address:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' },"MyOtherEvent": {... },"MyMultipleEvent":[{...}, {...}] // Nếu có nhiều sự kiện giống nhau, chúng sẽ nằm trong một mảng. }}
Sẽ ước tính mức gas mà việc thực thi phương pháp sẽ sử dụng khi được thực thi trong Máy ảo Klaytn. Ước tính có thể khác với gas thực tế được sử dụng khi gửi giao dịch sau này, vì trạng thái của hợp đồng thông minh có thể khác vào thời điểm đó.
Tham số
Đối tượng tùy chọn có thể chứa các thông tin sau:
Giá trị trả về
Promise trả về Number - đơn vị gas đã sử dụng cho lệnh gọi/giao dịch mô phỏng.
Ví dụ
// sử dụng promise>myContract.methods.myMethod(123).estimateGas({gas:5000000},function(error, gasAmount) {if(gasAmount ==5000000)console.log('Method ran out of gas'); });// sử dụng promise>myContract.methods.myMethod(123).estimateGas({from:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}).then(function(gasAmount) {... }).catch(function(error) {... });
Mã hóa ABI cho phương pháp này. Điều này có thể được sử dụng để gửi một giao dịch, gọi ra một phương pháp hoặc chuyển nó vào một phương pháp hợp đồng thông minh khác làm đối số.
Đăng ký một sự kiện và hủy đăng ký ngay sau sự kiện hoặc lỗi đầu tiên. Sẽ chỉ kích hoạt cho một sự kiện duy nhất.
Tham số
Đối tượng tùy chọn có thể chứa các thông tin sau:
Giá trị trả về
không xác định
Ví dụ
>myContract.once('MyEvent', { bộ lọc: {myIndexedParam: [20,23], myOtherIndexedParam:'0x123456789...'},// Using an array means OR: e.g. 20 or 23 },function(error, event) { console.log(event); });// ví dụ đầu ra sự kiện{ returnValues: { myIndexedParam:20, myOtherIndexedParam:'0x123456789...', myNonIndexParam:'My String' }, raw: { data:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385']
}, event:'MyEvent', signature:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', logIndex:0, transactionIndex:0, transactionHash:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', blockHash:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', blockNumber:1234, address:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}
sự kiện
myContract.events.MyEvent([options][, callback])
Đăng ký một sự kiện.
Tham số
Đối tượng tùy chọn có thể chứa các thông tin sau:
Giá trị trả về
EventEmitter: Trình phát sự kiện có các sự kiện sau:
Cấu trúc của sự kiện trả về Đối tượng sẽ có dạng như sau:
Ví dụ
>myContract.events.MyEvent({ bộ lọc: {myIndexedParam: [20,23], myOtherIndexedParam:'0x123456789...'},// Using an array means OR: e.g. 20 or 23 fromBlock:0 },function(error, event) { console.log(event); }).on('data',function(event){console.log(event); // same results as the optional callback above }).on('error',console.error);// ví dụ đầu ra sự kiện{ returnValues: { myIndexedParam:20, myOtherIndexedParam:'0x123456789...', myNonIndexParam:'My String' }, raw: { data:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385']
}, event:'MyEvent', signature:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', logIndex:0, transactionIndex:0, transactionHash:'0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385', blockHash:'0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', blockNumber:1234, address:'0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', id:'log_41d221bc',}