แนะนำเว็บ remix.ethereum.org

Remix IDE เป็นเว็บโอเพ่นซอร์ส และ แพลตฟอร์ม แอปพลิเคชันเดสก์ท็อป มันส่งเสริมวงจรการพัฒนาที่รวดเร็วและมีชุดปลั๊กอินมากมายพร้อม GUI ที่ใช้งานง่าย สำหรับการเรียนรู้และพัฒนา Ethereum

Remix IDE เป็นส่วนหนึ่งของ Remix Project ซึ่งเป็นแพลตฟอร์มสำหรับเครื่องมือในการพัฒนาที่ใช้สถาปัตยกรรมปลั๊กอิน มันครอบคลุมโครงการย่อยรวมถึง Remix Plugin Engine, Remix Libs และแน่นอน Remix-IDE

Remix IDE เป็นเครื่องมือโอเพ่นซอร์สที่ทรงพลังที่ช่วยให้คุณเขียนสัญญา Solidity ได้โดยตรงจากเบราว์เซอร์

มันเขียนด้วย JavaScript และรองรับทั้งการใช้งานในเบราว์เซอร์ ในเบราว์เซอร์ แต่ทำงานภายในเครื่องและในเวอร์ชันเดสก์ท็อป

Remix IDE มีโมดูลสำหรับการทดสอบ การดีบัก และการปรับใช้สัญญาอัจฉริยะ และอื่นๆ อีกมากมาย

เอกสารชุดนี้ครอบคลุมคำแนะนำเกี่ยวกับวิธีใช้ Remix มีบทช่วยสอนเพิ่มเติมในบล็อกขนาดกลางของเราและในเครื่องมือบทช่วยสอนของเรา LearnEth ซึ่งอยู่ภายใน Remix IDE

ใช้งานผ่านเบราเซอร์ Remix IDE คลิ๊ก

ใช้งานบน PC Download Remix Desktop Latest Version ที่นี่

นี่คือคู่มือระดับเริ่มต้นสำหรับการใช้ WebSockets และ Alchemy เพื่อส่งคำขอไปยัง Ethereum blockchain

WEBSOCKETS กับ HTTP

WebSockets ต่างจาก HTTP ตรงที่คุณไม่จำเป็นต้องส่งคำขออย่างต่อเนื่องเมื่อคุณต้องการข้อมูลเฉพาะ WebSockets รักษาการเชื่อมต่อเครือข่ายสำหรับคุณ (หากทำถูกต้อง) และรับฟังการเปลี่ยนแปลง

เช่นเดียวกับการเชื่อมต่อเครือข่ายใดๆ คุณไม่ควรทึกทักเอาเองว่า WebSocket จะยังคงเปิดอยู่ตลอดไปโดยไม่มีการหยุดชะงัก แต่การจัดการการเชื่อมต่อที่หลุดและการเชื่อมต่อใหม่ด้วยมืออย่างถูกต้องอาจเป็นเรื่องยากที่จะทำให้ถูกต้อง ข้อเสียอีกประการหนึ่งของ WebSockets คือคุณไม่ได้รับรหัสสถานะ HTTP ในการตอบกลับ แต่จะมีเพียงข้อความแสดงข้อผิดพลาดเท่านั้น

​Alchemy Web3 จะเพิ่มการจัดการสำหรับความล้มเหลว WebSocket และลองกับการกำหนดค่าไม่จำเป็นต้อง

ลองเลย

วิธีที่ง่ายที่สุดในการทดสอบออก WebSockets คือการติดตั้งเครื่องมือบรรทัดคำสั่งสำหรับการทำ WebSocket ร้องขอเช่นwscat เมื่อใช้ wscat คุณสามารถส่งคำขอได้ดังนี้:

หมายเหตุ: หากคุณมีบัญชี Alchemy คุณสามารถแทนที่ demo ด้วยคีย์ API ของคุณเอง ลงทะเบียนสำหรับบัญชี Alchemy ฟรีที่นี่!

$ wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo

>  {"jsonrpc":  "2.0", "id": 0, "method":  "eth_gasPrice"}

<  {"jsonrpc":  "2.0", "result":  "0xb2d05e00", "id": 0}

วิธีใช้ WEBSOCKETS

ในการเริ่มต้น เปิด WebSocket โดยใช้ WebSocket URL สำหรับแอปของคุณ คุณสามารถค้นหา URL WebSocket ของแอปได้โดยเปิดหน้าของแอปใน แดชบอร์ด แล้วคลิกที่ "ดูคีย์" 

หมายเหตุ : โปรดทราบว่า URL ของแอปสำหรับ WebSockets จะแตกต่างจาก URL สำหรับคำขอ HTTP แต่สามารถค้นหาทั้งสองรายการได้โดยคลิก "ดูคีย์"

