Terra 네트워크 지능형 계약 마이그레이션
18728 단어 coswasmterremoney
https://medium.com/terra-money/columbus-5-launches-welcome-to-the-future-of-terra-8a9ebfa570c5
หนึ่งในการอัพเดทคือการ 흔들리는cosmwasmไปเป็น 버전 0.16(ซึ่ง 잔돈กระจาย ) เรามาดูกันว่า เราต้องเปลี่ยนอะไรบ้างจาก 계약 버전เดิม ( 0.10 )
นอกจากนี้ 특징.ที่เพิ่มมาก็เยอะมาก เพราะมัน 업그레이드กันข้ามมา 6 버전ถ้าต้องการไล่อ่าน ตามไปที่ https://github.com/CosmWasm/cosmwasm/blob/main/CHANGELOG.md ได้เลย
ของ Avareum protocol พังไป 240 errors 😱
มีอะไรเปลี่ยนไปบ้าง?
체인 계약 마이그레이션 지원
อันนี้คือที่รอคอยมานาน ซึ่งพึ่งมาเพิ่มใน coswasm 0.14ทำให้ 계약สามารถ 옮기다กันเองได้แบบ 사슬 위
โดยที่ก่อนหน้านี้ จะจำกัดเรื่องการ 마이그레이션 계약สามารถทำได้โดยผ่าน 외부 체인 APIอย่างเดียว ทำให้ต้องเป็นหน้าที่ของ 소유자ของ 계약เท่านั้นที่สามารถ 옮기다ได้และหากมีหลาย 계약ก็ต้องทำทีละอันจาก 사슬 밖
จาก 특징.นี้ทำให้เราสามารถ 계약 세트 배포ที่มี 논리학ในการ ทำ 옮기다ออกมาและสั่ง 옮기다ที่เดียวจาก 사슬 밖จาก 입구점ที่เดียว
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn migrate(deps: DepsMut, _env: Env, msg: MigrateMsg) -> Result<Response, ContractError> {
let cfg = query_config(&deps.as_ref())?;
Ok(Response::new().add_messages(vec![
CosmosMsg::Wasm(WasmMsg::Migrate {
contract_addr: cfg.executor_mirror_address.into(),
new_code_id: msg.sub_contract.executor_mirror_code_id,
msg: to_binary(&msg.sub_contract.executor_mirror_migrate_msg)?,
}),
CosmosMsg::Wasm(WasmMsg::Migrate {
contract_addr: cfg.executor_anchor_address.into(),
new_code_id: msg.sub_contract.executor_anchor_code_id,
msg: to_binary(&msg.sub_contract.executor_anchor_migrate_msg)?,
}),
CosmosMsg::Wasm(WasmMsg::Migrate {
contract_addr: cfg.executor_terraswap_address.into(),
new_code_id: msg.sub_contract.executor_terraswap_code_id,
msg: to_binary(&msg.sub_contract.executor_terraswap_migrate_msg)?,
}),
]))
}
วิธี 바인딩 엔트리 포인트เปลี่ยนใหม่
จากปกติก่อนหน้านี้ การกำหนด 입구점ทั้งหมดจะอยู่ที่
lib.rs
ให้ลบตรงนั้นทิ้งออกให้หมดแล้วไปใช้ 웅대하다กับ 기능ชื่อ entry_point
แทนพร้อมกับ เปลี่ยนชื่อ
init
เป็น instantiate
และ handle
เป็น execute
https://github.com/CosmWasm/cosmwasm/blob/main/CHANGELOG.md#changed-6
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut,
_env: Env,
_info: MessageInfo,
msg: InitMsg,
) -> Result<Response, ContractError>
....
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
deps: DepsMut,
env: Env,
info: MessageInfo,
msg: ExecuteMsg,
) -> Result<Response, ContractError> {
...
외부 APIเปลี่ยนเป็น 부사장และ 타락
จากการใช้งาน
Extern
กับ 범용ทาง cosmwasmได้เปลี่ยนมาเป็น 유형 별칭ทำให้ ปกติที่ใช้ Extern
ให้เปลี่ยนเป็น Deps
และ mut Extern
เปลี่ยนเป็น DepsMut
Reference
ตัวอย่าง
จาก
pub fn init<S: Storage, A: Api, Q: Querier>(
deps: &mut Extern<S, A, Q>,
_env: Env,
msg: InitMsg,
) -> StdResult<InitResponse> {
เปลี่ยนเป็นpub fn init(
deps: DepsMut,
_env: Env,
msg: InitMsg,
) -> StdResult<InitResponse> {
จากอันนี้ การ 자금을 얻다ที่ส่งมาจะเปลี่ยนจาก 들어가다ที่ 컨디션ไปผ่านตัว 메시지แทนเพิ่ม 논거ให้กับ 계약 엔트리 포인트(초기화, 핸들, 마이그레이션)
모델
Env
ถูกนำเอา 발신인ออกและย้ายไปไว้ใน 타입ชื่อ MessageInfo
เข้าใจว่าเพื่อให้เป็นระเบียบมากขึ้นเฉยๆตัวอย่าง
จาก
pub fn handle(
deps: DepsMut,
env: Env,
msg: HandleMsg,
) -> StdResult<HandleResponse> {
.....
let senderAddr = env.message.sender;
เปลี่ยนเป็นpub fn handle(
deps: DepsMut,
env: Env,
info: MessageInfo,
msg: HandleMsg,
) -> StdResult<HandleResponse> {
.....
let senderAddr = info.sender;
마이그레이션 응답, HandlerResponse, InitResponseกลายเป็น 응수เฉยๆ และเป็น 끝이 없다
มีการรวม 응수ต่างๆเป็นอันเดียว และใช้ 고급 함수ในการ 지정 매개변수ต่างๆให้กับ 응답(ไม่อนุญาตให้สร้าง 응수แบบ 구조 표현식แล้ว
ซึ่งผมชอบนะอันนี้ ดูกระชับขึ้นเยอะเลย ( ถึงจะต้องแก้ 계약เก่าเยอะหน่อย )
จาก
use cosmwasm_std::{ HandleResponse };
.....
Ok(HandleResponse {
messages: msgs,
data: Option::None,
attributes: logs,
});
เปลี่ยนเป็นuse cosmwasm_std::{ Response };
.....
Ok(Response::new()
.add_attributes(logs)
.add_messages(msgs))
로그 APIเปลี่ยนชื่อเป็น 등록 정보
버전 0.16เอา 저널ออกหมดเลย เปลี่ยนไปเรียกว่า 등록 정보แทน รวมถึงการ 로그로 돌아가기จาก 응수ก็จะเปลี่ยนไปใช้
add_attributes
หรือ add_attribute
จาก 응수แทน ( เพราะว่า HandleResponse
ถูก 반대, 반대하다ไปแล้วจากด้านบน-- let logs: Vec<LogAttribute> = vec![log("label","value")];
++ let attrs: Vec<Attribute> = vec![attr("label", "value")];
-- HandleResponse { log: logs }
++ Response::new().add_attributes(attrs);
HumanAddrถูก 반대, 반대하다
ใน API 버전ใหม่จะมี
Addr
มาแทน HumanAddr
โดยที่ 미국 석유 학회ส่วนใหญ่ ที่ใช้ HumanAddr
จะเปลี่ยนไปใช้ String
แทนแล้วเช่น
WasmMsg:Execute
จากปรกติ รับ contarct_addr
เป็น HumanAddr
ตอนนี้จะรับเป็น String
แทน ซึ่งหากเราตัดสินใจใช้ Addr
ก็จะมี to_string
ให้ใช้เปลี่ยนจาก Addr
เป็น String
-- let contract_addr: HumanAddr;
++ let contract_addr: Addr;
WasmMsg::Execute {
-- contract_addr: contract_addr,
++ contract_addr: contract_addr.to_string(),
}
หลักๆเราต้อง 옮기다ตัว 계약ประมานนี้ ส่วนใหญ่ยังไม่มีอะไรที่ 잔돈ถึงกับขนาดต้องออกแบบ 계약ใหม่ส่วนอื่นๆ นอกจากนี้ลึกๆ ตามไปไล่อ่านที่นี่ได้เลยจ้า
https://github.com/CosmWasm/cosmwasm/blob/main/MIGRATING.md
Reference
이 문제에 관하여(Terra 네트워크 지능형 계약 마이그레이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zapkub/terra-network-smartcontract-migration-4i56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)