Solidity Compiler และความสัมพันธ์ EVM

Oct 19 2020

เมื่อฉันคอมไพล์โค้ดด้านล่างใน 0.6.6 มันไม่ได้คอมไพล์ (ต้องการสาธารณะ) แต่ใน 0.7.3 มันคอมไพล์

หากฉันทำให้โค้ดด้านล่างสามารถคอมไพล์ได้ (เพิ่มสาธารณะ) ใน 0.6.6 ฉันสามารถปรับใช้บน Rinkeby ได้สำเร็จ หากฉันรวบรวมโค้ดด้านล่างใน 0.7.3 ฉันสามารถปรับใช้กับ Rinkeby ได้สำเร็จ สิ่งนี้จะชี้ให้เห็นว่าไม่มีการเปลี่ยนแปลงใด ๆ กับ Rinkeby EVM มีเพียงวิธีที่คอมไพเลอร์เวอร์ชันบังคับใช้การจัดเรียง Bytecode มีการเปลี่ยนแปลง?

นี่หมายความว่าฉันสามารถใช้มาตรฐานคอมไพเลอร์ 0.6.6 เป็นเวลาอีกหลายปีบนท้องถนนและรหัสของฉันจะไม่พังหรือไม่? การทำซ้ำของคอมไพเลอร์จำนวนมากเป็นประสบการณ์ใหม่สำหรับฉันและฉันพยายามที่จะห่อหัวของฉัน

ขอบคุณ

contract A { constructor () payable {} }

คำตอบ

1 MikkoOhtamaa Oct 19 2020 at 17:44

คุณถูก. มักจะมีการเปลี่ยนแปลงเวอร์ชัน Solidity

  • การเปลี่ยนแปลงเชิงสังเคราะห์ (ทำให้ภาษาปลอดภัยขึ้น)

  • การเปลี่ยนแปลง ABI (ดู Ethereum smart contract ABI v2.0

การเปลี่ยนแปลง EVM จะเพิ่มคำสั่งใหม่เช่นคำสั่งสำหรับrevert(string)และcatchจากนั้นสิ่งเหล่านี้จะถูกนำไปใช้ใน Solidity เป็นโครงสร้างภาษา แต่การเปลี่ยนแปลงเหล่านี้หายากกว่า