Nhảy tới nội dung

caver.klay.Contract

Đố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.

hợp đồng mới


new caver.klay.Contract(jsonInterface [, address] [, options])

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êntypeMô tả
jsonInterfaceĐối tượngGiao diện JSON để khởi tạo hợp đồng
addressChuỗi(tùy chọn) Địa chỉ của hợp đồng thông minh cần gọi ra. Có thể thêm sau bằng cách sử dụng myContract.options.address = '0x1234..'
tùy chọnĐối tượng(tùy chọn) Các tùy chọn của hợp đồng. Xem bảng dưới đây để biết thông tin chi tiết.

Đối tượng tùy chọn chứa các mục sau:

TênLoạiMô tả
từChuỗi(tùy chọn) Địa chỉ mà từ đó các giao dịch sẽ được thực hiện.
giá gasChuỗi(tùy chọn) Giá gas tính bằng peb để sử dụng cho giao dịch.
gasSố(tùy chọn) Lượng gas tối đa được cung cấp cho một giao dịch (hạn mức gas).
dataChuỗi(tùy chọn) Mã byte của hợp đồng. Được sử dụng khi hợp đồng được triển khai.

Giá trị trả về

LoạiMô tả
Đối tượngĐối tượng hợp đồng với tất cả các phương pháp và sự kiện của nó.

Ví dụ


var myContract = new caver.klay.Contract([...], '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', {
from: '0x1234567890123456789012345678901234567891', // default from address
gasPrice: '25000000000' // default gas price in peb, 25 Gpeb in this case
});
var myContract = new caver.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, gasgasPrice được sử dụng làm giá trị dự phòng khi gửi giao dịch.

Thuộc tính

TênLoạiMô tả
addressChuỗiĐịa chỉ triển khai hợp đồng. Xem thêm options.address.
jsonInterfaceMảngGiao diện JSON của hợp đồng. Xem thêm options.jsonInterface.
dataChuỗiMã byte của hợp đồng. Được sử dụng khi hợp đồng được triển khai.
từChuỗiĐịa chỉ mà từ đó các giao dịch sẽ được thực hiện.
giá gasChuỗiGiá gas tính bằng peb để sử dụng cho giao dịch.
gasSốLượng gas tối đa được cung cấp cho một giao dịch (hạn mức gas).

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

TênLoạiMô tả
addressChuỗi | nullĐịa chỉ cho hợp đồng này hoặc null nếu địa chỉ chưa được đặt.

Ví dụ


> myContract.options.address;
'0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae'
// set a new address
> 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

TêntypeMô tả
jsonInterfaceMảngGiao diện JSON cho hợp đồng này. Đặt lại điều này sẽ tạo lại các phương pháp và sự kiện của đối tượng hợp đồng.

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}],
}]
// set a new interface
> myContract.options.jsonInterface = [...];

sao chép


myContract.clone()

Sao chép phiên bản hợp đồng hiện tại.

Tham số

Không có

Giá trị trả về

typeMô tả
Đối tượngPhiên bản hợp đồng được sao chép mới.

Ví dụ


> var contract1 = new caver.klay.Contract(abi, address, {gasPrice: '12345678', from: fromAddress});
> var contract2 = contract1.clone();
> contract2.options.address = address2;
> (contract1.options.address !== contract2.options.address);
true

triển khai


myContract.deploy(options)

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:

TênLoạiMô tả
dataChuỗiMã byte của hợp đồng.
đối sốMảng(tùy chọn) Các đối số được chuyển đến hàm tạo khi triển khai.

Giá trị trả về

Đối tượng: Đối tượng giao dịch:

LoạiMô tả
Mảngđối số: Các đối số được chuyển cho phương pháp trước đó. Chúng có thể được thay đổi.
Hàmsend: Sẽ triển khai hợp đồng. Promise sẽ được giải quyết với phiên bản hợp đồng mới, thay vì biên lai.
HàmestimateGas: Sẽ ước tính lượng gas sử dụng cho việc triển khai.
HàmencodeABI: Mã hóa ABI của quá trình triển khai, là dữ liệu hợp đồng + tham số hàm tạo.

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
});
// When the data is already set as an option to the contract itself
> 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
});
// Simply encoding
> myContract.deploy({
data: '0x12345...',
arguments: [123, 'My String']
})
.encodeABI();
'0x12345...0000012345678765432'
// Gas estimation
> myContract.deploy({
data: '0x12345...',
arguments: [123, 'My String']
})
.estimateGas(function(err, gas) {
console.log(gas);
});

phương pháp


