帶寬?
每天每個(gè)賬號(hào)5000帶寬 抵扣手續(xù)費(fèi)
在波場(chǎng),除查詢之外的任何交易都需要消耗帶寬,系統(tǒng)每天給每個(gè)激活賬戶贈(zèng)送1500帶寬,用戶可以通過質(zhì)押trx獲得帶寬
能量?
可以自動(dòng)恢復(fù)
在波場(chǎng),智能合約的創(chuàng)建和調(diào)用都需要消耗能量,用戶可以通過質(zhì)押trx獲得能量。
pkgsign?
用于簽名和驗(yàn)證 npm 和 yarn 包的 CLI 工具。
pkgsign 是一個(gè)用于向 npm 和 yarn 包添加簽名以及使用已知簽名驗(yàn)證這些包的工具。為簡(jiǎn)單起見,它允許使用 PGP 私鑰或keybase.io對(duì)包進(jìn)行簽名。
git clone https://github.com/RedpointGames/pkgsign .
yarn # install dependencies
yarn verify # build pkgsign and verify the signature.json provided in this repository
# (should be signed by hachque at keybase.io)
yarn pack --filename=pkgsign.tgz
?# make an unsigned package for local use
npm install -g ./pkgsign.tgz
?# install pkgsign globally
驗(yàn)證包
要驗(yàn)證當(dāng)前包目錄的簽名狀態(tài),以及已安裝的所有包依賴項(xiàng),您可以使用:
pkgsign verify . --full
如果要驗(yàn)證包 tarball 的簽名,可以使用:
pkgsign verify mypackage-v1.0.0.tgz --package-name mypackage
簽署包
您可以使用keybase.io或 PGP 密鑰對(duì)對(duì)包進(jìn)行簽名,其中公鑰可在公共 HTTPS URL 上獲得。
如果您已安裝密鑰庫(kù)并在 PATH 中,則可以使用以下命令對(duì)當(dāng)前包目錄進(jìn)行簽名:
pkgsign sign .
或者,如果您想使用 keybase 對(duì) tarball 進(jìn)行簽名,您可以使用以下命令進(jìn)行簽名:
pkgsign sign mypackage-v1.0.0.tgz
如果你想用 PGP 密鑰對(duì)簽署一個(gè)包,你可以使用:
pkgsign sign --signer pgp --pgp-private-key-path ./privkey.key --pgp-private-key-passphrase mypassphrase --pgp-public-key-https-url https://example.com/mykey.asc .
要使用 PGP 密鑰對(duì)簽署 tarball,請(qǐng)傳遞 tarball 路徑而不是包目錄。
應(yīng)該注意的是,公鑰 HTTPS URL 被用作身份 - 如果 URL 發(fā)生變化,這與其他人簽署您的包是一樣的,并且 pkgsign 會(huì)認(rèn)為具有不同 URL 的包已被盜用。
tronide
tronbox
tronlink
TRC-721合約標(biāo)準(zhǔn)
TRC-721是在波場(chǎng)公鏈上發(fā)行非同質(zhì)化代幣(non-fungible token, NFT)一套標(biāo)準(zhǔn)接口,與ERC-721完全兼容。由于 TRC-721 中的每個(gè)代幣都是唯一的,因此 TRC-20 標(biāo)準(zhǔn)不足以處理 NFT。
必須實(shí)現(xiàn)的接口
每個(gè)符合TRC-721標(biāo)準(zhǔn)的智能合約都必須實(shí)現(xiàn)TRC721與TRC165接口。
Solidity
pragmasolidity^0.4.20;interfaceTRC721{eventTransfer(addressindexed_from,addressindexed_to,uint256indexed_tokenId);eventApproval(addressindexed_owner,addressindexed_approved,uint256indexed_tokenId);eventApprovalForAll(addressindexed_owner,addressindexed_operator,bool_approved);functionbalanceOf(address_owner)externalviewreturns(uint256);functionownerOf(uint256_tokenId)externalviewreturns(address);functionsafeTransferFrom(address_from,address_to,uint256_tokenId,bytesdata)externalpayable;functionsafeTransferFrom(address_from,address_to,uint256_tokenId)externalpayable;functiontransferFrom(address_from,address_to,uint256_tokenId)externalpayable;functionapprove(address_approved,uint256_tokenId)externalpayable;functionsetApprovalForAll(address_operator,bool_approved)external;functiongetApproved(uint256_tokenId)externalviewreturns(address);functionisApprovedForAll(address_owner,address_operator)externalviewreturns(bool);? }interfaceTRC165{functionsupportsInterface(bytes4interfaceID)externalviewreturns(bool);? }
balanceOf(address _owner)
返回指定賬戶擁有的 NFT 數(shù)量
ownerOf(uint256 _tokenId)
返回指定 NFT 的所有者
safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data)
轉(zhuǎn)讓 NFT 的所有權(quán)
safeTransferFrom(address _from, address _to, uint256 _tokenId)
轉(zhuǎn)讓 NFT 的所有權(quán)
transferFrom(address _from, address _to, uint256 _tokenId)
轉(zhuǎn)讓一個(gè)NFT的所有權(quán)(調(diào)用者必須確認(rèn)_to地址是否可以正常接收NFT,否則NFT會(huì)丟失)
approve(address _approved, uint256 _tokenId)
授予其他人 NFT 的控制權(quán)
setApprovalForAll(address _operator, bool _approved)
由第三方 (_operator) 授予/恢復(fù)對(duì)所有 NFT 的控制權(quán)
getApproved(uint256 _tokenId)
查詢某個(gè) NFT 的授權(quán)
isApprovedForAll(address _owner, address _operator)
查詢operator是否為業(yè)主授權(quán)地址
supportsInterface(bytes4 interfaceID)
查詢是否支持某個(gè)接口(interfaceID)
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId)
Approve 成功后會(huì)觸發(fā) Approval 事件
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId)
成功的 transferFrom 和 safeTransferFrom 將觸發(fā) Transfer 事件
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved)
setApprovalForAll 成功后會(huì)觸發(fā) ApprovalForAll 事件
合約如果需要接受安全轉(zhuǎn)賬,必須實(shí)現(xiàn)TRC721TokenReceiver接口:
Solidity
interfaceTRC721TokenReceiver{//This method will be triggered when the ‘_to’ is the contract address during the ‘safeTransferFrom’ execution, and the return value must be checked, If the return value is not? bytes4(keccak256("onTRC721Received(address,address,uint256,bytes)")) throws an exception. The smart contract which can receive NFT must implement the TRC721TokenReceiver interface.functiononTRC721Received(address_operator,address_from,uint256_tokenId,bytes_data)externalreturns(bytes4);? }
onTRC721Received(address _operator, address _from, uint256 _tokenId, bytes _data)
與safeTransferFrom方法配合使用,當(dāng)_to為合約地址時(shí),需要調(diào)用該方法并檢查返回值。 如果返回值不是 bytes4(keccak256("onTRC721Received(address,address,uint256,bytes)")) 將拋出異常。 可以接收 NFT 的智能合約必須實(shí)現(xiàn) TRC721TokenReceiver 接口。
??
注意
bytes4(keccak256("onTRC721Received(address,address,uint256,bytes))) 的哈希值與以太坊版本 bytes4(keccak256("onERC721Received(address,address,uint256,bytes))) 不同。 對(duì)于函數(shù)onTRC721Received的返回值,請(qǐng)使用0x5175f878而不是0x150b7a02。
metadata extension接口(可選)
metadata extension接口對(duì)于TRC-721智能合約來說是可選的,用戶可以查詢智能合約的名稱以及NFT代表的資產(chǎn)的詳細(xì)信息。
Solidity
interfaceTRC721Metadata{functionname()externalviewreturns(string_name);functionsymbol()externalviewreturns(string_symbol);functiontokenURI(uint256_tokenId)externalviewreturns(string);? }
name()
返回合約名稱
symbol()
返回合約代碼
tokenURI(uint256 _tokenId)
返回 _tokenId 對(duì)應(yīng)的外部文件的 URI。 外部資源文件需要包括名稱、描述和圖片。
enumeration extension接口(可選)
enumeration extension對(duì)于TRC-721智能合約是可選的,允許用戶的智能合約發(fā)布其NFT的完整列表并使其可見。
Solidity
interfaceTRC721Enumerable{functiontotalSupply()externalviewreturns(uint256);functiontokenByIndex(uint256_index)externalviewreturns(uint256);functiontokenOfOwnerByIndex(address_owner,uint256_index)externalviewreturns(uint256);? }
totalSupply()
返回 NFT 的總量
tokenByIndex(uint256 _index)
通過_index返回對(duì)應(yīng)的tokenId
tokenOfOwnerByIndex(address _owner, uint256 _index)
返回所有者擁有的 NFT 列表中索引對(duì)應(yīng)的 tokenId