Terra 네트워크 지능형 계약 마이그레이션

18728 단어 coswasmterremoney
Terra 네트워크มีอัพเดทครั้งใหญ่ เพื่อเพิ่มประสิทธิภาพของ 네트워킹แต่ในบทความนี้ ผมจะไม่พูดเรื่อง 네트워킹แต่จะไป 모으다เรื่อง 지능형 계약แทน โดยถ้าอยากรู้ว่ามีอะไรเปลี่ยนไปบ้าง ลองดูได้ลิ้งนี้แทน
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 เป็น executehttps://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

    좋은 웹페이지 즐겨찾기