myContract.methods.myMethod([param1 [, param2 [, ...]]])

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)

ex)


caver.klay.abi.encodeFunctionSignature('myMethod(uint256)')
> 0x58cf5f10
caver.utils.sha3('myMethod(uint256)').substr(0, 10)
> 0x58cf5f10

Tham số

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:

LoạiMô tả
Mảngđối số: Các đối số được chuyển cho phương pháp trước đó. Chúng có thể được thay đổi.
Hàmgọi: Sẽ gọi ra 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 giao dịch (không thể thay đổi trạng thái hợp đồng thông minh).
Hàmsend: 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ó thể thay đổi trạng thái hợp đồng thông minh).
HàmestimateGas: Sẽ ước tính lượng gas được sử dụng khi phương pháp sẽ được thực thi trên blockchain.
HàmencodeABI: Mã hóa ABI cho phương pháp này. Điều này có thể được gửi bằng cách sử dụng một giao dịch, gọi ra phương pháp hoặc chuyển sang một phương pháp hợp đồng thông minh khác làm đối số.

Ví dụ


// calling a method
> myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result) {
...
});
// or sending and using a 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()"
});
// or sending and using the events
> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.on('transactionHash', function(hash) {
...
})
.on('receipt', function(receipt) {
...
})
.on('error', console.error);

methods.myMethod.call


myContract.methods.myMethod([param1 [, param2 [, ...]]]).call(options [, callback])

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ố

TênLoạiMô tả
tùy chọnĐối tượng(tùy chọn) Các tùy chọn được sử dụng để gọi. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàm(tùy chọn) Lần gọi lại này sẽ được kích hoạt với kết quả thực thi phương pháp hợp đồng thông minh làm đối số thứ hai hoặc với một đối tượng lỗi làm đối số thứ nhất.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TêntypeMô tả
từChuỗi(tùy chọn) Địa chỉ nơi lệnh gọi “giao dịch” được thực hiện.
giá gasChuỗi(tùy chọn) Giá gas tính bằng peb để sử dụng cho lệnh gọi "giao dịch" này.
gasSố(tùy chọn) Lượng gas tối đa được cung cấp cho lệnh gọi "giao dịch" này (hạn mức gas).

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ụ


