Neler yeni
Türkiye’nin Lider Kripto Para Forumu

Blockchain dünyasının Türkçe Wikipedia'sına hoş geldiniz!

Hemen ücretsiz üye olun ve kayıt olduğunuz anda coin kazanmaya başlayın. Kendi konularınızı paylaşın, diğer üyelerle etkileşim kurun ve dilediğiniz zaman coinlerinizi çekin.

Katılmak için şimdi harekete geçin!

Nasıl Paramı nasıl kurtarabilirim?

Merhabalar.

Bir contract adresim var buraya Avax C Chain ağından ödeme gelince contract sahibine yani bana bu parayı iletiyor ama yanlışıkla bir kişi parayı BNB ağındaki Avax olarak yollamış ve bu para şuan contract adresinde bu para nasıl kurtarılır? Sonuçta kurucu hesap benim
 
bence deploye etmeden burada paylaşın incelyelim.
10/?


Kod:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract TENETToken is Initializable, UUPSUpgradeable, OwnableUpgradeable {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;
    address public owner;

    AggregatorV3Interface internal priceFeed;

    mapping(address => uint256) public balanceOf;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event AvaxPriceUpdated(uint256 oldPrice, uint256 newPrice);
    event PriceFeedUpdated(address indexed oldFeed, address indexed newFeed);

    function initialize() public initializer {
        __Ownable_init();
        __UUPSUpgradeable_init();

        name = "Animoca";
        symbol = "MOCA";
        decimals = 18;
        totalSupply = 10000000 * 10**uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
        owner = msg.sender;

        // Chainlink'in AVAX/USD fiyat feed'ini kullan
        priceFeed = AggregatorV3Interface(0x0A77230d17318075983913bC2145DB16C7366156);
    }

    function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}

    function getLatestAvaxPrice() public view returns (uint256) {
        (,int price,,,) = priceFeed.latestRoundData();
        // Price is typically in 8 decimal places, so adjust to 2 decimal places
        return uint256(price) / 10**6;
    }

    function transfer(address _to, uint256 _avaxAmount) public returns (bool success) {
        uint256 avaxPrice = getLatestAvaxPrice();
        uint256 tokenAmount = (_avaxAmount * avaxPrice) / 0.01; // Adjusted for 0.01$
        require(balanceOf[msg.sender] >= tokenAmount, "Insufficient balance");
        require(_to != address(0), "Invalid address");

        balanceOf[msg.sender] -= tokenAmount;
        balanceOf[_to] += tokenAmount;
        emit Transfer(msg.sender, _to, tokenAmount);
        return true;
    }

    function updatePriceFeed(address newFeed) public onlyOwner {
        address oldFeed = address(priceFeed);
        priceFeed = AggregatorV3Interface(newFeed);
        emit PriceFeedUpdated(oldFeed, newFeed);
    }

    receive() external payable {
        require(msg.value > 0, "No AVAX sent");

        uint256 avaxPrice = getLatestAvaxPrice();
        uint256 tokenAmount = (msg.value * avaxPrice) / 0.01; // Adjusted for 0.01$

        require(balanceOf[owner] >= tokenAmount, "Insufficient tokens in contract");
        balanceOf[owner] -= tokenAmount;
        balanceOf[msg.sender] += tokenAmount;

        emit Transfer(owner, msg.sender, tokenAmount);

        payable(owner).transfer(msg.value);
    }
}
 
ve bunlar var ama gram anlamadım:


Kod:
Proxy Admin Contract
Proxy kontratını yönetmek için bir ProxyAdmin kontratı kullanabilirsiniz:

solidity
Kodu kopyala
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";

contract Admin is ProxyAdmin {}
Proxy Contract
Proxy kontratını oluşturmak için TransparentUpgradeableProxy kontratını kullanabilirsiniz:

solidity
Kodu kopyala
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";

contract Proxy is TransparentUpgradeableProxy {
    constructor(address _logic, address admin_, bytes memory _data)
        TransparentUpgradeableProxy(_logic, admin_, _data) {}
}
Deployment Script
Deployment sırasında Proxy ve Admin kontratlarını nasıl deploy edeceğinizi ve kullanacağınızı belirten bir örnek:

javascript
Kodu kopyala
const { ethers, upgrades } = require("hardhat");

