Web3 Voice🎙
0:1dcf78cf29067ef73b4dc5f617025f67ff434b7cbaff33769ffc2d650ab2d2a0
KWT 0:1dcf78cf29067ef73b4dc5f617025f67ff434b7cbaff33769ffc2d650ab2d2a0 судя по ответам распределение не имеет значение т.к. из за особенностей голосования влияние китов минимизировано, но в общем интересно какова сложность такой задачи
json https://raw.githubusercontent.com/trisolaris-labs/tokens/master/lists/1313161554/list.json при это в свапалке у пользователя есть возможность его заменить на свой, еще видно что центром является репозиторий trustwallet https://github.com/trustwallet/assets/tree/master/blockchains в котом мы можем видеть разные блокчейны в том числе TON но нет Free TON.tron, terra, solana и другие.... осмелюсь предположить для того чтобы не выглядеть "странным русским блокчейном"
Free TON, но не все логично если мы в стандарте не предусмотрели явного способа указывать иконку, то надо проставить привычный способ ее получить, в таком случае для разработчиков кошельком, и других инструментов будет возможность предсказуемым способом получать дополнительную информацию по ассетам, при этом использовать уже проверенные и принятые сообществом пути.U+1F4A9 в лучшем случае, кроме этого по PR https://github.com/trustwallet/assets/pull/6321 становится понятно что эта процедура не бесплатная, в этом контексте "только спасибо скажут" начинает звучать иначе
{
"name": "getKitty",
"inputs": [
{"name":"answerId","type":"uint32"},
{"name":"kittyId","type":"uint256"}
],
"outputs": [
{"name":"dna","type":"uint256"}
]
}
function checkContract(address addr) public {
Sdk.getAccountType(tvm.functionId(checkRootContract), addr);
}
function checkRootContract(int8 acc_type) public {
MenuItem[] _items;
if (acc_type == -1 || acc_type == 0 || acc_type == 2) {
_items.push(MenuItem("Deploy Token", "", tvm.functionId(deployRoot)));
} else {
_items.push(MenuItem("Mint Nft", "", tvm.functionId(deployNft)));
_items.push(MenuItem("Get all Nft", "", tvm.functionId(getAllNftData)));
_items.push(MenuItem("Set burn price", "", tvm.functionId(setBurnPrice)));
}
Menu.select("==What to do?==", "", _items);
}
query {
aggregateAccounts(
filter: {
code_hash: {
in: [
"d80dd077e56dd76af65b163b6da94cca9d2c8e62740d09d98f9a4459ac069958"
]
}
}
fields: [{ field: "balance", fn: SUM }]
)
}
exchangeRate одно payload от @kokkekpek пока не понятно как сделать, с другой стороны возникает философский: как работать с геттерами контрактов? которые не responsible или если они будут responsible но не будут проксировать payload
pragma ton-solidity >= 0.45.0;
contract Jumper {
constructor(uint i) public {
tvm.accept();
new Jumper {
code: tvm.code(),
pubkey: i,
value: address(this).balance - 0.01 ton
}(i + 1);
}
}
_tmp_expected_callback_sender
function reserve0() public {
doHardWork();
// Contract reserves exactly 1 ton.
// If contract balance is less than 1 ton, an exception is thrown at the action phase.
tvm.rawReserve(1 ton, 0);
msg.sender.transfer({value: 0, flag: 128}); // sends all rest balance
// after a successful call of `reserve0` contract's balance will equal to 1 ton
}
function reserve1() public {
doHardWork();
// Contract reserves all but 1 ton from the remaining balance of the account.
// If contract balance is less than 1 ton, an exception is thrown at the action phase.
tvm.rawReserve(1 ton, 1);
msg.sender.transfer({value: 0, flag: 128});
// Let's consider that the contract had balance equal to 5 ton before the function `reserve1`
// was called by an internal message with value of 0.5 ton.
// `doHardWork` function call consumes gas, which is roughly equal to 0.2 ton in workchain.
// After compute phase contract's balance will be approximately equal to 5 + 0.5 - 0.2 = 5.3 ton.
// `rawReserve` will reserve 5.3 - 1 = 4.3 ton.
// `msg.sender.transfer` will send `all_balance` - `reserved_value` = 5.3 - 4.3 = 1 ton
// Finally, after a successful call of `reserve1` contract's balance will be approximately equal to 4.3 ton
}
function reserve2() public {
doHardWork();
// contract reserves at most 1 ton. Never throws exceptions
tvm.rawReserve(1 ton, 0 + 2);
msg.sender.transfer({value: 0, flag: 128}); // sends all rest balance
// after a successful call of `reserve2` contract's balance will be less than or equal to 1 ton
}
function reserve3() public {
doHardWork();
// Contract reserves all but 1 ton from the remaining balance of the account
// or 0 ton if remaining balance less than 1 ton.
// Never throws exceptions.
tvm.rawReserve(1 ton, 1 + 2);
msg.sender.transfer({value: 0, flag: 128});
}
function reserve12() public {
doHardWork();
tvm.rawReserve(0.3 ton, 4 + 8);
msg.sender.transfer({value: 0, flag: 128});
// Let's consider that the contract had balance equal to 5 ton before the function `reserve4`
// was called by an internal message with value of 0.5 ton.
// It means that original_balance (see API.md for details) is approximately equal to 5 ton.
// `tvm.rawReserve` will reserve 5 - 0.3 = 4.7 tons
// Throws an exception if at the action phase there is not enough funds.
}
Rust то ключевое слово target вместо node_modules тоже хорошая метла, в моем случае еще 106Gb свободно... в общем остается поставить виртуальку и к стриму готов
Plutus язык контрактов Cardano, по сути это диалект Haskell
Djed — алгоритмический стейблкоин на Plutus
исходник: https://github.com/input-output-hk/plutus/blob/plutus-pab/v0.0.1/plutus-use-cases/src/Plutus/Contracts/Stablecoin.hsHaskell и могу на нем писать и читать, но пока не достаточно чтобы этот контракт был для меня хоть сколько-то понятен, казалось бы ну что тут расстраиваться, надо продолжать изучать и все будет понятно, но при этом Cardano во главу угла ставить решения проблем в Ethereum, одна из которых сделать контракты более надежными и безопасными.PingPong https://github.com/input-output-hk/plutus/blob/plutus-pab/v0.0.1/plutus-use-cases/src/Plutus/Contracts/PingPong.hs это должен быть аналогом этого контракта на Solidity https://github.com/Azure-Samples/blockchain/blob/135171/blockchain-workbench/application-and-smart-contract-samples/ping-pong-game/ethereum/PingPongGame.sol
Rust тут https://github.com/chjj/mako видят преимущество создать ноду на C...
tondev sol set --compiler 0.21.0 --stdlib 0.21.0
это маленький шаг маленького сообщества и большой шаг... не придумал...tondev sol set --compiler 0.21.0 --stdlib 0.21.0 --linker 0.12.0Почему важно возможность получить тот же codeHash?
gate.io, пока без подробностей//SPDX-License-Identifier: Unlicense
pragma ton-solidity >= 0.51.0;
pragma AbiHeader expire;
enum Status {
Opened,
Refunded,
Closed
}
contract Escrow {
event EscrowStatus(
Status status,
address payer,
address payee,
address releaser,
uint256 amount
);
mapping(uint256 => bool) private _releaseList;
modifier accept() {
tvm.accept();
_;
}
function depositFor(address payee, address releaser)
accept
external
payable
{
require(msg.value > 0, 1000, "Escrow: Must be more zero");
uint256 escrowId = _createEscrowId(
msg.sender,
payee,
releaser,
msg.value
);
require(!_releaseList[escrowId], 1000, "Escrow: Not released");
_releaseList[escrowId] = true;
emit EscrowStatus(
Status.Opened,
msg.sender,
payee,
releaser,
msg.value
);
}
function release(
address payer,
address payee,
uint128 amount
)
accept
external
{
_release(payer, payee, msg.sender, amount);
payee.transfer(amount, true, 3);
emit EscrowStatus(Status.Closed, payer, payee, msg.sender, amount);
}
function refund(
address payee,
address releaser,
uint128 amount
)
accept
external
{
_release(msg.sender, payee, releaser, amount);
msg.sender.transfer(amount, true, 3);
emit EscrowStatus(Status.Refunded, msg.sender, payee, releaser, amount);
}
function _release(
address payer,
address payee,
address releaser,
uint256 amount
) private {
uint256 escrowId = _createEscrowId(payer, payee, releaser, amount);
require(_releaseList[escrowId], 1000, "Escrow: Not find release");
delete _releaseList[escrowId];
}
function _createEscrowId(
address payer,
address payee,
address releaser,
uint256 amount
) private pure returns (uint256) {
TvmBuilder builder;
builder.store(payer, payee, releaser, amount);
return tvm.hash(builder.toCell());
}
}
0:4677beb06991e23f7f7a54b54232a572ce87461548463ef4cb7e443946526e1c
0:066c96b9e6a23b8caa8cb24ef91991bfa11b2d4c3033f14f521b2be972a7e189
0:8e2d10bbba16eebd4700791f31053ad5c94049bdb1e736f1460822eba37edc70
0:363ab410d2972bdfac97506a021bb616c9f93b4fc2d2dfa23706e26bd7334336
0:0d46b0b1f76581b893d7002a58cd72f7844aa05eca318d0f353a623da6c3615d
0:dea68d5ba2998b48ffd98e8bc3c8b1716aaa2a41fe3ca6c40a1dd9a3d9334e88
0:ff72a20b00b647eb536bf2f9e7f5f07bc20ff5d6a93342e81e39d6db7e20fe59
0:0dc78eee043a0c1d301552ac0b3c131a22c7212189a646b10a0059aef3515e9b
0:0dd48e220aef64f79fd563e150be51d12515623b6344da03c97e70ef6801a139
0:a0c77f59b513c41f9d93a2e2144625cab74983c6da4afa0ddcbdee0e36c3efff
0:e9c6d46c7f8fa0f13221dd221db51d6aac7e51a2b75d65dad81dc1ce2fbd285e
0:a7cba00b37563e504d879338f09594a4be88f240b016843c1ad03a11538d0a9b
0:3addd84bf73267312a477049fd9b8db761bf39c585c150f8e6f9451347af2b6c
0:af22c44fc447f8497219969d6faed49894584f0de66a208956aec20c1ed47530
0:3e32e9fe51f9309e6859114a4d43792f21eaae25b277f43ba029f601e3443734
0:d99c8ba078cc1a84adefb3e27e175415d6190889c4b67aebaf30f01f8df2658d
0:a4d22aa240098b6af9f1f1eb477d02bbff8c684a1cc4484a91f6a110badbad35
0:48f273bbe1e2ff24e4519b0383987839806986767daf97cd0ae35c10c2025cba