ภาพจาก https://ethereum.org/en/developers/tutorials/using-websockets/

API ใดๆ ที่ระบุไว้ในการอ้างอิง Alchemy APIสามารถใช้ได้ผ่าน WebSocket ในการดำเนินการดังกล่าว ให้ใช้เพย์โหลดเดียวกันกับที่จะส่งเป็นเนื้อหาของคำขอ HTTP POST แต่ให้ส่งเพย์โหลดนั้นผ่าน WebSocket แทน

ด้วย WEB3

การเปลี่ยนไปใช้ WebSockets ขณะใช้ไลบรารีของไคลเอ็นต์ เช่น Web3 นั้นเป็นเรื่องง่าย เพียงส่ง WebSocket URL แทน HTTP เมื่อสร้างอินสแตนซ์ไคลเอ็นต์ Web3 ของคุณ ตัวอย่างเช่น :

const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")

web3.eth.getBlockNumber().then(console.log) // -> 7946893

SUBSCRIPTION API

เมื่อเชื่อมต่อผ่าน WebSocket คุณอาจใช้สองวิธีเพิ่มเติม : eth_subscribe และ eth_unsubscribe. วิธีการเหล่านี้จะช่วยให้คุณรับเหตุการณ์เฉพาะและได้รับการแจ้งทันที

eth_subscribe

สร้างการสมัครใหม่สำหรับเหตุการณ์ที่ระบุ เรียนรู้เพิ่มเติมเกี่ยวกับ eth_subscribe

Parameters

1. Subscription types

2. Optional params

อาร์กิวเมนต์แรกระบุประเภทของเหตุการณ์ที่จะรับฟัง อาร์กิวเมนต์ที่สองมีตัวเลือกเพิ่มเติมซึ่งขึ้นอยู่กับอาร์กิวเมนต์แรก ประเภทคำอธิบายต่างๆ ตัวเลือก และ เพย์โหลดของเหตุการณ์ได้อธิบายไว้ด้านล่าง

Returns

ID การสมัครรับข้อมูล : ID นี้จะแนบไปกับกิจกรรมที่ได้รับ และยังใช้เพื่อยกเลิกการสมัครรับข้อมูลโดยใช้ eth_unsubscribe.

Subscription events

ในขณะที่การสมัครใช้งานอยู่ คุณจะได้รับกิจกรรมที่เป็น Object ที่มีฟิลด์ต่อไปนี้:

  • jsonrpc : "2.0"
  • method : "eth_subscription" 
  • params : Object ที่มีฟิลด์ต่อไปนี้ :
    • subscription : ID การสมัครรับข้อมูลที่ส่งคืนโดยการ call eth_subscription ซึ่งสร้างการสมัครรับข้อมูลนี้
    • result : ออบเจ็กต์ที่มีเนื้อหาแตกต่างกันไปตามประเภทของการสมัครรับข้อมูล

Subscription types

1. alchemy_newFullPendingTransactions

ส่งกลับข้อมูลธุรกรรมสำหรับธุรกรรมทั้งหมดที่เพิ่มไปยังสถานะรอดำเนินการ ประเภทการสมัครนี้สมัครรับธุรกรรมที่รอดำเนินการ ซึ่งคล้ายกับการเรียกใช้ Web3 มาตรฐาน web3.eth.subscribe("pendingTransactions") แต่แตกต่างกันตรงที่ปล่อย ข้อมูลธุรกรรมทั้งหมด มากกว่าเพียงแค่แฮชของธุรกรรม

ตัวอย่าง:

>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["alchemy_newFullPendingTransactions"]}

<  {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}
<  {
      "jsonrpc":"2.0",
      "method":"eth_subscription",
      "params":{
          "result":{
          "blockHash":null,
          "blockNumber":null,
          "from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",
          "gas":"0x1adb0",
          "gasPrice":"0x7735c4d40",
          "hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",
"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",
          "nonce":"0x0",
          "to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",
          "transactionIndex":null,
          "value":"0x0",
          "v":"0x26",
          "r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",
          "s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},
          "subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"
      }
  }

2. newHeads

ปล่อยเหตุการณ์ทุกครั้งที่มีการเพิ่มส่วนหัวใหม่ลงใน chain รวมทั้งในระหว่างการจัดโครงสร้าง chain ใหม่

เมื่อเกิดการปรับโครงสร้างองค์กรใหม่ การสมัครสมาชิกนี้จะปล่อยเหตุการณ์ที่มีส่วนหัวใหม่ทั้งหมดสำหรับ chain ใหม่ โดยเฉพาะอย่างยิ่ง ซึ่งหมายความว่าคุณอาจเห็นส่วนหัวหลายรายการที่มีความสูงเท่ากัน และเมื่อเกิดเหตุการณ์นี้ส่วนหัวถัดไปควรใช้เป็นส่วนหัวที่ถูกต้องหลังจากการจัดระเบียบใหม่

ตัวอย่าง:

>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["newHeads"]}