async function main() {
    // Deploy the Admin contract
    const Admin = await ethers.getContractFactory("Admin");
    const admin = await Admin.deploy();
    await admin.deployed();
    console.log("Admin deployed to:", admin.address);

    // Deploy the implementation contract
    const TENETToken = await ethers.getContractFactory("TENETToken");
    const tenetToken = await upgrades.deployProxy(TENETToken, [], { initializer: 'initialize', admin: admin.address });
    await tenetToken.deployed();
    console.log("TENETToken deployed to:", tenetToken.address);
}

main().catch((error) => {
    console.error(error);
    process.exitCode = 1;
});
Bu güncellemelerle, kontratınız artık güncellenebilir ve updatePriceFeed fonksiyonu ile yeni bir fiyat feed'i ekleyebilirsiniz. Proxy pattern kullanımı sayesinde kontratın gelecekteki yükseltmeleri de kolayca yapılabilir.
 
10/?


Kod:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";

contract TENETToken is Initializable, UUPSUpgradeable, OwnableUpgradeable {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;
    address public owner;

    AggregatorV3Interface internal priceFeed;

    mapping(address => uint256) public balanceOf;

    event Transfer(address indexed from, address indexed to, uint256 value);
    event AvaxPriceUpdated(uint256 oldPrice, uint256 newPrice);
    event PriceFeedUpdated(address indexed oldFeed, address indexed newFeed);

    function initialize() public initializer {
        __Ownable_init();
        __UUPSUpgradeable_init();

        name = "Animoca";
        symbol = "MOCA";
        decimals = 18;
        totalSupply = 10000000 * 10**uint256(decimals);
        balanceOf[msg.sender] = totalSupply;
        owner = msg.sender;

        // Chainlink'in AVAX/USD fiyat feed'ini kullan
        priceFeed = AggregatorV3Interface(0x0A77230d17318075983913bC2145DB16C7366156);
    }

    function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}

    function getLatestAvaxPrice() public view returns (uint256) {
        (,int price,,,) = priceFeed.latestRoundData();
        // Price is typically in 8 decimal places, so adjust to 2 decimal places
        return uint256(price) / 10**6;
    }

    function transfer(address _to, uint256 _avaxAmount) public returns (bool success) {
        uint256 avaxPrice = getLatestAvaxPrice();
        uint256 tokenAmount = (_avaxAmount * avaxPrice) / 0.01; // Adjusted for 0.01$
        require(balanceOf[msg.sender] >= tokenAmount, "Insufficient balance");
        require(_to != address(0), "Invalid address");

        balanceOf[msg.sender] -= tokenAmount;
        balanceOf[_to] += tokenAmount;
        emit Transfer(msg.sender, _to, tokenAmount);
        return true;
    }

    function updatePriceFeed(address newFeed) public onlyOwner {
        address oldFeed = address(priceFeed);
        priceFeed = AggregatorV3Interface(newFeed);
        emit PriceFeedUpdated(oldFeed, newFeed);
    }

    receive() external payable {
        require(msg.value > 0, "No AVAX sent");

        uint256 avaxPrice = getLatestAvaxPrice();
        uint256 tokenAmount = (msg.value * avaxPrice) / 0.01; // Adjusted for 0.01$

        require(balanceOf[owner] >= tokenAmount, "Insufficient tokens in contract");
        balanceOf[owner] -= tokenAmount;
        balanceOf[msg.sender] += tokenAmount;

        emit Transfer(owner, msg.sender, tokenAmount);

        payable(owner).transfer(msg.value);
    }
}

---——----------------

[/QUOTE]
Hocam bu kontrata token fiyatlandırmanı 0.01 avaxlamaya sabitlemeye çalışmışsın ama sabitleyemezsin bunu belirtmek istiyorum.+ sabitleme işlemin hatalı. Derleme hatalarına neden olacaktır ayrıca mantık hatalarına. Ne kadar likidite edersen o kadar fiyatlandırma yapabilirsin.. Bu mantığı unutma ayrıca Bi takım güvenlik önlemleri almalısın. Saldırılara açık bir kontrat.. SatoshiTürk hocam benden daha prof yorumlar. Ben yanında amatör kalırım. Ayrıca neden avax? Niye Bsc ağı değil yada eter ağı değil?
 
Ya hocam 😀 Likitide ekleme işini geçtim, salla onu. Avax ağını ise seviyorum bnb ağını daha önce hiç kullanmadım. 0.01$ üzerinden contract yollasın tokenleri. + Nasıl bi saldırı olabilir ki? Likitide eklemicem sadece deploy etmeyi düşünüyorum artık.
 

Forum istatistikleri

Konular
13.993
Mesajlar
69.648
Kullanıcılar
6.996
Son üye
mascotwar
Geri
Üst