체인의정석

Oasys testnet 사용방법 본문

블록체인/퍼블릭 블록체인

Oasys testnet 사용방법

체인의정석 2024. 5. 24. 12:07
728x90
반응형

특이점

1. 일단 오아시스 메인넷 자체에는 임의적인 컨트렉트 배포가 불가능하고 등록된 공식 컨트렉트들을 통해서만 함수호출을 통해 미리 정해진 규격의 erc20 및 721 배포가 가능. (오아시스 메인넷에서는 web2x 서비스 불가)

2. SandVerse 라는 테스트용도의 레이어 2에서는 컨트렉트 배포가 가능하지만 공식 문서상 해당 레이어2는 테스트넷 용도이며 컨트렉트 배포가 가능한 나머지 체인(레이어2, verse)들은 미리 해당 체인의 관리자들이 수락을 해준 화이트리스트에 등록된 지갑 주소만 컨트렉트 배포가 가능.

3. 레이어2에 해당되는 각 verse들은 가스비가 무료라고 되어 있으며 테스트넷에서 배포시에도 가스비가 들지 않음. 나머지 레이어2 체인들도 스캔등을 보면 가스비가 0. (대신 구글폼 신청을 통한 지갑 주소 등록이 필요, 어떤 레이어2를 사용할지 정해지면 더 확실히 파악 가능)

참고자료

1. 레이어2 verse 설명 

https://docs.oasys.games/docs/architecture/verse-layer/verse-layer

"Free Gas For Users

On Oasys verse,users don't have to pay gas fees, which is paid by verse operators. By taking transacation fees from verse builders, it can maintain sustainablity.

Verse Builder

Anyone can build a verse if they deposit more than 1 million OAS on the verse contract. On the Verse-Layer, a Verse Builder takes care of node operations and is required to operate the server properly. Also, you can configure what smart contracts can be deployed and what transactions can be executed without using any gas.

2. 레이어1 hub 설명

https://docs.oasys.games/docs/architecture/hub-layer/hub-layer

 

Smart Contract

Deployment of new smart contracts to the Hub-Layer is not allowed by design. Only smart contracts accepted by Oasys will be deployed. Transaction execution can be done by paying gas in OAS. Accepted smart contracts are those related to FT/NFT, Rollup, and Bridge.

3. SandVerse 설명

https://docs.oasys.games/docs/verse-developer/sandverse

4. SandVerse 튜토리얼 

https://docs.oasys.games/docs/verse-developer/game/1-1

배포 진행

아래 예제가 가장 잘되어 있음

Client

https://github.com/oasysgames/dino-runner-client

 

GitHub - oasysgames/dino-runner-client: Dino Runner is a sample project which demonstrates how to create a simple browser game u

Dino Runner is a sample project which demonstrates how to create a simple browser game using blockchain functionality - oasysgames/dino-runner-client

github.com

Contract

https://github.com/oasysgames/dino-runner-solidity

 

GitHub - oasysgames/dino-runner-solidity: This repository contains the hardhat project and smart contracts for Dino Runner

This repository contains the hardhat project and smart contracts for Dino Runner - oasysgames/dino-runner-solidity

github.com

hardhat config
*가스비가 0이라는 점이 타 체인과 차이점, faucet도 따로 필요없다.(오아시스 레이어2 기준, 오아시스 레이어1은 함부로 배포가 안되도록 설정되어 있음)

require("@nomiclabs/hardhat-waffle");

// Create secrets.json file with private key and remove comment out
//const { PRIVATE_KEY } = require('./secrets.json');

// This is a sample Hardhat task. To learn how to create your own go to
// https://hardhat.org/guides/create-task.html
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => {
  const accounts = await hre.ethers.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

/**
 * @type import('hardhat/config').HardhatUserConfig
 */
module.exports = {
  solidity: "0.8.4",
  defaultNetwork: "hardhat",
  networks: {
    hardhat: {
    },
    hmvtest: {
      url: 'https://rpc.testnet.oasys.homeverse.games/',
      chainId: 40875,
      gasPrice: 0,
      accounts: [
        // Provide your private key here
        // Remove comment out to use value from secrets.json
        //PRIVATE_KEY
      ],
    },
  },
};

*Oasys는 2024년 6/5기준 최신 버전 컨트렉트 및 hardhat은 작동하지 않아 2년전 dino runner에서 따로 모듈들을 뽑아내 테스트한 결과 아래와 같은 버전으로 해야 다 작동이 가능한 것을 확인

  "devDependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.5",
    "@nomiclabs/hardhat-waffle": "^2.0.3",
    "chai": "^4.3.6",
    "ethereum-waffle": "^3.4.0",
    "ethers": "^5.6.0",
    "hardhat": "^2.9.1"
  },
  "dependencies": {
    "@account-abstraction/contracts": "^0.6.0",
    "@openzeppelin/contracts": "^4.7.0",
    "@openzeppelin/contracts-upgradeable": "^4.7.0",
    "@openzeppelin/hardhat-upgrades": "^1.21.0",
    "base64-sol": "^1.1.0",
    "dotenv": "^16.4.5"
  }

배포 코드는 해당 버전에서 다음과 같다.

const { ethers, upgrades } = require("hardhat");
require("dotenv").config();

async function main() {
  const deployer = new ethers.Wallet(process.env.PK, ethers.provider);
  console.log("Deployer address: ", deployer.address);
  const ExContract = await ethers.getContractFactory("ExContract");
  const exContract = await upgrades.deployProxy(ExContract, [], {
    initializer: "initialize",
  });
  await exContract.deployed();
  console.log("exContract:", exContract.address);
  console.log("exContract owner:", await exContract.owner());

  const ExContract2 = await ethers.getContractFactory("ExContract2");
  const exContract2 = await ExContract2.deploy(exContract.address);
  console.log("🛠️ Deploy exContract2");
  await exContract2.deployed();
  console.log("exContract2:", exContract2.address);

2년전 버전으로 업그레이더블, 일반 배포 문법을 다음과 같이 사용하고 오픈제플린도 2년전 버전으로 모두 호환하여 줄 시 오류가 발생하지 않는다.

*최신 버전으로는  특정 op코드가 작동하지 않는 것으로 판단되며, 별도의 업데이트 전까지는 구버전으로 하는 것을 추천. 다중 체인 배포시 따로 브랜치를 파거나 레포를 파는 형태로 진행중이다.

 

728x90
반응형
Comments