<  {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
<  {
  "jsonrpc":  "2.0",
  "method":  "eth_subscription",
  "params":  {
      "result":  {
          "difficulty":  "0x15d9223a23aa",
          "extraData":  "0xd983010305844765746887676f312e342e328777696e646f7773",
          "gasLimit":  "0x47e7c4",
          "gasUsed":  "0x38658",
          "logsBloom":
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "miner":  "0xf8b483dba2c3b7176a3da549ad41a48bb3121069",
          "nonce":  "0x084149998194cc5f",
          "number":  "0x1348c9",
          "parentHash":  "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
          "receiptRoot":  "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
          "sha3Uncles":  "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
          "stateRoot":  "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
          "timestamp":  "0x56ffeff8",
          "transactionsRoot":  "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
      },
  "subscription":  "0x9ce59a13059e417087c02d3236a0b1cc"
  }
}

3. log

ส่ง log ซึ่งเป็นส่วนหนึ่งของบล็อกที่เพิ่มใหม่ซึ่งตรงกับเกณฑ์ตัวกรองที่ระบุ

เมื่อมีการปรับโครงสร้าง Chain เกิดขึ้น การบันทึกซึ่งเป็นส่วนหนึ่งของบล็อกใน Chain เก่าจะถูกปล่อยออกมาอีกครั้งกับสถานที่ตั้ง removed true นอกจากนี้ log ที่เป็นส่วนหนึ่งของบล็อกใน Chain ใหม่จะถูกปล่อยออกมา ซึ่งหมายความว่าเป็นไปได้ที่จะเห็น log สำหรับธุรกรรมเดียวกันหลายครั้งในกรณีที่มีการจัดโครงสร้างใหม่

พารามิเตอร์

  1. วัตถุที่มีฟิลด์ต่อไปนี้:
    • adddress (ทางเลือก): สตริงที่แสดงที่อยู่หรืออาร์เรย์ของสตริงดังกล่าว
      • เฉพาะบันทึกที่สร้างจากที่อยู่เหล่านี้เท่านั้นที่จะถูกปล่อยออกมา
    • topics: อาร์เรย์ของตัวระบุหัวข้อ
      • ตัวระบุหัวข้อแต่ละตัวคือnullสตริงที่แสดงหัวข้อ หรืออาร์เรย์ของสตริง
      • แต่ละตำแหน่งในอาร์เรย์ซึ่งไม่nullจำกัดการบันทึกที่ส่งออกไปเฉพาะผู้ที่มีหนึ่งในหัวข้อที่กำหนดในตำแหน่งนั้น

ตัวอย่างของข้อกำหนดเฉพาะของหัวข้อ :

  • []: หัวข้อใดก็ได้ที่อนุญาต
  • [A]: A อยู่ในตำแหน่งแรก (และอะไรก็ได้หลังจากนั้น)
  • [null, B]: อะไรก็ได้ที่อยู่ในตำแหน่งแรกและ B ในตำแหน่งที่สอง (และอะไรก็ได้หลังจากนั้น)
  • [A, B]: A ในตำแหน่งแรกและ B ในตำแหน่งที่สอง (และอะไรก็ได้หลังจากนั้น)
  • [[A, B], [A, B]]: (A หรือ B) ในตำแหน่งแรกและ (A หรือ B) ในตำแหน่งที่สอง (และอะไรก็ได้หลังจากนั้น)

ตัวอย่าง:

>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["logs",  {"address":  "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",  "topics":  ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}

<  {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
<  {
  "jsonrpc":  "2.0",
  "method":  "eth_subscription",
  "params":  {
      "subscription":  "0x4a8a4c0517381924f9838102c5a4dcb7",
      "result":  {
          "address":  "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",
          "blockHash":  "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",
          "blockNumber":  "0x29e87",
          "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",
          "logIndex":"0x0",
          "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],
          "transactionHash":  "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",
          "transactionIndex":  "0x0"
      }
  }
}

eth_unsubscribe

ยกเลิกการสมัครรับข้อมูลที่มีอยู่เพื่อไม่ให้มีการส่งกิจกรรมเพิ่มเติม

Parameters

  1. ID การสมัครรับข้อมูลที่ส่งกลับจากการeth_subscribeโทรก่อนหน้านี้

Returns

trueหากการสมัครสมาชิกถูกยกเลิกสำเร็จ หรือfalseหากไม่มีการสมัครสมาชิกที่มี ID ที่ระบุ

ตัวอย่าง :

Request

curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
-X POST
-H "Content-Type: application/json"
-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'

Result

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}

Sign up with Alchemy for free,

check out our documentation,

and for the latest news, follow us on Twitter.

 

เรียบเรียงข้อมูลจากเว็บไซต์ ethereum.org > developers > tutorials

แปลไทยโดย GridsMicro

DApps คืออะไร?

DApps ย่อมาจาก Decentralized Application ต่างจากแอปพลิเคชันปกติทั่วไปที่ทั้งหมดนั้นจะอยู่ในรูปแบบ Centralized ซึ่งข้อมูลต่างๆ จะถูกเก็บไว้ในเซิฟเวอร์เพียงที่เดียว ทำให้อาจเกิดปัญหาได้ แต่ DApps จะอยู่ในรูปแบบ Decentralized และข้อมูลทั้งหมดจะถูกบันทึกเข้ารหัสลงไปใน Blockchain เพื่อแก้ปัญหาดังกล่าว

เช่นเดียวกันกับแอปพลิเคชันทั่วไป DApps สามารถประยุกต์สร้างอะไรได้หลาย ๆ อย่าง เช่นแอปสำหรับการทำธุรกรรม หรือการชำระเงินแบบ Peer-to-peer ที่ไม่จำเป็นต้องพึ่งตัวกลาง หรือแอปที่ใช้ Smart Contract ในการทำกิจกรรมต่าง ๆ เช่นบริจาคระดมทุน หากระดมทุนไม่ถึงเป้า ก็จะทำการกระขายคืนเงินทั้งหมดทันที เป็นต้น

ข้อดีของ DApps

  • ความเสถียร : DApps เก็บข้อมูลอยู่ใน Blockchain ทำให้ข้อมูลเหล่านั้นไม่ได้เก็บไว้ที่เซิฟเวอร์เพียที่เดียว ดังนั้นหากเซิฟเวอร์นั้นล่ม DApps ก็ยังคงสามารถทำงานได้อย่างปกติ
  • ความน่าเชื่อถือ : ภายใน DApps จะมีการบันทึกและเข้ารหัสลงใน Blockchain ทำให้ไม่สามารถเกิดการแก้ไขปลอมแปลงได้ ทำให้มีความน่าเชื่อถือ
  • ไม่สามารถถูกควบคุม หรือแทรกแซงได้ : DApps ถูกวางกฎ และโปรแกรมทุกอย่างไว้เรียบร้อยแล้ว คนใดคนหนึ่งไม่สามารถเข้าไปปรับเปลี่ยนระบบ หรือกฎได้ตามใจชอบ 

ข้อเสียของ DApps

  • ฐานคนใช้น้อย : DApps ที่ใช้เทคโนโลยี Blockchain มันจำเป็นต้องพึ่งพาผู้ใช้คนอื่นๆ ถึงจะทำให้เครือข่ายทำงานได้อย่างเต็มประสิทธิภาพ
  • ต้องพึ่ง Ethereum : DApps ทำงานอยู่บนเครือข่าย Ethereum ซึ่ง Ethereum ยังคงเจอปัญหาเรื่องการ Scaling ที่ยังไม่สามารถแก้ไขได้ ทำให้เมื่อมีผู้ใช้งาน ทำธุรกรรมจำนวนมากๆ บน DApps จะใช้เวลาในการทำธุรกรรม และมีค่าธรรมเนียมในการทำธุรกรรม ที่มากขึ้น ส่งผลให้เกิดปัญหาที่ย้อนแยงในตัวของมันเอง
  • ต้องได้รับความร่วมมือจากผู้ใช้งาน: รวมทั้งเมื่อมีการอัพเดทซอฟท์แวร์ หรือการแก้ Bug เกิดขึ้นภายใน DApps ทุกๆ Node ในเครือข่ายจำเป็นต้องอัพเดทตาม 

DApps 

DApps มีให้ใช้หลายเฟรมเวิร์กสามารถเลือกใช้ได้ตามจุดประสงค์ของผู้ใช้ สามารถเข้าไปดูรายการ DApps ได้ที่ สภาพแวดล้อมการพัฒนา

 

การอัพเกรด Ethereum 2.0

อัพเกรด Ethereum ให้สูงขึ้นไปอีกขั้น

eth2 คืออะไร?

eth2 หมายถึงชุดของการอัพเกรดที่เชื่อมต่อถึงกันซึ่งจะทำให้ Ethereum สามารถปรับขนาดได้มากขึ้น ปลอดภัยยิ่งขึ้น และยั่งยืนมากขึ้น การอัพเกรดเหล่านี้ถูกสร้างขึ้นโดยหลายทีมจากทั่วทั้งระบบนิเวศของ Ethereum แม้ว่าแต่ละรายการจะทำงานพร้อมกัน แต่ก็มีการพึ่งพาบางอย่างที่กำหนดว่าจะปรับใช้เมื่อใด
 
ข้อมูลเพิ่มเติม Ethereum 2.0
ติดตามข้อมูลข่าวสาร ได้ที่ blog.ethereum.org