// using the callback
> myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, result) {
...
});
// using the promise
> myContract.methods.myMethod(123).call({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.then(function(result) {
...
});


// Solidity: MULTI-ARGUMENT RETURN
contract MyContract {
function myFunction() returns(uint256 myNumber, string myString) {
return (23456, "Hello!%");
}
}


> var MyContract = new caver.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 given
1: 'Hello!%'
}


// Solidity: SINGLE-ARGUMENT RETURN
contract MyContract {
function myFunction() returns(string myString) {
return "Hello!%";
}
}


> var MyContract = new caver.klay.Contract(abi, address);
> MyContract.methods.myFunction().call().then(console.log);
"Hello!%"

methods.myMethod.send


myContract.methods.myMethod([param1 [, param2 [, ...]]]).send(options [, callback])

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ố

TênLoạiMô tả
tùy chọnĐối tượngCác tùy chọn được sử dụng để gửi. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàm(tùy chọn) Hàm callback này sẽ được kích hoạt trước với "transactionHash" hoặc với một đối tượng lỗi làm đối số thứ nhất.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TênLoạiMô tả
từChuỗiĐịa chỉ mà từ đó giao dịch sẽ được gửi.
giá gasChuỗi(tùy chọn) Giá gas tính bằng peb để sử dụng cho giao dịch này.
gasSốLượng gas tối đa được cung cấp cho giao dịch này (hạn mức gas).
giá trịSố | Chuỗi | BN | BigNumber(tùy chọn) Giá trị được chuyển cho giao dịch tính bằng peb.

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:

TênLoạiMô tả
transactionHashChuỗiĐược kích hoạt ngay sau khi giao dịch được gửi và có sẵn hàm băm giao dịch.
biên laiĐối tượngĐược kích hoạt khi biên lai giao dịch có sẵn. Biên lai từ hợp đồng sẽ không có thuộc tính nhật ký mà thay vào đó là thuộc tính events với tên sự kiện là khóa và sự kiện là thuộc tính. Xem giá trị trả về của getPastEvents để biết thông tin chi tiết về đối tượng sự kiện được trả về.
lỗiLỗiĐược kích hoạt nếu xảy ra lỗi trong quá trình gửi. Khi xảy ra lỗi hết gas, tham số thứ hai sẽ là biên lai.

Ví dụ


// using the callback
> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'}, function(error, transactionHash) {
...
});
// using the 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()"
});
// using the event emitter
> myContract.methods.myMethod(123).send({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.on('transactionHash', function(hash) {
...
})
.on('receipt', function(receipt) {
console.log(receipt);
})
.on('error', console.error); // If there is an out-of-gas error, the second parameter is the receipt.
// receipt example
{
"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":[{...}, {...}] // If there are a multiple of the same events, they will be in an array.
}
}

methods.myMethod.estimateGas


myContract.methods.myMethod([param1 [, param2 [, ...]]]).estimateGas(options [, callback])

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ố

TênLoạiMô tả
tùy chọnĐối tượng(tùy chọn) Các tùy chọn được sử dụng để gọi. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàm(tùy chọn) Hàm callback này sẽ được kích hoạt với kết quả ước tính gas làm đối số thứ hai hoặc với một đối tượng lỗi làm đối số thứ nhất.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TêntypeMô tả
từChuỗi(tùy chọn) Địa chỉ nơi lệnh gọi "giao dịch" sẽ được thực hiện.
gasSố(tùy chọn) Lượng gas tối đa được cung cấp cho lệnh gọi "giao dịch" này (hạn mức gas). Đặt một giá trị cụ thể giúp phát hiện lỗi hết gas. Nếu dùng hết gas sẽ về số như cũ.
giá trịSố | Chuỗi | BN | BigNumber(tùy chọn) Giá trị được chuyển cho lệnh gọi "giao dịch" tính bằng peb.

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ụ


// using the callback
> myContract.methods.myMethod(123).estimateGas({gas: 5000000}, function(error, gasAmount) {
if(gasAmount == 5000000)
console.log('Method ran out of gas');
});
// using the promise
> myContract.methods.myMethod(123).estimateGas({from: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'})
.then(function(gasAmount) {
...
})
.catch(function(error) {
...
});

methods.myMethod.encodeABI


myContract.methods.myMethod([param1 [, param2[, ...]]]).encodeABI()

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ố.

Tham số

Không có

Giá trị trả về

LoạiMô tả
ChuỗiMã byte ABI được mã hóa để gửi qua giao dịch hoặc cuộc gọi.

Ví dụ


> myContract.methods.myMethod(123).encodeABI();
'0x58cf5f1000000000000000000000000000000000000000000000000000000000000007B'

một lần


myContract.once(event [, options], callback)

Đă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ố

TênLoạiMô tả
sự kiệnChuỗiTên của sự kiện trong hợp đồng hoặc "allEvents" để nhận tất cả các sự kiện.
tùy chọnĐối tượng(tùy chọn) Các tùy chọn được sử dụng cho việc triển khai. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàmLệnh gọi lại này sẽ được kích hoạt cho sự kiện đầu tiên làm đối số thứ hai hoặc lỗi làm đối số thứ nhất. Xem giá trị trả về của getPastEvents để biết thông tin chi tiết về cấu trúc sự kiện được trả về.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TênLoạiMô tả
bộ lọcĐối tượng(tùy chọn) Cho phép bạn lọc các sự kiện theo thông số được lập chỉ mục, ví dụ, {bộ lọc: {myNumber: [12,13]}} có nghĩa là tất cả các sự kiện trong đó "myNumber" là 12 hoặc 13.
chủ đềMảng(tùy chọn) Điều này cho phép bạn đặt chủ đề cho bộ lọc sự kiện theo cách thủ công. Nếu được cung cấp thuộc tính bộ lọc và chữ ký sự kiện, topic[0] sẽ không được đặt tự động.

Giá trị trả về

không xác định

Ví dụ


> myContract.once('MyEvent', {
filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23
}, function(error, event) { console.log(event); });
// event output example
{
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ố

TênLoạiMô tả
tùy chọnĐối tượng(tùy chọn) Các tùy chọn được sử dụng cho việc triển khai. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàm(tùy chọn) Lệnh gọi lại này sẽ được kích hoạt cho sự kiện đầu tiên làm đối số thứ hai hoặc lỗi làm đối số thứ nhất.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TênLoạiMô tả
bộ lọcĐối tượng(tùy chọn) Cho phép bạn lọc các sự kiện theo thông số được lập chỉ mục, ví dụ, {bộ lọc: {myNumber: [12,13]}} có nghĩa là tất cả các sự kiện trong đó "myNumber" là 12 hoặc 13.
fromBlockSố(tùy chọn) Số khối để bắt đầu sự kiện.
chủ đềMảng(tùy chọn) Điều này cho phép đặt chủ đề cho bộ lọc sự kiện theo cách thủ công. Nếu được cung cấp thuộc tính bộ lọc và chữ ký sự kiện, topic[0] sẽ không được đặt tự động.

Giá trị trả về

EventEmitter: Trình phát sự kiện có các sự kiện sau:

TênLoạiMô tả
dataĐối tượngKích hoạt từng sự kiện đến với đối tượng sự kiện làm đối số.
lỗiĐối tượngKích hoạt khi xảy ra lỗi trong đăng ký.

Cấu trúc của sự kiện trả về Đối tượng sẽ có dạng như sau:

TêntypeMô tả
sự kiệnChuỗiTên sự kiện.
chữ kýChuỗi | nullChữ ký sự kiện, null nếu đó là sự kiện ẩn danh.
addressChuỗiĐịa chỉ bắt nguồn từ sự kiện này.
returnValuesĐối tượngCác giá trị trả về đến từ sự kiện, ví dụ:, {myVar: 1, myVar2: '0x234...'}.
logIndexSốGiá trị nguyên chỉ vị trí chỉ mục sự kiện trong khối.
transactionIndexSốSố nguyên của vị trí chỉ mục giao dịch nơi sự kiện được tạo ra.
transactionHashChuỗi 32 byteHàm băm của khối mà sự kiện này đã được tạo. null khi nó vẫn đang chờ xử lý.
blockHashChuỗi 32 byteHàm băm của khối mà sự kiện này đã được tạo. null khi nó vẫn đang chờ xử lý.
blockNumberSốSố khối mà bản ghi này đã được tạo. Giá trị là null khi bản ghi vẫn đang chờ xử lý.
raw.dataChuỗiDữ liệu chứa tham số bản ghi không được lập chỉ mục.
raw.topicsMảngMột mảng có tối đa 4 chủ đề 32 byte, chủ đề 1-3 chứa các tham số được lập chỉ mục của sự kiện.
idChuỗiMã số định danh bản ghi. Mã định danh được tạo thông qua việc nối chuỗi "log_" với keccak256(blockHash + transactionHash + logIndex).substr(0, 8)

Ví dụ


> myContract.events.MyEvent({
filter: {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);
// event output example
{
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',
}

events.allEvents


myContract.events.allEvents([options] [, callback])

Tương tự như sự kiện nhưng nhận tất cả các sự kiện từ hợp đồng thông minh này. Theo tùy chọn, thuộc tính bộ lọc có thể lọc các sự kiện đó.

getPastEvents


myContract.getPastEvents(event [, options] [, callback])

Nhận các sự kiện trong quá khứ cho hợp đồng này.

Tham số

TêntypeMô tả
sự kiệnChuỗiTên của sự kiện trong hợp đồng hoặc "allEvents" để nhận tất cả các sự kiện.
tùy chọnĐối tượng(tùy chọn) Các tùy chọn được sử dụng cho việc triển khai. Xem bảng dưới đây để biết thông tin chi tiết.
callbackHàm(tùy chọn) Hàm callback này sẽ được kích hoạt với một mảng bản ghi sự kiện làm đối số thứ hai hoặc một lỗi làm đối số thứ nhất.

Đối tượng tùy chọn có thể chứa các thông tin sau:

TênLoạiMô tả
bộ lọcĐối tượng(tùy chọn) Cho phép bạn lọc các sự kiện theo thông số được lập chỉ mục, ví dụ, {bộ lọc: {myNumber: [12,13]}} có nghĩa là tất cả các sự kiện trong đó "myNumber" là 12 hoặc 13.
fromBlockSố(tùy chọn) Số khối để bắt đầu sự kiện.
toBlockSố(tùy chọn) Số khối để nhận các sự kiện lên đến (mặc định là "latest").
chủ đềMảng(tùy chọn) Điều này cho phép đặt chủ đề cho bộ lọc sự kiện theo cách thủ công. Nếu được cung cấp thuộc tính bộ lọc và chữ ký sự kiện, topic[0] sẽ không được đặt tự động.

Giá trị trả về

Promise trả về Mảng: Một mảng chứa các đối tượng sự kiện trong quá khứ, khớp với tên sự kiện và bộ lọc đã cho.

Ví dụ


> myContract.getPastEvents('MyEvent', {
filter: {myIndexedParam: [20,23], myOtherIndexedParam: '0x123456789...'}, // Using an array means OR: e.g. 20 or 23
fromBlock: 0,
toBlock: 'latest'
}, function(error, events) { console.log(events); })
.then(function(events) {
console.log(events) // same results as the optional callback above
});
[{
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'
},{
...
}]

Make this page better